@optimystic/db-core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +328 -0
- package/dist/index.min.js +18 -0
- package/dist/index.min.js.map +7 -0
- package/dist/src/blocks/block-store.d.ts +12 -0
- package/dist/src/blocks/block-store.d.ts.map +1 -0
- package/dist/src/blocks/block-store.js +2 -0
- package/dist/src/blocks/block-store.js.map +1 -0
- package/dist/src/blocks/block-types.d.ts +3 -0
- package/dist/src/blocks/block-types.d.ts.map +1 -0
- package/dist/src/blocks/block-types.js +9 -0
- package/dist/src/blocks/block-types.js.map +1 -0
- package/dist/src/blocks/helpers.d.ts +4 -0
- package/dist/src/blocks/helpers.d.ts.map +1 -0
- package/dist/src/blocks/helpers.js +12 -0
- package/dist/src/blocks/helpers.js.map +1 -0
- package/dist/src/blocks/index.d.ts +5 -0
- package/dist/src/blocks/index.d.ts.map +1 -0
- package/dist/src/blocks/index.js +5 -0
- package/dist/src/blocks/index.js.map +1 -0
- package/dist/src/blocks/structs.d.ts +14 -0
- package/dist/src/blocks/structs.d.ts.map +1 -0
- package/dist/src/blocks/structs.js +2 -0
- package/dist/src/blocks/structs.js.map +1 -0
- package/dist/src/btree/btree.d.ts +135 -0
- package/dist/src/btree/btree.d.ts.map +1 -0
- package/dist/src/btree/btree.js +727 -0
- package/dist/src/btree/btree.js.map +1 -0
- package/dist/src/btree/independent-trunk.d.ts +17 -0
- package/dist/src/btree/independent-trunk.d.ts.map +1 -0
- package/dist/src/btree/independent-trunk.js +41 -0
- package/dist/src/btree/independent-trunk.js.map +1 -0
- package/dist/src/btree/index.d.ts +6 -0
- package/dist/src/btree/index.d.ts.map +1 -0
- package/dist/src/btree/index.js +6 -0
- package/dist/src/btree/index.js.map +1 -0
- package/dist/src/btree/key-range.d.ts +13 -0
- package/dist/src/btree/key-range.d.ts.map +1 -0
- package/dist/src/btree/key-range.js +20 -0
- package/dist/src/btree/key-range.js.map +1 -0
- package/dist/src/btree/keyset.d.ts +4 -0
- package/dist/src/btree/keyset.d.ts.map +1 -0
- package/dist/src/btree/keyset.js +4 -0
- package/dist/src/btree/keyset.js.map +1 -0
- package/dist/src/btree/nodes.d.ts +16 -0
- package/dist/src/btree/nodes.d.ts.map +1 -0
- package/dist/src/btree/nodes.js +9 -0
- package/dist/src/btree/nodes.js.map +1 -0
- package/dist/src/btree/path.d.ts +22 -0
- package/dist/src/btree/path.d.ts.map +1 -0
- package/dist/src/btree/path.js +39 -0
- package/dist/src/btree/path.js.map +1 -0
- package/dist/src/btree/tree-block.d.ts +7 -0
- package/dist/src/btree/tree-block.d.ts.map +1 -0
- package/dist/src/btree/tree-block.js +5 -0
- package/dist/src/btree/tree-block.js.map +1 -0
- package/dist/src/btree/trunk.d.ts +13 -0
- package/dist/src/btree/trunk.d.ts.map +1 -0
- package/dist/src/btree/trunk.js +2 -0
- package/dist/src/btree/trunk.js.map +1 -0
- package/dist/src/chain/chain-nodes.d.ts +18 -0
- package/dist/src/chain/chain-nodes.d.ts.map +1 -0
- package/dist/src/chain/chain-nodes.js +10 -0
- package/dist/src/chain/chain-nodes.js.map +1 -0
- package/dist/src/chain/chain.d.ts +75 -0
- package/dist/src/chain/chain.d.ts.map +1 -0
- package/dist/src/chain/chain.js +268 -0
- package/dist/src/chain/chain.js.map +1 -0
- package/dist/src/chain/index.d.ts +2 -0
- package/dist/src/chain/index.d.ts.map +1 -0
- package/dist/src/chain/index.js +2 -0
- package/dist/src/chain/index.js.map +1 -0
- package/dist/src/cluster/i-cluster.d.ts +5 -0
- package/dist/src/cluster/i-cluster.d.ts.map +1 -0
- package/dist/src/cluster/i-cluster.js +2 -0
- package/dist/src/cluster/i-cluster.js.map +1 -0
- package/dist/src/cluster/index.d.ts +3 -0
- package/dist/src/cluster/index.d.ts.map +1 -0
- package/dist/src/cluster/index.js +3 -0
- package/dist/src/cluster/index.js.map +1 -0
- package/dist/src/cluster/structs.d.ts +47 -0
- package/dist/src/cluster/structs.d.ts.map +1 -0
- package/dist/src/cluster/structs.js +2 -0
- package/dist/src/cluster/structs.js.map +1 -0
- package/dist/src/collection/action.d.ts +26 -0
- package/dist/src/collection/action.d.ts.map +1 -0
- package/dist/src/collection/action.js +2 -0
- package/dist/src/collection/action.js.map +1 -0
- package/dist/src/collection/collection.d.ts +48 -0
- package/dist/src/collection/collection.d.ts.map +1 -0
- package/dist/src/collection/collection.js +175 -0
- package/dist/src/collection/collection.js.map +1 -0
- package/dist/src/collection/index.d.ts +4 -0
- package/dist/src/collection/index.d.ts.map +1 -0
- package/dist/src/collection/index.js +4 -0
- package/dist/src/collection/index.js.map +1 -0
- package/dist/src/collection/struct.d.ts +16 -0
- package/dist/src/collection/struct.d.ts.map +1 -0
- package/dist/src/collection/struct.js +2 -0
- package/dist/src/collection/struct.js.map +1 -0
- package/dist/src/collections/diary/diary.d.ts +9 -0
- package/dist/src/collections/diary/diary.d.ts.map +1 -0
- package/dist/src/collections/diary/diary.js +37 -0
- package/dist/src/collections/diary/diary.js.map +1 -0
- package/dist/src/collections/diary/index.d.ts +3 -0
- package/dist/src/collections/diary/index.d.ts.map +1 -0
- package/dist/src/collections/diary/index.js +3 -0
- package/dist/src/collections/diary/index.js.map +1 -0
- package/dist/src/collections/diary/struct.d.ts +2 -0
- package/dist/src/collections/diary/struct.d.ts.map +1 -0
- package/dist/src/collections/diary/struct.js +3 -0
- package/dist/src/collections/diary/struct.js.map +1 -0
- package/dist/src/collections/index.d.ts +3 -0
- package/dist/src/collections/index.d.ts.map +1 -0
- package/dist/src/collections/index.js +3 -0
- package/dist/src/collections/index.js.map +1 -0
- package/dist/src/collections/tree/collection-trunk.d.ts +11 -0
- package/dist/src/collections/tree/collection-trunk.d.ts.map +1 -0
- package/dist/src/collections/tree/collection-trunk.js +22 -0
- package/dist/src/collections/tree/collection-trunk.js.map +1 -0
- package/dist/src/collections/tree/index.d.ts +3 -0
- package/dist/src/collections/tree/index.d.ts.map +1 -0
- package/dist/src/collections/tree/index.js +3 -0
- package/dist/src/collections/tree/index.js.map +1 -0
- package/dist/src/collections/tree/struct.d.ts +12 -0
- package/dist/src/collections/tree/struct.d.ts.map +1 -0
- package/dist/src/collections/tree/struct.js +4 -0
- package/dist/src/collections/tree/struct.js.map +1 -0
- package/dist/src/collections/tree/tree.d.ts +34 -0
- package/dist/src/collections/tree/tree.d.ts.map +1 -0
- package/dist/src/collections/tree/tree.js +100 -0
- package/dist/src/collections/tree/tree.js.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/log/index.d.ts +3 -0
- package/dist/src/log/index.d.ts.map +1 -0
- package/dist/src/log/index.js +3 -0
- package/dist/src/log/index.js.map +1 -0
- package/dist/src/log/log.d.ts +57 -0
- package/dist/src/log/log.d.ts.map +1 -0
- package/dist/src/log/log.js +131 -0
- package/dist/src/log/log.js.map +1 -0
- package/dist/src/log/struct.d.ts +36 -0
- package/dist/src/log/struct.d.ts.map +1 -0
- package/dist/src/log/struct.js +3 -0
- package/dist/src/log/struct.js.map +1 -0
- package/dist/src/network/i-key-network.d.ts +21 -0
- package/dist/src/network/i-key-network.d.ts.map +1 -0
- package/dist/src/network/i-key-network.js +2 -0
- package/dist/src/network/i-key-network.js.map +1 -0
- package/dist/src/network/i-peer-network.d.ts +8 -0
- package/dist/src/network/i-peer-network.d.ts.map +1 -0
- package/dist/src/network/i-peer-network.js +2 -0
- package/dist/src/network/i-peer-network.js.map +1 -0
- package/dist/src/network/i-repo.d.ts +17 -0
- package/dist/src/network/i-repo.d.ts.map +1 -0
- package/dist/src/network/i-repo.js +2 -0
- package/dist/src/network/i-repo.js.map +1 -0
- package/dist/src/network/index.d.ts +6 -0
- package/dist/src/network/index.d.ts.map +1 -0
- package/dist/src/network/index.js +6 -0
- package/dist/src/network/index.js.map +1 -0
- package/dist/src/network/repo-protocol.d.ts +19 -0
- package/dist/src/network/repo-protocol.d.ts.map +1 -0
- package/dist/src/network/repo-protocol.js +2 -0
- package/dist/src/network/repo-protocol.js.map +1 -0
- package/dist/src/network/struct.d.ts +115 -0
- package/dist/src/network/struct.d.ts.map +1 -0
- package/dist/src/network/struct.js +2 -0
- package/dist/src/network/struct.js.map +1 -0
- package/dist/src/transaction/actions-engine.d.ts +37 -0
- package/dist/src/transaction/actions-engine.d.ts.map +1 -0
- package/dist/src/transaction/actions-engine.js +67 -0
- package/dist/src/transaction/actions-engine.js.map +1 -0
- package/dist/src/transaction/context.d.ts +60 -0
- package/dist/src/transaction/context.d.ts.map +1 -0
- package/dist/src/transaction/context.js +91 -0
- package/dist/src/transaction/context.js.map +1 -0
- package/dist/src/transaction/coordinator.d.ts +118 -0
- package/dist/src/transaction/coordinator.d.ts.map +1 -0
- package/dist/src/transaction/coordinator.js +417 -0
- package/dist/src/transaction/coordinator.js.map +1 -0
- package/dist/src/transaction/index.d.ts +10 -0
- package/dist/src/transaction/index.d.ts.map +1 -0
- package/dist/src/transaction/index.js +7 -0
- package/dist/src/transaction/index.js.map +1 -0
- package/dist/src/transaction/session.d.ts +80 -0
- package/dist/src/transaction/session.d.ts.map +1 -0
- package/dist/src/transaction/session.js +161 -0
- package/dist/src/transaction/session.js.map +1 -0
- package/dist/src/transaction/transaction.d.ts +156 -0
- package/dist/src/transaction/transaction.d.ts.map +1 -0
- package/dist/src/transaction/transaction.js +31 -0
- package/dist/src/transaction/transaction.js.map +1 -0
- package/dist/src/transaction/validator.d.ts +46 -0
- package/dist/src/transaction/validator.d.ts.map +1 -0
- package/dist/src/transaction/validator.js +97 -0
- package/dist/src/transaction/validator.js.map +1 -0
- package/dist/src/transactor/index.d.ts +4 -0
- package/dist/src/transactor/index.d.ts.map +1 -0
- package/dist/src/transactor/index.js +4 -0
- package/dist/src/transactor/index.js.map +1 -0
- package/dist/src/transactor/network-transactor.d.ts +36 -0
- package/dist/src/transactor/network-transactor.d.ts.map +1 -0
- package/dist/src/transactor/network-transactor.js +297 -0
- package/dist/src/transactor/network-transactor.js.map +1 -0
- package/dist/src/transactor/transactor-source.d.ts +24 -0
- package/dist/src/transactor/transactor-source.d.ts.map +1 -0
- package/dist/src/transactor/transactor-source.js +62 -0
- package/dist/src/transactor/transactor-source.js.map +1 -0
- package/dist/src/transactor/transactor.d.ts +38 -0
- package/dist/src/transactor/transactor.d.ts.map +1 -0
- package/dist/src/transactor/transactor.js +2 -0
- package/dist/src/transactor/transactor.js.map +1 -0
- package/dist/src/transform/atomic.d.ts +8 -0
- package/dist/src/transform/atomic.d.ts.map +1 -0
- package/dist/src/transform/atomic.js +14 -0
- package/dist/src/transform/atomic.js.map +1 -0
- package/dist/src/transform/cache-source.d.ts +13 -0
- package/dist/src/transform/cache-source.d.ts.map +1 -0
- package/dist/src/transform/cache-source.js +52 -0
- package/dist/src/transform/cache-source.js.map +1 -0
- package/dist/src/transform/helpers.d.ts +25 -0
- package/dist/src/transform/helpers.d.ts.map +1 -0
- package/dist/src/transform/helpers.js +105 -0
- package/dist/src/transform/helpers.js.map +1 -0
- package/dist/src/transform/index.d.ts +6 -0
- package/dist/src/transform/index.d.ts.map +1 -0
- package/dist/src/transform/index.js +6 -0
- package/dist/src/transform/index.js.map +1 -0
- package/dist/src/transform/struct.d.ts +19 -0
- package/dist/src/transform/struct.d.ts.map +1 -0
- package/dist/src/transform/struct.js +2 -0
- package/dist/src/transform/struct.js.map +1 -0
- package/dist/src/transform/tracker.d.ts +22 -0
- package/dist/src/transform/tracker.d.ts.map +1 -0
- package/dist/src/transform/tracker.js +64 -0
- package/dist/src/transform/tracker.js.map +1 -0
- package/dist/src/utility/actor.d.ts +11 -0
- package/dist/src/utility/actor.d.ts.map +1 -0
- package/dist/src/utility/actor.js +39 -0
- package/dist/src/utility/actor.js.map +1 -0
- package/dist/src/utility/batch-coordinator.d.ts +56 -0
- package/dist/src/utility/batch-coordinator.d.ts.map +1 -0
- package/dist/src/utility/batch-coordinator.js +127 -0
- package/dist/src/utility/batch-coordinator.js.map +1 -0
- package/dist/src/utility/block-id-to-bytes.d.ts +3 -0
- package/dist/src/utility/block-id-to-bytes.d.ts.map +1 -0
- package/dist/src/utility/block-id-to-bytes.js +7 -0
- package/dist/src/utility/block-id-to-bytes.js.map +1 -0
- package/dist/src/utility/ensured.d.ts +3 -0
- package/dist/src/utility/ensured.d.ts.map +1 -0
- package/dist/src/utility/ensured.js +24 -0
- package/dist/src/utility/ensured.js.map +1 -0
- package/dist/src/utility/groupby.d.ts +8 -0
- package/dist/src/utility/groupby.d.ts.map +1 -0
- package/dist/src/utility/groupby.js +15 -0
- package/dist/src/utility/groupby.js.map +1 -0
- package/dist/src/utility/is-record-empty.d.ts +3 -0
- package/dist/src/utility/is-record-empty.d.ts.map +1 -0
- package/dist/src/utility/is-record-empty.js +7 -0
- package/dist/src/utility/is-record-empty.js.map +1 -0
- package/dist/src/utility/latches.d.ts +11 -0
- package/dist/src/utility/latches.d.ts.map +1 -0
- package/dist/src/utility/latches.js +36 -0
- package/dist/src/utility/latches.js.map +1 -0
- package/dist/src/utility/nameof.d.ts +3 -0
- package/dist/src/utility/nameof.d.ts.map +1 -0
- package/dist/src/utility/nameof.js +5 -0
- package/dist/src/utility/nameof.js.map +1 -0
- package/dist/src/utility/pending.d.ts +13 -0
- package/dist/src/utility/pending.d.ts.map +1 -0
- package/dist/src/utility/pending.js +37 -0
- package/dist/src/utility/pending.js.map +1 -0
- package/package.json +56 -0
- package/src/blocks/block-store.ts +13 -0
- package/src/blocks/block-types.ts +11 -0
- package/src/blocks/helpers.ts +13 -0
- package/src/blocks/index.ts +5 -0
- package/src/blocks/structs.ts +17 -0
- package/src/btree/btree.ts +804 -0
- package/src/btree/independent-trunk.ts +54 -0
- package/src/btree/index.ts +5 -0
- package/src/btree/key-range.ts +15 -0
- package/src/btree/keyset.ts +6 -0
- package/src/btree/nodes.ts +25 -0
- package/src/btree/path.ts +37 -0
- package/src/btree/tree-block.ts +11 -0
- package/src/btree/trunk.ts +14 -0
- package/src/chain/chain-nodes.ts +24 -0
- package/src/chain/chain.ts +324 -0
- package/src/chain/index.ts +2 -0
- package/src/cluster/i-cluster.ts +6 -0
- package/src/cluster/index.ts +2 -0
- package/src/cluster/structs.ts +46 -0
- package/src/collection/action.ts +31 -0
- package/src/collection/collection.ts +200 -0
- package/src/collection/index.ts +3 -0
- package/src/collection/struct.ts +20 -0
- package/src/collections/diary/diary.ts +43 -0
- package/src/collections/diary/index.ts +2 -0
- package/src/collections/diary/struct.ts +3 -0
- package/src/collections/index.ts +2 -0
- package/src/collections/tree/collection-trunk.ts +25 -0
- package/src/collections/tree/index.ts +2 -0
- package/src/collections/tree/readme.md +19 -0
- package/src/collections/tree/struct.ts +18 -0
- package/src/collections/tree/tree.ts +124 -0
- package/src/index.ts +17 -0
- package/src/log/index.ts +2 -0
- package/src/log/log.ts +155 -0
- package/src/log/struct.ts +40 -0
- package/src/network/i-key-network.ts +24 -0
- package/src/network/i-peer-network.ts +8 -0
- package/src/network/i-repo.ts +19 -0
- package/src/network/index.ts +5 -0
- package/src/network/repo-protocol.ts +12 -0
- package/src/network/struct.ts +137 -0
- package/src/transaction/actions-engine.ts +83 -0
- package/src/transaction/context.ts +103 -0
- package/src/transaction/coordinator.ts +583 -0
- package/src/transaction/index.ts +30 -0
- package/src/transaction/session.ts +182 -0
- package/src/transaction/transaction.ts +205 -0
- package/src/transaction/validator.ts +150 -0
- package/src/transactor/index.ts +4 -0
- package/src/transactor/network-transactor.ts +435 -0
- package/src/transactor/transactor-source.ts +65 -0
- package/src/transactor/transactor.ts +44 -0
- package/src/transform/atomic.ts +16 -0
- package/src/transform/cache-source.ts +57 -0
- package/src/transform/helpers.ts +117 -0
- package/src/transform/index.ts +5 -0
- package/src/transform/struct.ts +22 -0
- package/src/transform/tracker.ts +70 -0
- package/src/utility/actor.ts +62 -0
- package/src/utility/batch-coordinator.ts +174 -0
- package/src/utility/block-id-to-bytes.ts +8 -0
- package/src/utility/ensured.ts +32 -0
- package/src/utility/groupby.ts +18 -0
- package/src/utility/is-record-empty.ts +5 -0
- package/src/utility/latches.ts +42 -0
- package/src/utility/nameof.ts +7 -0
- package/src/utility/pending.ts +41 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Log, Atomic, Tracker, copyTransforms, CacheSource, isTransformsEmpty, TransactorSource, blockIdsForTransforms, transformsFromTransform } from "../index.js";
|
|
2
|
+
import { randomBytes } from '@libp2p/crypto';
|
|
3
|
+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
4
|
+
import { Latches } from "../utility/latches.js";
|
|
5
|
+
const PendingRetryDelayMs = 100;
|
|
6
|
+
export class Collection {
|
|
7
|
+
id;
|
|
8
|
+
transactor;
|
|
9
|
+
handlers;
|
|
10
|
+
source;
|
|
11
|
+
sourceCache;
|
|
12
|
+
tracker;
|
|
13
|
+
filterConflict;
|
|
14
|
+
pending = [];
|
|
15
|
+
constructor(id, transactor, handlers, source,
|
|
16
|
+
/** Cache of unmodified blocks from the source */
|
|
17
|
+
sourceCache,
|
|
18
|
+
/** Tracked Changes */
|
|
19
|
+
tracker, filterConflict) {
|
|
20
|
+
this.id = id;
|
|
21
|
+
this.transactor = transactor;
|
|
22
|
+
this.handlers = handlers;
|
|
23
|
+
this.source = source;
|
|
24
|
+
this.sourceCache = sourceCache;
|
|
25
|
+
this.tracker = tracker;
|
|
26
|
+
this.filterConflict = filterConflict;
|
|
27
|
+
}
|
|
28
|
+
static async createOrOpen(transactor, id, init) {
|
|
29
|
+
// Start with a context that has an infinite revision number to ensure that we always fetch the latest log information
|
|
30
|
+
const source = new TransactorSource(id, transactor, undefined);
|
|
31
|
+
const sourceCache = new CacheSource(source);
|
|
32
|
+
const tracker = new Tracker(sourceCache);
|
|
33
|
+
const header = await source.tryGet(id);
|
|
34
|
+
if (header) { // Collection already exists
|
|
35
|
+
const log = (await Log.open(tracker, id));
|
|
36
|
+
source.actionContext = await log.getActionContext();
|
|
37
|
+
}
|
|
38
|
+
else { // Collection does not exist
|
|
39
|
+
const headerBlock = init.createHeaderBlock(id, tracker);
|
|
40
|
+
tracker.insert(headerBlock);
|
|
41
|
+
source.actionContext = undefined;
|
|
42
|
+
await Log.open(tracker, id);
|
|
43
|
+
}
|
|
44
|
+
return new Collection(id, transactor, init.modules, source, sourceCache, tracker, init.filterConflict);
|
|
45
|
+
}
|
|
46
|
+
async act(...actions) {
|
|
47
|
+
await this.internalTransact(...actions);
|
|
48
|
+
this.pending.push(...actions);
|
|
49
|
+
}
|
|
50
|
+
async internalTransact(...actions) {
|
|
51
|
+
const atomic = new Atomic(this.tracker);
|
|
52
|
+
for (const action of actions) {
|
|
53
|
+
const handler = this.handlers[action.type];
|
|
54
|
+
if (!handler) {
|
|
55
|
+
throw new Error(`No handler for action type ${action.type}`);
|
|
56
|
+
}
|
|
57
|
+
await handler(action, atomic);
|
|
58
|
+
}
|
|
59
|
+
atomic.commit();
|
|
60
|
+
}
|
|
61
|
+
/** Load external changes and update our context to the latest log revision - resolve any conflicts with our pending actions. */
|
|
62
|
+
async update() {
|
|
63
|
+
// Start with a context that can see to the end of the log
|
|
64
|
+
const source = new TransactorSource(this.id, this.transactor, undefined);
|
|
65
|
+
const tracker = new Tracker(source);
|
|
66
|
+
// Get the latest entries from the log, starting from where we left off
|
|
67
|
+
const actionContext = this.source.actionContext;
|
|
68
|
+
const log = await Log.open(tracker, this.id);
|
|
69
|
+
const latest = log ? await log.getFrom(actionContext?.rev ?? 0) : undefined;
|
|
70
|
+
// Process the entries and track the blocks they affect
|
|
71
|
+
let anyConflicts = false;
|
|
72
|
+
for (const entry of latest?.entries ?? []) {
|
|
73
|
+
// Filter any pending actions that conflict with the remote actions
|
|
74
|
+
this.pending = this.pending.map(p => this.doFilterConflict(p, entry.actions) ? p : undefined)
|
|
75
|
+
.filter(Boolean);
|
|
76
|
+
this.sourceCache.clear(entry.blockIds);
|
|
77
|
+
anyConflicts = anyConflicts || tracker.conflicts(new Set(entry.blockIds)).length > 0;
|
|
78
|
+
}
|
|
79
|
+
// On conflicts, clear related caching and block-tracking and replay logical operations
|
|
80
|
+
if (anyConflicts) {
|
|
81
|
+
await this.replayActions();
|
|
82
|
+
}
|
|
83
|
+
// Update our context to the latest
|
|
84
|
+
this.source.actionContext = latest?.context;
|
|
85
|
+
}
|
|
86
|
+
/** Push our pending actions to the transactor */
|
|
87
|
+
async sync() {
|
|
88
|
+
const lockId = `Collection.sync:${this.id}`;
|
|
89
|
+
const release = await Latches.acquire(lockId);
|
|
90
|
+
try {
|
|
91
|
+
const bytes = randomBytes(16);
|
|
92
|
+
const actionId = uint8ArrayToString(bytes, 'base64url');
|
|
93
|
+
while (this.pending.length || !isTransformsEmpty(this.tracker.transforms)) {
|
|
94
|
+
// Snapshot the pending actions so that any new actions aren't assumed to be part of this action
|
|
95
|
+
const pending = [...this.pending];
|
|
96
|
+
// Create a snapshot tracker for the action, so that we can ditch the log changes if we have to retry the action
|
|
97
|
+
const snapshot = copyTransforms(this.tracker.transforms);
|
|
98
|
+
const tracker = new Tracker(this.sourceCache, snapshot);
|
|
99
|
+
// Add the action to the log (in local tracking space)
|
|
100
|
+
const log = await Log.open(tracker, this.id);
|
|
101
|
+
if (!log) {
|
|
102
|
+
throw new Error(`Log not found for collection ${this.id}`);
|
|
103
|
+
}
|
|
104
|
+
const newRev = (this.source.actionContext?.rev ?? 0) + 1;
|
|
105
|
+
const addResult = await log.addActions(pending, actionId, newRev, () => tracker.transformedBlockIds());
|
|
106
|
+
// Commit the action to the transactor
|
|
107
|
+
const staleFailure = await this.source.transact(tracker.transforms, actionId, newRev, this.id, addResult.tailPath.block.header.id);
|
|
108
|
+
if (staleFailure) {
|
|
109
|
+
if (staleFailure.pending) {
|
|
110
|
+
// Wait for short time to allow the pending actions to commit (bounded backoff)
|
|
111
|
+
await new Promise(resolve => setTimeout(resolve, PendingRetryDelayMs));
|
|
112
|
+
}
|
|
113
|
+
await this.update();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Clear the pending actions that were part of this action
|
|
117
|
+
this.pending = this.pending.slice(pending.length);
|
|
118
|
+
// Reset cache and replay any actions that were added during the action
|
|
119
|
+
const transforms = tracker.reset();
|
|
120
|
+
await this.replayActions();
|
|
121
|
+
this.sourceCache.transformCache(transforms);
|
|
122
|
+
this.source.actionContext = this.source.actionContext
|
|
123
|
+
? { committed: [...this.source.actionContext.committed, { actionId, rev: newRev }], rev: newRev }
|
|
124
|
+
: { committed: [{ actionId, rev: newRev }], rev: newRev };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
release();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async updateAndSync() {
|
|
133
|
+
// TODO: introduce timer and potentially change stats to determine when to sync, rather than always syncing
|
|
134
|
+
await this.update();
|
|
135
|
+
await this.sync();
|
|
136
|
+
}
|
|
137
|
+
async *selectLog(forward = true) {
|
|
138
|
+
const log = await Log.open(this.tracker, this.id);
|
|
139
|
+
if (!log) {
|
|
140
|
+
throw new Error(`Log not found for collection ${this.id}`);
|
|
141
|
+
}
|
|
142
|
+
for await (const entry of log.select(undefined, forward)) {
|
|
143
|
+
if (entry.action) {
|
|
144
|
+
yield* forward ? entry.action.actions : entry.action.actions.reverse();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async replayActions() {
|
|
149
|
+
this.tracker.reset();
|
|
150
|
+
// Because pending could be appended while we're async, we need to snapshot and repeat until empty
|
|
151
|
+
while (this.pending.length) {
|
|
152
|
+
const pending = [...this.pending];
|
|
153
|
+
this.pending = [];
|
|
154
|
+
await this.internalTransact(...pending);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** Called for each local action that may be in conflict with a remote action.
|
|
158
|
+
* @param action - The local action to check
|
|
159
|
+
* @param potential - The remote action that is potentially in conflict
|
|
160
|
+
* @returns true if the action should be kept, false to discard it
|
|
161
|
+
*/
|
|
162
|
+
doFilterConflict(action, potential) {
|
|
163
|
+
if (this.filterConflict) {
|
|
164
|
+
const replacement = this.filterConflict(action, potential);
|
|
165
|
+
if (!replacement) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
else if (replacement !== action) {
|
|
169
|
+
this.act(replacement);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/collection/collection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/collection/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/collection/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IBlock, BlockId, Action } from "../index.js";
|
|
2
|
+
export type CollectionId = BlockId;
|
|
3
|
+
export type CollectionHeaderType = 'CH';
|
|
4
|
+
export type CollectionHeaderBlock = IBlock & {
|
|
5
|
+
header: {
|
|
6
|
+
type: CollectionHeaderType;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export interface ICollection<TAction> {
|
|
10
|
+
update(): Promise<void>;
|
|
11
|
+
sync(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export type CreateCollectionAction = Action<void> & {
|
|
14
|
+
type: "create";
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=struct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../../../src/collection/struct.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;AAEnC,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG;IAC5C,MAAM,EAAE;QACP,IAAI,EAAE,oBAAoB,CAAC;KAC3B,CAAC;CACF,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,OAAO;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;IACnD,IAAI,EAAE,QAAQ,CAAC;CACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../../../src/collection/struct.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ITransactor, CollectionId } from "../../index.js";
|
|
2
|
+
export declare class Diary<TEntry> {
|
|
3
|
+
private readonly collection;
|
|
4
|
+
private constructor();
|
|
5
|
+
static create<TEntry>(network: ITransactor, id: CollectionId): Promise<Diary<TEntry>>;
|
|
6
|
+
append(data: TEntry): Promise<void>;
|
|
7
|
+
select(forward?: boolean): AsyncIterableIterator<TEntry>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=diary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diary.d.ts","sourceRoot":"","sources":["../../../../src/collections/diary/diary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAA8D,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG5H,qBAAa,KAAK,CAAC,MAAM;IAEtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAD1B,OAAO;WAKM,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAiBrF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlC,MAAM,CAAC,OAAO,UAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC;CAK/D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Collection } from "../../index.js";
|
|
2
|
+
import { DiaryHeaderBlockType } from "./index.js";
|
|
3
|
+
export class Diary {
|
|
4
|
+
collection;
|
|
5
|
+
constructor(collection) {
|
|
6
|
+
this.collection = collection;
|
|
7
|
+
}
|
|
8
|
+
static async create(network, id) {
|
|
9
|
+
const init = {
|
|
10
|
+
modules: {
|
|
11
|
+
"append": async (action, trx) => {
|
|
12
|
+
// Append-only diary doesn't need to modify any blocks
|
|
13
|
+
// All entries are stored in the log
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
createHeaderBlock: (id, store) => ({
|
|
17
|
+
header: store.createBlockHeader(DiaryHeaderBlockType, id)
|
|
18
|
+
})
|
|
19
|
+
};
|
|
20
|
+
const collection = await Collection.createOrOpen(network, id, init);
|
|
21
|
+
return new Diary(collection);
|
|
22
|
+
}
|
|
23
|
+
async append(data) {
|
|
24
|
+
const action = {
|
|
25
|
+
type: "append",
|
|
26
|
+
data: data
|
|
27
|
+
};
|
|
28
|
+
await this.collection.act(action);
|
|
29
|
+
await this.collection.updateAndSync();
|
|
30
|
+
}
|
|
31
|
+
async *select(forward = true) {
|
|
32
|
+
for await (const entry of this.collection.selectLog(forward)) {
|
|
33
|
+
yield entry.data;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=diary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diary.js","sourceRoot":"","sources":["../../../../src/collections/diary/diary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,OAAO,KAAK;IAEE;IADhB,YACgB,UAA8B;QAA9B,eAAU,GAAV,UAAU,CAAoB;IAE9C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAS,OAAoB,EAAE,EAAgB;QAC9D,MAAM,IAAI,GAAkC;YACxC,OAAO,EAAE;gBACd,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;oBAC/B,sDAAsD;oBACtD,oCAAoC;gBACrC,CAAC;aACK;YACD,iBAAiB,EAAE,CAAC,EAAW,EAAE,KAAyB,EAAE,EAAE,CAAC,CAAC;gBAC5D,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE,CAAC;aAC5D,CAAC;SACL,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACpE,OAAO,IAAI,KAAK,CAAS,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,MAAM,MAAM,GAAmB;YAC3B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;SACb,CAAC;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;QACxB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,CAAC,IAAI,CAAC;QACrB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/collections/diary/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/collections/diary/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../../../../src/collections/diary/struct.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,QAA+C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../../../../src/collections/diary/struct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/collections/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/collections/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BlockId, BlockStore, IBlock, ITreeTrunk } from "../../index.js";
|
|
2
|
+
import type { ITreeNode } from "../../btree/nodes.js";
|
|
3
|
+
export declare class CollectionTrunk implements ITreeTrunk {
|
|
4
|
+
private readonly store;
|
|
5
|
+
private readonly collectionId;
|
|
6
|
+
constructor(store: BlockStore<IBlock>, collectionId: BlockId);
|
|
7
|
+
get(): Promise<ITreeNode>;
|
|
8
|
+
set(node: ITreeNode): Promise<void>;
|
|
9
|
+
getId(): Promise<BlockId>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=collection-trunk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-trunk.d.ts","sourceRoot":"","sources":["../../../../src/collections/tree/collection-trunk.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,qBAAa,eAAgB,YAAW,UAAU;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,EACzB,YAAY,EAAE,OAAO;IAGpC,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;IAIzB,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;CAIlC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { apply, get } from "../../index.js";
|
|
2
|
+
import { rootId$ } from "./struct.js";
|
|
3
|
+
export class CollectionTrunk {
|
|
4
|
+
store;
|
|
5
|
+
collectionId;
|
|
6
|
+
constructor(store, collectionId) {
|
|
7
|
+
this.store = store;
|
|
8
|
+
this.collectionId = collectionId;
|
|
9
|
+
}
|
|
10
|
+
async get() {
|
|
11
|
+
return await get(this.store, await this.getId());
|
|
12
|
+
}
|
|
13
|
+
async set(node) {
|
|
14
|
+
const header = await get(this.store, this.collectionId);
|
|
15
|
+
apply(this.store, header, [rootId$, 0, 1, node.header.id]);
|
|
16
|
+
}
|
|
17
|
+
async getId() {
|
|
18
|
+
const header = await get(this.store, this.collectionId);
|
|
19
|
+
return header.rootId;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=collection-trunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-trunk.js","sourceRoot":"","sources":["../../../../src/collections/tree/collection-trunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,OAAO,EAAkC,MAAM,aAAa,CAAC;AAEtE,MAAM,OAAO,eAAe;IAEH;IACA;IAFrB,YACqB,KAAyB,EACzB,YAAqB;QADrB,UAAK,GAAL,KAAK,CAAoB;QACzB,iBAAY,GAAZ,YAAY,CAAS;IACvC,CAAC;IAEJ,KAAK,CAAC,GAAG;QACL,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAe;QACzB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAA8B,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,KAAK;QACX,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAA8B,CAAC;QACjF,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/collections/tree/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/collections/tree/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type BlockId, type CollectionHeaderBlock } from "../../index.js";
|
|
2
|
+
export declare const TreeHeaderBlockType: string;
|
|
3
|
+
export type TreeCollectionHeaderBlock = CollectionHeaderBlock & {
|
|
4
|
+
rootId: BlockId;
|
|
5
|
+
};
|
|
6
|
+
export declare const rootId$: string;
|
|
7
|
+
/** Represents a unit of change to a tree collection. */
|
|
8
|
+
export type TreeReplaceAction<TKey, TEntry> = [
|
|
9
|
+
key: TKey,
|
|
10
|
+
entry?: TEntry
|
|
11
|
+
][];
|
|
12
|
+
//# sourceMappingURL=struct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.d.ts","sourceRoot":"","sources":["../../../../src/collections/tree/struct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,qBAAqB,EAA6B,MAAM,gBAAgB,CAAC;AAErG,eAAO,MAAM,mBAAmB,QAA8C,CAAC;AAE/E,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,GAAG;IAC/D,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,OAAO,QAA8C,CAAC;AAEnE,wDAAwD;AACxD,MAAM,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,IAAI;IAE7C,GAAG,EAAE,IAAI;IAET,KAAK,CAAC,EAAE,MAAM;CACd,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"struct.js","sourceRoot":"","sources":["../../../../src/collections/tree/struct.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,MAAM,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAErG,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAM/E,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAA4B,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type CollectionId } from "../../collection/index.js";
|
|
2
|
+
import type { ITransactor } from "../../index.js";
|
|
3
|
+
import { type Path, type KeyRange } from "../../btree/index.js";
|
|
4
|
+
import { type TreeReplaceAction } from "./struct.js";
|
|
5
|
+
export declare class Tree<TKey, TEntry> {
|
|
6
|
+
private readonly collection;
|
|
7
|
+
private readonly btree;
|
|
8
|
+
private constructor();
|
|
9
|
+
static createOrOpen<TKey, TEntry>(network: ITransactor, id: CollectionId, keyFromEntry?: (entry: TEntry) => TKey, compare?: (a: TKey, b: TKey) => 0 | 1 | -1): Promise<Tree<TKey, TEntry>>;
|
|
10
|
+
replace(data: TreeReplaceAction<TKey, TEntry>): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Update the local state from the network.
|
|
13
|
+
* Call this before reading to ensure you have the latest data.
|
|
14
|
+
*/
|
|
15
|
+
update(): Promise<void>;
|
|
16
|
+
first(): Promise<Path<TKey, TEntry>>;
|
|
17
|
+
last(): Promise<Path<TKey, TEntry>>;
|
|
18
|
+
find(key: TKey): Promise<Path<TKey, TEntry>>;
|
|
19
|
+
get(key: TKey): Promise<TEntry | undefined>;
|
|
20
|
+
at(path: Path<TKey, TEntry>): TEntry | undefined;
|
|
21
|
+
range(range: KeyRange<TKey>): AsyncIterableIterator<Path<TKey, TEntry>>;
|
|
22
|
+
ascending(path: Path<TKey, TEntry>): AsyncIterableIterator<Path<TKey, TEntry>>;
|
|
23
|
+
descending(path: Path<TKey, TEntry>): AsyncIterableIterator<Path<TKey, TEntry>>;
|
|
24
|
+
getCount(from?: {
|
|
25
|
+
path: Path<TKey, TEntry>;
|
|
26
|
+
ascending?: boolean;
|
|
27
|
+
}): Promise<number>;
|
|
28
|
+
next(path: Path<TKey, TEntry>): Promise<Path<TKey, TEntry>>;
|
|
29
|
+
moveNext(path: Path<TKey, TEntry>): Promise<void>;
|
|
30
|
+
prior(path: Path<TKey, TEntry>): Promise<Path<TKey, TEntry>>;
|
|
31
|
+
movePrior(path: Path<TKey, TEntry>): Promise<void>;
|
|
32
|
+
isValid(path: Path<TKey, TEntry>): boolean;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../../src/collections/tree/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtG,OAAO,KAAK,EAAE,WAAW,EAA+B,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAS,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE1E,qBAAa,IAAI,CAAC,IAAI,EAAE,MAAM;IAG5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFvB,OAAO;WAMM,YAAY,CAAC,IAAI,EAAE,MAAM,EACrC,OAAO,EAAE,WAAW,EACpB,EAAE,EAAE,YAAY,EAChB,YAAY,IAAI,OAAO,MAAM,KAAyB,IAAI,EAC1D,OAAO,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,eAA+B,GACxD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAkCxB,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnE;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAIpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAInC,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAI5C,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIjD,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;IAIhD,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAIvE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAI9E,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAIzE,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAInF,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAI3D,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAI5D,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO;CAG1C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Collection } from "../../collection/index.js";
|
|
2
|
+
import { BTree } from "../../btree/index.js";
|
|
3
|
+
import { CollectionTrunk } from "./collection-trunk.js";
|
|
4
|
+
import { TreeHeaderBlockType } from "./struct.js";
|
|
5
|
+
export class Tree {
|
|
6
|
+
collection;
|
|
7
|
+
btree;
|
|
8
|
+
constructor(collection, btree) {
|
|
9
|
+
this.collection = collection;
|
|
10
|
+
this.btree = btree;
|
|
11
|
+
}
|
|
12
|
+
static async createOrOpen(network, id, keyFromEntry = (entry) => entry, compare = (a, b) => a < b ? -1 : a > b ? 1 : 0) {
|
|
13
|
+
// Tricky bootstrapping here:
|
|
14
|
+
// We need the root id to initialize the collection header, so we create the btree in the create collection header callback.
|
|
15
|
+
let btree;
|
|
16
|
+
const init = {
|
|
17
|
+
modules: {
|
|
18
|
+
"replace": async ({ data: actions }, trx) => {
|
|
19
|
+
for (const [key, entry] of actions) {
|
|
20
|
+
if (entry) {
|
|
21
|
+
await btree.upsert(entry);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
await btree.deleteAt((await btree.find(key)));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
createHeaderBlock: (id, store) => {
|
|
30
|
+
let rootId;
|
|
31
|
+
btree = BTree.create(store, (s, r) => {
|
|
32
|
+
rootId = r;
|
|
33
|
+
return new CollectionTrunk(store, id);
|
|
34
|
+
}, keyFromEntry, compare);
|
|
35
|
+
return {
|
|
36
|
+
header: store.createBlockHeader(TreeHeaderBlockType, id),
|
|
37
|
+
rootId: rootId,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const collection = await Collection.createOrOpen(network, id, init);
|
|
42
|
+
btree = btree ?? new BTree(collection.tracker, new CollectionTrunk(collection.tracker, collection.id), keyFromEntry, compare);
|
|
43
|
+
return new Tree(collection, btree);
|
|
44
|
+
}
|
|
45
|
+
async replace(data) {
|
|
46
|
+
await this.collection.act({ type: "replace", data });
|
|
47
|
+
await this.collection.updateAndSync();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Update the local state from the network.
|
|
51
|
+
* Call this before reading to ensure you have the latest data.
|
|
52
|
+
*/
|
|
53
|
+
async update() {
|
|
54
|
+
await this.collection.update();
|
|
55
|
+
}
|
|
56
|
+
// Read actions
|
|
57
|
+
async first() {
|
|
58
|
+
return await this.btree.first();
|
|
59
|
+
}
|
|
60
|
+
async last() {
|
|
61
|
+
return await this.btree.last();
|
|
62
|
+
}
|
|
63
|
+
async find(key) {
|
|
64
|
+
return await this.btree.find(key);
|
|
65
|
+
}
|
|
66
|
+
async get(key) {
|
|
67
|
+
return await this.btree.get(key);
|
|
68
|
+
}
|
|
69
|
+
at(path) {
|
|
70
|
+
return this.btree.at(path);
|
|
71
|
+
}
|
|
72
|
+
range(range) {
|
|
73
|
+
return this.btree.range(range);
|
|
74
|
+
}
|
|
75
|
+
ascending(path) {
|
|
76
|
+
return this.btree.ascending(path);
|
|
77
|
+
}
|
|
78
|
+
descending(path) {
|
|
79
|
+
return this.btree.descending(path);
|
|
80
|
+
}
|
|
81
|
+
async getCount(from) {
|
|
82
|
+
return await this.btree.getCount(from);
|
|
83
|
+
}
|
|
84
|
+
async next(path) {
|
|
85
|
+
return await this.btree.next(path);
|
|
86
|
+
}
|
|
87
|
+
async moveNext(path) {
|
|
88
|
+
await this.btree.moveNext(path);
|
|
89
|
+
}
|
|
90
|
+
async prior(path) {
|
|
91
|
+
return await this.btree.prior(path);
|
|
92
|
+
}
|
|
93
|
+
async movePrior(path) {
|
|
94
|
+
await this.btree.movePrior(path);
|
|
95
|
+
}
|
|
96
|
+
isValid(path) {
|
|
97
|
+
return this.btree.isValid(path);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../../src/collections/tree/tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from "./blocks/index.js";
|
|
2
|
+
export * from "./btree/index.js";
|
|
3
|
+
export * from "./chain/index.js";
|
|
4
|
+
export * from "./cluster/index.js";
|
|
5
|
+
export * from "./collection/index.js";
|
|
6
|
+
export * from "./collections/index.js";
|
|
7
|
+
export * from "./log/index.js";
|
|
8
|
+
export * from "./network/index.js";
|
|
9
|
+
export * from "./transaction/index.js";
|
|
10
|
+
export * from "./transactor/index.js";
|
|
11
|
+
export * from "./transform/index.js";
|
|
12
|
+
export * from "./utility/groupby.js";
|
|
13
|
+
export * from "./utility/latches.js";
|
|
14
|
+
export * from "./utility/nameof.js";
|
|
15
|
+
export * from "./utility/ensured.js";
|
|
16
|
+
export * from "./utility/pending.js";
|
|
17
|
+
export * from "./utility/block-id-to-bytes.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC"}
|