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

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,15 +63,77 @@ 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
+ }
66
129
  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();
67
136
  var Forest = class {
68
- constructor() {
69
- this.#nodes = /* @__PURE__ */ new Map();
70
- this.itemHashOps = 0;
71
- this.nodeHashOps = 0;
72
- this.#emptyNodeCache = void 0;
73
- }
74
- #nodes;
75
137
  async createTree(pairs) {
76
138
  const items = await Promise.all([
77
139
  ...pairs
@@ -84,7 +146,7 @@ var Forest = class {
84
146
  }
85
147
  }
86
148
  if (items.length === 0) {
87
- return this.#makeNode(0, [], []);
149
+ return _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], []);
88
150
  }
89
151
  const buildLevel = async (level, from, to) => {
90
152
  invariant(level >= 0, void 0, {
@@ -97,7 +159,7 @@ var Forest = class {
97
159
  ]
98
160
  });
99
161
  if (level === 0) {
100
- return this.#makeNode(0, items.slice(from, to), []);
162
+ return _class_private_method_get(this, _makeNode, makeNode).call(this, 0, items.slice(from, to), []);
101
163
  }
102
164
  let rangeBegin = from;
103
165
  const childItems = [];
@@ -114,7 +176,7 @@ var Forest = class {
114
176
  }
115
177
  }
116
178
  childNodes.push(await buildLevel(level - 1, rangeBegin, to));
117
- return this.#makeNode(level, childItems, childNodes);
179
+ return _class_private_method_get(this, _makeNode, makeNode).call(this, level, childItems, childNodes);
118
180
  };
119
181
  const maxLevel = Math.max(...items.map((item) => item.level));
120
182
  const root = await buildLevel(maxLevel, 0, items.length);
@@ -122,7 +184,7 @@ var Forest = class {
122
184
  }
123
185
  async get(root, key) {
124
186
  const keyLevel = await getKeyLevel(key);
125
- let node = this.#nodes.get(root);
187
+ let node = _class_private_field_get(this, _nodes).get(root);
126
188
  if (node !== void 0 && node.level < keyLevel) {
127
189
  return {
128
190
  kind: "missing"
@@ -145,7 +207,7 @@ var Forest = class {
145
207
  let found = false;
146
208
  for (let i = 0; i < node.items.length; i++) {
147
209
  if (node.items[i].key > key) {
148
- node = this.#nodes.get(node.children[i]);
210
+ node = _class_private_field_get(this, _nodes).get(node.children[i]);
149
211
  found = true;
150
212
  break;
151
213
  }
@@ -160,7 +222,7 @@ var Forest = class {
160
222
  ""
161
223
  ]
162
224
  });
163
- node = this.#nodes.get(node.children[node.items.length]);
225
+ node = _class_private_field_get(this, _nodes).get(node.children[node.items.length]);
164
226
  }
165
227
  }
166
228
  }
@@ -172,14 +234,14 @@ var Forest = class {
172
234
  if (digest1 === digest2) {
173
235
  return digest1;
174
236
  }
175
- const node1 = this.#requireNode(digest1);
176
- const node2 = this.#requireNode(digest2);
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);
177
239
  if (node2.level < node1.level) {
178
- return await this.merge(digest1, await this.#makeNode(node2.level + 1, [], [
240
+ return await this.merge(digest1, await _class_private_method_get(this, _makeNode, makeNode).call(this, node2.level + 1, [], [
179
241
  digest2
180
242
  ]), mergeFn);
181
243
  } else if (node1.level < node2.level) {
182
- return await this.merge(await this.#makeNode(node1.level + 1, [], [
244
+ return await this.merge(await _class_private_method_get(this, _makeNode, makeNode).call(this, node1.level + 1, [], [
183
245
  digest1
184
246
  ]), digest2, mergeFn);
185
247
  }
@@ -252,7 +314,7 @@ var Forest = class {
252
314
  if (node1.level > 0) {
253
315
  resultChildren.push(await this.merge(child1, child2, mergeFn));
254
316
  }
255
- resultItems.push(await this.#mergeItem(mergeFn, node1.items[i1], node2.items[i2]));
317
+ resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, node1.items[i1], node2.items[i2]));
256
318
  carry1 = null;
257
319
  carry2 = null;
258
320
  i1++;
@@ -267,9 +329,9 @@ var Forest = class {
267
329
  ""
268
330
  ]
269
331
  });
