@nimbus-cqrs/eventsourcingdb 2.4.0 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -46
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/{esm → dist}/lib/client.d.ts +28 -17
- package/{esm → dist}/lib/client.d.ts.map +1 -1
- package/{esm → dist}/lib/client.js +25 -19
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/consumerRunner.d.ts +62 -0
- package/dist/lib/consumerRunner.d.ts.map +1 -0
- package/dist/lib/consumerRunner.js +386 -0
- package/dist/lib/consumerRunner.js.map +1 -0
- package/dist/lib/eventConsumer.d.ts +94 -0
- package/dist/lib/eventConsumer.d.ts.map +1 -0
- package/dist/lib/eventConsumer.js +2 -0
- package/dist/lib/eventConsumer.js.map +1 -0
- package/{esm → dist}/lib/eventMapping.d.ts +1 -1
- package/dist/lib/eventMapping.d.ts.map +1 -0
- package/{esm → dist}/lib/eventMapping.js +2 -1
- package/dist/lib/eventMapping.js.map +1 -0
- package/dist/lib/eventObserver.d.ts +158 -0
- package/dist/lib/eventObserver.d.ts.map +1 -0
- package/dist/lib/eventObserver.js +339 -0
- package/dist/lib/eventObserver.js.map +1 -0
- package/dist/lib/observerRegistry.d.ts +39 -0
- package/dist/lib/observerRegistry.d.ts.map +1 -0
- package/dist/lib/observerRegistry.js +56 -0
- package/dist/lib/observerRegistry.js.map +1 -0
- package/{esm → dist}/lib/readEvents.d.ts.map +1 -1
- package/{esm → dist}/lib/readEvents.js +3 -2
- package/dist/lib/readEvents.js.map +1 -0
- package/{esm → dist}/lib/tracing.d.ts +3 -0
- package/dist/lib/tracing.d.ts.map +1 -0
- package/{esm → dist}/lib/tracing.js +5 -1
- package/dist/lib/tracing.js.map +1 -0
- package/dist/lib/writeEvents.d.ts +29 -0
- package/dist/lib/writeEvents.d.ts.map +1 -0
- package/dist/lib/writeEvents.js +47 -0
- package/dist/lib/writeEvents.js.map +1 -0
- package/package.json +32 -13
- package/src/index.ts +7 -0
- package/src/lib/client.ts +166 -0
- package/src/lib/consumerRunner.ts +592 -0
- package/src/lib/eventConsumer.ts +95 -0
- package/src/lib/eventMapping.ts +115 -0
- package/src/lib/eventObserver.ts +620 -0
- package/src/lib/observerRegistry.ts +69 -0
- package/src/lib/readEvents.ts +28 -0
- package/src/lib/tracing.ts +295 -0
- package/src/lib/writeEvents.ts +72 -0
- package/esm/_dnt.polyfills.d.ts +0 -7
- package/esm/_dnt.polyfills.d.ts.map +0 -1
- package/esm/_dnt.polyfills.js +0 -1
- package/esm/_dnt.shims.d.ts +0 -2
- package/esm/_dnt.shims.d.ts.map +0 -1
- package/esm/_dnt.shims.js +0 -57
- package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts +0 -700
- package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.js +0 -903
- package/esm/deps/jsr.io/@std/ulid/1.0.0/_util.d.ts +0 -14
- package/esm/deps/jsr.io/@std/ulid/1.0.0/_util.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/ulid/1.0.0/_util.js +0 -65
- package/esm/deps/jsr.io/@std/ulid/1.0.0/decode_time.d.ts +0 -20
- package/esm/deps/jsr.io/@std/ulid/1.0.0/decode_time.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/ulid/1.0.0/decode_time.js +0 -43
- package/esm/deps/jsr.io/@std/ulid/1.0.0/mod.d.ts +0 -44
- package/esm/deps/jsr.io/@std/ulid/1.0.0/mod.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/ulid/1.0.0/mod.js +0 -47
- package/esm/deps/jsr.io/@std/ulid/1.0.0/monotonic_ulid.d.ts +0 -44
- package/esm/deps/jsr.io/@std/ulid/1.0.0/monotonic_ulid.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/ulid/1.0.0/monotonic_ulid.js +0 -51
- package/esm/deps/jsr.io/@std/ulid/1.0.0/ulid.d.ts +0 -31
- package/esm/deps/jsr.io/@std/ulid/1.0.0/ulid.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/ulid/1.0.0/ulid.js +0 -37
- package/esm/index.d.ts +0 -7
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -6
- package/esm/lib/eventMapping.d.ts.map +0 -1
- package/esm/lib/eventObserver.d.ts +0 -133
- package/esm/lib/eventObserver.d.ts.map +0 -1
- package/esm/lib/eventObserver.js +0 -291
- package/esm/lib/tracing.d.ts.map +0 -1
- package/esm/lib/writeEvents.d.ts +0 -11
- package/esm/lib/writeEvents.d.ts.map +0 -1
- package/esm/lib/writeEvents.js +0 -31
- package/esm/package.json +0 -3
- /package/{esm → dist}/lib/readEvents.d.ts +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type CreateEventInput,
|
|
3
|
+
createEvent,
|
|
4
|
+
type Event,
|
|
5
|
+
} from '@nimbus-cqrs/core';
|
|
6
|
+
import type {
|
|
7
|
+
EventCandidate,
|
|
8
|
+
Event as EventSourcingDBEvent,
|
|
9
|
+
} from 'eventsourcingdb';
|
|
10
|
+
import { ulid } from 'ulid';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Metadata that Nimbus attaches to events stored in EventSourcingDB
|
|
14
|
+
* to preserve correlation and schema information.
|
|
15
|
+
*
|
|
16
|
+
* @property {string} correlationid - A globally unique identifier that indicates a correlation to previous and subsequent messages.
|
|
17
|
+
* @property {string} dataschema - An absolute URL to the schema that the data adheres to (optional).
|
|
18
|
+
*/
|
|
19
|
+
export type NimbusEventMetadata = {
|
|
20
|
+
correlationid: string;
|
|
21
|
+
dataschema?: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The data structure used to store Nimbus events in EventSourcingDB.
|
|
26
|
+
* It wraps the original event payload together with Nimbus-specific metadata.
|
|
27
|
+
*
|
|
28
|
+
* @property {Record<string, unknown>} payload - The actual business data of the event.
|
|
29
|
+
* @property {NimbusEventMetadata} nimbusMeta - Nimbus-specific metadata such as correlation id and data schema.
|
|
30
|
+
*/
|
|
31
|
+
export type EventData = {
|
|
32
|
+
payload: Record<string, unknown>;
|
|
33
|
+
nimbusMeta: NimbusEventMetadata;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Type guard that checks whether the given value conforms to the {@link EventData} structure
|
|
38
|
+
* by verifying the presence of both `payload` and `nimbusMeta` properties.
|
|
39
|
+
*
|
|
40
|
+
* @param data - The value to check.
|
|
41
|
+
* @returns `true` if the value is an {@link EventData}, `false` otherwise.
|
|
42
|
+
*/
|
|
43
|
+
export const isEventData = (data: unknown): data is EventData => {
|
|
44
|
+
return (
|
|
45
|
+
typeof data === 'object' &&
|
|
46
|
+
data !== null &&
|
|
47
|
+
'payload' in data &&
|
|
48
|
+
'nimbusMeta' in data
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Converts a Nimbus {@link Event} into an EventSourcingDB {@link EventCandidate}
|
|
54
|
+
* by mapping the event properties and wrapping the data with Nimbus metadata.
|
|
55
|
+
*
|
|
56
|
+
* @param event - The Nimbus event to convert.
|
|
57
|
+
* @returns An EventSourcingDB event candidate ready to be written.
|
|
58
|
+
*/
|
|
59
|
+
export const nimbusEventToEventSourcingDBEventCandidate = (
|
|
60
|
+
event: Event,
|
|
61
|
+
traceparent?: string,
|
|
62
|
+
tracestate?: string,
|
|
63
|
+
): EventCandidate => {
|
|
64
|
+
return {
|
|
65
|
+
source: event.source,
|
|
66
|
+
subject: event.subject,
|
|
67
|
+
type: event.type,
|
|
68
|
+
data: {
|
|
69
|
+
payload: event.data,
|
|
70
|
+
nimbusMeta: {
|
|
71
|
+
correlationid: event.correlationid,
|
|
72
|
+
...(event.dataschema && { dataschema: event.dataschema }),
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
...(traceparent && { traceparent: traceparent }),
|
|
76
|
+
...(tracestate && { tracestate: tracestate }),
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Converts an EventSourcingDB event back into a Nimbus {@link Event}.
|
|
82
|
+
* If the event data contains Nimbus metadata, it extracts the original payload
|
|
83
|
+
* and correlation information. Otherwise, it treats the entire data as the payload
|
|
84
|
+
* and generates a new correlation id.
|
|
85
|
+
*
|
|
86
|
+
* @param eventSourcingDBEvent - The EventSourcingDB event to convert.
|
|
87
|
+
* @returns A Nimbus event.
|
|
88
|
+
*/
|
|
89
|
+
export const eventSourcingDBEventToNimbusEvent = <TEvent extends Event>(
|
|
90
|
+
eventSourcingDBEvent: EventSourcingDBEvent,
|
|
91
|
+
): TEvent => {
|
|
92
|
+
let data: Record<string, unknown>;
|
|
93
|
+
let correlationid: string;
|
|
94
|
+
let dataschema: string | undefined;
|
|
95
|
+
|
|
96
|
+
if (isEventData(eventSourcingDBEvent.data)) {
|
|
97
|
+
data = eventSourcingDBEvent.data.payload;
|
|
98
|
+
correlationid = eventSourcingDBEvent.data.nimbusMeta.correlationid;
|
|
99
|
+
dataschema = eventSourcingDBEvent.data.nimbusMeta.dataschema;
|
|
100
|
+
} else {
|
|
101
|
+
data = eventSourcingDBEvent.data;
|
|
102
|
+
correlationid = ulid();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return createEvent({
|
|
106
|
+
id: eventSourcingDBEvent.id,
|
|
107
|
+
time: eventSourcingDBEvent.time.toISOString(),
|
|
108
|
+
source: eventSourcingDBEvent.source,
|
|
109
|
+
subject: eventSourcingDBEvent.subject,
|
|
110
|
+
type: eventSourcingDBEvent.type,
|
|
111
|
+
correlationid: correlationid,
|
|
112
|
+
data: data,
|
|
113
|
+
...(dataschema && { dataschema: dataschema }),
|
|
114
|
+
} as CreateEventInput<TEvent>);
|
|
115
|
+
};
|