tinybase 4.0.0-beta.2 → 4.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/persister-automerge.cjs +1 -0
- package/lib/cjs/persister-automerge.cjs.gz +0 -0
- package/lib/cjs/persister-browser.cjs +1 -1
- package/lib/cjs/persister-browser.cjs.gz +0 -0
- package/lib/cjs/persister-file.cjs +1 -1
- package/lib/cjs/persister-file.cjs.gz +0 -0
- package/lib/cjs/persister-remote.cjs +1 -1
- package/lib/cjs/persister-remote.cjs.gz +0 -0
- package/lib/cjs/persister-yjs.cjs +1 -1
- package/lib/cjs/persister-yjs.cjs.gz +0 -0
- package/lib/cjs/persisters.cjs +1 -1
- package/lib/cjs/persisters.cjs.gz +0 -0
- package/lib/cjs/tinybase.cjs +1 -1
- package/lib/cjs/tinybase.cjs.gz +0 -0
- package/lib/cjs/tools.cjs +1 -1
- package/lib/cjs/tools.cjs.gz +0 -0
- package/lib/cjs-es6/persister-automerge.cjs +1 -0
- package/lib/cjs-es6/persister-automerge.cjs.gz +0 -0
- package/lib/cjs-es6/persister-browser.cjs +1 -1
- package/lib/cjs-es6/persister-browser.cjs.gz +0 -0
- package/lib/cjs-es6/persister-file.cjs +1 -1
- package/lib/cjs-es6/persister-file.cjs.gz +0 -0
- package/lib/cjs-es6/persister-remote.cjs +1 -1
- package/lib/cjs-es6/persister-remote.cjs.gz +0 -0
- package/lib/cjs-es6/persister-yjs.cjs +1 -1
- package/lib/cjs-es6/persister-yjs.cjs.gz +0 -0
- package/lib/cjs-es6/persisters.cjs +1 -1
- package/lib/cjs-es6/persisters.cjs.gz +0 -0
- package/lib/cjs-es6/tinybase.cjs +1 -1
- package/lib/cjs-es6/tinybase.cjs.gz +0 -0
- package/lib/cjs-es6/tools.cjs +1 -1
- package/lib/cjs-es6/tools.cjs.gz +0 -0
- package/lib/debug/persister-automerge.js +257 -0
- package/lib/debug/persister-browser.js +2 -2
- package/lib/debug/persister-file.js +2 -2
- package/lib/debug/persister-remote.js +2 -2
- package/lib/debug/persister-yjs.js +3 -3
- package/lib/debug/persisters.js +2 -2
- package/lib/debug/tinybase.js +2 -2
- package/lib/debug/tools.js +42 -2
- package/lib/es6/persister-automerge.js +1 -0
- package/lib/es6/persister-automerge.js.gz +0 -0
- package/lib/es6/persister-browser.js +1 -1
- package/lib/es6/persister-browser.js.gz +0 -0
- package/lib/es6/persister-file.js +1 -1
- package/lib/es6/persister-file.js.gz +0 -0
- package/lib/es6/persister-remote.js +1 -1
- package/lib/es6/persister-remote.js.gz +0 -0
- package/lib/es6/persister-yjs.js +1 -1
- package/lib/es6/persister-yjs.js.gz +0 -0
- package/lib/es6/persisters.js +1 -1
- package/lib/es6/persisters.js.gz +0 -0
- package/lib/es6/tinybase.js +1 -1
- package/lib/es6/tinybase.js.gz +0 -0
- package/lib/es6/tools.js +1 -1
- package/lib/es6/tools.js.gz +0 -0
- package/lib/persister-automerge.js +1 -0
- package/lib/persister-automerge.js.gz +0 -0
- package/lib/persister-browser.js +1 -1
- package/lib/persister-browser.js.gz +0 -0
- package/lib/persister-file.js +1 -1
- package/lib/persister-file.js.gz +0 -0
- package/lib/persister-remote.js +1 -1
- package/lib/persister-remote.js.gz +0 -0
- package/lib/persister-yjs.js +1 -1
- package/lib/persister-yjs.js.gz +0 -0
- package/lib/persisters.js +1 -1
- package/lib/persisters.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/tools.js +1 -1
- package/lib/tools.js.gz +0 -0
- package/lib/types/persister-automerge.d.ts +110 -0
- package/lib/types/persister-yjs.d.ts +3 -2
- package/lib/types/persisters.d.ts +8 -8
- package/lib/types/tools.d.ts +4 -4
- package/lib/types/with-schemas/persister-automerge.d.ts +120 -0
- package/lib/types/with-schemas/persister-yjs.d.ts +3 -2
- package/lib/types/with-schemas/persisters.d.ts +8 -8
- package/lib/types/with-schemas/tools.d.ts +4 -4
- package/lib/umd/persister-automerge.js +1 -0
- package/lib/umd/persister-automerge.js.gz +0 -0
- package/lib/umd/persister-browser.js +1 -1
- package/lib/umd/persister-browser.js.gz +0 -0
- package/lib/umd/persister-file.js +1 -1
- package/lib/umd/persister-file.js.gz +0 -0
- package/lib/umd/persister-remote.js +1 -1
- package/lib/umd/persister-remote.js.gz +0 -0
- package/lib/umd/persister-yjs.js +1 -1
- package/lib/umd/persister-yjs.js.gz +0 -0
- package/lib/umd/persisters.js +1 -1
- package/lib/umd/persisters.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/tools.js +1 -1
- package/lib/umd/tools.js.gz +0 -0
- package/lib/umd-es6/persister-automerge.js +1 -0
- package/lib/umd-es6/persister-automerge.js.gz +0 -0
- package/lib/umd-es6/persister-browser.js +1 -1
- package/lib/umd-es6/persister-browser.js.gz +0 -0
- package/lib/umd-es6/persister-file.js +1 -1
- package/lib/umd-es6/persister-file.js.gz +0 -0
- package/lib/umd-es6/persister-remote.js +1 -1
- package/lib/umd-es6/persister-remote.js.gz +0 -0
- package/lib/umd-es6/persister-yjs.js +1 -1
- package/lib/umd-es6/persister-yjs.js.gz +0 -0
- package/lib/umd-es6/persisters.js +1 -1
- package/lib/umd-es6/persisters.js.gz +0 -0
- package/lib/umd-es6/tinybase.js +1 -1
- package/lib/umd-es6/tinybase.js.gz +0 -0
- package/lib/umd-es6/tools.js +1 -1
- package/lib/umd-es6/tools.js.gz +0 -0
- package/package.json +55 -25
- package/readme.md +3 -3
package/lib/tools.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=e=>typeof e,t="",l=e(t),a=e(!0),n=e(0),o="type",d="default",r="Listener",s="get",I="add",$="Ids",c="Table",i=c+"s",u=c+$,p="Row",b=p+$,C="Sorted"+p+$,h="Cell",g=h+$,m="Value",w=m+"s",f=m+$,y=(e,t)=>e.every(t),T=(e,t)=>e.sort(t),v=(e,t)=>e.forEach(t),V=(e,t)=>e.map(t),x=e=>e.length,R=e=>0==x(e),k=(e,t)=>e.filter(t),S=(e,...t)=>e.push(...t),P=e=>e.pop(),A=(e,...t)=>e.unshift(...t),E=e=>e.shift(),D=JSON.parse,O=isFinite,N=(e,t)=>e instanceof t,L=e=>null==e,j=e=>e==l||e==a,M=t=>e(t)==l,G=e=>Array.isArray(e),J=t=>{const l=e(t);return j(l)||l==n&&O(t)?l:void 0},z=Object,W=z.keys,B=z.freeze,F=e=>N(e,z)&&e.constructor==z,U=(e,t)=>V(z.entries(e),(([e,l])=>t(l,e))),_=e=>F(e)&&R(W(e)),Z=(e,t)=>e?.has(t)??!1,H=e=>[...e?.values()??[]],Q=(e,t)=>e?.forEach(t),q=(e,t)=>e?.delete(t),K=e=>new Map(e),X=(e,t)=>e?.get(t),Y=(e,t)=>Q(e,((e,l)=>t(l,e))),ee=(e,t)=>V([...e?.entries()??[]],(([e,l])=>t(l,e))),te=(e,t,l)=>L(l)?(q(e,t),e):e?.set(t,l),le=(e,t,l)=>(Z(e,t)||te(e,t,l()),X(e,t)),ae=e=>e.toUpperCase(),ne=e=>e.toLowerCase(),oe="a ",de="A function for",re=", and registers a listener so that any changes to that result will cause a re-render",se="Callback",Ie="Del",$e="Deps",ce=$e+"?: React.DependencyList",ie="doRollback?: DoRollback",ue="actions: () => Return, "+ie,pe="export",be="Id",Ce="Invalid",he="Json",ge=ne(r),me="?: ",we=" | undefined",fe="NonNullable",ye="Partial",Te="Props",ve="Provider",Ve=`Registers a ${ge} that will be called`,xe="Represents",Re="rowId: "+be,ke="Schema",Se="Set",Pe=", descending?: boolean, offset?: number, limit?: number",Ae="[]",Ee="the Store",De="Transaction",Oe=ne(De),Ne="Execute a "+Oe+" to make multiple mutations",Le="Explicitly starts a "+Oe,je="Explicitly finishes a "+Oe,Me="the end of the "+Oe,Ge="void",Je=" => "+Ge,ze="WhenSet",We=" when setting it",Be=oe+"string serialization of",Fe=" ",Ue="Gets a callback that can ",_e="the ",Ze=" the schema for",He=(e=0,l=0)=>`the ${it[e]}content of`+(l?Fe+Ee:t),Qe=(e=0,l,a=0)=>It[l]+Fe+He(e,1)+(a?" when setting it":t),qe=(e,t=0)=>xe+` a Row when ${t?"s":"g"}etting ${He()} the '${e}' `+c,Ke=(e,t,l=0)=>`Gets ${l?"sorted, paginated":"the"} Ids of the ${e}s in `+t,Xe=(e,t)=>`Calls a function for each ${e} in `+t,Ye=e=>"The props passed to a component that renders "+e,et=e=>"A function that takes "+e,tt=(e,t=0)=>de+" listening to changes to "+ct[e]+" in "+ct[t],lt=(e,l,a=0)=>Ve+" whenever "+ct[e]+" in "+ct[l]+" change"+(a?t:"s"),at=e=>`the '${e}' `+c,nt=e=>"the specified Row in "+at(e),ot=(e,t=0)=>It[t]+` ${He()} `+at(e),dt=(e,t=0)=>It[t]+` ${He()} `+nt(e),rt=(e,t,l=0)=>It[l]+` the '${t}' Cell for `+nt(e),st=(e,t=0)=>It[t]+` the '${e}' Value`,It=["Gets","Checks existence of","Sets","Deletes","Sets part of",xe,"Gets "+Be,"Sets "+Be,Ve+" whenever",Ue+"set",Ue+"add",Ue+"set part of",Ue+"delete","Renders","Gets "+Be+Ze,"Sets"+Ze,"Deletes"+Ze],$t=[s,"has","set","del","set","forEach",I,t],ct=[Ee,i,_e+c+Fe+$,oe+c,_e+p+Fe+$,oe+p,_e+h+Fe+$,oe+h,"invalid Cell changes",w,_e+m+Fe+$,oe+m,"invalid Value changes",_e+"sorted "+p+Fe+$],it=[t,"tabular ","keyed value "],ut=e=>new Set(G(e)||L(e)?e:[e]),pt=(e,t)=>e?.add(t),bt=/[^A-Za-z]+/,Ct=/[^A-Za-z0-9]+/,ht=/^( *)\/\*\* *(.*?) *\*\/$/gm,gt=(e,t,l)=>e.substring(t,l),mt=e=>e.includes(","),wt=(e,t,l,a=1)=>{const n=`${t}${1==a?"":a}`;return Z(e,n)?wt(e,t,l,a+1):(te(e,n,l),n)},ft=e=>e.replace(ht,((e,t,l)=>{const a=77-yt(t);return`${t}/**\n${l.replace(RegExp(`([^\\n]{1,${a}})(\\s|$)`,"g"),t+" * $1\n")}${t} */`})),yt=e=>e.length,Tt=(e,l=t)=>e.join(l),vt=e=>e.flat(1e3),Vt=(e,t=0)=>Tt(V(e.split(Ct),((e,l)=>(l>0||t?ae:ne)(gt(e,0,1))+gt(e,1)))),xt=e=>ae(Tt((e&&!bt.test(e[0])?e:" "+e).split(Ct),"_")),Rt=e=>`/** ${e}. */`,kt=(...e)=>Tt(k(e,(e=>e)),", "),St=(...e)=>"{"+Tt(e,"; ")+"}",Pt=(...e)=>St(...V(e,(e=>"readonly "+e))),At=()=>{const e=[K(),K(),K(),K()],l=K(),a=K();return[(...e)=>Tt(vt(e),"\n"),(t,l,...a)=>v(a,(a=>v([0,1],(n=>(t??n)==n?pt(le(e[n],l,ut),a):0)))),(e,a,n,o=t,d=1)=>wt(l,e,[a,n,o,d]),(e,t,l)=>wt(a,e,G(l)?[`(${t}) => {`,l,"}"]:[`(${t}) => ${l}`]),(e,t)=>X(a,e)===t?e:wt(a,e,t),(l=0)=>V([...T(ee(e[l],((e,t)=>`import {${Tt(T(H(e)),", ")}} from '${t}';`)),((e,t)=>mt(e)!=mt(t)?mt(e)?-1:1:e>t?1:-1)),t],(e=>e.replace("{React}","React"))),()=>ee(l,(([e,l,a,n],o)=>[Rt(l),`${n?pe+" ":t}type ${o}${a} = ${e};`,t])),()=>ee(a,((e,l)=>(e=G(e)?e:[e],S(e,P(e)+";"),[`const ${l} = ${E(e)}`,e,t])))]},Et=e=>{const t=new WeakMap;return l=>(t.has(l)||t.set(l,e(l)),t.get(l))},Dt=(e,t,l)=>[t=>U(e,((e,a)=>t(a,Vt(a,1),l(xt(a),`'${a}'`)))),(t,a)=>U(e[t],((e,t)=>a(t,e[o],e[d],l(xt(t),`'${t}'`),Vt(t,1)))),e=>U(t,((t,a)=>e(a,t[o],t[d],l(xt(a),`'${a}'`),Vt(a,1))))],Ot=(e,l,a,n)=>[(n,o)=>{const d=n+": "+o,s=e(i,St(...l((e=>`'${e}'?: {[rowId: Id]: `+St(...a(e,((e,l,a)=>`'${e}'${L(a)?"?":t}: ${l}`)))+"}"))),Qe(1,5)),I=e(i+ze,St(...l((e=>`'${e}'?: {[rowId: Id]: `+St(...a(e,((e,t)=>`'${e}'?: ${t}`)))+"}"))),Qe(1,5,1)),$=e(c+be,"keyof "+s,"A "+c+" Id in "+Ee),m=`<TId extends ${$}>`,w=e(c,fe+`<${s}[TId]>`,"A "+c+" in "+Ee,m),f=e(c+ze,fe+`<${I}[TId]>`,"A "+c+" in "+Ee+We,m),y=e(p,w+"<TId>[Id]","A "+p+" in a "+c,m),T=e(p+ze,f+"<TId>[Id]","A "+p+" in a "+c+We,m),v=e(h+be,`Extract<keyof ${y}<TId>, Id>`,"A "+h+" Id in a "+p,m),V=e(h,fe+`<${s}[TId]>[Id][CId]`,"A "+h+" in a "+p,`<TId extends ${$}, CId extends ${v}<TId>>`),x=e("CellIdCellArray",`CId extends ${v}<TId> ? [cellId: CId, cell: ${V}<TId, CId>] : never`,h+" Ids and types in a "+p,`<TId extends ${$}, CId = ${v}<TId>>`,0),R=e(h+se,`(...[cellId, cell]: ${x}<TId>)`+Je,et(oe+h+" Id, and "+h),m),k=e(p+se,"(rowId: Id, forEachCell: (cellCallback: CellCallback<TId>) "+Je+") "+Je,et(oe+p+" Id, and a "+h+" iterator"),m),S=e("TableIdForEachRowArray",`TId extends ${$} ? [tableId: TId, forEachRow: (rowCallback: ${k}<TId>)${Je}] : never`,c+" Ids and callback types",`<TId = ${$}>`,0),P=e(c+se,`(...[tableId, forEachRow]: ${S})`+Je,et(oe+c+" Id, and a "+p+" iterator"),t),A=e("TableIdRowIdCellIdArray",`TId extends ${$} ? [tableId: TId, rowId: Id, cellId: ${v}<TId>] : never`,"Ids for GetCellChange",`<TId = ${$}>`,0),E=e("GetCellChange",`(...[tableId, rowId, cellId]: ${A}) => CellChange`,de+" returning information about any Cell's changes during a "+Oe),D=e(i+r,`(${d}, getCellChange: ${E}${we})`+Je,tt(1)),O=e(u+r,`(${d})`+Je,tt(2)),N=e(c+r,`(${d}, tableId: ${$}, getCellChange: ${E}${we})`+Je,tt(3)),j=e(b+r,`(${d}, tableId: ${$})`+Je,tt(4,3)),M=e(C+r,"("+kt(d,"tableId: "+$,"cellId: Id"+we,"descending: boolean","offset: number","limit: number"+we,"sortedRowIds: Ids")+")"+Je,tt(13,3)),G=e(p+r,"("+kt(""+d,"tableId: "+$,Re,`getCellChange: ${E}${we}`)+")"+Je,tt(5,3)),J=e(g+r,"("+kt(""+d,"tableId: "+$,Re)+")"+Je,tt(6,5)),z=e("CellListenerArgsArrayInner",`CId extends ${v}<TId> ? [${d}, tableId: TId, ${Re}, cellId: CId, newCell: ${V}<TId, CId> ${we}, oldCell: ${V}<TId, CId> ${we}, getCellChange: ${E} ${we}] : never`,"Cell args for CellListener",`<TId extends ${$}, CId = ${v}<TId>>`,0),W=e("CellListenerArgsArrayOuter",`TId extends ${$} ? `+z+"<TId> : never","Table args for CellListener",`<TId = ${$}>`,0);return[s,I,$,w,f,y,T,v,V,R,k,P,D,O,N,j,M,G,J,e(h+r,`(...[${n}, tableId, rowId, cellId, newCell, oldCell, getCellChange]: ${W})`+Je,tt(7,5)),e(Ce+h+r,`(${d}, tableId: Id, ${Re}, cellId: Id, invalidCells: any[])`+Je,tt(8))]},(l,a)=>{const o=l+": "+a,d=e(w,St(...n(((e,l,a)=>`'${e}'${L(a)?"?":t}: ${l}`))),Qe(2,5)),s=e(w+ze,St(...n(((e,t)=>`'${e}'?: ${t}`))),Qe(2,5,1)),I=e(m+be,"keyof "+d,"A "+m+" Id in "+Ee),$=e(m,fe+`<${d}[VId]>`,"A "+m+" Id in "+Ee,`<VId extends ${I}>`),c=e("ValueIdValueArray",`VId extends ${I} ? [valueId: VId, value: ${$}<VId>] : never`,m+" Ids and types in "+Ee,`<VId = ${I}>`,0),i=e(m+se,`(...[valueId, value]: ${c})`+Je,et(oe+m+" Id, and "+m)),u=e("GetValueChange",`(valueId: ${I}) => ValueChange`,de+" returning information about any Value's changes during a "+Oe),p=e(w+r,`(${o}, getValueChange: ${u}${we})`+Je,tt(9)),b=e(f+r,`(${o})`+Je,tt(10)),C=e("ValueListenerArgsArray",`VId extends ${I} ? [${o}, valueId: VId, newValue: ${$}<VId> ${we}, oldValue: ${$}<VId> ${we}, getValueChange: ${u} ${we}] : never`,"Value args for ValueListener",`<VId = ${I}>`,0);return[d,s,I,$,i,p,b,e(m+r,`(...[${l}, valueId, newValue, oldValue, getValueChange]: `+C+")"+Je,tt(11)),e(Ce+m+r,`(${o}, valueId: Id, invalidValues: any[])`+Je,tt(12))]},(t,l)=>e(De+r,`(${t}: ${l}, cellsTouched: boolean, valuesTouched: boolean)`+Je,de+" listening to the completion of a "+Oe)],Nt=(e,l=t,a=t)=>`store.${e}(${l})`+(a?" as "+a:t),Lt=(e,l=t)=>`fluent(() => ${Nt(e,l)})`,jt=(e,l=t,a=t)=>`store.${e}(${l?l+", ":t}proxy(listener)${a?", "+a:t})`,Mt=(e,l,n)=>{const[s,y,T,V,x,R,k,P]=At(),[E,D,O]=Dt(e,l,x),[N,j,G]=Ot(T,E,D,O),J=K(),z=(e=0)=>ee(J,(([l,a,n,o,d],r)=>{const s=e?[r+`: ${d}(${l}): ${a} => ${n},`]:[r+d+`(${l}): ${a};`];return e||A(s,Rt(o)),S(s,t),s})),W=(e,l,a,n,o,d=t)=>wt(J,e,[l,a,n,o,d]),B=(e,l,a,n,o,d=t,r=t,s=t)=>W($t[e]+l+(4==e?ye:t)+a,d,n,(n==Z?Lt:Nt)($t[e]+(4==e?ye:t)+a,r,e?void 0:n),o,s),F=(e,l,a,n=t,o=t,d=1,s=t)=>W(I+e+r,(n?n+", ":t)+ge+": "+l+(d?", mutator?: boolean":t),be,jt(I+e+r,o,d?"mutator":t),a,s),U=`./${Vt(n)}.d`,Z=Vt(n,1),Q=Vt(Z),q=[],le=K();let ae=[],ne=[];if(y(1,U,Z,`create${Z} as create${Z}Decl`),!_(e)){y(0,"tinybase","CellChange"),y(null,"tinybase",$);const[e,l,n,r,s,I,m,w,f,V,R,k,P,A,O,j,G,J,z,W,_]=N(Q,Z),Y=K();E(((e,t)=>{const l=`<'${e}'>`,a=[T(t+c,r+l,xe+` the '${e}' `+c),T(t+c+ze,s+l,xe+` the '${e}' `+c+We),T(t+p,I+l,qe(e)),T(t+p+ze,m+l,qe(e,1)),T(t+h+be,w+l,`A Cell Id for the '${e}' `+c),T(t+h+se,V+l,et(`a Cell Id and value from a Row in the '${e}' `+c)),T(t+p+se,R+l,et(`a Row Id from the '${e}' Table, and a Cell iterator`))];te(Y,e,a),y(1,U,...a)})),y(1,U,e,l,n,w,k,P,A,O,j,G,J,z,W,_),ae=[e,l,n,w,P,A,O,j,G,J,z,W,Y],v([[e],[a],[Z,"tables: "+l,"tables"],[Z]],(([e,l,a],n)=>B(n,t,i,e,Qe(1,n),l,a))),B(0,t,u,n+Ae,Ke(c,Ee)),B(5,t,c,Ge,Xe(c,Ee),"tableCallback: "+k,"tableCallback as any"),E(((e,l,n)=>{const[o,d,r,s,I,i,u]=X(Y,e);v([[o],[a],[Z,"table: "+d,", table"],[Z]],(([a,o,d=t],r)=>B(r,l,c,a,ot(e,r),o,n+d))),B(0,l,b,$,Ke(p,at(e)),t,n),B(0,l,C,$,Ke(p,at(e),1),"cellId?: "+I+Pe,n+", cellId, descending, offset, limit"),B(5,l,p,Ge,Xe(p,at(e)),"rowCallback: "+u,n+", rowCallback as any"),v([[r],[a],[Z,", row: "+s,", row"],[Z],[Z,", partialRow: "+s,", partialRow"]],(([a,o=t,d=t],r)=>B(r,l,p,a,dt(e,r),Re+o,n+", rowId"+d))),B(6,l,p,be+we,"Add a new Row to "+at(e),"row: "+s+", reuseIds?: boolean",n+", row, reuseIds"),B(0,l,g,I+Ae,Ke(h,nt(e)),Re,n+", rowId"),B(5,l,h,Ge,Xe(h,nt(e)),Re+", cellCallback: "+i,n+", rowId, cellCallback as any"),D(e,((o,d,r,s,I)=>{const $="Map"+Vt(d,1);te(le,d,$);const c=d+(L(r)?we:t);v([[c],[a],[Z,`, cell: ${d} | `+$,", cell as any"],[Z]],(([a,d=t,r=t],$)=>B($,l+I,h,a,rt(e,o,$),Re+d,n+", rowId, "+s+r)))}))})),B(0,t,i+he,he,Qe(1,6)),B(2,t,i+he,Z,Qe(1,7),"tablesJson: "+he,"tables"+he),F(i,P,Qe(1,8)+" changes"),F(u,A,lt(2,0,1)),F(c,O,lt(3,0),`tableId: ${n} | null`,"tableId"),F(b,j,lt(4,3,1),`tableId: ${n} | null`,"tableId"),F(C,G,lt(13,3,1),kt("tableId: TId",`cellId: ${w}<TId>`+we,"descending: boolean","offset: number","limit: number"+we),kt("tableId","cellId","descending","offset","limit"),1,"<TId extends TableId>"),F(p,J,lt(5,3),`tableId: ${n} | null, rowId: IdOrNull`,"tableId, rowId"),F(g,z,lt(6,5,1),`tableId: ${n} | null, rowId: IdOrNull`,"tableId, rowId"),F(h,W,lt(7,5),`tableId: ${n} | null, rowId: IdOrNull, cellId: ${Tt(E((e=>X(Y,e)?.[4]??t))," | ")} | null`,"tableId, rowId, cellId"),F(Ce+h,_,Ve+" whenever an invalid Cell change was attempted","tableId: IdOrNull, rowId: IdOrNull, cellId: IdOrNull","tableId, rowId, cellId"),y(1,U,...H(le)),S(q,".set"+i+ke+"({",vt(E(((e,l,a)=>[`[${a}]: {`,...D(e,((e,l,a,n)=>`[${n}]: {[${x(xt(o),`'${o}'`)}]: ${x(xt(l),`'${l}'`)}${L(a)?t:`, [${x(xt(d),`'${d}'`)}]: `+(M(a)?x(xt(a),`'${a}'`):a)}},`)),"},"]))),"})")}if(!_(l)){const[e,l,n,r,s,I,$,c,i]=j(Q,Z);y(1,U,e,l,n,s,I,$,c,i),ne=[e,l,n,I,$,c],v([[e],[a],[Z,"values: "+l,"values"],[Z],[Z,"partialValues: "+l,"partialValues"]],(([e,l,a],n)=>B(n,t,w,e,Qe(2,n),l,a))),B(0,t,f,n+Ae,Ke(m,Ee)),B(5,t,m,"void",Xe(m,Ee),"valueCallback: "+s,"valueCallback as any"),O(((e,l,n,o,d)=>{const r="Map"+Vt(l,1);te(le,l,r),v([[l],[a],[Z,`value: ${l} | `+r,", value as any"],[Z]],(([l,a,n=t],r)=>B(r,d,m,l,st(e,r),a,o+n)))})),B(0,t,w+he,he,Qe(2,6)),B(2,t,w+he,Z,Qe(2,7),"valuesJson: "+he,"values"+he),F(w,I,Qe(2,8)+" changes"),F(f,$,lt(10,0,1)),F(m,c,lt(11,0),`valueId: ${n} | null`,"valueId"),F(Ce+m,i,Ve+" whenever an invalid Value change was attempted","valueId: IdOrNull","valueId"),y(1,U,...H(le)),y(0,"tinybase","ValueChange"),S(q,".set"+w+ke+"({",O(((e,l,a,n)=>[`[${n}]: {[${x(xt(o),`'${o}'`)}]: ${x(xt(l),`'${l}'`)}${L(a)?t:`, [${x(xt(d),`'${d}'`)}]: `+(M(a)?x(xt(a),`'${a}'`):a)}},`])),"})")}Y(le,((e,t)=>T(t,`(cell: ${e}${we}) => `+e,`Takes a ${e} Cell value and returns another`))),y(null,"tinybase","DoRollback",be,"IdOrNull",he,"Store"),B(0,t,he,he,Qe(0,6)),B(2,t,he,Z,Qe(0,7),"tablesAndValuesJson: "+he,"tablesAndValuesJson"),B(7,t,Oe,"Return",Ne,ue,"actions, doRollback","<Return>"),B(7,t,"start"+De,Z,Le),B(7,t,"finish"+De,Z,je,ie,"doRollback");const oe=G(Q,Z);return F("WillFinish"+De,oe,Ve+" just before "+Me,t,t,0),F("DidFinish"+De,oe,Ve+" just after "+Me,t,t,0),B(7,t,"call"+r,Z,"Manually provoke a listener to be called","listenerId: Id","listenerId"),B(3,t,r,Z,"Remove a listener that was previously added to "+Ee,"listenerId: Id","listenerId"),W("getStore",t,"Store","store",It[0]+" the underlying Store object"),y(1,"tinybase","createStore"),y(1,U,Z,`create${Z} as create${Z}Decl`,oe),x("store",["createStore()",...q]),V("fluent","actions: () => Store",["actions();",`return ${Q};`]),V("proxy","listener: any",`(_: Store, ...params: any[]) => listener(${Q}, ...params)`),x(Q,["{",...z(1),"}"]),[s(...R(0),...k(),pe+" interface "+Z+" {",...z(0),"}",t,Rt(`Creates a ${Z} object`),pe+" function create"+Z+"(): "+Z+";"),s(...R(1),pe+" const create"+Z+": typeof create"+Z+"Decl = () => {",...P(),`return Object.freeze(${Q});`,"};"),ae,ne]},Gt=e=>s+e,Jt=e=>kt(Gt(e),Gt(e)+$e),zt="debugIds?: boolean",Wt="debugIds={debugIds}",Bt="then"+ce,Ft="Parameter",Ut=": (parameter: "+Ft+", store: Store) => ",_t="const contextValue = useContext(Context);",Zt=", based on a parameter",Ht=": ",Qt="<"+Ft+",>",qt=Ft+"ized"+se+"<"+Ft+">",Kt="rowId",Xt="rowId={rowId}",Yt=", separator, debugIds",el="separator?: ReactElement | string",tl="then?: (store: Store",ll=kt(tl+")"+Je,Bt),al="then, then"+$e,nl=Kt+Ht+be,ol="View",dl=(e,...t)=>kt(...t,ge+": "+e,ge+ce,"mutator?: boolean"),rl=(...e)=>kt(...e,ge,ge+$e,"mutator"),sl=(e,l,a,n,o)=>{const[d,s,I,y,T,v,V,x]=At(),[R,k,P]=Dt(e,l,T),E=`./${Vt(a)}.d`,D=`./${Vt(a)}-ui-react.d`,O="tinybase/ui-react",N=Vt(a,1),j=Vt(N),M=N+"Or"+N+be,G=j+"Or"+N+be,J=j+`={${j}}`,z=K(),W=(e,l,a,n,o,d=t)=>(s(1,D,e+" as "+e+"Decl"),wt(z,e,[l,a,n,o,d])),B=(e,l,a,n,o,d=t)=>W("use"+e,l,a,n,o,d),F=(e,l,a,n,o=t,d=t,r=t,I=t,$=t)=>(s(1,O,`use${l} as use${l}Core`),B(e,kt(o,q,I),a,te+`(${G}, use${l}Core, [`+(d||t)+($?"], ["+$:t)+"]);",n,r)),U=(e,t,l,a)=>W(e,t,1,l,a),Z=(e=0)=>ee(z,(([l,a,n,o,d],r)=>{const s=e?[pe+` const ${r}: typeof ${r}Decl = ${d}(${l}): ${1==a?"any":a} =>`,n]:[pe+` function ${r}${d}(${l}): ${1==a?"ComponentReturnType":a};`];return e||A(s,Rt(o)),S(s,t),s}));s(null,"tinybase",be,"Store",se,Ft+"ized"+se),s(0,O,"ComponentReturnType"),s(null,O,"ExtraProps"),s(0,E,N);const H=I(M,N+" | "+be,`Used when you need to refer to a ${N} in a React hook or component`),Q=I(ve+Te,Pt(j+me+N,j+`ById?: {[${j}Id: Id]: ${N}}`),`Used with the ${ve} component, so that a `+N+" can be passed into the context of an application");s(0,"react","ReactElement","ComponentType"),s(1,"react","React"),s(1,D,H,Q);const q=G+me+H;T("{createContext, useContext, useMemo}","React"),T("Context",`createContext<[${N}?, {[${j}Id: Id]: ${N}}?]>([])`),B("Create"+N,`create: () => ${N}, create`+ce,N,"\n// eslint-disable-next-line react-hooks/exhaustive-deps\nuseMemo(create, createDeps)",`Create a ${N} within a React application with convenient memoization`);const Y=B(N,"id?: Id",N+we,["{",_t,"return id == null ? contextValue[0] : contextValue[1]?.[id];","}"],`Get a reference to a ${N} from within a ${ve} component context`),te=y("useHook",G+`: ${H} | undefined, hook: (...params: any[]) => any, preParams: any[], postParams: any[] = []`,[`const ${j} = ${Y}(${G} as Id);`,`return hook(...preParams, ((${G} == null || typeof ${G} == 'string')`,`? ${j} : ${G})?.getStore(), ...postParams)`]),le=y("getProps","getProps: ((id: any) => ExtraProps) | undefined, id: Id","(getProps == null) ? ({} as ExtraProps) : getProps(id)"),ae=y("wrap",kt("children: any","separator?: any","encloseWithId?: boolean","id?: Id"),["const separated = separator==null || !Array.isArray(children)"," ? children"," : children.map((child, c) => (c > 0 ? [separator, child] : child));","return encloseWithId ? [id, ':{', separated, '}'] : separated;"]),ne=T("NullComponent","() => null");if(!_(e)){const[e,l,a,o,d,m,w,f,T,v,V,x,S]=n;s(null,E,e,l,a,d,m,w,f,T,v,V,x),s(0,E,o),s(1,E,N),s(null,"tinybase",$,"IdOrNull");const P=y("tableView",`{${j}, rowComponent, getRowComponentProps`+Yt+"}: any, rowIds: Ids, tableId: Id, defaultRowComponent: React.ComponentType<any>",["const Row = rowComponent ?? defaultRowComponent;",`return ${ae}(rowIds.map((rowId) => (`,"<Row","{..."+le+"(getRowComponentProps, rowId)}","key={rowId}","tableId={tableId}",Xt,J,Wt,"/>","))",Yt,", tableId,",");"]),A=y("getDefaultTableComponent","tableId: Id",Tt(R(((e,t,l)=>`tableId == ${l} ? ${t}TableView : `)))+ne),O=y("getDefaultCellComponent","tableId: Id, cellId: Id",Tt(R(((e,t,l)=>`tableId == ${l} ? ${Tt(k(e,((e,l,a,n,o)=>`cellId == ${n} ? `+t+o+"CellView : ")))+ne} : `)))+ne);F(i,i,e,Qe(1,0)+re);const M=F(u,u,a+Ae,Ke(c,Ee)+re);F(Se+i+se,Se+i+se,qt,Qe(1,9)+Zt,kt(Gt(i)+Ut+l,Gt(i)+ce),Jt(i),Qt,kt(tl,`tables: ${l})`+Je,Bt),al),F(Ie+i+se,Ie+i+se,se,Qe(1,12),t,t,t,ll,al);const G=I(h+Te,Pt("tableId?: TId","rowId: Id","cellId?: CId",j+me+N,zt),Ye(oe+h),`<TId extends ${a}, CId extends ${o}<TId>>`),z=I(p+Te,Pt("tableId?: TId","rowId: Id",j+me+N,"cellComponents?: {readonly [CId in "+o+`<TId>]?: ComponentType<${G}<TId, CId>>;}`,`getCellComponentProps?: (cellId: ${o}<TId>) => ExtraProps`,el,zt),Ye(oe+p),`<TId extends ${a}>`),W=I(c+Te,Pt("tableId?: TId",j+me+N,`rowComponent?: ComponentType<${z}<TId>>`,"getRowComponentProps?: (rowId: Id) => ExtraProps",el,zt),Ye(oe+c),`<TId extends ${a}>`),B=I("Sorted"+c+Te,Pt("tableId?: TId","cellId?: "+o+"<TId>","descending?: boolean","offset?: number","limit?: number",j+me+N,`rowComponent?: ComponentType<${z}<TId>>`,"getRowComponentProps?: (rowId: Id) => ExtraProps",el,zt),Ye(oe+"sorted "+c),`<TId extends ${a}>`),_=I(i+Te,Pt(j+me+N,"tableComponents?: {readonly [TId in "+a+`]?: ComponentType<${W}<TId>>;}`,`getTableComponentProps?: (tableId: ${a}) => ExtraProps`,el,zt),Ye(He(1,1)));s(1,D,_,W,B,z,G),U(i+ol,"{"+j+", tableComponents, getTableComponentProps"+Yt+"}: "+_,[ae+`(${M}(${j}).map((tableId) => {`,"const Table = (tableComponents?.[tableId] ?? "+A+"(tableId)) as React.ComponentType<TableProps<typeof tableId>>;","return <Table",`{...${le}(getTableComponentProps, tableId)}`,"tableId={tableId}","key={tableId}",J,Wt,"/>;","}), separator)"],Qe(1,13)+re),R(((e,l,a)=>{const[n,o,d,r,I]=X(S,e);s(null,E,n,o,d,r,I),F(l+c,c,n,ot(e)+re,t,a);const i=F(l+b,b,$,Ke(p,at(e))+re,t,a),u=F(l+C,C,$,Ke(p,at(e),1)+re,"cellId?: "+I+", descending?: boolean, offset?: number, limit?: number",a+", cellId, descending, offset, limit");F(l+p,p,d,dt(e)+re,nl,kt(a,Kt));const m=F(l+g,g,I+Ae,Ke(h,nt(e))+re,nl,kt(a,Kt));F(Se+l+c+se,Se+c+se,qt,ot(e,9)+Zt,kt(Gt(c)+Ut+o,Gt(c)+ce),kt(a,Jt(c)),Qt,kt(tl,`table: ${o})`+Je,Bt),al),F(Ie+l+c+se,Ie+c+se,se,ot(e,12),t,a,t,ll,al),F(Se+l+p+se,Se+p+se,qt,dt(e,9)+Zt,kt(nl,Gt(p)+Ut+r,Gt(p)+ce),kt(a,Kt,Jt(p)),Qt,kt(tl,`row: ${r})`+Je,Bt),al),F("Add"+l+p+se,"Add"+p+se,qt,dt(e,10)+Zt,kt(Gt(p)+Ut+r,Gt(p)+ce),kt(a,Jt(p)),Qt,"then?: ("+kt(nl+we,"store: Store","row: "+r+")"+Je,"then"+ce)+", reuseRowIds?: boolean",al+", reuseRowIds"),F(Se+l+ye+p+se,Se+ye+p+se,qt,dt(e,11)+Zt,kt(nl,Gt(ye+p)+Ut+r,Gt(ye+p)+ce),kt(a,Kt,Jt(ye+p)),Qt,kt(tl,`partialRow: ${r})`+Je,Bt),al),F(Ie+l+p+se,Ie+p+se,se,dt(e,12),nl,kt(a,Kt),t,ll,al);const w=U(l+p+ol,"{rowId, "+j+", cellComponents, getCellComponentProps"+Yt+`}: ${z}<'${e}'>`,[ae+`(${m}(rowId, ${j}).map((cellId) => {`,"const Cell = (cellComponents?.[cellId] ?? "+O+`(${a}, cellId)) as React.ComponentType<CellProps<typeof `+a+", typeof cellId>>;","return <Cell",`{...${le}(getCellComponentProps, cellId)} `,"key={cellId}",`tableId={${a}}`,Xt,"cellId={cellId}",J,Wt,"/>;","})"+Yt+", rowId)"],dt(e,13)+re);U(l+"Sorted"+c+ol,"{cellId, descending, offset, limit, ...props}: "+B+`<'${e}'>`,P+"(props, "+u+`(cellId, descending, offset, limit, props.${j}), ${a}, ${w});`,ot(e,13)+", sorted"+re),U(l+c+ol,`props: ${W}<'${e}'>`,P+"(props, "+i+`(props.${j}), ${a}, ${w});`,ot(e,13)+re),k(e,((n,o,d,r,I)=>{const $="Map"+Vt(o,1);s(0,E,$),s(1,E,$);const c=F(l+I+h,h,o+(L(d)?we:t),rt(e,n)+re,nl,kt(a,Kt,r));F(Se+l+I+h+se,Se+h+se,qt,rt(e,n,9)+Zt,kt(nl,Gt(h)+Ut+o+" | "+$,Gt(h)+ce),kt(a,Kt,r,Jt(h)),Qt,kt(tl,`cell: ${o} | ${$})`+Je,Bt),al),F(Ie+l+I+h+se,Ie+h+se,se,rt(e,n,12),kt(nl,"forceDel?: boolean"),kt(a,Kt,r,"forceDel"),t,ll,al),U(l+I+h+ol,`{rowId, ${j}, debugIds}: `+G+`<'${e}', '${n}'>`,[ae+`('' + ${c}(rowId, `+j+`) ?? '', undefined, debugIds, ${r})`],rt(e,n,13)+re)}))}));const Z=Tt(R((e=>X(S,e)?.[4]??t))," | ");F(i+r,i+r,Ge,Qe(1,8)+" changes",dl(d),rl()),F(u+r,u+r,Ge,lt(2,0,1),dl(m),rl()),F(c+r,c+r,Ge,lt(3,0),dl(w,`tableId: ${a} | null`),rl("tableId")),F(b+r,b+r,Ge,lt(4,3,1),dl(f,`tableId: ${a} | null`),rl("tableId")),F(C+r,C+r,Ge,lt(13,3,1),dl(T,`tableId: ${a} | null`,"cellId: "+Z+we,"descending: boolean","offset: number","limit: number"+we),rl("tableId","cellId","descending","offset","limit")),F(p+r,p+r,Ge,lt(5,3),dl(v,`tableId: ${a} | null`,Kt+": IdOrNull"),rl("tableId",Kt)),F(g+r,g+r,Ge,lt(6,5,1),dl(V,`tableId: ${a} | null`,Kt+": IdOrNull"),rl("tableId",Kt)),F(h+r,h+r,Ge,lt(7,5),dl(x,`tableId: ${a} | null`,Kt+": IdOrNull",`cellId: ${Z} | null`),rl("tableId",Kt,"cellId"))}if(!_(l)){const[e,l,a,n,d,$]=o;s(null,E,...o),s(1,E,N);const c=y("getDefaultValueComponent","valueId: Id",Tt(P(((e,t,l,a,n)=>`valueId == ${a} ? `+n+"ValueView : ")))+ne);F(w,w,e,Qe(2,0)+re);const i=F(f,f,a+Ae,Ke(m,Ee)+re);F(Se+w+se,Se+w+se,qt,Qe(2,9)+Zt,kt(Gt(w)+Ut+l,Gt(w)+ce),Jt(w),Qt,kt(tl,`values: ${l})`+Je,Bt),al),F(Se+ye+w+se,Se+ye+w+se,qt,Qe(2,11)+Zt,kt(Gt(ye+w)+Ut+l,Gt(ye+w)+ce),Jt(ye+w),Qt,kt(tl,`partialValues: ${l})`+Je,Bt),al),F(Ie+w+se,Ie+w+se,se,Qe(2,12),t,t,t,ll,al);const u=I(m+Te,Pt("valueId?: VId",j+me+N,zt),Ye("a Value"),`<VId extends ${a}>`),p=I(w+Te,Pt(j+me+N,"valueComponents?: {readonly [VId in "+a+`]?: ComponentType<${u}<VId>>;}`,`getValueComponentProps?: (valueId: ${a}) => ExtraProps`,el,zt),Ye(He(2,1)));s(1,D,p,u),U(w+ol,"{"+j+", valueComponents, getValueComponentProps"+Yt+"}: "+p,[ae+`(${i}(${j}).map((valueId) => {`,"const Value = valueComponents?.[valueId] ?? "+c+"(valueId);","return <Value",`{...${le}(getValueComponentProps, valueId)}`,"key={valueId}",J,Wt,"/>;","}), separator)"],Qe(2,13)+re),P(((e,l,a,n,o)=>{const d="Map"+Vt(l,1);s(0,E,d),s(1,E,d);const r=F(o+m,m,l,st(e)+re,t,n);F(Se+o+m+se,Se+m+se,qt,st(e,9)+Zt,kt(Gt(m)+Ut+l+" | "+d,Gt(m)+ce),kt(n,Jt(m)),Qt,kt(tl,`value: ${l} | ${d})`+Je,Bt),al),F(Ie+o+m+se,Ie+m+se,se,st(e,12),t,n,t,ll,al),U(o+m+ol,`{${j}, debugIds}: ${u}<'${e}'>`,[ae+`('' + ${r}(`+j+`) ?? '', undefined, debugIds, ${n})`],st(e,13)+re)})),F(w+r,w+r,Ge,Qe(2,8)+" changes",dl(n),rl()),F(f+r,f+r,Ge,lt(10,0,1),dl(d),rl()),F(m+r,m+r,Ge,lt(11,0),dl($,`valueId: ${a} | null`),rl("valueId"))}return U(ve,`{${j}, ${j}ById, children}: `+Q+" & {children: React.ReactNode}",["{",_t,"return (","<Context."+ve,"value={useMemo(",`() => [${j} ?? contextValue[0], {...contextValue[1], ...${j}ById}],`,`[${j}, ${j}ById, contextValue],`,")}>","{children}",`</Context.${ve}>`,");","}"],"Wraps part of an application in a context that provides default objects to be used by hooks and components within"),[d(...v(0),...V(),...Z(0)),d(...v(1),...x(),...Z(1))]},Il=(e,l,a)=>{if(_(e)&&_(l))return[t,t,t,t];const[n,o,d,r]=Mt(e,l,a);return[n,o,...sl(e,l,a,d,r)]},$l={parser:"typescript",singleQuote:!0,trailingComma:"all",bracketSpacing:!1,jsdocSingleLineComment:!1},cl=Et((e=>{const t=()=>{const t=D(e.getTablesSchemaJson());return!_(t)||y(e.getTableIds(),(l=>{const a=e.getRowIds(l),n=K();if(y(a,(t=>y(e.getCellIds(l,t),(a=>{const o=e.getCell(l,t,a),d=le(n,a,(()=>[J(o),K(),[0],0])),[r,s,[I]]=d,$=le(s,o,(()=>0))+1;return $>I&&(d[2]=[$,o]),te(s,o,$),d[3]++,r==J(o)})))))return t[l]={},Q(n,(([e,,[,n],r],s)=>{t[l][s]={[o]:e,...r==x(a)?{[d]:n}:{}}})),1}))?t:{}},l=()=>{const t=D(e.getValuesSchemaJson());return _(t)&&e.forEachValue(((e,l)=>{t[e]={[o]:J(l)}})),t},a=e=>Il(t(),l(),e),n=async e=>{const t=["d.ts","ts","d.ts","tsx"];let l;try{l=(await import("prettier")).format}catch(e){l=e=>e}return V(a(e),((e,a)=>ft(l(e,{...$l,filepath:"_."+t[a]}))))};return B({getStoreStats:t=>{let l=0,a=0,n=0;const o={};return e.forEachTable(((e,d)=>{l++;let r=0,s=0;const I={};d(((e,l)=>{r++;let a=0;l((()=>a++)),s+=a,t&&(I[e]={rowCells:a})})),a+=r,n+=s,t&&(o[e]={tableRows:r,tableCells:s,rows:I})})),{totalTables:l,totalRows:a,totalCells:n,totalValues:x(e.getValueIds()),jsonLength:yt(e.getJson()),...t?{detail:{tables:o}}:{}}},getStoreTablesSchema:t,getStoreValuesSchema:l,getStoreApi:a,getPrettyStoreApi:n,getStore:()=>e})}));export{cl as createTools};
|
|
1
|
+
const e=e=>typeof e,t="",l=e(t),a=e(!0),n=e(0),o="type",d="default",r="Listener",s="get",I="add",$="Ids",c="Table",i=c+"s",u=c+$,p="Row",b=p+$,C="Sorted"+p+$,g="Cell",h=g+$,m="Value",f=m+"s",w=m+$,y=(e,t)=>e.every(t),T=(e,t)=>e.sort(t),v=(e,t)=>e.forEach(t),V=(e,t)=>e.map(t),x=e=>e.length,R=e=>0==x(e),k=(e,t)=>e.filter(t),S=(e,...t)=>e.push(...t),A=e=>e.pop(),P=(e,...t)=>e.unshift(...t),E=e=>e.shift(),D=JSON.parse,O=isFinite,N=(e,t)=>e instanceof t,L=e=>null==e,G=e=>e==l||e==a,j=t=>e(t)==l,M=e=>Array.isArray(e),J=t=>{const l=e(t);return G(l)||l==n&&O(t)?l:void 0},z=Object,W=z.keys,B=z.freeze,F=e=>N(e,z)&&e.constructor==z,U=(e,t)=>V(z.entries(e),(([e,l])=>t(l,e))),_=e=>F(e)&&R(W(e)),Z=(e,t)=>e?.has(t)??!1,H=e=>[...e?.values()??[]],Q=(e,t)=>e?.forEach(t),q=(e,t)=>e?.delete(t),K=e=>new Map(e),X=(e,t)=>e?.get(t),Y=(e,t)=>Q(e,((e,l)=>t(l,e))),ee=(e,t)=>V([...e?.entries()??[]],(([e,l])=>t(l,e))),te=(e,t,l)=>L(l)?(q(e,t),e):e?.set(t,l),le=(e,t,l)=>(Z(e,t)||te(e,t,l()),X(e,t)),ae=e=>e.toUpperCase(),ne=e=>e.toLowerCase(),oe="a ",de="A function for",re=", and registers a listener so that any changes to that result will cause a re-render",se="Callback",Ie="Del",$e="Deps",ce=$e+"?: React.DependencyList",ie="doRollback?: DoRollback",ue="actions: () => Return, "+ie,pe="export",be="Id",Ce="Invalid",ge="Json",he=ne(r),me="?: ",fe=" | undefined",we="NonNullable",ye="Partial",Te="Props",ve="Provider",Ve=`Registers a ${he} that will be called`,xe="Represents",Re="rowId: "+be,ke="Schema",Se="Set",Ae=", descending?: boolean, offset?: number, limit?: number",Pe="[]",Ee="the Store",De="Transaction",Oe=De+"Changes",Ne=ne(De),Le="Execute a "+Ne+" to make multiple mutations",Ge="Explicitly starts a "+Ne,je="Explicitly finishes a "+Ne,Me="the end of the "+Ne,Je="void",ze=" => "+Je,We="WhenSet",Be=" when setting it",Fe=oe+"string serialization of",Ue=" ",_e="Gets a callback that can ",Ze="the ",He=" the schema for",Qe=(e=0,l=0)=>`the ${ut[e]}content of`+(l?Ue+Ee:t),qe=(e=0,l,a=0)=>$t[l]+Ue+Qe(e,1)+(a?" when setting it":t),Ke=(e,t=0)=>xe+` a Row when ${t?"s":"g"}etting ${Qe()} the '${e}' `+c,Xe=(e,t,l=0)=>`Gets ${l?"sorted, paginated":"the"} Ids of the ${e}s in `+t,Ye=(e,t)=>`Calls a function for each ${e} in `+t,et=e=>"The props passed to a component that renders "+e,tt=e=>"A function that takes "+e,lt=(e,t=0)=>de+" listening to changes to "+it[e]+" in "+it[t],at=(e,l,a=0)=>Ve+" whenever "+it[e]+" in "+it[l]+" change"+(a?t:"s"),nt=e=>`the '${e}' `+c,ot=e=>"the specified Row in "+nt(e),dt=(e,t=0)=>$t[t]+` ${Qe()} `+nt(e),rt=(e,t=0)=>$t[t]+` ${Qe()} `+ot(e),st=(e,t,l=0)=>$t[l]+` the '${t}' Cell for `+ot(e),It=(e,t=0)=>$t[t]+` the '${e}' Value`,$t=["Gets","Checks existence of","Sets","Deletes","Sets part of",xe,"Gets "+Fe,"Sets "+Fe,Ve+" whenever",_e+"set",_e+"add",_e+"set part of",_e+"delete","Renders","Gets "+Fe+He,"Sets"+He,"Deletes"+He],ct=[s,"has","set","del","set","forEach",I,t],it=[Ee,i,Ze+c+Ue+$,oe+c,Ze+p+Ue+$,oe+p,Ze+g+Ue+$,oe+g,"invalid Cell changes",f,Ze+m+Ue+$,oe+m,"invalid Value changes",Ze+"sorted "+p+Ue+$],ut=[t,"tabular ","keyed value "],pt=e=>new Set(M(e)||L(e)?e:[e]),bt=(e,t)=>e?.add(t),Ct=/[^A-Za-z]+/,gt=/[^A-Za-z0-9]+/,ht=/^( *)\/\*\* *(.*?) *\*\/$/gm,mt=(e,t,l)=>e.substring(t,l),ft=e=>e.includes(","),wt=(e,t,l,a=1)=>{const n=`${t}${1==a?"":a}`;return Z(e,n)?wt(e,t,l,a+1):(te(e,n,l),n)},yt=e=>e.replace(ht,((e,t,l)=>{const a=77-Tt(t);return`${t}/**\n${l.replace(RegExp(`([^\\n]{1,${a}})(\\s|$)`,"g"),t+" * $1\n")}${t} */`})),Tt=e=>e.length,vt=(e,l=t)=>e.join(l),Vt=e=>e.flat(1e3),xt=(e,t=0)=>vt(V(e.split(gt),((e,l)=>(l>0||t?ae:ne)(mt(e,0,1))+mt(e,1)))),Rt=e=>ae(vt((e&&!Ct.test(e[0])?e:" "+e).split(gt),"_")),kt=e=>`/** ${e}. */`,St=(...e)=>vt(k(e,(e=>e)),", "),At=(...e)=>"{"+vt(e,"; ")+"}",Pt=(...e)=>At(...V(e,(e=>"readonly "+e))),Et=()=>{const e=[K(),K(),K(),K()],l=K(),a=K();return[(...e)=>vt(Vt(e),"\n"),(t,l,...a)=>v(a,(a=>v([0,1],(n=>(t??n)==n?bt(le(e[n],l,pt),a):0)))),(e,a,n,o=t,d=1)=>wt(l,e,[a,n,o,d]),(e,t,l)=>wt(a,e,M(l)?[`(${t}) => {`,l,"}"]:[`(${t}) => ${l}`]),(e,t)=>X(a,e)===t?e:wt(a,e,t),(l=0)=>V([...T(ee(e[l],((e,t)=>`import {${vt(T(H(e)),", ")}} from '${t}';`)),((e,t)=>ft(e)!=ft(t)?ft(e)?-1:1:e>t?1:-1)),t],(e=>e.replace("{React}","React"))),()=>ee(l,(([e,l,a,n],o)=>[kt(l),`${n?pe+" ":t}type ${o}${a} = ${e};`,t])),()=>ee(a,((e,l)=>(e=M(e)?e:[e],S(e,A(e)+";"),[`const ${l} = ${E(e)}`,e,t])))]},Dt=e=>{const t=new WeakMap;return l=>(t.has(l)||t.set(l,e(l)),t.get(l))},Ot=(e,t,l)=>[t=>U(e,((e,a)=>t(a,xt(a,1),l(Rt(a),`'${a}'`)))),(t,a)=>U(e[t],((e,t)=>a(t,e[o],e[d],l(Rt(t),`'${t}'`),xt(t,1)))),e=>U(t,((t,a)=>e(a,t[o],t[d],l(Rt(a),`'${a}'`),xt(a,1))))],Nt=(e,l,a,n)=>[(n,o)=>{const d=n+": "+o,s=e(i,At(...l((e=>`'${e}'?: {[rowId: Id]: `+At(...a(e,((e,l,a)=>`'${e}'${L(a)?"?":t}: ${l}`)))+"}"))),qe(1,5)),I=e(i+We,At(...l((e=>`'${e}'?: {[rowId: Id]: `+At(...a(e,((e,t)=>`'${e}'?: ${t}`)))+"}"))),qe(1,5,1)),$=e(c+be,"keyof "+s,"A "+c+" Id in "+Ee),m=`<TId extends ${$}>`,f=e(c,we+`<${s}[TId]>`,"A "+c+" in "+Ee,m),w=e(c+We,we+`<${I}[TId]>`,"A "+c+" in "+Ee+Be,m),y=e(p,f+"<TId>[Id]","A "+p+" in a "+c,m),T=e(p+We,w+"<TId>[Id]","A "+p+" in a "+c+Be,m),v=e(g+be,`Extract<keyof ${y}<TId>, Id>`,"A "+g+" Id in a "+p,m),V=e(g,we+`<${s}[TId]>[Id][CId]`,"A "+g+" in a "+p,`<TId extends ${$}, CId extends ${v}<TId>>`),x=e("CellIdCellArray",`CId extends ${v}<TId> ? [cellId: CId, cell: ${V}<TId, CId>] : never`,g+" Ids and types in a "+p,`<TId extends ${$}, CId = ${v}<TId>>`,0),R=e(g+se,`(...[cellId, cell]: ${x}<TId>)`+ze,tt(oe+g+" Id, and "+g),m),k=e(p+se,"(rowId: Id, forEachCell: (cellCallback: CellCallback<TId>) "+ze+") "+ze,tt(oe+p+" Id, and a "+g+" iterator"),m),S=e("TableIdForEachRowArray",`TId extends ${$} ? [tableId: TId, forEachRow: (rowCallback: ${k}<TId>)${ze}] : never`,c+" Ids and callback types",`<TId = ${$}>`,0),A=e(c+se,`(...[tableId, forEachRow]: ${S})`+ze,tt(oe+c+" Id, and a "+p+" iterator"),t),P=e("TableIdRowIdCellIdArray",`TId extends ${$} ? [tableId: TId, rowId: Id, cellId: ${v}<TId>] : never`,"Ids for GetCellChange",`<TId = ${$}>`,0),E=e("GetCellChange",`(...[tableId, rowId, cellId]: ${P}) => CellChange`,de+" returning information about any Cell's changes during a "+Ne),D=e(i+r,`(${d}, getCellChange: ${E}${fe})`+ze,lt(1)),O=e(u+r,`(${d})`+ze,lt(2)),N=e(c+r,`(${d}, tableId: ${$}, getCellChange: ${E}${fe})`+ze,lt(3)),G=e(b+r,`(${d}, tableId: ${$})`+ze,lt(4,3)),j=e(C+r,"("+St(d,"tableId: "+$,"cellId: Id"+fe,"descending: boolean","offset: number","limit: number"+fe,"sortedRowIds: Ids")+")"+ze,lt(13,3)),M=e(p+r,"("+St(""+d,"tableId: "+$,Re,`getCellChange: ${E}${fe}`)+")"+ze,lt(5,3)),J=e(h+r,"("+St(""+d,"tableId: "+$,Re)+")"+ze,lt(6,5)),z=e("CellListenerArgsArrayInner",`CId extends ${v}<TId> ? [${d}, tableId: TId, ${Re}, cellId: CId, newCell: ${V}<TId, CId> ${fe}, oldCell: ${V}<TId, CId> ${fe}, getCellChange: ${E} ${fe}] : never`,"Cell args for CellListener",`<TId extends ${$}, CId = ${v}<TId>>`,0),W=e("CellListenerArgsArrayOuter",`TId extends ${$} ? `+z+"<TId> : never","Table args for CellListener",`<TId = ${$}>`,0);return[s,I,$,f,w,y,T,v,V,R,k,A,D,O,N,G,j,M,J,e(g+r,`(...[${n}, tableId, rowId, cellId, newCell, oldCell, getCellChange]: ${W})`+ze,lt(7,5)),e(Ce+g+r,`(${d}, tableId: Id, ${Re}, cellId: Id, invalidCells: any[])`+ze,lt(8))]},(l,a)=>{const o=l+": "+a,d=e(f,At(...n(((e,l,a)=>`'${e}'${L(a)?"?":t}: ${l}`))),qe(2,5)),s=e(f+We,At(...n(((e,t)=>`'${e}'?: ${t}`))),qe(2,5,1)),I=e(m+be,"keyof "+d,"A "+m+" Id in "+Ee),$=e(m,we+`<${d}[VId]>`,"A "+m+" Id in "+Ee,`<VId extends ${I}>`),c=e("ValueIdValueArray",`VId extends ${I} ? [valueId: VId, value: ${$}<VId>] : never`,m+" Ids and types in "+Ee,`<VId = ${I}>`,0),i=e(m+se,`(...[valueId, value]: ${c})`+ze,tt(oe+m+" Id, and "+m)),u=e("GetValueChange",`(valueId: ${I}) => ValueChange`,de+" returning information about any Value's changes during a "+Ne),p=e(f+r,`(${o}, getValueChange: ${u}${fe})`+ze,lt(9)),b=e(w+r,`(${o})`+ze,lt(10)),C=e("ValueListenerArgsArray",`VId extends ${I} ? [${o}, valueId: VId, newValue: ${$}<VId> ${fe}, oldValue: ${$}<VId> ${fe}, getValueChange: ${u} ${fe}] : never`,"Value args for ValueListener",`<VId = ${I}>`,0);return[d,s,I,$,i,p,b,e(m+r,`(...[${l}, valueId, newValue, oldValue, getValueChange]: `+C+")"+ze,lt(11)),e(Ce+m+r,`(${o}, valueId: Id, invalidValues: any[])`+ze,lt(12))]},(t,l)=>e(De+r,`(${t}: ${l}, getTransactionChanges: GetTransactionChanges, getTransactionLog: GetTransactionLog)`+ze,de+" listening to the completion of a "+Ne)],Lt=(e,l=t,a=t)=>`store.${e}(${l})`+(a?" as "+a:t),Gt=(e,l=t)=>`fluent(() => ${Lt(e,l)})`,jt=(e,l=t,a=t)=>`store.${e}(${l?l+", ":t}proxy(listener)${a?", "+a:t})`,Mt=(e,l,n)=>{const[s,y,T,V,x,R,k,A]=Et(),[E,D,O]=Ot(e,l,x),[N,G,M]=Nt(T,E,D,O),J=K(),z=(e=0)=>ee(J,(([l,a,n,o,d],r)=>{const s=e?[r+`: ${d}(${l}): ${a} => ${n},`]:[r+d+`(${l}): ${a};`];return e||P(s,kt(o)),S(s,t),s})),W=(e,l,a,n,o,d=t)=>wt(J,e,[l,a,n,o,d]),B=(e,l,a,n,o,d=t,r=t,s=t)=>W(ct[e]+l+(4==e?ye:t)+a,d,n,(n==Z?Gt:Lt)(ct[e]+(4==e?ye:t)+a,r,e?void 0:n),o,s),F=(e,l,a,n=t,o=t,d=1,s=t)=>W(I+e+r,(n?n+", ":t)+he+": "+l+(d?", mutator?: boolean":t),be,jt(I+e+r,o,d?"mutator":t),a,s),U=`./${xt(n)}.d`,Z=xt(n,1),Q=xt(Z),q=[],le=K();let ae=[],ne=[];if(y(1,U,Z,`create${Z} as create${Z}Decl`),_(e))y(null,"tinybase",i);else{y(0,"tinybase","CellChange"),y(null,"tinybase",$);const[e,l,n,r,s,I,m,f,w,V,R,k,A,P,O,G,M,J,z,W,_]=N(Q,Z),Y=K();E(((e,t)=>{const l=`<'${e}'>`,a=[T(t+c,r+l,xe+` the '${e}' `+c),T(t+c+We,s+l,xe+` the '${e}' `+c+Be),T(t+p,I+l,Ke(e)),T(t+p+We,m+l,Ke(e,1)),T(t+g+be,f+l,`A Cell Id for the '${e}' `+c),T(t+g+se,V+l,tt(`a Cell Id and value from a Row in the '${e}' `+c)),T(t+p+se,R+l,tt(`a Row Id from the '${e}' Table, and a Cell iterator`))];te(Y,e,a),y(1,U,...a)})),y(1,U,e,l,n,f,k,A,P,O,G,M,J,z,W,_),ae=[e,l,n,f,A,P,O,G,M,J,z,W,Y],v([[e],[a],[Z,"tables: "+l,"tables"],[Z]],(([e,l,a],n)=>B(n,t,i,e,qe(1,n),l,a))),B(0,t,u,n+Pe,Xe(c,Ee)),B(5,t,c,Je,Ye(c,Ee),"tableCallback: "+k,"tableCallback as any"),E(((e,l,n)=>{const[o,d,r,s,I,i,u]=X(Y,e);v([[o],[a],[Z,"table: "+d,", table"],[Z]],(([a,o,d=t],r)=>B(r,l,c,a,dt(e,r),o,n+d))),B(0,l,b,$,Xe(p,nt(e)),t,n),B(0,l,C,$,Xe(p,nt(e),1),"cellId?: "+I+Ae,n+", cellId, descending, offset, limit"),B(5,l,p,Je,Ye(p,nt(e)),"rowCallback: "+u,n+", rowCallback as any"),v([[r],[a],[Z,", row: "+s,", row"],[Z],[Z,", partialRow: "+s,", partialRow"]],(([a,o=t,d=t],r)=>B(r,l,p,a,rt(e,r),Re+o,n+", rowId"+d))),B(6,l,p,be+fe,"Add a new Row to "+nt(e),"row: "+s+", reuseIds?: boolean",n+", row, reuseIds"),B(0,l,h,I+Pe,Xe(g,ot(e)),Re,n+", rowId"),B(5,l,g,Je,Ye(g,ot(e)),Re+", cellCallback: "+i,n+", rowId, cellCallback as any"),D(e,((o,d,r,s,I)=>{const $="Map"+xt(d,1);te(le,d,$);const c=d+(L(r)?fe:t);v([[c],[a],[Z,`, cell: ${d} | `+$,", cell as any"],[Z]],(([a,d=t,r=t],$)=>B($,l+I,g,a,st(e,o,$),Re+d,n+", rowId, "+s+r)))}))})),B(0,t,i+ge,ge,qe(1,6)),B(2,t,i+ge,Z,qe(1,7),"tablesJson: "+ge,"tables"+ge),F(i,A,qe(1,8)+" changes"),F(u,P,at(2,0,1)),F(c,O,at(3,0),`tableId: ${n} | null`,"tableId"),F(b,G,at(4,3,1),`tableId: ${n} | null`,"tableId"),F(C,M,at(13,3,1),St("tableId: TId",`cellId: ${f}<TId>`+fe,"descending: boolean","offset: number","limit: number"+fe),St("tableId","cellId","descending","offset","limit"),1,"<TId extends TableId>"),F(p,J,at(5,3),`tableId: ${n} | null, rowId: IdOrNull`,"tableId, rowId"),F(h,z,at(6,5,1),`tableId: ${n} | null, rowId: IdOrNull`,"tableId, rowId"),F(g,W,at(7,5),`tableId: ${n} | null, rowId: IdOrNull, cellId: ${vt(E((e=>X(Y,e)?.[4]??t))," | ")} | null`,"tableId, rowId, cellId"),F(Ce+g,_,Ve+" whenever an invalid Cell change was attempted","tableId: IdOrNull, rowId: IdOrNull, cellId: IdOrNull","tableId, rowId, cellId"),y(1,U,...H(le)),S(q,".set"+i+ke+"({",Vt(E(((e,l,a)=>[`[${a}]: {`,...D(e,((e,l,a,n)=>`[${n}]: {[${x(Rt(o),`'${o}'`)}]: ${x(Rt(l),`'${l}'`)}${L(a)?t:`, [${x(Rt(d),`'${d}'`)}]: `+(j(a)?x(Rt(a),`'${a}'`):a)}},`)),"},"]))),"})")}if(_(l))y(null,"tinybase",f);else{const[e,l,n,r,s,I,$,c,i]=G(Q,Z);y(1,U,e,l,n,s,I,$,c,i),ne=[e,l,n,I,$,c],v([[e],[a],[Z,"values: "+l,"values"],[Z],[Z,"partialValues: "+l,"partialValues"]],(([e,l,a],n)=>B(n,t,f,e,qe(2,n),l,a))),B(0,t,w,n+Pe,Xe(m,Ee)),B(5,t,m,"void",Ye(m,Ee),"valueCallback: "+s,"valueCallback as any"),O(((e,l,n,o,d)=>{const r="Map"+xt(l,1);te(le,l,r),v([[l],[a],[Z,`value: ${l} | `+r,", value as any"],[Z]],(([l,a,n=t],r)=>B(r,d,m,l,It(e,r),a,o+n)))})),B(0,t,f+ge,ge,qe(2,6)),B(2,t,f+ge,Z,qe(2,7),"valuesJson: "+ge,"values"+ge),F(f,I,qe(2,8)+" changes"),F(w,$,at(10,0,1)),F(m,c,at(11,0),`valueId: ${n} | null`,"valueId"),F(Ce+m,i,Ve+" whenever an invalid Value change was attempted","valueId: IdOrNull","valueId"),y(1,U,...H(le)),y(0,"tinybase","ValueChange"),S(q,".set"+f+ke+"({",O(((e,l,a,n)=>[`[${n}]: {[${x(Rt(o),`'${o}'`)}]: ${x(Rt(l),`'${l}'`)}${L(a)?t:`, [${x(Rt(d),`'${d}'`)}]: `+(j(a)?x(Rt(a),`'${a}'`):a)}},`])),"})")}B(0,t,"Content",`[${i}, ${f}]`,qe(0,0)),B(2,t,"Content",Z,qe(0,2),`[tables, values]: [${i}, ${f}]`,"[tables, values]"),B(2,t,Oe,Z,`Applies a set of ${Oe} to the Store`,"transactionChanges: "+Oe,"transactionChanges"),Y(le,((e,t)=>T(t,`(cell: ${e}${fe}) => `+e,`Takes a ${e} Cell value and returns another`))),y(null,"tinybase","DoRollback",be,"IdOrNull",ge,"Store",Oe),y(0,"tinybase","Get"+Oe,"GetTransactionLog"),B(0,t,ge,ge,qe(0,6)),B(2,t,ge,Z,qe(0,7),"tablesAndValuesJson: "+ge,"tablesAndValuesJson"),B(7,t,Ne,"Return",Le,ue,"actions, doRollback","<Return>"),B(7,t,"start"+De,Z,Ge),B(7,t,"finish"+De,Z,je,ie,"doRollback");const oe=M(Q,Z);return F("WillFinish"+De,oe,Ve+" just before "+Me,t,t,0),F("DidFinish"+De,oe,Ve+" just after "+Me,t,t,0),B(7,t,"call"+r,Z,"Manually provoke a listener to be called","listenerId: Id","listenerId"),B(3,t,r,Z,"Remove a listener that was previously added to "+Ee,"listenerId: Id","listenerId"),W("getStore",t,"Store","store",$t[0]+" the underlying Store object"),y(1,"tinybase","createStore"),y(1,U,Z,`create${Z} as create${Z}Decl`,oe),x("store",["createStore()",...q]),V("fluent","actions: () => Store",["actions();",`return ${Q};`]),V("proxy","listener: any",`(_: Store, ...params: any[]) => listener(${Q}, ...params)`),x(Q,["{",...z(1),"}"]),[s(...R(0),...k(),pe+" interface "+Z+" {",...z(0),"}",t,kt(`Creates a ${Z} object`),pe+" function create"+Z+"(): "+Z+";"),s(...R(1),pe+" const create"+Z+": typeof create"+Z+"Decl = () => {",...A(),`return Object.freeze(${Q});`,"};"),ae,ne]},Jt=e=>s+e,zt=e=>St(Jt(e),Jt(e)+$e),Wt="debugIds?: boolean",Bt="debugIds={debugIds}",Ft="then"+ce,Ut="Parameter",_t=": (parameter: "+Ut+", store: Store) => ",Zt="const contextValue = useContext(Context);",Ht=", based on a parameter",Qt=": ",qt="<"+Ut+",>",Kt=Ut+"ized"+se+"<"+Ut+">",Xt="rowId",Yt="rowId={rowId}",el=", separator, debugIds",tl="separator?: ReactElement | string",ll="then?: (store: Store",al=St(ll+")"+ze,Ft),nl="then, then"+$e,ol=Xt+Qt+be,dl="View",rl=(e,...t)=>St(...t,he+": "+e,he+ce,"mutator?: boolean"),sl=(...e)=>St(...e,he,he+$e,"mutator"),Il=(e,l,a,n,o)=>{const[d,s,I,y,T,v,V,x]=Et(),[R,k,A]=Ot(e,l,T),E=`./${xt(a)}.d`,D=`./${xt(a)}-ui-react.d`,O="tinybase/ui-react",N=xt(a,1),G=xt(N),j=N+"Or"+N+be,M=G+"Or"+N+be,J=G+`={${G}}`,z=K(),W=(e,l,a,n,o,d=t)=>(s(1,D,e+" as "+e+"Decl"),wt(z,e,[l,a,n,o,d])),B=(e,l,a,n,o,d=t)=>W("use"+e,l,a,n,o,d),F=(e,l,a,n,o=t,d=t,r=t,I=t,$=t)=>(s(1,O,`use${l} as use${l}Core`),B(e,St(o,q,I),a,te+`(${M}, use${l}Core, [`+(d||t)+($?"], ["+$:t)+"]);",n,r)),U=(e,t,l,a)=>W(e,t,1,l,a),Z=(e=0)=>ee(z,(([l,a,n,o,d],r)=>{const s=e?[pe+` const ${r}: typeof ${r}Decl = ${d}(${l}): ${1==a?"any":a} =>`,n]:[pe+` function ${r}${d}(${l}): ${1==a?"ComponentReturnType":a};`];return e||P(s,kt(o)),S(s,t),s}));s(null,"tinybase",be,"Store",se,Ut+"ized"+se),s(0,O,"ComponentReturnType"),s(null,O,"ExtraProps"),s(0,E,N);const H=I(j,N+" | "+be,`Used when you need to refer to a ${N} in a React hook or component`),Q=I(ve+Te,Pt(G+me+N,G+`ById?: {[${G}Id: Id]: ${N}}`),`Used with the ${ve} component, so that a `+N+" can be passed into the context of an application");s(0,"react","ReactElement","ComponentType"),s(1,"react","React"),s(1,D,H,Q);const q=M+me+H;T("{createContext, useContext, useMemo}","React"),T("Context",`createContext<[${N}?, {[${G}Id: Id]: ${N}}?]>([])`),B("Create"+N,`create: () => ${N}, create`+ce,N,"\n// eslint-disable-next-line react-hooks/exhaustive-deps\nuseMemo(create, createDeps)",`Create a ${N} within a React application with convenient memoization`);const Y=B(N,"id?: Id",N+fe,["{",Zt,"return id == null ? contextValue[0] : contextValue[1]?.[id];","}"],`Get a reference to a ${N} from within a ${ve} component context`),te=y("useHook",M+`: ${H} | undefined, hook: (...params: any[]) => any, preParams: any[], postParams: any[] = []`,[`const ${G} = ${Y}(${M} as Id);`,`return hook(...preParams, ((${M} == null || typeof ${M} == 'string')`,`? ${G} : ${M})?.getStore(), ...postParams)`]),le=y("getProps","getProps: ((id: any) => ExtraProps) | undefined, id: Id","(getProps == null) ? ({} as ExtraProps) : getProps(id)"),ae=y("wrap",St("children: any","separator?: any","encloseWithId?: boolean","id?: Id"),["const separated = separator==null || !Array.isArray(children)"," ? children"," : children.map((child, c) => (c > 0 ? [separator, child] : child));","return encloseWithId ? [id, ':{', separated, '}'] : separated;"]),ne=T("NullComponent","() => null");if(!_(e)){const[e,l,a,o,d,m,f,w,T,v,V,x,S]=n;s(null,E,e,l,a,d,m,f,w,T,v,V,x),s(0,E,o),s(1,E,N),s(null,"tinybase",$,"IdOrNull");const A=y("tableView",`{${G}, rowComponent, getRowComponentProps`+el+"}: any, rowIds: Ids, tableId: Id, defaultRowComponent: React.ComponentType<any>",["const Row = rowComponent ?? defaultRowComponent;",`return ${ae}(rowIds.map((rowId) => (`,"<Row","{..."+le+"(getRowComponentProps, rowId)}","key={rowId}","tableId={tableId}",Yt,J,Bt,"/>","))",el,", tableId,",");"]),P=y("getDefaultTableComponent","tableId: Id",vt(R(((e,t,l)=>`tableId == ${l} ? ${t}TableView : `)))+ne),O=y("getDefaultCellComponent","tableId: Id, cellId: Id",vt(R(((e,t,l)=>`tableId == ${l} ? ${vt(k(e,((e,l,a,n,o)=>`cellId == ${n} ? `+t+o+"CellView : ")))+ne} : `)))+ne);F(i,i,e,qe(1,0)+re);const j=F(u,u,a+Pe,Xe(c,Ee)+re);F(Se+i+se,Se+i+se,Kt,qe(1,9)+Ht,St(Jt(i)+_t+l,Jt(i)+ce),zt(i),qt,St(ll,`tables: ${l})`+ze,Ft),nl),F(Ie+i+se,Ie+i+se,se,qe(1,12),t,t,t,al,nl);const M=I(g+Te,Pt("tableId?: TId","rowId: Id","cellId?: CId",G+me+N,Wt),et(oe+g),`<TId extends ${a}, CId extends ${o}<TId>>`),z=I(p+Te,Pt("tableId?: TId","rowId: Id",G+me+N,"cellComponents?: {readonly [CId in "+o+`<TId>]?: ComponentType<${M}<TId, CId>>;}`,`getCellComponentProps?: (cellId: ${o}<TId>) => ExtraProps`,tl,Wt),et(oe+p),`<TId extends ${a}>`),W=I(c+Te,Pt("tableId?: TId",G+me+N,`rowComponent?: ComponentType<${z}<TId>>`,"getRowComponentProps?: (rowId: Id) => ExtraProps",tl,Wt),et(oe+c),`<TId extends ${a}>`),B=I("Sorted"+c+Te,Pt("tableId?: TId","cellId?: "+o+"<TId>","descending?: boolean","offset?: number","limit?: number",G+me+N,`rowComponent?: ComponentType<${z}<TId>>`,"getRowComponentProps?: (rowId: Id) => ExtraProps",tl,Wt),et(oe+"sorted "+c),`<TId extends ${a}>`),_=I(i+Te,Pt(G+me+N,"tableComponents?: {readonly [TId in "+a+`]?: ComponentType<${W}<TId>>;}`,`getTableComponentProps?: (tableId: ${a}) => ExtraProps`,tl,Wt),et(Qe(1,1)));s(1,D,_,W,B,z,M),U(i+dl,"{"+G+", tableComponents, getTableComponentProps"+el+"}: "+_,[ae+`(${j}(${G}).map((tableId) => {`,"const Table = (tableComponents?.[tableId] ?? "+P+"(tableId)) as React.ComponentType<TableProps<typeof tableId>>;","return <Table",`{...${le}(getTableComponentProps, tableId)}`,"tableId={tableId}","key={tableId}",J,Bt,"/>;","}), separator)"],qe(1,13)+re),R(((e,l,a)=>{const[n,o,d,r,I]=X(S,e);s(null,E,n,o,d,r,I),F(l+c,c,n,dt(e)+re,t,a);const i=F(l+b,b,$,Xe(p,nt(e))+re,t,a),u=F(l+C,C,$,Xe(p,nt(e),1)+re,"cellId?: "+I+", descending?: boolean, offset?: number, limit?: number",a+", cellId, descending, offset, limit");F(l+p,p,d,rt(e)+re,ol,St(a,Xt));const m=F(l+h,h,I+Pe,Xe(g,ot(e))+re,ol,St(a,Xt));F(Se+l+c+se,Se+c+se,Kt,dt(e,9)+Ht,St(Jt(c)+_t+o,Jt(c)+ce),St(a,zt(c)),qt,St(ll,`table: ${o})`+ze,Ft),nl),F(Ie+l+c+se,Ie+c+se,se,dt(e,12),t,a,t,al,nl),F(Se+l+p+se,Se+p+se,Kt,rt(e,9)+Ht,St(ol,Jt(p)+_t+r,Jt(p)+ce),St(a,Xt,zt(p)),qt,St(ll,`row: ${r})`+ze,Ft),nl),F("Add"+l+p+se,"Add"+p+se,Kt,rt(e,10)+Ht,St(Jt(p)+_t+r,Jt(p)+ce),St(a,zt(p)),qt,"then?: ("+St(ol+fe,"store: Store","row: "+r+")"+ze,"then"+ce)+", reuseRowIds?: boolean",nl+", reuseRowIds"),F(Se+l+ye+p+se,Se+ye+p+se,Kt,rt(e,11)+Ht,St(ol,Jt(ye+p)+_t+r,Jt(ye+p)+ce),St(a,Xt,zt(ye+p)),qt,St(ll,`partialRow: ${r})`+ze,Ft),nl),F(Ie+l+p+se,Ie+p+se,se,rt(e,12),ol,St(a,Xt),t,al,nl);const f=U(l+p+dl,"{rowId, "+G+", cellComponents, getCellComponentProps"+el+`}: ${z}<'${e}'>`,[ae+`(${m}(rowId, ${G}).map((cellId) => {`,"const Cell = (cellComponents?.[cellId] ?? "+O+`(${a}, cellId)) as React.ComponentType<CellProps<typeof `+a+", typeof cellId>>;","return <Cell",`{...${le}(getCellComponentProps, cellId)} `,"key={cellId}",`tableId={${a}}`,Yt,"cellId={cellId}",J,Bt,"/>;","})"+el+", rowId)"],rt(e,13)+re);U(l+"Sorted"+c+dl,"{cellId, descending, offset, limit, ...props}: "+B+`<'${e}'>`,A+"(props, "+u+`(cellId, descending, offset, limit, props.${G}), ${a}, ${f});`,dt(e,13)+", sorted"+re),U(l+c+dl,`props: ${W}<'${e}'>`,A+"(props, "+i+`(props.${G}), ${a}, ${f});`,dt(e,13)+re),k(e,((n,o,d,r,I)=>{const $="Map"+xt(o,1);s(0,E,$),s(1,E,$);const c=F(l+I+g,g,o+(L(d)?fe:t),st(e,n)+re,ol,St(a,Xt,r));F(Se+l+I+g+se,Se+g+se,Kt,st(e,n,9)+Ht,St(ol,Jt(g)+_t+o+" | "+$,Jt(g)+ce),St(a,Xt,r,zt(g)),qt,St(ll,`cell: ${o} | ${$})`+ze,Ft),nl),F(Ie+l+I+g+se,Ie+g+se,se,st(e,n,12),St(ol,"forceDel?: boolean"),St(a,Xt,r,"forceDel"),t,al,nl),U(l+I+g+dl,`{rowId, ${G}, debugIds}: `+M+`<'${e}', '${n}'>`,[ae+`('' + ${c}(rowId, `+G+`) ?? '', undefined, debugIds, ${r})`],st(e,n,13)+re)}))}));const Z=vt(R((e=>X(S,e)?.[4]??t))," | ");F(i+r,i+r,Je,qe(1,8)+" changes",rl(d),sl()),F(u+r,u+r,Je,at(2,0,1),rl(m),sl()),F(c+r,c+r,Je,at(3,0),rl(f,`tableId: ${a} | null`),sl("tableId")),F(b+r,b+r,Je,at(4,3,1),rl(w,`tableId: ${a} | null`),sl("tableId")),F(C+r,C+r,Je,at(13,3,1),rl(T,`tableId: ${a} | null`,"cellId: "+Z+fe,"descending: boolean","offset: number","limit: number"+fe),sl("tableId","cellId","descending","offset","limit")),F(p+r,p+r,Je,at(5,3),rl(v,`tableId: ${a} | null`,Xt+": IdOrNull"),sl("tableId",Xt)),F(h+r,h+r,Je,at(6,5,1),rl(V,`tableId: ${a} | null`,Xt+": IdOrNull"),sl("tableId",Xt)),F(g+r,g+r,Je,at(7,5),rl(x,`tableId: ${a} | null`,Xt+": IdOrNull",`cellId: ${Z} | null`),sl("tableId",Xt,"cellId"))}if(!_(l)){const[e,l,a,n,d,$]=o;s(null,E,...o),s(1,E,N);const c=y("getDefaultValueComponent","valueId: Id",vt(A(((e,t,l,a,n)=>`valueId == ${a} ? `+n+"ValueView : ")))+ne);F(f,f,e,qe(2,0)+re);const i=F(w,w,a+Pe,Xe(m,Ee)+re);F(Se+f+se,Se+f+se,Kt,qe(2,9)+Ht,St(Jt(f)+_t+l,Jt(f)+ce),zt(f),qt,St(ll,`values: ${l})`+ze,Ft),nl),F(Se+ye+f+se,Se+ye+f+se,Kt,qe(2,11)+Ht,St(Jt(ye+f)+_t+l,Jt(ye+f)+ce),zt(ye+f),qt,St(ll,`partialValues: ${l})`+ze,Ft),nl),F(Ie+f+se,Ie+f+se,se,qe(2,12),t,t,t,al,nl);const u=I(m+Te,Pt("valueId?: VId",G+me+N,Wt),et("a Value"),`<VId extends ${a}>`),p=I(f+Te,Pt(G+me+N,"valueComponents?: {readonly [VId in "+a+`]?: ComponentType<${u}<VId>>;}`,`getValueComponentProps?: (valueId: ${a}) => ExtraProps`,tl,Wt),et(Qe(2,1)));s(1,D,p,u),U(f+dl,"{"+G+", valueComponents, getValueComponentProps"+el+"}: "+p,[ae+`(${i}(${G}).map((valueId) => {`,"const Value = valueComponents?.[valueId] ?? "+c+"(valueId);","return <Value",`{...${le}(getValueComponentProps, valueId)}`,"key={valueId}",J,Bt,"/>;","}), separator)"],qe(2,13)+re),A(((e,l,a,n,o)=>{const d="Map"+xt(l,1);s(0,E,d),s(1,E,d);const r=F(o+m,m,l,It(e)+re,t,n);F(Se+o+m+se,Se+m+se,Kt,It(e,9)+Ht,St(Jt(m)+_t+l+" | "+d,Jt(m)+ce),St(n,zt(m)),qt,St(ll,`value: ${l} | ${d})`+ze,Ft),nl),F(Ie+o+m+se,Ie+m+se,se,It(e,12),t,n,t,al,nl),U(o+m+dl,`{${G}, debugIds}: ${u}<'${e}'>`,[ae+`('' + ${r}(`+G+`) ?? '', undefined, debugIds, ${n})`],It(e,13)+re)})),F(f+r,f+r,Je,qe(2,8)+" changes",rl(n),sl()),F(w+r,w+r,Je,at(10,0,1),rl(d),sl()),F(m+r,m+r,Je,at(11,0),rl($,`valueId: ${a} | null`),sl("valueId"))}return U(ve,`{${G}, ${G}ById, children}: `+Q+" & {children: React.ReactNode}",["{",Zt,"return (","<Context."+ve,"value={useMemo(",`() => [${G} ?? contextValue[0], {...contextValue[1], ...${G}ById}],`,`[${G}, ${G}ById, contextValue],`,")}>","{children}",`</Context.${ve}>`,");","}"],"Wraps part of an application in a context that provides default objects to be used by hooks and components within"),[d(...v(0),...V(),...Z(0)),d(...v(1),...x(),...Z(1))]},$l=(e,l,a)=>{if(_(e)&&_(l))return[t,t,t,t];const[n,o,d,r]=Mt(e,l,a);return[n,o,...Il(e,l,a,d,r)]},cl={parser:"typescript",singleQuote:!0,trailingComma:"all",bracketSpacing:!1,jsdocSingleLineComment:!1},il=Dt((e=>{const t=()=>{const t=D(e.getTablesSchemaJson());return!_(t)||y(e.getTableIds(),(l=>{const a=e.getRowIds(l),n=K();if(y(a,(t=>y(e.getCellIds(l,t),(a=>{const o=e.getCell(l,t,a),d=le(n,a,(()=>[J(o),K(),[0],0])),[r,s,[I]]=d,$=le(s,o,(()=>0))+1;return $>I&&(d[2]=[$,o]),te(s,o,$),d[3]++,r==J(o)})))))return t[l]={},Q(n,(([e,,[,n],r],s)=>{t[l][s]={[o]:e,...r==x(a)?{[d]:n}:{}}})),1}))?t:{}},l=()=>{const t=D(e.getValuesSchemaJson());return _(t)&&e.forEachValue(((e,l)=>{t[e]={[o]:J(l)}})),t},a=e=>$l(t(),l(),e),n=async e=>{const t=["d.ts","ts","d.ts","tsx"];let l;try{l=(await import("prettier")).format}catch(e){l=e=>e}return V(a(e),((e,a)=>yt(l(e,{...cl,filepath:"_."+t[a]}))))};return B({getStoreStats:t=>{let l=0,a=0,n=0;const o={};return e.forEachTable(((e,d)=>{l++;let r=0,s=0;const I={};d(((e,l)=>{r++;let a=0;l((()=>a++)),s+=a,t&&(I[e]={rowCells:a})})),a+=r,n+=s,t&&(o[e]={tableRows:r,tableCells:s,rows:I})})),{totalTables:l,totalRows:a,totalCells:n,totalValues:x(e.getValueIds()),jsonLength:Tt(e.getJson()),...t?{detail:{tables:o}}:{}}},getStoreTablesSchema:t,getStoreValuesSchema:l,getStoreApi:a,getPrettyStoreApi:n,getStore:()=>e})}));export{il as createTools};
|
package/lib/tools.js.gz
CHANGED
|
Binary file
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-automerge module of the TinyBase project provides a way to save
|
|
3
|
+
* and load Store data, to and from an Automerge document.
|
|
4
|
+
*
|
|
5
|
+
* A single entry point, the createAutomergePersister function, is provided,
|
|
6
|
+
* which returns a new Persister object that can bind a Store to a provided
|
|
7
|
+
* Automerge document handle (and in turn, its document).
|
|
8
|
+
*
|
|
9
|
+
* @see Synchronizing Data guide
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
* @module persister-automerge
|
|
12
|
+
* @since v4.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {DocHandle} from 'automerge-repo';
|
|
16
|
+
import {Persister} from './persisters';
|
|
17
|
+
import {Store} from './store';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The createAutomergePersister function creates a Persister object that can
|
|
21
|
+
* persist the Store to an Automerge document.
|
|
22
|
+
*
|
|
23
|
+
* As well as providing a reference to the Store to persist, you must provide
|
|
24
|
+
* the Automerge document handler to persist it with.
|
|
25
|
+
*
|
|
26
|
+
* @param store The Store to persist.
|
|
27
|
+
* @param docHandle The Automerge document handler to persist the Store with.
|
|
28
|
+
* @param docMapName The name of the map used inside the Automerge document to
|
|
29
|
+
* sync the Store to (which otherwise will default to 'tinybase').
|
|
30
|
+
* @returns A reference to the new Persister object.
|
|
31
|
+
* @example
|
|
32
|
+
* This example creates a Persister object and persists the Store to an
|
|
33
|
+
* Automerge document.
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* const docHandler = new AutomergeRepo.Repo({network: []}).create();
|
|
37
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
38
|
+
* const persister = createAutomergePersister(store, docHandler);
|
|
39
|
+
*
|
|
40
|
+
* await persister.save();
|
|
41
|
+
* // Store will be saved to the document.
|
|
42
|
+
*
|
|
43
|
+
* console.log(docHandler.doc);
|
|
44
|
+
* // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
|
|
45
|
+
*
|
|
46
|
+
* persister.destroy();
|
|
47
|
+
* ```
|
|
48
|
+
* @example
|
|
49
|
+
* This more complex example uses Automerge networking to keep two Store objects
|
|
50
|
+
* (each with their own Persister objects and Automerge documents) in sync with
|
|
51
|
+
* each other using a network.
|
|
52
|
+
*
|
|
53
|
+
* ```js
|
|
54
|
+
* // Bind the first Store to a network-enabled automerge-repo
|
|
55
|
+
* const repo1 = new AutomergeRepo.Repo({
|
|
56
|
+
* network: [new BroadcastChannelNetworkAdapter()],
|
|
57
|
+
* });
|
|
58
|
+
* const docHandler1 = repo1.create();
|
|
59
|
+
* await docHandler1.value();
|
|
60
|
+
* const store1 = createStore();
|
|
61
|
+
* const persister1 = createAutomergePersister(store1, docHandler1);
|
|
62
|
+
* await persister1.startAutoLoad();
|
|
63
|
+
* await persister1.startAutoSave();
|
|
64
|
+
*
|
|
65
|
+
* // Bind the second Store to a different network-enabled automerge-repo
|
|
66
|
+
* const repo2 = new AutomergeRepo.Repo({
|
|
67
|
+
* network: [new BroadcastChannelNetworkAdapter()],
|
|
68
|
+
* });
|
|
69
|
+
* const docHandler2 = repo2.find(docHandler1.documentId);
|
|
70
|
+
* await docHandler2.value();
|
|
71
|
+
* const store2 = createStore();
|
|
72
|
+
* const persister2 = createAutomergePersister(store2, docHandler2);
|
|
73
|
+
* await persister2.startAutoLoad();
|
|
74
|
+
* await persister2.startAutoSave();
|
|
75
|
+
*
|
|
76
|
+
* // A function that waits briefly and then for the documents to synchronize
|
|
77
|
+
* // with each other, merely for the purposes of sequentiality in this example.
|
|
78
|
+
* const syncDocsWait = async () => {
|
|
79
|
+
* await new Promise((resolve) => setTimeout(() => resolve(0), 10));
|
|
80
|
+
* await docHandler1.value();
|
|
81
|
+
* await docHandler2.value();
|
|
82
|
+
* };
|
|
83
|
+
*
|
|
84
|
+
* // Wait for the documents to synchronize in their initial state.
|
|
85
|
+
* await syncDocsWait();
|
|
86
|
+
*
|
|
87
|
+
* // Make a change to each of the two Stores.
|
|
88
|
+
* store1.setTables({pets: {fido: {species: 'dog'}}});
|
|
89
|
+
* store2.setValues({open: true});
|
|
90
|
+
*
|
|
91
|
+
* // Wait for the documents to synchronize in their new state.
|
|
92
|
+
* await syncDocsWait();
|
|
93
|
+
*
|
|
94
|
+
* // Ensure the Stores are in sync.
|
|
95
|
+
* console.log(store1.getContent());
|
|
96
|
+
* // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
|
|
97
|
+
* console.log(store2.getContent());
|
|
98
|
+
* // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
|
|
99
|
+
*
|
|
100
|
+
* persister1.destroy();
|
|
101
|
+
* persister2.destroy();
|
|
102
|
+
* ```
|
|
103
|
+
* @category Creation
|
|
104
|
+
* @since v4.0
|
|
105
|
+
*/
|
|
106
|
+
export function createAutomergePersister(
|
|
107
|
+
store: Store,
|
|
108
|
+
docHandle: DocHandle<any>,
|
|
109
|
+
docMapName?: string,
|
|
110
|
+
): Persister;
|
|
@@ -26,18 +26,19 @@ import {Doc as YDoc} from 'yjs';
|
|
|
26
26
|
* @param store The Store to persist.
|
|
27
27
|
* @param yDoc The Yjs document to persist the Store to.
|
|
28
28
|
* @param yMapName The name of the Y.Map used inside the Yjs document to sync
|
|
29
|
-
* the Store
|
|
29
|
+
* the Store to (which otherwise will default to 'tinybase').
|
|
30
30
|
* @returns A reference to the new Persister object.
|
|
31
31
|
* @example
|
|
32
32
|
* This example creates a Persister object and persists the Store to a Yjs
|
|
33
33
|
* document.
|
|
34
|
+
*
|
|
34
35
|
* ```js
|
|
35
36
|
* const doc = new Y.Doc();
|
|
36
37
|
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
37
38
|
* const persister = createYjsPersister(store, doc);
|
|
38
39
|
*
|
|
39
40
|
* await persister.save();
|
|
40
|
-
* // Store
|
|
41
|
+
* // Store will be saved to the document.
|
|
41
42
|
*
|
|
42
43
|
* console.log(doc.toJSON());
|
|
43
44
|
* // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
|
|
@@ -553,14 +553,14 @@ export interface Persister {
|
|
|
553
553
|
* covers. See those implementations for ideas on how to implement your own
|
|
554
554
|
* Persister types.
|
|
555
555
|
*
|
|
556
|
-
* This API changed in v4.0. Any custom persisters created on previous
|
|
557
|
-
*
|
|
558
|
-
*
|
|
559
|
-
*
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
*
|
|
563
|
-
* `
|
|
556
|
+
* This API changed in v4.0. Any custom persisters created on previous versions
|
|
557
|
+
* should be upgraded. Most notably, the `setPersisted` function parameter is
|
|
558
|
+
* provided with a `getContent` function to get the content from the Store
|
|
559
|
+
* itself, rather than being passed pre-serialized JSON. It also receives
|
|
560
|
+
* information about the changes made during a transaction. The `getPersisted`
|
|
561
|
+
* function must return the content (or nothing) rather than JSON.
|
|
562
|
+
* `startListeningToPersisted` has been renamed `addPersisterListener`, and
|
|
563
|
+
* `stopListeningToPersisted` has been renamed `delPersisterListener`.
|
|
564
564
|
*
|
|
565
565
|
* @param store The Store to persist.
|
|
566
566
|
* @param getPersisted An asynchronous function which will fetch content from
|
package/lib/types/tools.d.ts
CHANGED
|
@@ -429,11 +429,11 @@ export interface Tools {
|
|
|
429
429
|
* ).getPrettyStoreApi('shop');
|
|
430
430
|
*
|
|
431
431
|
* const dTsLines = dTs.split('\n');
|
|
432
|
-
* console.log(dTsLines[
|
|
432
|
+
* console.log(dTsLines[17]);
|
|
433
433
|
* // -> `export type Tables = {pets?: {[rowId: Id]: {price?: number}}};`
|
|
434
434
|
*
|
|
435
435
|
* const tsLines = ts.split('\n');
|
|
436
|
-
* console.log(tsLines[
|
|
436
|
+
* console.log(tsLines[81]);
|
|
437
437
|
* // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
|
|
438
438
|
* ```
|
|
439
439
|
* @example
|
|
@@ -450,11 +450,11 @@ export interface Tools {
|
|
|
450
450
|
* ).getPrettyStoreApi('shop');
|
|
451
451
|
*
|
|
452
452
|
* const dTsLines = dTs.split('\n');
|
|
453
|
-
* console.log(dTsLines[
|
|
453
|
+
* console.log(dTsLines[17]);
|
|
454
454
|
* // -> 'export type Tables = {pets?: {[rowId: Id]: {price: number}}};'
|
|
455
455
|
*
|
|
456
456
|
* const tsLines = ts.split('\n');
|
|
457
|
-
* console.log(tsLines[
|
|
457
|
+
* console.log(tsLines[83]);
|
|
458
458
|
* // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
|
|
459
459
|
* ```
|
|
460
460
|
* @category Modelling
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The persister-automerge module of the TinyBase project provides a way to save
|
|
3
|
+
* and load Store data, to and from an Automerge document.
|
|
4
|
+
*
|
|
5
|
+
* A single entry point, the createAutomergePersister function, is provided,
|
|
6
|
+
* which returns a new Persister object that can bind a Store to a provided
|
|
7
|
+
* Automerge document handle (and in turn, its document).
|
|
8
|
+
*
|
|
9
|
+
* @see Synchronizing Data guide
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
* @module persister-automerge
|
|
12
|
+
* @since v4.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {OptionalSchemas, Store} from './store';
|
|
16
|
+
import {DocHandle} from 'automerge-repo';
|
|
17
|
+
import {Persister} from './persisters';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The createAutomergePersister function creates a Persister object that can
|
|
21
|
+
* persist the Store to an Automerge document.
|
|
22
|
+
*
|
|
23
|
+
* This has schema-based typing. The following is a simplified representation:
|
|
24
|
+
*
|
|
25
|
+
* ```ts override
|
|
26
|
+
* createAutomergePersister(
|
|
27
|
+
* store: Store,
|
|
28
|
+
* docHandle: DocHandle<any>,
|
|
29
|
+
* docMapName?: string,
|
|
30
|
+
* ): Persister;
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* As well as providing a reference to the Store to persist, you must provide
|
|
34
|
+
* the Automerge document handler to persist it with.
|
|
35
|
+
*
|
|
36
|
+
* @param store The Store to persist.
|
|
37
|
+
* @param docHandle The Automerge document handler to persist the Store with.
|
|
38
|
+
* @param docMapName The name of the map used inside the Automerge document to
|
|
39
|
+
* sync the Store to (which otherwise will default to 'tinybase').
|
|
40
|
+
* @returns A reference to the new Persister object.
|
|
41
|
+
* @example
|
|
42
|
+
* This example creates a Persister object and persists the Store to an
|
|
43
|
+
* Automerge document.
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* const docHandler = new AutomergeRepo.Repo({network: []}).create();
|
|
47
|
+
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
48
|
+
* const persister = createAutomergePersister(store, docHandler);
|
|
49
|
+
*
|
|
50
|
+
* await persister.save();
|
|
51
|
+
* // Store will be saved to the document.
|
|
52
|
+
*
|
|
53
|
+
* console.log(docHandler.doc);
|
|
54
|
+
* // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
|
|
55
|
+
*
|
|
56
|
+
* persister.destroy();
|
|
57
|
+
* ```
|
|
58
|
+
* @example
|
|
59
|
+
* This more complex example uses Automerge networking to keep two Store objects
|
|
60
|
+
* (each with their own Persister objects and Automerge documents) in sync with
|
|
61
|
+
* each other using a network.
|
|
62
|
+
*
|
|
63
|
+
* ```js
|
|
64
|
+
* // Bind the first Store to a network-enabled automerge-repo
|
|
65
|
+
* const repo1 = new AutomergeRepo.Repo({
|
|
66
|
+
* network: [new BroadcastChannelNetworkAdapter()],
|
|
67
|
+
* });
|
|
68
|
+
* const docHandler1 = repo1.create();
|
|
69
|
+
* await docHandler1.value();
|
|
70
|
+
* const store1 = createStore();
|
|
71
|
+
* const persister1 = createAutomergePersister(store1, docHandler1);
|
|
72
|
+
* await persister1.startAutoLoad();
|
|
73
|
+
* await persister1.startAutoSave();
|
|
74
|
+
*
|
|
75
|
+
* // Bind the second Store to a different network-enabled automerge-repo
|
|
76
|
+
* const repo2 = new AutomergeRepo.Repo({
|
|
77
|
+
* network: [new BroadcastChannelNetworkAdapter()],
|
|
78
|
+
* });
|
|
79
|
+
* const docHandler2 = repo2.find(docHandler1.documentId);
|
|
80
|
+
* await docHandler2.value();
|
|
81
|
+
* const store2 = createStore();
|
|
82
|
+
* const persister2 = createAutomergePersister(store2, docHandler2);
|
|
83
|
+
* await persister2.startAutoLoad();
|
|
84
|
+
* await persister2.startAutoSave();
|
|
85
|
+
*
|
|
86
|
+
* // A function that waits briefly and then for the documents to synchronize
|
|
87
|
+
* // with each other, merely for the purposes of sequentiality in this example.
|
|
88
|
+
* const syncDocsWait = async () => {
|
|
89
|
+
* await new Promise((resolve) => setTimeout(() => resolve(0), 10));
|
|
90
|
+
* await docHandler1.value();
|
|
91
|
+
* await docHandler2.value();
|
|
92
|
+
* };
|
|
93
|
+
*
|
|
94
|
+
* // Wait for the documents to synchronize in their initial state.
|
|
95
|
+
* await syncDocsWait();
|
|
96
|
+
*
|
|
97
|
+
* // Make a change to each of the two Stores.
|
|
98
|
+
* store1.setTables({pets: {fido: {species: 'dog'}}});
|
|
99
|
+
* store2.setValues({open: true});
|
|
100
|
+
*
|
|
101
|
+
* // Wait for the documents to synchronize in their new state.
|
|
102
|
+
* await syncDocsWait();
|
|
103
|
+
*
|
|
104
|
+
* // Ensure the Stores are in sync.
|
|
105
|
+
* console.log(store1.getContent());
|
|
106
|
+
* // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
|
|
107
|
+
* console.log(store2.getContent());
|
|
108
|
+
* // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
|
|
109
|
+
*
|
|
110
|
+
* persister1.destroy();
|
|
111
|
+
* persister2.destroy();
|
|
112
|
+
* ```
|
|
113
|
+
* @category Creation
|
|
114
|
+
* @since v4.0
|
|
115
|
+
*/
|
|
116
|
+
export function createAutomergePersister<Schemas extends OptionalSchemas>(
|
|
117
|
+
store: Store<Schemas>,
|
|
118
|
+
docHandle: DocHandle<any>,
|
|
119
|
+
docMapName?: string,
|
|
120
|
+
): Persister<Schemas>;
|
|
@@ -36,18 +36,19 @@ import {Doc as YDoc} from 'yjs';
|
|
|
36
36
|
* @param store The Store to persist.
|
|
37
37
|
* @param yDoc The Yjs document to persist the Store to.
|
|
38
38
|
* @param yMapName The name of the Y.Map used inside the Yjs document to sync
|
|
39
|
-
* the Store
|
|
39
|
+
* the Store to (which otherwise will default to 'tinybase').
|
|
40
40
|
* @returns A reference to the new Persister object.
|
|
41
41
|
* @example
|
|
42
42
|
* This example creates a Persister object and persists the Store to a Yjs
|
|
43
43
|
* document.
|
|
44
|
+
*
|
|
44
45
|
* ```js
|
|
45
46
|
* const doc = new Y.Doc();
|
|
46
47
|
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
47
48
|
* const persister = createYjsPersister(store, doc);
|
|
48
49
|
*
|
|
49
50
|
* await persister.save();
|
|
50
|
-
* // Store
|
|
51
|
+
* // Store will be saved to the document.
|
|
51
52
|
*
|
|
52
53
|
* console.log(doc.toJSON());
|
|
53
54
|
* // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
|
|
@@ -635,14 +635,14 @@ export interface Persister<in out Schemas extends OptionalSchemas> {
|
|
|
635
635
|
* covers. See those implementations for ideas on how to implement your own
|
|
636
636
|
* Persister types.
|
|
637
637
|
*
|
|
638
|
-
* This API changed in v4.0. Any custom persisters created on previous
|
|
639
|
-
*
|
|
640
|
-
*
|
|
641
|
-
*
|
|
642
|
-
*
|
|
643
|
-
*
|
|
644
|
-
*
|
|
645
|
-
* `
|
|
638
|
+
* This API changed in v4.0. Any custom persisters created on previous versions
|
|
639
|
+
* should be upgraded. Most notably, the `setPersisted` function parameter is
|
|
640
|
+
* provided with a `getContent` function to get the content from the Store
|
|
641
|
+
* itself, rather than being passed pre-serialized JSON. It also receives
|
|
642
|
+
* information about the changes made during a transaction. The `getPersisted`
|
|
643
|
+
* function must return the content (or nothing) rather than JSON.
|
|
644
|
+
* `startListeningToPersisted` has been renamed `addPersisterListener`, and
|
|
645
|
+
* `stopListeningToPersisted` has been renamed `delPersisterListener`.
|
|
646
646
|
*
|
|
647
647
|
* @param store The Store to persist.
|
|
648
648
|
* @param getPersisted An asynchronous function which will fetch content from
|
|
@@ -428,11 +428,11 @@ export interface Tools<in out Schemas extends OptionalSchemas> {
|
|
|
428
428
|
* ).getPrettyStoreApi('shop');
|
|
429
429
|
*
|
|
430
430
|
* const dTsLines = dTs.split('\n');
|
|
431
|
-
* console.log(dTsLines[
|
|
431
|
+
* console.log(dTsLines[17]);
|
|
432
432
|
* // -> `export type Tables = {pets?: {[rowId: Id]: {price?: number}}};`
|
|
433
433
|
*
|
|
434
434
|
* const tsLines = ts.split('\n');
|
|
435
|
-
* console.log(tsLines[
|
|
435
|
+
* console.log(tsLines[81]);
|
|
436
436
|
* // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
|
|
437
437
|
* ```
|
|
438
438
|
* @example
|
|
@@ -449,11 +449,11 @@ export interface Tools<in out Schemas extends OptionalSchemas> {
|
|
|
449
449
|
* ).getPrettyStoreApi('shop');
|
|
450
450
|
*
|
|
451
451
|
* const dTsLines = dTs.split('\n');
|
|
452
|
-
* console.log(dTsLines[
|
|
452
|
+
* console.log(dTsLines[17]);
|
|
453
453
|
* // -> 'export type Tables = {pets?: {[rowId: Id]: {price: number}}};'
|
|
454
454
|
*
|
|
455
455
|
* const tsLines = ts.split('\n');
|
|
456
|
-
* console.log(tsLines[
|
|
456
|
+
* console.log(tsLines[83]);
|
|
457
457
|
* // -> ' hasPetsTable: (): boolean => store.hasTable(PETS),'
|
|
458
458
|
* ```
|
|
459
459
|
* @category Modelling
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var t,e;t=this,e=function(t){"use strict";const e=t=>t.length,a=t=>null==t,n=(t,e,n)=>a(t)?n?.():e(t),o=Object,s=o.keys,r=o.freeze,i=(t,e)=>n(t,(t=>t[e])),c=(t,e)=>!a(i(t,e)),d=(t,e)=>delete t[e],u=(t,e)=>((t,e)=>t.map(e))(o.entries(t),(([t,a])=>e(a,t))),y=t=>{return(t=>t instanceof o&&t.constructor==o)(t)&&(a=s(t),0==e(a));var a},l=(t,e)=>[t[e].t,t[e].v],f=(t,e,n,o)=>{const s=a(e)?t:((t,e,a)=>(c(t,e)||(t[e]={}),t[e]))(t,e);let r;return u(n,((t,e)=>{o(s,e,t)&&(r=1)})),u(s,((t,e)=>{c(n,e)||(d(s,e),r=1)})),!a(e)&&y(s)&&d(t,e),r};t.createAutomergePersister=(t,o,c="tinybase")=>(o.change((t=>t[c]={})),((t,e,s,v,p)=>{let g,h,A=0,w=!1;const L=async t=>{2!=A&&(A=1,await t(),A=0)},m={load:async(a={},n={})=>(await L((async()=>{let o;try{o=await e()}catch{}t.setContent(o??[a,n])})),m),startAutoLoad:async(a={},n={})=>(m.stopAutoLoad(),await m.load(a,n),w=!0,h=(a=>{const n=({doc:a})=>(async(a,n)=>{await L((async()=>{if(n)t.setTransactionChanges(n());else try{t.setContent(a?.()??await e())}catch{}}))})((()=>l(a,c)));return o.on("change",n),n})(),m),stopAutoLoad:()=>{return w&&(t=h,o.removeListener("change",t),h=void 0,w=!1),m;var t},save:async e=>(1!=A&&(A=2,await(async(t,e)=>{o.change((o=>((t,e,o,s)=>{((t,e)=>{y(t[e])&&(t[e]={t:{},v:{}})})(t,e);const[r,c]=l(t,e),v=()=>{p=1};let p=1;if(n(s?.(),(([t,e])=>{p=0,u(t,((t,e)=>p?0:a(t)?d(r,e):n(r[e],(e=>u(t,((t,o)=>p?0:a(t)?d(e,o):n(i(e,o),(e=>u(t,((t,n)=>a(t)?d(e,n):e[n]=t))),v)))),v))),u(e,((t,e)=>p?0:a(t)?d(c,e):c[e]=t))})),p){const[t,e]=o();f(r,void 0,t,((t,e,a)=>f(r,e,a,((t,e,a)=>f(t,e,a,((t,e,a)=>{if(i(t,e)!==a)return t[e]=a,1})))))),f(c,void 0,e,((t,e,a)=>{i(c,e)!==a&&(c[e]=a)}))}})(o,c,t,e)))})(t.getContent,e),A=0),m),startAutoSave:async()=>(await m.stopAutoSave().save(),g=t.addDidFinishTransactionListener(((t,e)=>m.save(e))),m),stopAutoSave:()=>(n(g,t.delListener),m),getStore:()=>t,destroy:()=>m.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(m)})(t,(async()=>2==e(s(o.doc[c]))?l(o.doc,c):void 0)))},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterAutomerge={});
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t;e=this,t=function(e){"use strict";const t=Object.freeze,a="storage",s=globalThis.window,n=(e,n,o)=>((e,r,i,c,d)=>{let u,l,y=0,f=!1;const p=async e=>{2!=y&&(y=1,await e(),y=0)},v={load:async(t,a)=>(await p((async()=>{let s;try{s=await r()}catch{}e.setContent(s??[t,a])})),v),startAutoLoad:async(t,i)=>(v.stopAutoLoad(),await v.load(t,i),f=!0,l=(t=>{const i=t=>{t.storageArea===o&&t.key===n&&(async(t,a)=>{await p((async()=>{if(a)e.setTransactionChanges(a());else try{e.setContent(t?.()??await r())}catch{}}))})((()=>JSON.parse(t.newValue)))};return s.addEventListener(a,i),i})(),v),stopAutoLoad:()=>{return f&&(e=l,s.removeEventListener(a,e),l=void 0,f=!1),v;var e},save:async t=>(1!=y&&(y=2,await(async e=>{return o.setItem(n,(t=e(),JSON.stringify(t,((e,t)=>{return t instanceof Map?(a=(e,[t,a])=>(e[t]=a,e),s={},[...t].reduce(a,s)):t;var a,s}))));var t})(e.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),u=e.addDidFinishTransactionListener(((e,t)=>v.save(t))),v),stopAutoSave:()=>{var t,a;return t=u,a=e.delListener,null==t||a(t),v},getStore:()=>e,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return t(v)})(e,(async()=>JSON.parse(o.getItem(n))));e.createLocalPersister=(e,t)=>n(e,t,localStorage),e.createSessionPersister=(e,t)=>n(e,t,sessionStorage)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterBrowser={});
|
|
1
|
+
var e,t;e=this,t=function(e){"use strict";const t=Object.freeze,a="storage",s=globalThis.window,n=(e,n,o)=>((e,r,i,c,d)=>{let u,l,y=0,f=!1;const p=async e=>{2!=y&&(y=1,await e(),y=0)},v={load:async(t={},a={})=>(await p((async()=>{let s;try{s=await r()}catch{}e.setContent(s??[t,a])})),v),startAutoLoad:async(t={},i={})=>(v.stopAutoLoad(),await v.load(t,i),f=!0,l=(t=>{const i=t=>{t.storageArea===o&&t.key===n&&(async(t,a)=>{await p((async()=>{if(a)e.setTransactionChanges(a());else try{e.setContent(t?.()??await r())}catch{}}))})((()=>JSON.parse(t.newValue)))};return s.addEventListener(a,i),i})(),v),stopAutoLoad:()=>{return f&&(e=l,s.removeEventListener(a,e),l=void 0,f=!1),v;var e},save:async t=>(1!=y&&(y=2,await(async e=>{return o.setItem(n,(t=e(),JSON.stringify(t,((e,t)=>{return t instanceof Map?(a=(e,[t,a])=>(e[t]=a,e),s={},[...t].reduce(a,s)):t;var a,s}))));var t})(e.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),u=e.addDidFinishTransactionListener(((e,t)=>v.save(t))),v),stopAutoSave:()=>{var t,a;return t=u,a=e.delListener,null==t||a(t),v},getStore:()=>e,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return t(v)})(e,(async()=>JSON.parse(o.getItem(n))));e.createLocalPersister=(e,t)=>n(e,t,localStorage),e.createSessionPersister=(e,t)=>n(e,t,sessionStorage)},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TinyBasePersisterBrowser={});
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var t,e;t=this,e=function(t,e,a){"use strict";const s="utf8",r=Object.freeze;t.createFilePersister=(t,o)=>((t,n,i,c,u)=>{let d,f,y=0,l=!1;const p=async t=>{2!=y&&(y=1,await t(),y=0)},v={load:async(e,a)=>(await p((async()=>{let s;try{s=await n()}catch{}t.setContent(s??[e,a])})),v),startAutoLoad:async(e,s)=>{return v.stopAutoLoad(),await v.load(e,s),l=!0,r=async(e,a)=>{await p((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await n())}catch{}}))},f=a.watch(o,(()=>r())),v;var r},stopAutoLoad:()=>{return l&&(t=f,t?.close(),f=void 0,l=!1),v;var t},save:async a=>(1!=y&&(y=2,await(async t=>{try{await e.writeFile(o,(a=t(),JSON.stringify(a,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s}))),s)}catch{}var a})(t.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),d=t.addDidFinishTransactionListener(((t,e)=>v.save(e))),v),stopAutoSave:()=>{var e,a;return e=d,a=t.delListener,null==e||a(e),v},getStore:()=>t,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(v)})(t,(async()=>JSON.parse(await e.readFile(o,s))))},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fs/promises"),require("fs")):"function"==typeof define&&define.amd?define(["exports","fs/promises","fs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterFile={},t["fs/promises"],t.fs);
|
|
1
|
+
var t,e;t=this,e=function(t,e,a){"use strict";const s="utf8",r=Object.freeze;t.createFilePersister=(t,o)=>((t,n,i,c,u)=>{let d,f,y=0,l=!1;const p=async t=>{2!=y&&(y=1,await t(),y=0)},v={load:async(e={},a={})=>(await p((async()=>{let s;try{s=await n()}catch{}t.setContent(s??[e,a])})),v),startAutoLoad:async(e={},s={})=>{return v.stopAutoLoad(),await v.load(e,s),l=!0,r=async(e,a)=>{await p((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await n())}catch{}}))},f=a.watch(o,(()=>r())),v;var r},stopAutoLoad:()=>{return l&&(t=f,t?.close(),f=void 0,l=!1),v;var t},save:async a=>(1!=y&&(y=2,await(async t=>{try{await e.writeFile(o,(a=t(),JSON.stringify(a,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s}))),s)}catch{}var a})(t.getContent),y=0),v),startAutoSave:async()=>(await v.stopAutoSave().save(),d=t.addDidFinishTransactionListener(((t,e)=>v.save(e))),v),stopAutoSave:()=>{var e,a;return e=d,a=t.delListener,null==e||a(e),v},getStore:()=>t,destroy:()=>v.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(v)})(t,(async()=>JSON.parse(await e.readFile(o,s))))},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fs/promises"),require("fs")):"function"==typeof define&&define.amd?define(["exports","fs/promises","fs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterFile={},t["fs/promises"],t.fs);
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=Object.freeze,s=t=>t.headers.get("ETag");t.createRemotePersister=(t,n,o,r)=>{let i;return((t,c,d,u,y)=>{let f,l,p=0,v=!1;const h=async t=>{2!=p&&(p=1,await t(),p=0)},w={load:async(e,a)=>(await h((async()=>{let s;try{s=await c()}catch{}t.setContent(s??[e,a])})),w),startAutoLoad:async(a,o)=>{return w.stopAutoLoad(),await w.load(a,o),v=!0,d=async(e,a)=>{await h((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await c())}catch{}}))},l=setInterval((async()=>{const t=await fetch(n,{method:"HEAD"}),a=s(t);e(i)||e(a)||a==i||(i=a,d())}),1e3*r),w;var d},stopAutoLoad:()=>(v&&(clearInterval(l),l=void 0,v=!1),w),save:async e=>(1!=p&&(p=2,await(async t=>{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:(e=t(),JSON.stringify(e,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s})))});var e})(t.getContent),p=0),w),startAutoSave:async()=>(await w.stopAutoSave().save(),f=t.addDidFinishTransactionListener(((t,e)=>w.save(e))),w),stopAutoSave:()=>{var a,s;return a=f,s=t.delListener,e(a)||s(a),w},getStore:()=>t,destroy:()=>w.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return a(w)})(t,(async()=>{const t=await fetch(n);return i=s(t),JSON.parse(await t.text())}))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterRemote={});
|
|
1
|
+
var t,e;t=this,e=function(t){"use strict";const e=t=>null==t,a=Object.freeze,s=t=>t.headers.get("ETag");t.createRemotePersister=(t,n,o,r)=>{let i;return((t,c,d,u,y)=>{let f,l,p=0,v=!1;const h=async t=>{2!=p&&(p=1,await t(),p=0)},w={load:async(e={},a={})=>(await h((async()=>{let s;try{s=await c()}catch{}t.setContent(s??[e,a])})),w),startAutoLoad:async(a={},o={})=>{return w.stopAutoLoad(),await w.load(a,o),v=!0,d=async(e,a)=>{await h((async()=>{if(a)t.setTransactionChanges(a());else try{t.setContent(e?.()??await c())}catch{}}))},l=setInterval((async()=>{const t=await fetch(n,{method:"HEAD"}),a=s(t);e(i)||e(a)||a==i||(i=a,d())}),1e3*r),w;var d},stopAutoLoad:()=>(v&&(clearInterval(l),l=void 0,v=!1),w),save:async e=>(1!=p&&(p=2,await(async t=>{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:(e=t(),JSON.stringify(e,((t,e)=>{return e instanceof Map?(a=(t,[e,a])=>(t[e]=a,t),s={},[...e].reduce(a,s)):e;var a,s})))});var e})(t.getContent),p=0),w),startAutoSave:async()=>(await w.stopAutoSave().save(),f=t.addDidFinishTransactionListener(((t,e)=>w.save(e))),w),stopAutoSave:()=>{var a,s;return a=f,s=t.delListener,e(a)||s(a),w},getStore:()=>t,destroy:()=>w.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return a(w)})(t,(async()=>{const t=await fetch(n);return i=s(t),JSON.parse(await t.text())}))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterRemote={});
|
|
Binary file
|
package/lib/umd/persister-yjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var t,e;t=this,e=function(t,e){"use strict";const s=t=>t.length,a=t=>t.shift(),n=t=>null==t,o=(t,e,s)=>n(t)?s?.():e(t),i=Object,r=i.freeze,c=()=>({}),d=(t,e)=>!n(((t,e)=>o(t,(t=>t[e])))(t,e)),l=(t,e)=>((t,e)=>t.map(e))(i.entries(t),(([t,s])=>e(s,t))),u=(t,e,s)=>(d(t,e)||(t[e]=s()),t[e]),g=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,s)=>e(s,t))),y="
|
|
1
|
+
var t,e;t=this,e=function(t,e){"use strict";const s=t=>t.length,a=t=>t.shift(),n=t=>null==t,o=(t,e,s)=>n(t)?s?.():e(t),i=Object,r=i.freeze,c=()=>({}),d=(t,e)=>!n(((t,e)=>o(t,(t=>t[e])))(t,e)),l=(t,e)=>((t,e)=>t.map(e))(i.entries(t),(([t,s])=>e(s,t))),u=(t,e,s)=>(d(t,e)||(t[e]=s()),t[e]),g=(t,e)=>((t,e)=>t?.forEach(e))(t,((t,s)=>e(s,t))),y="t",p="delete",f=t=>[t.get(y),t.get("v")],v=(t,s,a,o)=>{const i=n(s)?t:t.get(s)??t.set(s,new e.Map);let r;return l(a,((t,e)=>{o(i,e,t)&&(r=1)})),i.forEach(((t,e)=>{d(a,e)||(i.delete(e),r=1)})),n(s)||i.size||t.delete(s),r};t.createYjsPersister=(t,i,d="tinybase")=>{const h=i.getMap(d);return((t,d,S,w,A)=>{let b,j,O=0,J=!1;const L=async t=>{2!=O&&(O=1,await t(),O=0)},N={load:async(e={},s={})=>(await L((async()=>{let a;try{a=await d()}catch{}t.setContent(a??[e,s])})),N),startAutoLoad:async(e={},n={})=>(N.stopAutoLoad(),await N.load(e,n),J=!0,j=(e=>{const n=e=>(async(e,s)=>{await L((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await d())}catch{}}))})(void 0,(()=>((t,e)=>{if(1==s(e)&&(n=e[0].path,0==s(n)))return[t.get("t").toJSON(),t.get("v").toJSON()];var n;const[i,r]=f(t),d={},l={};return((t,e)=>{t.forEach((({path:t,changes:{keys:e}})=>a(t)==y?o(a(t),(s=>{const n=u(d,s,c),r=i.get(s);o(a(t),(t=>{const s=u(n,t,c),a=r.get(t);g(e,((t,{action:e})=>s[t]=e==p?null:a.get(t)))}),(()=>g(e,((t,{action:e})=>n[t]=e==p?null:r.get(t)?.toJSON()))))}),(()=>g(e,((t,{action:e})=>d[t]=e==p?null:i.get(t)?.toJSON())))):g(e,((t,{action:e})=>l[t]=e==p?null:r.get(t)))))})(e),[d,l]})(h,e)));return h.observeDeep(n),n})(),N),stopAutoLoad:()=>{return J&&(t=j,h.unobserveDeep(t),j=void 0,J=!1),N;var t},save:async s=>(1!=O&&(O=2,await(async(t,s)=>i.transact((()=>((t,s,a)=>{(t=>{t.size||(t.set(y,new e.Map),t.set("v",new e.Map))})(t);const[i,r]=f(t),c=()=>{d=1};let d=1;if(o(a?.(),(([t,e])=>{d=0,l(t,((t,e)=>d?0:n(t)?i.delete(e):o(i.get(e),(e=>l(t,((t,s)=>d?0:n(t)?e.delete(s):o(e.get(s),(e=>l(t,((t,s)=>n(t)?e.delete(s):e.set(s,t)))),c)))),c))),l(e,((t,e)=>d?0:n(t)?r.delete(e):r.set(e,t)))})),d){const[t,e]=s();v(i,void 0,t,((t,e,s)=>v(i,e,s,((t,e,s)=>v(t,e,s,((t,e,s)=>{if(t.get(e)!==s)return t.set(e,s),1})))))),v(r,void 0,e,((t,e,s)=>{r.get(e)!==s&&r.set(e,s)}))}})(h,t,s))))(t.getContent,s),O=0),N),startAutoSave:async()=>(await N.stopAutoSave().save(),b=t.addDidFinishTransactionListener(((t,e)=>N.save(e))),N),stopAutoSave:()=>(o(b,t.delListener),N),getStore:()=>t,destroy:()=>N.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return r(N)})(t,(async()=>h.size?[h.get(y).toJSON(),h.get("v").toJSON()]:void 0))}},"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("yjs")):"function"==typeof define&&define.amd?define(["exports","yjs"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisterYjs={},t.yjs);
|
|
Binary file
|
package/lib/umd/persisters.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var t,e;t=this,e=function(t){"use strict";const e=Object.freeze;t.createCustomPersister=(t,a,s,o,n)=>{let i,r,c=0,d=!1;const u=async t=>{2!=c&&(c=1,await t(),c=0)},y={load:async(e,s)=>(await u((async()=>{let o;try{o=await a()}catch{}t.setContent(o??[e,s])})),y),startAutoLoad:async(e,s)=>(y.stopAutoLoad(),await y.load(e,s),d=!0,r=o((async(e,s)=>{await u((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await a())}catch{}}))})),y),stopAutoLoad:()=>(d&&(n(r),r=void 0,d=!1),y),save:async e=>(1!=c&&(c=2,await s(t.getContent,e),c=0),y),startAutoSave:async()=>(await y.stopAutoSave().save(),i=t.addDidFinishTransactionListener(((t,e)=>y.save(e))),y),stopAutoSave:()=>{var e,a;return e=i,a=t.delListener,null==e||a(e),y},getStore:()=>t,destroy:()=>y.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return e(y)}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisters={});
|
|
1
|
+
var t,e;t=this,e=function(t){"use strict";const e=Object.freeze;t.createCustomPersister=(t,a,s,o,n)=>{let i,r,c=0,d=!1;const u=async t=>{2!=c&&(c=1,await t(),c=0)},y={load:async(e={},s={})=>(await u((async()=>{let o;try{o=await a()}catch{}t.setContent(o??[e,s])})),y),startAutoLoad:async(e={},s={})=>(y.stopAutoLoad(),await y.load(e,s),d=!0,r=o((async(e,s)=>{await u((async()=>{if(s)t.setTransactionChanges(s());else try{t.setContent(e?.()??await a())}catch{}}))})),y),stopAutoLoad:()=>(d&&(n(r),r=void 0,d=!1),y),save:async e=>(1!=c&&(c=2,await s(t.getContent,e),c=0),y),startAutoSave:async()=>(await y.stopAutoSave().save(),i=t.addDidFinishTransactionListener(((t,e)=>y.save(e))),y),stopAutoSave:()=>{var e,a;return e=i,a=t.delListener,null==e||a(e),y},getStore:()=>t,destroy:()=>y.stopAutoLoad().stopAutoSave(),getStats:()=>({})};return e(y)}},"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TinyBasePersisters={});
|
package/lib/umd/persisters.js.gz
CHANGED
|
Binary file
|