@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,268 @@
|
|
|
1
|
+
import { Atomic } from "../index.js";
|
|
2
|
+
import { ChainDataBlockType, ChainHeaderBlockType, entries$, headId$, nextId$, priorId$, tailId$ } from "./chain-nodes.js";
|
|
3
|
+
import { apply } from "../blocks/index.js";
|
|
4
|
+
export const EntriesPerBlock = 32;
|
|
5
|
+
// TODO: Generalize the header access so that it can be merged with upstream header (e.g. collection header) and thus avoid another level of indirection
|
|
6
|
+
/** Represents a chain of blocks, forming a stack, queue, or log. */
|
|
7
|
+
export class Chain {
|
|
8
|
+
store;
|
|
9
|
+
id;
|
|
10
|
+
options;
|
|
11
|
+
constructor(store, id, options) {
|
|
12
|
+
this.store = store;
|
|
13
|
+
this.id = id;
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
/** Creates a new queue, with an optional given id. */
|
|
17
|
+
static async create(store, options) {
|
|
18
|
+
const tailBlock = Chain.createTailBlock(store, options);
|
|
19
|
+
const headerBlock = {
|
|
20
|
+
...(options?.createHeaderBlock?.(options?.newId) ?? { header: store.createBlockHeader(ChainHeaderBlockType, options?.newId) }),
|
|
21
|
+
headId: tailBlock.header.id,
|
|
22
|
+
tailId: tailBlock.header.id,
|
|
23
|
+
};
|
|
24
|
+
store.insert(headerBlock);
|
|
25
|
+
store.insert(tailBlock);
|
|
26
|
+
return new Chain(store, headerBlock.header.id, options);
|
|
27
|
+
}
|
|
28
|
+
static createTailBlock(store, options) {
|
|
29
|
+
return {
|
|
30
|
+
...(options?.createDataBlock?.() ?? { header: store.createBlockHeader(ChainDataBlockType) }),
|
|
31
|
+
entries: [],
|
|
32
|
+
priorId: undefined,
|
|
33
|
+
nextId: undefined,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Opens an existing chain, verifying and potentially initializing the header. */
|
|
37
|
+
static async open(store, id, options) {
|
|
38
|
+
const headerBlock = await store.tryGet(id);
|
|
39
|
+
if (!headerBlock) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
// If the header block is missing headId or tailId, create a tail block and update the header
|
|
43
|
+
const headerAny = headerBlock; // Use 'any' for easier property checking/setting
|
|
44
|
+
if (!Object.hasOwn(headerAny, 'headId') || !Object.hasOwn(headerAny, 'tailId')) {
|
|
45
|
+
const tailBlock = Chain.createTailBlock(store, options);
|
|
46
|
+
store.insert(tailBlock);
|
|
47
|
+
apply(store, headerBlock, [headId$, 0, 0, tailBlock.header.id]);
|
|
48
|
+
apply(store, headerBlock, [tailId$, 0, 0, tailBlock.header.id]);
|
|
49
|
+
}
|
|
50
|
+
return new Chain(store, id, options);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Adds entries to the tail (last-in end) of the chain. Equivalent of enqueue or push.
|
|
54
|
+
* @param entries - The entries to add.
|
|
55
|
+
* @returns Path to the new tail of the chain (entry just past the end).
|
|
56
|
+
*/
|
|
57
|
+
async add(...entries) {
|
|
58
|
+
const path = await this.getTail();
|
|
59
|
+
if (!path) {
|
|
60
|
+
throw new Error("Cannot add to non-existent chain");
|
|
61
|
+
}
|
|
62
|
+
const { headerBlock, block: oldTail } = path;
|
|
63
|
+
let tail = oldTail;
|
|
64
|
+
const trx = new Atomic(this.store);
|
|
65
|
+
// Attempt to fit in current block
|
|
66
|
+
const copied = entries.slice(0, EntriesPerBlock - tail.entries.length);
|
|
67
|
+
if (copied.length > 0) {
|
|
68
|
+
apply(trx, tail, [entries$, tail.entries.length, 0, copied]);
|
|
69
|
+
entries = entries.slice(copied.length);
|
|
70
|
+
}
|
|
71
|
+
while (entries.length > 0) {
|
|
72
|
+
const newTail = {
|
|
73
|
+
...(this.options?.createDataBlock?.() ?? { header: this.store.createBlockHeader(ChainDataBlockType) }),
|
|
74
|
+
entries: entries.splice(0, Math.min(EntriesPerBlock, entries.length)),
|
|
75
|
+
priorId: tail.header.id,
|
|
76
|
+
nextId: undefined,
|
|
77
|
+
};
|
|
78
|
+
await this.options?.newBlock?.(newTail, oldTail);
|
|
79
|
+
trx.insert(newTail);
|
|
80
|
+
apply(trx, tail, [nextId$, 0, 0, newTail.header.id]);
|
|
81
|
+
tail = newTail;
|
|
82
|
+
}
|
|
83
|
+
if (tail !== oldTail) {
|
|
84
|
+
apply(trx, headerBlock, [tailId$, 0, 0, tail.header.id]);
|
|
85
|
+
}
|
|
86
|
+
trx.commit();
|
|
87
|
+
return { headerBlock, block: tail, index: tail.entries.length - 1 };
|
|
88
|
+
}
|
|
89
|
+
/** Updates the entry at the given path. */
|
|
90
|
+
updateAt(path, entry) {
|
|
91
|
+
if (!pathValid(path)) {
|
|
92
|
+
throw new Error("Invalid path");
|
|
93
|
+
}
|
|
94
|
+
const { index, block } = path;
|
|
95
|
+
apply(this.store, block, [entries$, index, 1, [entry]]);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Removes up to n entries from the tail (last-in end) of the chain.
|
|
99
|
+
* @param n - The number of entries to remove. If n is greater than the number of entries in the chain, the chain is emptied with no error.
|
|
100
|
+
* @returns An array of the removed entries. May be less than n if the chain is exhausted.
|
|
101
|
+
*/
|
|
102
|
+
async pop(n = 1) {
|
|
103
|
+
if (n <= 0) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
const path = await this.getTail();
|
|
107
|
+
if (!path) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const { headerBlock, block: oldTail } = path;
|
|
111
|
+
let tail = oldTail;
|
|
112
|
+
const result = [];
|
|
113
|
+
const trx = new Atomic(this.store);
|
|
114
|
+
while (n > 0) {
|
|
115
|
+
if (tail.entries.length > n) { // Partial removal
|
|
116
|
+
const removed = tail.entries.slice(-n);
|
|
117
|
+
result.unshift(...removed);
|
|
118
|
+
apply(trx, tail, [entries$, tail.entries.length - n, n, []]);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
else { // Entire block removal
|
|
122
|
+
result.unshift(...tail.entries);
|
|
123
|
+
n -= tail.entries.length;
|
|
124
|
+
if (tail.priorId) {
|
|
125
|
+
trx.delete(tail.header.id);
|
|
126
|
+
tail = await trx.tryGet(tail.priorId);
|
|
127
|
+
apply(trx, tail, [nextId$, 0, 0, undefined]);
|
|
128
|
+
}
|
|
129
|
+
else { // No more blocks... just empty what's left
|
|
130
|
+
apply(trx, tail, [entries$, 0, tail.entries.length, []]);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (tail !== oldTail) {
|
|
136
|
+
apply(trx, headerBlock, [tailId$, 0, 0, tail.header.id]);
|
|
137
|
+
}
|
|
138
|
+
trx.commit();
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Removes up to n entries from the head (first-in end) of the queue.
|
|
143
|
+
* @param n - The number of entries to remove. If n is greater than the number of entries in the chain, the chain is emptied with no error.
|
|
144
|
+
* @returns An array of the removed entries. May be less than n if the queue is exhausted.
|
|
145
|
+
*/
|
|
146
|
+
async dequeue(n = 1) {
|
|
147
|
+
if (n <= 0) {
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
const trx = new Atomic(this.store);
|
|
151
|
+
const path = await this.getHead();
|
|
152
|
+
if (!path) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
const { headerBlock, block: oldHead } = path;
|
|
156
|
+
let head = oldHead;
|
|
157
|
+
const result = [];
|
|
158
|
+
while (n > 0) {
|
|
159
|
+
if (head.entries.length > n) { // Consumes part of block
|
|
160
|
+
result.push(...head.entries.slice(0, n));
|
|
161
|
+
apply(trx, head, [entries$, 0, n, []]);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
else { // Consumes entire block
|
|
165
|
+
result.push(...head.entries);
|
|
166
|
+
n -= head.entries.length;
|
|
167
|
+
if (head.nextId) {
|
|
168
|
+
trx.delete(head.header.id);
|
|
169
|
+
head = await trx.tryGet(head.nextId);
|
|
170
|
+
apply(trx, head, [priorId$, 0, 0, undefined]);
|
|
171
|
+
}
|
|
172
|
+
else { // No more blocks... just empty what's left
|
|
173
|
+
apply(trx, head, [entries$, 0, head.entries.length, []]);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (head !== oldHead) {
|
|
179
|
+
apply(trx, headerBlock, [headId$, 0, 0, head.header.id]);
|
|
180
|
+
}
|
|
181
|
+
trx.commit();
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
/** Iterates over the chain, starting at the given path, or the head or tail if not given.
|
|
185
|
+
* If forward is true (default), the iteration is from head (oldest) to tail (latest); otherwise, it is from tail to head.
|
|
186
|
+
*/
|
|
187
|
+
async *select(starting, forward = true) {
|
|
188
|
+
const path = starting ?? (forward ? await this.getHead() : await this.getTail());
|
|
189
|
+
if (!path) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
let block = path.block;
|
|
193
|
+
let index = path.index;
|
|
194
|
+
if (forward) {
|
|
195
|
+
while (block) {
|
|
196
|
+
for (; index < block.entries.length; ++index) {
|
|
197
|
+
yield { headerBlock: path.headerBlock, block, index };
|
|
198
|
+
}
|
|
199
|
+
block = block.nextId ? await this.store.tryGet(block.nextId) : undefined;
|
|
200
|
+
index = 0;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
while (block) {
|
|
205
|
+
for (; index >= 0; --index) {
|
|
206
|
+
yield { headerBlock: path.headerBlock, block, index };
|
|
207
|
+
}
|
|
208
|
+
block = block.priorId ? await this.store.tryGet(block.priorId) : undefined;
|
|
209
|
+
index = (block?.entries.length ?? 0) - 1;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/** Returns the next entry in the chain; returns an off-the-end path if the end is reached. */
|
|
214
|
+
async next(path) {
|
|
215
|
+
const { headerBlock, block, index } = path;
|
|
216
|
+
if (index < block.entries.length - 1 || !block.nextId) {
|
|
217
|
+
return { headerBlock, block, index: index + 1 };
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
headerBlock,
|
|
221
|
+
block: await this.store.tryGet(block.nextId),
|
|
222
|
+
index: 0,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/** Returns the previous entry in the chain; returns an off-the-start path if the start is reached. */
|
|
226
|
+
async prev(path) {
|
|
227
|
+
const { headerBlock, block, index } = path;
|
|
228
|
+
if (index > 0 || !block.priorId) {
|
|
229
|
+
return { headerBlock, block, index: index - 1 };
|
|
230
|
+
}
|
|
231
|
+
const priorBlock = await this.store.tryGet(block.priorId);
|
|
232
|
+
return {
|
|
233
|
+
headerBlock,
|
|
234
|
+
block: priorBlock,
|
|
235
|
+
index: priorBlock.entries.length - 1,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
async getTail(header) {
|
|
239
|
+
const headerBlock = header ?? await this.getHeader();
|
|
240
|
+
let tail = headerBlock ? await this.store.tryGet(headerBlock.tailId) : undefined;
|
|
241
|
+
// Possible that the block has filled between reading the header and reading the block... follow nextId links to find true end
|
|
242
|
+
while (tail?.nextId) {
|
|
243
|
+
tail = await this.store.tryGet(tail.nextId);
|
|
244
|
+
}
|
|
245
|
+
return tail ? { headerBlock, block: tail, index: tail.entries.length - 1 } : undefined;
|
|
246
|
+
}
|
|
247
|
+
async getHead(header) {
|
|
248
|
+
const headerBlock = header ?? await this.getHeader();
|
|
249
|
+
let head = headerBlock ? await this.store.tryGet(headerBlock.headId) : undefined;
|
|
250
|
+
// Possible that the block has filled between reading the header and reading the block... follow priorId links to find true start
|
|
251
|
+
while (head?.priorId) {
|
|
252
|
+
head = await this.store.tryGet(head.priorId);
|
|
253
|
+
}
|
|
254
|
+
return head ? { headerBlock, block: head, index: 0 } : undefined;
|
|
255
|
+
}
|
|
256
|
+
async getHeader() {
|
|
257
|
+
return await this.store.tryGet(this.id);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/** Returns true if the given path is located on an entry (not a crack). */
|
|
261
|
+
export function pathValid(path) {
|
|
262
|
+
return path.block.entries.length > path.index && path.index >= 0;
|
|
263
|
+
}
|
|
264
|
+
/** Gets the entry at the given path; undefined if the path is not valid. */
|
|
265
|
+
export function entryAt(path) {
|
|
266
|
+
return path.block.entries[path.index];
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/chain/chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chain/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i-cluster.d.ts","sourceRoot":"","sources":["../../../src/cluster/i-cluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG;IACtB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACtD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i-cluster.js","sourceRoot":"","sources":["../../../src/cluster/i-cluster.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cluster/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cluster/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Multiaddr } from "@multiformats/multiaddr";
|
|
2
|
+
import type { RepoMessage } from "../network/repo-protocol.js";
|
|
3
|
+
export type Signature = {
|
|
4
|
+
type: 'approve' | 'reject';
|
|
5
|
+
signature: string;
|
|
6
|
+
rejectReason?: string;
|
|
7
|
+
};
|
|
8
|
+
export type ClusterPeers = {
|
|
9
|
+
[id: string]: {
|
|
10
|
+
multiaddrs: Multiaddr[];
|
|
11
|
+
publicKey: Uint8Array;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type ClusterRecord = {
|
|
15
|
+
messageHash: string;
|
|
16
|
+
peers: ClusterPeers;
|
|
17
|
+
message: RepoMessage;
|
|
18
|
+
coordinatingBlockIds?: string[];
|
|
19
|
+
promises: {
|
|
20
|
+
[peerId: string]: Signature;
|
|
21
|
+
};
|
|
22
|
+
commits: {
|
|
23
|
+
[peerId: string]: Signature;
|
|
24
|
+
};
|
|
25
|
+
/** Sender's recommended cluster size: min(estimated network size, configured cluster size) */
|
|
26
|
+
suggestedClusterSize?: number;
|
|
27
|
+
minRequiredSize?: number;
|
|
28
|
+
/** Sender's current network size estimate */
|
|
29
|
+
networkSizeHint?: number;
|
|
30
|
+
/** Confidence in the network size estimate (0-1) */
|
|
31
|
+
networkSizeConfidence?: number;
|
|
32
|
+
};
|
|
33
|
+
export interface ClusterConsensusConfig {
|
|
34
|
+
/** Super-majority threshold for promises (default 0.75 = 3/4) */
|
|
35
|
+
superMajorityThreshold: number;
|
|
36
|
+
/** Simple majority threshold for commits (default 0.51 = >50%) */
|
|
37
|
+
simpleMajorityThreshold: number;
|
|
38
|
+
/** Minimum absolute cluster size (default 3) */
|
|
39
|
+
minAbsoluteClusterSize: number;
|
|
40
|
+
/** Allow cluster to operate below configured size (default false) */
|
|
41
|
+
allowClusterDownsize: boolean;
|
|
42
|
+
/** Tolerance for cluster size variance as fraction (default 0.5 = 50%) */
|
|
43
|
+
clusterSizeTolerance: number;
|
|
44
|
+
/** Window for detecting partition in milliseconds (default 60000 = 1 min) */
|
|
45
|
+
partitionDetectionWindow: number;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=structs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structs.d.ts","sourceRoot":"","sources":["../../../src/cluster/structs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B,CAAC,EAAE,EAAE,MAAM,GAAG;QACb,UAAU,EAAE,SAAS,EAAE,CAAC;QACxB,SAAS,EAAE,UAAU,CAAC;KACtB,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC1C,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IACzC,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAA;AAED,MAAM,WAAW,sBAAsB;IACtC,iEAAiE;IACjE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kEAAkE;IAClE,uBAAuB,EAAE,MAAM,CAAC;IAChC,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qEAAqE;IACrE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,0EAA0E;IAC1E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,wBAAwB,EAAE,MAAM,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../src/cluster/structs.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BlockStore } from "../index.js";
|
|
2
|
+
import type { IBlock } from "../index.js";
|
|
3
|
+
import type { TransactionRef } from "../transaction/index.js";
|
|
4
|
+
export type ActionId = string;
|
|
5
|
+
export type ActionType = string;
|
|
6
|
+
export type Action<T> = {
|
|
7
|
+
type: ActionType;
|
|
8
|
+
data: T;
|
|
9
|
+
/** Optional reference to the transaction this action came from */
|
|
10
|
+
transaction?: TransactionRef;
|
|
11
|
+
};
|
|
12
|
+
export type ActionHandler<T, TResult = void> = (action: Action<T>, store: BlockStore<IBlock>) => Promise<TResult>;
|
|
13
|
+
export type ActionRev = {
|
|
14
|
+
actionId: ActionId;
|
|
15
|
+
rev: number;
|
|
16
|
+
};
|
|
17
|
+
/** Situational awareness of the action state */
|
|
18
|
+
export type ActionContext = {
|
|
19
|
+
/** Actions that may not have been checkpointed */
|
|
20
|
+
committed: ActionRev[];
|
|
21
|
+
/** The latest known revision number */
|
|
22
|
+
rev: number;
|
|
23
|
+
/** Optional uncommitted pending action ID */
|
|
24
|
+
actionId?: ActionId;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/collection/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC;IACR,kEAAkE;IAClE,WAAW,CAAC,EAAE,cAAc,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAElH,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,aAAa,GAAG;IAC3B,kDAAkD;IAClD,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/collection/action.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { IBlock, Action, ActionType, ActionHandler, BlockId, ITransactor, BlockStore } from "../index.js";
|
|
2
|
+
import { Tracker, CacheSource, TransactorSource } from "../index.js";
|
|
3
|
+
import type { CollectionId, ICollection } from "./index.js";
|
|
4
|
+
export type CollectionInitOptions<TAction> = {
|
|
5
|
+
modules: Record<ActionType, ActionHandler<TAction>>;
|
|
6
|
+
createHeaderBlock: (id: BlockId, store: BlockStore<IBlock>) => IBlock;
|
|
7
|
+
/** Called for each local action that is potentially in conflict with a remote action.
|
|
8
|
+
* @param action - The local action to check
|
|
9
|
+
* @param potential - The remote action that is potentially in conflict
|
|
10
|
+
* @returns The original action, a replacement action (return a new instance; will be
|
|
11
|
+
* applied through act()), or undefined to discard this action
|
|
12
|
+
*/
|
|
13
|
+
filterConflict?: (action: Action<TAction>, potential: Action<TAction>[]) => Action<TAction> | undefined;
|
|
14
|
+
};
|
|
15
|
+
export declare class Collection<TAction> implements ICollection<TAction> {
|
|
16
|
+
readonly id: CollectionId;
|
|
17
|
+
readonly transactor: ITransactor;
|
|
18
|
+
private readonly handlers;
|
|
19
|
+
private readonly source;
|
|
20
|
+
/** Cache of unmodified blocks from the source */
|
|
21
|
+
private readonly sourceCache;
|
|
22
|
+
/** Tracked Changes */
|
|
23
|
+
readonly tracker: Tracker<IBlock>;
|
|
24
|
+
private readonly filterConflict?;
|
|
25
|
+
private pending;
|
|
26
|
+
protected constructor(id: CollectionId, transactor: ITransactor, handlers: Record<ActionType, ActionHandler<TAction>>, source: TransactorSource<IBlock>,
|
|
27
|
+
/** Cache of unmodified blocks from the source */
|
|
28
|
+
sourceCache: CacheSource<IBlock>,
|
|
29
|
+
/** Tracked Changes */
|
|
30
|
+
tracker: Tracker<IBlock>, filterConflict?: ((action: Action<TAction>, potential: Action<TAction>[]) => Action<TAction> | undefined) | undefined);
|
|
31
|
+
static createOrOpen<TAction>(transactor: ITransactor, id: CollectionId, init: CollectionInitOptions<TAction>): Promise<Collection<TAction>>;
|
|
32
|
+
act(...actions: Action<TAction>[]): Promise<void>;
|
|
33
|
+
private internalTransact;
|
|
34
|
+
/** Load external changes and update our context to the latest log revision - resolve any conflicts with our pending actions. */
|
|
35
|
+
update(): Promise<void>;
|
|
36
|
+
/** Push our pending actions to the transactor */
|
|
37
|
+
sync(): Promise<void>;
|
|
38
|
+
updateAndSync(): Promise<void>;
|
|
39
|
+
selectLog(forward?: boolean): AsyncIterableIterator<Action<TAction>>;
|
|
40
|
+
private replayActions;
|
|
41
|
+
/** Called for each local action that may be in conflict with a remote action.
|
|
42
|
+
* @param action - The local action to check
|
|
43
|
+
* @param potential - The remote action that is potentially in conflict
|
|
44
|
+
* @returns true if the action should be kept, false to discard it
|
|
45
|
+
*/
|
|
46
|
+
protected doFilterConflict(action: Action<TAction>, potential: Action<TAction>[]): boolean;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../../src/collection/collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5H,OAAO,EAAe,OAAO,EAAkB,WAAW,EAAqB,gBAAgB,EAAkD,MAAM,aAAa,CAAC;AACrK,OAAO,KAAK,EAAyB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOnF,MAAM,MAAM,qBAAqB,CAAC,OAAO,IAAI;IAC5C,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,iBAAiB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;IACtE;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;CACvG,CAAA;AAED,qBAAa,UAAU,CAAC,OAAO,CAAE,YAAW,WAAW,CAAC,OAAO,CAAC;aAI9C,EAAE,EAAE,YAAY;aAChB,UAAU,EAAE,WAAW;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,sBAAsB;aACN,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAXjC,OAAO,CAAC,OAAO,CAAyB;IAExC,SAAS,aACQ,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,WAAW,EACtB,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,EACpD,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;IACjD,iDAAiD;IAChC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;IACjD,sBAAsB;IACN,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EACvB,cAAc,CAAC,GAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,aAAA;WAI5G,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC;IAoB5G,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;YAKzB,gBAAgB;IAc9B,gIAAgI;IAC1H,MAAM;IA6BZ,iDAAiD;IAC3C,IAAI;IAgDJ,aAAa;IAMZ,SAAS,CAAC,OAAO,UAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAY1D,aAAa;IAU3B;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;CAWhF"}
|