@dxos/merkle-search-tree 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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,77 +61,11 @@ 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
- }
127
64
  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();
134
65
  var Forest = class {
66
+ #nodes = /* @__PURE__ */ new Map();
67
+ itemHashOps = 0;
68
+ nodeHashOps = 0;
135
69
  async createTree(pairs) {
136
70
  const items = await Promise.all([
137
71
  ...pairs
@@ -144,7 +78,7 @@ var Forest = class {
144
78
  }
145
79
  }
146
80
  if (items.length === 0) {
147
- return _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], []);
81
+ return this.#makeNode(0, [], []);
148
82
  }
149
83
  const buildLevel = async (level, from, to) => {
150
84
  invariant(level >= 0, void 0, {
@@ -157,7 +91,7 @@ var Forest = class {
157
91
  ]
158
92
  });
159
93
  if (level === 0) {
160
- return _class_private_method_get(this, _makeNode, makeNode).call(this, 0, items.slice(from, to), []);
94
+ return this.#makeNode(0, items.slice(from, to), []);
161
95
  }
162
96
  let rangeBegin = from;
163
97
  const childItems = [];
@@ -174,7 +108,7 @@ var Forest = class {
174
108
  }
175
109
  }
176
110
  childNodes.push(await buildLevel(level - 1, rangeBegin, to));
177
- return _class_private_method_get(this, _makeNode, makeNode).call(this, level, childItems, childNodes);
111
+ return this.#makeNode(level, childItems, childNodes);
178
112
  };
179
113
  const maxLevel = Math.max(...items.map((item) => item.level));
180
114
  const root = await buildLevel(maxLevel, 0, items.length);
@@ -182,7 +116,7 @@ var Forest = class {
182
116
  }
183
117
  async get(root, key) {
184
118
  const keyLevel = await getKeyLevel(key);
185
- let node = _class_private_field_get(this, _nodes).get(root);
119
+ let node = this.#nodes.get(root);
186
120
  if (node !== void 0 && node.level < keyLevel) {
187
121
  return {
188
122
  kind: "missing"
@@ -205,7 +139,7 @@ var Forest = class {
205
139
  let found = false;
206
140
  for (let i = 0; i < node.items.length; i++) {
207
141
  if (node.items[i].key > key) {
208
- node = _class_private_field_get(this, _nodes).get(node.children[i]);
142
+ node = this.#nodes.get(node.children[i]);
209
143
  found = true;
210
144
  break;
211
145
  }
@@ -220,7 +154,7 @@ var Forest = class {
220
154
  ""
221
155
  ]
222
156
  });
223
- node = _class_private_field_get(this, _nodes).get(node.children[node.items.length]);
157
+ node = this.#nodes.get(node.children[node.items.length]);
224
158
  }
225
159
  }
226
160
  }
@@ -232,14 +166,14 @@ var Forest = class {
232
166
  if (digest1 === digest2) {
233
167
  return digest1;
234
168
  }
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);
169
+ const node1 = this.#requireNode(digest1);
170
+ const node2 = this.#requireNode(digest2);
237
171
  if (node2.level < node1.level) {
238
- return await this.merge(digest1, await _class_private_method_get(this, _makeNode, makeNode).call(this, node2.level + 1, [], [
172
+ return await this.merge(digest1, await this.#makeNode(node2.level + 1, [], [
239
173
  digest2
240
174
  ]), mergeFn);
241
175
  } else if (node1.level < node2.level) {
242
- return await this.merge(await _class_private_method_get(this, _makeNode, makeNode).call(this, node1.level + 1, [], [
176
+ return await this.merge(await this.#makeNode(node1.level + 1, [], [
243
177
  digest1
244
178
  ]), digest2, mergeFn);
245
179
  }
@@ -312,7 +246,7 @@ var Forest = class {
312
246
  if (node1.level > 0) {
313
247
  resultChildren.push(await this.merge(child1, child2, mergeFn));
314
248
  }
315
- resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, node1.items[i1], node2.items[i2]));
249
+ resultItems.push(await this.#mergeItem(mergeFn, node1.items[i1], node2.items[i2]));
316
250
  carry1 = null;
317
251
  carry2 = null;
318
252
  i1++;
@@ -327,9 +261,9 @@ var Forest = class {
327
261
  ""
328
262
  ]
329
263
  });
