@zdavison/matador 4.0.3 → 4.2.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 (71) hide show
  1. package/dist/core/matador.d.ts.map +1 -1
  2. package/dist/core/matador.js +4 -1
  3. package/dist/index.cjs +156 -16
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/pipeline/pipeline.d.ts +30 -2
  7. package/dist/pipeline/pipeline.d.ts.map +1 -1
  8. package/dist/pipeline/pipeline.js +65 -9
  9. package/dist/retry/index.d.ts +1 -1
  10. package/dist/retry/index.d.ts.map +1 -1
  11. package/dist/retry/policy.d.ts +27 -0
  12. package/dist/retry/policy.d.ts.map +1 -1
  13. package/dist/retry/standard-policy.d.ts +33 -2
  14. package/dist/retry/standard-policy.d.ts.map +1 -1
  15. package/dist/retry/standard-policy.js +73 -9
  16. package/dist/topology/types.d.ts +14 -0
  17. package/dist/topology/types.d.ts.map +1 -1
  18. package/dist/transport/rabbitmq/rabbitmq-transport.d.ts.map +1 -1
  19. package/dist/transport/rabbitmq/rabbitmq-transport.js +3 -0
  20. package/package.json +1 -1
  21. package/dist/checkpoint/context.test.d.ts +0 -2
  22. package/dist/checkpoint/context.test.d.ts.map +0 -1
  23. package/dist/checkpoint/context.test.js +0 -428
  24. package/dist/checkpoint/stores/stores.test.d.ts +0 -2
  25. package/dist/checkpoint/stores/stores.test.d.ts.map +0 -1
  26. package/dist/checkpoint/stores/stores.test.js +0 -146
  27. package/dist/codec/rabbitmq-codec.test.d.ts +0 -2
  28. package/dist/codec/rabbitmq-codec.test.d.ts.map +0 -1
  29. package/dist/codec/rabbitmq-codec.test.js +0 -428
  30. package/dist/core/fanout.test.d.ts +0 -2
  31. package/dist/core/fanout.test.d.ts.map +0 -1
  32. package/dist/core/fanout.test.js +0 -1970
  33. package/dist/core/matador.test.d.ts +0 -2
  34. package/dist/core/matador.test.d.ts.map +0 -1
  35. package/dist/core/matador.test.js +0 -813
  36. package/dist/core/shutdown.test.d.ts +0 -2
  37. package/dist/core/shutdown.test.d.ts.map +0 -1
  38. package/dist/core/shutdown.test.js +0 -599
  39. package/dist/errors/retry-errors.test.d.ts +0 -2
  40. package/dist/errors/retry-errors.test.d.ts.map +0 -1
  41. package/dist/errors/retry-errors.test.js +0 -136
  42. package/dist/pipeline/pipeline.test.d.ts +0 -2
  43. package/dist/pipeline/pipeline.test.d.ts.map +0 -1
  44. package/dist/pipeline/pipeline.test.js +0 -1124
  45. package/dist/retry/standard-policy.test.d.ts +0 -2
  46. package/dist/retry/standard-policy.test.d.ts.map +0 -1
  47. package/dist/retry/standard-policy.test.js +0 -196
  48. package/dist/schema/registry.test.d.ts +0 -2
  49. package/dist/schema/registry.test.d.ts.map +0 -1
  50. package/dist/schema/registry.test.js +0 -278
  51. package/dist/schema/types.test.d.ts +0 -2
  52. package/dist/schema/types.test.d.ts.map +0 -1
  53. package/dist/schema/types.test.js +0 -246
  54. package/dist/topology/builder.test.d.ts +0 -2
  55. package/dist/topology/builder.test.d.ts.map +0 -1
  56. package/dist/topology/builder.test.js +0 -547
  57. package/dist/transport/local/local-transport.test.d.ts +0 -2
  58. package/dist/transport/local/local-transport.test.d.ts.map +0 -1
  59. package/dist/transport/local/local-transport.test.js +0 -232
  60. package/dist/transport/multi/multi-transport.test.d.ts +0 -2
  61. package/dist/transport/multi/multi-transport.test.d.ts.map +0 -1
  62. package/dist/transport/multi/multi-transport.test.js +0 -322
  63. package/dist/transport/rabbitmq/rabbitmq-transport-reconnection.test.d.ts +0 -2
  64. package/dist/transport/rabbitmq/rabbitmq-transport-reconnection.test.d.ts.map +0 -1
  65. package/dist/transport/rabbitmq/rabbitmq-transport-reconnection.test.js +0 -149
  66. package/dist/transport/rabbitmq/rabbitmq-transport.test.d.ts +0 -2
  67. package/dist/transport/rabbitmq/rabbitmq-transport.test.d.ts.map +0 -1
  68. package/dist/transport/rabbitmq/rabbitmq-transport.test.js +0 -230
  69. package/dist/types/event.test.d.ts +0 -2
  70. package/dist/types/event.test.d.ts.map +0 -1
  71. package/dist/types/event.test.js +0 -130