270
- resultItems.push(await this.#mergeItem(mergeFn, null, node2.items[i2]));
332
+ resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, null, node2.items[i2]));
271
333
  if (node1.level > 0) {
272
- const [left, right] = await this.#splitAtKey(child1, key2);
334
+ const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, child1, key2);
273
335
  resultChildren.push(await this.merge(left, child2, mergeFn));
274
336
  carry1 = right;
275
337
  carry2 = null;
@@ -285,9 +347,9 @@ var Forest = class {
285
347
  ""
286
348
  ]
287
349
  });
288
- resultItems.push(await this.#mergeItem(mergeFn, node1.items[i1], null));
350
+ resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, node1.items[i1], null));
289
351
  if (node1.level > 0) {
290
- const [left, right] = await this.#splitAtKey(child2, key1);
352
+ const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, child2, key1);
291
353
  resultChildren.push(await this.merge(child1, left, mergeFn));
292
354
  carry1 = null;
293
355
  carry2 = right;
@@ -300,7 +362,7 @@ var Forest = class {
300
362
  const child2 = carry2 !== null ? carry2 : node2.children[node2.items.length];
301
363
  resultChildren.push(await this.merge(child1, child2, mergeFn));
302
364
  }
303
- return await this.#makeNode(node1.level, resultItems, resultChildren);
365
+ return await _class_private_method_get(this, _makeNode, makeNode).call(this, node1.level, resultItems, resultChildren);
304
366
  }
305
367
  async setBatch(root, pairs) {
306
368
  const newTree = await this.createTree(pairs);
@@ -315,7 +377,7 @@ var Forest = class {
315
377
  ]);
316
378
  }
