tinybase 4.0.0-beta.1 → 4.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +1 -1
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/cjs/checkpoints.cjs +1 -1
- package/lib/cjs/checkpoints.cjs.gz +0 -0
- package/lib/cjs/indexes.cjs +1 -1
- package/lib/cjs/indexes.cjs.gz +0 -0
- package/lib/cjs/metrics.cjs +1 -1
- package/lib/cjs/metrics.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/queries.cjs +1 -1
- package/lib/cjs/queries.cjs.gz +0 -0
- package/lib/cjs/relationships.cjs +1 -1
- package/lib/cjs/relationships.cjs.gz +0 -0
- package/lib/cjs/store.cjs +1 -1
- package/lib/cjs/store.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/ui-react.cjs +1 -1
- package/lib/cjs/ui-react.cjs.gz +0 -0
- package/lib/cjs-es6/checkpoints.cjs +1 -1
- package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
- package/lib/cjs-es6/indexes.cjs +1 -1
- package/lib/cjs-es6/indexes.cjs.gz +0 -0
- package/lib/cjs-es6/metrics.cjs +1 -1
- package/lib/cjs-es6/metrics.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/queries.cjs +1 -1
- package/lib/cjs-es6/queries.cjs.gz +0 -0
- package/lib/cjs-es6/relationships.cjs +1 -1
- package/lib/cjs-es6/relationships.cjs.gz +0 -0
- package/lib/cjs-es6/store.cjs +1 -1
- package/lib/cjs-es6/store.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/cjs-es6/ui-react.cjs +1 -1
- package/lib/cjs-es6/ui-react.cjs.gz +0 -0
- package/lib/debug/checkpoints.js +3 -3
- package/lib/debug/indexes.js +3 -3
- package/lib/debug/metrics.js +3 -3
- package/lib/debug/persister-browser.js +38 -39
- package/lib/debug/persister-file.js +37 -37
- package/lib/debug/persister-remote.js +37 -34
- package/lib/debug/persister-yjs.js +225 -40
- package/lib/debug/persisters.js +36 -33
- package/lib/debug/queries.js +5 -5
- package/lib/debug/relationships.js +3 -3
- package/lib/debug/store.js +129 -94
- package/lib/debug/tinybase.js +165 -125
- package/lib/debug/tools.js +9 -9
- package/lib/es6/checkpoints.js +1 -1
- package/lib/es6/checkpoints.js.gz +0 -0
- package/lib/es6/indexes.js +1 -1
- package/lib/es6/indexes.js.gz +0 -0
- package/lib/es6/metrics.js +1 -1
- package/lib/es6/metrics.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/queries.js +1 -1
- package/lib/es6/queries.js.gz +0 -0
- package/lib/es6/relationships.js +1 -1
- package/lib/es6/relationships.js.gz +0 -0
- package/lib/es6/store.js +1 -1
- package/lib/es6/store.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/es6/ui-react.js +1 -1
- package/lib/es6/ui-react.js.gz +0 -0
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/metrics.js +1 -1
- package/lib/metrics.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/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.js +1 -1
- package/lib/store.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-yjs.d.ts +70 -8
- package/lib/types/persisters.d.ts +42 -17
- package/lib/types/queries.d.ts +52 -52
- package/lib/types/store.d.ts +399 -145
- package/lib/types/tools.d.ts +16 -16
- package/lib/types/ui-react.d.ts +56 -47
- package/lib/types/with-schemas/internal/ui-react.d.ts +2 -2
- package/lib/types/with-schemas/persister-yjs.d.ts +72 -9
- package/lib/types/with-schemas/persisters.d.ts +59 -18
- package/lib/types/with-schemas/queries.d.ts +52 -52
- package/lib/types/with-schemas/store.d.ts +480 -163
- package/lib/types/with-schemas/tools.d.ts +16 -16
- package/lib/types/with-schemas/ui-react.d.ts +54 -45
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.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/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.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/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/lib/umd-es6/checkpoints.js +1 -1
- package/lib/umd-es6/checkpoints.js.gz +0 -0
- package/lib/umd-es6/indexes.js +1 -1
- package/lib/umd-es6/indexes.js.gz +0 -0
- package/lib/umd-es6/metrics.js +1 -1
- package/lib/umd-es6/metrics.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/queries.js +1 -1
- package/lib/umd-es6/queries.js.gz +0 -0
- package/lib/umd-es6/relationships.js +1 -1
- package/lib/umd-es6/relationships.js.gz +0 -0
- package/lib/umd-es6/store.js +1 -1
- package/lib/umd-es6/store.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/lib/umd-es6/ui-react.js +1 -1
- package/lib/umd-es6/ui-react.js.gz +0 -0
- package/package.json +13 -13
- package/readme.md +2 -2
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=(e,t)=>e?.has(t)??!1,W=e=>[...e?.values()??[]],B=(e,t)=>e?.forEach(t),F=(e,t)=>e?.delete(t),U=e=>new Map(e),_=(e,t)=>e?.get(t),Z=(e,t)=>B(e,((e,l)=>t(l,e))),H=(e,t)=>V([...e?.entries()??[]],(([e,l])=>t(l,e))),Q=(e,t,l)=>L(l)?(F(e,t),e):e?.set(t,l),q=(e,t,l)=>(z(e,t)||Q(e,t,l()),_(e,t)),K=e=>e.toUpperCase(),X=e=>e.toLowerCase(),Y="a ",ee="A function for",te=", and registers a listener so that any changes to that result will cause a re-render",le="Callback",ae="Del",ne="Deps",oe=ne+"?: React.DependencyList",de="doRollback?: DoRollback",re="actions: () => Return, "+de,se="export",Ie="Id",$e="Invalid",ce="Json",ie=X(r),ue="?: ",pe=" | undefined",be="NonNullable",Ce="Partial",he="Props",ge="Provider",me=`Registers a ${ie} that will be called`,we="Represents",fe="rowId: "+Ie,ye="Schema",Te="Set",ve=", descending?: boolean, offset?: number, limit?: number",Ve="[]",xe="the Store",Re="Transaction",ke=X(Re),Se="Execute a "+ke+" to make multiple mutations",Pe="Explicitly starts a "+ke,Ae="Explicitly finishes a "+ke,Ee="the end of the "+ke,De="void",Oe=" => "+De,Ne="WhenSet",Le=" when setting it",je=Y+"string serialization of",Me=" ",Ge="Gets a callback that can ",Je="the ",ze=" the schema for",We=(e=0,l=0)=>`the ${dt[e]}content of`+(l?Me+xe:t),Be=(e=0,l,a=0)=>at[l]+Me+We(e,1)+(a?" when setting it":t),Fe=(e,t=0)=>we+` a Row when ${t?"s":"g"}etting ${We()} the '${e}' `+c,Ue=(e,t,l=0)=>`Gets ${l?"sorted, paginated":"the"} Ids of the ${e}s in `+t,_e=(e,t)=>`Calls a function for each ${e} in `+t,Ze=e=>"The props passed to a component that renders "+e,He=e=>"A function that takes "+e,Qe=(e,t=0)=>ee+" listening to changes to "+ot[e]+" in "+ot[t],qe=(e,l,a=0)=>me+" whenever "+ot[e]+" in "+ot[l]+" change"+(a?t:"s"),Ke=e=>`the '${e}' `+c,Xe=e=>"the specified Row in "+Ke(e),Ye=(e,t=0)=>at[t]+` ${We()} `+Ke(e),et=(e,t=0)=>at[t]+` ${We()} `+Xe(e),tt=(e,t,l=0)=>at[l]+` the '${t}' Cell for `+Xe(e),lt=(e,t=0)=>at[t]+` the '${e}' Value`,at=["Gets","Checks existence of","Sets","Deletes","Sets part of",we,"Gets "+je,"Sets "+je,me+" whenever",Ge+"set",Ge+"add",Ge+"set part of",Ge+"delete","Renders","Gets "+je+ze,"Sets"+ze,"Deletes"+ze],nt=[s,"has","set","del","set","forEach",I,t],ot=[xe,i,Je+c+Me+$,Y+c,Je+p+Me+$,Y+p,Je+h+Me+$,Y+h,"invalid Cell changes",w,Je+m+Me+$,Y+m,"invalid Value changes",Je+"sorted "+p+Me+$],dt=[t,"tabular ","keyed value "],rt=e=>new Set(G(e)||L(e)?e:[e]),st=(e,t)=>e?.add(t),It=/[^A-Za-z]+/,$t=/[^A-Za-z0-9]+/,ct=/^( *)\/\*\* *(.*?) *\*\/$/gm,it=(e,t,l)=>e.substring(t,l),ut=e=>e.includes(","),pt=(e,t,l,a=1)=>{const n=`${t}${1==a?"":a}`;return z(e,n)?pt(e,t,l,a+1):(Q(e,n,l),n)},bt=e=>e.replace(ct,((e,t,l)=>{const a=77-Ct(t);return`${t}/**\n${l.replace(RegExp(`([^\\n]{1,${a}})(\\s|$)`,"g"),t+" * $1\n")}${t} */`})),Ct=e=>e.length,ht=(e,l=t)=>e.join(l),gt=e=>e.flat(1e3),mt=(e,t=0)=>ht(V(e.split($t),((e,l)=>(l>0||t?K:X)(it(e,0,1))+it(e,1)))),wt=e=>K(ht((e&&!It.test(e[0])?e:" "+e).split($t),"_")),ft=e=>`/** ${e}. */`,yt=(...e)=>ht(k(e,(e=>e)),", "),Tt=(...e)=>"{"+ht(e,"; ")+"}",vt=(...e)=>Tt(...V(e,(e=>"readonly "+e))),Vt=()=>{const e=[U(),U(),U(),U()],l=U(),a=U();return[(...e)=>ht(gt(e),"\n"),(t,l,...a)=>v(a,(a=>v([0,1],(n=>(t??n)==n?st(q(e[n],l,rt),a):0)))),(e,a,n,o=t,d=1)=>pt(l,e,[a,n,o,d]),(e,t,l)=>pt(a,e,G(l)?[`(${t}) => {`,l,"}"]:[`(${t}) => ${l}`]),(e,t)=>_(a,e)===t?e:pt(a,e,t),(l=0)=>V([...T(H(e[l],((e,t)=>`import {${ht(T(W(e)),", ")}} from '${t}';`)),((e,t)=>ut(e)!=ut(t)?ut(e)?-1:1:e>t?1:-1)),t],(e=>e.replace("{React}","React"))),()=>H(l,(([e,l,a,n],o)=>[ft(l),`${n?se+" ":t}type ${o}${a} = ${e};`,t])),()=>H(a,((e,l)=>(e=G(e)?e:[e],S(e,P(e)+";"),[`const ${l} = ${E(e)}`,e,t])))]},xt=Object,Rt=xt.keys,kt=xt.freeze,St=e=>N(e,xt)&&e.constructor==xt,Pt=(e,t)=>V(xt.entries(e),(([e,l])=>t(l,e))),At=e=>St(e)&&R(Rt(e)),Et=e=>{const t=new WeakMap;return l=>(t.has(l)||t.set(l,e(l)),t.get(l))},Dt=(e,t,l)=>[t=>Pt(e,((e,a)=>t(a,mt(a,1),l(wt(a),`'${a}'`)))),(t,a)=>Pt(e[t],((e,t)=>a(t,e[o],e[d],l(wt(t),`'${t}'`),mt(t,1)))),e=>Pt(t,((t,a)=>e(a,t[o],t[d],l(wt(a),`'${a}'`),mt(a,1))))],Ot=(e,l,a,n)=>[(n,o)=>{const d=n+": "+o,s=e(i,Tt(...l((e=>`'${e}'?: {[rowId: Id]: `+Tt(...a(e,((e,l,a)=>`'${e}'${L(a)?"?":t}: ${l}`)))+"}"))),Be(1,5)),I=e(i+Ne,Tt(...l((e=>`'${e}'?: {[rowId: Id]: `+Tt(...a(e,((e,t)=>`'${e}'?: ${t}`)))+"}"))),Be(1,5,1)),$=e(c+Ie,"keyof "+s,"A "+c+" Id in "+xe),m=`<TId extends ${$}>`,w=e(c,be+`<${s}[TId]>`,"A "+c+" in "+xe,m),f=e(c+Ne,be+`<${I}[TId]>`,"A "+c+" in "+xe+Le,m),y=e(p,w+"<TId>[Id]","A "+p+" in a "+c,m),T=e(p+Ne,f+"<TId>[Id]","A "+p+" in a "+c+Le,m),v=e(h+Ie,`Extract<keyof ${y}<TId>, Id>`,"A "+h+" Id in a "+p,m),V=e(h,be+`<${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+le,`(...[cellId, cell]: ${x}<TId>)`+Oe,He(Y+h+" Id, and "+h),m),k=e(p+le,"(rowId: Id, forEachCell: (cellCallback: CellCallback<TId>) "+Oe+") "+Oe,He(Y+p+" Id, and a "+h+" iterator"),m),S=e("TableIdForEachRowArray",`TId extends ${$} ? [tableId: TId, forEachRow: (rowCallback: ${k}<TId>)${Oe}] : never`,c+" Ids and callback types",`<TId = ${$}>`,0),P=e(c+le,`(...[tableId, forEachRow]: ${S})`+Oe,He(Y+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`,ee+" returning information about any Cell's changes during a "+ke),D=e(i+r,`(${d}, getCellChange: ${E}${pe})`+Oe,Qe(1)),O=e(u+r,`(${d})`+Oe,Qe(2)),N=e(c+r,`(${d}, tableId: ${$}, getCellChange: ${E}${pe})`+Oe,Qe(3)),j=e(b+r,`(${d}, tableId: ${$})`+Oe,Qe(4,3)),M=e(C+r,"("+yt(d,"tableId: "+$,"cellId: Id"+pe,"descending: boolean","offset: number","limit: number"+pe,"sortedRowIds: Ids")+")"+Oe,Qe(13,3)),G=e(p+r,"("+yt(""+d,"tableId: "+$,fe,`getCellChange: ${E}${pe}`)+")"+Oe,Qe(5,3)),J=e(g+r,"("+yt(""+d,"tableId: "+$,fe)+")"+Oe,Qe(6,5)),z=e("CellListenerArgsArrayInner",`CId extends ${v}<TId> ? [${d}, tableId: TId, ${fe}, cellId: CId, newCell: ${V}<TId, CId> ${pe}, oldCell: ${V}<TId, CId> ${pe}, getCellChange: ${E} ${pe}] : 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})`+Oe,Qe(7,5)),e($e+h+r,`(${d}, tableId: Id, ${fe}, cellId: Id, invalidCells: any[])`+Oe,Qe(8))]},(l,a)=>{const o=l+": "+a,d=e(w,Tt(...n(((e,l,a)=>`'${e}'${L(a)?"?":t}: ${l}`))),Be(2,5)),s=e(w+Ne,Tt(...n(((e,t)=>`'${e}'?: ${t}`))),Be(2,5,1)),I=e(m+Ie,"keyof "+d,"A "+m+" Id in "+xe),$=e(m,be+`<${d}[VId]>`,"A "+m+" Id in "+xe,`<VId extends ${I}>`),c=e("ValueIdValueArray",`VId extends ${I} ? [valueId: VId, value: ${$}<VId>] : never`,m+" Ids and types in "+xe,`<VId = ${I}>`,0),i=e(m+le,`(...[valueId, value]: ${c})`+Oe,He(Y+m+" Id, and "+m)),u=e("GetValueChange",`(valueId: ${I}) => ValueChange`,ee+" returning information about any Value's changes during a "+ke),p=e(w+r,`(${o}, getValueChange: ${u}${pe})`+Oe,Qe(9)),b=e(f+r,`(${o})`+Oe,Qe(10)),C=e("ValueListenerArgsArray",`VId extends ${I} ? [${o}, valueId: VId, newValue: ${$}<VId> ${pe}, oldValue: ${$}<VId> ${pe}, getValueChange: ${u} ${pe}] : never`,"Value args for ValueListener",`<VId = ${I}>`,0);return[d,s,I,$,i,p,b,e(m+r,`(...[${l}, valueId, newValue, oldValue, getValueChange]: `+C+")"+Oe,Qe(11)),e($e+m+r,`(${o}, valueId: Id, invalidValues: any[])`+Oe,Qe(12))]},(t,l)=>e(Re+r,`(${t}: ${l}, cellsTouched: boolean, valuesTouched: boolean)`+Oe,ee+" listening to the completion of a "+ke)],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]=Vt(),[E,D,O]=Dt(e,l,x),[N,j,G]=Ot(T,E,D,O),J=U(),z=(e=0)=>H(J,(([l,a,n,o,d],r)=>{const s=e?[r+`: ${d}(${l}): ${a} => ${n},`]:[r+d+`(${l}): ${a};`];return e||A(s,ft(o)),S(s,t),s})),B=(e,l,a,n,o,d=t)=>pt(J,e,[l,a,n,o,d]),F=(e,l,a,n,o,d=t,r=t,s=t)=>B(nt[e]+l+(4==e?Ce:t)+a,d,n,(n==X?Lt:Nt)(nt[e]+(4==e?Ce:t)+a,r,e?void 0:n),o,s),q=(e,l,a,n=t,o=t,d=1,s=t)=>B(I+e+r,(n?n+", ":t)+ie+": "+l+(d?", mutator?: boolean":t),Ie,jt(I+e+r,o,d?"mutator":t),a,s),K=`./${mt(n)}.d`,X=mt(n,1),Y=mt(X),ee=[],te=U();let ae=[],ne=[];if(y(1,K,X,`create${X} as create${X}Decl`),!At(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,B,Z]=N(Y,X),H=U();E(((e,t)=>{const l=`<'${e}'>`,a=[T(t+c,r+l,we+` the '${e}' `+c),T(t+c+Ne,s+l,we+` the '${e}' `+c+Le),T(t+p,I+l,Fe(e)),T(t+p+Ne,m+l,Fe(e,1)),T(t+h+Ie,w+l,`A Cell Id for the '${e}' `+c),T(t+h+le,V+l,He(`a Cell Id and value from a Row in the '${e}' `+c)),T(t+p+le,R+l,He(`a Row Id from the '${e}' Table, and a Cell iterator`))];Q(H,e,a),y(1,K,...a)})),y(1,K,e,l,n,w,k,P,A,O,j,G,J,z,B,Z),ae=[e,l,n,w,P,A,O,j,G,J,z,B,H],v([[e],[a],[X,"tables: "+l,"tables"],[X]],(([e,l,a],n)=>F(n,t,i,e,Be(1,n),l,a))),F(0,t,u,n+Ve,Ue(c,xe)),F(5,t,c,De,_e(c,xe),"tableCallback: "+k,"tableCallback as any"),E(((e,l,n)=>{const[o,d,r,s,I,i,u]=_(H,e);v([[o],[a],[X,"table: "+d,", table"],[X]],(([a,o,d=t],r)=>F(r,l,c,a,Ye(e,r),o,n+d))),F(0,l,b,$,Ue(p,Ke(e)),t,n),F(0,l,C,$,Ue(p,Ke(e),1),"cellId?: "+I+ve,n+", cellId, descending, offset, limit"),F(5,l,p,De,_e(p,Ke(e)),"rowCallback: "+u,n+", rowCallback as any"),v([[r],[a],[X,", row: "+s,", row"],[X],[X,", partialRow: "+s,", partialRow"]],(([a,o=t,d=t],r)=>F(r,l,p,a,et(e,r),fe+o,n+", rowId"+d))),F(6,l,p,Ie+pe,"Add a new Row to "+Ke(e),"row: "+s+", reuseIds?: boolean",n+", row, reuseIds"),F(0,l,g,I+Ve,Ue(h,Xe(e)),fe,n+", rowId"),F(5,l,h,De,_e(h,Xe(e)),fe+", cellCallback: "+i,n+", rowId, cellCallback as any"),D(e,((o,d,r,s,I)=>{const $="Map"+mt(d,1);Q(te,d,$);const c=d+(L(r)?pe:t);v([[c],[a],[X,`, cell: ${d} | `+$,", cell as any"],[X]],(([a,d=t,r=t],$)=>F($,l+I,h,a,tt(e,o,$),fe+d,n+", rowId, "+s+r)))}))})),F(0,t,i+ce,ce,Be(1,6)),F(2,t,i+ce,X,Be(1,7),"tablesJson: "+ce,"tables"+ce),q(i,P,Be(1,8)+" changes"),q(u,A,qe(2,0,1)),q(c,O,qe(3,0),`tableId: ${n} | null`,"tableId"),q(b,j,qe(4,3,1),`tableId: ${n} | null`,"tableId"),q(C,G,qe(13,3,1),yt("tableId: TId",`cellId: ${w}<TId>`+pe,"descending: boolean","offset: number","limit: number"+pe),yt("tableId","cellId","descending","offset","limit"),1,"<TId extends TableId>"),q(p,J,qe(5,3),`tableId: ${n} | null, rowId: IdOrNull`,"tableId, rowId"),q(g,z,qe(6,5,1),`tableId: ${n} | null, rowId: IdOrNull`,"tableId, rowId"),q(h,B,qe(7,5),`tableId: ${n} | null, rowId: IdOrNull, cellId: ${ht(E((e=>_(H,e)?.[4]??t))," | ")} | null`,"tableId, rowId, cellId"),q($e+h,Z,me+" whenever an invalid Cell change was attempted","tableId: IdOrNull, rowId: IdOrNull, cellId: IdOrNull","tableId, rowId, cellId"),y(1,K,...W(te)),S(ee,".set"+i+ye+"({",gt(E(((e,l,a)=>[`[${a}]: {`,...D(e,((e,l,a,n)=>`[${n}]: {[${x(wt(o),`'${o}'`)}]: ${x(wt(l),`'${l}'`)}${L(a)?t:`, [${x(wt(d),`'${d}'`)}]: `+(M(a)?x(wt(a),`'${a}'`):a)}},`)),"},"]))),"})")}if(!At(l)){const[e,l,n,r,s,I,$,c,i]=j(Y,X);y(1,K,e,l,n,s,I,$,c,i),ne=[e,l,n,I,$,c],v([[e],[a],[X,"values: "+l,"values"],[X],[X,"partialValues: "+l,"partialValues"]],(([e,l,a],n)=>F(n,t,w,e,Be(2,n),l,a))),F(0,t,f,n+Ve,Ue(m,xe)),F(5,t,m,"void",_e(m,xe),"valueCallback: "+s,"valueCallback as any"),O(((e,l,n,o,d)=>{const r="Map"+mt(l,1);Q(te,l,r),v([[l],[a],[X,`value: ${l} | `+r,", value as any"],[X]],(([l,a,n=t],r)=>F(r,d,m,l,lt(e,r),a,o+n)))})),F(0,t,w+ce,ce,Be(2,6)),F(2,t,w+ce,X,Be(2,7),"valuesJson: "+ce,"values"+ce),q(w,I,Be(2,8)+" changes"),q(f,$,qe(10,0,1)),q(m,c,qe(11,0),`valueId: ${n} | null`,"valueId"),q($e+m,i,me+" whenever an invalid Value change was attempted","valueId: IdOrNull","valueId"),y(1,K,...W(te)),y(0,"tinybase","ValueChange"),S(ee,".set"+w+ye+"({",O(((e,l,a,n)=>[`[${n}]: {[${x(wt(o),`'${o}'`)}]: ${x(wt(l),`'${l}'`)}${L(a)?t:`, [${x(wt(d),`'${d}'`)}]: `+(M(a)?x(wt(a),`'${a}'`):a)}},`])),"})")}Z(te,((e,t)=>T(t,`(cell: ${e}${pe}) => `+e,`Takes a ${e} Cell value and returns another`))),y(null,"tinybase","DoRollback",Ie,"IdOrNull",ce,"Store"),F(0,t,ce,ce,Be(0,6)),F(2,t,ce,X,Be(0,7),"tablesAndValuesJson: "+ce,"tablesAndValuesJson"),F(7,t,ke,"Return",Se,re,"actions, doRollback","<Return>"),F(7,t,"start"+Re,X,Pe),F(7,t,"finish"+Re,X,Ae,de,"doRollback");const oe=G(Y,X);return q("WillFinish"+Re,oe,me+" just before "+Ee,t,t,0),q("DidFinish"+Re,oe,me+" just after "+Ee,t,t,0),F(7,t,"call"+r,X,"Manually provoke a listener to be called","listenerId: Id","listenerId"),F(3,t,r,X,"Remove a listener that was previously added to "+xe,"listenerId: Id","listenerId"),B("getStore",t,"Store","store",at[0]+" the underlying Store object"),y(1,"tinybase","createStore"),y(1,K,X,`create${X} as create${X}Decl`,oe),x("store",["createStore()",...ee]),V("fluent","actions: () => Store",["actions();",`return ${Y};`]),V("proxy","listener: any",`(_: Store, ...params: any[]) => listener(${Y}, ...params)`),x(Y,["{",...z(1),"}"]),[s(...R(0),...k(),se+" interface "+X+" {",...z(0),"}",t,ft(`Creates a ${X} object`),se+" function create"+X+"(): "+X+";"),s(...R(1),se+" const create"+X+": typeof create"+X+"Decl = () => {",...P(),`return Object.freeze(${Y});`,"};"),ae,ne]},Gt=e=>s+e,Jt=e=>yt(Gt(e),Gt(e)+ne),zt="debugIds?: boolean",Wt="debugIds={debugIds}",Bt="then"+oe,Ft="Parameter",Ut=": (parameter: "+Ft+", store: Store) => ",_t="const contextValue = useContext(Context);",Zt=", based on a parameter",Ht=": ",Qt="<"+Ft+",>",qt=Ft+"ized"+le+"<"+Ft+">",Kt="rowId",Xt="rowId={rowId}",Yt=", separator, debugIds",el="separator?: ReactElement | string",tl="then?: (store: Store",ll=yt(tl+")"+Oe,Bt),al="then, then"+ne,nl=Kt+Ht+Ie,ol="View",dl=(e,...t)=>yt(...t,ie+": "+e,ie+oe,"mutator?: boolean"),rl=(...e)=>yt(...e,ie,ie+ne,"mutator"),sl=(e,l,a,n,o)=>{const[d,s,I,y,T,v,V,x]=Vt(),[R,k,P]=Dt(e,l,T),E=`./${mt(a)}.d`,D=`./${mt(a)}-ui-react.d`,O="tinybase/ui-react",N=mt(a,1),j=mt(N),M=N+"Or"+N+Ie,G=j+"Or"+N+Ie,J=j+`={${j}}`,z=U(),W=(e,l,a,n,o,d=t)=>(s(1,D,e+" as "+e+"Decl"),pt(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,yt(o,X,I),a,ne+`(${G}, use${l}Core, [`+(d||t)+($?"], ["+$:t)+"]);",n,r)),Z=(e,t,l,a)=>W(e,t,1,l,a),Q=(e=0)=>H(z,(([l,a,n,o,d],r)=>{const s=e?[se+` const ${r}: typeof ${r}Decl = ${d}(${l}): ${1==a?"any":a} =>`,n]:[se+` function ${r}${d}(${l}): ${1==a?"ComponentReturnType":a};`];return e||A(s,ft(o)),S(s,t),s}));s(null,"tinybase",Ie,"Store",le,Ft+"ized"+le),s(0,O,"ComponentReturnType"),s(null,O,"ExtraProps"),s(0,E,N);const q=I(M,N+" | "+Ie,`Used when you need to refer to a ${N} in a React hook or component`),K=I(ge+he,vt(j+ue+N,j+`ById?: {[${j}Id: Id]: ${N}}`),`Used with the ${ge} 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,q,K);const X=G+ue+q;T("{createContext, useContext, useMemo}","React"),T("Context",`createContext<[${N}?, {[${j}Id: Id]: ${N}}?]>([])`),B("Create"+N,`create: () => ${N}, create`+oe,N,"\n// eslint-disable-next-line react-hooks/exhaustive-deps\nuseMemo(create, createDeps)",`Create a ${N} within a React application with convenient memoization`);const ee=B(N,"id?: Id",N+pe,["{",_t,"return id == null ? contextValue[0] : contextValue[1]?.[id];","}"],`Get a reference to a ${N} from within a ${ge} component context`),ne=y("useHook",G+`: ${q} | undefined, hook: (...params: any[]) => any, preParams: any[], postParams: any[] = []`,[`const ${j} = ${ee}(${G} as Id);`,`return hook(...preParams, ((${G} == null || typeof ${G} == 'string')`,`? ${j} : ${G})?.getStore(), ...postParams)`]),de=y("getProps","getProps: ((id: any) => ExtraProps) | undefined, id: Id","(getProps == null) ? ({} as ExtraProps) : getProps(id)"),re=y("wrap",yt("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;"]),$e=T("NullComponent","() => null");if(!At(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 ${re}(rowIds.map((rowId) => (`,"<Row","{..."+de+"(getRowComponentProps, rowId)}","key={rowId}","tableId={tableId}",Xt,J,Wt,"/>","))",Yt,", tableId,",");"]),A=y("getDefaultTableComponent","tableId: Id",ht(R(((e,t,l)=>`tableId == ${l} ? ${t}TableView : `)))+$e),O=y("getDefaultCellComponent","tableId: Id, cellId: Id",ht(R(((e,t,l)=>`tableId == ${l} ? ${ht(k(e,((e,l,a,n,o)=>`cellId == ${n} ? `+t+o+"CellView : ")))+$e} : `)))+$e);F(i,i,e,Be(1,0)+te);const M=F(u,u,a+Ve,Ue(c,xe)+te);F(Te+i+le,Te+i+le,qt,Be(1,9)+Zt,yt(Gt(i)+Ut+l,Gt(i)+oe),Jt(i),Qt,yt(tl,`tables: ${l})`+Oe,Bt),al),F(ae+i+le,ae+i+le,le,Be(1,12),t,t,t,ll,al);const G=I(h+he,vt("tableId?: TId","rowId: Id","cellId?: CId",j+ue+N,zt),Ze(Y+h),`<TId extends ${a}, CId extends ${o}<TId>>`),z=I(p+he,vt("tableId?: TId","rowId: Id",j+ue+N,"cellComponents?: {readonly [CId in "+o+`<TId>]?: ComponentType<${G}<TId, CId>>;}`,`getCellComponentProps?: (cellId: ${o}<TId>) => ExtraProps`,el,zt),Ze(Y+p),`<TId extends ${a}>`),W=I(c+he,vt("tableId?: TId",j+ue+N,`rowComponent?: ComponentType<${z}<TId>>`,"getRowComponentProps?: (rowId: Id) => ExtraProps",el,zt),Ze(Y+c),`<TId extends ${a}>`),B=I("Sorted"+c+he,vt("tableId?: TId","cellId?: "+o+"<TId>","descending?: boolean","offset?: number","limit?: number",j+ue+N,`rowComponent?: ComponentType<${z}<TId>>`,"getRowComponentProps?: (rowId: Id) => ExtraProps",el,zt),Ze(Y+"sorted "+c),`<TId extends ${a}>`),U=I(i+he,vt(j+ue+N,"tableComponents?: {readonly [TId in "+a+`]?: ComponentType<${W}<TId>>;}`,`getTableComponentProps?: (tableId: ${a}) => ExtraProps`,el,zt),Ze(We(1,1)));s(1,D,U,W,B,z,G),Z(i+ol,"{"+j+", tableComponents, getTableComponentProps"+Yt+"}: "+U,[re+`(${M}(${j}).map((tableId) => {`,"const Table = (tableComponents?.[tableId] ?? "+A+"(tableId)) as React.ComponentType<TableProps<typeof tableId>>;","return <Table",`{...${de}(getTableComponentProps, tableId)}`,"tableId={tableId}","key={tableId}",J,Wt,"/>;","}), separator)"],Be(1,13)+te),R(((e,l,a)=>{const[n,o,d,r,I]=_(S,e);s(null,E,n,o,d,r,I),F(l+c,c,n,Ye(e)+te,t,a);const i=F(l+b,b,$,Ue(p,Ke(e))+te,t,a),u=F(l+C,C,$,Ue(p,Ke(e),1)+te,"cellId?: "+I+", descending?: boolean, offset?: number, limit?: number",a+", cellId, descending, offset, limit");F(l+p,p,d,et(e)+te,nl,yt(a,Kt));const m=F(l+g,g,I+Ve,Ue(h,Xe(e))+te,nl,yt(a,Kt));F(Te+l+c+le,Te+c+le,qt,Ye(e,9)+Zt,yt(Gt(c)+Ut+o,Gt(c)+oe),yt(a,Jt(c)),Qt,yt(tl,`table: ${o})`+Oe,Bt),al),F(ae+l+c+le,ae+c+le,le,Ye(e,12),t,a,t,ll,al),F(Te+l+p+le,Te+p+le,qt,et(e,9)+Zt,yt(nl,Gt(p)+Ut+r,Gt(p)+oe),yt(a,Kt,Jt(p)),Qt,yt(tl,`row: ${r})`+Oe,Bt),al),F("Add"+l+p+le,"Add"+p+le,qt,et(e,10)+Zt,yt(Gt(p)+Ut+r,Gt(p)+oe),yt(a,Jt(p)),Qt,"then?: ("+yt(nl+pe,"store: Store","row: "+r+")"+Oe,"then"+oe)+", reuseRowIds?: boolean",al+", reuseRowIds"),F(Te+l+Ce+p+le,Te+Ce+p+le,qt,et(e,11)+Zt,yt(nl,Gt(Ce+p)+Ut+r,Gt(Ce+p)+oe),yt(a,Kt,Jt(Ce+p)),Qt,yt(tl,`partialRow: ${r})`+Oe,Bt),al),F(ae+l+p+le,ae+p+le,le,et(e,12),nl,yt(a,Kt),t,ll,al);const w=Z(l+p+ol,"{rowId, "+j+", cellComponents, getCellComponentProps"+Yt+`}: ${z}<'${e}'>`,[re+`(${m}(rowId, ${j}).map((cellId) => {`,"const Cell = (cellComponents?.[cellId] ?? "+O+`(${a}, cellId)) as React.ComponentType<CellProps<typeof `+a+", typeof cellId>>;","return <Cell",`{...${de}(getCellComponentProps, cellId)} `,"key={cellId}",`tableId={${a}}`,Xt,"cellId={cellId}",J,Wt,"/>;","})"+Yt+", rowId)"],et(e,13)+te);Z(l+"Sorted"+c+ol,"{cellId, descending, offset, limit, ...props}: "+B+`<'${e}'>`,P+"(props, "+u+`(cellId, descending, offset, limit, props.${j}), ${a}, ${w});`,Ye(e,13)+", sorted"+te),Z(l+c+ol,`props: ${W}<'${e}'>`,P+"(props, "+i+`(props.${j}), ${a}, ${w});`,Ye(e,13)+te),k(e,((n,o,d,r,I)=>{const $="Map"+mt(o,1);s(0,E,$),s(1,E,$);const c=F(l+I+h,h,o+(L(d)?pe:t),tt(e,n)+te,nl,yt(a,Kt,r));F(Te+l+I+h+le,Te+h+le,qt,tt(e,n,9)+Zt,yt(nl,Gt(h)+Ut+o+" | "+$,Gt(h)+oe),yt(a,Kt,r,Jt(h)),Qt,yt(tl,`cell: ${o} | ${$})`+Oe,Bt),al),F(ae+l+I+h+le,ae+h+le,le,tt(e,n,12),yt(nl,"forceDel?: boolean"),yt(a,Kt,r,"forceDel"),t,ll,al),Z(l+I+h+ol,`{rowId, ${j}, debugIds}: `+G+`<'${e}', '${n}'>`,[re+`('' + ${c}(rowId, `+j+`) ?? '', undefined, debugIds, ${r})`],tt(e,n,13)+te)}))}));const H=ht(R((e=>_(S,e)?.[4]??t))," | ");F(i+r,i+r,De,Be(1,8)+" changes",dl(d),rl()),F(u+r,u+r,De,qe(2,0,1),dl(m),rl()),F(c+r,c+r,De,qe(3,0),dl(w,`tableId: ${a} | null`),rl("tableId")),F(b+r,b+r,De,qe(4,3,1),dl(f,`tableId: ${a} | null`),rl("tableId")),F(C+r,C+r,De,qe(13,3,1),dl(T,`tableId: ${a} | null`,"cellId: "+H+pe,"descending: boolean","offset: number","limit: number"+pe),rl("tableId","cellId","descending","offset","limit")),F(p+r,p+r,De,qe(5,3),dl(v,`tableId: ${a} | null`,Kt+": IdOrNull"),rl("tableId",Kt)),F(g+r,g+r,De,qe(6,5,1),dl(V,`tableId: ${a} | null`,Kt+": IdOrNull"),rl("tableId",Kt)),F(h+r,h+r,De,qe(7,5),dl(x,`tableId: ${a} | null`,Kt+": IdOrNull",`cellId: ${H} | null`),rl("tableId",Kt,"cellId"))}if(!At(l)){const[e,l,a,n,d,$]=o;s(null,E,...o),s(1,E,N);const c=y("getDefaultValueComponent","valueId: Id",ht(P(((e,t,l,a,n)=>`valueId == ${a} ? `+n+"ValueView : ")))+$e);F(w,w,e,Be(2,0)+te);const i=F(f,f,a+Ve,Ue(m,xe)+te);F(Te+w+le,Te+w+le,qt,Be(2,9)+Zt,yt(Gt(w)+Ut+l,Gt(w)+oe),Jt(w),Qt,yt(tl,`values: ${l})`+Oe,Bt),al),F(Te+Ce+w+le,Te+Ce+w+le,qt,Be(2,11)+Zt,yt(Gt(Ce+w)+Ut+l,Gt(Ce+w)+oe),Jt(Ce+w),Qt,yt(tl,`partialValues: ${l})`+Oe,Bt),al),F(ae+w+le,ae+w+le,le,Be(2,12),t,t,t,ll,al);const u=I(m+he,vt("valueId?: VId",j+ue+N,zt),Ze("a Value"),`<VId extends ${a}>`),p=I(w+he,vt(j+ue+N,"valueComponents?: {readonly [VId in "+a+`]?: ComponentType<${u}<VId>>;}`,`getValueComponentProps?: (valueId: ${a}) => ExtraProps`,el,zt),Ze(We(2,1)));s(1,D,p,u),Z(w+ol,"{"+j+", valueComponents, getValueComponentProps"+Yt+"}: "+p,[re+`(${i}(${j}).map((valueId) => {`,"const Value = valueComponents?.[valueId] ?? "+c+"(valueId);","return <Value",`{...${de}(getValueComponentProps, valueId)}`,"key={valueId}",J,Wt,"/>;","}), separator)"],Be(2,13)+te),P(((e,l,a,n,o)=>{const d="Map"+mt(l,1);s(0,E,d),s(1,E,d);const r=F(o+m,m,l,lt(e)+te,t,n);F(Te+o+m+le,Te+m+le,qt,lt(e,9)+Zt,yt(Gt(m)+Ut+l+" | "+d,Gt(m)+oe),yt(n,Jt(m)),Qt,yt(tl,`value: ${l} | ${d})`+Oe,Bt),al),F(ae+o+m+le,ae+m+le,le,lt(e,12),t,n,t,ll,al),Z(o+m+ol,`{${j}, debugIds}: ${u}<'${e}'>`,[re+`('' + ${r}(`+j+`) ?? '', undefined, debugIds, ${n})`],lt(e,13)+te)})),F(w+r,w+r,De,Be(2,8)+" changes",dl(n),rl()),F(f+r,f+r,De,qe(10,0,1),dl(d),rl()),F(m+r,m+r,De,qe(11,0),dl($,`valueId: ${a} | null`),rl("valueId"))}return Z(ge,`{${j}, ${j}ById, children}: `+K+" & {children: React.ReactNode}",["{",_t,"return (","<Context."+ge,"value={useMemo(",`() => [${j} ?? contextValue[0], {...contextValue[1], ...${j}ById}],`,`[${j}, ${j}ById, contextValue],`,")}>","{children}",`</Context.${ge}>`,");","}"],"Wraps part of an application in a context that provides default objects to be used by hooks and components within"),[d(...v(0),...V(),...Q(0)),d(...v(1),...x(),...Q(1))]},Il=(e,l,a)=>{if(At(e)&&At(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!At(t)||y(e.getTableIds(),(l=>{const a=e.getRowIds(l),n=U();if(y(a,(t=>y(e.getCellIds(l,t),(a=>{const o=e.getCell(l,t,a),d=q(n,a,(()=>[J(o),U(),[0],0])),[r,s,[I]]=d,$=q(s,o,(()=>0))+1;return $>I&&(d[2]=[$,o]),Q(s,o,$),d[3]++,r==J(o)})))))return t[l]={},B(n,(([e,,[,n],r],s)=>{t[l][s]={[o]:e,...r==x(a)?{[d]:n}:{}}})),1}))?t:{}},l=()=>{const t=D(e.getValuesSchemaJson());return At(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)=>bt(l(e,{...$l,filepath:"_."+t[a]}))))};return kt({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:Ct(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+$,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};
|
package/lib/tools.js.gz
CHANGED
|
Binary file
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
* load Store data, to and from a Yjs document.
|
|
4
4
|
*
|
|
5
5
|
* A single entry point, the createYjsPersister function, is provided, which
|
|
6
|
-
* returns a new Persister object that can
|
|
6
|
+
* returns a new Persister object that can bind a Store to a provided Yjs
|
|
7
|
+
* document.
|
|
7
8
|
*
|
|
9
|
+
* @see Synchronizing Data guide
|
|
8
10
|
* @packageDocumentation
|
|
9
11
|
* @module persister-yjs
|
|
12
|
+
* @since v4.0
|
|
10
13
|
*/
|
|
11
14
|
|
|
12
|
-
import * as Y from 'yjs';
|
|
13
15
|
import {Persister} from './persisters.d';
|
|
14
16
|
import {Store} from './store.d';
|
|
17
|
+
import {Doc as YDoc} from 'yjs';
|
|
15
18
|
|
|
16
19
|
/**
|
|
17
20
|
* The createYjsPersister function creates a Persister object that can persist
|
|
@@ -22,23 +25,82 @@ import {Store} from './store.d';
|
|
|
22
25
|
*
|
|
23
26
|
* @param store The Store to persist.
|
|
24
27
|
* @param yDoc The Yjs document to persist the Store to.
|
|
28
|
+
* @param yMapName The name of the Y.Map used inside the Yjs document to sync
|
|
29
|
+
* the Store too (which otherwise will default to 'tinybase').
|
|
25
30
|
* @returns A reference to the new Persister object.
|
|
26
31
|
* @example
|
|
27
32
|
* This example creates a Persister object and persists the Store to a Yjs
|
|
28
33
|
* document.
|
|
29
|
-
*
|
|
30
|
-
*
|
|
34
|
+
* ```js
|
|
35
|
+
* const doc = new Y.Doc();
|
|
31
36
|
* const store = createStore().setTables({pets: {fido: {species: 'dog'}}});
|
|
32
|
-
* const persister = createYjsPersister(store,
|
|
37
|
+
* const persister = createYjsPersister(store, doc);
|
|
33
38
|
*
|
|
34
39
|
* await persister.save();
|
|
35
40
|
* // Store JSON will be saved to the document.
|
|
36
41
|
*
|
|
37
|
-
*
|
|
38
|
-
* //
|
|
42
|
+
* console.log(doc.toJSON());
|
|
43
|
+
* // -> {tinybase: {t: {pets: {fido: {species: 'dog'}}}, v: {}}}
|
|
39
44
|
*
|
|
40
45
|
* persister.destroy();
|
|
41
46
|
* ```
|
|
47
|
+
* @example
|
|
48
|
+
* This more complex example uses Yjs updates to keep two Store objects (each
|
|
49
|
+
* with their own Persister objects and Yjs documents) in sync with each other.
|
|
50
|
+
* We use the `await` keyword extensively for the purpose of ensuring
|
|
51
|
+
* sequentiality in this example.
|
|
52
|
+
*
|
|
53
|
+
* Typically, real-world synchronization would happen between two systems via a
|
|
54
|
+
* Yjs connection provider. Here, we synthesize that with the `syncDocs`
|
|
55
|
+
* function.
|
|
56
|
+
*
|
|
57
|
+
* ```js
|
|
58
|
+
* const doc1 = new Y.Doc();
|
|
59
|
+
* const doc2 = new Y.Doc();
|
|
60
|
+
*
|
|
61
|
+
* // A function to manually synchronize documents with each other. Typically
|
|
62
|
+
* // this would happen over the wire, via a Yjs connection provider.
|
|
63
|
+
* const syncDocs = async () => {
|
|
64
|
+
* Y.applyUpdate(doc1, Y.encodeStateAsUpdate(doc2));
|
|
65
|
+
* Y.applyUpdate(doc2, Y.encodeStateAsUpdate(doc1));
|
|
66
|
+
* };
|
|
67
|
+
*
|
|
68
|
+
* // Bind a persisted Store to each document.
|
|
69
|
+
* const store1 = createStore();
|
|
70
|
+
* const persister1 = createYjsPersister(store1, doc1);
|
|
71
|
+
* await persister1.startAutoLoad();
|
|
72
|
+
* await persister1.startAutoSave();
|
|
73
|
+
*
|
|
74
|
+
* const store2 = createStore();
|
|
75
|
+
* const persister2 = createYjsPersister(store2, doc2);
|
|
76
|
+
* await persister2.startAutoLoad();
|
|
77
|
+
* await persister2.startAutoSave();
|
|
78
|
+
*
|
|
79
|
+
* // Synchronize the documents in their initial state.
|
|
80
|
+
* await syncDocs();
|
|
81
|
+
*
|
|
82
|
+
* // Make a change to each of the two Stores.
|
|
83
|
+
* store1.setTables({pets: {fido: {species: 'dog'}}});
|
|
84
|
+
* store2.setValues({open: true});
|
|
85
|
+
* // ...
|
|
86
|
+
*
|
|
87
|
+
* // Synchronize the documents with each other again.
|
|
88
|
+
* await syncDocs();
|
|
89
|
+
*
|
|
90
|
+
* // Ensure the Stores are in sync.
|
|
91
|
+
* console.log(store1.getContent());
|
|
92
|
+
* // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
|
|
93
|
+
* console.log(store2.getContent());
|
|
94
|
+
* // -> [{pets: {fido: {species: 'dog'}}}, {open: true}]
|
|
95
|
+
*
|
|
96
|
+
* persister1.destroy();
|
|
97
|
+
* persister2.destroy();
|
|
98
|
+
* ```
|
|
42
99
|
* @category Creation
|
|
100
|
+
* @since v4.0
|
|
43
101
|
*/
|
|
44
|
-
export function createYjsPersister(
|
|
102
|
+
export function createYjsPersister(
|
|
103
|
+
store: Store,
|
|
104
|
+
yDoc: YDoc,
|
|
105
|
+
yMapName?: string,
|
|
106
|
+
): Persister;
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* @module persisters
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
import {Store, Tables, Values} from './store.d';
|
|
30
|
+
import {GetTransactionChanges, Store, Tables, Values} from './store.d';
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* The PersisterStats type describes the number of times a Persister object has
|
|
@@ -52,8 +52,23 @@ export type PersisterStats = {
|
|
|
52
52
|
/**
|
|
53
53
|
* A PersisterListener is a callback that lets a Persister inform the Store that
|
|
54
54
|
* a change has happened to the underlying data.
|
|
55
|
+
*
|
|
56
|
+
* If the listener has the `getTransactionChanges` parameter, it will be used to
|
|
57
|
+
* make an incremental change to the Store. If not, but the `getContent`
|
|
58
|
+
* function _is_ available, that will be used to make a wholesale change to the
|
|
59
|
+
* Store. If neither are present, the content will be loaded from the
|
|
60
|
+
* Persister's load method.
|
|
61
|
+
*
|
|
62
|
+
* @param getContent An optional function that, if provided, returns an array of
|
|
63
|
+
* Store content and can be used to immediately wholesale update the Store.
|
|
64
|
+
* @param getTransactionChanges An optional function that, if provided, returns
|
|
65
|
+
* a TransactionChanges object and can be used to immediately incrementally
|
|
66
|
+
* update the Store.
|
|
55
67
|
*/
|
|
56
|
-
export type PersisterListener = (
|
|
68
|
+
export type PersisterListener = (
|
|
69
|
+
getContent?: () => [Tables, Values],
|
|
70
|
+
getTransactionChanges?: GetTransactionChanges,
|
|
71
|
+
) => void;
|
|
57
72
|
|
|
58
73
|
/**
|
|
59
74
|
* A Persister object lets you save and load Store data to and from different
|
|
@@ -170,7 +185,7 @@ export interface Persister {
|
|
|
170
185
|
* @param initialTables An optional Tables object used when the underlying
|
|
171
186
|
* storage has not previously been populated.
|
|
172
187
|
* @param initialValues An optional Values object used when the underlying
|
|
173
|
-
* storage has not previously been populated, since v3.0.
|
|
188
|
+
* storage has not previously been populated, since v3.0.
|
|
174
189
|
* @returns A Promise containing a reference to the Persister object.
|
|
175
190
|
* @example
|
|
176
191
|
* This example creates an empty Store, and loads data into it from the
|
|
@@ -238,7 +253,7 @@ export interface Persister {
|
|
|
238
253
|
* @param initialTables An optional Tables object used when the underlying
|
|
239
254
|
* storage has not previously been populated.
|
|
240
255
|
* @param initialValues An optional Values object used when the underlying
|
|
241
|
-
* storage has not previously been populated, since v3.0.
|
|
256
|
+
* storage has not previously been populated, since v3.0.
|
|
242
257
|
* @returns A Promise containing a reference to the Persister object.
|
|
243
258
|
* @example
|
|
244
259
|
* This example creates an empty Store, and loads data into it from the
|
|
@@ -538,25 +553,28 @@ export interface Persister {
|
|
|
538
553
|
* covers. See those implementations for ideas on how to implement your own
|
|
539
554
|
* Persister types.
|
|
540
555
|
*
|
|
541
|
-
* This API changed in v4.0.
|
|
556
|
+
* This API changed in v4.0. Any custom persisters created on previous
|
|
542
557
|
* versions should be upgraded. Most notably, the `setPersisted` function
|
|
543
558
|
* parameter is provided with a `getContent` function to get the content from
|
|
544
|
-
* the Store itself, rather than being passed pre-serialized JSON.
|
|
545
|
-
*
|
|
559
|
+
* the Store itself, rather than being passed pre-serialized JSON. It also
|
|
560
|
+
* receives information about the changes made during a transaction. The
|
|
561
|
+
* `getPersisted` function must return the content (or nothing) rather than
|
|
562
|
+
* JSON. `addPersisterListener` has been renamed `addPersisterListener`, and
|
|
546
563
|
* `addPersisterListener` has been renamed `delPersisterListener`.
|
|
547
564
|
*
|
|
548
565
|
* @param store The Store to persist.
|
|
549
566
|
* @param getPersisted An asynchronous function which will fetch content from
|
|
550
|
-
* the persistence layer (or `
|
|
567
|
+
* the persistence layer (or `undefined` if not present).
|
|
551
568
|
* @param setPersisted An asynchronous function which will send content to the
|
|
552
|
-
* persistence layer.
|
|
569
|
+
* persistence layer. Since v4.0, it receives functions for getting the Store
|
|
570
|
+
* content and information about the changes made during a transaction.
|
|
553
571
|
* @param addPersisterListener A function that will register a `listener`
|
|
554
572
|
* listener on underlying changes to the persistence layer. You can return a
|
|
555
|
-
* listening handle that will be provided again when `delPersisterListener`
|
|
556
|
-
*
|
|
557
|
-
* @param delPersisterListener A function that will unregister the listener
|
|
558
|
-
*
|
|
559
|
-
*
|
|
573
|
+
* listening handle that will be provided again when `delPersisterListener` is
|
|
574
|
+
* called.
|
|
575
|
+
* @param delPersisterListener A function that will unregister the listener from
|
|
576
|
+
* the underlying changes to the persistence layer. It receives whatever was
|
|
577
|
+
* returned from your `addPersisterListener` implementation.
|
|
560
578
|
* @returns A reference to the new Persister object.
|
|
561
579
|
* @example
|
|
562
580
|
* This example creates a custom Persister object and persists the Store to a
|
|
@@ -569,7 +587,11 @@ export interface Persister {
|
|
|
569
587
|
*
|
|
570
588
|
* const persister = createCustomPersister(
|
|
571
589
|
* store,
|
|
572
|
-
* async () =>
|
|
590
|
+
* async () => {
|
|
591
|
+
* try {
|
|
592
|
+
* return JSON.parse(storeJson);
|
|
593
|
+
* } catch {}
|
|
594
|
+
* },
|
|
573
595
|
* async (getContent) => (storeJson = JSON.stringify(getContent())),
|
|
574
596
|
* (listener) => setInterval(listener, 1000),
|
|
575
597
|
* (interval) => clearInterval(interval),
|
|
@@ -591,8 +613,11 @@ export interface Persister {
|
|
|
591
613
|
*/
|
|
592
614
|
export function createCustomPersister<ListeningHandle>(
|
|
593
615
|
store: Store,
|
|
594
|
-
getPersisted: () => Promise<
|
|
595
|
-
setPersisted: (
|
|
616
|
+
getPersisted: () => Promise<[Tables, Values] | undefined>,
|
|
617
|
+
setPersisted: (
|
|
618
|
+
getContent: () => [Tables, Values],
|
|
619
|
+
getTransactionChanges?: GetTransactionChanges,
|
|
620
|
+
) => Promise<void>,
|
|
596
621
|
addPersisterListener: (listener: PersisterListener) => ListeningHandle,
|
|
597
622
|
delPersisterListener: (listeningHandle: ListeningHandle) => void,
|
|
598
623
|
): Persister;
|