@zdavison/matador 2.0.7 → 2.0.9

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 (200) hide show
  1. package/package.json +3 -2
  2. package/src/hooks/safe-hooks.ts +0 -16
  3. package/src/hooks/types.ts +0 -7
  4. package/src/index.ts +1 -0
  5. package/src/types/event.ts +8 -14
  6. package/src/types/index.ts +3 -2
  7. package/dist/checkpoint/context.d.ts +0 -59
  8. package/dist/checkpoint/context.d.ts.map +0 -1
  9. package/dist/checkpoint/context.js +0 -140
  10. package/dist/checkpoint/context.test.d.ts +0 -2
  11. package/dist/checkpoint/context.test.d.ts.map +0 -1
  12. package/dist/checkpoint/context.test.js +0 -424
  13. package/dist/checkpoint/index.d.ts +0 -7
  14. package/dist/checkpoint/index.d.ts.map +0 -1
  15. package/dist/checkpoint/index.js +0 -6
  16. package/dist/checkpoint/stores/memory.d.ts +0 -29
  17. package/dist/checkpoint/stores/memory.d.ts.map +0 -1
  18. package/dist/checkpoint/stores/memory.js +0 -39
  19. package/dist/checkpoint/stores/noop.d.ts +0 -14
  20. package/dist/checkpoint/stores/noop.d.ts.map +0 -1
  21. package/dist/checkpoint/stores/noop.js +0 -18
  22. package/dist/checkpoint/stores/stores.test.d.ts +0 -2
  23. package/dist/checkpoint/stores/stores.test.d.ts.map +0 -1
  24. package/dist/checkpoint/stores/stores.test.js +0 -146
  25. package/dist/checkpoint/types.d.ts +0 -119
  26. package/dist/checkpoint/types.d.ts.map +0 -1
  27. package/dist/checkpoint/types.js +0 -1
  28. package/dist/codec/codec.d.ts +0 -29
  29. package/dist/codec/codec.d.ts.map +0 -1
  30. package/dist/codec/codec.js +0 -15
  31. package/dist/codec/header-aware-codec.d.ts +0 -36
  32. package/dist/codec/header-aware-codec.d.ts.map +0 -1
  33. package/dist/codec/header-aware-codec.js +0 -1
  34. package/dist/codec/index.d.ts +0 -6
  35. package/dist/codec/index.d.ts.map +0 -1
  36. package/dist/codec/index.js +0 -3
  37. package/dist/codec/json-codec.d.ts +0 -13
  38. package/dist/codec/json-codec.d.ts.map +0 -1
  39. package/dist/codec/json-codec.js +0 -64
  40. package/dist/codec/rabbitmq-codec.d.ts +0 -28
  41. package/dist/codec/rabbitmq-codec.d.ts.map +0 -1
  42. package/dist/codec/rabbitmq-codec.js +0 -242
  43. package/dist/codec/rabbitmq-codec.test.d.ts +0 -2
  44. package/dist/codec/rabbitmq-codec.test.d.ts.map +0 -1
  45. package/dist/codec/rabbitmq-codec.test.js +0 -433
  46. package/dist/core/fanout.d.ts +0 -59
  47. package/dist/core/fanout.d.ts.map +0 -1
  48. package/dist/core/fanout.js +0 -121
  49. package/dist/core/fanout.test.d.ts +0 -2
  50. package/dist/core/fanout.test.d.ts.map +0 -1
  51. package/dist/core/fanout.test.js +0 -1054
  52. package/dist/core/index.d.ts +0 -7
  53. package/dist/core/index.d.ts.map +0 -1
  54. package/dist/core/index.js +0 -3
  55. package/dist/core/matador.d.ts +0 -133
  56. package/dist/core/matador.d.ts.map +0 -1
  57. package/dist/core/matador.js +0 -228
  58. package/dist/core/matador.test.d.ts +0 -2
  59. package/dist/core/matador.test.d.ts.map +0 -1
  60. package/dist/core/matador.test.js +0 -446
  61. package/dist/core/shutdown.d.ts +0 -78
  62. package/dist/core/shutdown.d.ts.map +0 -1
  63. package/dist/core/shutdown.js +0 -111
  64. package/dist/core/shutdown.test.d.ts +0 -2
  65. package/dist/core/shutdown.test.d.ts.map +0 -1
  66. package/dist/core/shutdown.test.js +0 -524
  67. package/dist/errors/checkpoint-errors.d.ts +0 -30
  68. package/dist/errors/checkpoint-errors.d.ts.map +0 -1
  69. package/dist/errors/checkpoint-errors.js +0 -49
  70. package/dist/errors/has-description.d.ts +0 -18
  71. package/dist/errors/has-description.d.ts.map +0 -1
  72. package/dist/errors/has-description.js +0 -9
  73. package/dist/errors/index.d.ts +0 -6
  74. package/dist/errors/index.d.ts.map +0 -1
  75. package/dist/errors/index.js +0 -22
  76. package/dist/errors/matador-errors.d.ts +0 -183
  77. package/dist/errors/matador-errors.d.ts.map +0 -1
  78. package/dist/errors/matador-errors.js +0 -376
  79. package/dist/errors/retry-errors.d.ts +0 -102
  80. package/dist/errors/retry-errors.d.ts.map +0 -1
  81. package/dist/errors/retry-errors.js +0 -155
  82. package/dist/errors/retry-errors.test.d.ts +0 -2
  83. package/dist/errors/retry-errors.test.d.ts.map +0 -1
  84. package/dist/errors/retry-errors.test.js +0 -136
  85. package/dist/hooks/index.d.ts +0 -4
  86. package/dist/hooks/index.d.ts.map +0 -1
  87. package/dist/hooks/index.js +0 -2
  88. package/dist/hooks/safe-hooks.d.ts +0 -33
  89. package/dist/hooks/safe-hooks.d.ts.map +0 -1
  90. package/dist/hooks/safe-hooks.js +0 -132
  91. package/dist/hooks/types.d.ts +0 -176
  92. package/dist/hooks/types.d.ts.map +0 -1
  93. package/dist/hooks/types.js +0 -9
  94. package/dist/index.cjs +0 -3242
  95. package/dist/index.cjs.map +0 -1
  96. package/dist/index.d.cts +0 -23
  97. package/dist/index.d.ts +0 -23
  98. package/dist/index.d.ts.map +0 -1
  99. package/dist/index.js +0 -31
  100. package/dist/index.js.map +0 -1
  101. package/dist/pipeline/index.d.ts +0 -3
  102. package/dist/pipeline/index.d.ts.map +0 -1
  103. package/dist/pipeline/index.js +0 -1
  104. package/dist/pipeline/pipeline.d.ts +0 -63
  105. package/dist/pipeline/pipeline.d.ts.map +0 -1
  106. package/dist/pipeline/pipeline.js +0 -273
  107. package/dist/pipeline/pipeline.test.d.ts +0 -2
  108. package/dist/pipeline/pipeline.test.d.ts.map +0 -1
  109. package/dist/pipeline/pipeline.test.js +0 -1112
  110. package/dist/retry/index.d.ts +0 -4
  111. package/dist/retry/index.d.ts.map +0 -1
  112. package/dist/retry/index.js +0 -1
  113. package/dist/retry/policy.d.ts +0 -43
  114. package/dist/retry/policy.d.ts.map +0 -1
  115. package/dist/retry/policy.js +0 -1
  116. package/dist/retry/standard-policy.d.ts +0 -44
  117. package/dist/retry/standard-policy.d.ts.map +0 -1
  118. package/dist/retry/standard-policy.js +0 -102
  119. package/dist/retry/standard-policy.test.d.ts +0 -2
  120. package/dist/retry/standard-policy.test.d.ts.map +0 -1
  121. package/dist/retry/standard-policy.test.js +0 -196
  122. package/dist/schema/index.d.ts +0 -4
  123. package/dist/schema/index.d.ts.map +0 -1
  124. package/dist/schema/index.js +0 -2
  125. package/dist/schema/registry.d.ts +0 -63
  126. package/dist/schema/registry.d.ts.map +0 -1
  127. package/dist/schema/registry.js +0 -174
  128. package/dist/schema/registry.test.d.ts +0 -2
  129. package/dist/schema/registry.test.d.ts.map +0 -1
  130. package/dist/schema/registry.test.js +0 -278
  131. package/dist/schema/types.d.ts +0 -158
  132. package/dist/schema/types.d.ts.map +0 -1
  133. package/dist/schema/types.js +0 -74
  134. package/dist/schema/types.test.d.ts +0 -2
  135. package/dist/schema/types.test.d.ts.map +0 -1
  136. package/dist/schema/types.test.js +0 -242
  137. package/dist/topology/builder.d.ts +0 -80
  138. package/dist/topology/builder.d.ts.map +0 -1
  139. package/dist/topology/builder.js +0 -165
  140. package/dist/topology/builder.test.d.ts +0 -2
  141. package/dist/topology/builder.test.d.ts.map +0 -1
  142. package/dist/topology/builder.test.js +0 -360
  143. package/dist/topology/index.d.ts +0 -5
  144. package/dist/topology/index.d.ts.map +0 -1
  145. package/dist/topology/index.js +0 -2
  146. package/dist/topology/types.d.ts +0 -128
  147. package/dist/topology/types.d.ts.map +0 -1
  148. package/dist/topology/types.js +0 -28
  149. package/dist/transport/capabilities.d.ts +0 -66
  150. package/dist/transport/capabilities.d.ts.map +0 -1
  151. package/dist/transport/capabilities.js +0 -18
  152. package/dist/transport/connection-manager.d.ts +0 -95
  153. package/dist/transport/connection-manager.d.ts.map +0 -1
  154. package/dist/transport/connection-manager.js +0 -144
  155. package/dist/transport/index.d.ts +0 -11
  156. package/dist/transport/index.d.ts.map +0 -1
  157. package/dist/transport/index.js +0 -5
  158. package/dist/transport/local/local-transport.d.ts +0 -62
  159. package/dist/transport/local/local-transport.d.ts.map +0 -1
  160. package/dist/transport/local/local-transport.js +0 -241
  161. package/dist/transport/local/local-transport.test.d.ts +0 -2
  162. package/dist/transport/local/local-transport.test.d.ts.map +0 -1
  163. package/dist/transport/local/local-transport.test.js +0 -192
  164. package/dist/transport/multi/multi-transport.d.ts +0 -94
  165. package/dist/transport/multi/multi-transport.d.ts.map +0 -1
  166. package/dist/transport/multi/multi-transport.js +0 -184
  167. package/dist/transport/multi/multi-transport.test.d.ts +0 -2
  168. package/dist/transport/multi/multi-transport.test.d.ts.map +0 -1
  169. package/dist/transport/multi/multi-transport.test.js +0 -236
  170. package/dist/transport/rabbitmq/rabbitmq-transport.d.ts +0 -83
  171. package/dist/transport/rabbitmq/rabbitmq-transport.d.ts.map +0 -1
  172. package/dist/transport/rabbitmq/rabbitmq-transport.js +0 -541
  173. package/dist/transport/rabbitmq/rabbitmq-transport.test.d.ts +0 -2
  174. package/dist/transport/rabbitmq/rabbitmq-transport.test.d.ts.map +0 -1
  175. package/dist/transport/rabbitmq/rabbitmq-transport.test.js +0 -100
  176. package/dist/transport/transport.d.ts +0 -152
  177. package/dist/transport/transport.d.ts.map +0 -1
  178. package/dist/transport/transport.js +0 -1
  179. package/dist/types/common.d.ts +0 -41
  180. package/dist/types/common.d.ts.map +0 -1
  181. package/dist/types/common.js +0 -12
  182. package/dist/types/dispatcher.d.ts +0 -14
  183. package/dist/types/dispatcher.d.ts.map +0 -1
  184. package/dist/types/dispatcher.js +0 -1
  185. package/dist/types/envelope.d.ts +0 -131
  186. package/dist/types/envelope.d.ts.map +0 -1
  187. package/dist/types/envelope.js +0 -99
  188. package/dist/types/event.d.ts +0 -96
  189. package/dist/types/event.d.ts.map +0 -1
  190. package/dist/types/event.js +0 -26
  191. package/dist/types/event.test.d.ts +0 -2
  192. package/dist/types/event.test.d.ts.map +0 -1
  193. package/dist/types/event.test.js +0 -130
  194. package/dist/types/index.d.ts +0 -10
  195. package/dist/types/index.d.ts.map +0 -1
  196. package/dist/types/index.js +0 -4
  197. package/dist/types/subscriber.d.ts +0 -227
  198. package/dist/types/subscriber.d.ts.map +0 -1
  199. package/dist/types/subscriber.js +0 -97
  200. package/tsconfig.tsbuildinfo +0 -1