317
379
  *missingNodes(digest) {
318
- const node = this.#nodes.get(digest);
380
+ const node = _class_private_field_get(this, _nodes).get(digest);
319
381
  if (!node) {
320
382
  yield digest;
321
383
  } else {
@@ -328,7 +390,7 @@ var Forest = class {
328
390
  const result = [];
329
391
  for (const node of nodes) {
330
392
  const items = await Promise.all(node.items.map((item) => makeItem2(item.key, item.value)));
331
- const { digest } = await makeNode(node.level, items, node.children);
393
+ const { digest } = await makeNode1(node.level, items, node.children);
332
394
  invariant(digest === node.digest, void 0, {
333
395
  F: __dxlog_file,
334
396
  L: 218,
@@ -338,7 +400,7 @@ var Forest = class {
338
400
  ""
339
401
  ]
340
402
  });
341
- this.#nodes.set(node.digest, {
403
+ _class_private_field_get(this, _nodes).set(node.digest, {
342
404
  level: node.level,
343
405
  digest: node.digest,
344
406
  items,
@@ -351,7 +413,7 @@ var Forest = class {
351
413
  async getNodes(digests) {
352
414
  const result = [];
353
415
  for (const digest of digests) {
354
- const node = this.#nodes.get(digest);
416
+ const node = _class_private_field_get(this, _nodes).get(digest);
355
417
  if (!node) {
356
418
  continue;
357
419
  }
@@ -372,7 +434,7 @@ var Forest = class {
372
434
  }
373
435
  formatToString(digest, { pad = 0 } = {}) {
374
436
  const padStr = " ".repeat(pad);
375
- const node = this.#nodes.get(digest);
437
+ const node = _class_private_field_get(this, _nodes).get(digest);
376
438
  if (!node) {
377
439
  return `${padStr} o (${digest.slice(0, 8)}) NOT AVAILABLE`;
378
440
  }
@@ -398,7 +460,7 @@ var Forest = class {
398
460
  * Items iterator ordered by key.
399
461
  */
400
462
  *items(digest) {
401
- const node = this.#requireNode(digest);
463
+ const node = _class_private_method_get(this, _requireNode, requireNode).call(this, digest);
402
464
  for (let i = 0; i < node.items.length; i++) {
403
465
  if (node.level > 0) {
404
466
  yield* this.items(node.children[i]);
@@ -409,140 +471,163 @@ var Forest = class {
409
471
  yield* this.items(node.children[node.items.length]);
410
472
  }
411
473
  }
412
- #requireNode(digest) {
413
- invariant(validDigest(digest), void 0, {
414
- F: __dxlog_file,
415
- L: 295,
416
- S: this,
417
- A: [
418
- "validDigest(digest)",
419
- ""
420
- ]
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()
421
482
  });
422
- const node = this.#nodes.get(digest);
423
- if (!node) {
424
- throw new Error(`Node not available: ${digest}`);
425
- }
426
- return node;
427
- }
428
- async #mergeItem(mergeFn, item1, item2) {
429
- invariant(item1 !== null || item2 !== null, void 0, {
430
- F: __dxlog_file,
431
- L: 304,
432
- S: this,
433
- A: [
434
- "item1 !== null || item2 !== null",
435
- ""
436
- ]
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
437
488
  });
438
- const key = item1?.key ?? item2?.key;
439
- if (item1 !== null && item2 !== null && arraysEqual(item1.value, item2.value)) {
489
+ }
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)) {
440
523
  return item1;
524
+ } else if (item2 !== null && arraysEqual(item2.value, mergeResult)) {
525
+ return item2;
441
526
  } else {
442
- const mergeResult = await mergeFn(key, item1?.value ?? null, item2?.value ?? null);
443
- if (item1 !== null && arraysEqual(item1.value, mergeResult)) {
444
- return item1;
445
- } else if (item2 !== null && arraysEqual(item2.value, mergeResult)) {
446
- return item2;
447
- } else {
448
- this.itemHashOps++;
449
- return await makeItem2(key, mergeResult);
450
- }
527
+ this.itemHashOps++;
528
+ return await makeItem2(key, mergeResult);
451
529
  }
452
530
  }
453
- #emptyNodeCache;
454
- async #makeNode(level, items, children) {
455
- invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
456
- F: __dxlog_file,
457
- L: 328,
458
- S: this,
459
- A: [
460
- "level > 0 ? items.length + 1 === children.length : children.length === 0",
461
- ""
462
- ]
463
- });
464
- let node;
465
- if (level === 0 && items.length === 0) {
466
- node = await (this.#emptyNodeCache ??= makeNode(0, [], []));
467
- } else {
468
- node = await makeNode(level, items, children);
469
- this.nodeHashOps++;
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
+ ];
470
563
  }
471
- if (!this.#nodes.has(node.digest)) {
472
- this.#nodes.set(node.digest, node);
564
+ if (node.items[i].key > key) {
565
+ splitIndex = i;
566
+ break;
473
567
  }
474
- return node.digest;
475
568
  }
476
- async #splitAtKey(digest, key) {
477
- const node = this.#requireNode(digest);
478
- let splitIndex = node.items.length;
479
- for (let i = 0; i < node.items.length; i++) {
480
- if (node.items[i].key === key) {
481
- return [
482
- await this.#makeNode(node.level, node.items.slice(0, i), node.children.slice(0, i + 1)),
483
- await this.#makeNode(node.level, node.items.slice(i + 1), node.children.slice(i + 2))
484
- ];
485
- }
486
- if (node.items[i].key > key) {
487
- splitIndex = i;
488
- break;
489
- }
490
- }
491
- if (node.level === 0) {
492
- if (splitIndex === 0) {
493
- return [
494
- await this.#makeNode(0, [], []),
495
- digest
496
- ];
497
- } else if (splitIndex === node.items.length) {
498
- return [
499
- digest,
500
- await this.#makeNode(0, [], [])
501
- ];
502
- }
569
+ if (node.level === 0) {
570
+ if (splitIndex === 0) {
503
571
  return [
504
- await this.#makeNode(node.level, node.items.slice(0, splitIndex), []),
505
- await this.#makeNode(node.level, node.items.slice(splitIndex), [])
572
+ await _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], []),
573
+ digest
506
574
  ];
507
- } else {
508
- const [left, right] = await this.#splitAtKey(node.children[splitIndex], key);
575
+ } else if (splitIndex === node.items.length) {
509
576
  return [
510
- await this.#makeNode(node.level, node.items.slice(0, splitIndex), [
511
- ...node.children.slice(0, splitIndex),
512
- left
513
- ]),
514
- await this.#makeNode(node.level, node.items.slice(splitIndex), [
515
- right,
516
- ...node.children.slice(splitIndex + 1)
517
- ])
577
+ digest,
578
+ await _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], [])
518
579
  ];
519
580
  }
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
+ ];
520
597
  }
