@defai.digital/memory-domain 13.4.8 → 13.4.10
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/aggregate.d.ts +4 -7
- package/dist/aggregate.d.ts.map +1 -1
- package/dist/aggregate.js +13 -17
- package/dist/aggregate.js.map +1 -1
- package/dist/event-store.d.ts +3 -0
- package/dist/event-store.d.ts.map +1 -1
- package/dist/event-store.js +45 -19
- package/dist/event-store.js.map +1 -1
- package/package.json +2 -2
package/dist/aggregate.d.ts
CHANGED
|
@@ -17,14 +17,11 @@ export declare class AggregateRepository<T> {
|
|
|
17
17
|
/**
|
|
18
18
|
* Saves an event to the aggregate
|
|
19
19
|
* INV-MEM-004: Event ordering enforced via version
|
|
20
|
+
* INV-MEM-009: Optimistic concurrency is atomic via event store's version check
|
|
20
21
|
*
|
|
21
|
-
*
|
|
22
|
-
* The
|
|
23
|
-
*
|
|
24
|
-
* modify the aggregate between getVersion() and append(). This is acceptable for
|
|
25
|
-
* single-process Node.js where async operations interleave but don't truly run
|
|
26
|
-
* in parallel. For distributed scenarios, implement compare-and-swap at the
|
|
27
|
-
* storage layer or use a mutex/lock around the check-and-write operation.
|
|
22
|
+
* If expectedVersion is provided, the event's version is set to expectedVersion + 1.
|
|
23
|
+
* The event store's append() performs atomic version validation, ensuring no
|
|
24
|
+
* race condition between version check and write (TOCTOU prevention).
|
|
28
25
|
*/
|
|
29
26
|
save(aggregateId: string, event: MemoryEvent, expectedVersion?: number): Promise<void>;
|
|
30
27
|
/**
|
package/dist/aggregate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,mBAAmB,CAAC,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,CAAC,EACrB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAGhD;;;OAGG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IA6B3D;;;;;;;;OAQG;IACG,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,WAAW,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAYhB;;OAEG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAiC9B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,CAAC,EACrB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAC5B,mBAAmB,CAAC,CAAC,CAAC,CAExB"}
|
package/dist/aggregate.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { MemoryErrorCodes } from './types.js';
|
|
2
|
-
import { EventStoreError } from './event-store.js';
|
|
3
1
|
/**
|
|
4
2
|
* Aggregate repository for event-sourced aggregates
|
|
5
3
|
* INV-MEM-002: Replaying events produces identical results
|
|
@@ -44,24 +42,22 @@ export class AggregateRepository {
|
|
|
44
42
|
/**
|
|
45
43
|
* Saves an event to the aggregate
|
|
46
44
|
* INV-MEM-004: Event ordering enforced via version
|
|
45
|
+
* INV-MEM-009: Optimistic concurrency is atomic via event store's version check
|
|
47
46
|
*
|
|
48
|
-
*
|
|
49
|
-
* The
|
|
50
|
-
*
|
|
51
|
-
* modify the aggregate between getVersion() and append(). This is acceptable for
|
|
52
|
-
* single-process Node.js where async operations interleave but don't truly run
|
|
53
|
-
* in parallel. For distributed scenarios, implement compare-and-swap at the
|
|
54
|
-
* storage layer or use a mutex/lock around the check-and-write operation.
|
|
47
|
+
* If expectedVersion is provided, the event's version is set to expectedVersion + 1.
|
|
48
|
+
* The event store's append() performs atomic version validation, ensuring no
|
|
49
|
+
* race condition between version check and write (TOCTOU prevention).
|
|
55
50
|
*/
|
|
56
51
|
async save(aggregateId, event, expectedVersion) {
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
// INV-MEM-009: Set event version for atomic validation in event store
|
|
53
|
+
// This avoids TOCTOU by letting the event store do atomic compare-and-swap
|
|
54
|
+
// Ensure event has the correct aggregateId
|
|
55
|
+
const eventWithAggregate = {
|
|
56
|
+
...event,
|
|
57
|
+
aggregateId: event.aggregateId ?? aggregateId,
|
|
58
|
+
...(expectedVersion !== undefined ? { version: expectedVersion + 1 } : {}),
|
|
59
|
+
};
|
|
60
|
+
await this.eventStore.append(eventWithAggregate);
|
|
65
61
|
}
|
|
66
62
|
/**
|
|
67
63
|
* Gets an aggregate at a specific version (point-in-time query)
|
package/dist/aggregate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"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"}
|
package/dist/event-store.d.ts
CHANGED
|
@@ -13,11 +13,13 @@ export declare class EventStoreError extends Error {
|
|
|
13
13
|
* INV-MEM-001: Events are immutable - stored as frozen objects
|
|
14
14
|
* INV-MEM-004: Events are ordered by version within aggregate
|
|
15
15
|
* INV-MEM-006: Memory growth is bounded with LRU eviction
|
|
16
|
+
* INV-MEM-008: Eviction uses O(1) reverse index lookup
|
|
16
17
|
*/
|
|
17
18
|
export declare class InMemoryEventStore implements EventStore {
|
|
18
19
|
private readonly events;
|
|
19
20
|
private readonly allEvents;
|
|
20
21
|
private readonly correlationIndex;
|
|
22
|
+
private readonly eventToAggregate;
|
|
21
23
|
private readonly maxEvents;
|
|
22
24
|
constructor(maxEvents?: number);
|
|
23
25
|
/**
|
|
@@ -48,6 +50,7 @@ export declare class InMemoryEventStore implements EventStore {
|
|
|
48
50
|
/**
|
|
49
51
|
* Evicts the oldest events to maintain memory bounds
|
|
50
52
|
* INV-MEM-006: LRU eviction when over maxEvents
|
|
53
|
+
* INV-MEM-008: Uses reverse index for O(1) aggregate lookup
|
|
51
54
|
*/
|
|
52
55
|
private evictOldest;
|
|
53
56
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../src/event-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../src/event-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiB7C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAEtB,IAAI,EAAE,MAAM;aAEZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;IAErE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,SAAS,GAAE,MAA2B;IAIlD;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD/C;;;OAGG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMtD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI9D;;;OAGG;IACH,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIrE;;;OAGG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBhD;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAgDnB;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAE/E"}
|
package/dist/event-store.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { MemoryErrorCodes } from './types.js';
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Constants
|
|
4
|
+
// ============================================================================
|
|
5
|
+
/** Default aggregate ID for events without explicit aggregate */
|
|
6
|
+
const DEFAULT_AGGREGATE_ID = 'global';
|
|
7
|
+
/** Default maximum events to store before eviction (INV-MEM-006) */
|
|
8
|
+
const DEFAULT_MAX_EVENTS = 100_000;
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Error Class
|
|
11
|
+
// ============================================================================
|
|
2
12
|
/**
|
|
3
13
|
* Error thrown by event store operations
|
|
4
14
|
*/
|
|
@@ -12,21 +22,19 @@ export class EventStoreError extends Error {
|
|
|
12
22
|
this.name = 'EventStoreError';
|
|
13
23
|
}
|
|
14
24
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Default maximum events to store before eviction
|
|
17
|
-
* INV-MEM-006: Memory growth is bounded
|
|
18
|
-
*/
|
|
19
|
-
const DEFAULT_MAX_EVENTS = 100000;
|
|
20
25
|
/**
|
|
21
26
|
* In-memory event store implementation
|
|
22
27
|
* INV-MEM-001: Events are immutable - stored as frozen objects
|
|
23
28
|
* INV-MEM-004: Events are ordered by version within aggregate
|
|
24
29
|
* INV-MEM-006: Memory growth is bounded with LRU eviction
|
|
30
|
+
* INV-MEM-008: Eviction uses O(1) reverse index lookup
|
|
25
31
|
*/
|
|
26
32
|
export class InMemoryEventStore {
|
|
27
33
|
events = new Map();
|
|
28
34
|
allEvents = [];
|
|
29
35
|
correlationIndex = new Map();
|
|
36
|
+
// Reverse index: eventId -> aggregateId for O(1) eviction lookup
|
|
37
|
+
eventToAggregate = new Map();
|
|
30
38
|
maxEvents;
|
|
31
39
|
constructor(maxEvents = DEFAULT_MAX_EVENTS) {
|
|
32
40
|
this.maxEvents = maxEvents;
|
|
@@ -41,7 +49,7 @@ export class InMemoryEventStore {
|
|
|
41
49
|
if (event.eventId === '') {
|
|
42
50
|
throw new EventStoreError(MemoryErrorCodes.INVALID_EVENT, 'Event must have an eventId');
|
|
43
51
|
}
|
|
44
|
-
const aggregateId = event.aggregateId ??
|
|
52
|
+
const aggregateId = event.aggregateId ?? DEFAULT_AGGREGATE_ID;
|
|
45
53
|
// Check version ordering (INV-MEM-004)
|
|
46
54
|
if (event.version !== undefined) {
|
|
47
55
|
const currentVersion = await this.getVersion(aggregateId);
|
|
@@ -57,6 +65,8 @@ export class InMemoryEventStore {
|
|
|
57
65
|
this.events.set(aggregateId, aggregateEvents);
|
|
58
66
|
// Store in global list
|
|
59
67
|
this.allEvents.push(frozenEvent);
|
|
68
|
+
// INV-MEM-008: Maintain reverse index for O(1) eviction
|
|
69
|
+
this.eventToAggregate.set(frozenEvent.eventId, aggregateId);
|
|
60
70
|
// INV-MEM-006: Evict oldest events if over limit to prevent unbounded memory growth
|
|
61
71
|
if (this.allEvents.length > this.maxEvents) {
|
|
62
72
|
this.evictOldest(this.allEvents.length - this.maxEvents);
|
|
@@ -112,31 +122,46 @@ export class InMemoryEventStore {
|
|
|
112
122
|
/**
|
|
113
123
|
* Evicts the oldest events to maintain memory bounds
|
|
114
124
|
* INV-MEM-006: LRU eviction when over maxEvents
|
|
125
|
+
* INV-MEM-008: Uses reverse index for O(1) aggregate lookup
|
|
115
126
|
*/
|
|
116
127
|
evictOldest(count) {
|
|
117
|
-
// Remove from global list
|
|
128
|
+
// Remove from global list (oldest events are at the front)
|
|
118
129
|
const evicted = this.allEvents.splice(0, count);
|
|
119
|
-
// Remove from aggregate buckets and correlation index
|
|
120
|
-
// INV-MEM-007: Use eventId comparison instead of reference equality for robustness
|
|
121
130
|
for (const event of evicted) {
|
|
122
|
-
|
|
131
|
+
// INV-MEM-008: O(1) lookup using reverse index
|
|
132
|
+
const aggregateId = this.eventToAggregate.get(event.eventId) ?? event.aggregateId ?? DEFAULT_AGGREGATE_ID;
|
|
133
|
+
this.eventToAggregate.delete(event.eventId);
|
|
134
|
+
// Remove from aggregate bucket - events are ordered, so oldest is at index 0
|
|
123
135
|
const aggregateEvents = this.events.get(aggregateId);
|
|
124
|
-
if (aggregateEvents) {
|
|
125
|
-
|
|
126
|
-
if (
|
|
127
|
-
aggregateEvents.
|
|
136
|
+
if (aggregateEvents !== undefined && aggregateEvents.length > 0) {
|
|
137
|
+
// Since we evict in order, the event should be at the front of the aggregate array
|
|
138
|
+
if (aggregateEvents[0]?.eventId === event.eventId) {
|
|
139
|
+
aggregateEvents.shift(); // O(n) but only on the aggregate, not all events
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// Fallback: search for the event (should rarely happen)
|
|
143
|
+
const index = aggregateEvents.findIndex((e) => e.eventId === event.eventId);
|
|
144
|
+
if (index !== -1) {
|
|
145
|
+
aggregateEvents.splice(index, 1);
|
|
146
|
+
}
|
|
128
147
|
}
|
|
129
148
|
if (aggregateEvents.length === 0) {
|
|
130
149
|
this.events.delete(aggregateId);
|
|
131
150
|
}
|
|
132
151
|
}
|
|
133
152
|
// Remove from correlation index
|
|
134
|
-
if (event.metadata?.correlationId) {
|
|
153
|
+
if (event.metadata?.correlationId !== undefined) {
|
|
135
154
|
const correlatedEvents = this.correlationIndex.get(event.metadata.correlationId);
|
|
136
|
-
if (correlatedEvents) {
|
|
137
|
-
|
|
138
|
-
if (
|
|
139
|
-
correlatedEvents.
|
|
155
|
+
if (correlatedEvents !== undefined && correlatedEvents.length > 0) {
|
|
156
|
+
// Same optimization: check front first
|
|
157
|
+
if (correlatedEvents[0]?.eventId === event.eventId) {
|
|
158
|
+
correlatedEvents.shift();
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
const index = correlatedEvents.findIndex((e) => e.eventId === event.eventId);
|
|
162
|
+
if (index !== -1) {
|
|
163
|
+
correlatedEvents.splice(index, 1);
|
|
164
|
+
}
|
|
140
165
|
}
|
|
141
166
|
if (correlatedEvents.length === 0) {
|
|
142
167
|
this.correlationIndex.delete(event.metadata.correlationId);
|
|
@@ -152,6 +177,7 @@ export class InMemoryEventStore {
|
|
|
152
177
|
this.events.clear();
|
|
153
178
|
this.allEvents.length = 0;
|
|
154
179
|
this.correlationIndex.clear();
|
|
180
|
+
this.eventToAggregate.clear();
|
|
155
181
|
}
|
|
156
182
|
}
|
|
157
183
|
/**
|
package/dist/event-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../src/event-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAEtB;IAEA;IAHlB,YACkB,IAAY,EAC5B,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../src/event-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defai.digital/memory-domain",
|
|
3
|
-
"version": "13.4.
|
|
3
|
+
"version": "13.4.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Memory domain - event sourcing following contract invariants",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@defai.digital/contracts": "13.4.
|
|
35
|
+
"@defai.digital/contracts": "13.4.10"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsc --build",
|