330
- resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, null, node2.items[i2]));
264
+ resultItems.push(await this.#mergeItem(mergeFn, null, node2.items[i2]));
331
265
  if (node1.level > 0) {
332
- const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, child1, key2);
266
+ const [left, right] = await this.#splitAtKey(child1, key2);
333
267
  resultChildren.push(await this.merge(left, child2, mergeFn));
334
268
  carry1 = right;
335
269
  carry2 = null;
@@ -345,9 +279,9 @@ var Forest = class {
345
279
  ""
346
280
  ]
347
281
  });
348
- resultItems.push(await _class_private_method_get(this, _mergeItem, mergeItem).call(this, mergeFn, node1.items[i1], null));
282
+ resultItems.push(await this.#mergeItem(mergeFn, node1.items[i1], null));
349
283
  if (node1.level > 0) {
350
- const [left, right] = await _class_private_method_get(this, _splitAtKey, splitAtKey).call(this, child2, key1);
284
+ const [left, right] = await this.#splitAtKey(child2, key1);
351
285
  resultChildren.push(await this.merge(child1, left, mergeFn));
352
286
  carry1 = null;
353
287
  carry2 = right;
@@ -360,7 +294,7 @@ var Forest = class {
360
294
  const child2 = carry2 !== null ? carry2 : node2.children[node2.items.length];
361
295
  resultChildren.push(await this.merge(child1, child2, mergeFn));
362
296
  }
363
- return await _class_private_method_get(this, _makeNode, makeNode).call(this, node1.level, resultItems, resultChildren);
297
+ return await this.#makeNode(node1.level, resultItems, resultChildren);
364
298
  }
365
299
  async setBatch(root, pairs) {
366
300
  const newTree = await this.createTree(pairs);
@@ -375,7 +309,7 @@ var Forest = class {
375
309
  ]);
376
310
  }
