@dxos/merkle-search-tree 0.8.4-main.b97322e → 0.8.4-main.dedc0f3

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