@@ -1,246 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { MatadorEvent, createSubscriber, createSubscriberStub, } from '../types/index.js';
3
- import { bind, installPlugins, isSchemaEntryTuple } from './types.js';
4
- class UserCreatedEvent extends MatadorEvent {
5
- data;
6
- static key = 'user.created';
7
- static description = 'User created event';
8
- constructor(data) {
9
- super();
10
- this.data = data;
11
- }
12
- }
13
- class OrderPlacedEvent extends MatadorEvent {
14
- data;
15
- static key = 'order.placed';
16
- static description = 'Order placed event';
17
- constructor(data) {
18
- super();
19
- this.data = data;
20
- }
21
- }
22
- class ChatMessageSentEvent extends MatadorEvent {
23
- data;
24
- static key = 'chat.message.sent';
25
- static description = 'Chat message sent event';
26
- constructor(data) {
27
- super();
28
- this.data = data;
29
- }
30
- }
31
- describe('bind', () => {
32
- it('should create a schema entry tuple', () => {
33
- const subscriber = createSubscriber({
34
- name: 'test-sub',
35
- description: 'Test subscriber',
36
- callback: async () => { },
37
- });
38
- const entry = bind(UserCreatedEvent, [subscriber]);
39
- expect(isSchemaEntryTuple(entry)).toBe(true);
40
- expect(entry[0]).toBe(UserCreatedEvent);
41
- expect(entry[1]).toHaveLength(1);
42
- expect(entry[1][0]).toBe(subscriber);
43
- });
44
- });
45
- describe('isSchemaEntryTuple', () => {
46
- it('should return true for tuple format', () => {
47
- const entry = [UserCreatedEvent, []];
48
- expect(isSchemaEntryTuple(entry)).toBe(true);
49
- });
50
- it('should return false for object format', () => {
51
- const entry = { eventClass: UserCreatedEvent, subscribers: [] };
52
- expect(isSchemaEntryTuple(entry)).toBe(false);
53
- });
54
- });
55
- describe('installPlugins', () => {
56
- it('should add plugin subscriber to all events', () => {
57
- const sub1 = createSubscriber({
58
- name: 'user-handler',
59
- description: 'Handles user events',
60
- callback: async () => { },
61
- });
62
- const sub2 = createSubscriber({
63
- name: 'order-handler',
64
- description: 'Handles order events',
65
- callback: async () => { },
66
- });
67
- const globalSub = createSubscriber({
68
- name: 'analytics',
69
- description: 'Analytics subscriber',
70
- callback: async () => { },
71
- });
72
- const baseSchema = {
73
- [UserCreatedEvent.key]: [UserCreatedEvent, [sub1]],
74
- [OrderPlacedEvent.key]: [OrderPlacedEvent, [sub2]],
75
- };
76
- const schema = installPlugins(baseSchema, [{ subscriber: globalSub }]);
77
- // Check user.created has both subscribers
78
- const userEntry = schema[UserCreatedEvent.key];
79
- if (!userEntry)
80
- throw new Error('expected user.created entry');
81
- expect(isSchemaEntryTuple(userEntry)).toBe(true);
82
- const [, userSubs] = userEntry;
83
- expect(userSubs).toHaveLength(2);
84
- expect(userSubs[0]).toBe(sub1);
85
- expect(userSubs[1]).toBe(globalSub);
86
- // Check order.placed has both subscribers
87
- const orderEntry = schema[OrderPlacedEvent.key];
88
- const [, orderSubs] = orderEntry;
89
- expect(orderSubs).toHaveLength(2);
90
- expect(orderSubs[0]).toBe(sub2);
91
- expect(orderSubs[1]).toBe(globalSub);
92
- });
93
- it('should respect exclusions', () => {
94
- const sub1 = createSubscriber({
95
- name: 'user-handler',
96
- description: 'Handles user events',
97
- callback: async () => { },
98
- });
99
- const sub2 = createSubscriber({
100
- name: 'order-handler',
101
- description: 'Handles order events',
102
- callback: async () => { },
103
- });
104
- const sub3 = createSubscriber({
105
- name: 'chat-handler',
106
- description: 'Handles chat events',
107
- callback: async () => { },
108
- });
109
- const globalSub = createSubscriber({
110
- name: 'analytics',
111
- description: 'Analytics subscriber',
112
- callback: async () => { },
113
- });
114
- const baseSchema = {
115
- [UserCreatedEvent.key]: [UserCreatedEvent, [sub1]],
116
- [OrderPlacedEvent.key]: [OrderPlacedEvent, [sub2]],
117
- [ChatMessageSentEvent.key]: [ChatMessageSentEvent, [sub3]],
118
- };
119
- const schema = installPlugins(baseSchema, [
120
- {
121
- subscriber: globalSub,
122
- exclusions: [ChatMessageSentEvent.key],
123
- },
124
- ]);
125
- // user.created should have analytics
126
- const userEntry = schema[UserCreatedEvent.key];
127
- const [, userSubs] = userEntry;
128
- expect(userSubs).toHaveLength(2);
129
- // order.placed should have analytics
130
- const orderEntry = schema[OrderPlacedEvent.key];
131
- const [, orderSubs] = orderEntry;
132
- expect(orderSubs).toHaveLength(2);
133
- // chat.message.sent should NOT have analytics (excluded)
134
- const chatEntry = schema[ChatMessageSentEvent.key];
135
- const [, chatSubs] = chatEntry;
136
- expect(chatSubs).toHaveLength(1);
137
- expect(chatSubs[0]).toBe(sub3);
138
- });
139
- it('should handle multiple plugins', () => {
140
- const sub1 = createSubscriber({
141
- name: 'user-handler',
142
- description: 'Handles user events',
143
- callback: async () => { },
144
- });
145
- const analyticsSub = createSubscriber({
146
- name: 'analytics',
147
- description: 'Analytics subscriber',
148
- callback: async () => { },
149
- });
150
- const loggingSub = createSubscriber({
151
- name: 'logging',
152
- description: 'Logging subscriber',
153
- callback: async () => { },
154
- });
155
- const baseSchema = {
156
- [UserCreatedEvent.key]: [UserCreatedEvent, [sub1]],
157
- };
158
- const schema = installPlugins(baseSchema, [
159
- { subscriber: analyticsSub },
160
- { subscriber: loggingSub },
161
- ]);
162
- const entry = schema[UserCreatedEvent.key];
163
- const [, subs] = entry;
164
- expect(subs).toHaveLength(3);
165
- expect(subs[0]).toBe(sub1);
166
- expect(subs[1]).toBe(analyticsSub);
167
- expect(subs[2]).toBe(loggingSub);
168
- });
169
- it('should handle object format schema entries', () => {
170
- const sub1 = createSubscriber({
171
- name: 'user-handler',
172
- description: 'Handles user events',
173
- callback: async () => { },
174
- });
175
- const globalSub = createSubscriber({
176
- name: 'analytics',
177
- description: 'Analytics subscriber',
178
- callback: async () => { },
179
- });
180
- const baseSchema = {
181
- [UserCreatedEvent.key]: {
182
- eventClass: UserCreatedEvent,
183
- subscribers: [sub1],
184
- },
185
- };
186
- const schema = installPlugins(baseSchema, [{ subscriber: globalSub }]);
187
- const entry = schema[UserCreatedEvent.key];
188
- if (!entry)
189
- throw new Error('expected user.created entry');
190
- expect(isSchemaEntryTuple(entry)).toBe(true);
191
- const [eventClass, subs] = entry;
192
- expect(eventClass).toBe(UserCreatedEvent);
193
- expect(subs).toHaveLength(2);
194
- });
195
- it('should work with subscriber stubs', () => {
196
- const sub1 = createSubscriber({
197
- name: 'user-handler',
198
- description: 'Handles user events',
199
- callback: async () => { },
200
- });
201
- const stubSub = createSubscriberStub({
202
- name: 'remote-analytics',
203
- targetQueue: 'analytics-worker',
204
- });
205
- const baseSchema = {
206
- [UserCreatedEvent.key]: [UserCreatedEvent, [sub1]],
207
- };
208
- const schema = installPlugins(baseSchema, [{ subscriber: stubSub }]);
209
- const entry = schema[UserCreatedEvent.key];
210
- const [, subs] = entry;
211
- expect(subs).toHaveLength(2);
212
- expect(subs[1]).toBe(stubSub);
213
- });
214
- it('should return empty schema for empty input', () => {
215
- const schema = installPlugins({}, [
216
- {
217
- subscriber: createSubscriber({
218
- name: 'analytics',
219
- description: 'Analytics subscriber',
220
- callback: async () => { },
221
- }),
222
- },
223
- ]);
224
- expect(Object.keys(schema)).toHaveLength(0);
225
- });
226
- it('should not modify original schema', () => {
227
- const sub1 = createSubscriber({
228
- name: 'user-handler',
229
- description: 'Handles user events',
230
- callback: async () => { },
231
- });
232
- const globalSub = createSubscriber({
233
- name: 'analytics',
234
- description: 'Analytics subscriber',
235
- callback: async () => { },
236
- });
237
- const baseSchema = {
238
- [UserCreatedEvent.key]: [UserCreatedEvent, [sub1]],
239
- };
240
- installPlugins(baseSchema, [{ subscriber: globalSub }]);
241
- // Original schema should be unchanged
242
- const entry = baseSchema[UserCreatedEvent.key];
243
- const [, subs] = entry;
244
- expect(subs).toHaveLength(1);
245
- });
246
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=builder.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.test.d.ts","sourceRoot":"","sources":["../../src/topology/builder.test.ts"],"names":[],"mappings":""}