@dxos/merkle-search-tree 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea

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.
@@ -63,77 +63,11 @@ var textEncoder = new TextEncoder();
63
63
  // src/forest.ts
64
64
  import { invariant } from "@dxos/invariant";
65
65
  import { arrayToHex as arrayToHex2, arraysEqual } from "@dxos/util";
66
- function _check_private_redeclaration(obj, privateCollection) {
67
- if (privateCollection.has(obj)) {
68
- throw new TypeError("Cannot initialize the same private elements twice on an object");
69
- }
70
- }
71
- function _class_apply_descriptor_get(receiver, descriptor) {
72
- if (descriptor.get) {
73
- return descriptor.get.call(receiver);
74
- }
75
- return descriptor.value;
76
- }
77
- function _class_apply_descriptor_set(receiver, descriptor, value) {
78
- if (descriptor.set) {
79
- descriptor.set.call(receiver, value);
80
- } else {
81
- if (!descriptor.writable) {
82
- throw new TypeError("attempted to set read only private field");
83
- }
84
- descriptor.value = value;
85
- }
86
- }
87
- function _class_extract_field_descriptor(receiver, privateMap, action) {
88
- if (!privateMap.has(receiver)) {
89
- throw new TypeError("attempted to " + action + " private field on non-instance");
90
- }
91
- return privateMap.get(receiver);
92
- }
93
- function _class_private_field_get(receiver, privateMap) {
94
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
95
- return _class_apply_descriptor_get(receiver, descriptor);
96
- }
97
- function _class_private_field_init(obj, privateMap, value) {
98
- _check_private_redeclaration(obj, privateMap);
99
- privateMap.set(obj, value);
100
- }
101
- function _class_private_field_set(receiver, privateMap, value) {
102
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
103
- _class_apply_descriptor_set(receiver, descriptor, value);
104
- return value;
105
- }
106
- function _class_private_method_get(receiver, privateSet, fn) {
107
- if (!privateSet.has(receiver)) {
108
- throw new TypeError("attempted to get private field on non-instance");
109
- }
110
- return fn;
111
- }
112
- function _class_private_method_init(obj, privateSet) {
113
- _check_private_redeclaration(obj, privateSet);
114
- privateSet.add(obj);
115
- }
116
- function _define_property(obj, key, value) {
117
- if (key in obj) {
118
- Object.defineProperty(obj, key, {
119
- value,
120
- enumerable: true,
121
- configurable: true,
122
- writable: true
123
- });
124
- } else {
125
- obj[key] = value;
126
- }
127
- return obj;
128
- }
129
66
  var __dxlog_file = "/__w/dxos/dxos/packages/common/merkle-search-tree/src/forest.ts";
130
- var _nodes = /* @__PURE__ */ new WeakMap();
131
- var _requireNode = /* @__PURE__ */ new WeakSet();
132
- var _mergeItem = /* @__PURE__ */ new WeakSet();
133
- var _emptyNodeCache = /* @__PURE__ */ new WeakMap();
134
- var _makeNode = /* @__PURE__ */ new WeakSet();
135
- var _splitAtKey = /* @__PURE__ */ new WeakSet();
136
67
  var Forest = class {
68
+ #nodes = /* @__PURE__ */ new Map();
69
+ itemHashOps = 0;
70
+ nodeHashOps = 0;
137
71
  async createTree(pairs) {
138
72
  const items = await Promise.all([
139
73
  ...pairs
@@ -146,7 +80,7 @@ var Forest = class {
146
80
  }
147
81
  }
148
82
  if (items.length === 0) {
149
- return _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], []);
83
+ return this.#makeNode(0, [], []);
150
84
  }
151
85
  const buildLevel = async (level, from, to) => {
152
86
  invariant(level >= 0, void 0, {
@@ -159,7 +93,7 @@ var Forest = class {
159
93
  ]
160
94
  });
161
95
  if (level === 0) {
162
- return _class_private_method_get(this, _makeNode, makeNode).call(this, 0, items.slice(from, to), []);
96
+ return this.#makeNode(0, items.slice(from, to), []);
163
97
  }
164
98
  let rangeBegin = from;
165
99
  const childItems = [];
@@ -176,7 +110,7 @@ var Forest = class {
176
110
  }
177
111
  }
178
112
  childNodes.push(await buildLevel(level - 1, rangeBegin, to));
179
- return _class_private_method_get(this, _makeNode, makeNode).call(this, level, childItems, childNodes);
113
+ return this.#makeNode(level, childItems, childNodes);
180
114
  };
181
115
  const maxLevel = Math.max(...items.map((item) => item.level));
182
116
  const root = await buildLevel(maxLevel, 0, items.length);
@@ -184,7 +118,7 @@ var Forest = class {
184
118
  }
185
119
  async get(root, key) {
186
120
  const keyLevel = await getKeyLevel(key);
187
- let node = _class_private_field_get(this, _nodes).get(root);
121
+ let node = this.#nodes.get(root);
188
122
  if (node !== void 0 && node.level < keyLevel) {
189
123
  return {
190
124
  kind: "missing"
@@ -207,7 +141,7 @@ var Forest = class {
207
141
  let found = false;
208
142
  for (let i = 0; i < node.items.length; i++) {
209
143
  if (node.items[i].key > key) {
210
- node = _class_private_field_get(this, _nodes).get(node.children[i]);
144
+ node = this.#nodes.get(node.children[i]);
211
145
  found = true;
212
146
  break;
213
147
  }
@@ -222,7 +156,7 @@ var Forest = class {
222
156
  ""
223
157
  ]
224
158
  });
225
- node = _class_private_field_get(this, _nodes).get(node.children[node.items.length]);
159
+ node = this.#nodes.get(node.children[node.items.length]);
226
160
  }
227
161
  }
228
162
  }
