@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.
Files changed (88) hide show
  1. package/README.md +82 -46
  2. package/dist/index.d.ts +8 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +8 -0
  5. package/dist/index.js.map +1 -0
  6. package/{esm → dist}/lib/client.d.ts +28 -17
  7. package/{esm → dist}/lib/client.d.ts.map +1 -1
  8. package/{esm → dist}/lib/client.js +25 -19
  9. package/dist/lib/client.js.map +1 -0
  10. package/dist/lib/consumerRunner.d.ts +62 -0
  11. package/dist/lib/consumerRunner.d.ts.map +1 -0
  12. package/dist/lib/consumerRunner.js +386 -0
  13. package/dist/lib/consumerRunner.js.map +1 -0
  14. package/dist/lib/eventConsumer.d.ts +94 -0
  15. package/dist/lib/eventConsumer.d.ts.map +1 -0
  16. package/dist/lib/eventConsumer.js +2 -0
  17. package/dist/lib/eventConsumer.js.map +1 -0
  18. package/{esm → dist}/lib/eventMapping.d.ts +1 -1
  19. package/dist/lib/eventMapping.d.ts.map +1 -0
  20. package/{esm → dist}/lib/eventMapping.js +2 -1
  21. package/dist/lib/eventMapping.js.map +1 -0
  22. package/dist/lib/eventObserver.d.ts +158 -0
  23. package/dist/lib/eventObserver.d.ts.map +1 -0
  24. package/dist/lib/eventObserver.js +339 -0
  25. package/dist/lib/eventObserver.js.map +1 -0
  26. package/dist/lib/observerRegistry.d.ts +39 -0
  27. package/dist/lib/observerRegistry.d.ts.map +1 -0
  28. package/dist/lib/observerRegistry.js +56 -0
  29. package/dist/lib/observerRegistry.js.map +1 -0
  30. package/{esm → dist}/lib/readEvents.d.ts.map +1 -1
  31. package/{esm → dist}/lib/readEvents.js +3 -2
  32. package/dist/lib/readEvents.js.map +1 -0
  33. package/{esm → dist}/lib/tracing.d.ts +3 -0
  34. package/dist/lib/tracing.d.ts.map +1 -0
  35. package/{esm → dist}/lib/tracing.js +5 -1
  36. package/dist/lib/tracing.js.map +1 -0
  37. package/dist/lib/writeEvents.d.ts +29 -0
  38. package/dist/lib/writeEvents.d.ts.map +1 -0
  39. package/dist/lib/writeEvents.js +47 -0
  40. package/dist/lib/writeEvents.js.map +1 -0
  41. package/package.json +32 -13
  42. package/src/index.ts +7 -0
  43. package/src/lib/client.ts +166 -0
  44. package/src/lib/consumerRunner.ts +592 -0
  45. package/src/lib/eventConsumer.ts +95 -0
  46. package/src/lib/eventMapping.ts +115 -0
  47. package/src/lib/eventObserver.ts +620 -0
  48. package/src/lib/observerRegistry.ts +69 -0
  49. package/src/lib/readEvents.ts +28 -0
  50. package/src/lib/tracing.ts +295 -0
  51. package/src/lib/writeEvents.ts +72 -0
  52. package/esm/_dnt.polyfills.d.ts +0 -7
  53. package/esm/_dnt.polyfills.d.ts.map +0 -1
  54. package/esm/_dnt.polyfills.js +0 -1
  55. package/esm/_dnt.shims.d.ts +0 -2
  56. package/esm/_dnt.shims.d.ts.map +0 -1
  57. package/esm/_dnt.shims.js +0 -57
  58. package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts +0 -700
  59. package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +0 -1
  60. package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.js +0 -903
  61. package/esm/deps/jsr.io/@std/ulid/1.0.0/_util.d.ts +0 -14
  62. package/esm/deps/jsr.io/@std/ulid/1.0.0/_util.d.ts.map +0 -1
  63. package/esm/deps/jsr.io/@std/ulid/1.0.0/_util.js +0 -65
  64. package/esm/deps/jsr.io/@std/ulid/1.0.0/decode_time.d.ts +0 -20
  65. package/esm/deps/jsr.io/@std/ulid/1.0.0/decode_time.d.ts.map +0 -1
  66. package/esm/deps/jsr.io/@std/ulid/1.0.0/decode_time.js +0 -43
  67. package/esm/deps/jsr.io/@std/ulid/1.0.0/mod.d.ts +0 -44
  68. package/esm/deps/jsr.io/@std/ulid/1.0.0/mod.d.ts.map +0 -1
  69. package/esm/deps/jsr.io/@std/ulid/1.0.0/mod.js +0 -47
  70. package/esm/deps/jsr.io/@std/ulid/1.0.0/monotonic_ulid.d.ts +0 -44
  71. package/esm/deps/jsr.io/@std/ulid/1.0.0/monotonic_ulid.d.ts.map +0 -1
  72. package/esm/deps/jsr.io/@std/ulid/1.0.0/monotonic_ulid.js +0 -51
  73. package/esm/deps/jsr.io/@std/ulid/1.0.0/ulid.d.ts +0 -31
  74. package/esm/deps/jsr.io/@std/ulid/1.0.0/ulid.d.ts.map +0 -1
  75. package/esm/deps/jsr.io/@std/ulid/1.0.0/ulid.js +0 -37
  76. package/esm/index.d.ts +0 -7
  77. package/esm/index.d.ts.map +0 -1
  78. package/esm/index.js +0 -6
  79. package/esm/lib/eventMapping.d.ts.map +0 -1
  80. package/esm/lib/eventObserver.d.ts +0 -133
  81. package/esm/lib/eventObserver.d.ts.map +0 -1
  82. package/esm/lib/eventObserver.js +0 -291
  83. package/esm/lib/tracing.d.ts.map +0 -1
  84. package/esm/lib/writeEvents.d.ts +0 -11
  85. package/esm/lib/writeEvents.d.ts.map +0 -1
  86. package/esm/lib/writeEvents.js +0 -31
  87. package/esm/package.json +0 -3
  88. /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
+ };