377
311
  *missingNodes(digest) {
378
- const node = _class_private_field_get(this, _nodes).get(digest);
312
+ const node = this.#nodes.get(digest);
379
313
  if (!node) {
380
314
  yield digest;
381
315
  } else {
@@ -388,7 +322,7 @@ var Forest = class {
388
322
  const result = [];
389
323
  for (const node of nodes) {
390
324
  const items = await Promise.all(node.items.map((item) => makeItem2(item.key, item.value)));
391
- const { digest } = await makeNode1(node.level, items, node.children);
325
+ const { digest } = await makeNode(node.level, items, node.children);
392
326
  invariant(digest === node.digest, void 0, {
393
327
  F: __dxlog_file,
394
328
  L: 218,
@@ -398,7 +332,7 @@ var Forest = class {
398
332
  ""
399
333
  ]
400
334
  });
401
- _class_private_field_get(this, _nodes).set(node.digest, {
335
+ this.#nodes.set(node.digest, {
402
336
  level: node.level,
403
337
  digest: node.digest,
404
338
  items,
@@ -411,7 +345,7 @@ var Forest = class {
411
345
  async getNodes(digests) {
412
346
  const result = [];
413
347
  for (const digest of digests) {
414
- const node = _class_private_field_get(this, _nodes).get(digest);
348
+ const node = this.#nodes.get(digest);
415
349
  if (!node) {
416
350
  continue;
417
351
  }
@@ -432,7 +366,7 @@ var Forest = class {
432
366
  }
433
367
  formatToString(digest, { pad = 0 } = {}) {
434
368
  const padStr = " ".repeat(pad);
435
- const node = _class_private_field_get(this, _nodes).get(digest);
369
+ const node = this.#nodes.get(digest);
436
370
  if (!node) {
437
371
  return `${padStr} o (${digest.slice(0, 8)}) NOT AVAILABLE`;
438
372
  }
@@ -458,7 +392,7 @@ var Forest = class {
458
392
  * Items iterator ordered by key.
459
393
  */
460
394
  *items(digest) {
461
- const node = _class_private_method_get(this, _requireNode, requireNode).call(this, digest);
395
+ const node = this.#requireNode(digest);
462
396
  for (let i = 0; i < node.items.length; i++) {
463
397
  if (node.level > 0) {
464
398
  yield* this.items(node.children[i]);
@@ -469,163 +403,140 @@ var Forest = class {
469
403
  yield* this.items(node.children[node.items.length]);
470
404
  }
471
405
  }
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()
480
- });
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
406
+ #requireNode(digest) {
407
+ invariant(validDigest(digest), void 0, {
408
+ F: __dxlog_file,
409
+ L: 295,
410
+ S: this,
411
+ A: [
412
+ "validDigest(digest)",
413
+ ""
414
+ ]
486
415
  });
416
+ const node = this.#nodes.get(digest);
417
+ if (!node) {
418
+ throw new Error(`Node not available: ${digest}`);
419
+ }
420
+ return node;
487
421
  }
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)) {
422
+ async #mergeItem(mergeFn, item1, item2) {
423
+ invariant(item1 !== null || item2 !== null, void 0, {
424
+ F: __dxlog_file,
425
+ L: 304,
426
+ S: this,
427
+ A: [
428
+ "item1 !== null || item2 !== null",
429
+ ""
430
+ ]
431
+ });
432
+ const key = item1?.key ?? item2?.key;
433
+ if (item1 !== null && item2 !== null && arraysEqual(item1.value, item2.value)) {
521
434
  return item1;
522
- } else if (item2 !== null && arraysEqual(item2.value, mergeResult)) {
523
- return item2;
524
435
  } else {
525
- this.itemHashOps++;
526
- return await makeItem2(key, mergeResult);
436
+ const mergeResult = await mergeFn(key, item1?.value ?? null, item2?.value ?? null);
437
+ if (item1 !== null && arraysEqual(item1.value, mergeResult)) {
438
+ return item1;
439
+ } else if (item2 !== null && arraysEqual(item2.value, mergeResult)) {
440
+ return item2;
441
+ } else {
442
+ this.itemHashOps++;
443
+ return await makeItem2(key, mergeResult);
444
+ }
527
445
  }
528
446
  }
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
- ];
447
+ #emptyNodeCache = void 0;
448
+ async #makeNode(level, items, children) {
449
+ invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
450
+ F: __dxlog_file,
451
+ L: 328,
452
+ S: this,
453
+ A: [
454
+ "level > 0 ? items.length + 1 === children.length : children.length === 0",
455
+ ""
456
+ ]
457
+ });
458
+ let node;
459
+ if (level === 0 && items.length === 0) {
460
+ node = await (this.#emptyNodeCache ??= makeNode(0, [], []));
461
+ } else {
462
+ node = await makeNode(level, items, children);
463
+ this.nodeHashOps++;
561
464
  }
562
- if (node.items[i].key > key) {
563
- splitIndex = i;
564
- break;
465
+ if (!this.#nodes.has(node.digest)) {
466
+ this.#nodes.set(node.digest, node);
565
467
  }
468
+ return node.digest;
566
469
  }
567
- if (node.level === 0) {
568
- if (splitIndex === 0) {
470
+ async #splitAtKey(digest, key) {
471
+ const node = this.#requireNode(digest);
472
+ let splitIndex = node.items.length;
473
+ for (let i = 0; i < node.items.length; i++) {
474
+ if (node.items[i].key === key) {
475
+ return [
476
+ await this.#makeNode(node.level, node.items.slice(0, i), node.children.slice(0, i + 1)),
477
+ await this.#makeNode(node.level, node.items.slice(i + 1), node.children.slice(i + 2))
478
+ ];
479
+ }
480
+ if (node.items[i].key > key) {
481
+ splitIndex = i;
482
+ break;
483
+ }
484
+ }
485
+ if (node.level === 0) {
486
+ if (splitIndex === 0) {
487
+ return [
488
+ await this.#makeNode(0, [], []),
489
+ digest
490
+ ];
491
+ } else if (splitIndex === node.items.length) {
492
+ return [
493
+ digest,
494
+ await this.#makeNode(0, [], [])
495
+ ];
496
+ }
569
497
  return [
570
- await _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], []),
571
- digest
498
+ await this.#makeNode(node.level, node.items.slice(0, splitIndex), []),
499
+ await this.#makeNode(node.level, node.items.slice(splitIndex), [])
572
500
  ];
573
- } else if (splitIndex === node.items.length) {
501
+ } else {
502
+ const [left, right] = await this.#splitAtKey(node.children[splitIndex], key);
574
503
  return [
575
- digest,
576
- await _class_private_method_get(this, _makeNode, makeNode).call(this, 0, [], [])
504
+ await this.#makeNode(node.level, node.items.slice(0, splitIndex), [
505
+ ...node.children.slice(0, splitIndex),
506
+ left
507
+ ]),
508
+ await this.#makeNode(node.level, node.items.slice(splitIndex), [
509
+ right,
510
+ ...node.children.slice(splitIndex + 1)
511
+ ])
577
512
  ];
578
513
  }
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
- ];
595
514
  }
