@dxos/echo-pipeline 0.3.2 → 0.3.3-main.10234ef
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/lib/browser/{chunk-QEYXVBEM.mjs → chunk-KD6OVLI6.mjs} +87 -29
- package/dist/lib/browser/chunk-KD6OVLI6.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +5 -3
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/index.cjs +131 -73
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +140 -80
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/db-host/data-service-host.d.ts +10 -2
- package/dist/types/src/db-host/data-service-host.d.ts.map +1 -1
- package/dist/types/src/db-host/database-host.d.ts +2 -2
- package/dist/types/src/db-host/database-host.d.ts.map +1 -1
- package/package.json +31 -31
- package/src/db-host/data-service-host.ts +90 -9
- package/src/db-host/database-host.ts +9 -3
- package/src/testing/database-test-rig.ts +1 -1
- package/dist/lib/browser/chunk-QEYXVBEM.mjs.map +0 -7
|
@@ -8,7 +8,7 @@ var valueEncoding = createCodecEncoding(codec);
|
|
|
8
8
|
|
|
9
9
|
// packages/core/echo/echo-pipeline/src/common/feeds.ts
|
|
10
10
|
import { invariant } from "@dxos/invariant";
|
|
11
|
-
var __dxlog_file = "/
|
|
11
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/common/feeds.ts";
|
|
12
12
|
var createMappedFeedWriter = (mapper, writer) => {
|
|
13
13
|
invariant(mapper, void 0, {
|
|
14
14
|
F: __dxlog_file,
|
|
@@ -34,6 +34,7 @@ var createMappedFeedWriter = (mapper, writer) => {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
// packages/core/echo/echo-pipeline/src/db-host/data-service-host.ts
|
|
37
|
+
import { UpdateScheduler } from "@dxos/async";
|
|
37
38
|
import { Stream } from "@dxos/codec-protobuf";
|
|
38
39
|
import { Context } from "@dxos/context";
|
|
39
40
|
import { tagMutationsInBatch, setMetadataOnObject } from "@dxos/echo-db";
|
|
@@ -41,13 +42,15 @@ import { invariant as invariant2 } from "@dxos/invariant";
|
|
|
41
42
|
import { log } from "@dxos/log";
|
|
42
43
|
import { EchoEvent } from "@dxos/protocols/proto/dxos/echo/service";
|
|
43
44
|
import { ComplexMap } from "@dxos/util";
|
|
44
|
-
var __dxlog_file2 = "/
|
|
45
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/data-service-host.ts";
|
|
46
|
+
var MUTATION_LIMIT_PER_OBJECT = 10;
|
|
45
47
|
var DataServiceHost = class {
|
|
46
|
-
constructor(_itemManager, _itemDemuxer, _flush, _writeStream) {
|
|
48
|
+
constructor(_itemManager, _itemDemuxer, _flush, _writeStream, _opts = {}) {
|
|
47
49
|
this._itemManager = _itemManager;
|
|
48
50
|
this._itemDemuxer = _itemDemuxer;
|
|
49
51
|
this._flush = _flush;
|
|
50
52
|
this._writeStream = _writeStream;
|
|
53
|
+
this._opts = _opts;
|
|
51
54
|
this._ctx = new Context();
|
|
52
55
|
this._clientTagMap = new ComplexMap(([feedKey, seq]) => `${feedKey.toHex()}:${seq}`);
|
|
53
56
|
}
|
|
@@ -56,6 +59,9 @@ var DataServiceHost = class {
|
|
|
56
59
|
async close() {
|
|
57
60
|
await this._ctx.dispose();
|
|
58
61
|
}
|
|
62
|
+
get _deferEvents() {
|
|
63
|
+
return this._opts.deferEvents ?? true;
|
|
64
|
+
}
|
|
59
65
|
/**
|
|
60
66
|
* Real-time subscription to data objects in a space.
|
|
61
67
|
*/
|
|
@@ -68,7 +74,43 @@ var DataServiceHost = class {
|
|
|
68
74
|
objects
|
|
69
75
|
}
|
|
70
76
|
});
|
|
77
|
+
const updateScheduler = new UpdateScheduler(ctx, async () => {
|
|
78
|
+
flushPendingUpdate();
|
|
79
|
+
}, {
|
|
80
|
+
maxFrequency: 10
|
|
81
|
+
});
|
|
82
|
+
const pendingUpdates = [];
|
|
83
|
+
const mutationsPerObject = /* @__PURE__ */ new Map();
|
|
84
|
+
const clearPendingUpdates = () => {
|
|
85
|
+
pendingUpdates.length = 0;
|
|
86
|
+
mutationsPerObject.clear();
|
|
87
|
+
};
|
|
88
|
+
const flushPendingUpdate = () => {
|
|
89
|
+
const stagedEvents = [];
|
|
90
|
+
const objectsWithSnapshots = /* @__PURE__ */ new Set();
|
|
91
|
+
for (const [id, count] of mutationsPerObject) {
|
|
92
|
+
if (count >= MUTATION_LIMIT_PER_OBJECT) {
|
|
93
|
+
objectsWithSnapshots.add(id);
|
|
94
|
+
const entity = this._itemManager.entities.get(id);
|
|
95
|
+
if (entity) {
|
|
96
|
+
stagedEvents.push(entity.createSnapshot());
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
for (const obj of pendingUpdates) {
|
|
101
|
+
if (!objectsWithSnapshots.has(obj.objectId)) {
|
|
102
|
+
stagedEvents.push(obj);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
next({
|
|
106
|
+
batch: {
|
|
107
|
+
objects: stagedEvents
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
clearPendingUpdates();
|
|
111
|
+
};
|
|
71
112
|
this._itemDemuxer.snapshot.on(ctx, (snapshot) => {
|
|
113
|
+
clearPendingUpdates();
|
|
72
114
|
next({
|
|
73
115
|
action: EchoEvent.DatabaseAction.RESET,
|
|
74
116
|
batch: {
|
|
@@ -80,7 +122,7 @@ var DataServiceHost = class {
|
|
|
80
122
|
const { batch, meta } = message;
|
|
81
123
|
invariant2(!meta.clientTag, "Unexpected client tag in mutation message", {
|
|
82
124
|
F: __dxlog_file2,
|
|
83
|
-
L:
|
|
125
|
+
L: 131,
|
|
84
126
|
S: this,
|
|
85
127
|
A: [
|
|
86
128
|
"!(meta as any).clientTag",
|
|
@@ -92,7 +134,7 @@ var DataServiceHost = class {
|
|
|
92
134
|
meta
|
|
93
135
|
}, {
|
|
94
136
|
F: __dxlog_file2,
|
|
95
|
-
L:
|
|
137
|
+
L: 132,
|
|
96
138
|
S: this,
|
|
97
139
|
C: (f, a) => f(...a)
|
|
98
140
|
});
|
|
@@ -106,21 +148,37 @@ var DataServiceHost = class {
|
|
|
106
148
|
});
|
|
107
149
|
});
|
|
108
150
|
if (clientTag) {
|
|
151
|
+
flushPendingUpdate();
|
|
109
152
|
tagMutationsInBatch(batch, clientTag, 0);
|
|
153
|
+
next({
|
|
154
|
+
clientTag,
|
|
155
|
+
feedKey: message.meta.feedKey,
|
|
156
|
+
seq: message.meta.seq,
|
|
157
|
+
batch
|
|
158
|
+
});
|
|
159
|
+
} else {
|
|
160
|
+
for (const obj of batch.objects ?? []) {
|
|
161
|
+
const newCount = (mutationsPerObject.get(obj.objectId) ?? 0) + 1;
|
|
162
|
+
mutationsPerObject.set(obj.objectId, newCount);
|
|
163
|
+
}
|
|
164
|
+
for (const obj of batch.objects ?? []) {
|
|
165
|
+
if ((mutationsPerObject.get(obj.objectId) ?? 0) < MUTATION_LIMIT_PER_OBJECT) {
|
|
166
|
+
pendingUpdates.push(obj);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (this._deferEvents) {
|
|
170
|
+
updateScheduler.trigger();
|
|
171
|
+
} else {
|
|
172
|
+
flushPendingUpdate();
|
|
173
|
+
}
|
|
110
174
|
}
|
|
111
|
-
next({
|
|
112
|
-
clientTag,
|
|
113
|
-
feedKey: message.meta.feedKey,
|
|
114
|
-
seq: message.meta.seq,
|
|
115
|
-
batch
|
|
116
|
-
});
|
|
117
175
|
});
|
|
118
176
|
});
|
|
119
177
|
}
|
|
120
178
|
async write(request) {
|
|
121
179
|
invariant2(!this._ctx.disposed, "Cannot write to closed DataServiceHost", {
|
|
122
180
|
F: __dxlog_file2,
|
|
123
|
-
L:
|
|
181
|
+
L: 177,
|
|
124
182
|
S: this,
|
|
125
183
|
A: [
|
|
126
184
|
"!this._ctx.disposed",
|
|
@@ -129,7 +187,7 @@ var DataServiceHost = class {
|
|
|
129
187
|
});
|
|
130
188
|
invariant2(this._writeStream, "Cannot write mutations in readonly mode", {
|
|
131
189
|
F: __dxlog_file2,
|
|
132
|
-
L:
|
|
190
|
+
L: 178,
|
|
133
191
|
S: this,
|
|
134
192
|
A: [
|
|
135
193
|
"this._writeStream",
|
|
@@ -141,7 +199,7 @@ var DataServiceHost = class {
|
|
|
141
199
|
objectCount: request.batch.objects?.length ?? 0
|
|
142
200
|
}, {
|
|
143
201
|
F: __dxlog_file2,
|
|
144
|
-
L:
|
|
202
|
+
L: 180,
|
|
145
203
|
S: this,
|
|
146
204
|
C: (f, a) => f(...a)
|
|
147
205
|
});
|
|
@@ -155,7 +213,7 @@ var DataServiceHost = class {
|
|
|
155
213
|
seq: receipt2.seq
|
|
156
214
|
}, {
|
|
157
215
|
F: __dxlog_file2,
|
|
158
|
-
L:
|
|
216
|
+
L: 189,
|
|
159
217
|
S: this,
|
|
160
218
|
C: (f, a) => f(...a)
|
|
161
219
|
});
|
|
@@ -212,8 +270,8 @@ var DatabaseHost = class {
|
|
|
212
270
|
createSnapshot() {
|
|
213
271
|
return this._itemDemuxer.createSnapshot();
|
|
214
272
|
}
|
|
215
|
-
createDataServiceHost() {
|
|
216
|
-
return new DataServiceHost(this._itemManager, this._itemDemuxer, this._flush, this._outboundStream ?? void 0);
|
|
273
|
+
createDataServiceHost(opts = {}) {
|
|
274
|
+
return new DataServiceHost(this._itemManager, this._itemDemuxer, this._flush, this._outboundStream ?? void 0, opts);
|
|
217
275
|
}
|
|
218
276
|
};
|
|
219
277
|
|
|
@@ -304,7 +362,7 @@ import { invariant as invariant3 } from "@dxos/invariant";
|
|
|
304
362
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
305
363
|
import { log as log2 } from "@dxos/log";
|
|
306
364
|
import { ComplexMap as ComplexMap2 } from "@dxos/util";
|
|
307
|
-
var __dxlog_file3 = "/
|
|
365
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/db-host/data-service.ts";
|
|
308
366
|
var DataServiceSubscriptions = class {
|
|
309
367
|
constructor() {
|
|
310
368
|
this._spaces = new ComplexMap2(PublicKey2.hash);
|
|
@@ -423,7 +481,7 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
423
481
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
424
482
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
425
483
|
}
|
|
426
|
-
var __dxlog_file4 = "/
|
|
484
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/metadata/metadata-store.ts";
|
|
427
485
|
var emptyEchoMetadata = () => ({
|
|
428
486
|
version: STORAGE_VERSION,
|
|
429
487
|
spaces: [],
|
|
@@ -723,7 +781,7 @@ function _ts_decorate2(decorators, target, key, desc) {
|
|
|
723
781
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
724
782
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
725
783
|
}
|
|
726
|
-
var __dxlog_file5 = "/
|
|
784
|
+
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/pipeline/timeframe-clock.ts";
|
|
727
785
|
var mapTimeframeToFeedIndexes = (timeframe) => timeframe.frames().map(([feedKey, index]) => ({
|
|
728
786
|
feedKey,
|
|
729
787
|
index
|
|
@@ -819,7 +877,7 @@ import { ComplexMap as ComplexMap4 } from "@dxos/util";
|
|
|
819
877
|
// packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts
|
|
820
878
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
821
879
|
import { log as log5 } from "@dxos/log";
|
|
822
|
-
var __dxlog_file6 = "/
|
|
880
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/pipeline/message-selector.ts";
|
|
823
881
|
var createMessageSelector = (timeframeClock) => {
|
|
824
882
|
return (messages) => {
|
|
825
883
|
for (let i = 0; i < messages.length; i++) {
|
|
@@ -857,7 +915,7 @@ function _ts_decorate3(decorators, target, key, desc) {
|
|
|
857
915
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
858
916
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
859
917
|
}
|
|
860
|
-
var __dxlog_file7 = "/
|
|
918
|
+
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/pipeline/pipeline.ts";
|
|
861
919
|
var PipelineState = class {
|
|
862
920
|
constructor(_feeds, _timeframeClock) {
|
|
863
921
|
this._feeds = _feeds;
|
|
@@ -1269,7 +1327,7 @@ import { invariant as invariant7 } from "@dxos/invariant";
|
|
|
1269
1327
|
import { log as log7 } from "@dxos/log";
|
|
1270
1328
|
import { schema as schema5 } from "@dxos/protocols";
|
|
1271
1329
|
import { RpcExtension } from "@dxos/teleport";
|
|
1272
|
-
var __dxlog_file8 = "/
|
|
1330
|
+
var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/auth.ts";
|
|
1273
1331
|
var AuthExtension = class extends RpcExtension {
|
|
1274
1332
|
constructor(_authParams) {
|
|
1275
1333
|
super({
|
|
@@ -1389,7 +1447,7 @@ function _ts_decorate4(decorators, target, key, desc) {
|
|
|
1389
1447
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1390
1448
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1391
1449
|
}
|
|
1392
|
-
var __dxlog_file9 = "/
|
|
1450
|
+
var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/data-pipeline.ts";
|
|
1393
1451
|
var MESSAGES_PER_SNAPSHOT = 10;
|
|
1394
1452
|
var AUTOMATIC_SNAPSHOT_DEBOUNCE_INTERVAL = 5e3;
|
|
1395
1453
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL = 5e3;
|
|
@@ -1835,7 +1893,7 @@ function _ts_decorate5(decorators, target, key, desc) {
|
|
|
1835
1893
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1836
1894
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1837
1895
|
}
|
|
1838
|
-
var __dxlog_file10 = "/
|
|
1896
|
+
var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/control-pipeline.ts";
|
|
1839
1897
|
var TIMEFRAME_SAVE_DEBOUNCE_INTERVAL2 = 500;
|
|
1840
1898
|
var CONTROL_PIPELINE_SNAPSHOT_DELAY = 1e4;
|
|
1841
1899
|
var USE_SNAPSHOTS = true;
|
|
@@ -2084,7 +2142,7 @@ function _ts_decorate6(decorators, target, key, desc) {
|
|
|
2084
2142
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2085
2143
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2086
2144
|
}
|
|
2087
|
-
var __dxlog_file11 = "/
|
|
2145
|
+
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space.ts";
|
|
2088
2146
|
var Space = class Space2 {
|
|
2089
2147
|
constructor(params) {
|
|
2090
2148
|
this._addFeedLock = new Lock();
|
|
@@ -2341,7 +2399,7 @@ function _ts_decorate7(decorators, target, key, desc) {
|
|
|
2341
2399
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2342
2400
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2343
2401
|
}
|
|
2344
|
-
var __dxlog_file12 = "/
|
|
2402
|
+
var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space-protocol.ts";
|
|
2345
2403
|
var MOCK_AUTH_PROVIDER = async (nonce) => Buffer.from("mock");
|
|
2346
2404
|
var MOCK_AUTH_VERIFIER = async (nonce, credential) => true;
|
|
2347
2405
|
var SpaceProtocol = class {
|
|
@@ -2545,7 +2603,7 @@ function _ts_decorate8(decorators, target, key, desc) {
|
|
|
2545
2603
|
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
2546
2604
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
2547
2605
|
}
|
|
2548
|
-
var __dxlog_file13 = "/
|
|
2606
|
+
var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/core/echo/echo-pipeline/src/space/space-manager.ts";
|
|
2549
2607
|
var SpaceManager = class SpaceManager2 {
|
|
2550
2608
|
constructor({ feedStore, networkManager, modelFactory, metadataStore, snapshotStore, blobStore }) {
|
|
2551
2609
|
this._spaces = new ComplexMap6(PublicKey7.hash);
|
|
@@ -2654,4 +2712,4 @@ export {
|
|
|
2654
2712
|
SpaceProtocolSession,
|
|
2655
2713
|
SpaceManager
|
|
2656
2714
|
};
|
|
2657
|
-
//# sourceMappingURL=chunk-
|
|
2715
|
+
//# sourceMappingURL=chunk-KD6OVLI6.mjs.map
|