@zudojs/events 0.1.0 → 1.0.0

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -11
  3. package/dist/eventBus/eventBus.core.d.ts +28 -2
  4. package/dist/eventBus/eventBus.core.js +104 -31
  5. package/dist/eventBus/eventBus.publish.d.ts +23 -5
  6. package/dist/eventBus/eventBus.publish.js +72 -32
  7. package/dist/eventBus/eventBus.registration.d.ts +24 -13
  8. package/dist/eventBus/eventBus.registration.js +31 -28
  9. package/dist/eventBus/eventBus.type.d.ts +75 -3
  10. package/dist/eventBus/eventBus.type.js +9 -0
  11. package/dist/eventBus/index.d.ts +2 -0
  12. package/dist/eventBus/index.js +2 -0
  13. package/dist/eventEmitter/eventEmitter.abort.d.ts +11 -2
  14. package/dist/eventEmitter/eventEmitter.abort.js +20 -5
  15. package/dist/eventEmitter/eventEmitter.core.d.ts +14 -3
  16. package/dist/eventEmitter/eventEmitter.core.js +63 -55
  17. package/dist/eventEmitter/eventEmitter.parallel.d.ts +7 -1
  18. package/dist/eventEmitter/eventEmitter.parallel.js +31 -13
  19. package/dist/eventEmitter/eventEmitter.sequential.d.ts +17 -1
  20. package/dist/eventEmitter/eventEmitter.sequential.js +19 -12
  21. package/dist/eventEmitter/eventEmitter.type.d.ts +60 -0
  22. package/dist/eventErrors/eventError.base.d.ts +50 -3
  23. package/dist/eventErrors/eventError.base.js +64 -3
  24. package/dist/eventHandler/eventHandler.core.d.ts +19 -0
  25. package/dist/eventHandler/eventHandler.core.js +67 -4
  26. package/dist/eventMiddleware/eventMiddleware.builder.js +5 -11
  27. package/dist/eventMiddleware/eventMiddleware.helper.js +0 -1
  28. package/dist/eventMiddleware/eventMiddleware.pipeline.d.ts +5 -0
  29. package/dist/eventMiddleware/eventMiddleware.pipeline.js +33 -9
  30. package/dist/eventRegistry/eventRegistry.lifecycle.d.ts +10 -5
  31. package/dist/eventRegistry/eventRegistry.lifecycle.js +23 -10
  32. package/dist/eventRegistry/eventRegistry.queries.d.ts +16 -7
  33. package/dist/eventRegistry/eventRegistry.queries.js +22 -13
  34. package/dist/eventRegistry/eventRegistry.registration.d.ts +14 -7
  35. package/dist/eventRegistry/eventRegistry.registration.js +120 -41
  36. package/dist/eventRegistry/eventRegistry.store.d.ts +12 -5
  37. package/dist/eventRegistry/eventRegistry.store.js +37 -12
  38. package/dist/eventRegistry/eventRegistry.type.d.ts +87 -2
  39. package/dist/eventRegistry/eventRegistry.type.js +5 -0
  40. package/dist/eventSubscription/eventSubscription.core.d.ts +5 -0
  41. package/dist/eventSubscription/eventSubscription.core.js +17 -3
  42. package/dist/eventTypes/eventDefinition.type.d.ts +11 -4
  43. package/dist/eventTypes/eventDefinition.type.js +49 -17
  44. package/dist/eventTypes/eventPayload.type.d.ts +5 -0
  45. package/dist/eventTypes/eventPayload.type.js +56 -15
  46. package/dist/eventTypes/eventType.type.d.ts +22 -5
  47. package/dist/eventTypes/eventType.type.js +33 -11
  48. package/dist/eventTypes/index.d.ts +2 -2
  49. package/dist/eventTypes/index.js +2 -2
  50. package/package.json +22 -14
  51. package/dist/.tsbuildinfo +0 -1
  52. package/dist/eventBus/eventBus.core.d.ts.map +0 -1
  53. package/dist/eventBus/eventBus.core.js.map +0 -1
  54. package/dist/eventBus/eventBus.factory.d.ts.map +0 -1
  55. package/dist/eventBus/eventBus.factory.js.map +0 -1
  56. package/dist/eventBus/eventBus.publish.d.ts.map +0 -1
  57. package/dist/eventBus/eventBus.publish.js.map +0 -1
  58. package/dist/eventBus/eventBus.registration.d.ts.map +0 -1
  59. package/dist/eventBus/eventBus.registration.js.map +0 -1
  60. package/dist/eventBus/eventBus.type.d.ts.map +0 -1
  61. package/dist/eventBus/eventBus.type.js.map +0 -1
  62. package/dist/eventBus/index.d.ts.map +0 -1
  63. package/dist/eventBus/index.js.map +0 -1
  64. package/dist/eventEmitter/eventEmitter.abort.d.ts.map +0 -1
  65. package/dist/eventEmitter/eventEmitter.abort.js.map +0 -1
  66. package/dist/eventEmitter/eventEmitter.core.d.ts.map +0 -1
  67. package/dist/eventEmitter/eventEmitter.core.js.map +0 -1
  68. package/dist/eventEmitter/eventEmitter.parallel.d.ts.map +0 -1
  69. package/dist/eventEmitter/eventEmitter.parallel.js.map +0 -1
  70. package/dist/eventEmitter/eventEmitter.sequential.d.ts.map +0 -1
  71. package/dist/eventEmitter/eventEmitter.sequential.js.map +0 -1
  72. package/dist/eventEmitter/eventEmitter.type.d.ts.map +0 -1
  73. package/dist/eventEmitter/eventEmitter.type.js.map +0 -1
  74. package/dist/eventEmitter/index.d.ts.map +0 -1
  75. package/dist/eventEmitter/index.js.map +0 -1
  76. package/dist/eventErrors/eventError.base.d.ts.map +0 -1
  77. package/dist/eventErrors/eventError.base.js.map +0 -1
  78. package/dist/eventErrors/index.d.ts.map +0 -1
  79. package/dist/eventErrors/index.js.map +0 -1
  80. package/dist/eventHandler/eventHandler.core.d.ts.map +0 -1
  81. package/dist/eventHandler/eventHandler.core.js.map +0 -1
  82. package/dist/eventHandler/index.d.ts.map +0 -1
  83. package/dist/eventHandler/index.js.map +0 -1
  84. package/dist/eventMiddleware/eventMiddleware.builder.d.ts.map +0 -1
  85. package/dist/eventMiddleware/eventMiddleware.builder.js.map +0 -1
  86. package/dist/eventMiddleware/eventMiddleware.helper.d.ts.map +0 -1
  87. package/dist/eventMiddleware/eventMiddleware.helper.js.map +0 -1
  88. package/dist/eventMiddleware/eventMiddleware.pipeline.d.ts.map +0 -1
  89. package/dist/eventMiddleware/eventMiddleware.pipeline.js.map +0 -1
  90. package/dist/eventMiddleware/eventMiddleware.type.d.ts.map +0 -1
  91. package/dist/eventMiddleware/eventMiddleware.type.js.map +0 -1
  92. package/dist/eventMiddleware/index.d.ts.map +0 -1
  93. package/dist/eventMiddleware/index.js.map +0 -1
  94. package/dist/eventRegistry/eventRegistry.lifecycle.d.ts.map +0 -1
  95. package/dist/eventRegistry/eventRegistry.lifecycle.js.map +0 -1
  96. package/dist/eventRegistry/eventRegistry.queries.d.ts.map +0 -1
  97. package/dist/eventRegistry/eventRegistry.queries.js.map +0 -1
  98. package/dist/eventRegistry/eventRegistry.registration.d.ts.map +0 -1
  99. package/dist/eventRegistry/eventRegistry.registration.js.map +0 -1
  100. package/dist/eventRegistry/eventRegistry.store.d.ts.map +0 -1
  101. package/dist/eventRegistry/eventRegistry.store.js.map +0 -1
  102. package/dist/eventRegistry/eventRegistry.type.d.ts.map +0 -1
  103. package/dist/eventRegistry/eventRegistry.type.js.map +0 -1
  104. package/dist/eventRegistry/index.d.ts.map +0 -1
  105. package/dist/eventRegistry/index.js.map +0 -1
  106. package/dist/eventSubscription/eventSubscription.core.d.ts.map +0 -1
  107. package/dist/eventSubscription/eventSubscription.core.js.map +0 -1
  108. package/dist/eventSubscription/index.d.ts.map +0 -1
  109. package/dist/eventSubscription/index.js.map +0 -1
  110. package/dist/eventTypes/eventDefinition.type.d.ts.map +0 -1
  111. package/dist/eventTypes/eventDefinition.type.js.map +0 -1
  112. package/dist/eventTypes/eventPayload.type.d.ts.map +0 -1
  113. package/dist/eventTypes/eventPayload.type.js.map +0 -1
  114. package/dist/eventTypes/eventType.type.d.ts.map +0 -1
  115. package/dist/eventTypes/eventType.type.js.map +0 -1
  116. package/dist/eventTypes/index.d.ts.map +0 -1
  117. package/dist/eventTypes/index.js.map +0 -1
  118. package/dist/index.d.ts.map +0 -1
  119. package/dist/index.js.map +0 -1