596
- }
597
- var _forest = /* @__PURE__ */ new WeakMap();
598
- var _root = /* @__PURE__ */ new WeakMap();
515
+ };
599
516
  var TreeMut = class {
517
+ #forest;
518
+ #root;
519
+ constructor(forest, root) {
520
+ this.#forest = forest;
521
+ this.#root = root;
522
+ }
600
523
  get root() {
601
- return _class_private_field_get(this, _root);
524
+ return this.#root;
602
525
  }
603
526
  async get(key) {
604
- return _class_private_field_get(this, _forest).get(_class_private_field_get(this, _root), key);
527
+ return this.#forest.get(this.#root, key);
605
528
  }
606
529
  async setBatch(pairs) {
607
- _class_private_field_set(this, _root, await _class_private_field_get(this, _forest).setBatch(_class_private_field_get(this, _root), pairs));
530
+ this.#root = await this.#forest.setBatch(this.#root, pairs);
608
531
  }
609
532
  async set(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));
533
+ this.#root = await this.#forest.set(this.#root, key, value);
611
534
  }
612
535
  items() {
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);
536
+ return this.#forest.items(this.root);
626
537
  }
627
538
  };
628
- var makeNode1 = async (level, items, children) => {
539
+ var makeNode = async (level, items, children) => {
629
540
  invariant(level > 0 ? items.length + 1 === children.length : children.length === 0, void 0, {
630
541
  F: __dxlog_file,
631
542
  L: 479,
@@ -696,88 +607,37 @@ var textEncoder2 = new TextEncoder();
696
607
  var validDigest = (digest) => typeof digest === "string" && digest.length > 0;
697
608
 
698
609
  // 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();
756
610
  var LWWTree = class _LWWTree {
757
611
  static async new(params) {
758
612
  const tree = new _LWWTree(params);
759
- _class_private_field_set2(tree, _currentRoot, await _class_private_field_get2(tree, _forest2).createTree([]));
613
+ tree.#currentRoot = await tree.#forest.createTree([]);
760
614
  return tree;
761
615
  }
616
+ #actor;
617
+ #forest = new Forest();
618
+ #currentRoot;
762
619
  get currentRoot() {
763
- return _class_private_field_get2(this, _currentRoot);
620
+ return this.#currentRoot;
621
+ }
622
+ constructor(params) {
623
+ this.#actor = params.actor;
764
624
  }
765
625
  async get(key) {
766
- const data = await _class_private_method_get2(this, _getData, getData).call(this, key);
626
+ const data = await this.#getData(key);
767
627
  return data?.value;
768
628
  }
769
629
  async setBatch(pairs) {
770
- const prevDataBatch = await Promise.all(pairs.map(([key]) => _class_private_method_get2(this, _getData, getData).call(this, key)));
630
+ const prevDataBatch = await Promise.all(pairs.map(([key]) => this.#getData(key)));
771
631
  const updates = pairs.map(([key, value], i) => {
772
632
  const prevData = prevDataBatch[i];
773
633
  const newClock = !prevData ? [
774
- _class_private_field_get2(this, _actor),
634
+ this.#actor,
775
635
  0
776
636
  ] : [
777
- _class_private_field_get2(this, _actor),
637
+ this.#actor,
778
638
  prevData.clock[1] + 1
779
639
  ];
780
- const data = _class_private_method_get2(this, _encode, encode).call(this, {
640
+ const data = this.#encode({
781
641
  clock: newClock,
782
642
  value
783
643
  });
@@ -786,7 +646,7 @@ var LWWTree = class _LWWTree {
786
646
  data
787
647
  ];
788
648
  });
789
- _class_private_field_set2(this, _currentRoot, await _class_private_field_get2(this, _forest2).setBatch(_class_private_field_get2(this, _currentRoot), updates));
649
+ this.#currentRoot = await this.#forest.setBatch(this.#currentRoot, updates);
790
650
  }
791
651
  async set(key, value) {
792
652
  await this.setBatch([
@@ -797,25 +657,25 @@ var LWWTree = class _LWWTree {
797
657
  ]);
798
658
  }
799
659
  async receiveSyncMessage(state, message) {
800
- await _class_private_field_get2(this, _forest2).insertNodes(message.nodes);
660
+ await this.#forest.insertNodes(message.nodes);
801
661
  const remoteRoot = message.root ?? state.remoteRoot;
802
662
  if (remoteRoot !== null) {
803
663
  const missing = [
804
- ...await _class_private_field_get2(this, _forest2).missingNodes(remoteRoot)
664
+ ...await this.#forest.missingNodes(remoteRoot)
805
665
  ];
806
666
  if (missing.length === 0) {
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)));
667
+ this.#currentRoot = await this.#forest.merge(remoteRoot, this.#currentRoot, this.#merge.bind(this));
808
668
  } else if (state.remoteRoot !== null && state.remoteRoot !== remoteRoot) {
809
669
  const missingFromPrevRoot = [
810
- ...await _class_private_field_get2(this, _forest2).missingNodes(state.remoteRoot)
670
+ ...await this.#forest.missingNodes(state.remoteRoot)
811
671
  ];
812
672
  if (missingFromPrevRoot.length === 0) {
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));
673
+ await this.#forest.merge(state.remoteRoot, this.#currentRoot, this.#merge.bind(this));
814
674
  const missing2 = [
815
- ...await _class_private_field_get2(this, _forest2).missingNodes(remoteRoot)
675
+ ...await this.#forest.missingNodes(remoteRoot)
816
676
  ];
817
677
  if (missing2.length === 0) {
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)));
678
+ this.#currentRoot = await this.#forest.merge(remoteRoot, this.#currentRoot, this.#merge.bind(this));
819
679
  }
820
680
  }
821
681
  }
@@ -827,15 +687,15 @@ var LWWTree = class _LWWTree {
827
687
  };
828
688
  }
829
689
  async generateSyncMessage(state) {
830
- if (state.remoteRoot === _class_private_field_get2(this, _currentRoot) && state.remoteWant.length === 0 && !state.needsAck) {
690
+ if (state.remoteRoot === this.#currentRoot && state.remoteWant.length === 0 && !state.needsAck) {
831
691
  return [
832
692
  state,
833
693
  null
834
694
  ];
835
695
  }
836
- const nodes = await _class_private_field_get2(this, _forest2).getNodes(state.remoteWant);
696
+ const nodes = await this.#forest.getNodes(state.remoteWant);
837
697
  const want = state.remoteRoot === null ? [] : [
838
- ...await _class_private_field_get2(this, _forest2).missingNodes(state.remoteRoot)
698
+ ...await this.#forest.missingNodes(state.remoteRoot)
839
699
  ];
840
700
  return [
841
701
  {
@@ -844,70 +704,51 @@ var LWWTree = class _LWWTree {
844
704
  needsAck: false
845
705
  },
846
706
  {
847
- root: _class_private_field_get2(this, _currentRoot),
707
+ root: this.#currentRoot,
848
708
  want,
849
709
  nodes
850
710
  }
851
711
  ];
852
712
  }
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);
871
- }
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);
713
+ async #getData(key) {
714
+ const res = await this.#forest.get(this.#currentRoot, key);
715
+ switch (res.kind) {
716
+ case "present": {
717
+ return this.#decode(res.value);
718
+ }
719
+ case "missing":
720
+ return void 0;
721
+ case "not-available":
722
+ throw new Error("Key not available");
878
723
  }