@@ -234,14 +168,14 @@ var Forest = class {
234
168
  if (digest1 === digest2) {
235
169
  return digest1;
236
170
  }
237
- const node1 = _class_private_method_get(this, _requireNode, requireNode).call(this, digest1);
238
- const node2 = _class_private_method_get(this, _requireNode, requireNode).call(this, digest2);
171
+ const node1 = this.#requireNode(digest1);
172
+ const node2 = this.#requireNode(digest2);
239
173
  if (node2.level < node1.level) {
240
- return await this.merge(digest1, await _class_private_method_get(this, _makeNode, makeNode).call(this, node2.level + 1, [], [
174
+ return await this.merge(digest1, await this.#makeNode(node2.level + 1, [], [
241
175
  digest2
242
176
  ]), mergeFn);
243
177
  } else if (node1.level < node2.level) {
244
- return await this.merge(await _class_private_method_get(this, _makeNode, makeNode).call(this, node1.level + 1, [], [
178
+ return await this.merge(await this.#makeNode(node1.level + 1, [], [
245
179
  digest1
246
180
  ]), digest2, mergeFn);
247
181
  }
@@ -314,7 +248,7 @@ var Forest = class {
314
248
  if (node1.level > 0) {
315
249
  resultChildren.push(await this.merge(child1, child2, mergeFn));
316
250
  }
317
- resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, node1.items[i1], node2.items[i2]));
251
+ resultItems.push(await this.#mergeItem(mergeFn, node1.items[i1], node2.items[i2]));
318
252
  carry1 = null;
319
253
  carry2 = null;
320
254
  i1++;
@@ -329,9 +263,9 @@ var Forest = class {
329
263
  ""
330
264
  ]
331
265
  });
332
- resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, null, node2.items[i2]));
266
+ resultItems.push(await this.#mergeItem(mergeFn, null, node2.items[i2]));
333
267
  if (node1.level > 0) {
334
- const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, child1, key2);
268
+ const [left, right] = await this.#splitAtKey(child1, key2);
335
269
  resultChildren.push(await this.merge(left, child2, mergeFn));
336
270
  carry1 = right;
337
271
  carry2 = null;
@@ -347,9 +281,9 @@ var Forest = class {
347
281
  ""
348
282
  ]
349
283
  });
350
- resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, node1.items[i1], null));
284
+ resultItems.push(await this.#mergeItem(mergeFn, node1.items[i1], null));
351
285
  if (node1.level > 0) {
352
- const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, child2, key1);
286
+ const [left, right] = await this.#splitAtKey(child2, key1);
353
287
  resultChildren.push(await this.merge(child1, left, mergeFn));
354
288
  carry1 = null;
355
289
  carry2 = right;
@@ -362,7 +296,7 @@ var Forest = class {
362
296
  const child2 = carry2 !== null ? carry2 : node2.children[node2.items.length];
363
297
  resultChildren.push(await this.merge(child1, child2, mergeFn));
364
298
  }
365
- return await _class_private_method_get(this, _makeNode, makeNode).call(this, node1.level, resultItems, resultChildren);
299
+ return await this.#makeNode(node1.level, resultItems, resultChildren);
366
300
  }
367
301
  async setBatch(root, pairs) {
368
302
  const newTree = await this.createTree(pairs);
@@ -377,7 +311,7 @@ var Forest = class {
377
311
  ]);
378
312
  }
