@livestore/common 0.4.0-dev.1 → 0.4.0-dev.11
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/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +8 -3
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
- package/dist/adapter-types.d.ts +9 -3
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
- package/dist/devtools/devtools-messages-common.d.ts +7 -14
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +1 -6
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +27 -25
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/errors.d.ts +47 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +22 -3
- package/dist/errors.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +7 -3
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +135 -52
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/eventlog.d.ts +4 -10
- package/dist/leader-thread/eventlog.d.ts.map +1 -1
- package/dist/leader-thread/eventlog.js +4 -6
- package/dist/leader-thread/eventlog.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +6 -2
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +1 -2
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +68 -19
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
- package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
- package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
- package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
- package/dist/leader-thread/materialize-event.d.ts +2 -2
- package/dist/leader-thread/materialize-event.d.ts.map +1 -1
- package/dist/leader-thread/materialize-event.js +23 -9
- package/dist/leader-thread/materialize-event.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +2 -3
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +1 -1
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -2
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/types.d.ts +7 -5
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/materializer-helper.d.ts +1 -1
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +20 -4
- package/dist/materializer-helper.js.map +1 -1
- package/dist/rematerialize-from-eventlog.d.ts +1 -1
- package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
- package/dist/rematerialize-from-eventlog.js +25 -16
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef.d.ts +3 -0
- package/dist/schema/EventDef.d.ts.map +1 -1
- package/dist/schema/EventDef.js.map +1 -1
- package/dist/schema/EventSequenceNumber.d.ts +4 -1
- package/dist/schema/EventSequenceNumber.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber.js +4 -1
- package/dist/schema/EventSequenceNumber.js.map +1 -1
- package/dist/schema/EventSequenceNumber.test.js +2 -2
- package/dist/schema/LiveStoreEvent.d.ts +1 -1
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent.js +1 -2
- package/dist/schema/LiveStoreEvent.js.map +1 -1
- package/dist/schema/mod.d.ts +2 -0
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +1 -0
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/schema.d.ts +15 -0
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +26 -1
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +35 -5
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +95 -4
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +16 -0
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.js +14 -6
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.d.ts +6 -2
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/column-def.js +128 -185
- package/dist/schema/state/sqlite/column-def.js.map +1 -1
- package/dist/schema/state/sqlite/column-def.test.js +116 -73
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +23 -6
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +2 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +1 -1
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +1 -1
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +5 -2
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.js +6 -2
- package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/impl.test.js +137 -2
- package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables.d.ts +42 -6
- package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/system-tables.js +2 -0
- package/dist/schema/state/sqlite/system-tables.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.d.ts +4 -4
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +2 -2
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +87 -2
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/schema/unknown-events.d.ts +47 -0
- package/dist/schema/unknown-events.d.ts.map +1 -0
- package/dist/schema/unknown-events.js +69 -0
- package/dist/schema/unknown-events.js.map +1 -0
- package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
- package/dist/sql-queries/sql-query-builder.js +2 -1
- package/dist/sql-queries/sql-query-builder.js.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +9 -11
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +36 -33
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/errors.d.ts +61 -0
- package/dist/sync/errors.d.ts.map +1 -0
- package/dist/sync/errors.js +36 -0
- package/dist/sync/errors.js.map +1 -0
- package/dist/sync/index.d.ts +3 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/mock-sync-backend.d.ts +23 -0
- package/dist/sync/mock-sync-backend.d.ts.map +1 -0
- package/dist/sync/mock-sync-backend.js +114 -0
- package/dist/sync/mock-sync-backend.js.map +1 -0
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/compact-events.js +4 -5
- package/dist/sync/next/compact-events.js.map +1 -1
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +1 -2
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +50 -11
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +193 -4
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +3 -1
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/sync-backend-kv.d.ts +7 -0
- package/dist/sync/sync-backend-kv.d.ts.map +1 -0
- package/dist/sync/sync-backend-kv.js +18 -0
- package/dist/sync/sync-backend-kv.js.map +1 -0
- package/dist/sync/sync-backend.d.ts +105 -0
- package/dist/sync/sync-backend.d.ts.map +1 -0
- package/dist/sync/sync-backend.js +61 -0
- package/dist/sync/sync-backend.js.map +1 -0
- package/dist/sync/sync.d.ts +6 -84
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +2 -27
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.test.js +16 -15
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/transport-chunking.d.ts +36 -0
- package/dist/sync/transport-chunking.d.ts.map +1 -0
- package/dist/sync/transport-chunking.js +56 -0
- package/dist/sync/transport-chunking.js.map +1 -0
- package/dist/sync/validate-push-payload.d.ts +1 -1
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +6 -6
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/testing/event-factory.d.ts +68 -0
- package/dist/testing/event-factory.d.ts.map +1 -0
- package/dist/testing/event-factory.js +80 -0
- package/dist/testing/event-factory.js.map +1 -0
- package/dist/testing/mod.d.ts +2 -0
- package/dist/testing/mod.d.ts.map +1 -0
- package/dist/testing/mod.js +2 -0
- package/dist/testing/mod.js.map +1 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +7 -8
- package/src/ClientSessionLeaderThreadProxy.ts +8 -3
- package/src/adapter-types.ts +13 -3
- package/src/devtools/devtools-messages-common.ts +1 -8
- package/src/errors.ts +33 -4
- package/src/leader-thread/LeaderSyncProcessor.ts +204 -63
- package/src/leader-thread/eventlog.ts +10 -6
- package/src/leader-thread/leader-worker-devtools.ts +6 -2
- package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
- package/src/leader-thread/make-leader-thread-layer.ts +137 -26
- package/src/leader-thread/materialize-event.ts +34 -9
- package/src/leader-thread/recreate-db.ts +11 -3
- package/src/leader-thread/shutdown-channel.ts +16 -2
- package/src/leader-thread/types.ts +7 -5
- package/src/materializer-helper.ts +22 -5
- package/src/rematerialize-from-eventlog.ts +33 -23
- package/src/schema/EventDef.ts +3 -0
- package/src/schema/EventSequenceNumber.test.ts +2 -2
- package/src/schema/EventSequenceNumber.ts +5 -2
- package/src/schema/LiveStoreEvent.ts +1 -2
- package/src/schema/mod.ts +2 -0
- package/src/schema/schema.ts +37 -1
- package/src/schema/state/sqlite/client-document-def.test.ts +17 -0
- package/src/schema/state/sqlite/client-document-def.ts +117 -5
- package/src/schema/state/sqlite/column-annotations.ts +16 -6
- package/src/schema/state/sqlite/column-def.test.ts +150 -93
- package/src/schema/state/sqlite/column-def.ts +136 -203
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +26 -6
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +2 -1
- package/src/schema/state/sqlite/mod.ts +1 -0
- package/src/schema/state/sqlite/query-builder/api.ts +7 -2
- package/src/schema/state/sqlite/query-builder/impl.test.ts +187 -6
- package/src/schema/state/sqlite/query-builder/impl.ts +8 -2
- package/src/schema/state/sqlite/system-tables.ts +2 -0
- package/src/schema/state/sqlite/table-def.test.ts +112 -2
- package/src/schema/state/sqlite/table-def.ts +9 -8
- package/src/schema/unknown-events.ts +131 -0
- package/src/sql-queries/sql-query-builder.ts +2 -1
- package/src/sync/ClientSessionSyncProcessor.ts +56 -49
- package/src/sync/errors.ts +38 -0
- package/src/sync/index.ts +3 -0
- package/src/sync/mock-sync-backend.ts +184 -0
- package/src/sync/next/compact-events.ts +4 -5
- package/src/sync/next/facts.ts +1 -3
- package/src/sync/next/history-dag-common.ts +272 -21
- package/src/sync/next/history-dag.ts +3 -1
- package/src/sync/sync-backend-kv.ts +22 -0
- package/src/sync/sync-backend.ts +185 -0
- package/src/sync/sync.ts +6 -89
- package/src/sync/syncstate.test.ts +17 -15
- package/src/sync/transport-chunking.ts +90 -0
- package/src/sync/validate-push-payload.ts +6 -7
- package/src/testing/event-factory.ts +133 -0
- package/src/testing/mod.ts +1 -0
- package/src/version.ts +2 -2
- package/dist/schema-management/migrations.test.d.ts +0 -2
- package/dist/schema-management/migrations.test.d.ts.map +0 -1
- package/dist/schema-management/migrations.test.js +0 -52
- package/dist/schema-management/migrations.test.js.map +0 -1
- package/dist/sync/next/graphology.d.ts +0 -8
- package/dist/sync/next/graphology.d.ts.map +0 -1
- package/dist/sync/next/graphology.js +0 -30
- package/dist/sync/next/graphology.js.map +0 -1
- package/dist/sync/next/graphology_.d.ts +0 -3
- package/dist/sync/next/graphology_.d.ts.map +0 -1
- package/dist/sync/next/graphology_.js +0 -3
- package/dist/sync/next/graphology_.js.map +0 -1
- package/src/sync/next/ambient.d.ts +0 -3
- package/src/sync/next/graphology.ts +0 -41
- package/src/sync/next/graphology_.ts +0 -2
|
@@ -1,11 +1,200 @@
|
|
|
1
|
+
import { shouldNeverHappen } from '@livestore/utils';
|
|
2
|
+
import { Graph } from '@livestore/utils/effect';
|
|
1
3
|
import * as EventSequenceNumber from "../../schema/EventSequenceNumber.js";
|
|
2
|
-
import { graphology } from "./graphology_.js";
|
|
3
4
|
export const connectionTypeOptions = ['parent', 'facts'];
|
|
4
|
-
|
|
5
|
+
const defaultOptions = {
|
|
5
6
|
allowSelfLoops: false,
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
};
|
|
8
|
+
const cloneFactsGroup = (factsGroup) => ({
|
|
9
|
+
depRead: new Map(factsGroup.depRead),
|
|
10
|
+
depRequire: new Map(factsGroup.depRequire),
|
|
11
|
+
modifySet: new Map(factsGroup.modifySet),
|
|
12
|
+
modifyUnset: new Map(factsGroup.modifyUnset),
|
|
13
|
+
});
|
|
14
|
+
const cloneHistoryDagNode = (node) => ({
|
|
15
|
+
...node,
|
|
16
|
+
// Copy the event sequence numbers to avoid accidental aliasing
|
|
17
|
+
parentSeqNum: { ...node.parentSeqNum },
|
|
18
|
+
seqNum: { ...node.seqNum },
|
|
19
|
+
// Facts are represented via maps which should not be shared across DAG copies
|
|
20
|
+
factsGroup: cloneFactsGroup(node.factsGroup),
|
|
8
21
|
});
|
|
22
|
+
/**
|
|
23
|
+
* Mutable DAG wrapper that retains the previous string-based node ids API
|
|
24
|
+
* while delegating storage and algorithms to Effect's graph module.
|
|
25
|
+
*/
|
|
26
|
+
export class HistoryDag {
|
|
27
|
+
options;
|
|
28
|
+
idToIndex;
|
|
29
|
+
indexToId;
|
|
30
|
+
graph;
|
|
31
|
+
constructor({ graph, idToIndex, indexToId, options, }) {
|
|
32
|
+
this.graph = graph;
|
|
33
|
+
this.options = { ...defaultOptions, ...options };
|
|
34
|
+
this.idToIndex = idToIndex ? new Map(idToIndex) : new Map();
|
|
35
|
+
this.indexToId = indexToId ? new Map(indexToId) : new Map();
|
|
36
|
+
}
|
|
37
|
+
static create(options) {
|
|
38
|
+
const graph = Graph.beginMutation(Graph.directed());
|
|
39
|
+
return options ? new HistoryDag({ graph, options }) : new HistoryDag({ graph });
|
|
40
|
+
}
|
|
41
|
+
copy() {
|
|
42
|
+
const clone = HistoryDag.create(this.options);
|
|
43
|
+
for (const [id, index] of this.idToIndex) {
|
|
44
|
+
const node = this.graph.nodes.get(index) ?? shouldNeverHappen(`HistoryDag.copy missing node for ${id}`);
|
|
45
|
+
clone.addNode(id, cloneHistoryDagNode(node));
|
|
46
|
+
}
|
|
47
|
+
for (const edge of this.graph.edges.values()) {
|
|
48
|
+
const sourceId = this.indexToId.get(edge.source) ?? shouldNeverHappen('HistoryDag.copy missing source id');
|
|
49
|
+
const targetId = this.indexToId.get(edge.target) ?? shouldNeverHappen('HistoryDag.copy missing target id');
|
|
50
|
+
clone.addEdge(sourceId, targetId, { ...edge.data });
|
|
51
|
+
}
|
|
52
|
+
return clone;
|
|
53
|
+
}
|
|
54
|
+
topologicalNodeIds() {
|
|
55
|
+
const walker = Graph.topo(this.graph);
|
|
56
|
+
const indices = Array.from(Graph.indices(walker));
|
|
57
|
+
return indices.map((index) => this.indexToId.get(index) ?? shouldNeverHappen(`Missing node id for index ${index}`));
|
|
58
|
+
}
|
|
59
|
+
addNode(id, attributes) {
|
|
60
|
+
if (this.idToIndex.has(id)) {
|
|
61
|
+
shouldNeverHappen(`HistoryDag node ${id} already exists`);
|
|
62
|
+
}
|
|
63
|
+
const nodeIndex = Graph.addNode(this.graph, attributes);
|
|
64
|
+
this.idToIndex.set(id, nodeIndex);
|
|
65
|
+
this.indexToId.set(nodeIndex, id);
|
|
66
|
+
}
|
|
67
|
+
hasNode(id) {
|
|
68
|
+
return this.idToIndex.has(id);
|
|
69
|
+
}
|
|
70
|
+
getNodeAttributes(id) {
|
|
71
|
+
const index = this.idToIndex.get(id);
|
|
72
|
+
if (index === undefined) {
|
|
73
|
+
return shouldNeverHappen(`HistoryDag node ${id} not found`);
|
|
74
|
+
}
|
|
75
|
+
const node = this.graph.nodes.get(index);
|
|
76
|
+
return node ?? shouldNeverHappen(`HistoryDag node data missing for ${id}`);
|
|
77
|
+
}
|
|
78
|
+
nodes() {
|
|
79
|
+
return this.idToIndex.keys();
|
|
80
|
+
}
|
|
81
|
+
nodeEntries() {
|
|
82
|
+
return function* () {
|
|
83
|
+
for (const [id, index] of this.idToIndex) {
|
|
84
|
+
const attributes = this.graph.nodes.get(index) ?? shouldNeverHappen(`HistoryDag node data missing for ${id}`);
|
|
85
|
+
yield { key: id, attributes };
|
|
86
|
+
}
|
|
87
|
+
}.call(this);
|
|
88
|
+
}
|
|
89
|
+
addEdge(sourceId, targetId, attributes) {
|
|
90
|
+
if (this.options.allowSelfLoops === false && sourceId === targetId) {
|
|
91
|
+
return shouldNeverHappen('HistoryDag self-loops are disabled');
|
|
92
|
+
}
|
|
93
|
+
const sourceIndex = this.idToIndex.get(sourceId);
|
|
94
|
+
const targetIndex = this.idToIndex.get(targetId);
|
|
95
|
+
if (sourceIndex === undefined || targetIndex === undefined) {
|
|
96
|
+
return shouldNeverHappen(`HistoryDag edge references unknown nodes: ${sourceId} -> ${targetId}`);
|
|
97
|
+
}
|
|
98
|
+
return Graph.addEdge(this.graph, sourceIndex, targetIndex, attributes);
|
|
99
|
+
}
|
|
100
|
+
edges(sourceId, targetId) {
|
|
101
|
+
const sourceIndex = this.idToIndex.get(sourceId);
|
|
102
|
+
const targetIndex = this.idToIndex.get(targetId);
|
|
103
|
+
if (sourceIndex === undefined || targetIndex === undefined) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
const adjacency = this.graph.adjacency.get(sourceIndex);
|
|
107
|
+
if (adjacency === undefined) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
return adjacency.filter((edgeIndex) => {
|
|
111
|
+
const edge = this.graph.edges.get(edgeIndex);
|
|
112
|
+
return edge !== undefined && edge.target === targetIndex;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
inEdges(id) {
|
|
116
|
+
const index = this.idToIndex.get(id);
|
|
117
|
+
if (index === undefined) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
const incoming = this.graph.reverseAdjacency.get(index);
|
|
121
|
+
return incoming ? [...incoming] : [];
|
|
122
|
+
}
|
|
123
|
+
outboundEdgeEntries(id) {
|
|
124
|
+
const index = this.idToIndex.get(id);
|
|
125
|
+
if (index === undefined) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
const adjacency = this.graph.adjacency.get(index);
|
|
129
|
+
if (adjacency === undefined) {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
return adjacency
|
|
133
|
+
.map((edgeIndex) => this.edgeEntry(edgeIndex))
|
|
134
|
+
.filter((entry) => entry !== undefined);
|
|
135
|
+
}
|
|
136
|
+
inboundEdgeEntries(id) {
|
|
137
|
+
const index = this.idToIndex.get(id);
|
|
138
|
+
if (index === undefined) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
const adjacency = this.graph.reverseAdjacency.get(index);
|
|
142
|
+
if (adjacency === undefined) {
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
return adjacency
|
|
146
|
+
.map((edgeIndex) => this.edgeEntry(edgeIndex))
|
|
147
|
+
.filter((entry) => entry !== undefined);
|
|
148
|
+
}
|
|
149
|
+
getEdgeAttributes(edgeIndex) {
|
|
150
|
+
const edge = this.graph.edges.get(edgeIndex);
|
|
151
|
+
return edge?.data ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} not found`);
|
|
152
|
+
}
|
|
153
|
+
getEdgeAttribute(edgeIndex, key) {
|
|
154
|
+
const attributes = this.getEdgeAttributes(edgeIndex);
|
|
155
|
+
return attributes[key];
|
|
156
|
+
}
|
|
157
|
+
source(edgeIndex) {
|
|
158
|
+
const edge = this.graph.edges.get(edgeIndex);
|
|
159
|
+
const sourceId = edge !== undefined ? this.indexToId.get(edge.source) : undefined;
|
|
160
|
+
return sourceId ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing source`);
|
|
161
|
+
}
|
|
162
|
+
target(edgeIndex) {
|
|
163
|
+
const edge = this.graph.edges.get(edgeIndex);
|
|
164
|
+
const targetId = edge !== undefined ? this.indexToId.get(edge.target) : undefined;
|
|
165
|
+
return targetId ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing target`);
|
|
166
|
+
}
|
|
167
|
+
dropNode(id) {
|
|
168
|
+
const index = this.idToIndex.get(id);
|
|
169
|
+
if (index === undefined) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
Graph.removeNode(this.graph, index);
|
|
173
|
+
this.idToIndex.delete(id);
|
|
174
|
+
this.indexToId.delete(index);
|
|
175
|
+
}
|
|
176
|
+
get size() {
|
|
177
|
+
return this.idToIndex.size;
|
|
178
|
+
}
|
|
179
|
+
edgeEntry(edgeIndex) {
|
|
180
|
+
const edge = this.graph.edges.get(edgeIndex);
|
|
181
|
+
if (edge === undefined) {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
const source = this.indexToId.get(edge.source);
|
|
185
|
+
const target = this.indexToId.get(edge.target);
|
|
186
|
+
if (source === undefined || target === undefined) {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
edge: edgeIndex,
|
|
191
|
+
source,
|
|
192
|
+
target,
|
|
193
|
+
attributes: edge.data,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
export const emptyHistoryDag = () => HistoryDag.create({ allowSelfLoops: false });
|
|
9
198
|
// TODO consider making `ROOT_ID` parent to itself
|
|
10
199
|
export const rootParentNum = EventSequenceNumber.make({
|
|
11
200
|
global: EventSequenceNumber.ROOT.global - 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-dag-common.js","sourceRoot":"","sources":["../../../src/sync/next/history-dag-common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"history-dag-common.js","sourceRoot":"","sources":["../../../src/sync/next/history-dag-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAE/C,OAAO,KAAK,mBAAmB,MAAM,qCAAqC,CAAA;AAE1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAA;AA4BjE,MAAM,cAAc,GAAsB;IACxC,cAAc,EAAE,KAAK;CACtB,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,UAA8B,EAAsB,EAAE,CAAC,CAAC;IAC/E,OAAO,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;IACpC,UAAU,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;IAC1C,SAAS,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;IACxC,WAAW,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;CAC7C,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAoB,EAAkB,EAAE,CAAC,CAAC;IACrE,GAAG,IAAI;IACP,+DAA+D;IAC/D,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;IACtC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC1B,8EAA8E;IAC9E,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;CAC7C,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,OAAO,UAAU;IACJ,OAAO,CAAmB;IAC1B,SAAS,CAA8B;IACvC,SAAS,CAA8B;IACvC,KAAK,CAAsE;IAE5F,YAAoB,EAClB,KAAK,EACL,SAAS,EACT,SAAS,EACT,OAAO,GAMR;QACC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAA;QAChD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;QAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;IAC7D,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAoC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAA4C,CAAC,CAAA;QAC7F,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,IAAI;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE7C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAA;YACvG,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9C,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,mCAAmC,CAAC,CAAA;YAC1G,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,mCAAmC,CAAC,CAAA;YAC1G,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,kBAAkB;QAChB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QACjD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC,CAAA;IACrH,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,UAA0B;QAC5C,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,iBAAiB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,iBAAiB,CAAC,EAAU;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,iBAAiB,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxC,OAAO,IAAI,IAAI,iBAAiB,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAC9B,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAA;gBAC7G,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,CAAA;YAC/B,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE,QAAgB,EAAE,UAAoC;QAC9E,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,KAAK,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnE,OAAO,iBAAiB,CAAC,oCAAoC,CAAC,CAAA;QAChE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEhD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC3D,OAAO,iBAAiB,CAAC,6CAA6C,QAAQ,OAAO,QAAQ,EAAE,CAAC,CAAA;QAClG,CAAC;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;IACxE,CAAC;IAED,KAAK,CAAC,QAAgB,EAAE,QAAgB;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEhD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC3D,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtC,CAAC;IAED,mBAAmB,CAAC,EAAU;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;aAC7C,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IACzE,CAAC;IAED,kBAAkB,CAAC,EAAU;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACxD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;aAC7C,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IACzE,CAAC;IAED,iBAAiB,CAAC,SAA0B;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,OAAO,IAAI,EAAE,IAAI,IAAI,iBAAiB,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAA;IAClF,CAAC;IAED,gBAAgB,CACd,SAA0B,EAC1B,GAAS;QAET,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACpD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,MAAM,CAAC,SAA0B;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACjF,OAAO,QAAQ,IAAI,iBAAiB,CAAC,mBAAmB,SAAS,iBAAiB,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,CAAC,SAA0B;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACjF,OAAO,QAAQ,IAAI,iBAAiB,CAAC,mBAAmB,SAAS,iBAAiB,CAAC,CAAA;IACrF,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAM;QACR,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;IAC5B,CAAC;IAEO,SAAS,CAAC,SAA0B;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,SAAS;YACf,MAAM;YACN,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,IAAI;SACtB,CAAA;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,GAAe,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAA;AAE7F,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,CAAC;IACpD,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;IAC3C,MAAM,EAAE,mBAAmB,CAAC,aAAa;CAC1C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,MAAM,EAAE,mBAAmB,CAAC,IAAI;IAChC,YAAY,EAAE,aAAa;IAC3B,eAAe;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE;IACvG,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,SAAS;CACrB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-dag.d.ts","sourceRoot":"","sources":["../../../src/sync/next/history-dag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,cAAc,EAAiB,MAAM,yBAAyB,CAAA;AAE7F,eAAO,MAAM,mBAAmB,GAAI,UAAU,cAAc,EAAE,EAAE,UAAU;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"history-dag.d.ts","sourceRoot":"","sources":["../../../src/sync/next/history-dag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,cAAc,EAAiB,MAAM,yBAAyB,CAAA;AAE7F,eAAO,MAAM,mBAAmB,GAAI,UAAU,cAAc,EAAE,EAAE,UAAU;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,iDA+DpG,CAAA"}
|
|
@@ -12,7 +12,9 @@ export const historyDagFromNodes = (dagNodes, options) => {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
const dag = emptyHistoryDag();
|
|
15
|
-
dagNodes.forEach((node) =>
|
|
15
|
+
dagNodes.forEach((node) => {
|
|
16
|
+
dag.addNode(EventSequenceNumber.toString(node.seqNum), node);
|
|
17
|
+
});
|
|
16
18
|
dagNodes.forEach((node) => {
|
|
17
19
|
if (EventSequenceNumber.toString(node.parentSeqNum) !== EventSequenceNumber.toString(rootParentNum)) {
|
|
18
20
|
dag.addEdge(EventSequenceNumber.toString(node.parentSeqNum), EventSequenceNumber.toString(node.seqNum), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-dag.js","sourceRoot":"","sources":["../../../src/sync/next/history-dag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,mBAAmB,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,eAAe,EAAuB,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE7F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAA0B,EAAE,OAAqC,EAAE,EAAE;IACvG,IAAI,OAAO,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,aAAa,CAAC;YACrC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YACnD,eAAe,EAAE,IAAI,GAAG,EAAe;SACxC,CAAC,CAAA;QAEF,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAE,CAAC,IAAI,0DAA0D,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,qBAAqB,aAAa,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAC7N,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,EAAE,CAAA;IAE7B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"history-dag.js","sourceRoot":"","sources":["../../../src/sync/next/history-dag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect, KeyValueStore, Option } from '@livestore/utils/effect';
|
|
2
|
+
import { UnexpectedError } from '../errors.ts';
|
|
3
|
+
export declare const makeBackendIdHelper: Effect.Effect<{
|
|
4
|
+
lazySet: (backendId: string) => Effect.Effect<void, UnexpectedError, never>;
|
|
5
|
+
get: () => Option.Option<string>;
|
|
6
|
+
}, UnexpectedError, KeyValueStore.KeyValueStore>;
|
|
7
|
+
//# sourceMappingURL=sync-backend-kv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-backend-kv.d.ts","sourceRoot":"","sources":["../../src/sync/sync-backend-kv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,eAAO,MAAM,mBAAmB;yBAMG,MAAM;;gDAYvC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Effect, KeyValueStore, Option } from '@livestore/utils/effect';
|
|
2
|
+
import { UnexpectedError } from "../errors.js";
|
|
3
|
+
export const makeBackendIdHelper = Effect.gen(function* () {
|
|
4
|
+
const kv = yield* KeyValueStore.KeyValueStore;
|
|
5
|
+
const backendIdKey = `backendId`;
|
|
6
|
+
const backendIdRef = { current: yield* kv.get(backendIdKey).pipe(UnexpectedError.mapToUnexpectedError) };
|
|
7
|
+
const setBackendId = (backendId) => Effect.gen(function* () {
|
|
8
|
+
if (backendIdRef.current._tag === 'None' || backendIdRef.current.value !== backendId) {
|
|
9
|
+
backendIdRef.current = Option.some(backendId);
|
|
10
|
+
yield* kv.set(backendIdKey, backendId);
|
|
11
|
+
}
|
|
12
|
+
}).pipe(UnexpectedError.mapToUnexpectedError);
|
|
13
|
+
return {
|
|
14
|
+
lazySet: setBackendId,
|
|
15
|
+
get: () => backendIdRef.current,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=sync-backend-kv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-backend-kv.js","sourceRoot":"","sources":["../../src/sync/sync-backend-kv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,aAAa,CAAA;IAE7C,MAAM,YAAY,GAAG,WAAW,CAAA;IAChC,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,EAAE,CAAA;IAExG,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACrF,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7C,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QACxC,CAAC;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAA;IAE/C,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO;KAChC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { type Cause, type Effect, type HttpClient, type KeyValueStore, Option, Schema, type Scope, type Stream, type SubscriptionRef } from '@livestore/utils/effect';
|
|
2
|
+
import type { UnexpectedError } from '../adapter-types.ts';
|
|
3
|
+
import type * as LiveStoreEvent from '../schema/LiveStoreEvent.ts';
|
|
4
|
+
import type { EventSequenceNumber } from '../schema/mod.ts';
|
|
5
|
+
import type { InvalidPullError, InvalidPushError, IsOfflineError } from './errors.ts';
|
|
6
|
+
export * from './sync-backend-kv.ts';
|
|
7
|
+
/**
|
|
8
|
+
* Those arguments can be used to implement multi-tenancy etc and are passed in from the store.
|
|
9
|
+
*/
|
|
10
|
+
export type MakeBackendArgs = {
|
|
11
|
+
storeId: string;
|
|
12
|
+
clientId: string;
|
|
13
|
+
payload: Schema.JsonValue | undefined;
|
|
14
|
+
};
|
|
15
|
+
export type SyncBackendConstructor<TSyncMetadata = Schema.JsonValue> = (args: MakeBackendArgs) => Effect.Effect<SyncBackend<TSyncMetadata>, UnexpectedError, Scope.Scope | HttpClient.HttpClient | KeyValueStore.KeyValueStore>;
|
|
16
|
+
export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
|
|
17
|
+
/**
|
|
18
|
+
* Can be implemented to prepare a connection to the sync backend to speed up the first pull/push.
|
|
19
|
+
*/
|
|
20
|
+
connect: Effect.Effect<void, IsOfflineError | UnexpectedError, Scope.Scope>;
|
|
21
|
+
pull: (cursor: Option.Option<{
|
|
22
|
+
eventSequenceNumber: EventSequenceNumber.GlobalEventSequenceNumber;
|
|
23
|
+
/** Metadata is needed by some sync backends */
|
|
24
|
+
metadata: Option.Option<TSyncMetadata>;
|
|
25
|
+
}>, options?: {
|
|
26
|
+
/**
|
|
27
|
+
* If true, the sync backend will return a stream of events that have been pushed after the cursor.
|
|
28
|
+
*
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
live?: boolean;
|
|
32
|
+
}) => Stream.Stream<PullResItem<TSyncMetadata>, IsOfflineError | InvalidPullError>;
|
|
33
|
+
push: (
|
|
34
|
+
/**
|
|
35
|
+
* Constraints for batch:
|
|
36
|
+
* - Number of events: 1-100
|
|
37
|
+
* - sequence numbers must be in ascending order
|
|
38
|
+
* */
|
|
39
|
+
batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>) => Effect.Effect<void, IsOfflineError | InvalidPushError>;
|
|
40
|
+
ping: Effect.Effect<void, IsOfflineError | UnexpectedError | Cause.TimeoutException>;
|
|
41
|
+
isConnected: SubscriptionRef.SubscriptionRef<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Metadata describing the sync backend. (Currently only used by devtools.)
|
|
44
|
+
*/
|
|
45
|
+
metadata: {
|
|
46
|
+
name: string;
|
|
47
|
+
description: string;
|
|
48
|
+
} & Record<string, Schema.JsonValue>;
|
|
49
|
+
/** Information about the sync backend capabilities. */
|
|
50
|
+
supports: {
|
|
51
|
+
/**
|
|
52
|
+
* Whether the sync backend supports the `hasMore` field in the pull response.
|
|
53
|
+
*/
|
|
54
|
+
pullPageInfoKnown: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Whether the sync backend supports the `live` option for the pull method and thus
|
|
57
|
+
* long-lived, reactive pull streams.
|
|
58
|
+
*/
|
|
59
|
+
pullLive: boolean;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Connectivity metadata emitted by sync backends.
|
|
64
|
+
*/
|
|
65
|
+
export declare const NetworkStatus: Schema.Struct<{
|
|
66
|
+
/** True when the upstream sync backend is reachable and responding to health checks. */
|
|
67
|
+
isConnected: typeof Schema.Boolean;
|
|
68
|
+
/** Unix epoch timestamp (ms) of the latest connectivity state transition. */
|
|
69
|
+
timestampMs: typeof Schema.Number;
|
|
70
|
+
/** Devtools specific metadata describing simulator overrides. */
|
|
71
|
+
devtools: Schema.Struct<{
|
|
72
|
+
/** Indicates whether the devtools latch forced the client into an offline state. */
|
|
73
|
+
latchClosed: typeof Schema.Boolean;
|
|
74
|
+
}>;
|
|
75
|
+
}>;
|
|
76
|
+
export type NetworkStatus = typeof NetworkStatus.Type;
|
|
77
|
+
/**
|
|
78
|
+
* Runtime type guard for SyncBackend objects.
|
|
79
|
+
* Performs lightweight structural checks on the object shape.
|
|
80
|
+
*/
|
|
81
|
+
export declare const isSyncBackend: (value: unknown) => value is SyncBackend<any>;
|
|
82
|
+
export declare const PullResPageInfo: Schema.Union<[Schema.TaggedStruct<"MoreUnknown", {}>, Schema.TaggedStruct<"MoreKnown", {
|
|
83
|
+
remaining: typeof Schema.Number;
|
|
84
|
+
}>, Schema.TaggedStruct<"NoMore", {}>]>;
|
|
85
|
+
export type PullResPageInfo = typeof PullResPageInfo.Type;
|
|
86
|
+
export declare const pageInfoNoMore: PullResPageInfo;
|
|
87
|
+
export declare const pageInfoMoreUnknown: PullResPageInfo;
|
|
88
|
+
export declare const pageInfoMoreKnown: (remaining: number) => PullResPageInfo;
|
|
89
|
+
export declare const pullResItemEmpty: <TSyncMetadata = Schema.JsonValue>() => PullResItem<TSyncMetadata>;
|
|
90
|
+
export interface PullResItem<TSyncMetadata = Schema.JsonValue> {
|
|
91
|
+
batch: ReadonlyArray<{
|
|
92
|
+
eventEncoded: LiveStoreEvent.AnyEncodedGlobal;
|
|
93
|
+
metadata: Option.Option<TSyncMetadata>;
|
|
94
|
+
}>;
|
|
95
|
+
pageInfo: PullResPageInfo;
|
|
96
|
+
}
|
|
97
|
+
export declare const of: <TSyncMetadata = Schema.JsonValue>(obj: SyncBackend<TSyncMetadata>) => SyncBackend<TSyncMetadata>;
|
|
98
|
+
/**
|
|
99
|
+
* Useful to continue pulling from the last event in the batch.
|
|
100
|
+
*/
|
|
101
|
+
export declare const cursorFromPullResItem: <TSyncMetadata = Schema.JsonValue>(item: PullResItem<TSyncMetadata>) => Option.Option<{
|
|
102
|
+
eventSequenceNumber: EventSequenceNumber.GlobalEventSequenceNumber;
|
|
103
|
+
metadata: Option.Option<TSyncMetadata>;
|
|
104
|
+
}>;
|
|
105
|
+
//# sourceMappingURL=sync-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-backend.d.ts","sourceRoot":"","sources":["../../src/sync/sync-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Option, Schema, } from '@livestore/utils/effect';
|
|
2
|
+
export * from "./sync-backend-kv.js";
|
|
3
|
+
/**
|
|
4
|
+
* Connectivity metadata emitted by sync backends.
|
|
5
|
+
*/
|
|
6
|
+
export const NetworkStatus = Schema.Struct({
|
|
7
|
+
/** True when the upstream sync backend is reachable and responding to health checks. */
|
|
8
|
+
isConnected: Schema.Boolean,
|
|
9
|
+
/** Unix epoch timestamp (ms) of the latest connectivity state transition. */
|
|
10
|
+
timestampMs: Schema.Number,
|
|
11
|
+
/** Devtools specific metadata describing simulator overrides. */
|
|
12
|
+
devtools: Schema.Struct({
|
|
13
|
+
/** Indicates whether the devtools latch forced the client into an offline state. */
|
|
14
|
+
latchClosed: Schema.Boolean,
|
|
15
|
+
}),
|
|
16
|
+
}).annotations({ title: 'NetworkStatus' });
|
|
17
|
+
/**
|
|
18
|
+
* Runtime type guard for SyncBackend objects.
|
|
19
|
+
* Performs lightweight structural checks on the object shape.
|
|
20
|
+
*/
|
|
21
|
+
export const isSyncBackend = (value) => {
|
|
22
|
+
if (typeof value !== 'object' || value === null)
|
|
23
|
+
return false;
|
|
24
|
+
const v = value;
|
|
25
|
+
const hasCoreFns = typeof v.connect === 'function' &&
|
|
26
|
+
typeof v.pull === 'function' &&
|
|
27
|
+
typeof v.push === 'function' &&
|
|
28
|
+
typeof v.ping === 'function';
|
|
29
|
+
const hasSupports = typeof v.supports === 'object' &&
|
|
30
|
+
v.supports !== null &&
|
|
31
|
+
typeof v.supports.pullPageInfoKnown === 'boolean' &&
|
|
32
|
+
typeof v.supports.pullLive === 'boolean';
|
|
33
|
+
const hasMetadata = typeof v.metadata === 'object' &&
|
|
34
|
+
v.metadata !== null &&
|
|
35
|
+
typeof v.metadata.name === 'string' &&
|
|
36
|
+
typeof v.metadata.description === 'string';
|
|
37
|
+
const hasIsConnected = typeof v.isConnected === 'object' && v.isConnected !== null;
|
|
38
|
+
return hasCoreFns && hasSupports && hasMetadata && hasIsConnected;
|
|
39
|
+
};
|
|
40
|
+
export const PullResPageInfo = Schema.Union(Schema.TaggedStruct('MoreUnknown', {}), Schema.TaggedStruct('MoreKnown', {
|
|
41
|
+
remaining: Schema.Number,
|
|
42
|
+
}), Schema.TaggedStruct('NoMore', {}));
|
|
43
|
+
export const pageInfoNoMore = { _tag: 'NoMore' };
|
|
44
|
+
export const pageInfoMoreUnknown = { _tag: 'MoreUnknown' };
|
|
45
|
+
export const pageInfoMoreKnown = (remaining) => ({ _tag: 'MoreKnown', remaining });
|
|
46
|
+
export const pullResItemEmpty = () => ({
|
|
47
|
+
batch: [],
|
|
48
|
+
pageInfo: pageInfoNoMore,
|
|
49
|
+
});
|
|
50
|
+
export const of = (obj) => obj;
|
|
51
|
+
/**
|
|
52
|
+
* Useful to continue pulling from the last event in the batch.
|
|
53
|
+
*/
|
|
54
|
+
export const cursorFromPullResItem = (item) => {
|
|
55
|
+
const lastEvent = item.batch.at(-1);
|
|
56
|
+
if (!lastEvent) {
|
|
57
|
+
return Option.none();
|
|
58
|
+
}
|
|
59
|
+
return Option.some({ eventSequenceNumber: lastEvent.eventEncoded.seqNum, metadata: lastEvent.metadata });
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=sync-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-backend.js","sourceRoot":"","sources":["../../src/sync/sync-backend.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/sync.d.ts
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import type { UnexpectedError } from '../adapter-types.ts';
|
|
1
|
+
export * from './errors.ts';
|
|
2
|
+
export * as SyncBackend from './sync-backend.ts';
|
|
4
3
|
import type { InitialSyncOptions } from '../leader-thread/types.ts';
|
|
5
|
-
import
|
|
6
|
-
import type * as LiveStoreEvent from '../schema/LiveStoreEvent.ts';
|
|
7
|
-
/**
|
|
8
|
-
* Those arguments can be used to implement multi-tenancy etc and are passed in from the store.
|
|
9
|
-
*/
|
|
10
|
-
export type MakeBackendArgs = {
|
|
11
|
-
storeId: string;
|
|
12
|
-
clientId: string;
|
|
13
|
-
payload: Schema.JsonValue | undefined;
|
|
14
|
-
};
|
|
4
|
+
import type { SyncBackendConstructor } from './sync-backend.ts';
|
|
15
5
|
export type SyncOptions = {
|
|
16
6
|
backend?: SyncBackendConstructor<any>;
|
|
17
7
|
/** @default { _tag: 'Skip' } */
|
|
@@ -26,78 +16,10 @@ export type SyncOptions = {
|
|
|
26
16
|
* @default 'ignore'
|
|
27
17
|
* */
|
|
28
18
|
onSyncError?: 'shutdown' | 'ignore';
|
|
29
|
-
};
|
|
30
|
-
export type SyncBackendConstructor<TSyncMetadata = Schema.JsonValue> = (args: MakeBackendArgs) => Effect.Effect<SyncBackend<TSyncMetadata>, UnexpectedError, Scope.Scope | HttpClient.HttpClient>;
|
|
31
|
-
export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
|
|
32
|
-
/**
|
|
33
|
-
* Can be implemented to prepare a connection to the sync backend to speed up the first pull/push.
|
|
34
|
-
*/
|
|
35
|
-
connect: Effect.Effect<void, IsOfflineError | UnexpectedError, HttpClient.HttpClient | Scope.Scope>;
|
|
36
|
-
pull: (args: Option.Option<{
|
|
37
|
-
cursor: EventSequenceNumber.EventSequenceNumber;
|
|
38
|
-
metadata: Option.Option<TSyncMetadata>;
|
|
39
|
-
}>) => Stream.Stream<{
|
|
40
|
-
batch: ReadonlyArray<{
|
|
41
|
-
eventEncoded: LiveStoreEvent.AnyEncodedGlobal;
|
|
42
|
-
metadata: Option.Option<TSyncMetadata>;
|
|
43
|
-
}>;
|
|
44
|
-
remaining: number;
|
|
45
|
-
}, IsOfflineError | InvalidPullError, HttpClient.HttpClient>;
|
|
46
|
-
push: (
|
|
47
|
-
/**
|
|
48
|
-
* Constraints for batch:
|
|
49
|
-
* - Number of events: 1-100
|
|
50
|
-
* - sequence numbers must be in ascending order
|
|
51
|
-
* */
|
|
52
|
-
batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>) => Effect.Effect<void, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
|
|
53
|
-
isConnected: SubscriptionRef.SubscriptionRef<boolean>;
|
|
54
19
|
/**
|
|
55
|
-
*
|
|
20
|
+
* Whether the sync backend should reactively pull new events from the sync backend
|
|
21
|
+
* @default true
|
|
56
22
|
*/
|
|
57
|
-
|
|
58
|
-
name: string;
|
|
59
|
-
description: string;
|
|
60
|
-
} & Record<string, Schema.JsonValue>;
|
|
23
|
+
livePull?: boolean;
|
|
61
24
|
};
|
|
62
|
-
declare const IsOfflineError_base: Schema.TaggedErrorClass<IsOfflineError, "IsOfflineError", {
|
|
63
|
-
readonly _tag: Schema.tag<"IsOfflineError">;
|
|
64
|
-
}>;
|
|
65
|
-
export declare class IsOfflineError extends IsOfflineError_base {
|
|
66
|
-
}
|
|
67
|
-
declare const InvalidPushError_base: Schema.TaggedErrorClass<InvalidPushError, "InvalidPushError", {
|
|
68
|
-
readonly _tag: Schema.tag<"InvalidPushError">;
|
|
69
|
-
} & {
|
|
70
|
-
reason: Schema.Union<[Schema.TaggedStruct<"Unexpected", {
|
|
71
|
-
message: typeof Schema.String;
|
|
72
|
-
}>, Schema.TaggedStruct<"ServerAhead", {
|
|
73
|
-
minimumExpectedNum: typeof Schema.Number;
|
|
74
|
-
providedNum: typeof Schema.Number;
|
|
75
|
-
}>]>;
|
|
76
|
-
}>;
|
|
77
|
-
export declare class InvalidPushError extends InvalidPushError_base {
|
|
78
|
-
}
|
|
79
|
-
declare const InvalidPullError_base: Schema.TaggedErrorClass<InvalidPullError, "InvalidPullError", {
|
|
80
|
-
readonly _tag: Schema.tag<"InvalidPullError">;
|
|
81
|
-
} & {
|
|
82
|
-
message: typeof Schema.String;
|
|
83
|
-
}>;
|
|
84
|
-
export declare class InvalidPullError extends InvalidPullError_base {
|
|
85
|
-
}
|
|
86
|
-
declare const LeaderAheadError_base: Schema.TaggedErrorClass<LeaderAheadError, "LeaderAheadError", {
|
|
87
|
-
readonly _tag: Schema.tag<"LeaderAheadError">;
|
|
88
|
-
} & {
|
|
89
|
-
minimumExpectedNum: Schema.Struct<{
|
|
90
|
-
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
91
|
-
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
92
|
-
rebaseGeneration: typeof Schema.Int;
|
|
93
|
-
}>;
|
|
94
|
-
providedNum: Schema.Struct<{
|
|
95
|
-
global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
96
|
-
client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventSequenceNumber">, number, never>;
|
|
97
|
-
rebaseGeneration: typeof Schema.Int;
|
|
98
|
-
}>;
|
|
99
|
-
}>;
|
|
100
|
-
export declare class LeaderAheadError extends LeaderAheadError_base {
|
|
101
|
-
}
|
|
102
|
-
export {};
|
|
103
25
|
//# sourceMappingURL=sync.d.ts.map
|
package/dist/sync/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAEhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACrC,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;;;;;;SAQK;IACL,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA"}
|
package/dist/sync/sync.js
CHANGED
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export class IsOfflineError extends Schema.TaggedError()('IsOfflineError', {}) {
|
|
4
|
-
}
|
|
5
|
-
// TODO gt rid of this error in favour of SyncError
|
|
6
|
-
export class InvalidPushError extends Schema.TaggedError()('InvalidPushError', {
|
|
7
|
-
reason: Schema.Union(Schema.TaggedStruct('Unexpected', {
|
|
8
|
-
message: Schema.String,
|
|
9
|
-
}), Schema.TaggedStruct('ServerAhead', {
|
|
10
|
-
minimumExpectedNum: Schema.Number,
|
|
11
|
-
providedNum: Schema.Number,
|
|
12
|
-
})),
|
|
13
|
-
}) {
|
|
14
|
-
}
|
|
15
|
-
// TODO gt rid of this error in favour of SyncError
|
|
16
|
-
export class InvalidPullError extends Schema.TaggedError()('InvalidPullError', {
|
|
17
|
-
message: Schema.String,
|
|
18
|
-
}) {
|
|
19
|
-
}
|
|
20
|
-
// TODO gt rid of this error in favour of SyncError
|
|
21
|
-
export class LeaderAheadError extends Schema.TaggedError()('LeaderAheadError', {
|
|
22
|
-
minimumExpectedNum: EventSequenceNumber.EventSequenceNumber,
|
|
23
|
-
providedNum: EventSequenceNumber.EventSequenceNumber,
|
|
24
|
-
/** Generation number the client session should use for subsequent pushes */
|
|
25
|
-
// nextGeneration: Schema.Number,
|
|
26
|
-
}) {
|
|
27
|
-
}
|
|
1
|
+
export * from "./errors.js";
|
|
2
|
+
export * as SyncBackend from "./sync-backend.js";
|
|
28
3
|
//# sourceMappingURL=sync.js.map
|
package/dist/sync/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA"}
|