@@ -8,7 +8,9 @@
8
8
  /**
9
9
  * Validates an event type string.
10
10
  *
11
- * Zudojs event types use dot-separated lowercase names.
11
+ * Zudojs event types use dot-separated lowercase names. Wildcards
12
+ * are not part of an event type; they are only valid in patterns
13
+ * (see isValidEventTypePattern).
12
14
  *
13
15
  * Examples:
14
16
  *
@@ -28,10 +30,14 @@ export function isValidEventType(value) {
28
30
  if (normalized.length > 255) {
29
31
  return false;
30
32
  }
31
- return /^[a-z0-9_]+(?:[.-][a-z0-9_*]+)*$/.test(normalized);
33
+ return /^[a-z0-9_]+(?:[.-][a-z0-9_]+)*$/.test(normalized);
32
34
  }
33
35
  /**
34
36
  * Validates an event type pattern.
37
+ *
38
+ * Supported forms are an exact event type, a namespace wildcard
39
+ * ("user.*") and the catch-all "*". Wildcards in any other
40
+ * position ("user.*.created", "user.cre*") are rejected.
35
41
  */
36
42
  export function isValidEventTypePattern(value) {
37
43
  if (value === "*") {
@@ -56,26 +62,21 @@ export function isValidEventTypePattern(value) {
56
62
  * 4. Removes leading/trailing separators
57
63
  */
58
64
  export function normalizeEventType(type) {
65
+ if (typeof type !== "string") {
66
+ throw new TypeError(`Invalid event type: "${String(type)}".`);
67
+ }
59
68
  const lower = type.trim().toLowerCase();
60
69
  let result = "";
61
70
  let lastWasDot = false;
62
- let leadingDots = true;
63
71
  for (let i = 0; i < lower.length; i++) {
64
72
  const ch = lower[i];
65
- if (ch === "/" || ch === "\\" || ch === ":") {
66
- if (!lastWasDot) {
67
- result += ".";
68
- lastWasDot = true;
69
- }
70
- }
71
- else if (ch === ".") {
73
+ if (ch === "/" || ch === "\\" || ch === ":" || ch === ".") {
72
74
  if (!lastWasDot) {
73
75
  result += ".";
74
76
  lastWasDot = true;
75
77
  }
76
78
  }
77
79
  else {
78
- leadingDots = false;
79
80
  result += ch;
80
81
  lastWasDot = false;
81
82
  }
@@ -139,6 +140,21 @@ export function getEventAction(type) {
139
140
  export function getEventTypeSegments(type) {
140
141
  return type.split(".");
141
142
  }
143
+ /**
144
+ * Normalizes an event type pattern.
145
+ *
146
+ * "*" is returned unchanged, "User.*" becomes "user.*" and any
147
+ * other value is normalized as an event type.
148
+ */
149
+ export function normalizeEventTypePattern(pattern) {
150
+ if (pattern === "*") {
151
+ return "*";
152
+ }
153
+ if (typeof pattern === "string" && pattern.trim().endsWith(".*")) {
154
+ return `${normalizeEventType(pattern.trim().slice(0, -2))}.*`;
155
+ }
156
+ return normalizeEventType(pattern);
157
+ }
142
158
  /**
143
159
  * Checks whether an event type matches a pattern.
144
160
  *
@@ -146,8 +162,14 @@ export function getEventTypeSegments(type) {
146
162
  *
147
163
  * "user.created" matches "user.created"
148
164
  * "user.created" matches "user.*"
165
+ * "user" matches "user.*" (a namespace pattern also
166
+ * matches the bare namespace event)
149
167
  * "user.created" matches "*"
150
168
  * "order.created" does not match "user.*"
169
+ *
170
+ * Both arguments are expected to be normalized (see
171
+ * normalizeEventType / normalizeEventTypePattern); no
172
+ * normalization happens here.
151
173
  */
152
174
  export function matchesEventType(type, pattern) {
153
175
  if (pattern === "*") {
@@ -4,6 +4,6 @@
4
4
  * Event type definitions and payload types.
5
5
  */
6
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";
7
+ export { type ObjectEventPayload, type PrimitiveEventPayload, type JsonEventPayload, type EventPayloadMap, type PayloadOf, type PayloadMap, type EventPayloadFactory, type EventPayloadOptions, isPrimitiveEventPayload, isObjectEventPayload, isJsonEventPayload, createEventPayload, createObjectEventPayload, createJsonEventPayload, cloneEventPayload, deepFreeze, stripUndefinedValues, mergeEventPayloads, staticPayload, definePayloadFactory, validateEventPayload, describeEventPayload, } from "./eventPayload.type.js";
8
+ export { type EventTypeList, type EventTypePattern, type EventTypeOf, type EventUnion, isValidEventType, isValidEventTypePattern, normalizeEventType, normalizeEventTypePattern, tryNormalizeEventType, assertEventType, createEventType, createEventTypePattern, getEventNamespace, getEventAction, getEventTypeSegments, matchesEventType, isSameEventNamespace, isChildEventType, eventMatchesType, filterEventsByType, defineEventTypes, defineEventType, } from "./eventType.type.js";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -4,6 +4,6 @@
4
4
  * Event type definitions and payload types.
5
5
  */
6
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";
7
+ export { isPrimitiveEventPayload, isObjectEventPayload, isJsonEventPayload, createEventPayload, createObjectEventPayload, createJsonEventPayload, cloneEventPayload, deepFreeze, stripUndefinedValues, mergeEventPayloads, staticPayload, definePayloadFactory, validateEventPayload, describeEventPayload, } from "./eventPayload.type.js";
8
+ export { isValidEventType, isValidEventTypePattern, normalizeEventType, normalizeEventTypePattern, tryNormalizeEventType, assertEventType, createEventType, createEventTypePattern, getEventNamespace, getEventAction, getEventTypeSegments, matchesEventType, isSameEventNamespace, isChildEventType, eventMatchesType, filterEventsByType, defineEventTypes, defineEventType, } from "./eventType.type.js";
9
9
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zudojs/events",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "Event-driven architecture with event bus, emitter, middleware, and registry for decoupled communication.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -13,25 +13,22 @@
13
13
  }
14
14
  },
15
15
  "files": [
16
- "dist"
16
+ "dist",
17
+ "!dist/**/*.map",
18
+ "!dist/**/*.tsbuildinfo",
19
+ "!dist/.tsbuildinfo"
17
20
  ],
18
- "scripts": {
19
- "build": "tsc -p tsconfig.json",
20
- "typecheck": "tsc -p tsconfig.json --noEmit",
21
- "test": "vitest run",
22
- "test:watch": "vitest",
23
- "clean": "rm -rf dist"
24
- },
21
+ "sideEffects": false,
25
22
  "dependencies": {
26
- "@zudojs/errors": "0.1.0",
27
- "@zudojs/constants": "0.1.0"
23
+ "@zudojs/errors": "1.0.0",
24
+ "@zudojs/constants": "1.0.0"
28
25
  },
29
26
  "engines": {
30
27
  "node": ">=24.0.0"
31
28
  },
32
29
  "devDependencies": {
33
30
  "vitest": "^4.1.11",
34
- "typescript": "^7.0.2"
31
+ "typescript": "7.0.2"
35
32
  },
36
33
  "license": "MIT",
37
34
  "publishConfig": {
@@ -44,8 +41,19 @@
44
41
  "pubsub"
45
42
  ],
46
43
  "homepage": "https://github.com/oyinlola-tech/zudo#readme",
44
+ "bugs": {
45
+ "url": "https://github.com/oyinlola-tech/zudo/issues"
46
+ },
47
47
  "repository": {
48
48
  "type": "git",
49
- "url": "https://github.com/oyinlola-tech/zudo"
49
+ "url": "https://github.com/oyinlola-tech/zudo",
50
+ "directory": "packages/events"
51
+ },
52
+ "scripts": {
53
+ "build": "tsc -p tsconfig.json",
54
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
55
+ "test": "vitest run",
56
+ "test:watch": "vitest",
57
+ "clean": "rm -rf dist"
50
58
  }
51
- }
59
+ }