879
- case "missing":
880
- return void 0;
881
- case "not-available":
882
- throw new Error("Key not available");
883
724
  }
884
- }
885
- async function merge(key, left, right) {
886
- if (!left) {
887
- return right;
725
+ async #merge(key, left, right) {
726
+ if (!left) {
727
+ return right;
728
+ }
729
+ if (!right) {
730
+ return left;
731
+ }
732
+ const leftData = this.#decode(left);
733
+ const rightData = this.#decode(right);
734
+ const cmp = leftData.clock[1] === rightData.clock[1] ? leftData.clock[0].localeCompare(rightData.clock[0]) : leftData.clock[1] - rightData.clock[1];
735
+ if (cmp >= 0) {
736
+ return left;
737
+ } else {
738
+ return right;
739
+ }
888
740
  }
889
- if (!right) {
890
- return left;
741
+ #decode(value) {
742
+ return JSON.parse(textDecoder.decode(value));
891
743
  }
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;
744
+ #encode(data) {
745
+ const { clock, value } = data;
746
+ return textEncoder3.encode(JSON.stringify({
747
+ clock,
748
+ value
749
+ }));
899
750
  }
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
- }
751
+ };
911
752
  var initLWWTreeSyncState = () => ({
912
753
  remoteRoot: null,
913
754
  remoteWant: [],
@@ -918,82 +759,33 @@ var textEncoder3 = new TextEncoder();
918
759
 
919
760
  // src/mirror-multi-map.ts
920
761
  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();
977
762
  var MirrorMultiMap = class _MirrorMultiMap {
978
763
  static async new(params) {
979
764
  const tree = new _MirrorMultiMap(params);
980
- _class_private_field_set3(tree, _currentRoot2, await _class_private_field_get3(tree, _forest3).createTree([]));
765
+ tree.#currentRoot = await tree.#forest.createTree([]);
981
766
  return tree;
982
767
  }
768
+ #forest = new Forest();
769
+ #actor;
770
+ #currentRoot;
771
+ #remoteStates = /* @__PURE__ */ new Map();
772
+ constructor(params) {
773
+ this.#actor = params.actor;
774
+ }
983
775
  get localActorId() {
984
- return _class_private_field_get3(this, _actor2);
776
+ return this.#actor;
985
777
  }
986
778
  get currentRoot() {
987
- return _class_private_field_get3(this, _currentRoot2);
779
+ return this.#currentRoot;
988
780
  }
989
781
  get forest() {
990
- return _class_private_field_get3(this, _forest3);
782
+ return this.#forest;
991
783
  }
992
784
  async getLocal(key) {
993
- const entry = await _class_private_field_get3(this, _forest3).get(_class_private_field_get3(this, _currentRoot2), key);
785
+ const entry = await this.#forest.get(this.#currentRoot, key);
994
786
  switch (entry?.kind) {
995
787
  case "present":
996
- return _class_private_method_get3(this, _decode2, decode2).call(this, entry.value);
788
+ return this.#decode(entry.value);
997
789
  case "missing":
998
790
  return void 0;
999
791
  case "not-available":
@@ -1003,22 +795,22 @@ var MirrorMultiMap = class _MirrorMultiMap {
1003
795
  async setLocalBatch(pairs) {
1004
796
  const updates = pairs.map(([key, value]) => [
1005
797
  key,
1006
- _class_private_method_get3(this, _encode2, encode2).call(this, value)
798
+ this.#encode(value)
1007
799
  ]);
1008
- _class_private_field_set3(this, _currentRoot2, await _class_private_field_get3(this, _forest3).setBatch(_class_private_field_get3(this, _currentRoot2), updates));
800
+ this.#currentRoot = await this.#forest.setBatch(this.#currentRoot, updates);
1009
801
  }
1010
802
  async getFor(actorId, key) {
1011
- const state = _class_private_field_get3(this, _remoteStates).get(actorId);
803
+ const state = this.#remoteStates.get(actorId);
1012
804
  if (!state) {
1013
805
  throw new Error(`Unknown actorId: ${actorId}`);
1014
806
  }
1015
807
  if (!state.remoteRoot) {
1016
808
  return void 0;
1017
809
  }
1018
- const entry = await _class_private_field_get3(this, _forest3).get(state.remoteRoot, key);
810
+ const entry = await this.#forest.get(state.remoteRoot, key);
1019
811
  switch (entry?.kind) {
1020
812
  case "present":
1021
- return _class_private_method_get3(this, _decode2, decode2).call(this, entry.value);
813
+ return this.#decode(entry.value);
1022
814
  case "missing":
1023
815
  return void 0;
1024
816
  case "not-available":
@@ -1026,14 +818,14 @@ var MirrorMultiMap = class _MirrorMultiMap {
1026
818
  }
1027
819
  }
1028
820
  async setForBatch(actorId, pairs) {
1029
- const remoteState = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
821
+ const remoteState = this.#remoteStates.get(actorId) ?? initSyncState();
1030
822
  const updates = pairs.map(([key, value]) => [
1031
823
  key,
1032
- _class_private_method_get3(this, _encode2, encode2).call(this, value)
824
+ this.#encode(value)
1033
825
  ]);
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, {
826
+ const prevRoot = remoteState.remoteRoot ?? await this.#forest.createTree([]);
827
+ const nextRoot = await this.#forest.setBatch(prevRoot, updates);
828
+ this.#remoteStates.set(actorId, {
1037
829
  remoteRoot: nextRoot,
1038
830
  myRoot: null,
1039
831
  remoteWant: remoteState.remoteWant,
@@ -1042,8 +834,8 @@ var MirrorMultiMap = class _MirrorMultiMap {
1042
834
  }
1043
835
  async getAll(key) {
1044
836
  const result = /* @__PURE__ */ new Map();
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)) {
837
+ result.set(this.#actor, await this.getLocal(key));
838
+ for (const [actorId, _state] of this.#remoteStates) {
1047
839
  result.set(actorId, await this.getFor(actorId, key));
1048
840
  }
1049
841
  return result;
@@ -1051,20 +843,20 @@ var MirrorMultiMap = class _MirrorMultiMap {
1051
843
  async getDifferent() {
1052
844
  const resultByKey = /* @__PURE__ */ new Map();
1053
845
  const actors = /* @__PURE__ */ new Set([
1054
- _class_private_field_get3(this, _actor2),
1055
- ..._class_private_field_get3(this, _remoteStates).keys()
846
+ this.#actor,
847
+ ...this.#remoteStates.keys()
1056
848
  ]);
1057
849
  for (const actor of actors) {
1058
850
  let root;
1059
- if (actor === _class_private_field_get3(this, _actor2)) {
1060
- root = _class_private_field_get3(this, _currentRoot2);
851
+ if (actor === this.#actor) {
852
+ root = this.#currentRoot;
1061
853
  } else {
1062
- root = _class_private_field_get3(this, _remoteStates).get(actor)?.remoteRoot;
854
+ root = this.#remoteStates.get(actor)?.remoteRoot;
1063
855
  }
1064
856
  if (!root) {
1065
857
  continue;
1066
858
  }
1067
- for (const item of _class_private_field_get3(this, _forest3).items(root)) {
859
+ for (const item of this.#forest.items(root)) {
1068
860
  let subMap = resultByKey.get(item.key);
1069
861
  if (!subMap) {
1070
862
  subMap = /* @__PURE__ */ new Map();
@@ -1088,7 +880,7 @@ var MirrorMultiMap = class _MirrorMultiMap {
1088
880
  if (!allEqual) {
1089
881
  const resultSubMap = /* @__PURE__ */ new Map();
1090
882
  for (const [actorId, value] of subMap) {
1091
- resultSubMap.set(actorId, _class_private_method_get3(this, _decode2, decode2).call(this, value));
883
+ resultSubMap.set(actorId, this.#decode(value));
1092
884
  }
1093
885
  result.set(key, resultSubMap);
1094
886
  }
@@ -1096,11 +888,11 @@ var MirrorMultiMap = class _MirrorMultiMap {
1096
888
  return result;
1097
889
  }
1098
890
  clearActorState(actorId) {
1099
- _class_private_field_get3(this, _remoteStates).delete(actorId);
891
+ this.#remoteStates.delete(actorId);
1100
892
  }
1101
893
  async receiveSyncMessage(actorId, message) {
1102
- await _class_private_field_get3(this, _forest3).insertNodes(message.nodes);
1103
- const state = _class_private_field_get3(this, _remoteStates).get(actorId) ?? initSyncState();
894
+ await this.#forest.insertNodes(message.nodes);
895
+ const state = this.#remoteStates.get(actorId) ?? initSyncState();
1104
896
  const remoteRoot = message.root ?? state.remoteRoot;
1105
897
  const newState = {
1106
898
  remoteRoot,
@@ -1108,58 +900,37 @@ var MirrorMultiMap = class _MirrorMultiMap {
1108
900
  remoteWant: message.want,
1109
901
  needsAck: message.nodes.length > 0
1110
902
  };
1111
- _class_private_field_get3(this, _remoteStates).set(actorId, newState);
903
+ this.#remoteStates.set(actorId, newState);
1112
904
  }
1113
905
  async generateSyncMessage(actorId) {
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) {
906
+ const state = this.#remoteStates.get(actorId) ?? initSyncState();
907
+ if (state.myRoot === this.#currentRoot && state.remoteWant.length === 0 && !state.needsAck) {
1116
908
  return null;
1117
909
  }
1118
- const nodes = await _class_private_field_get3(this, _forest3).getNodes(state.remoteWant);
910
+ const nodes = await this.#forest.getNodes(state.remoteWant);
1119
911
  const want = state.remoteRoot === null ? [] : [
1120
- ...await _class_private_field_get3(this, _forest3).missingNodes(state.remoteRoot)
912
+ ...await this.#forest.missingNodes(state.remoteRoot)
1121
913
  ];
1122
- _class_private_field_get3(this, _remoteStates).set(actorId, {
914
+ this.#remoteStates.set(actorId, {
1123
915
  remoteRoot: state.remoteRoot,
1124
916
  myRoot: state.myRoot,
1125
917
  remoteWant: state.remoteWant,
1126
918
  needsAck: false
1127
919
  });
1128
920
  return {
1129
- root: _class_private_field_get3(this, _currentRoot2),
921
+ root: this.#currentRoot,
1130
922
  remoteRoot: state.remoteRoot,
1131
923
  want,
1132
924
  nodes
1133
925
  };
1134
926
  }
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);
927
+ #decode(value) {
928
+ return JSON.parse(textDecoder2.decode(value));
929
+ }
930
+ #encode(data) {
931
+ return textEncoder4.encode(JSON.stringify(data));
1155
932
  }
1156
933
  };
1157
- function decode2(value) {
1158
- return JSON.parse(textDecoder2.decode(value));
1159
- }
1160
- function encode2(data) {
1161
- return textEncoder4.encode(JSON.stringify(data));
1162
- }
1163
934
  var initSyncState = () => ({
1164
935
  remoteRoot: null,
1165
936
  myRoot: null,