@loro-dev/flock-sqlite 0.1.0 → 0.5.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.cjs +7 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +122 -4
- package/dist/index.d.ts +122 -4
- package/dist/index.mjs +7 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +878 -72
- package/src/types.ts +22 -4
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;
|
|
@@ -127,6 +135,10 @@ declare class FlockSQLite {
|
|
|
127
135
|
private maxHlc;
|
|
128
136
|
private listeners;
|
|
129
137
|
private tables;
|
|
138
|
+
/** Transaction state: undefined when not in transaction, array when accumulating */
|
|
139
|
+
private txnEventSink;
|
|
140
|
+
/** Debounce state for autoDebounceCommit */
|
|
141
|
+
private debounceState;
|
|
130
142
|
private constructor();
|
|
131
143
|
static open(options: FlockSQLiteOptions): Promise<FlockSQLite>;
|
|
132
144
|
static fromJson(options: FlockSQLiteOptions & {
|
|
@@ -139,18 +151,57 @@ declare class FlockSQLite {
|
|
|
139
151
|
private bumpVersion;
|
|
140
152
|
private allocateClock;
|
|
141
153
|
private applyOperation;
|
|
154
|
+
private resetDebounceTimer;
|
|
142
155
|
private emitEvents;
|
|
143
156
|
put(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
144
157
|
putWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
|
|
145
158
|
delete(key: KeyPart[], now?: number): Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Force put a value even if it's the same as the current value.
|
|
161
|
+
* This will refresh the timestamp.
|
|
162
|
+
*/
|
|
163
|
+
forcePut(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Force put a value with metadata even if it's the same as the current value.
|
|
166
|
+
* This will refresh the timestamp.
|
|
167
|
+
*/
|
|
168
|
+
forcePutWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Force delete a key even if it's already deleted.
|
|
171
|
+
* This will refresh the timestamp.
|
|
172
|
+
*/
|
|
173
|
+
forceDelete(key: KeyPart[], now?: number): Promise<void>;
|
|
146
174
|
set(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
147
175
|
setPeerId(peerId: string): Promise<void>;
|
|
148
176
|
get(key: KeyPart[]): Promise<Value | undefined>;
|
|
177
|
+
/**
|
|
178
|
+
* Returns the full entry payload (data, metadata, and clock) for a key.
|
|
179
|
+
*
|
|
180
|
+
* Compared to `get`, this preserves tombstone information: a deleted entry
|
|
181
|
+
* still returns its clock and an empty metadata object with `data` omitted.
|
|
182
|
+
* Missing or invalid keys return `undefined`. Metadata is cloned and
|
|
183
|
+
* normalized to `{}` when absent.
|
|
184
|
+
*/
|
|
185
|
+
getEntry(key: KeyPart[]): Promise<EntryInfo | undefined>;
|
|
149
186
|
getMvr(key: KeyPart[]): Promise<Value[]>;
|
|
150
187
|
putMvr(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
151
188
|
private buildScanBounds;
|
|
152
189
|
scan(options?: ScanOptions): Promise<ScanRow[]>;
|
|
153
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Returns the exclusive version vector, which only includes peers that have
|
|
192
|
+
* at least one entry in the current state. This is consistent with the state
|
|
193
|
+
* after export and re-import.
|
|
194
|
+
*
|
|
195
|
+
* Use this version when sending to other peers for incremental sync.
|
|
196
|
+
*/
|
|
197
|
+
version(): Promise<VersionVector>;
|
|
198
|
+
/**
|
|
199
|
+
* Returns the inclusive version vector, which includes all peers ever seen,
|
|
200
|
+
* even if their entries have been overridden by other peers.
|
|
201
|
+
*
|
|
202
|
+
* Use this version when checking if you have received all data from another peer.
|
|
203
|
+
*/
|
|
204
|
+
inclusiveVersion(): VersionVector;
|
|
154
205
|
peerId(): string;
|
|
155
206
|
getMaxPhysicalTime(): number;
|
|
156
207
|
private exportInternal;
|
|
@@ -169,7 +220,74 @@ declare class FlockSQLite {
|
|
|
169
220
|
static checkConsistency(a: FlockSQLite, b: FlockSQLite): Promise<boolean>;
|
|
170
221
|
checkInvariants(): void;
|
|
171
222
|
subscribe(listener: (batch: EventBatch) => void): () => void;
|
|
223
|
+
/**
|
|
224
|
+
* Execute operations within a transaction. All put/delete operations inside
|
|
225
|
+
* the callback will be batched and emitted as a single EventBatch when the
|
|
226
|
+
* transaction commits successfully.
|
|
227
|
+
*
|
|
228
|
+
* If the callback throws or rejects, the transaction is rolled back and no
|
|
229
|
+
* events are emitted. Note: Database operations are NOT rolled back - only
|
|
230
|
+
* event emission is affected.
|
|
231
|
+
*
|
|
232
|
+
* @param callback - Async function containing put/delete operations
|
|
233
|
+
* @returns The return value of the callback
|
|
234
|
+
* @throws Error if nested transaction attempted
|
|
235
|
+
* @throws Error if called while autoDebounceCommit is active
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```ts
|
|
239
|
+
* await flock.txn(async () => {
|
|
240
|
+
* await flock.put(["a"], 1);
|
|
241
|
+
* await flock.put(["b"], 2);
|
|
242
|
+
* await flock.put(["c"], 3);
|
|
243
|
+
* });
|
|
244
|
+
* // Subscribers receive a single EventBatch with 3 events
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
txn<T>(callback: () => Promise<T>): Promise<T>;
|
|
248
|
+
/**
|
|
249
|
+
* Check if a transaction is currently active.
|
|
250
|
+
*/
|
|
251
|
+
isInTxn(): boolean;
|
|
252
|
+
/**
|
|
253
|
+
* Enable auto-debounce mode. Events will be accumulated and emitted after
|
|
254
|
+
* the specified timeout of inactivity. Each new operation resets the timer.
|
|
255
|
+
*
|
|
256
|
+
* Use `commit()` to force immediate emission of pending events.
|
|
257
|
+
* Use `disableAutoDebounceCommit()` to disable and emit pending events.
|
|
258
|
+
*
|
|
259
|
+
* Import operations will automatically call `commit()` before proceeding.
|
|
260
|
+
*
|
|
261
|
+
* @param timeout - Debounce timeout in milliseconds
|
|
262
|
+
* @throws Error if called while a transaction is active
|
|
263
|
+
* @throws Error if autoDebounceCommit is already active
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```ts
|
|
267
|
+
* flock.autoDebounceCommit(100);
|
|
268
|
+
* await flock.put(["a"], 1);
|
|
269
|
+
* await flock.put(["b"], 2);
|
|
270
|
+
* // No events emitted yet...
|
|
271
|
+
* // After 100ms of inactivity, subscribers receive single EventBatch
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
autoDebounceCommit(timeout: number): void;
|
|
275
|
+
/**
|
|
276
|
+
* Disable auto-debounce mode and emit any pending events immediately.
|
|
277
|
+
* No-op if autoDebounceCommit is not active.
|
|
278
|
+
*/
|
|
279
|
+
disableAutoDebounceCommit(): void;
|
|
280
|
+
/**
|
|
281
|
+
* Force immediate emission of any pending debounced events.
|
|
282
|
+
* Does not disable auto-debounce mode - new operations will continue to be debounced.
|
|
283
|
+
* No-op if autoDebounceCommit is not active or no events are pending.
|
|
284
|
+
*/
|
|
285
|
+
commit(): void;
|
|
286
|
+
/**
|
|
287
|
+
* Check if auto-debounce mode is currently active.
|
|
288
|
+
*/
|
|
289
|
+
isAutoDebounceActive(): boolean;
|
|
172
290
|
}
|
|
173
291
|
//#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,
|
|
292
|
+
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
293
|
//# 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;
|
|
@@ -127,6 +135,10 @@ declare class FlockSQLite {
|
|
|
127
135
|
private maxHlc;
|
|
128
136
|
private listeners;
|
|
129
137
|
private tables;
|
|
138
|
+
/** Transaction state: undefined when not in transaction, array when accumulating */
|
|
139
|
+
private txnEventSink;
|
|
140
|
+
/** Debounce state for autoDebounceCommit */
|
|
141
|
+
private debounceState;
|
|
130
142
|
private constructor();
|
|
131
143
|
static open(options: FlockSQLiteOptions): Promise<FlockSQLite>;
|
|
132
144
|
static fromJson(options: FlockSQLiteOptions & {
|
|
@@ -139,18 +151,57 @@ declare class FlockSQLite {
|
|
|
139
151
|
private bumpVersion;
|
|
140
152
|
private allocateClock;
|
|
141
153
|
private applyOperation;
|
|
154
|
+
private resetDebounceTimer;
|
|
142
155
|
private emitEvents;
|
|
143
156
|
put(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
144
157
|
putWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
|
|
145
158
|
delete(key: KeyPart[], now?: number): Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Force put a value even if it's the same as the current value.
|
|
161
|
+
* This will refresh the timestamp.
|
|
162
|
+
*/
|
|
163
|
+
forcePut(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Force put a value with metadata even if it's the same as the current value.
|
|
166
|
+
* This will refresh the timestamp.
|
|
167
|
+
*/
|
|
168
|
+
forcePutWithMeta(key: KeyPart[], value: Value, options?: PutWithMetaOptions): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Force delete a key even if it's already deleted.
|
|
171
|
+
* This will refresh the timestamp.
|
|
172
|
+
*/
|
|
173
|
+
forceDelete(key: KeyPart[], now?: number): Promise<void>;
|
|
146
174
|
set(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
147
175
|
setPeerId(peerId: string): Promise<void>;
|
|
148
176
|
get(key: KeyPart[]): Promise<Value | undefined>;
|
|
177
|
+
/**
|
|
178
|
+
* Returns the full entry payload (data, metadata, and clock) for a key.
|
|
179
|
+
*
|
|
180
|
+
* Compared to `get`, this preserves tombstone information: a deleted entry
|
|
181
|
+
* still returns its clock and an empty metadata object with `data` omitted.
|
|
182
|
+
* Missing or invalid keys return `undefined`. Metadata is cloned and
|
|
183
|
+
* normalized to `{}` when absent.
|
|
184
|
+
*/
|
|
185
|
+
getEntry(key: KeyPart[]): Promise<EntryInfo | undefined>;
|
|
149
186
|
getMvr(key: KeyPart[]): Promise<Value[]>;
|
|
150
187
|
putMvr(key: KeyPart[], value: Value, now?: number): Promise<void>;
|
|
151
188
|
private buildScanBounds;
|
|
152
189
|
scan(options?: ScanOptions): Promise<ScanRow[]>;
|
|
153
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Returns the exclusive version vector, which only includes peers that have
|
|
192
|
+
* at least one entry in the current state. This is consistent with the state
|
|
193
|
+
* after export and re-import.
|
|
194
|
+
*
|
|
195
|
+
* Use this version when sending to other peers for incremental sync.
|
|
196
|
+
*/
|
|
197
|
+
version(): Promise<VersionVector>;
|
|
198
|
+
/**
|
|
199
|
+
* Returns the inclusive version vector, which includes all peers ever seen,
|
|
200
|
+
* even if their entries have been overridden by other peers.
|
|
201
|
+
*
|
|
202
|
+
* Use this version when checking if you have received all data from another peer.
|
|
203
|
+
*/
|
|
204
|
+
inclusiveVersion(): VersionVector;
|
|
154
205
|
peerId(): string;
|
|
155
206
|
getMaxPhysicalTime(): number;
|
|
156
207
|
private exportInternal;
|
|
@@ -169,7 +220,74 @@ declare class FlockSQLite {
|
|
|
169
220
|
static checkConsistency(a: FlockSQLite, b: FlockSQLite): Promise<boolean>;
|
|
170
221
|
checkInvariants(): void;
|
|
171
222
|
subscribe(listener: (batch: EventBatch) => void): () => void;
|
|
223
|
+
/**
|
|
224
|
+
* Execute operations within a transaction. All put/delete operations inside
|
|
225
|
+
* the callback will be batched and emitted as a single EventBatch when the
|
|
226
|
+
* transaction commits successfully.
|
|
227
|
+
*
|
|
228
|
+
* If the callback throws or rejects, the transaction is rolled back and no
|
|
229
|
+
* events are emitted. Note: Database operations are NOT rolled back - only
|
|
230
|
+
* event emission is affected.
|
|
231
|
+
*
|
|
232
|
+
* @param callback - Async function containing put/delete operations
|
|
233
|
+
* @returns The return value of the callback
|
|
234
|
+
* @throws Error if nested transaction attempted
|
|
235
|
+
* @throws Error if called while autoDebounceCommit is active
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```ts
|
|
239
|
+
* await flock.txn(async () => {
|
|
240
|
+
* await flock.put(["a"], 1);
|
|
241
|
+
* await flock.put(["b"], 2);
|
|
242
|
+
* await flock.put(["c"], 3);
|
|
243
|
+
* });
|
|
244
|
+
* // Subscribers receive a single EventBatch with 3 events
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
txn<T>(callback: () => Promise<T>): Promise<T>;
|
|
248
|
+
/**
|
|
249
|
+
* Check if a transaction is currently active.
|
|
250
|
+
*/
|
|
251
|
+
isInTxn(): boolean;
|
|
252
|
+
/**
|
|
253
|
+
* Enable auto-debounce mode. Events will be accumulated and emitted after
|
|
254
|
+
* the specified timeout of inactivity. Each new operation resets the timer.
|
|
255
|
+
*
|
|
256
|
+
* Use `commit()` to force immediate emission of pending events.
|
|
257
|
+
* Use `disableAutoDebounceCommit()` to disable and emit pending events.
|
|
258
|
+
*
|
|
259
|
+
* Import operations will automatically call `commit()` before proceeding.
|
|
260
|
+
*
|
|
261
|
+
* @param timeout - Debounce timeout in milliseconds
|
|
262
|
+
* @throws Error if called while a transaction is active
|
|
263
|
+
* @throws Error if autoDebounceCommit is already active
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```ts
|
|
267
|
+
* flock.autoDebounceCommit(100);
|
|
268
|
+
* await flock.put(["a"], 1);
|
|
269
|
+
* await flock.put(["b"], 2);
|
|
270
|
+
* // No events emitted yet...
|
|
271
|
+
* // After 100ms of inactivity, subscribers receive single EventBatch
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
autoDebounceCommit(timeout: number): void;
|
|
275
|
+
/**
|
|
276
|
+
* Disable auto-debounce mode and emit any pending events immediately.
|
|
277
|
+
* No-op if autoDebounceCommit is not active.
|
|
278
|
+
*/
|
|
279
|
+
disableAutoDebounceCommit(): void;
|
|
280
|
+
/**
|
|
281
|
+
* Force immediate emission of any pending debounced events.
|
|
282
|
+
* Does not disable auto-debounce mode - new operations will continue to be debounced.
|
|
283
|
+
* No-op if autoDebounceCommit is not active or no events are pending.
|
|
284
|
+
*/
|
|
285
|
+
commit(): void;
|
|
286
|
+
/**
|
|
287
|
+
* Check if auto-debounce mode is currently active.
|
|
288
|
+
*/
|
|
289
|
+
isAutoDebounceActive(): boolean;
|
|
172
290
|
}
|
|
173
291
|
//#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,
|
|
292
|
+
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
293
|
//# 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;txnEventSink;debounceState;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,this.txnEventSink=void 0,this.debounceState=void 0}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(){if(this.debounceState!==void 0&&this.disableAutoDebounceCommit(),this.txnEventSink!==void 0){let e=this.txnEventSink;this.txnEventSink=void 0,e.length>0&&this.emitEvents(`local`,e)}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=
|
|
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,
|
|
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.txnEventSink?this.txnEventSink.push(t):this.debounceState?(this.debounceState.pendingEvents.push(t),this.resetDebounceTimer()):this.emitEvents(e.source,[t])}return a}resetDebounceTimer(){this.debounceState!==void 0&&(this.debounceState.timerId!==void 0&&clearTimeout(this.debounceState.timerId),this.debounceState.timerId=setTimeout(()=>{this.commit()},this.debounceState.timeout))}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(this.txnEventSink!==void 0){let e=this.txnEventSink;throw this.txnEventSink=void 0,e.length>0&&this.emitEvents(`local`,e),Error(`import called during transaction - transaction was auto-committed`)}if(this.debounceState!==void 0&&this.commit(),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)}}async txn(e){if(this.txnEventSink!==void 0)throw Error(`Nested transactions are not supported`);if(this.debounceState!==void 0)throw Error(`Cannot start transaction while autoDebounceCommit is active`);let t=[];this.txnEventSink=t;try{let n=await e();return t.length>0&&this.emitEvents(`local`,t),n}finally{this.txnEventSink=void 0}}isInTxn(){return this.txnEventSink!==void 0}autoDebounceCommit(e){if(this.txnEventSink!==void 0)throw Error(`Cannot enable autoDebounceCommit while transaction is active`);if(this.debounceState!==void 0)throw Error(`autoDebounceCommit is already active`);this.debounceState={timeout:e,timerId:void 0,pendingEvents:[]}}disableAutoDebounceCommit(){if(this.debounceState===void 0)return;let{timerId:e,pendingEvents:t}=this.debounceState;e!==void 0&&clearTimeout(e),this.debounceState=void 0,t.length>0&&this.emitEvents(`local`,t)}commit(){if(this.debounceState===void 0)return;let{timerId:e,pendingEvents:t}=this.debounceState;e!==void 0&&(clearTimeout(e),this.debounceState.timerId=void 0),t.length>0&&(this.emitEvents(`local`,t),this.debounceState.pendingEvents=[])}isAutoDebounceActive(){return this.debounceState!==void 0}};export{kr as Flock,kr as FlockSQLite,gr as decodeVersionVector,hr as encodeVersionVector};
|
|
27
31
|
//# sourceMappingURL=index.mjs.map
|