@loro-dev/flock-sqlite 0.1.0 → 0.4.0

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/dist/index.d.mts CHANGED
@@ -20,6 +20,11 @@ type EntryClock = {
20
20
  logicalCounter: number;
21
21
  peerId: string;
22
22
  };
23
+ type EntryInfo = {
24
+ data?: Value;
25
+ metadata: MetadataMap;
26
+ clock: EntryClock;
27
+ };
23
28
  type ExportPayload = {
24
29
  data?: Value;
25
30
  metadata?: MetadataMap;
@@ -57,7 +62,7 @@ type VersionVectorEntry = {
57
62
  physicalTime: number;
58
63
  logicalCounter: number;
59
64
  };
60
- type VersionVector = Record<string, VersionVectorEntry>;
65
+ type VersionVector$1 = Record<string, VersionVectorEntry>;
61
66
  type ScanBound = {
62
67
  kind: "inclusive";
63
68
  key: KeyPart[];
@@ -89,7 +94,7 @@ type EventBatch = {
89
94
  events: Event[];
90
95
  };
91
96
  type ExportOptions = {
92
- from?: VersionVector;
97
+ from?: VersionVector$1;
93
98
  hooks?: ExportHooks;
94
99
  pruneTombstonesBefore?: number;
95
100
  peerId?: string;
@@ -114,6 +119,9 @@ type PutWithMetaOptions = {
114
119
  type EventListener = (batch: EventBatch) => void;
115
120
  //#endregion
116
121
  //#region src/index.d.ts
122
+ interface VersionVector extends VersionVector$1 {}
123
+ declare function encodeVersionVector(vector: VersionVector): Uint8Array;
124
+ declare function decodeVersionVector(bytes: Uint8Array): VersionVector;
117
125
  type FlockSQLiteOptions = {
118
126
  path: string;
119
127
  peerId?: string;
@@ -143,14 +151,52 @@ declare class FlockSQLite {
143
151
  put(key: KeyPart[], value: Value, now?: number): Promise<void>;
144
152
  putWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
145
153
  delete(key: KeyPart[], now?: number): Promise<void>;
154
+ /**
155
+ * Force put a value even if it's the same as the current value.
156
+ * This will refresh the timestamp.
157
+ */
158
+ forcePut(key: KeyPart[], value: Value, now?: number): Promise<void>;
159
+ /**
160
+ * Force put a value with metadata even if it's the same as the current value.
161
+ * This will refresh the timestamp.
162
+ */
163
+ forcePutWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
164
+ /**
165
+ * Force delete a key even if it's already deleted.
166
+ * This will refresh the timestamp.
167
+ */
168
+ forceDelete(key: KeyPart[], now?: number): Promise<void>;
146
169
  set(key: KeyPart[], value: Value, now?: number): Promise<void>;
147
170
  setPeerId(peerId: string): Promise<void>;
148
171
  get(key: KeyPart[]): Promise<Value | undefined>;
172
+ /**
173
+ * Returns the full entry payload (data, metadata, and clock) for a key.
174
+ *
175
+ * Compared to `get`, this preserves tombstone information: a deleted entry
176
+ * still returns its clock and an empty metadata object with `data` omitted.
177
+ * Missing or invalid keys return `undefined`. Metadata is cloned and
178
+ * normalized to `{}` when absent.
179
+ */
180
+ getEntry(key: KeyPart[]): Promise<EntryInfo | undefined>;
149
181
  getMvr(key: KeyPart[]): Promise<Value[]>;
150
182
  putMvr(key: KeyPart[], value: Value, now?: number): Promise<void>;
151
183
  private buildScanBounds;
152
184
  scan(options?: ScanOptions): Promise<ScanRow[]>;
153
- version(): VersionVector;
185
+ /**
186
+ * Returns the exclusive version vector, which only includes peers that have
187
+ * at least one entry in the current state. This is consistent with the state
188
+ * after export and re-import.
189
+ *
190
+ * Use this version when sending to other peers for incremental sync.
191
+ */
192
+ version(): Promise<VersionVector>;
193
+ /**
194
+ * Returns the inclusive version vector, which includes all peers ever seen,
195
+ * even if their entries have been overridden by other peers.
196
+ *
197
+ * Use this version when checking if you have received all data from another peer.
198
+ */
199
+ inclusiveVersion(): VersionVector;
154
200
  peerId(): string;
155
201
  getMaxPhysicalTime(): number;
156
202
  private exportInternal;
@@ -171,5 +217,5 @@ declare class FlockSQLite {
171
217
  subscribe(listener: (batch: EventBatch) => void): () => void;
172
218
  }
173
219
  //#endregion
174
- export { type Event, type EventBatch, type EventListener, type ExportBundle, type ExportHooks, type ExportOptions, type ExportPayload, type ExportRecord, FlockSQLite as Flock, FlockSQLite, FlockSQLiteOptions, type ImportHooks, type ImportOptions, type ImportReport, type KeyPart, type MetadataMap, type PutHooks, type PutWithMetaOptions, type ScanBound, type ScanOptions, type ScanRow, type Value, type VersionVector, type VersionVectorEntry };
220
+ export { type EntryInfo, type Event, type EventBatch, type EventListener, type ExportBundle, type ExportHooks, type ExportOptions, type ExportPayload, type ExportRecord, FlockSQLite as Flock, FlockSQLite, FlockSQLiteOptions, type ImportHooks, type ImportOptions, type ImportReport, type KeyPart, type MetadataMap, type PutHooks, type PutWithMetaOptions, type ScanBound, type ScanOptions, type ScanRow, type Value, VersionVector, type VersionVectorEntry, decodeVersionVector, encodeVersionVector };
175
221
  //# sourceMappingURL=index.d.mts.map
package/dist/index.d.ts CHANGED
@@ -20,6 +20,11 @@ type EntryClock = {
20
20
  logicalCounter: number;
21
21
  peerId: string;
22
22
  };
23
+ type EntryInfo = {
24
+ data?: Value;
25
+ metadata: MetadataMap;
26
+ clock: EntryClock;
27
+ };
23
28
  type ExportPayload = {
24
29
  data?: Value;
25
30
  metadata?: MetadataMap;
@@ -57,7 +62,7 @@ type VersionVectorEntry = {
57
62
  physicalTime: number;
58
63
  logicalCounter: number;
59
64
  };
60
- type VersionVector = Record<string, VersionVectorEntry>;
65
+ type VersionVector$1 = Record<string, VersionVectorEntry>;
61
66
  type ScanBound = {
62
67
  kind: "inclusive";
63
68
  key: KeyPart[];
@@ -89,7 +94,7 @@ type EventBatch = {
89
94
  events: Event[];
90
95
  };
91
96
  type ExportOptions = {
92
- from?: VersionVector;
97
+ from?: VersionVector$1;
93
98
  hooks?: ExportHooks;
94
99
  pruneTombstonesBefore?: number;
95
100
  peerId?: string;
@@ -114,6 +119,9 @@ type PutWithMetaOptions = {
114
119
  type EventListener = (batch: EventBatch) => void;
115
120
  //#endregion
116
121
  //#region src/index.d.ts
122
+ interface VersionVector extends VersionVector$1 {}
123
+ declare function encodeVersionVector(vector: VersionVector): Uint8Array;
124
+ declare function decodeVersionVector(bytes: Uint8Array): VersionVector;
117
125
  type FlockSQLiteOptions = {
118
126
  path: string;
119
127
  peerId?: string;
@@ -143,14 +151,52 @@ declare class FlockSQLite {
143
151
  put(key: KeyPart[], value: Value, now?: number): Promise<void>;
144
152
  putWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
145
153
  delete(key: KeyPart[], now?: number): Promise<void>;
154
+ /**
155
+ * Force put a value even if it's the same as the current value.
156
+ * This will refresh the timestamp.
157
+ */
158
+ forcePut(key: KeyPart[], value: Value, now?: number): Promise<void>;
159
+ /**
160
+ * Force put a value with metadata even if it's the same as the current value.
161
+ * This will refresh the timestamp.
162
+ */
163
+ forcePutWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
164
+ /**
165
+ * Force delete a key even if it's already deleted.
166
+ * This will refresh the timestamp.
167
+ */
168
+ forceDelete(key: KeyPart[], now?: number): Promise<void>;
146
169
  set(key: KeyPart[], value: Value, now?: number): Promise<void>;
147
170
  setPeerId(peerId: string): Promise<void>;
148
171
  get(key: KeyPart[]): Promise<Value | undefined>;
172
+ /**
173
+ * Returns the full entry payload (data, metadata, and clock) for a key.
174
+ *
175
+ * Compared to `get`, this preserves tombstone information: a deleted entry
176
+ * still returns its clock and an empty metadata object with `data` omitted.
177
+ * Missing or invalid keys return `undefined`. Metadata is cloned and
178
+ * normalized to `{}` when absent.
179
+ */
180
+ getEntry(key: KeyPart[]): Promise<EntryInfo | undefined>;
149
181
  getMvr(key: KeyPart[]): Promise<Value[]>;
150
182
  putMvr(key: KeyPart[], value: Value, now?: number): Promise<void>;
151
183
  private buildScanBounds;
152
184
  scan(options?: ScanOptions): Promise<ScanRow[]>;
153
- version(): VersionVector;
185
+ /**
186
+ * Returns the exclusive version vector, which only includes peers that have
187
+ * at least one entry in the current state. This is consistent with the state
188
+ * after export and re-import.
189
+ *
190
+ * Use this version when sending to other peers for incremental sync.
191
+ */
192
+ version(): Promise<VersionVector>;
193
+ /**
194
+ * Returns the inclusive version vector, which includes all peers ever seen,
195
+ * even if their entries have been overridden by other peers.
196
+ *
197
+ * Use this version when checking if you have received all data from another peer.
198
+ */
199
+ inclusiveVersion(): VersionVector;
154
200
  peerId(): string;
155
201
  getMaxPhysicalTime(): number;
156
202
  private exportInternal;
@@ -171,5 +217,5 @@ declare class FlockSQLite {
171
217
  subscribe(listener: (batch: EventBatch) => void): () => void;
172
218
  }
173
219
  //#endregion
174
- export { type Event, type EventBatch, type EventListener, type ExportBundle, type ExportHooks, type ExportOptions, type ExportPayload, type ExportRecord, FlockSQLite as Flock, FlockSQLite, FlockSQLiteOptions, type ImportHooks, type ImportOptions, type ImportReport, type KeyPart, type MetadataMap, type PutHooks, type PutWithMetaOptions, type ScanBound, type ScanOptions, type ScanRow, type Value, type VersionVector, type VersionVectorEntry };
220
+ export { type EntryInfo, type Event, type EventBatch, type EventListener, type ExportBundle, type ExportHooks, type ExportOptions, type ExportPayload, type ExportRecord, FlockSQLite as Flock, FlockSQLite, FlockSQLiteOptions, type ImportHooks, type ImportOptions, type ImportReport, type KeyPart, type MetadataMap, type PutHooks, type PutWithMetaOptions, type ScanBound, type ScanOptions, type ScanRow, type Value, VersionVector, type VersionVectorEntry, decodeVersionVector, encodeVersionVector };
175
221
  //# sourceMappingURL=index.d.ts.map
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{openStore as e}from"@loro-dev/unisqlite";const t=new TextEncoder;function n(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function r(e){let t=BigInt(e),n=[];do{let e=Number(t&127n);t>>=7n,t!==0n&&(e|=128),n.push(e)}while(t!==0n);return new Uint8Array(n)}function i(e){let t=BigInt(e),n=[],r=!0;for(;r;){let e=Number(t&127n);t>>=7n;let i=(e&64)!=0;t===0n&&!i||t===-1n&&i?r=!1:e|=128,n.push(e)}return new Uint8Array(n)}async function a(e){let t=typeof crypto<`u`?crypto:void 0;if(t?.subtle){let n=new ArrayBuffer(e.byteLength);new Uint8Array(n).set(e);let r=await t.subtle.digest(`SHA-256`,n);return new Uint8Array(r)}try{let{createHash:t}=await import(`crypto`),n=t(`sha256`);return n.update(e),new Uint8Array(n.digest())}catch{throw Error(`No crypto implementation available for digest`)}}var o=class{chunks=[];writeTag(e){this.chunks.push(e&255)}writeBool(e){this.chunks.push(e?1:0)}writeBytes(e){this.writeLen(e.length);for(let t=0;t<e.length;t+=1)this.chunks.push(e[t])}writeRawBytes(e){for(let t=0;t<e.length;t+=1)this.chunks.push(e[t])}writeLen(e){this.writeRawBytes(r(e))}writeI64(e){this.writeRawBytes(i(e))}writeF64(e){let t=new DataView(new ArrayBuffer(8));t.setFloat64(0,e,!1);let n=new Uint8Array(t.buffer);this.writeRawBytes(n)}writeString(e){this.writeBytes(t.encode(e))}writeJson(e){if(e===null){this.writeTag(32);return}if(typeof e==`boolean`){this.writeTag(33),this.writeBool(e);return}if(typeof e==`number`){this.writeTag(34),this.writeF64(e);return}if(typeof e==`string`){this.writeTag(35),this.writeString(e);return}if(Array.isArray(e)){this.writeTag(36),this.writeLen(e.length);for(let t of e)this.writeJson(t);return}if(e&&typeof e==`object`){let t=Object.entries(e).sort(([e],[t])=>e<t?-1:e>t?1:0);this.writeTag(37),this.writeLen(t.length);for(let[e,n]of t)this.writeString(e),this.writeJson(n);return}throw TypeError(`Unsupported JSON value in digest`)}writeRawValue(e){if(this.writeTag(16),e.data===void 0?this.writeBool(!1):(this.writeBool(!0),this.writeJson(e.data)),this.writeTag(18),!e.metadata||typeof e.metadata!=`object`)this.writeBool(!1);else{let t=Object.entries(e.metadata).sort(([e],[t])=>e<t?-1:e>t?1:0);this.writeBool(!0),this.writeLen(t.length);for(let[e,n]of t)this.writeString(e),this.writeJson(n)}this.writeTag(17),this.writeF64(e.clock.physicalTime),this.writeI64(Math.trunc(e.clock.logicalCounter)),this.writeBytes(t.encode(e.clock.peerId))}async finish(){return a(new Uint8Array(this.chunks))}};function s(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function c(e){if(e!=null)return JSON.parse(e)}async function l(e){let t=c(e.data);if(t===void 0)return null;let n=s(e.metadata),r=new o;return r.writeBytes(e.key),r.writeRawValue({data:t,metadata:n,clock:{physicalTime:Number(e.physical),logicalCounter:Number(e.logical),peerId:String(e.peer)}}),r.finish()}async function u(e){let t=new Uint8Array(32);for(let n of e){let e=await l(n);if(e)for(let n=0;n<t.length;n+=1)t[n]^=e[n]}return n(t)}const ee={hi:2146959360,lo:1};var te=class extends Error{};function d(){throw new te}const ne=(e,t)=>e<t?-1:e>t?1:0,re=(e,t)=>e===t,f=e=>BigInt(e.hi)*4294967296n+BigInt(e.lo>>>0),ie=e=>-e,ae=(e,t)=>e+t,oe=(e,t)=>e*t,se=(e,t)=>e/t,ce=(e,t)=>e%t,le=(e,t)=>e>>BigInt(t),ue=e=>Number(BigInt.asUintN(32,e))|0,de=e=>Number(BigInt.asIntN(32,e));function p(e,t){if(t<0||t>=e.length)throw Error(`Index out of bounds`)}const fe=(e,t)=>e.toString(t);function m(e,t){let n=new Uint8Array(e);return t!==0&&n.fill(t),n}const h=(e,t)=>{e.push(t)},pe={$tag:0};function me(e){this._0=e}me.prototype.$tag=1;function he(e){this._0=e}he.prototype.$tag=2;function ge(e){this._0=e}ge.prototype.$tag=3;function _e(e){this._0=e}_e.prototype.$tag=4;const ve=function e(t){let n=e._view;return n===void 0&&(n=e._view=new DataView(new ArrayBuffer(8))),n.setUint32(0,t.hi),n.setUint32(4,t.lo),n.getFloat64(0)},ye=function e(t){let n=e._view;return n===void 0&&(n=e._view=new DataView(new ArrayBuffer(8))),n.setFloat64(0,t),{hi:n.getInt32(0),lo:n.getInt32(4)}},be=e=>e.hi*4294967296+(e.lo>>>0),xe=e=>{if(isNaN(e))return{hi:0,lo:0};if(e>=0x8000000000000000)return{hi:2147483647,lo:4294967295};if(e<=-0x8000000000000000)return{hi:-2147483648,lo:0};let t=!1;e<0&&(t=!0,e=-e);let n=1/4294967296*e|0,r=e>>>0;return t&&(r===0?n=~n+1:(n=~n,r=~r+1)),{hi:n,lo:r}},Se=new Uint8Array,g={hi:0,lo:255},_={hi:0,lo:0},Ce={hi:-1,lo:-1},we={hi:-2147483648,lo:0};function Te(e){this._0=e}Te.prototype.$tag=0;function Ee(e){this._0=e}Ee.prototype.$tag=1;function v(e){this._0=e}v.prototype.$tag=2;const y={$tag:1},De={$tag:0},Oe={hi:0,lo:1},ke={hi:0,lo:256};function b(e){this._0=e}b.prototype.$tag=0;function x(e){this._0=e}x.prototype.$tag=1;function Ae(e){this._0=e}Ae.prototype.$tag=0;function je(e){this._0=e}je.prototype.$tag=1;function S(e){this._0=e}S.prototype.$tag=0;function C(e){this._0=e}C.prototype.$tag=1;function w(e){this._0=e}w.prototype.$tag=2;function T(e){this._0=e}T.prototype.$tag=3;const Me={$tag:4},Ne={$tag:5};function Pe(e){this._0=e}Pe.prototype.$tag=0;function Fe(e){this._0=e}Fe.prototype.$tag=1;function Ie(e){this._0=e}Ie.prototype.$tag=0;function Le(e){this._0=e}Le.prototype.$tag=1;function Re(e){this._0=e}Re.prototype.$tag=2;const ze={$tag:3},Be={$tag:4},Ve=jt(ee);function He(e){return d()}function Ue(e){return d()}function We(e){return d()}function E(e){d()}function Ge(e){return d()}function Ke(e){return At(e)}function qe(e,t){if(e.end-e.start|0){let n=e.buf[e.start],r=e.buf,i=1+e.start|0,a={buf:r,start:i,end:e.end},o=M(n),s=o.end-o.start|0,c=a.end-a.start|0,l=0;for(;;){let e=l;if(e<c){let n=r[i+e|0],a=s,o=M(n);s=a+((o.end-o.start|0)+(t.end-t.start|0)|0)|0,l=e+1|0;continue}else break}s<<=1;let u=lt(s);if(P(u,o.str,o.start,o.end-o.start|0),mt(t.str,0,t.start,t.end)){let e=a.end-a.start|0,t=0;for(;;){let n=t;if(n<e){let e=r[i+n|0],a=M(e);P(u,a.str,a.start,a.end-a.start|0),t=n+1|0;continue}else break}}else{let e=a.end-a.start|0,n=0;for(;;){let a=n;if(a<e){let e=r[i+a|0],o=M(e);P(u,t.str,t.start,t.end-t.start|0),P(u,o.str,o.start,o.end-o.start|0),n=a+1|0;continue}else break}}return u.val}else return``}function Je(e,t){t(t=>(bt(e,t),1))}function Ye(e,t){return qe({buf:e,start:0,end:e.length},t)}function Xe(e,t){return ne(e,t)}function Ze(e,t){return re(e,t)}function Qe(e){return ie(e)}function $e(e,t){return ae(e,t)}function et(e,t){return oe(e,t)}function tt(e,t){return se(e,t)}function nt(e,t){return ce(e,t)}function rt(e,t){return t<0&&E(`negative shift count`),le(e,t)}function it(e){let t=ue(rt(e,32)),n=ue(e);return Bt(Vt(Ke(t),32),Ke(n))}function D(e,t){if(t>=0&&t<(e.end-e.start|0)){let n=e.bytes,r=e.start+t|0;return p(n,r),n[r]}else return We(`index out of bounds: the len is from 0 to ${N(e.end-e.start|0)} but the index is ${N(t)}`)}function O(e,t,n){let r=e.length,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{bytes:e,start:a,end:i}:Ue(`Invalid index for View`)}function k(e,t,n){let r=e.end-e.start|0,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{bytes:e.bytes,start:e.start+a|0,end:(e.start+a|0)+(i-a|0)|0}:Ue(`Invalid index for View`)}function at(e){return t=>{let n=e.end-e.start|0,r=0;for(;;){let i=r;if(i<n){if(t(D(e,i))!==1)return 0;r=i+1|0;continue}else return 1}}}function ot(e){let t={val:0},n=e.end-e.start|0;return()=>{if(t.val<n){let n=t.val,r=e.bytes,i=e.start+n|0;p(r,i);let a=r[i];return t.val=t.val+1|0,a}else return-1}}function A(e){return Jt(e.end-e.start|0,t=>Zt(e,t))}function st(e){let t=Ct(e);return A({buf:t,start:0,end:t.length})}function j(e){return At(e)}function M(e){return{str:e,start:0,end:e.length}}function ct(e,t,n,r,i){if(e===n&&t<r){let a=0;for(;;){let o=a;if(o<i){let i=t+o|0,s=r+o|0;p(n,s),p(e,i),e[i]=n[s],a=o+1|0;continue}else return}}else{let a=i-1|0;for(;;){let i=a;if(i>=0){let o=t+i|0,s=r+i|0;p(n,s),p(e,o),e[o]=n[s],a=i-1|0;continue}else return}}}function lt(e){return{val:``}}function ut(e,t){let n=e;n.val=`${n.val}${String.fromCodePoint(t)}`}function dt(e,t){let n=e;n.val=`${n.val}${t}`}function ft(e,t){return Xe(e,t)>0}function N(e){let t=lt(0);return Tt(e,{self:t,method_0:dt,method_1:P,method_2:ut}),t.val}function pt(e,t){return fe(e,t)}function mt(e,t,n,r){let i;i=r===void 0?e.length:r;let a=n,o=0;for(;;){let n=a,r=o;if(n<i&&r<t){let t=e.charCodeAt(n);if(55296<=t&&t<=56319&&(n+1|0)<i){let t=n+1|0,i=e.charCodeAt(t);if(56320<=i&&i<=57343){a=n+2|0,o=r+1|0;continue}else E(`invalid surrogate pair`)}a=n+1|0,o=r+1|0;continue}else return r===t&&n===i}}function ht(e,t,n){let r=e.length,i;return i=n===void 0?r:n,t>=0&&t<=i&&i<=r?e.substring(t,i):d()}function P(e,t,n,r){let i=e;i.val=`${i.val}${ht(t,n,n+r|0)}`}function gt(e){return[]}function _t(e){return[]}function F(e){return[]}function vt(e,t){h(e,t)}function yt(e,t){h(e,t)}function I(e,t){h(e,t)}function L(e,t){h(e,t)}function bt(e,t){h(e,t)}function xt(e){return String.fromCodePoint(e)}function St(e,t){let n={val:pe};e(e=>(t(e),1));let r=n.val;switch(r.$tag){case 0:return;case 1:r._0;return;case 2:return r._0;case 3:d();return;default:d();return}}function Ct(e){let t=[];return St(e,e=>{I(t,e)}),t}function wt(e){return e()}function Tt(e,t){t.method_0(t.self,pt(e,10))}function Et(e){return t=>{let n=e.length,r=0;for(;;){let i=r;if(i<n){let n=e[i];if(t(n)!==1)return 0;r=i+1|0;continue}else return 1}}}function Dt(e,t,n){let r=e.length,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{buf:e,start:a,end:i}:Ge(`View index out of bounds`)}function Ot(e){return{hi:0,lo:e}}function kt(e){return Ot(e)}function At(e){return kt(e)}function jt(e){return ve(e)}function Mt(e){return{hi:e>>31&-1,lo:e|0}}function Nt(e){return Mt(e)}function Pt(e){return e.lo}function R(e){return Pt(e)&255}function Ft(e,t){return{hi:e.hi&t.hi,lo:e.lo&t.lo}}function It(e,t){return{hi:e.hi|t.hi,lo:e.lo|t.lo}}function Lt(e,t){return{hi:e.hi^t.hi,lo:e.lo^t.lo}}function Rt(e,t){let n=t&63;if(n===0)return e;if(n<32){let t=e.hi,r=e.lo,i=t,a=r;return{hi:i<<n|a>>>(32-n|0)|0,lo:a<<n}}else return{hi:e.lo<<(n-32|0),lo:0}}function zt(e,t){let n=t&63;return n===0?e:n<32?{hi:e.hi>>>n|0,lo:e.lo>>>n|e.hi<<(32-n|0)}:{hi:0,lo:e.hi>>>(n-32|0)|0}}function Bt(e,t){return It(e,t)}function Vt(e,t){return Rt(e,t)}function Ht(e){return be(e)}function Ut(e){return Ht(e)}function Wt(e){return ve(e)}function Gt(e){return ye(e)}function Kt(e,t){let n=e,r=t;return n.hi===r.hi&&n.lo===r.lo}function z(e,t){return Ft(e,t)}function B(e,t){return It(e,t)}function V(e,t){return Lt(e,t)}function H(e,t){return Rt(e,t)}function U(e,t){return zt(e,t)}function qt(e){return xe(e)}function Jt(e,t){if(e<=0)return Se;let n=m(e,t(0)),r=1;for(;;){let i=r;if(i<e){p(n,i),n[i]=t(i),r=i+1|0;continue}else break}return n}function Yt(e){console.log(e)}function Xt(e,t,n,r,i){let a=(t+i|0)-1|0,o=(r+i|0)-1|0,s=e.length,c=n.length;if(i>=0&&t>=0&&a<s&&r>=0&&o<c){ct(e,t,n,r,i);return}else{d();return}}function Zt(e,t){if(t>=0&&t<(e.end-e.start|0)){let n=e.buf,r=e.start+t|0;return p(n,r),n[r]}else return We(`index out of bounds: the len is from 0 to ${N(e.end-e.start|0)} but the index is ${N(t)}`)}function Qt(e){let t=e.length,n=Array(t),r=0;for(;;){let i=r;if(i<t){n[i]=e[(t-i|0)-1|0],r=i+1|0;continue}else break}return n}function $t(e,t){let n=e.data.length<=0?1:e.data.length,r,i=n;for(;;){let e=i;if(e>=t){r=e;break}i=Math.imul(e,2)|0}if(r!==e.data.length){let t=m(r,0);ct(t,0,e.data,0,e.len),e.data=t;return}else return}function W(e,t){$t(e,e.len+1|0);let n=e.data,r=e.len;p(n,r),n[r]=t,e.len=e.len+1|0}function G(e){return A(Dt(e.data,0,e.len))}function K(e){return{data:m(e<1?1:e,0),len:0}}function en(e,t){let n=t.length;$t(e,e.len+n|0),Xt(e.data,e.len,t,0,n),e.len=e.len+n|0}function tn(e){switch(e){case 0:return`40`;case 1:return`41`;case 2:return`42`;case 3:return`43`;case 4:return`44`;case 5:return`45`;case 6:return`46`;case 7:return`47`;default:return`49`}}function nn(e){switch(e){case 0:return`30`;case 1:return`31`;case 2:return`32`;case 3:return`33`;case 4:return`34`;case 5:return`35`;case 6:return`36`;case 7:return`37`;default:return`39`}}function rn(e){let t=[],n=e.color;n===void 0||L(t,nn(n));let r=e.bg_color;r===void 0||L(t,tn(r));let i=e.formats,a=i.length,o=0;for(;;){let e=o;if(e<a){switch(i[e]){case 0:L(t,`1`);break;case 1:L(t,`4`);break;case 2:L(t,`5`);break;case 3:L(t,`7`);break;case 4:L(t,`8`);break;case 5:L(t,`9`);break;default:L(t,`3`)}o=e+1|0;continue}else break}return t.length>0?`[${Ye(t,{str:`;`,start:0,end:1})}m${e.str}[0m`:e.str}function an(e){return{str:e,bg_color:void 0,color:void 0,formats:[]}}function on(e){return{str:e.str,bg_color:e.bg_color,color:1,formats:e.formats}}function sn(e){return{str:e.str,bg_color:e.bg_color,color:3,formats:e.formats}}function cn(e){return{str:e.str,bg_color:e.bg_color,color:4,formats:e.formats}}function ln(e){let t=e.str,n=e.bg_color,r=e.color,i=[];return bt(i,0),Je(i,Et(e.formats)),{str:t,bg_color:n,color:r,formats:i}}function un(e,t){let n=`${rn(on(ln(an(`Panic: `))))}${rn(sn(an(e)))} at ${rn(cn(an(t)))}`;Yt(n),E(n)}function dn(e){let t=F(0),n=0;for(;n<e.length;){let r=n;p(e,r);let i=e.charCodeAt(r);if(i>=55296&&i<=56319&&(n+1|0)<e.length){let r=n+1|0;p(e,r);let a=e.charCodeAt(r);if(a>=56320&&a<=57343){let e=(65536+(i-55296<<10)|0)+(a-56320|0)|0;I(t,(240|e>>18)&255),I(t,(128|e>>12&63)&255),I(t,(128|e>>6&63)&255),I(t,(128|e&63)&255),n=n+1|0}else I(t,(224|i>>12)&255),I(t,(128|i>>6&63)&255),I(t,(128|i&63)&255)}else i<128?I(t,i&255):i<2048?(I(t,(192|i>>6)&255),I(t,(128|i&63)&255)):(I(t,(224|i>>12)&255),I(t,(128|i>>6&63)&255),I(t,(128|i&63)&255));n=n+1|0}return A({buf:t,start:0,end:t.length})}function fn(e){return{bytes:dn(e)}}function pn(e){let t=0;for(;t<(e.end-e.start|0);){let n=D(e,t);if(!(n&128))t=t+1|0;else if((n&224)==192){if((t+1|0)>=(e.end-e.start|0)||(D(e,t+1|0)&192)!=128)return!1;t=t+2|0}else if((n&240)==224){if((t+2|0)>=(e.end-e.start|0))return!1;let n=D(e,t+1|0),r=D(e,t+2|0),i;if(i=(n&192)==128?(r&192)!=128:!0,i)return!1;t=t+3|0}else if((n&248)==240){if((t+3|0)>=(e.end-e.start|0))return!1;let n=D(e,t+1|0),r=D(e,t+2|0),i=D(e,t+3|0),a;if((n&192)!=128)a=!0;else{let e;e=(r&192)==128?(i&192)!=128:!0,a=e}if(a)return!1;t=t+4|0}else return!1}return!0}function mn(e){if(pn(k(e,0,void 0)))return{bytes:st(at(e))}}function hn(e){let t=0,n=``;for(;t<e.length;){let r=t;p(e,r);let i=e[r],a;if(!(i&128))a=i;else if((i&224)==192){if((t+1|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n];if((r&192)!=128)return;t=t+1|0,a=(i&31)<<6|r&63}else if((i&240)==224){if((t+2|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n],o=t+2|0;p(e,o);let s=e[o],c;if(c=(r&192)==128?(s&192)!=128:!0,c)return;t=t+2|0,a=(i&15)<<12|(r&63)<<6|s&63}else if((i&248)==240){if((t+3|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n],o=t+2|0;p(e,o);let s=e[o],c=t+3|0;p(e,c);let l=e[c],u;if((r&192)!=128)u=!0;else{let e;e=(s&192)==128?(l&192)!=128:!0,u=e}if(u)return;t=t+3|0,a=(i&7)<<18|(r&63)<<12|(s&63)<<6|l&63}else return;n=`${n}${xt(a)}`,t=t+1|0}return n}function gn(e){let t=hn(e.bytes);return t===void 0?d():t}function _n(e){return Gt(e)}function vn(e){return Wt(e)}function yn(e){let t=F(0);return I(t,R(z(U(e,56),g))),I(t,R(z(U(e,48),g))),I(t,R(z(U(e,40),g))),I(t,R(z(U(e,32),g))),I(t,R(z(U(e,24),g))),I(t,R(z(U(e,16),g))),I(t,R(z(U(e,8),g))),I(t,R(z(e,g))),A({buf:t,start:0,end:t.length})}function bn(e){e.length!==8&&un(`Invalid byte array length`,`/Users/zxch3n/Code/flock/moon/memcomparable/utils.mbt:28:5-28:54`);let t=_,n=t;p(e,0),t=B(n,H(j(e[0]),56));let r=t;p(e,1),t=B(r,H(j(e[1]),48));let i=t;p(e,2),t=B(i,H(j(e[2]),40));let a=t;p(e,3),t=B(a,H(j(e[3]),32));let o=t;p(e,4),t=B(o,H(j(e[4]),24));let s=t;p(e,5),t=B(s,H(j(e[5]),16));let c=t;p(e,6),t=B(c,H(j(e[6]),8));let l=t;return p(e,7),t=B(l,j(e[7])),t}function xn(){return{parts:_t(0)}}function q(e,t){vt(e.parts,t)}function Sn(e){return e===e?e:e<0?-Ve:Ve}function Cn(e,t){W(t,1);let n=ot(e);for(;;){let e=wt(n);if(e===-1)break;{let n=e;W(t,n),n===0&&W(t,255);continue}}W(t,0)}function wn(e,t){W(t,2);let n=e.bytes,r=n.length,i=0;for(;;){let e=i;if(e<r){let r=n[e];W(t,r),r===0&&W(t,255),i=e+1|0;continue}else break}W(t,0)}function Tn(e,t){W(t,33);let n=Sn(e),r=yn(n<0?V(_n(n),Ce):V(_n(n),we)),i=r.length,a=0;for(;;){let e=a;if(e<i){let n=r[e];W(t,n),a=e+1|0;continue}else return}}function En(e){let t=[],n=e;for(;ft(n,0n);)I(t,de(nt(n,256n))&255),n=tt(n,256n);let r=Qt(t);return A({buf:r,start:0,end:r.length})}function Dn(e,t){if(Ze(e,0n)){W(t,20);return}let n=ft(e,0n),r=En(n?e:Qe(e)),i=r.length;if(n===!1){i<=8?W(t,(20-(i&255)|0)&255):(W(t,11),i>255&&E(`n is too large`),W(t,(i&255^255)&255));let e=K(0),n=0;for(;;){let t=n;if(t<r.length){p(r,t);let i=r[t];W(e,(i^255)&255),n=t+1|0;continue}else break}en(t,G(e));return}else{i<=8?W(t,(20+(i&255)|0)&255):(W(t,29),i>255&&E(`n is too large`),W(t,i&255)),en(t,r);return}}function On(e,t){switch(e.$tag){case 0:{let n=e._0;Cn(O(n,0,n.length),t);return}case 1:{let n=e._0;wn(n,t);return}case 2:{let n=e._0;Dn(n,t);return}case 3:{let n=e._0;Tn(n,t);return}case 4:W(t,38);return;default:W(t,39);return}}function kn(e){let t=K(0),n=e.parts,r=n.length,i=0;for(;;){let e=i;if(e<r){let r=n[e];On(r,t),i=e+1|0;continue}else break}return G(t)}function An(e,t){let n=K(0),r=t;for(;r<(e.end-e.start|0);){let t=D(e,r);if(r=r+1|0,t===0){let t;if(t=r<(e.end-e.start|0)?D(e,r)===255:!1,t){W(n,0),r=r+1|0;continue}else{let e=G(n);return new Ee({_0:O(e,0,e.length),_1:r})}}W(n,t)}return new Te(y)}function J(e){let t=f(_),n=f(Oe),r=(e.end-e.start|0)-1|0;for(;;){let i=r;if(i>=0){let a=f(Nt(D(e,i)));t=$e(t,et(n,a)),n=et(n,f(ke)),r=i-1|0;continue}else break}return t}function jn(e,t){let n;if(n=20<=t?t<=28:!1,n){let n=(t-20|0)&255;if((e.end-e.start|0)<n)return new b(y);let r=k(e,0,n);return new x({_0:k(e,n,void 0),_1:J(r)})}else{let n;if(n=12<=t?t<20:!1,n){let n=(20-t|0)&255;if((e.end-e.start|0)<n)return new b(y);let r=k(e,0,n),i=k(e,n,void 0),a=K(0),o=0;for(;;){let e=o;if(e<(r.end-r.start|0)){W(a,(D(r,e)^255)&255),o=e+1|0;continue}else break}let s=G(a);return new x({_0:i,_1:Qe(J(O(s,0,s.length)))})}else if(t===11){if((e.end-e.start|0)<1)return new b(y);let t=(D(e,0)^255)&255;if((e.end-e.start|0)<(t+1|0))return new b(y);let n=k(e,1,t+1|0),r=k(e,t+1|0,void 0),i=K(0),a=0;for(;;){let e=a;if(e<(n.end-n.start|0)){W(i,(D(n,e)^255)&255),a=e+1|0;continue}else break}let o=G(i);return new x({_0:r,_1:Qe(J(O(o,0,o.length)))})}else if(t===29){if((e.end-e.start|0)<1)return new b(y);let t=D(e,0);if((e.end-e.start|0)<(t+1|0))return new b(y);let n=k(e,1,t+1|0);return new x({_0:k(e,t+1|0,void 0),_1:J(n)})}else return new b(new v(t))}}function Mn(e,t){if((t+8|0)>(e.end-e.start|0))return new Ae(y);let n=F(0),r=0;for(;;){let i=r;if(i<8){I(n,D(e,t+i|0)),r=i+1|0;continue}else break}let i=bn(A({buf:n,start:0,end:n.length}));return new je({_0:Kt(z(i,we),_)?vn(V(i,Ce)):vn(V(i,we)),_1:t+8|0})}function Nn(e){let t=xn(),n=0;for(;n<(e.end-e.start|0);){let r=D(e,n);if(n=n+1|0,r===2){let r=An(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1,s=mn(a);if(s===void 0)return new Pe(De);q(t,new C(s)),n=o}else if(r===1){let r=An(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1;q(t,new S(st(at(a)))),n=o}else if(r>=11&&r<=29){let i=jn(k(e,n,void 0),r),a;if(i.$tag===1)a=i._0;else return i;let o=a._0,s=a._1;q(t,new w(s)),n=(e.end-e.start|0)-(o.end-o.start|0)|0}else if(r===33){let r=Mn(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1;q(t,new T(a)),n=o}else if(r===38)q(t,Me);else if(r===39)q(t,Ne);else return new Pe(new v(r))}return new Fe(t)}function Pn(e){switch(e.$tag){case 0:{let t=e._0;return new Re(t)}case 1:{let t=e._0;return new Le(gn(t))}case 2:{let t=e._0;return new Ie(Ut(it(t)))}case 3:{let t=e._0;return new Ie(t)}case 4:return Be;default:return ze}}function Fn(e){switch(e.$tag){case 2:{let t=e._0;return new S(t)}case 1:{let t=e._0;return new C(fn(t))}case 0:{let t=e._0;return Ut(qt(t))===t?new w(f(qt(t))):new T(t)}case 3:return Ne;default:return Me}}function In(e){let t=xn(),n=e.length,r=0;for(;;){let i=r;if(i<n){let n=e[i];vt(t.parts,Fn(n)),r=i+1|0;continue}else break}return kn(t)}function Ln(e){let t;_L:{_L$2:{let n=Nn(O(e,0,e.length));if(n.$tag===1)t=n._0;else{n._0;break _L$2}break _L}t=He(`Failed to decode key`)}let n=gt(0),r=t.parts,i=r.length,a=0;for(;;){let e=a;if(e<i){let t=r[e];yt(n,Pn(t)),a=e+1|0;continue}else break}return n}function Rn(e){if(typeof e==`number`){if(!Number.isFinite(e))throw TypeError(`Key parts must be finite numbers`);return{$tag:0,_0:e}}if(typeof e==`string`)return{$tag:1,_0:e};if(e===!0)return{$tag:3};if(e===!1)return{$tag:4};throw TypeError(`Key parts must be strings, numbers, or booleans`)}function zn(e){if(e instanceof Uint8Array)return e;if(e&&typeof e==`object`){let t=e.buf;if(t instanceof Uint8Array){let n=e.start??0,r=e.end??t.length;return t.subarray(n,r)}}throw TypeError(`Invalid bytes payload in memcomparable decode`)}function Bn(e){switch(e?.$tag){case 0:return e._0;case 1:return e._0;case 3:return!0;case 4:return!1;case 2:return zn(e._0);default:throw TypeError(`Unsupported memcomparable key part`)}}function Y(e){return In(e.map(Rn))}function Vn(e){return Ln(e).map(e=>Bn(e))}function Hn(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r+=1)if(e[r]!==t[r])return e[r]<t[r]?-1:1;return e.length===t.length?0:e.length<t.length?-1:1}function Un(e){if(e.length===0)return;let t=Array.from(e);for(let e=t.length-1;e>=0;--e){let n=t[e];if(n<255)return t[e]=n+1,new Uint8Array(t.slice(0,e+1))}}function Wn(e){return JSON.stringify(e)}const Gn=new TextEncoder,Kn=globalThis.structuredClone;function qn(e){return Gn.encode(e).length}function Jn(e){return typeof e==`string`&&qn(e)<128}function Yn(){let e=new Uint8Array(32),t=typeof crypto<`u`?crypto:void 0;if(t?.getRandomValues)t.getRandomValues(e);else if(t?.randomBytes){let n=t.randomBytes(32);e.set(n)}else for(let t=0;t<32;t+=1)e[t]=Math.floor(Math.random()*256);return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function Xn(e){if(e===void 0)return Yn();if(!Jn(e))throw TypeError(`peerId must be a UTF-8 string under 128 bytes`);return e}function X(e){return e===void 0?e:Kn?Kn(e):JSON.parse(JSON.stringify(e))}function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return X(e)}function Zn(e,t){if(!(!t||typeof t!=`object`)){if(`data`in t){let n=t.data;e.data=n===void 0?void 0:X(n)}`metadata`in t&&(e.metadata=Z(t.metadata))}}function Q(e){let t={};return Zn(t,e),t}function Qn(e,t){let n=Q(e);return Zn(n,t),n}function $(e,t){let n={c:ar(e)};t.data!==void 0&&(n.d=X(t.data));let r=Z(t.metadata);return r!==void 0&&(n.m=r),n}function $n(e){return!e||typeof e!=`object`?{accept:!0}:`accept`in e?e.accept?{accept:!0}:{accept:!1,reason:e.reason??`rejected`}:{accept:!0}}function er(e){return typeof e==`object`&&!!e&&(Object.prototype.hasOwnProperty.call(e,`hooks`)||Object.prototype.hasOwnProperty.call(e,`from`)||Object.prototype.hasOwnProperty.call(e,`pruneTombstonesBefore`)||Object.prototype.hasOwnProperty.call(e,`peerId`))}function tr(e){return typeof e==`object`&&!!e&&Object.prototype.hasOwnProperty.call(e,`bundle`)}function nr(e){if(e)try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}}function rr(e){if(e!=null)return JSON.parse(e)}function ir(e){let t=e.split(`,`);if(t.length<3)return{physicalTime:0,logicalCounter:0,peerId:``};let n=Number(t[0]),r=Number(t[1]),i=t.slice(2).join(`,`);return{physicalTime:Number.isFinite(n)?n:0,logicalCounter:Number.isFinite(r)?Math.trunc(r):0,peerId:Jn(i)?i:``}}function ar(e){return`${e.physicalTime},${e.logicalCounter},${e.peerId}`}function or(e,t){return e.physicalTime===t.physicalTime?e.logicalCounter===t.logicalCounter?e.peerId===t.peerId?0:e.peerId>t.peerId?1:-1:e.logicalCounter>t.logicalCounter?1:-1:e.physicalTime>t.physicalTime?1:-1}function sr(e){if(!e)return;let{physicalTime:t,logicalCounter:n}=e;if(!(!Number.isFinite(t)||!Number.isFinite(n)))return{physicalTime:t,logicalCounter:Math.trunc(n)}}function cr(e,t){if(t.length===0)return!0;if(e.length<t.length)return!1;for(let n=0;n<t.length;n+=1)if(e[n]!==t[n])return!1;return!0}async function lr(e){return e.map(e=>({key:e.key,data:e.data,metadata:e.metadata,physical:e.physical,logical:e.logical,peer:e.peer}))}function ur(e){if(!e)return``;if(typeof e!=`string`)throw TypeError(`tablePrefix must be a string`);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))throw TypeError(`tablePrefix must start with a letter/underscore and use only letters, digits, or underscores`);return e}function dr(e){return{kv:`${e}kv`,overridden:`${e}overridden`,meta:`${e}meta`,idxKvPeerClock:`${e}idx_kv_peer_clock_key`,idxOverriddenKey:`${e}idx_overridden_key`,idxOverriddenSupersededAt:`${e}idx_overridden_superseded_at`}}var fr=class t{db;peerIdValue;vv;maxHlc;listeners;tables;constructor(e,t,n,r,i){this.db=e,this.peerIdValue=t,this.vv=n,this.maxHlc=r,this.listeners=new Set,this.tables=i}static async open(n){let r=n.connection??await e({path:n.path}),i=dr(ur(n.tablePrefix));await t.ensureSchema(r,i);let a=await t.resolvePeerId(r,i,n.peerId),{vv:o,maxHlc:s}=await t.loadVersionState(r,i);return new t(r,a,o,s,i)}static async fromJson(e){let n=await t.open(e);return await n.importJson(e.bundle),n}async close(){await this.db.close()}static async ensureSchema(e,t){await e.exec(`
1
+ import{openStore as e}from"@loro-dev/unisqlite";const t=new TextEncoder;function n(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function r(e){let t=BigInt(e),n=[];do{let e=Number(t&127n);t>>=7n,t!==0n&&(e|=128),n.push(e)}while(t!==0n);return new Uint8Array(n)}function i(e){let t=BigInt(e),n=[],r=!0;for(;r;){let e=Number(t&127n);t>>=7n;let i=(e&64)!=0;t===0n&&!i||t===-1n&&i?r=!1:e|=128,n.push(e)}return new Uint8Array(n)}async function a(e){let t=typeof crypto<`u`?crypto:void 0;if(t?.subtle){let n=new ArrayBuffer(e.byteLength);new Uint8Array(n).set(e);let r=await t.subtle.digest(`SHA-256`,n);return new Uint8Array(r)}try{let{createHash:t}=await import(`crypto`),n=t(`sha256`);return n.update(e),new Uint8Array(n.digest())}catch{throw Error(`No crypto implementation available for digest`)}}var o=class{chunks=[];writeTag(e){this.chunks.push(e&255)}writeBool(e){this.chunks.push(e?1:0)}writeBytes(e){this.writeLen(e.length);for(let t=0;t<e.length;t+=1)this.chunks.push(e[t])}writeRawBytes(e){for(let t=0;t<e.length;t+=1)this.chunks.push(e[t])}writeLen(e){this.writeRawBytes(r(e))}writeI64(e){this.writeRawBytes(i(e))}writeF64(e){let t=new DataView(new ArrayBuffer(8));t.setFloat64(0,e,!1);let n=new Uint8Array(t.buffer);this.writeRawBytes(n)}writeString(e){this.writeBytes(t.encode(e))}writeJson(e){if(e===null){this.writeTag(32);return}if(typeof e==`boolean`){this.writeTag(33),this.writeBool(e);return}if(typeof e==`number`){this.writeTag(34),this.writeF64(e);return}if(typeof e==`string`){this.writeTag(35),this.writeString(e);return}if(Array.isArray(e)){this.writeTag(36),this.writeLen(e.length);for(let t of e)this.writeJson(t);return}if(e&&typeof e==`object`){let t=Object.entries(e).sort(([e],[t])=>e<t?-1:e>t?1:0);this.writeTag(37),this.writeLen(t.length);for(let[e,n]of t)this.writeString(e),this.writeJson(n);return}throw TypeError(`Unsupported JSON value in digest`)}writeRawValue(e){if(this.writeTag(16),e.data===void 0?this.writeBool(!1):(this.writeBool(!0),this.writeJson(e.data)),this.writeTag(18),!e.metadata||typeof e.metadata!=`object`)this.writeBool(!1);else{let t=Object.entries(e.metadata).sort(([e],[t])=>e<t?-1:e>t?1:0);this.writeBool(!0),this.writeLen(t.length);for(let[e,n]of t)this.writeString(e),this.writeJson(n)}this.writeTag(17),this.writeF64(e.clock.physicalTime),this.writeI64(Math.trunc(e.clock.logicalCounter)),this.writeBytes(t.encode(e.clock.peerId))}async finish(){return a(new Uint8Array(this.chunks))}};function s(e){if(e)try{let t=JSON.parse(e);return!t||typeof t!=`object`||Array.isArray(t)?void 0:t}catch{return}}function c(e){if(e!=null)return JSON.parse(e)}async function l(e){let t=c(e.data);if(t===void 0)return null;let n=s(e.metadata),r=new o;return r.writeBytes(e.key),r.writeRawValue({data:t,metadata:n,clock:{physicalTime:Number(e.physical),logicalCounter:Number(e.logical),peerId:String(e.peer)}}),r.finish()}async function u(e){let t=new Uint8Array(32);for(let n of e){let e=await l(n);if(e)for(let n=0;n<t.length;n+=1)t[n]^=e[n]}return n(t)}const ee={hi:2146959360,lo:1};var te=class extends Error{};function d(){throw new te}const ne=(e,t)=>e<t?-1:e>t?1:0,re=(e,t)=>e===t,f=e=>BigInt(e.hi)*4294967296n+BigInt(e.lo>>>0),ie=e=>-e,ae=(e,t)=>e+t,oe=(e,t)=>e*t,se=(e,t)=>e/t,ce=(e,t)=>e%t,le=(e,t)=>e>>BigInt(t),ue=e=>Number(BigInt.asUintN(32,e))|0,de=e=>Number(BigInt.asIntN(32,e));function p(e,t){if(t<0||t>=e.length)throw Error(`Index out of bounds`)}const fe=(e,t)=>e.toString(t);function pe(e,t){let n=new Uint8Array(e);return t!==0&&n.fill(t),n}const m=(e,t)=>{e.push(t)},me={$tag:0};function he(e){this._0=e}he.prototype.$tag=1;function ge(e){this._0=e}ge.prototype.$tag=2;function _e(e){this._0=e}_e.prototype.$tag=3;function ve(e){this._0=e}ve.prototype.$tag=4;const ye=function e(t){let n=e._view;return n===void 0&&(n=e._view=new DataView(new ArrayBuffer(8))),n.setUint32(0,t.hi),n.setUint32(4,t.lo),n.getFloat64(0)},be=function e(t){let n=e._view;return n===void 0&&(n=e._view=new DataView(new ArrayBuffer(8))),n.setFloat64(0,t),{hi:n.getInt32(0),lo:n.getInt32(4)}},xe=e=>e.hi*4294967296+(e.lo>>>0),Se=e=>{if(isNaN(e))return{hi:0,lo:0};if(e>=0x8000000000000000)return{hi:2147483647,lo:4294967295};if(e<=-0x8000000000000000)return{hi:-2147483648,lo:0};let t=!1;e<0&&(t=!0,e=-e);let n=1/4294967296*e|0,r=e>>>0;return t&&(r===0?n=~n+1:(n=~n,r=~r+1)),{hi:n,lo:r}},Ce=new Uint8Array,h={hi:0,lo:255},we={hi:0,lo:0},Te={hi:-1,lo:-1},g={hi:-2147483648,lo:0};function Ee(e){this._0=e}Ee.prototype.$tag=0;function De(e){this._0=e}De.prototype.$tag=1;function Oe(e){this._0=e}Oe.prototype.$tag=2;const _={$tag:1},ke={$tag:0},Ae={hi:0,lo:1},je={hi:0,lo:256};function v(e){this._0=e}v.prototype.$tag=0;function y(e){this._0=e}y.prototype.$tag=1;function Me(e){this._0=e}Me.prototype.$tag=0;function Ne(e){this._0=e}Ne.prototype.$tag=1;function Pe(e){this._0=e}Pe.prototype.$tag=0;function Fe(e){this._0=e}Fe.prototype.$tag=1;function Ie(e){this._0=e}Ie.prototype.$tag=2;function Le(e){this._0=e}Le.prototype.$tag=3;const Re={$tag:4},ze={$tag:5};function Be(e){this._0=e}Be.prototype.$tag=0;function Ve(e){this._0=e}Ve.prototype.$tag=1;function He(e){this._0=e}He.prototype.$tag=0;function Ue(e){this._0=e}Ue.prototype.$tag=1;function We(e){this._0=e}We.prototype.$tag=2;const Ge={$tag:3},Ke={$tag:4},qe=Rt(ee);function Je(e){return d()}function Ye(e){return d()}function Xe(e){return d()}function b(e){d()}function Ze(e){return d()}function Qe(e){return Lt(e)}function $e(e,t){if(e.end-e.start|0){let n=e.buf[e.start],r=e.buf,i=1+e.start|0,a={buf:r,start:i,end:e.end},o=E(n),s=o.end-o.start|0,c=a.end-a.start|0,l=0;for(;;){let e=l;if(e<c){let n=r[i+e|0],a=s,o=E(n);s=a+((o.end-o.start|0)+(t.end-t.start|0)|0)|0,l=e+1|0;continue}else break}s<<=1;let u=ht(s);if(O(u,o.str,o.start,o.end-o.start|0),bt(t.str,0,t.start,t.end)){let e=a.end-a.start|0,t=0;for(;;){let n=t;if(n<e){let e=r[i+n|0],a=E(e);O(u,a.str,a.start,a.end-a.start|0),t=n+1|0;continue}else break}}else{let e=a.end-a.start|0,n=0;for(;;){let a=n;if(a<e){let e=r[i+a|0],o=E(e);O(u,t.str,t.start,t.end-t.start|0),O(u,o.str,o.start,o.end-o.start|0),n=a+1|0;continue}else break}}return u.val}else return``}function et(e,t){t(t=>(Dt(e,t),1))}function tt(e,t){return $e({buf:e,start:0,end:e.length},t)}function nt(e,t){return ne(e,t)}function rt(e,t){return re(e,t)}function it(e){return ie(e)}function at(e,t){return ae(e,t)}function ot(e,t){return oe(e,t)}function st(e,t){return se(e,t)}function ct(e,t){return ce(e,t)}function lt(e,t){return t<0&&b(`negative shift count`),le(e,t)}function ut(e){let t=ue(lt(e,32)),n=ue(e);return qt(Jt(Qe(t),32),Qe(n))}function x(e,t){if(t>=0&&t<(e.end-e.start|0)){let n=e.bytes,r=e.start+t|0;return p(n,r),n[r]}else return Xe(`index out of bounds: the len is from 0 to ${D(e.end-e.start|0)} but the index is ${D(t)}`)}function S(e,t,n){let r=e.length,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{bytes:e,start:a,end:i}:Ye(`Invalid index for View`)}function C(e,t,n){let r=e.end-e.start|0,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{bytes:e.bytes,start:e.start+a|0,end:(e.start+a|0)+(i-a|0)|0}:Ye(`Invalid index for View`)}function dt(e){return t=>{let n=e.end-e.start|0,r=0;for(;;){let i=r;if(i<n){if(t(x(e,i))!==1)return 0;r=i+1|0;continue}else return 1}}}function ft(e){let t={val:0},n=e.end-e.start|0;return()=>{if(t.val<n){let n=t.val,r=e.bytes,i=e.start+n|0;p(r,i);let a=r[i];return t.val=t.val+1|0,a}else return-1}}function w(e){return tn(e.end-e.start|0,t=>an(e,t))}function pt(e){let t=At(e);return w({buf:t,start:0,end:t.length})}function T(e){return Lt(e)}function E(e){return{str:e,start:0,end:e.length}}function mt(e,t,n,r,i){if(e===n&&t<r){let a=0;for(;;){let o=a;if(o<i){let i=t+o|0,s=r+o|0;p(n,s),p(e,i),e[i]=n[s],a=o+1|0;continue}else return}}else{let a=i-1|0;for(;;){let i=a;if(i>=0){let o=t+i|0,s=r+i|0;p(n,s),p(e,o),e[o]=n[s],a=i-1|0;continue}else return}}}function ht(e){return{val:``}}function gt(e,t){let n=e;n.val=`${n.val}${String.fromCodePoint(t)}`}function _t(e,t){let n=e;n.val=`${n.val}${t}`}function vt(e,t){return nt(e,t)>0}function D(e){let t=ht(0);return Mt(e,{self:t,method_0:_t,method_1:O,method_2:gt}),t.val}function yt(e,t){return fe(e,t)}function bt(e,t,n,r){let i;i=r===void 0?e.length:r;let a=n,o=0;for(;;){let n=a,r=o;if(n<i&&r<t){let t=e.charCodeAt(n);if(55296<=t&&t<=56319&&(n+1|0)<i){let t=n+1|0,i=e.charCodeAt(t);if(56320<=i&&i<=57343){a=n+2|0,o=r+1|0;continue}else b(`invalid surrogate pair`)}a=n+1|0,o=r+1|0;continue}else return r===t&&n===i}}function xt(e,t,n){let r=e.length,i;return i=n===void 0?r:n,t>=0&&t<=i&&i<=r?e.substring(t,i):d()}function O(e,t,n,r){let i=e;i.val=`${i.val}${xt(t,n,n+r|0)}`}function St(e){return[]}function Ct(e){return[]}function wt(e){return[]}function Tt(e,t){m(e,t)}function Et(e,t){m(e,t)}function k(e,t){m(e,t)}function A(e,t){m(e,t)}function Dt(e,t){m(e,t)}function Ot(e){return String.fromCodePoint(e)}function kt(e,t){let n={val:me};e(e=>(t(e),1));let r=n.val;switch(r.$tag){case 0:return;case 1:r._0;return;case 2:return r._0;case 3:d();return;default:d();return}}function At(e){let t=[];return kt(e,e=>{k(t,e)}),t}function jt(e){return e()}function Mt(e,t){t.method_0(t.self,yt(e,10))}function Nt(e){return t=>{let n=e.length,r=0;for(;;){let i=r;if(i<n){let n=e[i];if(t(n)!==1)return 0;r=i+1|0;continue}else return 1}}}function Pt(e,t,n){let r=e.length,i;if(n===void 0)i=r;else{let e=n;i=e<0?r+e|0:e}let a=t<0?r+t|0:t;return a>=0&&a<=i&&i<=r?{buf:e,start:a,end:i}:Ze(`View index out of bounds`)}function Ft(e){return{hi:0,lo:e}}function It(e){return Ft(e)}function Lt(e){return It(e)}function Rt(e){return ye(e)}function zt(e){return{hi:e>>31&-1,lo:e|0}}function Bt(e){return zt(e)}function Vt(e){return e.lo}function j(e){return Vt(e)&255}function Ht(e,t){return{hi:e.hi&t.hi,lo:e.lo&t.lo}}function Ut(e,t){return{hi:e.hi|t.hi,lo:e.lo|t.lo}}function Wt(e,t){return{hi:e.hi^t.hi,lo:e.lo^t.lo}}function Gt(e,t){let n=t&63;if(n===0)return e;if(n<32){let t=e.hi,r=e.lo,i=t,a=r;return{hi:i<<n|a>>>(32-n|0)|0,lo:a<<n}}else return{hi:e.lo<<(n-32|0),lo:0}}function Kt(e,t){let n=t&63;return n===0?e:n<32?{hi:e.hi>>>n|0,lo:e.lo>>>n|e.hi<<(32-n|0)}:{hi:0,lo:e.hi>>>(n-32|0)|0}}function qt(e,t){return Ut(e,t)}function Jt(e,t){return Gt(e,t)}function Yt(e){return xe(e)}function Xt(e){return Yt(e)}function Zt(e){return ye(e)}function Qt(e){return be(e)}function $t(e,t){let n=e,r=t;return n.hi===r.hi&&n.lo===r.lo}function M(e,t){return Ht(e,t)}function N(e,t){return Ut(e,t)}function P(e,t){return Wt(e,t)}function F(e,t){return Gt(e,t)}function I(e,t){return Kt(e,t)}function en(e){return Se(e)}function tn(e,t){if(e<=0)return Ce;let n=pe(e,t(0)),r=1;for(;;){let i=r;if(i<e){p(n,i),n[i]=t(i),r=i+1|0;continue}else break}return n}function nn(e){console.log(e)}function rn(e,t,n,r,i){let a=(t+i|0)-1|0,o=(r+i|0)-1|0,s=e.length,c=n.length;if(i>=0&&t>=0&&a<s&&r>=0&&o<c){mt(e,t,n,r,i);return}else{d();return}}function an(e,t){if(t>=0&&t<(e.end-e.start|0)){let n=e.buf,r=e.start+t|0;return p(n,r),n[r]}else return Xe(`index out of bounds: the len is from 0 to ${D(e.end-e.start|0)} but the index is ${D(t)}`)}function on(e){let t=e.length,n=Array(t),r=0;for(;;){let i=r;if(i<t){n[i]=e[(t-i|0)-1|0],r=i+1|0;continue}else break}return n}function sn(e,t){let n=e.data.length<=0?1:e.data.length,r,i=n;for(;;){let e=i;if(e>=t){r=e;break}i=Math.imul(e,2)|0}if(r!==e.data.length){let t=pe(r,0);mt(t,0,e.data,0,e.len),e.data=t;return}else return}function L(e,t){sn(e,e.len+1|0);let n=e.data,r=e.len;p(n,r),n[r]=t,e.len=e.len+1|0}function R(e){return w(Pt(e.data,0,e.len))}function z(e){return{data:pe(e<1?1:e,0),len:0}}function cn(e,t){let n=t.length;sn(e,e.len+n|0),rn(e.data,e.len,t,0,n),e.len=e.len+n|0}function ln(e){switch(e){case 0:return`40`;case 1:return`41`;case 2:return`42`;case 3:return`43`;case 4:return`44`;case 5:return`45`;case 6:return`46`;case 7:return`47`;default:return`49`}}function un(e){switch(e){case 0:return`30`;case 1:return`31`;case 2:return`32`;case 3:return`33`;case 4:return`34`;case 5:return`35`;case 6:return`36`;case 7:return`37`;default:return`39`}}function dn(e){let t=[],n=e.color;n===void 0||A(t,un(n));let r=e.bg_color;r===void 0||A(t,ln(r));let i=e.formats,a=i.length,o=0;for(;;){let e=o;if(e<a){switch(i[e]){case 0:A(t,`1`);break;case 1:A(t,`4`);break;case 2:A(t,`5`);break;case 3:A(t,`7`);break;case 4:A(t,`8`);break;case 5:A(t,`9`);break;default:A(t,`3`)}o=e+1|0;continue}else break}return t.length>0?`[${tt(t,{str:`;`,start:0,end:1})}m${e.str}[0m`:e.str}function fn(e){return{str:e,bg_color:void 0,color:void 0,formats:[]}}function pn(e){return{str:e.str,bg_color:e.bg_color,color:1,formats:e.formats}}function mn(e){return{str:e.str,bg_color:e.bg_color,color:3,formats:e.formats}}function hn(e){return{str:e.str,bg_color:e.bg_color,color:4,formats:e.formats}}function gn(e){let t=e.str,n=e.bg_color,r=e.color,i=[];return Dt(i,0),et(i,Nt(e.formats)),{str:t,bg_color:n,color:r,formats:i}}function _n(e,t){let n=`${dn(pn(gn(fn(`Panic: `))))}${dn(mn(fn(e)))} at ${dn(hn(fn(t)))}`;nn(n),b(n)}function vn(e){let t=wt(0),n=0;for(;n<e.length;){let r=n;p(e,r);let i=e.charCodeAt(r);if(i>=55296&&i<=56319&&(n+1|0)<e.length){let r=n+1|0;p(e,r);let a=e.charCodeAt(r);if(a>=56320&&a<=57343){let e=(65536+(i-55296<<10)|0)+(a-56320|0)|0;k(t,(240|e>>18)&255),k(t,(128|e>>12&63)&255),k(t,(128|e>>6&63)&255),k(t,(128|e&63)&255),n=n+1|0}else k(t,(224|i>>12)&255),k(t,(128|i>>6&63)&255),k(t,(128|i&63)&255)}else i<128?k(t,i&255):i<2048?(k(t,(192|i>>6)&255),k(t,(128|i&63)&255)):(k(t,(224|i>>12)&255),k(t,(128|i>>6&63)&255),k(t,(128|i&63)&255));n=n+1|0}return w({buf:t,start:0,end:t.length})}function yn(e){return{bytes:vn(e)}}function bn(e){let t=0;for(;t<(e.end-e.start|0);){let n=x(e,t);if(!(n&128))t=t+1|0;else if((n&224)==192){if((t+1|0)>=(e.end-e.start|0)||(x(e,t+1|0)&192)!=128)return!1;t=t+2|0}else if((n&240)==224){if((t+2|0)>=(e.end-e.start|0))return!1;let n=x(e,t+1|0),r=x(e,t+2|0),i;if(i=(n&192)==128?(r&192)!=128:!0,i)return!1;t=t+3|0}else if((n&248)==240){if((t+3|0)>=(e.end-e.start|0))return!1;let n=x(e,t+1|0),r=x(e,t+2|0),i=x(e,t+3|0),a;if((n&192)!=128)a=!0;else{let e;e=(r&192)==128?(i&192)!=128:!0,a=e}if(a)return!1;t=t+4|0}else return!1}return!0}function xn(e){if(bn(C(e,0,void 0)))return{bytes:pt(dt(e))}}function Sn(e){let t=0,n=``;for(;t<e.length;){let r=t;p(e,r);let i=e[r],a;if(!(i&128))a=i;else if((i&224)==192){if((t+1|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n];if((r&192)!=128)return;t=t+1|0,a=(i&31)<<6|r&63}else if((i&240)==224){if((t+2|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n],o=t+2|0;p(e,o);let s=e[o],c;if(c=(r&192)==128?(s&192)!=128:!0,c)return;t=t+2|0,a=(i&15)<<12|(r&63)<<6|s&63}else if((i&248)==240){if((t+3|0)>=e.length)return;let n=t+1|0;p(e,n);let r=e[n],o=t+2|0;p(e,o);let s=e[o],c=t+3|0;p(e,c);let l=e[c],u;if((r&192)!=128)u=!0;else{let e;e=(s&192)==128?(l&192)!=128:!0,u=e}if(u)return;t=t+3|0,a=(i&7)<<18|(r&63)<<12|(s&63)<<6|l&63}else return;n=`${n}${Ot(a)}`,t=t+1|0}return n}function Cn(e){let t=Sn(e.bytes);return t===void 0?d():t}function wn(e){return Qt(e)}function Tn(e){return Zt(e)}function En(e){let t=wt(0);return k(t,j(M(I(e,56),h))),k(t,j(M(I(e,48),h))),k(t,j(M(I(e,40),h))),k(t,j(M(I(e,32),h))),k(t,j(M(I(e,24),h))),k(t,j(M(I(e,16),h))),k(t,j(M(I(e,8),h))),k(t,j(M(e,h))),w({buf:t,start:0,end:t.length})}function Dn(e){e.length!==8&&_n(`Invalid byte array length`,`/Users/zxch3n/Code/flock/moon/memcomparable/utils.mbt:28:5-28:54`);let t=we,n=t;p(e,0),t=N(n,F(T(e[0]),56));let r=t;p(e,1),t=N(r,F(T(e[1]),48));let i=t;p(e,2),t=N(i,F(T(e[2]),40));let a=t;p(e,3),t=N(a,F(T(e[3]),32));let o=t;p(e,4),t=N(o,F(T(e[4]),24));let s=t;p(e,5),t=N(s,F(T(e[5]),16));let c=t;p(e,6),t=N(c,F(T(e[6]),8));let l=t;return p(e,7),t=N(l,T(e[7])),t}function On(){return{parts:Ct(0)}}function B(e,t){Tt(e.parts,t)}function kn(e){return e===e?e:e<0?-qe:qe}function An(e,t){L(t,1);let n=ft(e);for(;;){let e=jt(n);if(e===-1)break;{let n=e;L(t,n),n===0&&L(t,255);continue}}L(t,0)}function jn(e,t){L(t,2);let n=e.bytes,r=n.length,i=0;for(;;){let e=i;if(e<r){let r=n[e];L(t,r),r===0&&L(t,255),i=e+1|0;continue}else break}L(t,0)}function Mn(e,t){L(t,33);let n=kn(e),r=En(n<0?P(wn(n),Te):P(wn(n),g)),i=r.length,a=0;for(;;){let e=a;if(e<i){let n=r[e];L(t,n),a=e+1|0;continue}else return}}function Nn(e){let t=[],n=e;for(;vt(n,0n);)k(t,de(ct(n,256n))&255),n=st(n,256n);let r=on(t);return w({buf:r,start:0,end:r.length})}function Pn(e,t){if(rt(e,0n)){L(t,20);return}let n=vt(e,0n),r=Nn(n?e:it(e)),i=r.length;if(n===!1){i<=8?L(t,(20-(i&255)|0)&255):(L(t,11),i>255&&b(`n is too large`),L(t,(i&255^255)&255));let e=z(0),n=0;for(;;){let t=n;if(t<r.length){p(r,t);let i=r[t];L(e,(i^255)&255),n=t+1|0;continue}else break}cn(t,R(e));return}else{i<=8?L(t,(20+(i&255)|0)&255):(L(t,29),i>255&&b(`n is too large`),L(t,i&255)),cn(t,r);return}}function Fn(e,t){switch(e.$tag){case 0:{let n=e._0;An(S(n,0,n.length),t);return}case 1:{let n=e._0;jn(n,t);return}case 2:{let n=e._0;Pn(n,t);return}case 3:{let n=e._0;Mn(n,t);return}case 4:L(t,38);return;default:L(t,39);return}}function In(e){let t=z(0),n=e.parts,r=n.length,i=0;for(;;){let e=i;if(e<r){let r=n[e];Fn(r,t),i=e+1|0;continue}else break}return R(t)}function Ln(e,t){let n=z(0),r=t;for(;r<(e.end-e.start|0);){let t=x(e,r);if(r=r+1|0,t===0){let t;if(t=r<(e.end-e.start|0)?x(e,r)===255:!1,t){L(n,0),r=r+1|0;continue}else{let e=R(n);return new De({_0:S(e,0,e.length),_1:r})}}L(n,t)}return new Ee(_)}function V(e){let t=f(we),n=f(Ae),r=(e.end-e.start|0)-1|0;for(;;){let i=r;if(i>=0){let a=f(Bt(x(e,i)));t=at(t,ot(n,a)),n=ot(n,f(je)),r=i-1|0;continue}else break}return t}function Rn(e,t){let n;if(n=20<=t?t<=28:!1,n){let n=(t-20|0)&255;if((e.end-e.start|0)<n)return new v(_);let r=C(e,0,n);return new y({_0:C(e,n,void 0),_1:V(r)})}else{let n;if(n=12<=t?t<20:!1,n){let n=(20-t|0)&255;if((e.end-e.start|0)<n)return new v(_);let r=C(e,0,n),i=C(e,n,void 0),a=z(0),o=0;for(;;){let e=o;if(e<(r.end-r.start|0)){L(a,(x(r,e)^255)&255),o=e+1|0;continue}else break}let s=R(a);return new y({_0:i,_1:it(V(S(s,0,s.length)))})}else if(t===11){if((e.end-e.start|0)<1)return new v(_);let t=(x(e,0)^255)&255;if((e.end-e.start|0)<(t+1|0))return new v(_);let n=C(e,1,t+1|0),r=C(e,t+1|0,void 0),i=z(0),a=0;for(;;){let e=a;if(e<(n.end-n.start|0)){L(i,(x(n,e)^255)&255),a=e+1|0;continue}else break}let o=R(i);return new y({_0:r,_1:it(V(S(o,0,o.length)))})}else if(t===29){if((e.end-e.start|0)<1)return new v(_);let t=x(e,0);if((e.end-e.start|0)<(t+1|0))return new v(_);let n=C(e,1,t+1|0);return new y({_0:C(e,t+1|0,void 0),_1:V(n)})}else return new v(new Oe(t))}}function zn(e,t){if((t+8|0)>(e.end-e.start|0))return new Me(_);let n=wt(0),r=0;for(;;){let i=r;if(i<8){k(n,x(e,t+i|0)),r=i+1|0;continue}else break}let i=Dn(w({buf:n,start:0,end:n.length}));return new Ne({_0:$t(M(i,g),we)?Tn(P(i,Te)):Tn(P(i,g)),_1:t+8|0})}function Bn(e){let t=On(),n=0;for(;n<(e.end-e.start|0);){let r=x(e,n);if(n=n+1|0,r===2){let r=Ln(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1,s=xn(a);if(s===void 0)return new Be(ke);B(t,new Fe(s)),n=o}else if(r===1){let r=Ln(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1;B(t,new Pe(pt(dt(a)))),n=o}else if(r>=11&&r<=29){let i=Rn(C(e,n,void 0),r),a;if(i.$tag===1)a=i._0;else return i;let o=a._0,s=a._1;B(t,new Ie(s)),n=(e.end-e.start|0)-(o.end-o.start|0)|0}else if(r===33){let r=zn(e,n),i;if(r.$tag===1)i=r._0;else return r;let a=i._0,o=i._1;B(t,new Le(a)),n=o}else if(r===38)B(t,Re);else if(r===39)B(t,ze);else return new Be(new Oe(r))}return new Ve(t)}function Vn(e){switch(e.$tag){case 0:{let t=e._0;return new We(t)}case 1:{let t=e._0;return new Ue(Cn(t))}case 2:{let t=e._0;return new He(Xt(ut(t)))}case 3:{let t=e._0;return new He(t)}case 4:return Ke;default:return Ge}}function Hn(e){switch(e.$tag){case 2:{let t=e._0;return new Pe(t)}case 1:{let t=e._0;return new Fe(yn(t))}case 0:{let t=e._0;return Xt(en(t))===t?new Ie(f(en(t))):new Le(t)}case 3:return ze;default:return Re}}function Un(e){let t=On(),n=e.length,r=0;for(;;){let i=r;if(i<n){let n=e[i];Tt(t.parts,Hn(n)),r=i+1|0;continue}else break}return In(t)}function Wn(e){let t;_L:{_L$2:{let n=Bn(S(e,0,e.length));if(n.$tag===1)t=n._0;else{n._0;break _L$2}break _L}t=Je(`Failed to decode key`)}let n=St(0),r=t.parts,i=r.length,a=0;for(;;){let e=a;if(e<i){let t=r[e];Et(n,Vn(t)),a=e+1|0;continue}else break}return n}function Gn(e){if(typeof e==`number`){if(!Number.isFinite(e))throw TypeError(`Key parts must be finite numbers`);return{$tag:0,_0:e}}if(typeof e==`string`)return{$tag:1,_0:e};if(e===!0)return{$tag:3};if(e===!1)return{$tag:4};throw TypeError(`Key parts must be strings, numbers, or booleans`)}function Kn(e){if(e instanceof Uint8Array)return e;if(e&&typeof e==`object`){let t=e.buf;if(t instanceof Uint8Array){let n=e.start??0,r=e.end??t.length;return t.subarray(n,r)}}throw TypeError(`Invalid bytes payload in memcomparable decode`)}function qn(e){switch(e?.$tag){case 0:return e._0;case 1:return e._0;case 3:return!0;case 4:return!1;case 2:return Kn(e._0);default:throw TypeError(`Unsupported memcomparable key part`)}}function H(e){return Un(e.map(Gn))}function Jn(e){return Wn(e).map(e=>qn(e))}function Yn(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r+=1)if(e[r]!==t[r])return e[r]<t[r]?-1:1;return e.length===t.length?0:e.length<t.length?-1:1}function Xn(e){if(e.length===0)return;let t=Array.from(e);for(let e=t.length-1;e>=0;--e){let n=t[e];if(n<255)return t[e]=n+1,new Uint8Array(t.slice(0,e+1))}}function Zn(e){return JSON.stringify(e)}const Qn=new TextEncoder,$n=new TextDecoder,er=globalThis.structuredClone;function tr(e){return Qn.encode(e).length}function U(e){return typeof e==`string`&&tr(e)<128}function nr(){let e=new Uint8Array(32),t=typeof crypto<`u`?crypto:void 0;if(t?.getRandomValues)t.getRandomValues(e);else if(t?.randomBytes){let n=t.randomBytes(32);e.set(n)}else for(let t=0;t<32;t+=1)e[t]=Math.floor(Math.random()*256);return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function rr(e){if(e===void 0)return nr();if(!U(e))throw TypeError(`peerId must be a UTF-8 string under 128 bytes`);return e}function W(e){return e===void 0?e:er?er(e):JSON.parse(JSON.stringify(e))}function G(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return W(e)}function ir(e){return G(e)??{}}function ar(e,t){if(!(!t||typeof t!=`object`)){if(`data`in t){let n=t.data;e.data=n===void 0?void 0:W(n)}`metadata`in t&&(e.metadata=G(t.metadata))}}function K(e){let t={};return ar(t,e),t}function q(e,t){let n=K(e);return ar(n,t),n}function or(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r]-t[r];if(n!==0)return n}return e.length-t.length}function sr(e){if(!e||typeof e!=`object`)return[];let t=[];for(let[n,r]of Object.entries(e)){if(!r||!U(n))continue;let{physicalTime:e,logicalCounter:i}=r;if(typeof e!=`number`||!Number.isFinite(e)||typeof i!=`number`||!Number.isFinite(i))continue;let a=Qn.encode(n);t.push({peer:n,peerBytes:a,timestamp:Math.trunc(e),counter:Math.max(0,Math.trunc(i))})}return t.sort((e,t)=>{if(e.timestamp!==t.timestamp)return e.timestamp-t.timestamp;let n=or(e.peerBytes,t.peerBytes);return n===0?e.counter-t.counter:n}),t}function J(e,t){if(!Number.isFinite(e)||e<0)throw TypeError(`leb128 values must be finite and non-negative`);let n=Math.trunc(e);if(n===0){t.push(0);return}for(;n>0;){let e=n%128;n=Math.floor(n/128),t.push(n>0?e|128:e)}}function cr(e,t){J(e.length,t);for(let n=0;n<e.length;n+=1)t.push(e[n])}const Y=new Uint8Array([86,69,86,69]);function lr(e){let t=sr(e),n=Array.from(Y);if(t.length===0)return Uint8Array.from(n);let r=0;for(let e=0;e<t.length;e+=1){let i=t[e];if(i.timestamp<0)throw TypeError(`timestamp must be non-negative`);if(e===0)J(i.timestamp,n),r=i.timestamp;else{let e=i.timestamp-r;if(e<0)throw TypeError(`version vector timestamps must be non-decreasing`);J(e,n),r=i.timestamp}J(i.counter,n),cr(i.peerBytes,n)}return Uint8Array.from(n)}function X(e,t){let n=0,r=1,i=0;for(;t+i<e.length;){let a=e[t+i];if(i+=1,n+=(a&127)*r,!(a&128))break;r*=128}return[n,i]}function ur(e,t){let[n,r]=X(e,t),i=t+r,a=i+n;if(a>e.length)throw TypeError(`varString length exceeds buffer`);let o=e.subarray(i,a);return[$n.decode(o),r+n]}function dr(e){return e.length>=4&&e[0]===Y[0]&&e[1]===Y[1]&&e[2]===Y[2]&&e[3]===Y[3]}function fr(e){let t=0,[n,r]=X(e,t);t+=r;let[i,a]=X(e,t);t+=a;let o={};for(let r=0;r<n;r+=1){let[n,r]=ur(e,t);if(t+=r,!U(n))throw TypeError(`invalid peer id in encoded version vector`);let[a,s]=X(e,t);t+=s;let[c,l]=X(e,t);t+=l,o[n]={physicalTime:i+a,logicalCounter:c}}return o}function pr(e){let t=4,n={};if(t===e.length)return n;let[r,i]=X(e,t);t+=i;let[a,o]=X(e,t);t+=o;let[s,c]=ur(e,t);if(t+=c,!U(s))throw TypeError(`invalid peer id in encoded version vector`);n[s]={physicalTime:r,logicalCounter:a};let l=r;for(;t<e.length;){let[r,i]=X(e,t);t+=i;let[a,o]=X(e,t);t+=o;let[s,c]=ur(e,t);if(t+=c,!U(s))throw TypeError(`invalid peer id in encoded version vector`);let u=l+r;if(u<l)throw TypeError(`version vector timestamps must be non-decreasing`);n[s]={physicalTime:u,logicalCounter:a},l=u}return n}function mr(e){return dr(e)?pr(e):fr(e)}function hr(e){return lr(e)}function gr(e){return mr(e)}function Z(e,t){let n={c:Sr(e)};t.data!==void 0&&(n.d=W(t.data));let r=G(t.metadata);return r!==void 0&&(n.m=r),n}function _r(e){return!e||typeof e!=`object`?{accept:!0}:`accept`in e?e.accept?{accept:!0}:{accept:!1,reason:e.reason??`rejected`}:{accept:!0}}function vr(e){return typeof e==`object`&&!!e&&(Object.prototype.hasOwnProperty.call(e,`hooks`)||Object.prototype.hasOwnProperty.call(e,`from`)||Object.prototype.hasOwnProperty.call(e,`pruneTombstonesBefore`)||Object.prototype.hasOwnProperty.call(e,`peerId`))}function yr(e){return typeof e==`object`&&!!e&&Object.prototype.hasOwnProperty.call(e,`bundle`)}function br(e){if(e)try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}}function Q(e){if(e!=null)return JSON.parse(e)}function $(e){let t=e.split(`,`);if(t.length<3)return{physicalTime:0,logicalCounter:0,peerId:``};let n=Number(t[0]),r=Number(t[1]),i=t.slice(2).join(`,`);return{physicalTime:Number.isFinite(n)?n:0,logicalCounter:Number.isFinite(r)?Math.trunc(r):0,peerId:U(i)?i:``}}function xr(e,t,n){if(!(typeof e!=`number`||typeof t!=`number`||typeof n!=`string`)&&U(n)&&!(!Number.isFinite(e)||!Number.isFinite(t)))return{physicalTime:e,logicalCounter:Math.trunc(t),peerId:n}}function Sr(e){return`${e.physicalTime},${e.logicalCounter},${e.peerId}`}function Cr(e,t){return e.physicalTime===t.physicalTime?e.logicalCounter===t.logicalCounter?e.peerId===t.peerId?0:e.peerId>t.peerId?1:-1:e.logicalCounter>t.logicalCounter?1:-1:e.physicalTime>t.physicalTime?1:-1}function wr(e){if(!e)return;let{physicalTime:t,logicalCounter:n}=e;if(!(!Number.isFinite(t)||!Number.isFinite(n)))return{physicalTime:t,logicalCounter:Math.trunc(n)}}function Tr(e,t){if(t.length===0)return!0;if(e.length<t.length)return!1;for(let n=0;n<t.length;n+=1)if(e[n]!==t[n])return!1;return!0}async function Er(e){return e.map(e=>({key:e.key,data:e.data,metadata:e.metadata,physical:e.physical,logical:e.logical,peer:e.peer}))}function Dr(e){if(!e)return``;if(typeof e!=`string`)throw TypeError(`tablePrefix must be a string`);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))throw TypeError(`tablePrefix must start with a letter/underscore and use only letters, digits, or underscores`);return e}function Or(e){return{kv:`${e}kv`,overridden:`${e}overridden`,meta:`${e}meta`,idxKvPeerClock:`${e}idx_kv_peer_clock_key`,idxOverriddenKey:`${e}idx_overridden_key`,idxOverriddenSupersededAt:`${e}idx_overridden_superseded_at`}}var kr=class t{db;peerIdValue;vv;maxHlc;listeners;tables;constructor(e,t,n,r,i){this.db=e,this.peerIdValue=t,this.vv=n,this.maxHlc=r,this.listeners=new Set,this.tables=i}static async open(n){let r=n.connection??await e({path:n.path}),i=Or(Dr(n.tablePrefix));await t.ensureSchema(r,i);let a=await t.resolvePeerId(r,i,n.peerId),{vv:o,maxHlc:s}=await t.loadVersionState(r,i);return new t(r,a,o,s,i)}static async fromJson(e){let n=await t.open(e);return await n.importJson(e.bundle),n}async close(){await this.db.close()}static async ensureSchema(e,t){await e.exec(`
2
2
  CREATE TABLE IF NOT EXISTS ${t.kv} (
3
3
  key BLOB PRIMARY KEY,
4
4
  data TEXT NULL,
@@ -16,12 +16,16 @@ import{openStore as e}from"@loro-dev/unisqlite";const t=new TextEncoder;function
16
16
  logical INTEGER NOT NULL,
17
17
  peer TEXT NOT NULL,
18
18
  superseded_at INTEGER DEFAULT (unixepoch())
19
- )`),await e.exec(`CREATE TABLE IF NOT EXISTS ${t.meta} (peer_id TEXT)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxKvPeerClock} ON ${t.kv}(peer, physical, logical, key)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxOverriddenKey} ON ${t.overridden}(key)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxOverriddenSupersededAt} ON ${t.overridden}(superseded_at)`)}static async resolvePeerId(e,t,n){let r=Xn(n),i=await e.query(`SELECT peer_id FROM ${t.meta} LIMIT 1`);if(i.length>0&&typeof i[0]?.peer_id==`string`){let a=i[0].peer_id;return n&&a!==r?(await e.run(`UPDATE ${t.meta} SET peer_id = ?`,[r]),r):Xn(a)}return await e.exec(`DELETE FROM ${t.meta}`),await e.run(`INSERT INTO ${t.meta}(peer_id) VALUES (?)`,[r]),r}static async loadVersionState(e,t){let n=new Map,r=await e.query(`SELECT peer, MAX(physical) AS physical, MAX(logical) AS logical FROM ${t.kv} GROUP BY peer`);for(let e of r){if(!e||typeof e.peer!=`string`)continue;let t=sr({physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0)});t&&n.set(e.peer,t)}let i=(await e.query(`SELECT physical, logical FROM ${t.kv} ORDER BY physical DESC, logical DESC LIMIT 1`))[0];return{vv:n,maxHlc:i&&Number.isFinite(i.physical)&&Number.isFinite(i.logical)?{physicalTime:Number(i.physical),logicalCounter:Number(i.logical)}:{physicalTime:0,logicalCounter:0}}}bumpVersion(e){let t=this.vv.get(e.peerId);(!t||or(e,{...t,peerId:e.peerId})>0)&&this.vv.set(e.peerId,{physicalTime:e.physicalTime,logicalCounter:e.logicalCounter}),(this.maxHlc.physicalTime<e.physicalTime||this.maxHlc.physicalTime===e.physicalTime&&this.maxHlc.logicalCounter<e.logicalCounter)&&(this.maxHlc={physicalTime:e.physicalTime,logicalCounter:e.logicalCounter})}allocateClock(e){let t=e??Date.now(),n=this.maxHlc.physicalTime,r=this.maxHlc.logicalCounter;return t>n?(n=t,r=0):r+=1,{physicalTime:n,logicalCounter:r,peerId:this.peerIdValue}}async applyOperation(e){let t=Y(e.key),n=e.clock??this.allocateClock(e.now),r=Qn(e.payload,{}),i=r.data===void 0?null:JSON.stringify(r.data),a=r.metadata===void 0?null:JSON.stringify(r.metadata),o=!1;if(await this.db.asyncTransaction(async r=>{let s=await r.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]);if(s.length>0){let o=s[0],c=or(n,{physicalTime:Number(o.physical??0),logicalCounter:Number(o.logical??0),peerId:String(o.peer??``)}),l=o.data??null,u=o.metadata??null;if(e.skipSameValue&&i===l&&a===u)return;if(c<0){await r.run(`INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,[t,i,a,n.physicalTime,n.logicalCounter,n.peerId]);return}if(c>0)await r.run(`INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,[t,o.data??null,o.metadata??null,o.physical??0,o.logical??0,o.peer??``]);else return}await r.run(`INSERT INTO ${this.tables.kv}(key, data, metadata, physical, logical, peer)
19
+ )`),await e.exec(`CREATE TABLE IF NOT EXISTS ${t.meta} (peer_id TEXT)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxKvPeerClock} ON ${t.kv}(peer, physical, logical, key)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxOverriddenKey} ON ${t.overridden}(key)`),await e.exec(`CREATE INDEX IF NOT EXISTS ${t.idxOverriddenSupersededAt} ON ${t.overridden}(superseded_at)`)}static async resolvePeerId(e,t,n){let r=rr(n),i=await e.query(`SELECT peer_id FROM ${t.meta} LIMIT 1`);if(i.length>0&&typeof i[0]?.peer_id==`string`){let a=i[0].peer_id;return n&&a!==r?(await e.run(`UPDATE ${t.meta} SET peer_id = ?`,[r]),r):rr(a)}return await e.exec(`DELETE FROM ${t.meta}`),await e.run(`INSERT INTO ${t.meta}(peer_id) VALUES (?)`,[r]),r}static async loadVersionState(e,t){let n=new Map,r=await e.query(`SELECT peer, MAX(physical) AS physical, MAX(logical) AS logical FROM ${t.kv} GROUP BY peer`);for(let e of r){if(!e||typeof e.peer!=`string`)continue;let t=wr({physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0)});t&&n.set(e.peer,t)}let i=(await e.query(`SELECT physical, logical FROM ${t.kv} ORDER BY physical DESC, logical DESC LIMIT 1`))[0];return{vv:n,maxHlc:i&&Number.isFinite(i.physical)&&Number.isFinite(i.logical)?{physicalTime:Number(i.physical),logicalCounter:Number(i.logical)}:{physicalTime:0,logicalCounter:0}}}bumpVersion(e){let t=this.vv.get(e.peerId);(!t||Cr(e,{...t,peerId:e.peerId})>0)&&this.vv.set(e.peerId,{physicalTime:e.physicalTime,logicalCounter:e.logicalCounter}),(this.maxHlc.physicalTime<e.physicalTime||this.maxHlc.physicalTime===e.physicalTime&&this.maxHlc.logicalCounter<e.logicalCounter)&&(this.maxHlc={physicalTime:e.physicalTime,logicalCounter:e.logicalCounter})}allocateClock(e){let t=e??Date.now(),n=this.maxHlc.physicalTime,r=this.maxHlc.logicalCounter;return t>n?(n=t,r=0):r+=1,{physicalTime:n,logicalCounter:r,peerId:this.peerIdValue}}async applyOperation(e){let t=H(e.key),n=q(e.payload,{}),r=n.data===void 0?null:JSON.stringify(n.data),i=n.metadata===void 0?null:JSON.stringify(n.metadata),a=!1,o;if(await this.db.asyncTransaction(async n=>{let s=await n.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]);if(s.length>0){let t=s[0],n=t.data??null,a=t.metadata??null;if(e.skipSameValue&&r===n&&i===a)return}else if(e.skipSameValue&&r===null&&i===null)return;let c=e.clock??this.allocateClock(e.now);if(o=c,s.length>0){let e=s[0],a=Cr(c,{physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0),peerId:String(e.peer??``)});if(a<0){await n.run(`INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,[t,r,i,c.physicalTime,c.logicalCounter,c.peerId]);return}if(a>0)await n.run(`INSERT INTO ${this.tables.overridden}(key, data, metadata, physical, logical, peer) VALUES (?, ?, ?, ?, ?, ?)`,[t,e.data??null,e.metadata??null,e.physical??0,e.logical??0,e.peer??``]);else return}await n.run(`INSERT INTO ${this.tables.kv}(key, data, metadata, physical, logical, peer)
20
20
  VALUES (?, ?, ?, ?, ?, ?)
21
21
  ON CONFLICT(key) DO UPDATE SET
22
22
  data=excluded.data,
23
23
  metadata=excluded.metadata,
24
24
  physical=excluded.physical,
25
25
  logical=excluded.logical,
26
- peer=excluded.peer`,[t,i,a,n.physicalTime,n.logicalCounter,n.peerId]),o=!0}),this.bumpVersion(n),o){let t={key:e.key.slice(),payload:r,source:e.source};e.eventSink?e.eventSink.push(t):this.emitEvents(e.source,[t])}return o}emitEvents(e,t){if(this.listeners.size===0||t.length===0)return;let n={source:e,events:t.map(e=>({key:X(e.key),value:e.payload.data===void 0?void 0:X(e.payload.data),metadata:Z(e.payload.metadata),payload:Q(e.payload)}))};this.listeners.forEach(e=>{e(n)})}async put(e,t,n){await this.applyOperation({key:e,payload:{data:X(t)},now:n,skipSameValue:!0,source:`local`})}async putWithMeta(e,t,n={}){let r={data:X(t)};n.metadata&&(r.metadata=Z(n.metadata));let i=n.hooks?.transform;if(i){let t=Q(r),a=Qn(r,await i({key:e.slice(),now:n.now},t)??t);if(a.data===void 0)throw TypeError(`putWithMeta requires a data value`);await this.applyOperation({key:e,payload:a,now:n.now,skipSameValue:!0,source:`local`});return}await this.applyOperation({key:e,payload:r,now:n.now,skipSameValue:!0,source:`local`})}async delete(e,t){await this.applyOperation({key:e,payload:{},now:t,skipSameValue:!0,source:`local`})}async set(e,t,n){await this.put(e,t,n)}async setPeerId(e){let t=Xn(e);await this.db.exec(`DELETE FROM ${this.tables.meta}`),await this.db.run(`INSERT INTO ${this.tables.meta}(peer_id) VALUES (?)`,[t]),this.peerIdValue=t}async get(e){let t=Y(e),n=(await this.db.query(`SELECT data FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]))[0];if(n)return rr(n.data)}async getMvr(e){let t=await this.scan({prefix:e}),n=[];for(let r of t)r.raw.d===!0&&r.key.length===e.length+1&&n.push(r.key[r.key.length-1]);return n}async putMvr(e,t,n){if(t===null||typeof t==`object`)throw TypeError(`putMvr only accepts scalar values`);let r=await this.scan({prefix:e});for(let e of r)e.raw.d===!0&&await this.delete(e.key,n);let i=e.slice();i.push(t),await this.put(i,!0,n)}buildScanBounds(e){let t,n,r,i=e=>{if(!t){t=e;return}let n=Hn(e.value,t.value);n>0?t=e:n===0&&(t={value:t.value,inclusive:t.inclusive&&e.inclusive})},a=e=>{if(!n){n=e;return}let t=Hn(e.value,n.value);t<0?n=e:t===0&&(n={value:n.value,inclusive:n.inclusive&&e.inclusive})};try{if(e.prefix){let t=Y(e.prefix);r=t,i({value:t,inclusive:!0});let n=Un(t);n&&a({value:n,inclusive:!1})}e.start&&e.start.kind!==`unbounded`&&i({value:Y(e.start.key),inclusive:e.start.kind===`inclusive`}),e.end&&e.end.kind!==`unbounded`&&a({value:Y(e.end.key),inclusive:e.end.kind===`inclusive`})}catch{return{where:[],params:[],empty:!0}}let o=[],s=[];return t&&(o.push(`key ${t.inclusive?`>=`:`>`} ?`),s.push(t.value)),n&&(o.push(`key ${n.inclusive?`<=`:`<`} ?`),s.push(n.value)),{where:o,params:s,postFilter:r?(e=>t=>cr(t,e))(r):void 0}}async scan(e={}){let t=this.buildScanBounds(e);if(t.empty)return[];let n=t.where.length>0?`WHERE ${t.where.join(` AND `)}`:``,r=await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${n} ORDER BY key ASC`,t.params),i=[];for(let e of r){let n=e.key;if(t.postFilter&&!t.postFilter(n))continue;let r=Vn(n),a={physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0),peerId:String(e.peer??``)},o={},s=rr(e.data);s!==void 0&&(o.data=s);let c=nr(e.metadata);c!==void 0&&(o.metadata=c);let l=$(a,o);i.push({key:r,raw:l,value:o.data})}return i}version(){let e={};for(let[t,n]of this.vv.entries())e[t]={...n};return e}peerId(){return this.peerIdValue}getMaxPhysicalTime(){return this.maxHlc.physicalTime}async exportInternal(e,t,n){let r=new Map;if(e)for(let[t,n]of Object.entries(e)){let e=sr(n);e&&r.set(t,e)}let i={},a=n?[n]:Array.from(this.vv.keys()),o=[];for(let e of a){let t=this.vv.get(e),n=r.get(e);t&&n&&(t.physicalTime<n.physicalTime||t.physicalTime===n.physicalTime&&t.logicalCounter<=n.logicalCounter)||o.push({peer:e,fromEntry:n})}if(n&&o.every(e=>e.peer!==n)&&o.push({peer:n,fromEntry:r.get(n)}),o.length===0)return{version:0,entries:i};for(let e of o){let n=[e.peer],r=`WHERE peer = ?`;e.fromEntry&&(r+=` AND physical >= ?`,n.push(e.fromEntry.physicalTime));let a=await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${r} ORDER BY physical, logical, key`,n);for(let n of a){let r={physicalTime:Number(n.physical??0),logicalCounter:Number(n.logical??0),peerId:String(n.peer??``)},a=e.fromEntry;if(a&&(r.physicalTime<a.physicalTime||r.physicalTime===a.physicalTime&&r.logicalCounter<=a.logicalCounter)||t!==void 0&&Number.isFinite(t)&&n.data===null&&r.physicalTime<t)continue;let o={},s=rr(n.data);s!==void 0&&(o.data=s);let c=nr(n.metadata);c!==void 0&&(o.metadata=c);let l=Vn(n.key);i[Wn(l)]=$(r,o)}}return{version:0,entries:i}}async exportWithHooks(e){let t=await this.exportInternal(e.from,e.pruneTombstonesBefore,e.peerId),n=e.hooks?.transform;if(!n)return t;let r={version:t.version,entries:{}};for(let[e,i]of Object.entries(t.entries)){let t=ir(i.c),a={key:JSON.parse(e),clock:t,raw:{...i}},o={};i.d!==void 0&&(o.data=X(i.d));let s=Z(i.m);s!==void 0&&(o.metadata=s);let c=Q(o),l=Qn(o,await n(a,c)??c);r.entries[e]=$(t,l)}return r}exportJson(e,t){return er(e)?this.exportWithHooks(e):this.exportInternal(e,t)}async importInternal(e){if(e.version!==0)throw TypeError(`Unsupported bundle version`);let t=0,n=[],r=[];for(let[i,a]of Object.entries(e.entries)){let e;try{let t=JSON.parse(i);e=Array.isArray(t)?t:[]}catch{n.push({key:[],reason:`invalid key`});continue}let o=ir(a.c),s={};a.d!==void 0&&(s.data=X(a.d));let c=Z(a.m);c!==void 0&&(s.metadata=c),t+=1,await this.applyOperation({key:e,payload:s,clock:o,skipSameValue:!1,source:`import`,eventSink:r})}return r.length>0&&this.emitEvents(`import`,r),{accepted:t,skipped:n}}async importJson(e){if(tr(e)){let t=e.hooks?.preprocess,n=t?{version:e.bundle.version,entries:{...e.bundle.entries}}:e.bundle,r=[];if(t)for(let[e,i]of Object.entries(n.entries)){let a=JSON.parse(e),o=ir(i.c),s={};i.d!==void 0&&(s.data=X(i.d));let c=Z(i.m);c!==void 0&&(s.metadata=c);let l=$n(await t({key:a,clock:o,raw:i},Q(s)));l.accept?n.entries[e]=$(o,s):(r.push({key:a,reason:l.reason??`rejected`}),delete n.entries[e])}let i=await this.importInternal(n);return{accepted:i.accepted,skipped:r.concat(i.skipped)}}return this.importInternal(e)}async importJsonStr(e){let t=JSON.parse(e);return this.importJson(t)}async digest(){return u(await lr(await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ORDER BY key ASC`)))}async kvToJson(){return this.exportInternal()}async merge(e){let t=await e.exportJson();await this.importJson(t)}static async checkConsistency(e,t){let[n,r]=await Promise.all([e.digest(),t.digest()]);return n===r}checkInvariants(){}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}};export{fr as Flock,fr as FlockSQLite};
26
+ peer=excluded.peer`,[t,r,i,c.physicalTime,c.logicalCounter,c.peerId]),a=!0}),o&&this.bumpVersion(o),a){let t={key:e.key.slice(),payload:n,source:e.source};e.eventSink?e.eventSink.push(t):this.emitEvents(e.source,[t])}return a}emitEvents(e,t){if(this.listeners.size===0||t.length===0)return;let n={source:e,events:t.map(e=>({key:W(e.key),value:e.payload.data===void 0?void 0:W(e.payload.data),metadata:G(e.payload.metadata),payload:K(e.payload)}))};this.listeners.forEach(e=>{e(n)})}async put(e,t,n){await this.applyOperation({key:e,payload:{data:W(t)},now:n,skipSameValue:!0,source:`local`})}async putWithMeta(e,t,n={}){let r={data:W(t)};n.metadata&&(r.metadata=G(n.metadata));let i=n.hooks?.transform;if(i){let t=K(r),a=q(r,await i({key:e.slice(),now:n.now},t)??t);if(a.data===void 0)throw TypeError(`putWithMeta requires a data value`);await this.applyOperation({key:e,payload:a,now:n.now,skipSameValue:!0,source:`local`});return}await this.applyOperation({key:e,payload:r,now:n.now,skipSameValue:!0,source:`local`})}async delete(e,t){await this.applyOperation({key:e,payload:{},now:t,skipSameValue:!0,source:`local`})}async forcePut(e,t,n){await this.applyOperation({key:e,payload:{data:W(t)},now:n,skipSameValue:!1,source:`local`})}async forcePutWithMeta(e,t,n={}){let r={data:W(t)};n.metadata&&(r.metadata=G(n.metadata));let i=n.hooks?.transform;if(i){let t=K(r),a=q(r,await i({key:e.slice(),now:n.now},t)??t);if(a.data===void 0)throw TypeError(`forcePutWithMeta requires a data value`);await this.applyOperation({key:e,payload:a,now:n.now,skipSameValue:!1,source:`local`});return}await this.applyOperation({key:e,payload:r,now:n.now,skipSameValue:!1,source:`local`})}async forceDelete(e,t){await this.applyOperation({key:e,payload:{},now:t,skipSameValue:!1,source:`local`})}async set(e,t,n){await this.put(e,t,n)}async setPeerId(e){let t=rr(e);await this.db.exec(`DELETE FROM ${this.tables.meta}`),await this.db.run(`INSERT INTO ${this.tables.meta}(peer_id) VALUES (?)`,[t]),this.peerIdValue=t}async get(e){let t=H(e),n=(await this.db.query(`SELECT data FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]))[0];if(n)return Q(n.data)}async getEntry(e){let t;try{t=H(e)}catch{return}let n=(await this.db.query(`SELECT data, metadata, physical, logical, peer FROM ${this.tables.kv} WHERE key = ? LIMIT 1`,[t]))[0];if(!n)return;let r=xr(n.physical,n.logical,n.peer);if(!r)return;let i=ir(br(n.metadata)),a=Q(n.data),o={metadata:i,clock:r};return a!==void 0&&(o.data=a),o}async getMvr(e){let t=await this.scan({prefix:e}),n=[];for(let r of t)r.raw.d===!0&&r.key.length===e.length+1&&n.push(r.key[r.key.length-1]);return n}async putMvr(e,t,n){if(t===null||typeof t==`object`)throw TypeError(`putMvr only accepts scalar values`);let r=await this.scan({prefix:e});for(let e of r)e.raw.d===!0&&await this.delete(e.key,n);let i=e.slice();i.push(t),await this.put(i,!0,n)}buildScanBounds(e){let t,n,r,i=e=>{if(!t){t=e;return}let n=Yn(e.value,t.value);n>0?t=e:n===0&&(t={value:t.value,inclusive:t.inclusive&&e.inclusive})},a=e=>{if(!n){n=e;return}let t=Yn(e.value,n.value);t<0?n=e:t===0&&(n={value:n.value,inclusive:n.inclusive&&e.inclusive})};try{if(e.prefix){let t=H(e.prefix);r=t,i({value:t,inclusive:!0});let n=Xn(t);n&&a({value:n,inclusive:!1})}e.start&&e.start.kind!==`unbounded`&&i({value:H(e.start.key),inclusive:e.start.kind===`inclusive`}),e.end&&e.end.kind!==`unbounded`&&a({value:H(e.end.key),inclusive:e.end.kind===`inclusive`})}catch{return{where:[],params:[],empty:!0}}let o=[],s=[];return t&&(o.push(`key ${t.inclusive?`>=`:`>`} ?`),s.push(t.value)),n&&(o.push(`key ${n.inclusive?`<=`:`<`} ?`),s.push(n.value)),{where:o,params:s,postFilter:r?(e=>t=>Tr(t,e))(r):void 0}}async scan(e={}){let t=this.buildScanBounds(e);if(t.empty)return[];let n=t.where.length>0?`WHERE ${t.where.join(` AND `)}`:``,r=await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${n} ORDER BY key ASC`,t.params),i=[];for(let e of r){let n=e.key;if(t.postFilter&&!t.postFilter(n))continue;let r=Jn(n),a={physicalTime:Number(e.physical??0),logicalCounter:Number(e.logical??0),peerId:String(e.peer??``)},o={},s=Q(e.data);s!==void 0&&(o.data=s);let c=br(e.metadata);c!==void 0&&(o.metadata=c);let l=Z(a,o);i.push({key:r,raw:l,value:o.data})}return i}async version(){let e=await this.db.query(`SELECT peer, physical, logical FROM (
27
+ SELECT peer, physical, logical,
28
+ ROW_NUMBER() OVER (PARTITION BY peer ORDER BY physical DESC, logical DESC) as rn
29
+ FROM ${this.tables.kv}
30
+ ) WHERE rn = 1`),t={};for(let n of e)t[n.peer]={physicalTime:n.physical,logicalCounter:n.logical};return t}inclusiveVersion(){let e={};for(let[t,n]of this.vv.entries())e[t]={...n};return e}peerId(){return this.peerIdValue}getMaxPhysicalTime(){return this.maxHlc.physicalTime}async exportInternal(e,t,n){let r=new Map;if(e)for(let[t,n]of Object.entries(e)){let e=wr(n);e&&r.set(t,e)}let i={},a=n?[n]:Array.from(this.vv.keys()),o=[];for(let e of a){let t=this.vv.get(e),n=r.get(e);t&&n&&(t.physicalTime<n.physicalTime||t.physicalTime===n.physicalTime&&t.logicalCounter<=n.logicalCounter)||o.push({peer:e,fromEntry:n})}if(n&&o.every(e=>e.peer!==n)&&o.push({peer:n,fromEntry:r.get(n)}),o.length===0)return{version:0,entries:i};for(let e of o){let n=[e.peer],r=`WHERE peer = ?`;e.fromEntry&&(r+=` AND physical >= ?`,n.push(e.fromEntry.physicalTime));let a=await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ${r} ORDER BY physical, logical, key`,n);for(let n of a){let r={physicalTime:Number(n.physical??0),logicalCounter:Number(n.logical??0),peerId:String(n.peer??``)},a=e.fromEntry;if(a&&(r.physicalTime<a.physicalTime||r.physicalTime===a.physicalTime&&r.logicalCounter<=a.logicalCounter)||t!==void 0&&Number.isFinite(t)&&n.data===null&&r.physicalTime<t)continue;let o={},s=Q(n.data);s!==void 0&&(o.data=s);let c=br(n.metadata);c!==void 0&&(o.metadata=c);let l=Jn(n.key);i[Zn(l)]=Z(r,o)}}return{version:0,entries:i}}async exportWithHooks(e){let t=await this.exportInternal(e.from,e.pruneTombstonesBefore,e.peerId),n=e.hooks?.transform;if(!n)return t;let r={version:t.version,entries:{}};for(let[e,i]of Object.entries(t.entries)){let t=$(i.c),a={key:JSON.parse(e),clock:t,raw:{...i}},o={};i.d!==void 0&&(o.data=W(i.d));let s=G(i.m);s!==void 0&&(o.metadata=s);let c=K(o),l=q(o,await n(a,c)??c);r.entries[e]=Z(t,l)}return r}exportJson(e,t){return vr(e)?this.exportWithHooks(e):this.exportInternal(e,t)}async importInternal(e){if(e.version!==0)throw TypeError(`Unsupported bundle version`);let t=0,n=[],r=[];for(let[i,a]of Object.entries(e.entries)){let e;try{let t=JSON.parse(i);e=Array.isArray(t)?t:[]}catch{n.push({key:[],reason:`invalid key`});continue}let o=$(a.c),s={};a.d!==void 0&&(s.data=W(a.d));let c=G(a.m);c!==void 0&&(s.metadata=c),t+=1,await this.applyOperation({key:e,payload:s,clock:o,skipSameValue:!1,source:`import`,eventSink:r})}return r.length>0&&this.emitEvents(`import`,r),{accepted:t,skipped:n}}async importJson(e){if(yr(e)){let t=e.hooks?.preprocess,n=t?{version:e.bundle.version,entries:{...e.bundle.entries}}:e.bundle,r=[];if(t)for(let[e,i]of Object.entries(n.entries)){let a=JSON.parse(e),o=$(i.c),s={};i.d!==void 0&&(s.data=W(i.d));let c=G(i.m);c!==void 0&&(s.metadata=c);let l=_r(await t({key:a,clock:o,raw:i},K(s)));l.accept?n.entries[e]=Z(o,s):(r.push({key:a,reason:l.reason??`rejected`}),delete n.entries[e])}let i=await this.importInternal(n);return{accepted:i.accepted,skipped:r.concat(i.skipped)}}return this.importInternal(e)}async importJsonStr(e){let t=JSON.parse(e);return this.importJson(t)}async digest(){return u(await Er(await this.db.query(`SELECT key, data, metadata, physical, logical, peer FROM ${this.tables.kv} ORDER BY key ASC`)))}async kvToJson(){return this.exportInternal()}async merge(e){let t=await e.exportJson();await this.importJson(t)}static async checkConsistency(e,t){let[n,r]=await Promise.all([e.digest(),t.digest()]);return n===r}checkInvariants(){}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}};export{kr as Flock,kr as FlockSQLite,gr as decodeVersionVector,hr as encodeVersionVector};
27
31
  //# sourceMappingURL=index.mjs.map