@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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=standard-policy.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard-policy.test.d.ts","sourceRoot":"","sources":["../../src/retry/standard-policy.test.ts"],"names":[],"mappings":""}
@@ -1,196 +0,0 @@
1
- import { describe, expect, it } from 'bun:test';
2
- import { DoRetry, DontRetry, EventAssertionError, } from '../errors/retry-errors.js';
3
- import { createEnvelope } from '../types/envelope.js';
4
- import { StandardRetryPolicy } from './standard-policy.js';
5
- describe('StandardRetryPolicy', () => {
6
- describe('shouldRetry', () => {
7
- it('should dead-letter on EventAssertionError', () => {
8
- const policy = new StandardRetryPolicy();
9
- const envelope = createEnvelope({
10
- eventKey: 'test.event',
11
- targetSubscriber: 'test-subscriber',
12
- data: { test: 'data' },
13
- importance: 'should-investigate',
14
- });
15
- const context = createContext(new EventAssertionError(envelope, 'Invalid event'));
16
- const decision = policy.shouldRetry(context);
17
- expect(decision.action).toBe('dead-letter');
18
- assertDeadLetter(decision);
19
- expect(decision.queue).toBe('undeliverable');
20
- expect(decision.reason).toContain('assertion error');
21
- });
22
- it('should dead-letter on DontRetry error', () => {
23
- const policy = new StandardRetryPolicy();
24
- const context = createContext(new DontRetry('Business rule violation'));
25
- const decision = policy.shouldRetry(context);
26
- expect(decision.action).toBe('dead-letter');
27
- assertDeadLetter(decision);
28
- expect(decision.queue).toBe('undeliverable');
29
- expect(decision.reason).toContain('Business rule violation');
30
- });
31
- it('should retry on DoRetry error if under max attempts', () => {
32
- const policy = new StandardRetryPolicy({ maxAttempts: 3 });
33
- const context = createContext(new DoRetry('Temporary failure'), {
34
- attemptNumber: 1,
35
- });
36
- const decision = policy.shouldRetry(context);
37
- expect(decision.action).toBe('retry');
38
- assertRetry(decision);
39
- expect(decision.delay).toBeGreaterThan(0);
40
- });
41
- it('should dead-letter on DoRetry error if max attempts exceeded', () => {
42
- const policy = new StandardRetryPolicy({ maxAttempts: 3 });
43
- const context = createContext(new DoRetry('Temporary failure'), {
44
- attemptNumber: 3,
45
- });
46
- const decision = policy.shouldRetry(context);
47
- expect(decision.action).toBe('dead-letter');
48
- assertDeadLetter(decision);
49
- expect(decision.reason).toContain('max attempts exceeded');
50
- });
51
- it('should dead-letter when max attempts exceeded', () => {
52
- const policy = new StandardRetryPolicy({ maxAttempts: 3 });
53
- const context = createContext(new Error('Generic error'), {
54
- attemptNumber: 3,
55
- });
56
- const decision = policy.shouldRetry(context);
57
- expect(decision.action).toBe('dead-letter');
58
- assertDeadLetter(decision);
59
- expect(decision.queue).toBe('undeliverable');
60
- expect(decision.reason).toContain('max attempts exceeded (3)');
61
- });
62
- it('should dead-letter non-idempotent subscriber on redelivery', () => {
63
- const policy = new StandardRetryPolicy();
64
- const context = createContext(new Error('Some error'), { attemptNumber: 1, redelivered: true }, { idempotent: 'no' });
65
- const decision = policy.shouldRetry(context);
66
- expect(decision.action).toBe('dead-letter');
67
- assertDeadLetter(decision);
68
- expect(decision.reason).toContain('Non-idempotent subscriber');
69
- });
70
- it('should retry idempotent subscriber on redelivery', () => {
71
- const policy = new StandardRetryPolicy();
72
- const context = createContext(new Error('Some error'), { attemptNumber: 1, redelivered: true }, { idempotent: 'yes' });
73
- const decision = policy.shouldRetry(context);
74
- expect(decision.action).toBe('retry');
75
- });
76
- it('should dead-letter unknown idempotency subscriber on redelivery (unknown == no)', () => {
77
- const policy = new StandardRetryPolicy();
78
- const context = createContext(new Error('Some error'), { attemptNumber: 1, redelivered: true }, { idempotent: 'unknown' });
79
- const decision = policy.shouldRetry(context);
80
- expect(decision.action).toBe('dead-letter');
81
- assertDeadLetter(decision);
82
- expect(decision.reason).toContain('Non-idempotent subscriber');
83
- });
84
- it('should retry resumable subscriber on redelivery', () => {
85
- const policy = new StandardRetryPolicy();
86
- const context = createContext(new Error('Some error'), { attemptNumber: 1, redelivered: true }, { idempotent: 'resumable' });
87
- const decision = policy.shouldRetry(context);
88
- expect(decision.action).toBe('retry');
89
- });
90
- it('should retry generic errors with backoff', () => {
91
- const policy = new StandardRetryPolicy({ maxAttempts: 5 });
92
- const context = createContext(new Error('Generic error'), {
93
- attemptNumber: 1,
94
- });
95
- const decision = policy.shouldRetry(context);
96
- expect(decision.action).toBe('retry');
97
- assertRetry(decision);
98
- expect(decision.delay).toBeDefined();
99
- });
100
- });
101
- describe('getDelay', () => {
102
- it('should calculate exponential backoff', () => {
103
- const policy = new StandardRetryPolicy({
104
- baseDelay: 1000,
105
- backoffMultiplier: 2,
106
- });
107
- const delay1 = policy.getDelay(createContext(new Error(), { attemptNumber: 1 }));
108
- const delay2 = policy.getDelay(createContext(new Error(), { attemptNumber: 2 }));
109
- const delay3 = policy.getDelay(createContext(new Error(), { attemptNumber: 3 }));
110
- expect(delay1).toBe(1000); // 1000 * 2^0
111
- expect(delay2).toBe(2000); // 1000 * 2^1
112
- expect(delay3).toBe(4000); // 1000 * 2^2
113
- });
114
- it('should cap delay at maxDelay', () => {
115
- const policy = new StandardRetryPolicy({
116
- baseDelay: 1000,
117
- backoffMultiplier: 10,
118
- maxDelay: 5000,
119
- });
120
- const delay = policy.getDelay(createContext(new Error(), { attemptNumber: 5 }));
121
- expect(delay).toBe(5000);
122
- });
123
- });
124
- describe('configuration', () => {
125
- it('should use default configuration', () => {
126
- const policy = new StandardRetryPolicy();
127
- const context = createContext(new Error(), { attemptNumber: 1 });
128
- const decision = policy.shouldRetry(context);
129
- // Default maxAttempts is 3, so should retry on attempt 1
130
- expect(decision.action).toBe('retry');
131
- });
132
- it('should accept custom configuration', () => {
133
- const policy = new StandardRetryPolicy({
134
- maxAttempts: 1,
135
- baseDelay: 500,
136
- maxDelay: 1000,
137
- backoffMultiplier: 1.5,
138
- });
139
- // With maxAttempts: 1, first attempt should dead-letter
140
- const context = createContext(new Error(), { attemptNumber: 1 });
141
- const decision = policy.shouldRetry(context);
142
- expect(decision.action).toBe('dead-letter');
143
- });
144
- it('should merge partial configuration with defaults', () => {
145
- const policy = new StandardRetryPolicy({ maxAttempts: 10 });
146
- // Use attemptNumber: 5 but deliveryCount: 3 to avoid poison detection
147
- const context = createContext(new Error(), {
148
- attemptNumber: 5,
149
- deliveryCount: 3,
150
- });
151
- // Should still retry because we increased maxAttempts
152
- const decision = policy.shouldRetry(context);
153
- expect(decision.action).toBe('retry');
154
- });
155
- });
156
- });
157
- function assertDeadLetter(decision) {
158
- if (decision.action !== 'dead-letter') {
159
- throw new Error(`Expected dead-letter action, got ${decision.action}`);
160
- }
161
- }
162
- function assertRetry(decision) {
163
- if (decision.action !== 'retry') {
164
- throw new Error(`Expected retry action, got ${decision.action}`);
165
- }
166
- }
167
- function createContext(error, receiptOverrides = {}, subscriberOverrides = {}) {
168
- const receipt = {
169
- handle: {},
170
- redelivered: false,
171
- attemptNumber: 1,
172
- deliveryCount: receiptOverrides.deliveryCount ?? receiptOverrides.attemptNumber ?? 1,
173
- sourceQueue: 'test-queue',
174
- sourceTransport: 'mock',
175
- ...receiptOverrides,
176
- };
177
- const subscriber = {
178
- name: 'test-subscriber',
179
- description: 'Test subscriber',
180
- idempotent: 'yes',
181
- importance: 'should-investigate',
182
- ...subscriberOverrides,
183
- };
184
- const envelope = createEnvelope({
185
- eventKey: 'test.event',
186
- targetSubscriber: 'test-subscriber',
187
- data: { test: 'data' },
188
- importance: 'should-investigate',
189
- });
190
- return {
191
- envelope,
192
- error,
193
- receipt,
194
- subscriber,
195
- };
196
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=registry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/schema/registry.test.ts"],"names":[],"mappings":""}
@@ -1,278 +0,0 @@
1
- import { beforeEach, describe, expect, it } from 'bun:test';
2
- import { MatadorEvent, createSubscriber } from '../types/index.js';
3
- import { SchemaError, SchemaRegistry } from './registry.js';
4
- class TestEvent extends MatadorEvent {
5
- data;
6
- static key = 'test.event';
7
- static description = 'A test event';
8
- constructor(data) {
9
- super();
10
- this.data = data;
11
- }
12
- }
13
- class AliasedEvent extends MatadorEvent {
14
- data;
15
- static key = 'user.created.v2';
16
- static description = 'User created event with aliases';
17
- static aliases = ['user.created', 'user.created.v1'];
18
- constructor(data) {
19
- super();
20
- this.data = data;
21
- }
22
- }
23
- describe('SchemaRegistry', () => {
24
- let registry;
25
- beforeEach(() => {
26
- registry = new SchemaRegistry();
27
- });
28
- describe('register', () => {
29
- it('should register an event with subscribers', () => {
30
- const subscriber = createSubscriber({
31
- name: 'test-subscriber',
32
- description: 'Test subscriber',
33
- callback: async () => { },
34
- });
35
- registry.register(TestEvent, [subscriber]);
36
- expect(registry.hasEvent('test.event')).toBe(true);
37
- expect(registry.getSubscribers('test.event')).toHaveLength(1);
38
- });
39
- it('should throw when registering duplicate event without override', () => {
40
- const subscriber = createSubscriber({
41
- name: 'test-subscriber',
42
- description: 'Test subscriber',
43
- callback: async () => { },
44
- });
45
- registry.register(TestEvent, [subscriber]);
46
- expect(() => registry.register(TestEvent, [subscriber])).toThrow(SchemaError);
47
- });
48
- it('should allow override when option is set', () => {
49
- const subscriber1 = createSubscriber({
50
- name: 'sub-1',
51
- description: 'Subscriber 1',
52
- callback: async () => { },
53
- });
54
- const subscriber2 = createSubscriber({
55
- name: 'sub-2',
56
- description: 'Subscriber 2',
57
- callback: async () => { },
58
- });
59
- registry.register(TestEvent, [subscriber1]);
60
- registry.register(TestEvent, [subscriber2], { override: true });
61
- const subscribers = registry.getSubscribers('test.event');
62
- expect(subscribers).toHaveLength(1);
63
- expect(subscribers[0]?.name).toBe('sub-2');
64
- });
65
- it('should register aliases', () => {
66
- const subscriber = createSubscriber({
67
- name: 'test-subscriber',
68
- description: 'Test subscriber',
69
- callback: async () => { },
70
- });
71
- registry.register(AliasedEvent, [subscriber]);
72
- expect(registry.hasEvent('user.created.v2')).toBe(true);
73
- expect(registry.hasEvent('user.created')).toBe(true);
74
- expect(registry.hasEvent('user.created.v1')).toBe(true);
75
- });
76
- it('should throw on duplicate aliases without override', () => {
77
- class EventWithSameAlias extends MatadorEvent {
78
- data;
79
- static key = 'another.event';
80
- static description = 'Another event';
81
- static aliases = ['user.created']; // conflicts with AliasedEvent
82
- constructor(data) {
83
- super();
84
- this.data = data;
85
- }
86
- }
87
- const sub1 = createSubscriber({
88
- name: 'sub-1',
89
- description: 'Subscriber 1',
90
- callback: async () => { },
91
- });
92
- const sub2 = createSubscriber({
93
- name: 'sub-2',
94
- description: 'Subscriber 2',
95
- callback: async () => { },
96
- });
97
- registry.register(AliasedEvent, [sub1]);
98
- expect(() => registry.register(EventWithSameAlias, [sub2])).toThrow('Alias "user.created" is already registered');
99
- });
100
- });
101
- describe('getEventClass', () => {
102
- it('should return event class by key', () => {
103
- const subscriber = createSubscriber({
104
- name: 'test-subscriber',
105
- description: 'Test subscriber',
106
- callback: async () => { },
107
- });
108
- registry.register(TestEvent, [subscriber]);
109
- const eventClass = registry.getEventClass('test.event');
110
- expect(eventClass).toBeDefined();
111
- expect(eventClass?.key).toBe('test.event');
112
- });
113
- it('should return event class by alias', () => {
114
- const subscriber = createSubscriber({
115
- name: 'test-subscriber',
116
- description: 'Test subscriber',
117
- callback: async () => { },
118
- });
119
- registry.register(AliasedEvent, [subscriber]);
120
- const eventClass = registry.getEventClass('user.created');
121
- expect(eventClass).toBeDefined();
122
- expect(eventClass?.key).toBe('user.created.v2');
123
- });
124
- it('should return undefined for unknown key', () => {
125
- expect(registry.getEventClass('unknown.event')).toBeUndefined();
126
- });
127
- });
128
- describe('getSubscribers', () => {
129
- it('should return all subscribers for an event', () => {
130
- const sub1 = createSubscriber({
131
- name: 'sub-1',
132
- description: 'Subscriber 1',
133
- callback: async () => { },
134
- });
135
- const sub2 = createSubscriber({
136
- name: 'sub-2',
137
- description: 'Subscriber 2',
138
- callback: async () => { },
139
- });
140
- registry.register(TestEvent, [sub1, sub2]);
141
- const subscribers = registry.getSubscribers('test.event');
142
- expect(subscribers).toHaveLength(2);
143
- expect(subscribers[0]?.name).toBe('sub-1');
144
- expect(subscribers[1]?.name).toBe('sub-2');
145
- });
146
- it('should return empty array for unknown event', () => {
147
- expect(registry.getSubscribers('unknown.event')).toEqual([]);
148
- });
149
- });
150
- describe('getSubscriber', () => {
151
- it('should return specific subscriber by name', () => {
152
- const sub1 = createSubscriber({
153
- name: 'sub-1',
154
- description: 'Subscriber 1',
155
- callback: async () => { },
156
- });
157
- const sub2 = createSubscriber({
158
- name: 'sub-2',
159
- description: 'Subscriber 2',
160
- callback: async () => { },
161
- });
162
- registry.register(TestEvent, [sub1, sub2]);
163
- const subscriber = registry.getSubscriber('test.event', 'sub-2');
164
- expect(subscriber?.name).toBe('sub-2');
165
- });
166
- it('should return undefined for unknown subscriber', () => {
167
- const sub = createSubscriber({
168
- name: 'sub-1',
169
- description: 'Subscriber 1',
170
- callback: async () => { },
171
- });
172
- registry.register(TestEvent, [sub]);
173
- expect(registry.getSubscriber('test.event', 'unknown')).toBeUndefined();
174
- });
175
- });
176
- describe('getSubscriberDefinition', () => {
177
- it('should return subscriber definition for pipeline', () => {
178
- const sub = createSubscriber({
179
- name: 'sub-1',
180
- description: 'Subscriber 1',
181
- callback: async () => { },
182
- idempotent: 'yes',
183
- importance: 'must-investigate',
184
- targetQueue: 'custom-queue',
185
- });
186
- registry.register(TestEvent, [sub]);
187
- const definition = registry.getSubscriberDefinition('test.event', 'sub-1');
188
- expect(definition).toEqual({
189
- name: 'sub-1',
190
- description: 'Subscriber 1',
191
- idempotent: 'yes',
192
- importance: 'must-investigate',
193
- targetQueue: 'custom-queue',
194
- });
195
- });
196
- it('should return undefined for unknown subscriber', () => {
197
- expect(registry.getSubscriberDefinition('unknown', 'unknown')).toBeUndefined();
198
- });
199
- });
200
- describe('getExecutableSubscriber', () => {
201
- it('should return subscriber with callback', () => {
202
- const callback = async () => { };
203
- const sub = createSubscriber({
204
- name: 'sub-1',
205
- description: 'Subscriber 1',
206
- callback,
207
- });
208
- registry.register(TestEvent, [sub]);
209
- const executable = registry.getExecutableSubscriber('test.event', 'sub-1');
210
- expect(executable).toBeDefined();
211
- expect(executable?.callback).toBe(callback);
212
- });
213
- });
214
- describe('getEventKeys', () => {
215
- it('should return all registered event keys', () => {
216
- const sub1 = createSubscriber({
217
- name: 'sub-1',
218
- description: 'Subscriber 1',
219
- callback: async () => { },
220
- });
221
- const sub2 = createSubscriber({
222
- name: 'sub-2',
223
- description: 'Subscriber 2',
224
- callback: async () => { },
225
- });
226
- registry.register(TestEvent, [sub1]);
227
- registry.register(AliasedEvent, [sub2]);
228
- const keys = registry.getEventKeys();
229
- expect(keys).toContain('test.event');
230
- expect(keys).toContain('user.created.v2');
231
- expect(keys).not.toContain('user.created'); // aliases not included
232
- });
233
- });
234
- describe('validate', () => {
235
- it('should pass validation for valid schema', () => {
236
- const sub = createSubscriber({
237
- name: 'sub-1',
238
- description: 'Subscriber 1',
239
- callback: async () => { },
240
- });
241
- registry.register(TestEvent, [sub]);
242
- const result = registry.validate();
243
- expect(result.valid).toBe(true);
244
- expect(result.issues).toHaveLength(0);
245
- });
246
- it('should detect duplicate subscriber names', () => {
247
- const sub1 = createSubscriber({
248
- name: 'duplicate-name',
249
- description: 'Duplicate subscriber',
250
- callback: async () => { },
251
- });
252
- const sub2 = createSubscriber({
253
- name: 'duplicate-name',
254
- description: 'Duplicate subscriber',
255
- callback: async () => { },
256
- });
257
- registry.register(TestEvent, [sub1, sub2]);
258
- const result = registry.validate();
259
- expect(result.valid).toBe(false);
260
- expect(result.issues).toHaveLength(1);
261
- expect(result.issues[0]?.severity).toBe('error');
262
- expect(result.issues[0]?.message).toContain('Duplicate subscriber name');
263
- });
264
- });
265
- describe('clear', () => {
266
- it('should remove all entries', () => {
267
- const sub = createSubscriber({
268
- name: 'sub-1',
269
- description: 'Subscriber 1',
270
- callback: async () => { },
271
- });
272
- registry.register(TestEvent, [sub]);
273
- registry.clear();
274
- expect(registry.hasEvent('test.event')).toBe(false);
275
- expect(registry.getEventKeys()).toHaveLength(0);
276
- });
277
- });
278
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../src/schema/types.test.ts"],"names":[],"mappings":""}