@ddd-ts/event-sourcing-firestore 0.0.0-compute-timeout-on-process.7 → 0.0.0-compute-timeout-on-process.9
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/_virtual/_rolldown/runtime.js +29 -0
- package/dist/firestore.event-lake.aggregate-store.d.ts +30 -36
- package/dist/firestore.event-lake.aggregate-store.d.ts.map +1 -1
- package/dist/firestore.event-lake.aggregate-store.js +11 -11
- package/dist/firestore.event-lake.aggregate-store.mjs +36 -0
- package/dist/firestore.event-lake.aggregate-store.spec.d.ts +2 -0
- package/dist/firestore.event-lake.aggregate-store.spec.d.ts.map +1 -0
- package/dist/firestore.event-lake.storage-layer.d.ts +10 -13
- package/dist/firestore.event-lake.storage-layer.d.ts.map +1 -1
- package/dist/firestore.event-lake.storage-layer.js +8 -7
- package/dist/firestore.event-lake.storage-layer.mjs +65 -0
- package/dist/firestore.event-lake.store.d.ts +3 -7
- package/dist/firestore.event-lake.store.d.ts.map +1 -1
- package/dist/firestore.event-lake.store.js +7 -7
- package/dist/firestore.event-lake.store.mjs +13 -0
- package/dist/firestore.event-lake.store.spec.d.ts +2 -0
- package/dist/firestore.event-lake.store.spec.d.ts.map +1 -0
- package/dist/firestore.event-stream-store.spec.d.ts +2 -0
- package/dist/firestore.event-stream-store.spec.d.ts.map +1 -0
- package/dist/firestore.event-stream.aggregate-store.d.ts +25 -30
- package/dist/firestore.event-stream.aggregate-store.d.ts.map +1 -1
- package/dist/firestore.event-stream.aggregate-store.js +14 -14
- package/dist/firestore.event-stream.aggregate-store.mjs +36 -0
- package/dist/firestore.event-stream.aggregate-store.spec.d.ts +2 -0
- package/dist/firestore.event-stream.aggregate-store.spec.d.ts.map +1 -0
- package/dist/firestore.event-stream.storage-layer.d.ts +11 -14
- package/dist/firestore.event-stream.storage-layer.d.ts.map +1 -1
- package/dist/firestore.event-stream.storage-layer.js +8 -8
- package/dist/firestore.event-stream.storage-layer.mjs +65 -0
- package/dist/firestore.event-stream.store.d.ts +3 -7
- package/dist/firestore.event-stream.store.d.ts.map +1 -1
- package/dist/firestore.event-stream.store.js +7 -7
- package/dist/firestore.event-stream.store.mjs +13 -0
- package/dist/firestore.projected-stream.reader.d.ts +10 -14
- package/dist/firestore.projected-stream.reader.d.ts.map +1 -1
- package/dist/firestore.projected-stream.reader.js +7 -7
- package/dist/firestore.projected-stream.reader.mjs +34 -0
- package/dist/firestore.projected-stream.reader.spec.d.ts +2 -0
- package/dist/firestore.projected-stream.reader.spec.d.ts.map +1 -0
- package/dist/firestore.projected-stream.storage-layer.d.ts +24 -28
- package/dist/firestore.projected-stream.storage-layer.d.ts.map +1 -1
- package/dist/firestore.projected-stream.storage-layer.js +20 -18
- package/dist/firestore.projected-stream.storage-layer.mjs +118 -0
- package/dist/firestore.snapshotter.d.ts +3 -7
- package/dist/firestore.snapshotter.d.ts.map +1 -1
- package/dist/firestore.snapshotter.js +5 -5
- package/dist/firestore.snapshotter.mjs +35 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -11
- package/dist/index.mjs +12 -0
- package/dist/projection/cases/attempts.spec.d.ts +2 -0
- package/dist/projection/cases/attempts.spec.d.ts.map +1 -0
- package/dist/projection/cases/batchlast.spec.d.ts +2 -0
- package/dist/projection/cases/batchlast.spec.d.ts.map +1 -0
- package/dist/projection/cases/bigshuffle.spec.d.ts +2 -0
- package/dist/projection/cases/bigshuffle.spec.d.ts.map +1 -0
- package/dist/projection/cases/burst.spec.d.ts +2 -0
- package/dist/projection/cases/burst.spec.d.ts.map +1 -0
- package/dist/projection/cases/claimtimeout.spec.d.ts +2 -0
- package/dist/projection/cases/claimtimeout.spec.d.ts.map +1 -0
- package/dist/projection/cases/concurrency.spec.d.ts +2 -0
- package/dist/projection/cases/concurrency.spec.d.ts.map +1 -0
- package/dist/projection/cases/deduplicate.spec.d.ts +2 -0
- package/dist/projection/cases/deduplicate.spec.d.ts.map +1 -0
- package/dist/projection/cases/defer.spec.d.ts +2 -0
- package/dist/projection/cases/defer.spec.d.ts.map +1 -0
- package/dist/projection/cases/lock.spec.d.ts +2 -0
- package/dist/projection/cases/lock.spec.d.ts.map +1 -0
- package/dist/projection/cases/skip.spec.d.ts +2 -0
- package/dist/projection/cases/skip.spec.d.ts.map +1 -0
- package/dist/projection/cases/stress.spec.d.ts +2 -0
- package/dist/projection/cases/stress.spec.d.ts.map +1 -0
- package/dist/projection/firestore.projector.d.ts +122 -125
- package/dist/projection/firestore.projector.d.ts.map +1 -1
- package/dist/projection/firestore.projector.js +48 -44
- package/dist/projection/firestore.projector.mjs +520 -0
- package/dist/projection/testkit/case-fixture.d.ts +610 -0
- package/dist/projection/testkit/case-fixture.d.ts.map +1 -0
- package/dist/projection/testkit.d.ts +44 -0
- package/dist/projection/testkit.d.ts.map +1 -0
- package/dist/projection/trace.decorator.d.ts +2 -0
- package/dist/projection/trace.decorator.d.ts.map +1 -0
- package/package.json +16 -11
- package/dist/firestore.event-lake.aggregate-store.js.map +0 -1
- package/dist/firestore.event-lake.storage-layer.js.map +0 -1
- package/dist/firestore.event-lake.store.js.map +0 -1
- package/dist/firestore.event-stream.aggregate-store.js.map +0 -1
- package/dist/firestore.event-stream.storage-layer.js.map +0 -1
- package/dist/firestore.event-stream.store.js.map +0 -1
- package/dist/firestore.projected-stream.reader.js.map +0 -1
- package/dist/firestore.projected-stream.storage-layer.js.map +0 -1
- package/dist/firestore.snapshotter.js.map +0 -1
- package/dist/projection/firestore.projector.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
2
|
+
let _ddd_ts_core = require("@ddd-ts/core");
|
|
3
|
+
let _ddd_ts_store_firestore = require("@ddd-ts/store-firestore");
|
|
4
|
+
let firebase_admin_firestore = require("firebase-admin/firestore");
|
|
5
|
+
let _ddd_ts_shape = require("@ddd-ts/shape");
|
|
5
6
|
|
|
6
7
|
//#region src/projection/firestore.projector.ts
|
|
7
8
|
const Status = {
|
|
@@ -15,7 +16,7 @@ const TaskState = {
|
|
|
15
16
|
MISSING: "MISSING"
|
|
16
17
|
};
|
|
17
18
|
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
-
const RETENTION = MicrosecondTimestamp.MONTH;
|
|
19
|
+
const RETENTION = _ddd_ts_shape.MicrosecondTimestamp.MONTH;
|
|
19
20
|
var FirestoreProjector = class {
|
|
20
21
|
_unclaim = true;
|
|
21
22
|
constructor(projection, reader, queue, config = {
|
|
@@ -183,19 +184,19 @@ var AlreadyEnqueuedError = class extends Error {
|
|
|
183
184
|
}
|
|
184
185
|
};
|
|
185
186
|
var FirestoreQueueStore = class {
|
|
186
|
-
converter = new DefaultConverter();
|
|
187
|
+
converter = new _ddd_ts_store_firestore.DefaultConverter();
|
|
187
188
|
collection;
|
|
188
189
|
constructor(db) {
|
|
189
190
|
this.db = db;
|
|
190
191
|
this.collection = db.collection("checkpoints");
|
|
191
192
|
}
|
|
192
193
|
timestampToMicroseconds(timestamp) {
|
|
193
|
-
return new MicrosecondTimestamp(BigInt(timestamp.seconds) * BigInt(1e6) + BigInt(timestamp.nanoseconds) / BigInt(1e3));
|
|
194
|
+
return new _ddd_ts_shape.MicrosecondTimestamp(BigInt(timestamp.seconds) * BigInt(1e6) + BigInt(timestamp.nanoseconds) / BigInt(1e3));
|
|
194
195
|
}
|
|
195
196
|
microsecondsToTimestamp(microseconds) {
|
|
196
197
|
const seconds = BigInt(microseconds.micros) / 1000000n;
|
|
197
198
|
const nanoseconds = BigInt(microseconds.micros) % 1000000n * 1000n;
|
|
198
|
-
return new Timestamp(Number(seconds), Number(nanoseconds));
|
|
199
|
+
return new firebase_admin_firestore.Timestamp(Number(seconds), Number(nanoseconds));
|
|
199
200
|
}
|
|
200
201
|
async enqueue(checkpointId, tasks) {
|
|
201
202
|
const batch = this.collection.firestore.batch();
|
|
@@ -221,11 +222,11 @@ var FirestoreQueueStore = class {
|
|
|
221
222
|
const ref = this.queued(checkpointId, task.id);
|
|
222
223
|
batch.update(ref, {
|
|
223
224
|
claimer: claimer.serialize(),
|
|
224
|
-
claimedAt: FieldValue.serverTimestamp(),
|
|
225
|
-
[`claimsMetadata.${claimer.serialize()}`]: { claimedAt: FieldValue.serverTimestamp() },
|
|
226
|
-
claimIds: FieldValue.arrayUnion(claimer.serialize()),
|
|
227
|
-
attempts: FieldValue.increment(1),
|
|
228
|
-
remaining: FieldValue.increment(-1)
|
|
225
|
+
claimedAt: firebase_admin_firestore.FieldValue.serverTimestamp(),
|
|
226
|
+
[`claimsMetadata.${claimer.serialize()}`]: { claimedAt: firebase_admin_firestore.FieldValue.serverTimestamp() },
|
|
227
|
+
claimIds: firebase_admin_firestore.FieldValue.arrayUnion(claimer.serialize()),
|
|
228
|
+
attempts: firebase_admin_firestore.FieldValue.increment(1),
|
|
229
|
+
remaining: firebase_admin_firestore.FieldValue.increment(-1)
|
|
229
230
|
}, { lastUpdateTime: this.microsecondsToTimestamp(task.lastUpdateTime) });
|
|
230
231
|
}
|
|
231
232
|
await batch.commit();
|
|
@@ -235,7 +236,7 @@ var FirestoreQueueStore = class {
|
|
|
235
236
|
if (!headDoc) return;
|
|
236
237
|
const headData = this.converter.fromFirestoreSnapshot(headDoc);
|
|
237
238
|
if (!headData) return;
|
|
238
|
-
return headDoc ? Cursor.deserialize({
|
|
239
|
+
return headDoc ? _ddd_ts_core.Cursor.deserialize({
|
|
239
240
|
ref: headData.ref,
|
|
240
241
|
occurredAt: headData.occurredAt,
|
|
241
242
|
revision: headData.revision,
|
|
@@ -259,8 +260,8 @@ var FirestoreQueueStore = class {
|
|
|
259
260
|
for (const task of expiredTasks) {
|
|
260
261
|
const ref = this.queued(checkpointId, task.id);
|
|
261
262
|
batch.update(ref, {
|
|
262
|
-
claimer: FieldValue.delete(),
|
|
263
|
-
claimedAt: FieldValue.delete(),
|
|
263
|
+
claimer: firebase_admin_firestore.FieldValue.delete(),
|
|
264
|
+
claimedAt: firebase_admin_firestore.FieldValue.delete(),
|
|
264
265
|
claimIds: task.claimIds
|
|
265
266
|
}, { lastUpdateTime: this.microsecondsToTimestamp(task.lastUpdateTime) });
|
|
266
267
|
}
|
|
@@ -280,9 +281,9 @@ var FirestoreQueueStore = class {
|
|
|
280
281
|
for (const task of tasks) {
|
|
281
282
|
const ref = this.queued(checkpointId, task.id);
|
|
282
283
|
batch.update(ref, {
|
|
283
|
-
claimer: FieldValue.delete(),
|
|
284
|
-
claimedAt: FieldValue.delete(),
|
|
285
|
-
claimIds: FieldValue.arrayRemove(task.currentClaimId)
|
|
284
|
+
claimer: firebase_admin_firestore.FieldValue.delete(),
|
|
285
|
+
claimedAt: firebase_admin_firestore.FieldValue.delete(),
|
|
286
|
+
claimIds: firebase_admin_firestore.FieldValue.arrayRemove(task.currentClaimId)
|
|
286
287
|
}, { lastUpdateTime: this.microsecondsToTimestamp(task.lastUpdateTime) });
|
|
287
288
|
}
|
|
288
289
|
await batch.commit();
|
|
@@ -301,7 +302,7 @@ var FirestoreQueueStore = class {
|
|
|
301
302
|
if (data.processed === true) return TaskState.PROCESSED;
|
|
302
303
|
return TaskState.ENQUEUED;
|
|
303
304
|
}
|
|
304
|
-
const lastRetention = MicrosecondTimestamp.now().sub(RETENTION);
|
|
305
|
+
const lastRetention = _ddd_ts_shape.MicrosecondTimestamp.now().sub(RETENTION);
|
|
305
306
|
if (cursor.isOlderThan(lastRetention)) return TaskState.PROCESSED;
|
|
306
307
|
return TaskState.MISSING;
|
|
307
308
|
}
|
|
@@ -321,14 +322,14 @@ var FirestoreQueueStore = class {
|
|
|
321
322
|
const ref = this.queued(id, eventId);
|
|
322
323
|
trx.transaction.update(ref, {
|
|
323
324
|
processed: true,
|
|
324
|
-
[`claimsMetadata.${claimerId.serialize()}.processedAt`]: FieldValue.serverTimestamp()
|
|
325
|
+
[`claimsMetadata.${claimerId.serialize()}.processedAt`]: firebase_admin_firestore.FieldValue.serverTimestamp()
|
|
325
326
|
});
|
|
326
327
|
}
|
|
327
328
|
return;
|
|
328
329
|
}
|
|
329
330
|
await Promise.all(eventIds.map((eventId) => this.queued(id, eventId).update({
|
|
330
331
|
processed: true,
|
|
331
|
-
[`claimsMetadata.${claimerId.serialize()}.processedAt`]: FieldValue.serverTimestamp()
|
|
332
|
+
[`claimsMetadata.${claimerId.serialize()}.processedAt`]: firebase_admin_firestore.FieldValue.serverTimestamp()
|
|
332
333
|
})));
|
|
333
334
|
}
|
|
334
335
|
async getTailCursor(id) {
|
|
@@ -336,7 +337,7 @@ var FirestoreQueueStore = class {
|
|
|
336
337
|
if (!tailDoc) return;
|
|
337
338
|
const tailData = this.converter.fromFirestoreSnapshot(tailDoc);
|
|
338
339
|
if (!tailData) return;
|
|
339
|
-
return tailDoc ? Cursor.deserialize({
|
|
340
|
+
return tailDoc ? _ddd_ts_core.Cursor.deserialize({
|
|
340
341
|
ref: tailData.ref,
|
|
341
342
|
occurredAt: tailData.occurredAt,
|
|
342
343
|
revision: tailData.revision,
|
|
@@ -344,7 +345,7 @@ var FirestoreQueueStore = class {
|
|
|
344
345
|
}) : void 0;
|
|
345
346
|
}
|
|
346
347
|
async cleanup(id) {
|
|
347
|
-
const aMonthAgo = MicrosecondTimestamp.now().sub(MicrosecondTimestamp.WEEK.mult(4));
|
|
348
|
+
const aMonthAgo = _ddd_ts_shape.MicrosecondTimestamp.now().sub(_ddd_ts_shape.MicrosecondTimestamp.WEEK.mult(4));
|
|
348
349
|
const query = this.queue(id).where("remaining", ">", 0).where("occurredAt", "<", aMonthAgo.serialize()).orderBy("occurredAt", "asc").orderBy("revision", "asc");
|
|
349
350
|
const TRAIL = 1;
|
|
350
351
|
const snapshot = await query.get();
|
|
@@ -374,14 +375,14 @@ var FirestoreQueueStore = class {
|
|
|
374
375
|
* correct point in time, avoiding reprocessing of old events.
|
|
375
376
|
*/
|
|
376
377
|
async seed(checkpointId) {
|
|
377
|
-
const cursor = new Cursor({
|
|
378
|
+
const cursor = new _ddd_ts_core.Cursor({
|
|
378
379
|
ref: "seed",
|
|
379
|
-
occurredAt: MicrosecondTimestamp.now(),
|
|
380
|
+
occurredAt: _ddd_ts_shape.MicrosecondTimestamp.now(),
|
|
380
381
|
revision: 0,
|
|
381
|
-
eventId: EventId.generate()
|
|
382
|
+
eventId: _ddd_ts_core.EventId.generate()
|
|
382
383
|
});
|
|
383
384
|
const task = new Task({
|
|
384
|
-
id: EventId.generate(),
|
|
385
|
+
id: _ddd_ts_core.EventId.generate(),
|
|
385
386
|
ref: "Seed",
|
|
386
387
|
occurredAt: cursor.occurredAt,
|
|
387
388
|
revision: cursor.revision,
|
|
@@ -391,7 +392,7 @@ var FirestoreQueueStore = class {
|
|
|
391
392
|
claimedAt: void 0,
|
|
392
393
|
claimsMetadata: {},
|
|
393
394
|
claimIds: [],
|
|
394
|
-
lock: new Lock({}),
|
|
395
|
+
lock: new _ddd_ts_core.Lock({}),
|
|
395
396
|
remaining: 1,
|
|
396
397
|
claimTimeout: 0,
|
|
397
398
|
skipAfter: 0,
|
|
@@ -407,30 +408,30 @@ var FirestoreQueueStore = class {
|
|
|
407
408
|
}
|
|
408
409
|
}
|
|
409
410
|
};
|
|
410
|
-
var ClaimerId = class extends EventId {};
|
|
411
|
-
var Task = class Task extends Shape({
|
|
412
|
-
id: EventId,
|
|
411
|
+
var ClaimerId = class extends _ddd_ts_core.EventId {};
|
|
412
|
+
var Task = class Task extends (0, _ddd_ts_shape.Shape)({
|
|
413
|
+
id: _ddd_ts_core.EventId,
|
|
413
414
|
ref: String,
|
|
414
|
-
occurredAt: MicrosecondTimestamp,
|
|
415
|
+
occurredAt: _ddd_ts_shape.MicrosecondTimestamp,
|
|
415
416
|
revision: Number,
|
|
416
417
|
attempts: Number,
|
|
417
418
|
processed: Boolean,
|
|
418
|
-
claimer: Optional(String),
|
|
419
|
-
claimedAt: Optional(MicrosecondTimestamp),
|
|
420
|
-
claimsMetadata: Mapping([{
|
|
421
|
-
claimedAt: MicrosecondTimestamp,
|
|
422
|
-
processedAt: Optional(MicrosecondTimestamp)
|
|
419
|
+
claimer: (0, _ddd_ts_shape.Optional)(String),
|
|
420
|
+
claimedAt: (0, _ddd_ts_shape.Optional)(_ddd_ts_shape.MicrosecondTimestamp),
|
|
421
|
+
claimsMetadata: (0, _ddd_ts_shape.Mapping)([{
|
|
422
|
+
claimedAt: _ddd_ts_shape.MicrosecondTimestamp,
|
|
423
|
+
processedAt: (0, _ddd_ts_shape.Optional)(_ddd_ts_shape.MicrosecondTimestamp)
|
|
423
424
|
}]),
|
|
424
425
|
claimIds: [String],
|
|
425
|
-
lock: Lock,
|
|
426
|
+
lock: _ddd_ts_core.Lock,
|
|
426
427
|
skipAfter: Number,
|
|
427
428
|
remaining: Number,
|
|
428
429
|
isolateAfter: Number,
|
|
429
430
|
claimTimeout: Number,
|
|
430
|
-
lastUpdateTime: Optional(MicrosecondTimestamp)
|
|
431
|
+
lastUpdateTime: (0, _ddd_ts_shape.Optional)(_ddd_ts_shape.MicrosecondTimestamp)
|
|
431
432
|
}) {
|
|
432
433
|
get cursor() {
|
|
433
|
-
return new Cursor({
|
|
434
|
+
return new _ddd_ts_core.Cursor({
|
|
434
435
|
ref: this.ref,
|
|
435
436
|
occurredAt: this.occurredAt,
|
|
436
437
|
revision: this.revision,
|
|
@@ -477,7 +478,7 @@ var Task = class Task extends Shape({
|
|
|
477
478
|
if (!claimer) return;
|
|
478
479
|
const claimInfo = this.claimsMetadata[claimer];
|
|
479
480
|
if (!claimInfo || !claimInfo.claimedAt) return;
|
|
480
|
-
if (MicrosecondTimestamp.now().micros - claimInfo.claimedAt.micros > BigInt(this.claimTimeout) * 1000n) this.claimIds = this.claimIds.filter((id) => id !== claimer);
|
|
481
|
+
if (_ddd_ts_shape.MicrosecondTimestamp.now().micros - claimInfo.claimedAt.micros > BigInt(this.claimTimeout) * 1000n) this.claimIds = this.claimIds.filter((id) => id !== claimer);
|
|
481
482
|
}
|
|
482
483
|
static deserializeWithLastUpdateTime(data, timestamp) {
|
|
483
484
|
return Task.deserialize({
|
|
@@ -517,5 +518,8 @@ var Task = class Task extends Shape({
|
|
|
517
518
|
};
|
|
518
519
|
|
|
519
520
|
//#endregion
|
|
520
|
-
|
|
521
|
-
|
|
521
|
+
exports.AlreadyEnqueuedError = AlreadyEnqueuedError;
|
|
522
|
+
exports.ClaimerId = ClaimerId;
|
|
523
|
+
exports.FirestoreProjector = FirestoreProjector;
|
|
524
|
+
exports.FirestoreQueueStore = FirestoreQueueStore;
|
|
525
|
+
exports.Task = Task;
|