379
313
  *missingNodes(digest) {
380
- const node = _class_private_field_get(this, _nodes).get(digest);
314
+ const node = this.#nodes.get(digest);
381
315
  if (!node) {
382
316
  yield digest;
383
317
  } else {
@@ -390,7 +324,7 @@ var Forest = class {
390
324
  const result = [];
391
325
  for (const node of nodes) {
392
326
  const items = await Promise.all(node.items.map((item) => makeItem2(item.key, item.value)));
393
- const { digest } = await makeNode1(node.level, items, node.children);
327
+ const { digest } = await makeNode(node.level, items, node.children);
394
328
  invariant(digest === node.digest, void 0, {
395
329
  F: __dxlog_file,
396
330
  L: 218,
@@ -400,7 +334,7 @@ var Forest = class {
400
334
  ""
401
335
  ]
402
336
  });
403
- _class_private_field_get(this, _nodes).set(node.digest, {
337
+ this.#nodes.set(node.digest, {
404
338
  level: node.level,
405
339
  digest: node.digest,
406
340
  items,
@@ -413,7 +347,7 @@ var Forest = class {
413
347
  async getNodes(digests) {
414
348
  const result = [];
415
349
  for (const digest of digests) {
416
- const node = _class_private_field_get(this, _nodes).get(digest);
350
+ const node = this.#nodes.get(digest);
417
351
  if (!node) {
418
352
  continue;
419
353
  }
@@ -434,7 +368,7 @@ var Forest = class {
434
368
  }
435
369
  formatToString(digest, { pad = 0 } = {}) {
436
370
  const padStr = " ".repeat(pad);
437
- const node = _class_private_field_get(this, _nodes).get(digest);
371
+ const node = this.#nodes.get(digest);
438
372
  if (!node) {
439
373
  return `${padStr} o (${digest.slice(0, 8)}) NOT AVAILABLE`;
440
374
  }
@@ -460,7 +394,7 @@ var Forest = class {
460
394
  * Items iterator ordered by key.
461
395
  */
462
396
  *items(digest) {
463
- const node = _class_private_method_get(this, _requireNode, requireNode).call(this, digest);
397
+ const node = this.#requireNode(digest);
464
398
  for (let i = 0; i < node.items.length; i++) {
465
399
  if (node.level > 0) {
466
400
  yield* this.items(node.children[i]);
@@ -471,163 +405,140 @@ var Forest = class {
471
405
  yield* this.items(node.children[node.items.length]);
472
406
  }
473
407
  }
474
- constructor() {
475
- _class_private_method_init(this, _requireNode);
476
- _class_private_method_init(this, _mergeItem);
477
- _class_private_method_init(this, _makeNode);
478
- _class_private_method_init(this, _splitAtKey);
479
- _class_private_field_init(this, _nodes, {
480
- writable: true,
481
- value: /* @__PURE__ */ new Map()
482
- });
483
- _define_property(this, "itemHashOps", 0);
484
- _define_property(this, "nodeHashOps", 0);
485
- _class_private_field_init(this, _emptyNodeCache, {
486
- writable: true,
487
- value: void 0
408
+ #requireNode(digest) {
409
+ invariant(validDigest(digest), void 0, {
410
+ F: __dxlog_file,
411
+ L: 295,
412
+ S: this,
413
+ A: [
414
+ "validDigest(digest)",
415
+ ""
416
+ ]
488
417
  });
418
+ const node = this.#nodes.get(digest);
419
+ if (!node) {
420
+ throw new Error(`Node not available: ${digest}`);
421
+ }
422
+ return node;
489
423
  }
490
- };
491
- function requireNode(digest) {
492
- invariant(validDigest(digest), void 0, {
493
- F: __dxlog_file,
494
- L: 295,
495
- S: this,
496
- A: [
497
- "validDigest(digest)",
498
- ""
499
- ]
500
- });
501
- const node = _class_private_field_get(this, _nodes).get(digest);
502
- if (!node) {
503
- throw new Error(`Node not available: ${digest}`);
504
- }
505
- return node;
506
- }
507
- async function mergeItem(mergeFn, item1, item2) {
508
- invariant(item1 !== null || item2 !== null, void 0, {
509
- F: __dxlog_file,
510
- L: 304,
511
- S: this,
512
- A: [
513
- "item1 !== null || item2 !== null",
514
- ""
515
- ]
516
- });
517
- const key = item1?.key ?? item2?.key;
518
- if (item1 !== null && item2 !== null && arraysEqual(item1.value, item2.value)) {
519
- return item1;
520
- } else {
521
- const mergeResult = await mergeFn(key, item1?.value ?? null, item2?.value ?? null);
522
- if (item1 !== null && arraysEqual(item1.value, mergeResult)) {
424
+ async #mergeItem(mergeFn, item1, item2) {
425
+ invariant(item1 !== null || item2 !== null, void 0, {
426
+ F: __dxlog_file,
427
+ L: 304,
428
+ S: this,
429
+ A: [
430
+ "item1 !== null || item2 !== null",
431
+ ""
432
+ ]
433
+ });
434
+ const key = item1?.key ?? item2?.key;
435
+ if (item1 !== null && item2 !== null && arraysEqual(item1.value, item2.value)) {
523
436
  return item1;
524
- } else if (item2 !== null && arraysEqual(item2.value, mergeResult)) {
525
- return item2;
526
437
  } else {
527
- this.itemHashOps++;
528
- return await makeItem2(key, mergeResult);
438
+ const mergeResult = await mergeFn(key, item1?.value ?? null, item2?.value ?? null);
439
+ if (item1 !== null && arraysEqual(item1.value, mergeResult)) {
440
+ return item1;
441
+ } else if (item2 !== null && arraysEqual(item2.value, mergeResult)) {
442
+ return item2;
443
+ } else {
444
+ this.itemHashOps++;
445
+ return await makeItem2(key, mergeResult);
446
+ }
529
447
  }
530
448
  }
531
- }
532
- async function makeNode(level, items, children) {
533
- invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
534
- F: __dxlog_file,
535
- L: 328,
536
- S: this,
537
- A: [
538
- "level > 0 ? items.length + 1 === children.length : children.length === 0",
539
- ""
540
- ]
541
- });
542
- let node;
543
- if (level === 0 && items.length === 0) {
544
- node = await _class_private_field_set(this, _emptyNodeCache, _class_private_field_get(this, _emptyNodeCache) ?? makeNode1(0, [], []));
545
- } else {
546
- node = await makeNode1(level, items, children);
547
- this.nodeHashOps++;
548
- }
549
- if (!_class_private_field_get(this, _nodes).has(node.digest)) {
550
- _class_private_field_get(this, _nodes).set(node.digest, node);
551
- }
552
- return node.digest;
553
- }
554
- async function splitAtKey(digest, key) {
555
- const node = _class_private_method_get(this, _requireNode, requireNode).call(this, digest);
556
- let splitIndex = node.items.length;
557
- for (let i = 0; i < node.items.length; i++) {
558
- if (node.items[i].key === key) {
559
- return [
560
- await _class_private_method_get(this, _makeNode, makeNode).call(this, node.level, node.items.slice(0, i), node.children.slice(0, i + 1)),
561
- await _class_private_method_get(this, _makeNode, makeNode).call(this, node.level, node.items.slice(i + 1), node.children.slice(i + 2))
562
- ];
449
+ #emptyNodeCache = void 0;
450
+ async #makeNode(level, items, children) {
451
+ invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
452
+ F: __dxlog_file,
453
+ L: 328,
454
+ S: this,
455
+ A: [
456
+ "level > 0 ? items.length + 1 === children.length : children.length === 0",
457
+ ""
458
+ ]
459
+ });
460
+ let node;
461
+ if (level === 0 && items.length === 0) {
462
+ node = await (this.#emptyNodeCache ??= makeNode(0, [], []));
463
+ } else {
464
+ node = await makeNode(level, items, children);
465
+ this.nodeHashOps++;
563
466
  }
564
- if (node.items[i].key > key) {
565
- splitIndex = i;
566
- break;
467
+ if (!this.#nodes.has(node.digest)) {
468
+ this.#nodes.set(node.digest, node);
567
469
  }
470
+ return node.digest;
568
471
  }
569
- if (node.level === 0) {
570
- if (splitIndex === 0) {
472
+ async #splitAtKey(digest, key) {
473
+ const node = this.#requireNode(digest);
474
+ let splitIndex = node.items.length;
475
+ for (let i = 0; i < node.items.length; i++) {
476
+ if (node.items[i].key === key) {
477
+ return [
478
+ await this.#makeNode(node.level, node.items.slice(0, i), node.children.slice(0, i + 1)),
479
+ await this.#makeNode(node.level, node.items.slice(i + 1), node.children.slice(i + 2))
480
+ ];
481
+ }
482
+ if (node.items[i].key > key) {
483
+ splitIndex = i;
484
+ break;
485
+ }
486
+ }
487
+ if (node.level === 0) {
488
+ if (splitIndex === 0) {
489
+ return [
490
+ await this.#makeNode(0, [], []),
491
+ digest
492
+ ];
493
+ } else if (splitIndex === node.items.length) {
494
+ return [
495
+ digest,
496
+ await this.#makeNode(0, [], [])
497
+ ];
498
+ }
571
499
  return [
572
- await _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], []),
573
- digest
500
+ await this.#makeNode(node.level, node.items.slice(0, splitIndex), []),
501
+ await this.#makeNode(node.level, node.items.slice(splitIndex), [])
574
502
  ];
575
- } else if (splitIndex === node.items.length) {
503
+ } else {
504
+ const [left, right] = await this.#splitAtKey(node.children[splitIndex], key);
576
505
  return [
577
- digest,
578
- await _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], [])
506
+ await this.#makeNode(node.level, node.items.slice(0, splitIndex), [
507
+ ...node.children.slice(0, splitIndex),
508
+ left
509
+ ]),
510
+ await this.#makeNode(node.level, node.items.slice(splitIndex), [
511
+ right,
512
+ ...node.children.slice(splitIndex + 1)
513
+ ])
579
514
  ];
580
515
  }
581
- return [
582
- await _class_private_method_get(this, _makeNode, makeNode).call(this, node.level, node.items.slice(0, splitIndex), []),
583
- await _class_private_method_get(this, _makeNode, makeNode).call(this, node.level, node.items.slice(splitIndex), [])
584
- ];
585
- } else {
586
- const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, node.children[splitIndex], key);
587
- return [
588
- await _class_private_method_get(this, _makeNode, makeNode).call(this, node.level, node.items.slice(0, splitIndex), [
589
- ...node.children.slice(0, splitIndex),
590
- left
591
- ]),
592
- await _class_private_method_get(this, _makeNode, makeNode).call(this, node.level, node.items.slice(splitIndex), [
593
- right,
594
- ...node.children.slice(splitIndex + 1)
595
- ])
596
- ];
597
516
  }
598
- }
599
- var _forest = /* @__PURE__ */ new WeakMap();
600
- var _root = /* @__PURE__ */ new WeakMap();
517
+ };
601
518
  var TreeMut = class {
519
+ #forest;
520
+ #root;
521
+ constructor(forest, root) {
522
+ this.#forest = forest;
523
+ this.#root = root;
524
+ }
602
525
  get root() {
603
- return _class_private_field_get(this, _root);
526
+ return this.#root;
604
527
  }
605
528
  async get(key) {
606
- return _class_private_field_get(this, _forest).get(_class_private_field_get(this, _root), key);
529
+ return this.#forest.get(this.#root, key);
607
530
  }
608
531
  async setBatch(pairs) {
609
- _class_private_field_set(this, _root, await _class_private_field_get(this, _forest).setBatch(_class_private_field_get(this, _root), pairs));
532
+ this.#root = await this.#forest.setBatch(this.#root, pairs);
610
533
  }
611
534
  async set(key, value) {
612
- _class_private_field_set(this, _root, await _class_private_field_get(this, _forest).set(_class_private_field_get(this, _root), key, value));
535
+ this.#root = await this.#forest.set(this.#root, key, value);
613
536
  }
614
537
  items() {
615
- return _class_private_field_get(this, _forest).items(this.root);
616
- }
617
- constructor(forest, root) {
618
- _class_private_field_init(this, _forest, {
619
- writable: true,
620
- value: void 0
621
- });
622
- _class_private_field_init(this, _root, {
623
- writable: true,
624
- value: void 0
625
- });
626
- _class_private_field_set(this, _forest, forest);
627
- _class_private_field_set(this, _root, root);
538
+ return this.#forest.items(this.root);
628
539
  }
629
540
  };
630
- var makeNode1 = async (level, items, children) => {
541
+ var makeNode = async (level, items, children) => {
631
542
  invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
632
543
  F: __dxlog_file,
633
544
  L: 479,
@@ -698,88 +609,37 @@ var textEncoder2 = new TextEncoder();
698
609
  var validDigest = (digest) => typeof digest === "string" && digest.length > 0;
699
610
 
700
611
  // src/lww-tree.ts
701
- function _check_private_redeclaration2(obj, privateCollection) {
702
- if (privateCollection.has(obj)) {
703
- throw new TypeError("Cannot initialize the same private elements twice on an object");
704
- }
705
- }
706
- function _class_apply_descriptor_get2(receiver, descriptor) {
707
- if (descriptor.get) {
708
- return descriptor.get.call(receiver);
709
- }
710
- return descriptor.value;
711
- }
712
- function _class_apply_descriptor_set2(receiver, descriptor, value) {
713
- if (descriptor.set) {
714
- descriptor.set.call(receiver, value);
715
- } else {
716
- if (!descriptor.writable) {
717
- throw new TypeError("attempted to set read only private field");
718
- }
719
- descriptor.value = value;
720
- }
721
- }
722
- function _class_extract_field_descriptor2(receiver, privateMap, action) {
723
- if (!privateMap.has(receiver)) {
724
- throw new TypeError("attempted to " + action + " private field on non-instance");
725
- }
726
- return privateMap.get(receiver);
727
- }
728
- function _class_private_field_get2(receiver, privateMap) {
729
- var descriptor = _class_extract_field_descriptor2(receiver, privateMap, "get");
730
- return _class_apply_descriptor_get2(receiver, descriptor);
731
- }
732
- function _class_private_field_init2(obj, privateMap, value) {
733
- _check_private_redeclaration2(obj, privateMap);
734
- privateMap.set(obj, value);
735
- }
736
- function _class_private_field_set2(receiver, privateMap, value) {
737
- var descriptor = _class_extract_field_descriptor2(receiver, privateMap, "set");
738
- _class_apply_descriptor_set2(receiver, descriptor, value);
739
- return value;
740
- }
741
- function _class_private_method_get2(receiver, privateSet, fn) {
742
- if (!privateSet.has(receiver)) {
743
- throw new TypeError("attempted to get private field on non-instance");
744
- }
745
- return fn;
746
- }
747
- function _class_private_method_init2(obj, privateSet) {
748
- _check_private_redeclaration2(obj, privateSet);
749
- privateSet.add(obj);
750
- }
751
- var _actor = /* @__PURE__ */ new WeakMap();
752
- var _forest2 = /* @__PURE__ */ new WeakMap();
753
- var _currentRoot = /* @__PURE__ */ new WeakMap();
754
- var _getData = /* @__PURE__ */ new WeakSet();
755
- var _merge = /* @__PURE__ */ new WeakSet();
756
- var _decode = /* @__PURE__ */ new WeakSet();
757
- var _encode = /* @__PURE__ */ new WeakSet();
758
612
  var LWWTree = class _LWWTree {
759
613
  static async new(params) {
760
614
  const tree = new _LWWTree(params);
761
- _class_private_field_set2(tree, _currentRoot, await _class_private_field_get2(tree, _forest2).createTree([]));
615
+ tree.#currentRoot = await tree.#forest.createTree([]);
762
616
  return tree;
763
617
  }
618
+ #actor;
619
+ #forest = new Forest();
620
+ #currentRoot;
764
621
  get currentRoot() {
765
- return _class_private_field_get2(this, _currentRoot);
622
+ return this.#currentRoot;
623
+ }
624
+ constructor(params) {
625
+ this.#actor = params.actor;
766
626
  }
767
627
  async get(key) {
768
- const data = await _class_private_method_get2(this, _getData, getData).call(this, key);
628
+ const data = await this.#getData(key);
769
629
  return data?.value;
770
630
  }
771
631
  async setBatch(pairs) {
772
- const prevDataBatch = await Promise.all(pairs.map(([key]) => _class_private_method_get2(this, _getData, getData).call(this, key)));
632
+ const prevDataBatch = await Promise.all(pairs.map(([key]) => this.#getData(key)));
773
633
  const updates = pairs.map(([key, value], i) => {
774
634
  const prevData = prevDataBatch[i];
775
635
  const newClock = !prevData ? [
776
- _class_private_field_get2(this, _actor),
636
+ this.#actor,
777
637
  0
778
638
  ] : [
779
- _class_private_field_get2(this, _actor),
639
+ this.#actor,
780
640
  prevData.clock[1] + 1
781
641
  ];
782
- const data = _class_private_method_get2(this, _encode, encode).call(this, {
642
+ const data = this.#encode({
783
643
  clock: newClock,
784
644
  value
785
645
  });
@@ -788,7 +648,7 @@ var LWWTree = class _LWWTree {
788
648
  data
789
649
  ];
790
650
  });
791
- _class_private_field_set2(this, _currentRoot, await _class_private_field_get2(this, _forest2).setBatch(_class_private_field_get2(this, _currentRoot), updates));
651
+ this.#currentRoot = await this.#forest.setBatch(this.#currentRoot, updates);
792
652
  }
793
653
  async set(key, value) {
794
654
  await this.setBatch([
@@ -799,25 +659,25 @@ var LWWTree = class _LWWTree {
799
659
  ]);
800
660
  }
801
661
  async receiveSyncMessage(state, message) {
802
- await _class_private_field_get2(this, _forest2).insertNodes(message.nodes);
662
+ await this.#forest.insertNodes(message.nodes);
803
663
  const remoteRoot = message.root ?? state.remoteRoot;
804
664
  if (remoteRoot !== null) {
805
665
  const missing = [
806
- ...await _class_private_field_get2(this, _forest2).missingNodes(remoteRoot)
666
+ ...await this.#forest.missingNodes(remoteRoot)
807
667
  ];
808
668
  if (missing.length === 0) {
809
- _class_private_field_set2(this, _currentRoot, await _class_private_field_get2(this, _forest2).merge(remoteRoot, _class_private_field_get2(this, _currentRoot), _class_private_method_get2(this, _merge, merge).bind(this)));
669
+ this.#currentRoot = await this.#forest.merge(remoteRoot, this.#currentRoot, this.#merge.bind(this));
810
670
  } else if (state.remoteRoot !== null && state.remoteRoot !== remoteRoot) {
811
671
  const missingFromPrevRoot = [
812
- ...await _class_private_field_get2(this, _forest2).missingNodes(state.remoteRoot)
672
+ ...await this.#forest.missingNodes(state.remoteRoot)
813
673
  ];
814
674
  if (missingFromPrevRoot.length === 0) {
815
- await _class_private_field_get2(this, _forest2).merge(state.remoteRoot, _class_private_field_get2(this, _currentRoot), _class_private_method_get2(this, _merge, merge).bind(this));
675
+ await this.#forest.merge(state.remoteRoot, this.#currentRoot, this.#merge.bind(this));
816
676
  const missing2 = [
817
- ...await _class_private_field_get2(this, _forest2).missingNodes(remoteRoot)
677
+ ...await this.#forest.missingNodes(remoteRoot)
818
678
  ];
819
679
  if (missing2.length === 0) {
820
- _class_private_field_set2(this, _currentRoot, await _class_private_field_get2(this, _forest2).merge(remoteRoot, _class_private_field_get2(this, _currentRoot), _class_private_method_get2(this, _merge, merge).bind(this)));
680
+ this.#currentRoot = await this.#forest.merge(remoteRoot, this.#currentRoot, this.#merge.bind(this));
821
681
  }
822
682
  }
823
683
  }
@@ -829,15 +689,15 @@ var LWWTree = class _LWWTree {
829
689
  };
830
690
  }
831
691
  async generateSyncMessage(state) {
832
- if (state.remoteRoot === _class_private_field_get2(this, _currentRoot) && state.remoteWant.length === 0 && !state.needsAck) {
692
+ if (state.remoteRoot === this.#currentRoot && state.remoteWant.length === 0 && !state.needsAck) {
833
693
  return [
834
694
  state,
835
695
  null
836
696
  ];
837
697
  }
838
- const nodes = await _class_private_field_get2(this, _forest2).getNodes(state.remoteWant);
698
+ const nodes = await this.#forest.getNodes(state.remoteWant);
839
699
  const want = state.remoteRoot === null ? [] : [
840
- ...await _class_private_field_get2(this, _forest2).missingNodes(state.remoteRoot)
700
+ ...await this.#forest.missingNodes(state.remoteRoot)
841
701
  ];
842
702
  return [
843
703
  {
@@ -846,70 +706,51 @@ var LWWTree = class _LWWTree {
846
706
  needsAck: false
847
707
  },
848
708
  {
849
- root: _class_private_field_get2(this, _currentRoot),
709
+ root: this.#currentRoot,
850
710
  want,
851
711
  nodes
852
712
  }
853
713
  ];
854
714
  }
855
- constructor(params) {
856
- _class_private_method_init2(this, _getData);
857
- _class_private_method_init2(this, _merge);
858
- _class_private_method_init2(this, _decode);
859
- _class_private_method_init2(this, _encode);
860
- _class_private_field_init2(this, _actor, {
861
- writable: true,
862
- value: void 0
863
- });
864
- _class_private_field_init2(this, _forest2, {
865
- writable: true,
866
- value: new Forest()
867
- });
868
- _class_private_field_init2(this, _currentRoot, {
869
- writable: true,
870
- value: void 0
871
- });
872
- _class_private_field_set2(this, _actor, params.actor);
873
- }
874
- };
875
- async function getData(key) {
876
- const res = await _class_private_field_get2(this, _forest2).get(_class_private_field_get2(this, _currentRoot), key);
877
- switch (res.kind) {
878
- case "present": {
879
- return _class_private_method_get2(this, _decode, decode).call(this, res.value);
715
+ async #getData(key) {
716
+ const res = await this.#forest.get(this.#currentRoot, key);
717
+ switch (res.kind) {
718
+ case "present": {
719
+ return this.#decode(res.value);
720
+ }
721
+ case "missing":
722
+ return void 0;
723
+ case "not-available":
724
+ throw new Error("Key not available");
880
725
  }
881
- case "missing":
882
- return void 0;
883
- case "not-available":
884
- throw new Error("Key not available");
885
726
  }
886
- }
887
- async function merge(key, left, right) {
888
- if (!left) {
889
- return right;
727
+ async #merge(key, left, right) {
728
+ if (!left) {
729
+ return right;
730
+ }
731
+ if (!right) {
732
+ return left;
733
+ }
734
+ const leftData = this.#decode(left);
735
+ const rightData = this.#decode(right);
736
+ const cmp = leftData.clock[1] === rightData.clock[1] ? leftData.clock[0].localeCompare(rightData.clock[0]) : leftData.clock[1] - rightData.clock[1];
737
+ if (cmp >= 0) {
738
+ return left;
739
+ } else {
740
+ return right;
741
+ }
890
742
  }
891
- if (!right) {
892
- return left;
743
+ #decode(value) {
744
+ return JSON.parse(textDecoder.decode(value));
893
745
  }
894
- const leftData = _class_private_method_get2(this, _decode, decode).call(this, left);
895
- const rightData = _class_private_method_get2(this, _decode, decode).call(this, right);
896
- const cmp = leftData.clock[1] === rightData.clock[1] ? leftData.clock[0].localeCompare(rightData.clock[0]) : leftData.clock[1] - rightData.clock[1];
897
- if (cmp >= 0) {
898
- return left;
899
- } else {
900
- return right;
746
+ #encode(data) {
747
+ const { clock, value } = data;
748
+ return textEncoder3.encode(JSON.stringify({
749
+ clock,
750
+ value
751
+ }));
901
752
  }
902
- }
903
- function decode(value) {
904
- return JSON.parse(textDecoder.decode(value));
905
- }
906
- function encode(data) {
907
- const { clock, value } = data;
908
- return textEncoder3.encode(JSON.stringify({
909
- clock,
910
- value
911
- }));
912
- }
753
+ };
913
754
  var initLWWTreeSyncState = () => ({
914
755
  remoteRoot: null,
915
756
  remoteWant: [],
@@ -920,82 +761,33 @@ var textEncoder3 = new TextEncoder();
920
761
 
921
762
  // src/mirror-multi-map.ts
922
763
  import { arraysEqual as arraysEqual2 } from "@dxos/util";
923
- function _check_private_redeclaration3(obj, privateCollection) {
924
- if (privateCollection.has(obj)) {
925
- throw new TypeError("Cannot initialize the same private elements twice on an object");
926
- }
927
- }
928
- function _class_apply_descriptor_get3(receiver, descriptor) {
929
- if (descriptor.get) {
930
- return descriptor.get.call(receiver);
931
- }
932
- return descriptor.value;
933
- }
934
- function _class_apply_descriptor_set3(receiver, descriptor, value) {
935
- if (descriptor.set) {
936
- descriptor.set.call(receiver, value);
937
- } else {
938
- if (!descriptor.writable) {
939
- throw new TypeError("attempted to set read only private field");
940
- }
941
- descriptor.value = value;
942
- }
943
- }
944
- function _class_extract_field_descriptor3(receiver, privateMap, action) {
945
- if (!privateMap.has(receiver)) {
946
- throw new TypeError("attempted to " + action + " private field on non-instance");
947
- }
948
- return privateMap.get(receiver);
949
- }
950
- function _class_private_field_get3(receiver, privateMap) {
951
- var descriptor = _class_extract_field_descriptor3(receiver, privateMap, "get");
952
- return _class_apply_descriptor_get3(receiver, descriptor);
953
- }
954
- function _class_private_field_init3(obj, privateMap, value) {
955
- _check_private_redeclaration3(obj, privateMap);
956
- privateMap.set(obj, value);
957
- }
958
- function _class_private_field_set3(receiver, privateMap, value) {
959
- var descriptor = _class_extract_field_descriptor3(receiver, privateMap, "set");
960
- _class_apply_descriptor_set3(receiver, descriptor, value);
961
- return value;
962
- }
963
- function _class_private_method_get3(receiver, privateSet, fn) {
964
- if (!privateSet.has(receiver)) {
965
- throw new TypeError("attempted to get private field on non-instance");
966
- }
967
- return fn;
968
- }
969
- function _class_private_method_init3(obj, privateSet) {
970
- _check_private_redeclaration3(obj, privateSet);
971
- privateSet.add(obj);
972
- }
973
- var _forest3 = /* @__PURE__ */ new WeakMap();
974
- var _actor2 = /* @__PURE__ */ new WeakMap();
975
- var _currentRoot2 = /* @__PURE__ */ new WeakMap();
976
- var _remoteStates = /* @__PURE__ */ new WeakMap();
977
- var _decode2 = /* @__PURE__ */ new WeakSet();
978
- var _encode2 = /* @__PURE__ */ new WeakSet();
979
764
  var MirrorMultiMap = class _MirrorMultiMap {
980
765
  static async new(params) {
981
766
  const tree = new _MirrorMultiMap(params);
982
- _class_private_field_set3(tree, _currentRoot2, await _class_private_field_get3(tree, _forest3).createTree([]));
767
+ tree.#currentRoot = await tree.#forest.createTree([]);
983
768
  return tree;
984
769
  }
770
+ #forest = new Forest();
771
+ #actor;
772
+ #currentRoot;
773
+ #remoteStates = /* @__PURE__ */ new Map();
774
+ constructor(params) {
775
+ this.#actor = params.actor;
776
+ }
985
777
  get localActorId() {
986
- return _class_private_field_get3(this, _actor2);
778
+ return this.#actor;
987
779
  }
988
780
  get currentRoot() {
989
- return _class_private_field_get3(this, _currentRoot2);
781
+ return this.#currentRoot;
990
782
  }
991
783
  get forest() {
992
- return _class_private_field_get3(this, _forest3);
784
+ return this.#forest;
993
785
  }
994
786
  async getLocal(key) {
995
- const entry = await _class_private_field_get3(this, _forest3).get(_class_private_field_get3(this, _currentRoot2), key);
787
+ const entry = await this.#forest.get(this.#currentRoot, key);
996
788
  switch (entry?.kind) {
997
789
  case "present":
998
- return _class_private_method_get3(this, _decode2, decode2).call(this, entry.value);
790
+ return this.#decode(entry.value);
999
791
  case "missing":
1000
792
  return void 0;
1001
793
  case "not-available":
@@ -1005,22 +797,22 @@ var MirrorMultiMap = class _MirrorMultiMap {
1005
797
  async setLocalBatch(pairs) {
1006
798
  const updates = pairs.map(([key, value]) => [
1007
799
  key,
1008
- _class_private_method_get3(this, _encode2, encode2).call(this, value)
800
+ this.#encode(value)
1009
801
  ]);
1010
- _class_private_field_set3(this, _currentRoot2, await _class_private_field_get3(this, _forest3).setBatch(_class_private_field_get3(this, _currentRoot2), updates));
802
+ this.#currentRoot = await this.#forest.setBatch(this.#currentRoot, updates);
1011
803
  }
1012
804
  async getFor(actorId, key) {
1013
- const state = _class_private_field_get3(this, _remoteStates).get(actorId);
805
+ const state = this.#remoteStates.get(actorId);
1014
806
  if (!state) {
1015
807
  throw new Error(`Unknown actorId: ${actorId}`);
1016
808
  }
1017
809
  if (!state.remoteRoot) {
1018
810
  return void 0;
1019
811
  }
1020
- const entry = await _class_private_field_get3(this, _forest3).get(state.remoteRoot, key);
812
+ const entry = await this.#forest.get(state.remoteRoot, key);
1021
813
  switch (entry?.kind) {
1022
814
  case "present":
1023
- return _class_private_method_get3(this, _decode2, decode2).call(this, entry.value);
815
+ return this.#decode(entry.value);
1024
816
  case "missing":
1025
817
  return void 0;
1026
818
  case "not-available":
@@ -1028,14 +820,14 @@ var MirrorMultiMap = class _MirrorMultiMap {
1028
820
  }
1029
821
  }
1030
822
  async setForBatch(actorId, pairs) {
1031
- const remoteState = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
823
+ const remoteState = this.#remoteStates.get(actorId) ?? initSyncState();
1032
824
  const updates = pairs.map(([key, value]) => [
1033
825
  key,
1034
- _class_private_method_get3(this, _encode2, encode2).call(this, value)
826
+ this.#encode(value)
1035
827
  ]);
1036
- const prevRoot = remoteState.remoteRoot ?? await _class_private_field_get3(this, _forest3).createTree([]);
1037
- const nextRoot = await _class_private_field_get3(this, _forest3).setBatch(prevRoot, updates);
1038
- _class_private_field_get3(this, _remoteStates).set(actorId, {
828
+ const prevRoot = remoteState.remoteRoot ?? await this.#forest.createTree([]);
829
+ const nextRoot = await this.#forest.setBatch(prevRoot, updates);
830
+ this.#remoteStates.set(actorId, {
1039
831
  remoteRoot: nextRoot,
1040
832
  myRoot: null,
1041
833
  remoteWant: remoteState.remoteWant,
@@ -1044,8 +836,8 @@ var MirrorMultiMap = class _MirrorMultiMap {
1044
836
  }
1045
837
  async getAll(key) {
1046
838
  const result = /* @__PURE__ */ new Map();
1047
- result.set(_class_private_field_get3(this, _actor2), await this.getLocal(key));
1048
- for (const [actorId, _state] of _class_private_field_get3(this, _remoteStates)) {
839
+ result.set(this.#actor, await this.getLocal(key));
840
+ for (const [actorId, _state] of this.#remoteStates) {
1049
841
  result.set(actorId, await this.getFor(actorId, key));
1050
842
  }
1051
843
  return result;
@@ -1053,20 +845,20 @@ var MirrorMultiMap = class _MirrorMultiMap {
1053
845
  async getDifferent() {
1054
846
  const resultByKey = /* @__PURE__ */ new Map();
1055
847
  const actors = /* @__PURE__ */ new Set([
1056
- _class_private_field_get3(this, _actor2),
1057
- ..._class_private_field_get3(this, _remoteStates).keys()
848
+ this.#actor,
849
+ ...this.#remoteStates.keys()
1058
850
  ]);
1059
851
  for (const actor of actors) {
1060
852
  let root;
1061
- if (actor === _class_private_field_get3(this, _actor2)) {
1062
- root = _class_private_field_get3(this, _currentRoot2);
853
+ if (actor === this.#actor) {
854
+ root = this.#currentRoot;
1063
855
  } else {
1064
- root = _class_private_field_get3(this, _remoteStates).get(actor)?.remoteRoot;
856
+ root = this.#remoteStates.get(actor)?.remoteRoot;
1065
857
  }
1066
858
  if (!root) {
1067
859
  continue;
1068
860
  }
1069
- for (const item of _class_private_field_get3(this, _forest3).items(root)) {
861
+ for (const item of this.#forest.items(root)) {
1070
862
  let subMap = resultByKey.get(item.key);
1071
863
  if (!subMap) {
1072
864
  subMap = /* @__PURE__ */ new Map();
@@ -1090,7 +882,7 @@ var MirrorMultiMap = class _MirrorMultiMap {
1090
882
  if (!allEqual) {
1091
883
  const resultSubMap = /* @__PURE__ */ new Map();
1092
884
  for (const [actorId, value] of subMap) {
1093
- resultSubMap.set(actorId, _class_private_method_get3(this, _decode2, decode2).call(this, value));
885
+ resultSubMap.set(actorId, this.#decode(value));
1094
886
  }
1095
887
  result.set(key, resultSubMap);
1096
888
  }
@@ -1098,11 +890,11 @@ var MirrorMultiMap = class _MirrorMultiMap {
1098
890
  return result;
1099
891
  }
1100
892
  clearActorState(actorId) {
1101
- _class_private_field_get3(this, _remoteStates).delete(actorId);
893
+ this.#remoteStates.delete(actorId);
1102
894
  }
1103
895
  async receiveSyncMessage(actorId, message) {
1104
- await _class_private_field_get3(this, _forest3).insertNodes(message.nodes);
1105
- const state = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
896
+ await this.#forest.insertNodes(message.nodes);
897
+ const state = this.#remoteStates.get(actorId) ?? initSyncState();
1106
898
  const remoteRoot = message.root ?? state.remoteRoot;
1107
899
  const newState = {
1108
900
  remoteRoot,
@@ -1110,58 +902,37 @@ var MirrorMultiMap = class _MirrorMultiMap {
1110
902
  remoteWant: message.want,
1111
903
  needsAck: message.nodes.length > 0
1112
904
  };
1113
- _class_private_field_get3(this, _remoteStates).set(actorId, newState);
905
+ this.#remoteStates.set(actorId, newState);
1114
906
  }
1115
907
  async generateSyncMessage(actorId) {
1116
- const state = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
1117
- if (state.myRoot === _class_private_field_get3(this, _currentRoot2) && state.remoteWant.length === 0 && !state.needsAck) {
908
+ const state = this.#remoteStates.get(actorId) ?? initSyncState();
909
+ if (state.myRoot === this.#currentRoot && state.remoteWant.length === 0 && !state.needsAck) {
1118
910
  return null;
1119
911
  }
1120
- const nodes = await _class_private_field_get3(this, _forest3).getNodes(state.remoteWant);
912
+ const nodes = await this.#forest.getNodes(state.remoteWant);
1121
913
  const want = state.remoteRoot === null ? [] : [
1122
- ...await _class_private_field_get3(this, _forest3).missingNodes(state.remoteRoot)
914
+ ...await this.#forest.missingNodes(state.remoteRoot)
1123
915
  ];
1124
- _class_private_field_get3(this, _remoteStates).set(actorId, {
916
+ this.#remoteStates.set(actorId, {
1125
917
  remoteRoot: state.remoteRoot,
1126
918
  myRoot: state.myRoot,
1127
919
  remoteWant: state.remoteWant,
1128
920
  needsAck: false
1129
921
  });
1130
922
  return {
1131
- root: _class_private_field_get3(this, _currentRoot2),
923
+ root: this.#currentRoot,
1132
924
  remoteRoot: state.remoteRoot,
1133
925
  want,
1134
926
  nodes
1135
927
  };
1136
928
  }
1137
- constructor(params) {
1138
- _class_private_method_init3(this, _decode2);
1139
- _class_private_method_init3(this, _encode2);
1140
- _class_private_field_init3(this, _forest3, {
1141
- writable: true,
1142
- value: new Forest()
1143
- });
1144
- _class_private_field_init3(this, _actor2, {
1145
- writable: true,
1146
- value: void 0
1147
- });
1148
- _class_private_field_init3(this, _currentRoot2, {
1149
- writable: true,
1150
- value: void 0
1151
- });
1152
- _class_private_field_init3(this, _remoteStates, {
1153
- writable: true,
1154
- value: /* @__PURE__ */ new Map()
1155
- });
1156
- _class_private_field_set3(this, _actor2, params.actor);
929
+ #decode(value) {
930
+ return JSON.parse(textDecoder2.decode(value));
931
+ }
932
+ #encode(data) {
933
+ return textEncoder4.encode(JSON.stringify(data));
1157
934
  }
1158
935
  };
1159
- function decode2(value) {
1160
- return JSON.parse(textDecoder2.decode(value));
1161
- }
1162
- function encode2(data) {
1163
- return textEncoder4.encode(JSON.stringify(data));
1164
- }
1165
936
  var initSyncState = () => ({
1166
937
  remoteRoot: null,
1167
938
  myRoot: null,