@@ -1,7 +0,0 @@
1
- export type { SendError, SendResult, FanoutConfig } from './fanout.js';
2
- export { FanoutEngine } from './fanout.js';
3
- export type { HandlersState, ShutdownConfig, ShutdownState, } from './shutdown.js';
4
- export { defaultShutdownConfig, ShutdownManager } from './shutdown.js';
5
- export type { MatadorConfig } from './matador.js';
6
- export { Matador } from './matador.js';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEvE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -1,3 +0,0 @@
1
- export { FanoutEngine } from './fanout.js';
2
- export { defaultShutdownConfig, ShutdownManager } from './shutdown.js';
3
- export { Matador } from './matador.js';
@@ -1,133 +0,0 @@
1
- import type { CheckpointStore } from '../checkpoint/index.js';
2
- import type { Codec } from '../codec/index.js';
3
- import type { MatadorHooks } from '../hooks/index.js';
4
- import type { RetryPolicy } from '../retry/index.js';
5
- import type { MatadorSchema } from '../schema/index.js';
6
- import type { Topology } from '../topology/index.js';
7
- import type { Transport } from '../transport/index.js';
8
- import type { AnySubscriber, Dispatcher, Event, EventClass, EventOptions } from '../types/index.js';
9
- import type { SendResult } from './fanout.js';
10
- import type { HandlersState, ShutdownConfig } from './shutdown.js';
11
- /**
12
- * Configuration for Matador.
13
- */
14
- export interface MatadorConfig {
15
- /** Transport for message delivery */
16
- readonly transport: Transport;
17
- /** Topology configuration */
18
- readonly topology: Topology;
19
- /** Event schema mapping event keys to event classes and subscribers */
20
- readonly schema: MatadorSchema;
21
- /** Queues to consume from (empty = no consumption) */
22
- readonly consumeFrom?: readonly string[] | undefined;
23
- /** Custom codec (defaults to JSON) */
24
- readonly codec?: Codec | undefined;
25
- /** Custom retry policy */
26
- readonly retryPolicy?: RetryPolicy | undefined;
27
- /** Shutdown configuration */
28
- readonly shutdownConfig?: Partial<ShutdownConfig> | undefined;
29
- /**
30
- * Checkpoint store for resumable subscribers.
31
- * Required for persisting io() results across retries.
32
- * If not provided, resumable subscribers will work but checkpoints
33
- * won't persist across retries.
34
- */
35
- readonly checkpointStore?: CheckpointStore | undefined;
36
- }
37
- /**
38
- * Matador - Transport-agnostic event processing library.
39
- *
40
- * Main orchestrator that wires together:
41
- * - Transport: Message delivery
42
- * - Schema: Event-subscriber registry
43
- * - Pipeline: Message processing
44
- * - Fanout: Event sending
45
- * - Shutdown: Graceful termination
46
- */
47
- export declare class Matador implements Dispatcher {
48
- private readonly transport;
49
- private readonly topology;
50
- private readonly schema;
51
- private readonly codec;
52
- private readonly retryPolicy;
53
- private readonly hooks;
54
- private readonly pipeline;
55
- private readonly fanout;
56
- private readonly shutdownManager;
57
- private readonly consumeFrom;
58
- private readonly subscriptions;
59
- private started;
60
- /**
61
- * Creates a new Matador instance.
62
- *
63
- * @param config - Static configuration (transport, topology, schema, etc.)
64
- * @param hooks - Lifecycle hooks for logging, monitoring, and dynamic configuration.
65
- * Passed separately to support NestJS dependency injection.
66
- */
67
- constructor(config: MatadorConfig, hooks?: MatadorHooks);
68
- /**
69
- * Registers an event class with its subscribers.
70
- */
71
- register<T>(eventClass: EventClass<T>, subscribers: readonly AnySubscriber[]): this;
72
- /**
73
- * Registers events from a schema object.
74
- * Supports both object format and tuple format entries.
75
- *
76
- * @example
77
- * ```typescript
78
- * // Tuple format
79
- * matador.registerSchema({
80
- * [UserCreatedEvent.key]: [UserCreatedEvent, [emailSubscriber]],
81
- * [OrderPlacedEvent.key]: [OrderPlacedEvent, [invoiceSubscriber]],
82
- * });
83
- *
84
- * // Object format
85
- * matador.registerSchema({
86
- * [UserCreatedEvent.key]: { eventClass: UserCreatedEvent, subscribers: [emailSubscriber] },
87
- * });
88
- * ```
89
- */
90
- registerSchema(schema: MatadorSchema): this;
91
- /**
92
- * Starts Matador - connects transport and begins consuming.
93
- * This method is idempotent - calling it multiple times is safe.
94
- */
95
- start(): Promise<void>;
96
- /**
97
- * Sends an event to all registered subscribers.
98
- *
99
- * @example
100
- * ```typescript
101
- * // Pass the event class and data directly
102
- * await matador.send(UserCreatedEvent, { userId: '123' });
103
- *
104
- * // Or pass an event instance
105
- * const event = new UserCreatedEvent({ userId: '123' });
106
- * await matador.send(event);
107
- * ```
108
- */
109
- send<T>(eventClass: EventClass<T>, data: T, options?: EventOptions): Promise<SendResult>;
110
- send<T>(event: Event<T>, options?: EventOptions): Promise<SendResult>;
111
- /**
112
- * Gets current handler state.
113
- */
114
- getHandlersState(): HandlersState;
115
- /**
116
- * Checks if Matador is idle (no processing or enqueuing).
117
- */
118
- isIdle(): boolean;
119
- /**
120
- * Waits for all handlers to become idle.
121
- */
122
- waitForIdle(timeoutMs?: number): Promise<boolean>;
123
- /**
124
- * Gracefully shuts down Matador.
125
- */
126
- shutdown(): Promise<void>;
127
- /**
128
- * Checks if transport is connected.
129
- */
130
- isConnected(): boolean;
131
- private stopReceiving;
132
- }
133
- //# sourceMappingURL=matador.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matador.d.ts","sourceRoot":"","sources":["../../src/core/matador.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,KAAK,EACL,UAAU,EACV,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAErD,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAEnC,0BAA0B;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAE/C,6BAA6B;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAE9D;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CACxD;AAED;;;;;;;;;GASG;AACH,qBAAa,OAAQ,YAAW,UAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;;OAMG;gBACS,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,YAAY;IA4CvD;;OAEG;IACH,QAAQ,CAAC,CAAC,EACR,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,WAAW,EAAE,SAAS,aAAa,EAAE,GACpC,IAAI;IAKP;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAc3C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+D5B;;;;;;;;;;;;OAYG;IACG,IAAI,CAAC,CAAC,EACV,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC;IAChB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAkC3E;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACG,WAAW,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAatD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;OAEG;IACH,WAAW,IAAI,OAAO;YAIR,aAAa;CAM5B"}
@@ -1,228 +0,0 @@
1
- import { JsonCodec } from '../codec/index.js';
2
- import { InvalidSchemaError, NotStartedError, ShutdownInProgressError, } from '../errors/index.js';
3
- import { SafeHooks } from '../hooks/index.js';
4
- import { ProcessingPipeline } from '../pipeline/index.js';
5
- import { StandardRetryPolicy } from '../retry/index.js';
6
- import { SchemaRegistry, isSchemaEntryTuple } from '../schema/index.js';
7
- import { getQualifiedQueueName } from '../topology/index.js';
8
- import { FanoutEngine } from './fanout.js';
9
- import { ShutdownManager } from './shutdown.js';
10
- /**
11
- * Matador - Transport-agnostic event processing library.
12
- *
13
- * Main orchestrator that wires together:
14
- * - Transport: Message delivery
15
- * - Schema: Event-subscriber registry
16
- * - Pipeline: Message processing
17
- * - Fanout: Event sending
18
- * - Shutdown: Graceful termination
19
- */
20
- export class Matador {
21
- transport;
22
- topology;
23
- schema;
24
- codec;
25
- retryPolicy;
26
- hooks;
27
- pipeline;
28
- fanout;
29
- shutdownManager;
30
- consumeFrom;
31
- subscriptions = [];
32
- started = false;
33
- /**
34
- * Creates a new Matador instance.
35
- *
36
- * @param config - Static configuration (transport, topology, schema, etc.)
37
- * @param hooks - Lifecycle hooks for logging, monitoring, and dynamic configuration.
38
- * Passed separately to support NestJS dependency injection.
39
- */
40
- constructor(config, hooks) {
41
- this.transport = config.transport;
42
- this.topology = config.topology;
43
- this.consumeFrom = config.consumeFrom ?? [];
44
- // Initialize components
45
- this.schema = new SchemaRegistry();
46
- this.codec = config.codec ?? new JsonCodec();
47
- this.retryPolicy = config.retryPolicy ?? new StandardRetryPolicy();
48
- this.hooks = new SafeHooks(hooks);
49
- // Register schema from config
50
- this.registerSchema(config.schema);
51
- // Create pipeline
52
- this.pipeline = new ProcessingPipeline({
53
- transport: this.transport,
54
- schema: this.schema,
55
- codec: this.codec,
56
- retryPolicy: this.retryPolicy,
57
- hooks: this.hooks,
58
- checkpointStore: config.checkpointStore,
59
- dispatcher: this,
60
- });
61
- // Create fanout engine
62
- const defaultQueue = this.topology.queues[0]?.name ?? 'default';
63
- this.fanout = new FanoutEngine({
64
- transport: this.transport,
65
- schema: this.schema,
66
- hooks: this.hooks,
67
- namespace: this.topology.namespace,
68
- defaultQueue,
69
- });
70
- // Create shutdown manager
71
- this.shutdownManager = new ShutdownManager(() => this.fanout.eventsBeingEnqueuedCount, () => this.stopReceiving(), () => this.transport.disconnect(), config.shutdownConfig);
72
- }
73
- /**
74
- * Registers an event class with its subscribers.
75
- */
76
- register(eventClass, subscribers) {
77
- this.schema.register(eventClass, subscribers);
78
- return this;
79
- }
80
- /**
81
- * Registers events from a schema object.
82
- * Supports both object format and tuple format entries.
83
- *
84
- * @example
85
- * ```typescript
86
- * // Tuple format
87
- * matador.registerSchema({
88
- * [UserCreatedEvent.key]: [UserCreatedEvent, [emailSubscriber]],
89
- * [OrderPlacedEvent.key]: [OrderPlacedEvent, [invoiceSubscriber]],
90
- * });
91
- *
92
- * // Object format
93
- * matador.registerSchema({
94
- * [UserCreatedEvent.key]: { eventClass: UserCreatedEvent, subscribers: [emailSubscriber] },
95
- * });
96
- * ```
97
- */
98
- registerSchema(schema) {
99
- for (const entry of Object.values(schema)) {
100
- if (isSchemaEntryTuple(entry)) {
101
- // Tuple format: [EventClass, Subscriber[]]
102
- const [eventClass, subscribers] = entry;
103
- this.schema.register(eventClass, subscribers);
104
- }
105
- else {
106
- // Object format: { eventClass, subscribers }
107
- this.schema.register(entry.eventClass, entry.subscribers);
108
- }
109
- }
110
- return this;
111
- }
112
- /**
113
- * Starts Matador - connects transport and begins consuming.
114
- * This method is idempotent - calling it multiple times is safe.
115
- */
116
- async start() {
117
- // Idempotent: if already started, just return
118
- if (this.started) {
119
- return;
120
- }
121
- // Validate schema
122
- const validation = this.schema.validate();
123
- if (!validation.valid) {
124
- const errors = validation.issues.filter((i) => i.severity === 'error');
125
- throw new InvalidSchemaError('Schema validation failed', errors.map((e) => e.message).join(', '));
126
- }
127
- // Connect transport
128
- this.hooks.logger.info(`[Matador] ⏳ Starting backend '${this.transport.name}'...`);
129
- await this.transport.connect();
130
- this.hooks.logger.info(`[Matador] 🟢 Backend '${this.transport.name}' started.`);
131
- // Apply topology
132
- await this.transport.applyTopology(this.topology);
133
- // Subscribe to queues
134
- if (this.consumeFrom.length > 0) {
135
- this.hooks.logger.info(`[Matador] 🟢 Worker subscribing to '${this.consumeFrom.join(',')}'.`);
136
- }
137
- for (const queueName of this.consumeFrom) {
138
- const qualifiedName = getQualifiedQueueName(this.topology.namespace, queueName);
139
- const queueDef = this.topology.queues.find((q) => q.name === queueName);
140
- const subscription = await this.transport.subscribe(qualifiedName, async (envelope, receipt) => {
141
- this.shutdownManager.incrementProcessing();
142
- try {
143
- const rawMessage = this.codec.encode(envelope);
144
- await this.pipeline.process(rawMessage, receipt);
145
- }
146
- finally {
147
- this.shutdownManager.decrementProcessing();
148
- }
149
- }, queueDef?.concurrency !== undefined
150
- ? { concurrency: queueDef.concurrency }
151
- : undefined);
152
- this.subscriptions.push(subscription);
153
- }
154
- this.started = true;
155
- }
156
- async send(eventOrClass, dataOrOptions, maybeOptions) {
157
- if (!this.started) {
158
- throw new NotStartedError('send');
159
- }
160
- if (!this.shutdownManager.isEnqueueAllowed) {
161
- throw new ShutdownInProgressError();
162
- }
163
- // Determine if first arg is an event instance or event class
164
- const isEventClass = typeof eventOrClass === 'function' && 'key' in eventOrClass;
165
- if (isEventClass) {
166
- // Called as: send(EventClass, data, options?)
167
- const eventClass = eventOrClass;
168
- const data = dataOrOptions;
169
- const options = maybeOptions;
170
- const event = new eventClass(data);
171
- return this.fanout.send(eventClass, event, options);
172
- }
173
- else {
174
- // Called as: send(event, options?)
175
- const event = eventOrClass;
176
- const options = dataOrOptions;
177
- const eventClass = event.constructor;
178
- return this.fanout.send(eventClass, event, options);
179
- }
180
- }
181
- /**
182
- * Gets current handler state.
183
- */
184
- getHandlersState() {
185
- return this.shutdownManager.getHandlersState();
186
- }
187
- /**
188
- * Checks if Matador is idle (no processing or enqueuing).
189
- */
190
- isIdle() {
191
- return this.shutdownManager.getHandlersState().isIdle;
192
- }
193
- /**
194
- * Waits for all handlers to become idle.
195
- */
196
- async waitForIdle(timeoutMs = 30000) {
197
- const deadline = Date.now() + timeoutMs;
198
- while (!this.isIdle()) {
199
- if (Date.now() > deadline) {
200
- return false;
201
- }
202
- await new Promise((resolve) => setTimeout(resolve, 100));
203
- }
204
- return true;
205
- }
206
- /**
207
- * Gracefully shuts down Matador.
208
- */
209
- async shutdown() {
210
- if (!this.started) {
211
- return;
212
- }
213
- await this.shutdownManager.shutdown();
214
- this.started = false;
215
- }
216
- /**
217
- * Checks if transport is connected.
218
- */
219
- isConnected() {
220
- return this.transport.isConnected();
221
- }
222
- async stopReceiving() {
223
- for (const subscription of this.subscriptions) {
224
- await subscription.unsubscribe();
225
- }
226
- this.subscriptions.length = 0;
227
- }
228
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=matador.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"matador.test.d.ts","sourceRoot":"","sources":["../../src/core/matador.test.ts"],"names":[],"mappings":""}