521
- };
598
+ }
599
+ var _forest = /* @__PURE__ */ new WeakMap();
600
+ var _root = /* @__PURE__ */ new WeakMap();
522
601
  var TreeMut = class {
523
- #forest;
524
- #root;
525
- constructor(forest, root) {
526
- this.#forest = forest;
527
- this.#root = root;
528
- }
529
602
  get root() {
530
- return this.#root;
603
+ return _class_private_field_get(this, _root);
531
604
  }
532
605
  async get(key) {
533
- return this.#forest.get(this.#root, key);
606
+ return _class_private_field_get(this, _forest).get(_class_private_field_get(this, _root), key);
534
607
  }
535
608
  async setBatch(pairs) {
536
- this.#root = await this.#forest.setBatch(this.#root, pairs);
609
+ _class_private_field_set(this, _root, await _class_private_field_get(this, _forest).setBatch(_class_private_field_get(this, _root), pairs));
537
610
  }
538
611
  async set(key, value) {
539
- this.#root = await this.#forest.set(this.#root, 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));
540
613
  }
541
614
  items() {
542
- return this.#forest.items(this.root);
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);
543
628
  }
544
629
  };
545
- var makeNode = async (level, items, children) => {
630
+ var makeNode1 = async (level, items, children) => {
546
631
  invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
547
632
  F: __dxlog_file,
548
633
  L: 479,
@@ -613,37 +698,88 @@ var textEncoder2 = new TextEncoder();
613
698
  var validDigest = (digest) => typeof digest === "string" && digest.length > 0;
614
699
 
615
700
  // 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();
616
758
  var LWWTree = class _LWWTree {
617
759
  static async new(params) {
618
760
  const tree = new _LWWTree(params);
619
- tree.#currentRoot = await tree.#forest.createTree([]);
761
+ _class_private_field_set2(tree, _currentRoot, await _class_private_field_get2(tree, _forest2).createTree([]));
620
762
  return tree;
621
763
  }
622
- #actor;
623
- #forest = new Forest();
624
- #currentRoot;
625
764
  get currentRoot() {
626
- return this.#currentRoot;
627
- }
628
- constructor(params) {
629
- this.#actor = params.actor;
765
+ return _class_private_field_get2(this, _currentRoot);
630
766
  }
631
767
  async get(key) {
632
- const data = await this.#getData(key);
768
+ const data = await _class_private_method_get2(this, _getData, getData).call(this, key);
633
769
  return data?.value;
634
770
  }
635
771
  async setBatch(pairs) {
636
- const prevDataBatch = await Promise.all(pairs.map(([key]) => this.#getData(key)));
772
+ const prevDataBatch = await Promise.all(pairs.map(([key]) => _class_private_method_get2(this, _getData, getData).call(this, key)));
637
773
  const updates = pairs.map(([key, value], i) => {
638
774
  const prevData = prevDataBatch[i];
639
775
  const newClock = !prevData ? [
640
- this.#actor,
776
+ _class_private_field_get2(this, _actor),
641
777
  0
642
778
  ] : [
643
- this.#actor,
779
+ _class_private_field_get2(this, _actor),
644
780
  prevData.clock[1] + 1
645
781
  ];
646
- const data = this.#encode({
782
+ const data = _class_private_method_get2(this, _encode, encode).call(this, {
647
783
  clock: newClock,
648
784
  value
649
785
  });
@@ -652,7 +788,7 @@ var LWWTree = class _LWWTree {
652
788
  data
653
789
  ];
654
790
  });
655
- this.#currentRoot = await this.#forest.setBatch(this.#currentRoot, updates);
791
+ _class_private_field_set2(this, _currentRoot, await _class_private_field_get2(this, _forest2).setBatch(_class_private_field_get2(this, _currentRoot), updates));
656
792
  }
657
793
  async set(key, value) {
658
794
  await this.setBatch([
@@ -663,25 +799,25 @@ var LWWTree = class _LWWTree {
663
799
  ]);
664
800
  }
665
801
  async receiveSyncMessage(state, message) {
666
- await this.#forest.insertNodes(message.nodes);
802
+ await _class_private_field_get2(this, _forest2).insertNodes(message.nodes);
667
803
  const remoteRoot = message.root ?? state.remoteRoot;
668
804
  if (remoteRoot !== null) {
669
805
  const missing = [
670
- ...await this.#forest.missingNodes(remoteRoot)
806
+ ...await _class_private_field_get2(this, _forest2).missingNodes(remoteRoot)
671
807
  ];
672
808
  if (missing.length === 0) {
673
- this.#currentRoot = await this.#forest.merge(remoteRoot, this.#currentRoot, this.#merge.bind(this));
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)));
674
810
  } else if (state.remoteRoot !== null && state.remoteRoot !== remoteRoot) {
675
811
  const missingFromPrevRoot = [
676
- ...await this.#forest.missingNodes(state.remoteRoot)
812
+ ...await _class_private_field_get2(this, _forest2).missingNodes(state.remoteRoot)
677
813
  ];
678
814
  if (missingFromPrevRoot.length === 0) {
679
- await this.#forest.merge(state.remoteRoot, this.#currentRoot, this.#merge.bind(this));
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));
680
816
  const missing2 = [
681
- ...await this.#forest.missingNodes(remoteRoot)
817
+ ...await _class_private_field_get2(this, _forest2).missingNodes(remoteRoot)
682
818
  ];
683
819
  if (missing2.length === 0) {
684
- this.#currentRoot = await this.#forest.merge(remoteRoot, this.#currentRoot, this.#merge.bind(this));
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)));
685
821
  }
686
822
  }
687
823
  }
