@zudojs/events 0.0.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 (140) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/eventBus/eventBus.core.d.ts +55 -0
  5. package/dist/eventBus/eventBus.core.d.ts.map +1 -0
  6. package/dist/eventBus/eventBus.core.js +175 -0
  7. package/dist/eventBus/eventBus.core.js.map +1 -0
  8. package/dist/eventBus/eventBus.factory.d.ts +14 -0
  9. package/dist/eventBus/eventBus.factory.d.ts.map +1 -0
  10. package/dist/eventBus/eventBus.factory.js +17 -0
  11. package/dist/eventBus/eventBus.factory.js.map +1 -0
  12. package/dist/eventBus/eventBus.publish.d.ts +17 -0
  13. package/dist/eventBus/eventBus.publish.d.ts.map +1 -0
  14. package/dist/eventBus/eventBus.publish.js +78 -0
  15. package/dist/eventBus/eventBus.publish.js.map +1 -0
  16. package/dist/eventBus/eventBus.registration.d.ts +47 -0
  17. package/dist/eventBus/eventBus.registration.d.ts.map +1 -0
  18. package/dist/eventBus/eventBus.registration.js +84 -0
  19. package/dist/eventBus/eventBus.registration.js.map +1 -0
  20. package/dist/eventBus/eventBus.type.d.ts +50 -0
  21. package/dist/eventBus/eventBus.type.d.ts.map +1 -0
  22. package/dist/eventBus/eventBus.type.js +10 -0
  23. package/dist/eventBus/eventBus.type.js.map +1 -0
  24. package/dist/eventBus/index.d.ts +9 -0
  25. package/dist/eventBus/index.d.ts.map +1 -0
  26. package/dist/eventBus/index.js +9 -0
  27. package/dist/eventBus/index.js.map +1 -0
  28. package/dist/eventEmitter/eventEmitter.abort.d.ts +8 -0
  29. package/dist/eventEmitter/eventEmitter.abort.d.ts.map +1 -0
  30. package/dist/eventEmitter/eventEmitter.abort.js +12 -0
  31. package/dist/eventEmitter/eventEmitter.abort.js.map +1 -0
  32. package/dist/eventEmitter/eventEmitter.core.d.ts +38 -0
  33. package/dist/eventEmitter/eventEmitter.core.d.ts.map +1 -0
  34. package/dist/eventEmitter/eventEmitter.core.js +151 -0
  35. package/dist/eventEmitter/eventEmitter.core.js.map +1 -0
  36. package/dist/eventEmitter/eventEmitter.parallel.d.ts +12 -0
  37. package/dist/eventEmitter/eventEmitter.parallel.d.ts.map +1 -0
  38. package/dist/eventEmitter/eventEmitter.parallel.js +50 -0
  39. package/dist/eventEmitter/eventEmitter.parallel.js.map +1 -0
  40. package/dist/eventEmitter/eventEmitter.sequential.d.ts +12 -0
  41. package/dist/eventEmitter/eventEmitter.sequential.d.ts.map +1 -0
  42. package/dist/eventEmitter/eventEmitter.sequential.js +44 -0
  43. package/dist/eventEmitter/eventEmitter.sequential.js.map +1 -0
  44. package/dist/eventEmitter/eventEmitter.type.d.ts +43 -0
  45. package/dist/eventEmitter/eventEmitter.type.d.ts.map +1 -0
  46. package/dist/eventEmitter/eventEmitter.type.js +14 -0
  47. package/dist/eventEmitter/eventEmitter.type.js.map +1 -0
  48. package/dist/eventEmitter/index.d.ts +11 -0
  49. package/dist/eventEmitter/index.d.ts.map +1 -0
  50. package/dist/eventEmitter/index.js +11 -0
  51. package/dist/eventEmitter/index.js.map +1 -0
  52. package/dist/eventErrors/eventError.base.d.ts +8 -0
  53. package/dist/eventErrors/eventError.base.d.ts.map +1 -0
  54. package/dist/eventErrors/eventError.base.js +8 -0
  55. package/dist/eventErrors/eventError.base.js.map +1 -0
  56. package/dist/eventErrors/index.d.ts +7 -0
  57. package/dist/eventErrors/index.d.ts.map +1 -0
  58. package/dist/eventErrors/index.js +7 -0
  59. package/dist/eventErrors/index.js.map +1 -0
  60. package/dist/eventHandler/eventHandler.core.d.ts +204 -0
  61. package/dist/eventHandler/eventHandler.core.d.ts.map +1 -0
  62. package/dist/eventHandler/eventHandler.core.js +182 -0
  63. package/dist/eventHandler/eventHandler.core.js.map +1 -0
  64. package/dist/eventHandler/index.d.ts +7 -0
  65. package/dist/eventHandler/index.d.ts.map +1 -0
  66. package/dist/eventHandler/index.js +7 -0
  67. package/dist/eventHandler/index.js.map +1 -0
  68. package/dist/eventMiddleware/eventMiddleware.builder.d.ts +47 -0
  69. package/dist/eventMiddleware/eventMiddleware.builder.d.ts.map +1 -0
  70. package/dist/eventMiddleware/eventMiddleware.builder.js +109 -0
  71. package/dist/eventMiddleware/eventMiddleware.builder.js.map +1 -0
  72. package/dist/eventMiddleware/eventMiddleware.helper.d.ts +38 -0
  73. package/dist/eventMiddleware/eventMiddleware.helper.d.ts.map +1 -0
  74. package/dist/eventMiddleware/eventMiddleware.helper.js +86 -0
  75. package/dist/eventMiddleware/eventMiddleware.helper.js.map +1 -0
  76. package/dist/eventMiddleware/eventMiddleware.pipeline.d.ts +18 -0
  77. package/dist/eventMiddleware/eventMiddleware.pipeline.d.ts.map +1 -0
  78. package/dist/eventMiddleware/eventMiddleware.pipeline.js +93 -0
  79. package/dist/eventMiddleware/eventMiddleware.pipeline.js.map +1 -0
  80. package/dist/eventMiddleware/eventMiddleware.type.d.ts +49 -0
  81. package/dist/eventMiddleware/eventMiddleware.type.d.ts.map +1 -0
  82. package/dist/eventMiddleware/eventMiddleware.type.js +5 -0
  83. package/dist/eventMiddleware/eventMiddleware.type.js.map +1 -0
  84. package/dist/eventMiddleware/index.d.ts +10 -0
  85. package/dist/eventMiddleware/index.d.ts.map +1 -0
  86. package/dist/eventMiddleware/index.js +10 -0
  87. package/dist/eventMiddleware/index.js.map +1 -0
  88. package/dist/eventRegistry/eventRegistry.lifecycle.d.ts +19 -0
  89. package/dist/eventRegistry/eventRegistry.lifecycle.d.ts.map +1 -0
  90. package/dist/eventRegistry/eventRegistry.lifecycle.js +45 -0
  91. package/dist/eventRegistry/eventRegistry.lifecycle.js.map +1 -0
  92. package/dist/eventRegistry/eventRegistry.queries.d.ts +23 -0
  93. package/dist/eventRegistry/eventRegistry.queries.d.ts.map +1 -0
  94. package/dist/eventRegistry/eventRegistry.queries.js +35 -0
  95. package/dist/eventRegistry/eventRegistry.queries.js.map +1 -0
  96. package/dist/eventRegistry/eventRegistry.registration.d.ts +29 -0
  97. package/dist/eventRegistry/eventRegistry.registration.d.ts.map +1 -0
  98. package/dist/eventRegistry/eventRegistry.registration.js +104 -0
  99. package/dist/eventRegistry/eventRegistry.registration.js.map +1 -0
  100. package/dist/eventRegistry/eventRegistry.store.d.ts +52 -0
  101. package/dist/eventRegistry/eventRegistry.store.d.ts.map +1 -0
  102. package/dist/eventRegistry/eventRegistry.store.js +124 -0
  103. package/dist/eventRegistry/eventRegistry.store.js.map +1 -0
  104. package/dist/eventRegistry/eventRegistry.type.d.ts +28 -0
  105. package/dist/eventRegistry/eventRegistry.type.d.ts.map +1 -0
  106. package/dist/eventRegistry/eventRegistry.type.js +11 -0
  107. package/dist/eventRegistry/eventRegistry.type.js.map +1 -0
  108. package/dist/eventRegistry/index.d.ts +11 -0
  109. package/dist/eventRegistry/index.d.ts.map +1 -0
  110. package/dist/eventRegistry/index.js +11 -0
  111. package/dist/eventRegistry/index.js.map +1 -0
  112. package/dist/eventSubscription/eventSubscription.core.d.ts +149 -0
  113. package/dist/eventSubscription/eventSubscription.core.d.ts.map +1 -0
  114. package/dist/eventSubscription/eventSubscription.core.js +174 -0
  115. package/dist/eventSubscription/eventSubscription.core.js.map +1 -0
  116. package/dist/eventSubscription/index.d.ts +7 -0
  117. package/dist/eventSubscription/index.d.ts.map +1 -0
  118. package/dist/eventSubscription/index.js +7 -0
  119. package/dist/eventSubscription/index.js.map +1 -0
  120. package/dist/eventTypes/eventDefinition.type.d.ts +180 -0
  121. package/dist/eventTypes/eventDefinition.type.d.ts.map +1 -0
  122. package/dist/eventTypes/eventDefinition.type.js +140 -0
  123. package/dist/eventTypes/eventDefinition.type.js.map +1 -0
  124. package/dist/eventTypes/eventPayload.type.d.ts +126 -0
  125. package/dist/eventTypes/eventPayload.type.d.ts.map +1 -0
  126. package/dist/eventTypes/eventPayload.type.js +167 -0
  127. package/dist/eventTypes/eventPayload.type.js.map +1 -0
  128. package/dist/eventTypes/eventType.type.d.ts +157 -0
  129. package/dist/eventTypes/eventType.type.d.ts.map +1 -0
  130. package/dist/eventTypes/eventType.type.js +244 -0
  131. package/dist/eventTypes/eventType.type.js.map +1 -0
  132. package/dist/eventTypes/index.d.ts +9 -0
  133. package/dist/eventTypes/index.d.ts.map +1 -0
  134. package/dist/eventTypes/index.js +9 -0
  135. package/dist/eventTypes/index.js.map +1 -0
  136. package/dist/index.d.ts +14 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +14 -0
  139. package/dist/index.js.map +1 -0
  140. package/package.json +51 -0
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Event type utilities for Zudojs.
3
+ *
4
+ * EventType is the string identifier used to route events.
5
+ * This module provides validation, normalization, matching,
6
+ * and strongly typed event-type helpers.
7
+ */
8
+ import type { Event, EventType } from "../eventTypes/eventDefinition.type.js";
9
+ /**
10
+ * A collection of event types.
11
+ */
12
+ export type EventTypeList = readonly EventType[];
13
+ /**
14
+ * Event type pattern.
15
+ *
16
+ * Supported forms:
17
+ *
18
+ * "user.created"
19
+ * "user.*"
20
+ * "*"
21
+ */
22
+ export type EventTypePattern = EventType | `${string}.*` | "*";
23
+ /**
24
+ * Type-safe mapping between event types and payloads.
25
+ */
26
+ export type EventPayloadMap = Record<EventType, unknown>;
27
+ /**
28
+ * Extracts the event type keys from a payload map.
29
+ */
30
+ export type EventTypeOf<TMap extends EventPayloadMap> = keyof TMap & string;
31
+ /**
32
+ * Creates an Event union from a payload map.
33
+ */
34
+ export type EventUnion<TMap extends EventPayloadMap> = {
35
+ [TType in EventTypeOf<TMap>]: Event<TMap[TType]> & {
36
+ readonly type: TType;
37
+ };
38
+ }[EventTypeOf<TMap>];
39
+ /**
40
+ * Validates an event type string.
41
+ *
42
+ * Zudojs event types use dot-separated lowercase names.
43
+ *
44
+ * Examples:
45
+ *
46
+ * user.created
47
+ * module.loaded
48
+ * runtime.started
49
+ * database.connection.failed
50
+ */
51
+ export declare function isValidEventType(value: unknown): value is EventType;
52
+ /**
53
+ * Validates an event type pattern.
54
+ */
55
+ export declare function isValidEventTypePattern(value: unknown): value is EventTypePattern;
56
+ /**
57
+ * Normalizes an event type.
58
+ *
59
+ * Normalization:
60
+ *
61
+ * 1. Trims whitespace
62
+ * 2. Converts to lowercase
63
+ * 3. Converts repeated separators into one separator
64
+ * 4. Removes leading/trailing separators
65
+ */
66
+ export declare function normalizeEventType(type: string): EventType;
67
+ /**
68
+ * Creates an event type from individual segments.
69
+ */
70
+ export declare function createEventType(...segments: readonly string[]): EventType;
71
+ /**
72
+ * Returns the namespace portion of an event type.
73
+ *
74
+ * Example:
75
+ *
76
+ * user.created
77
+ * ↓
78
+ * user
79
+ */
80
+ export declare function getEventNamespace(type: EventType): string;
81
+ /**
82
+ * Returns the final action portion of an event type.
83
+ *
84
+ * Example:
85
+ *
86
+ * user.created
87
+ * ↓
88
+ * created
89
+ */
90
+ export declare function getEventAction(type: EventType): string;
91
+ /**
92
+ * Returns all segments in an event type.
93
+ */
94
+ export declare function getEventTypeSegments(type: EventType): readonly string[];
95
+ /**
96
+ * Checks whether an event type matches a pattern.
97
+ *
98
+ * Supported:
99
+ *
100
+ * "user.created" matches "user.created"
101
+ * "user.created" matches "user.*"
102
+ * "user.created" matches "*"
103
+ * "order.created" does not match "user.*"
104
+ */
105
+ export declare function matchesEventType(type: EventType, pattern: EventTypePattern): boolean;
106
+ /**
107
+ * Determines whether two event types belong to the same
108
+ * namespace.
109
+ */
110
+ export declare function isSameEventNamespace(first: EventType, second: EventType): boolean;
111
+ /**
112
+ * Determines whether an event type is a child of another
113
+ * namespace.
114
+ */
115
+ export declare function isChildEventType(type: EventType, parent: EventType): boolean;
116
+ /**
117
+ * Creates a wildcard pattern for an event namespace.
118
+ *
119
+ * Example:
120
+ *
121
+ * createEventTypePattern("user")
122
+ * → "user.*"
123
+ */
124
+ export declare function createEventTypePattern(namespace: string): EventTypePattern;
125
+ /**
126
+ * Creates a strongly typed event type map.
127
+ */
128
+ export declare function defineEventTypes<const TMap extends EventPayloadMap>(map: TMap): Readonly<TMap>;
129
+ /**
130
+ * Creates a type-safe event type constant.
131
+ *
132
+ * Example:
133
+ *
134
+ * const USER_CREATED =
135
+ * defineEventType("user.created");
136
+ */
137
+ export declare function defineEventType<const TType extends EventType>(type: TType): TType;
138
+ /**
139
+ * Returns whether an event belongs to a type pattern.
140
+ */
141
+ export declare function eventMatchesType<TPayload>(event: Event<TPayload>, pattern: EventTypePattern): boolean;
142
+ /**
143
+ * Filters events by type pattern.
144
+ */
145
+ export declare function filterEventsByType<TPayload>(events: readonly Event<TPayload>[], pattern: EventTypePattern): readonly Event<TPayload>[];
146
+ /**
147
+ * Creates a normalized event type from an arbitrary string.
148
+ *
149
+ * Unlike normalizeEventType(), this function returns undefined
150
+ * instead of throwing for invalid input.
151
+ */
152
+ export declare function tryNormalizeEventType(type: string): EventType | undefined;
153
+ /**
154
+ * Asserts that an event type is valid.
155
+ */
156
+ export declare function assertEventType(type: unknown): asserts type is EventType;
157
+ //# sourceMappingURL=eventType.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventType.type.d.ts","sourceRoot":"","sources":["../../src/eventTypes/eventType.type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Event type utilities for Zudojs.
3
+ *
4
+ * EventType is the string identifier used to route events.
5
+ * This module provides validation, normalization, matching,
6
+ * and strongly typed event-type helpers.
7
+ */
8
+ /**
9
+ * Validates an event type string.
10
+ *
11
+ * Zudojs event types use dot-separated lowercase names.
12
+ *
13
+ * Examples:
14
+ *
15
+ * user.created
16
+ * module.loaded
17
+ * runtime.started
18
+ * database.connection.failed
19
+ */
20
+ export function isValidEventType(value) {
21
+ if (typeof value !== "string") {
22
+ return false;
23
+ }
24
+ const normalized = value.trim();
25
+ if (normalized.length === 0) {
26
+ return false;
27
+ }
28
+ if (normalized.length > 255) {
29
+ return false;
30
+ }
31
+ return /^[a-z0-9_]+(?:[.-][a-z0-9_*]+)*$/.test(normalized);
32
+ }
33
+ /**
34
+ * Validates an event type pattern.
35
+ */
36
+ export function isValidEventTypePattern(value) {
37
+ if (value === "*") {
38
+ return true;
39
+ }
40
+ if (typeof value !== "string") {
41
+ return false;
42
+ }
43
+ if (value.endsWith(".*")) {
44
+ return isValidEventType(value.slice(0, -2));
45
+ }
46
+ return isValidEventType(value);
47
+ }
48
+ /**
49
+ * Normalizes an event type.
50
+ *
51
+ * Normalization:
52
+ *
53
+ * 1. Trims whitespace
54
+ * 2. Converts to lowercase
55
+ * 3. Converts repeated separators into one separator
56
+ * 4. Removes leading/trailing separators
57
+ */
58
+ export function normalizeEventType(type) {
59
+ const lower = type.trim().toLowerCase();
60
+ let result = "";
61
+ let lastWasDot = false;
62
+ let leadingDots = true;
63
+ for (let i = 0; i < lower.length; i++) {
64
+ const ch = lower[i];
65
+ if (ch === "/" || ch === "\\" || ch === ":") {
66
+ if (!lastWasDot) {
67
+ result += ".";
68
+ lastWasDot = true;
69
+ }
70
+ }
71
+ else if (ch === ".") {
72
+ if (!lastWasDot) {
73
+ result += ".";
74
+ lastWasDot = true;
75
+ }
76
+ }
77
+ else {
78
+ leadingDots = false;
79
+ result += ch;
80
+ lastWasDot = false;
81
+ }
82
+ }
83
+ let start = 0;
84
+ let end = result.length;
85
+ while (start < end && result.charCodeAt(start) === 46)
86
+ start++;
87
+ while (end > start && result.charCodeAt(end - 1) === 46)
88
+ end--;
89
+ const trimmed = result.slice(start, end);
90
+ if (!isValidEventType(trimmed)) {
91
+ throw new TypeError(`Invalid event type: "${type}".`);
92
+ }
93
+ return trimmed;
94
+ }
95
+ /**
96
+ * Creates an event type from individual segments.
97
+ */
98
+ export function createEventType(...segments) {
99
+ if (segments.length === 0) {
100
+ throw new TypeError("At least one event type segment is required.");
101
+ }
102
+ return normalizeEventType(segments.join("."));
103
+ }
104
+ /**
105
+ * Returns the namespace portion of an event type.
106
+ *
107
+ * Example:
108
+ *
109
+ * user.created
110
+ * ↓
111
+ * user
112
+ */
113
+ export function getEventNamespace(type) {
114
+ const index = type.indexOf(".");
115
+ if (index === -1) {
116
+ return type;
117
+ }
118
+ return type.slice(0, index);
119
+ }
120
+ /**
121
+ * Returns the final action portion of an event type.
122
+ *
123
+ * Example:
124
+ *
125
+ * user.created
126
+ * ↓
127
+ * created
128
+ */
129
+ export function getEventAction(type) {
130
+ const index = type.lastIndexOf(".");
131
+ if (index === -1) {
132
+ return type;
133
+ }
134
+ return type.slice(index + 1);
135
+ }
136
+ /**
137
+ * Returns all segments in an event type.
138
+ */
139
+ export function getEventTypeSegments(type) {
140
+ return type.split(".");
141
+ }
142
+ /**
143
+ * Checks whether an event type matches a pattern.
144
+ *
145
+ * Supported:
146
+ *
147
+ * "user.created" matches "user.created"
148
+ * "user.created" matches "user.*"
149
+ * "user.created" matches "*"
150
+ * "order.created" does not match "user.*"
151
+ */
152
+ export function matchesEventType(type, pattern) {
153
+ if (pattern === "*") {
154
+ return true;
155
+ }
156
+ if (pattern === type) {
157
+ return true;
158
+ }
159
+ if (pattern.endsWith(".*")) {
160
+ const namespace = pattern.slice(0, -2);
161
+ return type === namespace || type.startsWith(`${namespace}.`);
162
+ }
163
+ return false;
164
+ }
165
+ /**
166
+ * Determines whether two event types belong to the same
167
+ * namespace.
168
+ */
169
+ export function isSameEventNamespace(first, second) {
170
+ return getEventNamespace(first) === getEventNamespace(second);
171
+ }
172
+ /**
173
+ * Determines whether an event type is a child of another
174
+ * namespace.
175
+ */
176
+ export function isChildEventType(type, parent) {
177
+ return type.startsWith(`${parent}.`);
178
+ }
179
+ /**
180
+ * Creates a wildcard pattern for an event namespace.
181
+ *
182
+ * Example:
183
+ *
184
+ * createEventTypePattern("user")
185
+ * → "user.*"
186
+ */
187
+ export function createEventTypePattern(namespace) {
188
+ const normalized = normalizeEventType(namespace);
189
+ return `${normalized}.*`;
190
+ }
191
+ /**
192
+ * Creates a strongly typed event type map.
193
+ */
194
+ export function defineEventTypes(map) {
195
+ return Object.freeze({
196
+ ...map,
197
+ });
198
+ }
199
+ /**
200
+ * Creates a type-safe event type constant.
201
+ *
202
+ * Example:
203
+ *
204
+ * const USER_CREATED =
205
+ * defineEventType("user.created");
206
+ */
207
+ export function defineEventType(type) {
208
+ return normalizeEventType(type);
209
+ }
210
+ /**
211
+ * Returns whether an event belongs to a type pattern.
212
+ */
213
+ export function eventMatchesType(event, pattern) {
214
+ return matchesEventType(event.type, pattern);
215
+ }
216
+ /**
217
+ * Filters events by type pattern.
218
+ */
219
+ export function filterEventsByType(events, pattern) {
220
+ return events.filter((event) => matchesEventType(event.type, pattern));
221
+ }
222
+ /**
223
+ * Creates a normalized event type from an arbitrary string.
224
+ *
225
+ * Unlike normalizeEventType(), this function returns undefined
226
+ * instead of throwing for invalid input.
227
+ */
228
+ export function tryNormalizeEventType(type) {
229
+ try {
230
+ return normalizeEventType(type);
231
+ }
232
+ catch {
233
+ return undefined;
234
+ }
235
+ }
236
+ /**
237
+ * Asserts that an event type is valid.
238
+ */
239
+ export function assertEventType(type) {
240
+ if (!isValidEventType(type)) {
241
+ throw new TypeError(`Invalid event type: "${String(type)}".`);
242
+ }
243
+ }
244
+ //# sourceMappingURL=eventType.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventType.type.js","sourceRoot":"","sources":["../../src/eventTypes/eventType.type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @zudojs/events/eventTypes
3
+ *
4
+ * Event type definitions and payload types.
5
+ */
6
+ export { type EventId, type EventType, type EventTimestamp, type EventSource, type EventCorrelationId, type EventCausationId, type EventPayload, type Event, type EventInput, type EventDefinition, isEvent, createEventId, createEvent, defineEvent, withEventMetadata, createDerivedEvent, getEventType, getEventPayload, describeEvent, } from "./eventDefinition.type.js";
7
+ export { type ObjectEventPayload, type PrimitiveEventPayload, type JsonEventPayload, type PayloadOf, type PayloadMap, type EventPayloadFactory, type EventPayloadOptions, isPrimitiveEventPayload, isObjectEventPayload, isJsonEventPayload, createEventPayload, validateEventPayload, } from "./eventPayload.type.js";
8
+ export { type EventTypeList, type EventTypePattern, type EventTypeOf, type EventUnion, isValidEventType, isValidEventTypePattern, normalizeEventType, createEventType, getEventNamespace, } from "./eventType.type.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eventTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,OAAO,EACP,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @zudojs/events/eventTypes
3
+ *
4
+ * Event type definitions and payload types.
5
+ */
6
+ export { isEvent, createEventId, createEvent, defineEvent, withEventMetadata, createDerivedEvent, getEventType, getEventPayload, describeEvent, } from "./eventDefinition.type.js";
7
+ export { isPrimitiveEventPayload, isObjectEventPayload, isJsonEventPayload, createEventPayload, validateEventPayload, } from "./eventPayload.type.js";
8
+ export { isValidEventType, isValidEventTypePattern, normalizeEventType, createEventType, getEventNamespace, } from "./eventType.type.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eventTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAWL,OAAO,EACP,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAQL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAKL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @zudojs/events
3
+ *
4
+ * Event bus, emitter, middleware, and registry for the Zudojs framework.
5
+ */
6
+ export * from "./eventBus/index.js";
7
+ export * from "./eventEmitter/index.js";
8
+ export * from "./eventRegistry/index.js";
9
+ export * from "./eventHandler/index.js";
10
+ export * from "./eventMiddleware/index.js";
11
+ export * from "./eventTypes/index.js";
12
+ export * from "./eventSubscription/index.js";
13
+ export * from "./eventErrors/index.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @zudojs/events
3
+ *
4
+ * Event bus, emitter, middleware, and registry for the Zudojs framework.
5
+ */
6
+ export * from "./eventBus/index.js";
7
+ export * from "./eventEmitter/index.js";
8
+ export * from "./eventRegistry/index.js";
9
+ export * from "./eventHandler/index.js";
10
+ export * from "./eventMiddleware/index.js";
11
+ export * from "./eventTypes/index.js";
12
+ export * from "./eventSubscription/index.js";
13
+ export * from "./eventErrors/index.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@zudojs/events",
3
+ "version": "0.0.1",
4
+ "description": "Event-driven architecture with event bus, emitter, middleware, and registry for decoupled communication.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "@zudojs/errors": "0.0.1",
20
+ "@zudojs/constants": "0.0.1"
21
+ },
22
+ "engines": {
23
+ "node": ">=24.0.0"
24
+ },
25
+ "devDependencies": {
26
+ "vitest": "^4.1.11",
27
+ "typescript": "^7.0.2"
28
+ },
29
+ "license": "MIT",
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "keywords": [
34
+ "zudojs",
35
+ "events",
36
+ "event-bus",
37
+ "pubsub"
38
+ ],
39
+ "homepage": "https://github.com/oyinlola-tech/zudo#readme",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/oyinlola-tech/zudo"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc -p tsconfig.json",
46
+ "typecheck": "tsc -p tsconfig.json --noEmit",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest",
49
+ "clean": "rm -rf dist"
50
+ }
51
+ }