@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,52 @@
1
+ /**
2
+ * Event registry store for Zudojs.
3
+ *
4
+ * The registry owns event definitions and registered handlers.
5
+ * It does not perform event dispatching. Dispatching belongs to
6
+ * EventEmitter and higher-level routing belongs to EventBus.
7
+ */
8
+ import type { Event, EventDefinition, EventType } from "../eventTypes/eventDefinition.type.js";
9
+ import type { EventTypePattern } from "../eventTypes/eventType.type.js";
10
+ import type { EventHandlerLike, EventHandlerOptions, RegisteredEventHandler } from "../eventHandler/eventHandler.core.js";
11
+ import type { EventSubscription } from "../eventSubscription/eventSubscription.core.js";
12
+ import { DuplicateEventDefinitionError, EventDefinitionNotFoundError, DuplicateEventHandlerError, EventHandlerNotFoundError } from "../eventErrors/eventError.base.js";
13
+ import type { EventRegistryOptions, EventRegistryListener, RegisteredEventDefinition } from "./eventRegistry.type.js";
14
+ export { DuplicateEventDefinitionError, EventDefinitionNotFoundError, DuplicateEventHandlerError, EventHandlerNotFoundError, };
15
+ /**
16
+ * Main event registry.
17
+ */
18
+ export declare class EventRegistry {
19
+ private readonly definitions;
20
+ private readonly handlers;
21
+ private readonly listeners;
22
+ private readonly options;
23
+ private disposed;
24
+ constructor(options?: EventRegistryOptions);
25
+ register<TType extends EventType, TPayload>(definition: EventDefinition<TType, TPayload>): RegisteredEventDefinition<TType, TPayload>;
26
+ registerHandler<TEvent extends Event = Event>(eventType: EventTypePattern, handler: EventHandlerLike<TEvent>, options?: Omit<EventHandlerOptions, "eventType">): EventSubscription;
27
+ get<TType extends EventType, TPayload = unknown>(eventType: TType): RegisteredEventDefinition<TType, TPayload> | undefined;
28
+ require<TType extends EventType, TPayload = unknown>(eventType: TType): RegisteredEventDefinition<TType, TPayload>;
29
+ has(eventType: EventType): boolean;
30
+ unregister(eventType: EventType): boolean;
31
+ getHandler(handlerId: string): RegisteredEventHandler | undefined;
32
+ requireHandler(handlerId: string): RegisteredEventHandler;
33
+ hasHandler(handlerId: string): boolean;
34
+ unregisterHandler(handlerId: string): boolean;
35
+ getDefinitions(): readonly RegisteredEventDefinition[];
36
+ getHandlers(): readonly RegisteredEventHandler[];
37
+ getHandlersForEvent(event: Event): readonly RegisteredEventHandler[];
38
+ getHandlersForType(eventType: EventType): readonly RegisteredEventHandler[];
39
+ subscribe(listener: EventRegistryListener): () => void;
40
+ get eventCount(): number;
41
+ get handlerCount(): number;
42
+ clear(): void;
43
+ dispose(): void;
44
+ isDisposed(): boolean;
45
+ private notify;
46
+ private ensureActive;
47
+ }
48
+ /**
49
+ * Creates an event registry.
50
+ */
51
+ export declare function createEventRegistry(options?: EventRegistryOptions): EventRegistry;
52
+ //# sourceMappingURL=eventRegistry.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventRegistry.store.d.ts","sourceRoot":"","sources":["../../src/eventRegistry/eventRegistry.store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Event registry store for Zudojs.
3
+ *
4
+ * The registry owns event definitions and registered handlers.
5
+ * It does not perform event dispatching. Dispatching belongs to
6
+ * EventEmitter and higher-level routing belongs to EventBus.
7
+ */
8
+ import { DuplicateEventDefinitionError, EventDefinitionNotFoundError, DuplicateEventHandlerError, EventHandlerNotFoundError, } from "../eventErrors/eventError.base.js";
9
+ import { registryRegister, registryRegisterHandler, registryUnregister, registryUnregisterHandler, } from "./eventRegistry.registration.js";
10
+ import { getHandlersForEvent, getHandlersForType, getAllDefinitions, getAllHandlers, } from "./eventRegistry.queries.js";
11
+ import { registryClear, registryDispose, registryNotify, } from "./eventRegistry.lifecycle.js";
12
+ export { DuplicateEventDefinitionError, EventDefinitionNotFoundError, DuplicateEventHandlerError, EventHandlerNotFoundError, };
13
+ /**
14
+ * Main event registry.
15
+ */
16
+ export class EventRegistry {
17
+ definitions = new Map();
18
+ handlers = new Map();
19
+ listeners = new Set();
20
+ options;
21
+ disposed = false;
22
+ constructor(options = {}) {
23
+ this.options = {
24
+ allowDuplicateDefinitions: options.allowDuplicateDefinitions ?? false,
25
+ allowDuplicateHandlerIds: options.allowDuplicateHandlerIds ?? false,
26
+ };
27
+ }
28
+ register(definition) {
29
+ return registryRegister(definition, this.definitions, this.options, () => this.ensureActive(), (c) => this.notify(c));
30
+ }
31
+ registerHandler(eventType, handler, options = {}) {
32
+ return registryRegisterHandler(eventType, handler, options, this.handlers, this.options, () => this.ensureActive(), (c) => this.notify(c));
33
+ }
34
+ get(eventType) {
35
+ this.ensureActive();
36
+ return this.definitions.get(eventType);
37
+ }
38
+ require(eventType) {
39
+ const definition = this.get(eventType);
40
+ if (!definition) {
41
+ throw new EventDefinitionNotFoundError(eventType);
42
+ }
43
+ return definition;
44
+ }
45
+ has(eventType) {
46
+ this.ensureActive();
47
+ return this.definitions.has(eventType);
48
+ }
49
+ unregister(eventType) {
50
+ return registryUnregister(eventType, this.definitions, () => this.ensureActive(), (c) => this.notify(c));
51
+ }
52
+ getHandler(handlerId) {
53
+ this.ensureActive();
54
+ return this.handlers.get(handlerId);
55
+ }
56
+ requireHandler(handlerId) {
57
+ const handler = this.getHandler(handlerId);
58
+ if (!handler) {
59
+ throw new EventHandlerNotFoundError(handlerId);
60
+ }
61
+ return handler;
62
+ }
63
+ hasHandler(handlerId) {
64
+ this.ensureActive();
65
+ return this.handlers.has(handlerId);
66
+ }
67
+ unregisterHandler(handlerId) {
68
+ return registryUnregisterHandler(handlerId, this.handlers, () => this.ensureActive(), (c) => this.notify(c));
69
+ }
70
+ getDefinitions() {
71
+ this.ensureActive();
72
+ return getAllDefinitions(this.definitions);
73
+ }
74
+ getHandlers() {
75
+ this.ensureActive();
76
+ return getAllHandlers(this.handlers);
77
+ }
78
+ getHandlersForEvent(event) {
79
+ this.ensureActive();
80
+ return getHandlersForEvent(this.handlers, event);
81
+ }
82
+ getHandlersForType(eventType) {
83
+ this.ensureActive();
84
+ return getHandlersForType(this.handlers, eventType);
85
+ }
86
+ subscribe(listener) {
87
+ this.ensureActive();
88
+ this.listeners.add(listener);
89
+ return () => {
90
+ this.listeners.delete(listener);
91
+ };
92
+ }
93
+ get eventCount() {
94
+ return this.definitions.size;
95
+ }
96
+ get handlerCount() {
97
+ return this.handlers.size;
98
+ }
99
+ clear() {
100
+ registryClear(this.definitions, this.handlers, () => this.ensureActive(), (c) => this.notify(c));
101
+ }
102
+ dispose() {
103
+ registryDispose(this.disposed, this.definitions, this.handlers, this.listeners, () => this.ensureActive(), (c) => this.notify(c));
104
+ this.disposed = true;
105
+ }
106
+ isDisposed() {
107
+ return this.disposed;
108
+ }
109
+ notify(change) {
110
+ registryNotify(change, this.listeners);
111
+ }
112
+ ensureActive() {
113
+ if (this.disposed) {
114
+ throw new Error("EventRegistry has already been disposed.");
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Creates an event registry.
120
+ */
121
+ export function createEventRegistry(options = {}) {
122
+ return new EventRegistry(options);
123
+ }
124
+ //# sourceMappingURL=eventRegistry.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventRegistry.store.js","sourceRoot":"","sources":["../../src/eventRegistry/eventRegistry.store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Event registry type definitions for Zudojs.
3
+ */
4
+ import type { EventDefinition, EventType } from "../eventTypes/eventDefinition.type.js";
5
+ import type { RegisteredEventHandler } from "../eventHandler/eventHandler.core.js";
6
+ export interface EventRegistryOptions {
7
+ readonly allowDuplicateDefinitions?: boolean;
8
+ readonly allowDuplicateHandlerIds?: boolean;
9
+ }
10
+ export declare enum EventRegistryChangeType {
11
+ EVENT_REGISTERED = "event.registered",
12
+ EVENT_UNREGISTERED = "event.unregistered",
13
+ HANDLER_REGISTERED = "handler.registered",
14
+ HANDLER_UNREGISTERED = "handler.unregistered"
15
+ }
16
+ export interface EventRegistryChange {
17
+ readonly type: EventRegistryChangeType;
18
+ readonly eventType: EventType;
19
+ readonly handler?: RegisteredEventHandler;
20
+ readonly timestamp: Date;
21
+ }
22
+ export type EventRegistryListener = (change: EventRegistryChange) => void;
23
+ export interface RegisteredEventDefinition<TType extends EventType = EventType, TPayload = unknown> {
24
+ readonly type: TType;
25
+ readonly definition: EventDefinition<TType, TPayload>;
26
+ readonly registeredAt: Date;
27
+ }
28
+ //# sourceMappingURL=eventRegistry.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventRegistry.type.d.ts","sourceRoot":"","sources":["../../src/eventRegistry/eventRegistry.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,eAAe,EACf,SAAS,EACV,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CAC7C;AAED,oBAAY,uBAAuB;IACjC,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,oBAAoB,yBAAyB;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAE1E,MAAM,WAAW,yBAAyB,CACxC,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,QAAQ,GAAG,OAAO;IAElB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;CAC7B"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Event registry type definitions for Zudojs.
3
+ */
4
+ export var EventRegistryChangeType;
5
+ (function (EventRegistryChangeType) {
6
+ EventRegistryChangeType["EVENT_REGISTERED"] = "event.registered";
7
+ EventRegistryChangeType["EVENT_UNREGISTERED"] = "event.unregistered";
8
+ EventRegistryChangeType["HANDLER_REGISTERED"] = "handler.registered";
9
+ EventRegistryChangeType["HANDLER_UNREGISTERED"] = "handler.unregistered";
10
+ })(EventRegistryChangeType || (EventRegistryChangeType = {}));
11
+ //# sourceMappingURL=eventRegistry.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventRegistry.type.js","sourceRoot":"","sources":["../../src/eventRegistry/eventRegistry.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,CAAN,IAAY,uBAKX;AALD,WAAY,uBAAuB;IACjC,gEAAqC,CAAA;IACrC,oEAAyC,CAAA;IACzC,oEAAyC,CAAA;IACzC,wEAA6C,CAAA;AAC/C,CAAC,EALW,uBAAuB,KAAvB,uBAAuB,QAKlC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @zudojs/events/eventRegistry
3
+ *
4
+ * Event definition registration and lookup.
5
+ */
6
+ export * from "./eventRegistry.type.js";
7
+ export * from "./eventRegistry.queries.js";
8
+ export * from "./eventRegistry.registration.js";
9
+ export * from "./eventRegistry.lifecycle.js";
10
+ export * from "./eventRegistry.store.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eventRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @zudojs/events/eventRegistry
3
+ *
4
+ * Event definition registration and lookup.
5
+ */
6
+ export * from "./eventRegistry.type.js";
7
+ export * from "./eventRegistry.queries.js";
8
+ export * from "./eventRegistry.registration.js";
9
+ export * from "./eventRegistry.lifecycle.js";
10
+ export * from "./eventRegistry.store.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eventRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Event subscription primitives for Zudojs.
3
+ *
4
+ * A subscription represents an active connection between an
5
+ * event listener and an event source.
6
+ *
7
+ * The subscription owns cancellation of that connection, but
8
+ * does not know how events are dispatched.
9
+ */
10
+ /**
11
+ * Unique identifier assigned to a subscription.
12
+ */
13
+ export type EventSubscriptionId = string;
14
+ /**
15
+ * Subscription state.
16
+ */
17
+ export declare enum EventSubscriptionState {
18
+ /**
19
+ * Subscription is active.
20
+ */
21
+ ACTIVE = "active",
22
+ /**
23
+ * Subscription has been cancelled.
24
+ */
25
+ CANCELLED = "cancelled"
26
+ }
27
+ /**
28
+ * Options for creating an event subscription.
29
+ */
30
+ export interface EventSubscriptionOptions {
31
+ /**
32
+ * Optional identifier.
33
+ *
34
+ * If omitted, an identifier is generated.
35
+ */
36
+ readonly id?: EventSubscriptionId;
37
+ /**
38
+ * Optional human-readable description.
39
+ */
40
+ readonly description?: string;
41
+ }
42
+ /**
43
+ * Public event subscription contract.
44
+ */
45
+ export interface EventSubscription {
46
+ /**
47
+ * Unique subscription identifier.
48
+ */
49
+ readonly id: EventSubscriptionId;
50
+ /**
51
+ * Optional description.
52
+ */
53
+ readonly description?: string;
54
+ /**
55
+ * Current subscription state.
56
+ */
57
+ readonly state: EventSubscriptionState;
58
+ /**
59
+ * Whether the subscription is currently active.
60
+ */
61
+ readonly active: boolean;
62
+ /**
63
+ * Cancels the subscription.
64
+ *
65
+ * Cancellation is idempotent.
66
+ */
67
+ unsubscribe(): void;
68
+ }
69
+ /**
70
+ * Internal subscription implementation.
71
+ */
72
+ export declare class EventSubscriptionHandle implements EventSubscription {
73
+ readonly id: EventSubscriptionId;
74
+ readonly description?: string;
75
+ private currentState;
76
+ private readonly onUnsubscribe;
77
+ private unsubscribeCalled;
78
+ constructor(onUnsubscribe: () => void, options?: EventSubscriptionOptions);
79
+ /**
80
+ * Returns the current subscription state.
81
+ */
82
+ get state(): EventSubscriptionState;
83
+ /**
84
+ * Returns whether the subscription is active.
85
+ */
86
+ get active(): boolean;
87
+ /**
88
+ * Cancels the subscription.
89
+ *
90
+ * Calling unsubscribe multiple times has no effect.
91
+ */
92
+ unsubscribe(): void;
93
+ }
94
+ /**
95
+ * Creates a unique event subscription identifier.
96
+ */
97
+ export declare function createEventSubscriptionId(): EventSubscriptionId;
98
+ /**
99
+ * Creates an already active subscription handle.
100
+ */
101
+ export declare function createEventSubscription(onUnsubscribe: () => void, options?: EventSubscriptionOptions): EventSubscription;
102
+ /**
103
+ * Determines whether a value is an event subscription.
104
+ */
105
+ export declare function isEventSubscription(value: unknown): value is EventSubscription;
106
+ /**
107
+ * A collection of subscriptions that can be disposed together.
108
+ */
109
+ export declare class EventSubscriptionGroup implements EventSubscription {
110
+ readonly id: EventSubscriptionId;
111
+ readonly description?: string;
112
+ private readonly subscriptions;
113
+ private currentState;
114
+ constructor(subscriptions?: readonly EventSubscription[], options?: EventSubscriptionOptions);
115
+ /**
116
+ * Returns the current state.
117
+ */
118
+ get state(): EventSubscriptionState;
119
+ /**
120
+ * Returns whether the group is active.
121
+ */
122
+ get active(): boolean;
123
+ /**
124
+ * Number of subscriptions in the group.
125
+ */
126
+ get size(): number;
127
+ /**
128
+ * Adds a subscription to the group.
129
+ */
130
+ add(subscription: EventSubscription): this;
131
+ /**
132
+ * Removes a subscription from the group without
133
+ * unsubscribing it.
134
+ */
135
+ remove(subscription: EventSubscription): boolean;
136
+ /**
137
+ * Unsubscribes every subscription in the group.
138
+ */
139
+ unsubscribe(): void;
140
+ /**
141
+ * Returns all subscriptions in the group.
142
+ */
143
+ getAll(): readonly EventSubscription[];
144
+ }
145
+ /**
146
+ * Creates an empty subscription group.
147
+ */
148
+ export declare function createEventSubscriptionGroup(options?: EventSubscriptionOptions): EventSubscriptionGroup;
149
+ //# sourceMappingURL=eventSubscription.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventSubscription.core.d.ts","sourceRoot":"","sources":["../../src/eventSubscription/eventSubscription.core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,oBAAY,sBAAsB;IAChC;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,WAAW,IAAI,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC;IAEjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,YAAY,CAAyB;IAE7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAE3C,OAAO,CAAC,iBAAiB,CAAS;IAElC,YACE,aAAa,EAAE,MAAM,IAAI,EACzB,OAAO,GAAE,wBAA6B,EASvC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,sBAAsB,CAElC;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,WAAW,IAAI,IAAI,CAUlB;CACF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D;AAgBD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,IAAI,EACzB,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAEnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAe5B;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC;IAEjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,OAAO,CAAC,YAAY,CAAyB;IAE7C,YACE,aAAa,GAAE,SAAS,iBAAiB,EAAO,EAChD,OAAO,GAAE,wBAA6B,EASvC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,sBAAsB,CAElC;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAUzC;IAED;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAE/C;IAED;;OAEG;IACH,WAAW,IAAI,IAAI,CAclB;IAED;;OAEG;IACH,MAAM,IAAI,SAAS,iBAAiB,EAAE,CAErC;CACF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,wBAA6B,GACrC,sBAAsB,CAExB"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Event subscription primitives for Zudojs.
3
+ *
4
+ * A subscription represents an active connection between an
5
+ * event listener and an event source.
6
+ *
7
+ * The subscription owns cancellation of that connection, but
8
+ * does not know how events are dispatched.
9
+ */
10
+ import { randomBytes } from "node:crypto";
11
+ /**
12
+ * Subscription state.
13
+ */
14
+ export var EventSubscriptionState;
15
+ (function (EventSubscriptionState) {
16
+ /**
17
+ * Subscription is active.
18
+ */
19
+ EventSubscriptionState["ACTIVE"] = "active";
20
+ /**
21
+ * Subscription has been cancelled.
22
+ */
23
+ EventSubscriptionState["CANCELLED"] = "cancelled";
24
+ })(EventSubscriptionState || (EventSubscriptionState = {}));
25
+ /**
26
+ * Internal subscription implementation.
27
+ */
28
+ export class EventSubscriptionHandle {
29
+ id;
30
+ description;
31
+ currentState;
32
+ onUnsubscribe;
33
+ unsubscribeCalled = false;
34
+ constructor(onUnsubscribe, options = {}) {
35
+ this.id = options.id ?? createEventSubscriptionId();
36
+ this.description = options.description;
37
+ this.currentState = EventSubscriptionState.ACTIVE;
38
+ this.onUnsubscribe = onUnsubscribe;
39
+ }
40
+ /**
41
+ * Returns the current subscription state.
42
+ */
43
+ get state() {
44
+ return this.currentState;
45
+ }
46
+ /**
47
+ * Returns whether the subscription is active.
48
+ */
49
+ get active() {
50
+ return this.currentState === EventSubscriptionState.ACTIVE;
51
+ }
52
+ /**
53
+ * Cancels the subscription.
54
+ *
55
+ * Calling unsubscribe multiple times has no effect.
56
+ */
57
+ unsubscribe() {
58
+ if (this.unsubscribeCalled) {
59
+ return;
60
+ }
61
+ this.unsubscribeCalled = true;
62
+ this.currentState = EventSubscriptionState.CANCELLED;
63
+ this.onUnsubscribe();
64
+ }
65
+ }
66
+ /**
67
+ * Creates a unique event subscription identifier.
68
+ */
69
+ export function createEventSubscriptionId() {
70
+ return `subscription:${Date.now()}:${randomId()}`;
71
+ }
72
+ /**
73
+ * Generates the random portion of a subscription identifier.
74
+ */
75
+ function randomId() {
76
+ if (typeof crypto !== "undefined" &&
77
+ typeof crypto.randomUUID === "function") {
78
+ return crypto.randomUUID();
79
+ }
80
+ return randomBytes(8).toString("hex");
81
+ }
82
+ /**
83
+ * Creates an already active subscription handle.
84
+ */
85
+ export function createEventSubscription(onUnsubscribe, options = {}) {
86
+ return new EventSubscriptionHandle(onUnsubscribe, options);
87
+ }
88
+ /**
89
+ * Determines whether a value is an event subscription.
90
+ */
91
+ export function isEventSubscription(value) {
92
+ return (typeof value === "object" &&
93
+ value !== null &&
94
+ typeof value.unsubscribe === "function" &&
95
+ typeof value.active === "boolean");
96
+ }
97
+ /**
98
+ * A collection of subscriptions that can be disposed together.
99
+ */
100
+ export class EventSubscriptionGroup {
101
+ id;
102
+ description;
103
+ subscriptions;
104
+ currentState;
105
+ constructor(subscriptions = [], options = {}) {
106
+ this.id = options.id ?? createEventSubscriptionId();
107
+ this.description = options.description;
108
+ this.subscriptions = new Set(subscriptions);
109
+ this.currentState = EventSubscriptionState.ACTIVE;
110
+ }
111
+ /**
112
+ * Returns the current state.
113
+ */
114
+ get state() {
115
+ return this.currentState;
116
+ }
117
+ /**
118
+ * Returns whether the group is active.
119
+ */
120
+ get active() {
121
+ return this.currentState === EventSubscriptionState.ACTIVE;
122
+ }
123
+ /**
124
+ * Number of subscriptions in the group.
125
+ */
126
+ get size() {
127
+ return this.subscriptions.size;
128
+ }
129
+ /**
130
+ * Adds a subscription to the group.
131
+ */
132
+ add(subscription) {
133
+ if (!this.active) {
134
+ subscription.unsubscribe();
135
+ return this;
136
+ }
137
+ this.subscriptions.add(subscription);
138
+ return this;
139
+ }
140
+ /**
141
+ * Removes a subscription from the group without
142
+ * unsubscribing it.
143
+ */
144
+ remove(subscription) {
145
+ return this.subscriptions.delete(subscription);
146
+ }
147
+ /**
148
+ * Unsubscribes every subscription in the group.
149
+ */
150
+ unsubscribe() {
151
+ if (!this.active) {
152
+ return;
153
+ }
154
+ this.currentState = EventSubscriptionState.CANCELLED;
155
+ const subscriptions = [...this.subscriptions];
156
+ this.subscriptions.clear();
157
+ for (const subscription of subscriptions) {
158
+ subscription.unsubscribe();
159
+ }
160
+ }
161
+ /**
162
+ * Returns all subscriptions in the group.
163
+ */
164
+ getAll() {
165
+ return [...this.subscriptions];
166
+ }
167
+ }
168
+ /**
169
+ * Creates an empty subscription group.
170
+ */
171
+ export function createEventSubscriptionGroup(options = {}) {
172
+ return new EventSubscriptionGroup([], options);
173
+ }
174
+ //# sourceMappingURL=eventSubscription.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventSubscription.core.js","sourceRoot":"","sources":["../../src/eventSubscription/eventSubscription.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/events/eventSubscription
3
+ *
4
+ * Event subscription management.
5
+ */
6
+ export * from "./eventSubscription.core.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eventSubscription/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/events/eventSubscription
3
+ *
4
+ * Event subscription management.
5
+ */
6
+ export * from "./eventSubscription.core.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eventSubscription/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,6BAA6B,CAAC"}