@@ -693,15 +829,15 @@ var LWWTree = class _LWWTree {
693
829
  };
694
830
  }
695
831
  async generateSyncMessage(state) {
696
- if (state.remoteRoot === this.#currentRoot && state.remoteWant.length === 0 && !state.needsAck) {
832
+ if (state.remoteRoot === _class_private_field_get2(this, _currentRoot) && state.remoteWant.length === 0 && !state.needsAck) {
697
833
  return [
698
834
  state,
699
835
  null
700
836
  ];
701
837
  }
702
- const nodes = await this.#forest.getNodes(state.remoteWant);
838
+ const nodes = await _class_private_field_get2(this, _forest2).getNodes(state.remoteWant);
703
839
  const want = state.remoteRoot === null ? [] : [
704
- ...await this.#forest.missingNodes(state.remoteRoot)
840
+ ...await _class_private_field_get2(this, _forest2).missingNodes(state.remoteRoot)
705
841
  ];
706
842
  return [
707
843
  {
@@ -710,51 +846,70 @@ var LWWTree = class _LWWTree {
710
846
  needsAck: false
711
847
  },
712
848
  {
713
- root: this.#currentRoot,
849
+ root: _class_private_field_get2(this, _currentRoot),
714
850
  want,
715
851
  nodes
716
852
  }
717
853
  ];
718
854
  }
719
- async #getData(key) {
720
- const res = await this.#forest.get(this.#currentRoot, key);
721
- switch (res.kind) {
722
- case "present": {
723
- return this.#decode(res.value);
724
- }
725
- case "missing":
726
- return void 0;
727
- case "not-available":
728
- throw new Error("Key not available");
729
- }
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);
730
873
  }
731
- async #merge(key, left, right) {
732
- if (!left) {
733
- return right;
734
- }
735
- if (!right) {
736
- return left;
737
- }
738
- const leftData = this.#decode(left);
739
- const rightData = this.#decode(right);
740
- const cmp = leftData.clock[1] === rightData.clock[1] ? leftData.clock[0].localeCompare(rightData.clock[0]) : leftData.clock[1] - rightData.clock[1];
741
- if (cmp >= 0) {
742
- return left;
743
- } else {
744
- return right;
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);
745
880
  }
881
+ case "missing":
882
+ return void 0;
883
+ case "not-available":
884
+ throw new Error("Key not available");
746
885
  }
747
- #decode(value) {
748
- return JSON.parse(textDecoder.decode(value));
886
+ }
887
+ async function merge(key, left, right) {
888
+ if (!left) {
889
+ return right;
749
890
  }
750
- #encode(data) {
751
- const { clock, value } = data;
752
- return textEncoder3.encode(JSON.stringify({
753
- clock,
754
- value
755
- }));
891
+ if (!right) {
892
+ return left;
756
893
  }
757
- };
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;
901
+ }
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
+ }
758
913
  var initLWWTreeSyncState = () => ({
759
914
  remoteRoot: null,
760
915
  remoteWant: [],
@@ -765,33 +920,82 @@ var textEncoder3 = new TextEncoder();
765
920
 
766
921
  // src/mirror-multi-map.ts
767
922
  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();
768
979
  var MirrorMultiMap = class _MirrorMultiMap {
769
980
  static async new(params) {
770
981
  const tree = new _MirrorMultiMap(params);
771
- tree.#currentRoot = await tree.#forest.createTree([]);
982
+ _class_private_field_set3(tree, _currentRoot2, await _class_private_field_get3(tree, _forest3).createTree([]));
772
983
  return tree;
773
984
  }
774
- #forest = new Forest();
775
- #actor;
776
- #currentRoot;
777
- #remoteStates = /* @__PURE__ */ new Map();
778
- constructor(params) {
779
- this.#actor = params.actor;
780
- }
781
985
  get localActorId() {
782
- return this.#actor;
986
+ return _class_private_field_get3(this, _actor2);
783
987
  }
784
988
  get currentRoot() {
785
- return this.#currentRoot;
989
+ return _class_private_field_get3(this, _currentRoot2);
786
990
  }
787
991
  get forest() {
788
- return this.#forest;
992
+ return _class_private_field_get3(this, _forest3);
789
993
  }
790
994
  async getLocal(key) {
791
- const entry = await this.#forest.get(this.#currentRoot, key);
995
+ const entry = await _class_private_field_get3(this, _forest3).get(_class_private_field_get3(this, _currentRoot2), key);
792
996
  switch (entry?.kind) {
793
997
  case "present":
794
- return this.#decode(entry.value);
998
+ return _class_private_method_get3(this, _decode2, decode2).call(this, entry.value);
795
999
  case "missing":
796
1000
  return void 0;
797
1001
  case "not-available":
@@ -801,22 +1005,22 @@ var MirrorMultiMap = class _MirrorMultiMap {
801
1005
  async setLocalBatch(pairs) {
802
1006
  const updates = pairs.map(([key, value]) => [
803
1007
  key,
804
- this.#encode(value)
1008
+ _class_private_method_get3(this, _encode2, encode2).call(this, value)
805
1009
  ]);
806
- this.#currentRoot = await this.#forest.setBatch(this.#currentRoot, updates);
1010
+ _class_private_field_set3(this, _currentRoot2, await _class_private_field_get3(this, _forest3).setBatch(_class_private_field_get3(this, _currentRoot2), updates));
807
1011
  }
808
1012
  async getFor(actorId, key) {
809
- const state = this.#remoteStates.get(actorId);
1013
+ const state = _class_private_field_get3(this, _remoteStates).get(actorId);
810
1014
  if (!state) {
811
1015
  throw new Error(`Unknown actorId: ${actorId}`);
812
1016
  }
813
1017
  if (!state.remoteRoot) {
814
1018
  return void 0;
815
1019
  }
816
- const entry = await this.#forest.get(state.remoteRoot, key);
1020
+ const entry = await _class_private_field_get3(this, _forest3).get(state.remoteRoot, key);
817
1021
  switch (entry?.kind) {
818
1022
  case "present":
819
- return this.#decode(entry.value);
1023
+ return _class_private_method_get3(this, _decode2, decode2).call(this, entry.value);
820
1024
  case "missing":
821
1025
  return void 0;
822
1026
  case "not-available":
@@ -824,14 +1028,14 @@ var MirrorMultiMap = class _MirrorMultiMap {
824
1028
  }
825
1029
  }
826
1030
  async setForBatch(actorId, pairs) {
827
- const remoteState = this.#remoteStates.get(actorId) ?? initSyncState();
1031
+ const remoteState = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
828
1032
  const updates = pairs.map(([key, value]) => [
829
1033
  key,
830
- this.#encode(value)
1034
+ _class_private_method_get3(this, _encode2, encode2).call(this, value)
831
1035
  ]);
832
- const prevRoot = remoteState.remoteRoot ?? await this.#forest.createTree([]);
833
- const nextRoot = await this.#forest.setBatch(prevRoot, updates);
834
- this.#remoteStates.set(actorId, {
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, {
835
1039
  remoteRoot: nextRoot,
836
1040
  myRoot: null,
837
1041
  remoteWant: remoteState.remoteWant,
@@ -840,8 +1044,8 @@ var MirrorMultiMap = class _MirrorMultiMap {
840
1044
  }
841
1045
  async getAll(key) {
842
1046
  const result = /* @__PURE__ */ new Map();
843
- result.set(this.#actor, await this.getLocal(key));
844
- for (const [actorId, _state] of this.#remoteStates) {
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)) {
845
1049
  result.set(actorId, await this.getFor(actorId, key));
846
1050
  }
847
1051
  return result;
@@ -849,20 +1053,20 @@ var MirrorMultiMap = class _MirrorMultiMap {
849
1053
  async getDifferent() {
850
1054
  const resultByKey = /* @__PURE__ */ new Map();
851
1055
  const actors = /* @__PURE__ */ new Set([
852
- this.#actor,
853
- ...this.#remoteStates.keys()
1056
+ _class_private_field_get3(this, _actor2),
1057
+ ..._class_private_field_get3(this, _remoteStates).keys()
854
1058
  ]);
855
1059
  for (const actor of actors) {
856
1060
  let root;
857
- if (actor === this.#actor) {
858
- root = this.#currentRoot;
1061
+ if (actor === _class_private_field_get3(this, _actor2)) {
1062
+ root = _class_private_field_get3(this, _currentRoot2);
859
1063
  } else {
860
- root = this.#remoteStates.get(actor)?.remoteRoot;
1064
+ root = _class_private_field_get3(this, _remoteStates).get(actor)?.remoteRoot;
861
1065
  }
862
1066
  if (!root) {
863
1067
  continue;
864
1068
  }
865
- for (const item of this.#forest.items(root)) {
1069
+ for (const item of _class_private_field_get3(this, _forest3).items(root)) {
866
1070
  let subMap = resultByKey.get(item.key);
867
1071
  if (!subMap) {
868
1072
  subMap = /* @__PURE__ */ new Map();
@@ -886,7 +1090,7 @@ var MirrorMultiMap = class _MirrorMultiMap {
886
1090
  if (!allEqual) {
887
1091
  const resultSubMap = /* @__PURE__ */ new Map();
888
1092
  for (const [actorId, value] of subMap) {
889
- resultSubMap.set(actorId, this.#decode(value));
1093
+ resultSubMap.set(actorId, _class_private_method_get3(this, _decode2, decode2).call(this, value));
890
1094
  }
891
1095
  result.set(key, resultSubMap);
892
1096
  }
@@ -894,11 +1098,11 @@ var MirrorMultiMap = class _MirrorMultiMap {
894
1098
  return result;
895
1099
  }
896
1100
  clearActorState(actorId) {
897
- this.#remoteStates.delete(actorId);
1101
+ _class_private_field_get3(this, _remoteStates).delete(actorId);
898
1102
  }
899
1103
  async receiveSyncMessage(actorId, message) {
900
- await this.#forest.insertNodes(message.nodes);
901
- const state = this.#remoteStates.get(actorId) ?? initSyncState();
1104
+ await _class_private_field_get3(this, _forest3).insertNodes(message.nodes);
1105
+ const state = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
902
1106
  const remoteRoot = message.root ?? state.remoteRoot;
903
1107
  const newState = {
904
1108
  remoteRoot,
@@ -906,37 +1110,58 @@ var MirrorMultiMap = class _MirrorMultiMap {
906
1110
  remoteWant: message.want,
907
1111
  needsAck: message.nodes.length > 0
908
1112
  };
909
- this.#remoteStates.set(actorId, newState);
1113
+ _class_private_field_get3(this, _remoteStates).set(actorId, newState);
910
1114
  }
911
1115
  async generateSyncMessage(actorId) {
912
- const state = this.#remoteStates.get(actorId) ?? initSyncState();
913
- if (state.myRoot === this.#currentRoot && state.remoteWant.length === 0 && !state.needsAck) {
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) {
914
1118
  return null;
915
1119
  }
916
- const nodes = await this.#forest.getNodes(state.remoteWant);
1120
+ const nodes = await _class_private_field_get3(this, _forest3).getNodes(state.remoteWant);
917
1121
  const want = state.remoteRoot === null ? [] : [
918
- ...await this.#forest.missingNodes(state.remoteRoot)
1122
+ ...await _class_private_field_get3(this, _forest3).missingNodes(state.remoteRoot)
919
1123
  ];
920
- this.#remoteStates.set(actorId, {
1124
+ _class_private_field_get3(this, _remoteStates).set(actorId, {
921
1125
  remoteRoot: state.remoteRoot,
922
1126
  myRoot: state.myRoot,
923
1127
  remoteWant: state.remoteWant,
924
1128
  needsAck: false
925
1129
  });
926
1130
  return {
927
- root: this.#currentRoot,
1131
+ root: _class_private_field_get3(this, _currentRoot2),
928
1132
  remoteRoot: state.remoteRoot,
929
1133
  want,
930
1134
  nodes
931
1135
  };
932
1136
  }
933
- #decode(value) {
934
- return JSON.parse(textDecoder2.decode(value));
935
- }
936
- #encode(data) {
937
- return textEncoder4.encode(JSON.stringify(data));
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);
938
1157
  }
939
1158
  };
1159
+ function decode2(value) {
1160
+ return JSON.parse(textDecoder2.decode(value));
1161
+ }
1162
+ function encode2(data) {
1163
+ return textEncoder4.encode(JSON.stringify(data));
1164
+ }
940
1165
  var initSyncState = () => ({
941
1166
  remoteRoot: null,
942
1167
  myRoot: null,