@powerhousedao/reactor 5.0.0-staging.9 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cache/buffer/ring-buffer.d.ts +37 -0
- package/dist/src/cache/buffer/ring-buffer.d.ts.map +1 -0
- package/dist/src/cache/buffer/ring-buffer.js +69 -0
- package/dist/src/cache/buffer/ring-buffer.js.map +1 -0
- package/dist/src/cache/kysely-write-cache.d.ts +133 -0
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -0
- package/dist/src/cache/kysely-write-cache.js +375 -0
- package/dist/src/cache/kysely-write-cache.js.map +1 -0
- package/dist/src/cache/lru/lru-tracker.d.ts +15 -0
- package/dist/src/cache/lru/lru-tracker.d.ts.map +1 -0
- package/dist/src/cache/lru/lru-tracker.js +96 -0
- package/dist/src/cache/lru/lru-tracker.js.map +1 -0
- package/dist/src/cache/types.d.ts +42 -0
- package/dist/src/cache/types.d.ts.map +1 -0
- package/dist/src/cache/types.js +2 -0
- package/dist/src/cache/types.js.map +1 -0
- package/dist/src/cache/write/interfaces.d.ts +83 -0
- package/dist/src/cache/write/interfaces.d.ts.map +1 -0
- package/dist/src/cache/write/interfaces.js +2 -0
- package/dist/src/cache/write/interfaces.js.map +1 -0
- package/dist/src/client/reactor-client.d.ts +103 -0
- package/dist/src/client/reactor-client.d.ts.map +1 -0
- package/dist/src/client/reactor-client.js +184 -0
- package/dist/src/client/reactor-client.js.map +1 -0
- package/dist/src/client/types.d.ts +213 -0
- package/dist/src/client/types.d.ts.map +1 -0
- package/dist/src/client/types.js +14 -0
- package/dist/src/client/types.js.map +1 -0
- package/dist/src/core/builder.d.ts +20 -0
- package/dist/src/core/builder.d.ts.map +1 -0
- package/dist/src/core/builder.js +47 -0
- package/dist/src/core/builder.js.map +1 -0
- package/dist/src/{reactor.d.ts → core/reactor.d.ts} +14 -30
- package/dist/src/core/reactor.d.ts.map +1 -0
- package/dist/src/{reactor.js → core/reactor.js} +162 -114
- package/dist/src/core/reactor.js.map +1 -0
- package/dist/src/{interfaces/reactor.d.ts → core/types.d.ts} +7 -7
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/{utils.d.ts → core/utils.d.ts} +2 -2
- package/dist/src/core/utils.d.ts.map +1 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/events/event-bus.d.ts +2 -2
- package/dist/src/events/event-bus.d.ts.map +1 -1
- package/dist/src/events/event-bus.js +1 -1
- package/dist/src/events/event-bus.js.map +1 -1
- package/dist/src/events/interfaces.d.ts +1 -1
- package/dist/src/events/interfaces.d.ts.map +1 -1
- package/dist/src/events/types.d.ts +14 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +6 -0
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/executor/interfaces.d.ts +2 -2
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +6 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.js +121 -37
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +32 -3
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +451 -17
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +10 -3
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/executor/util.d.ts +47 -0
- package/dist/src/executor/util.d.ts.map +1 -0
- package/dist/src/executor/util.js +113 -0
- package/dist/src/executor/util.js.map +1 -0
- package/dist/src/index.d.ts +23 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +30 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +16 -0
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
- package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
- package/dist/src/job-tracker/index.d.ts +3 -0
- package/dist/src/job-tracker/index.d.ts.map +1 -0
- package/dist/src/job-tracker/index.js +2 -0
- package/dist/src/job-tracker/index.js.map +1 -0
- package/dist/src/job-tracker/interfaces.d.ts +41 -0
- package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
- package/dist/src/job-tracker/interfaces.js +2 -0
- package/dist/src/job-tracker/interfaces.js.map +1 -0
- package/dist/src/queue/interfaces.d.ts +6 -5
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +5 -3
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.js +2 -2
- package/dist/src/queue/job-execution-handle.js.map +1 -1
- package/dist/src/queue/queue.d.ts +7 -5
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +61 -27
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +11 -8
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/read-models/coordinator.d.ts +38 -0
- package/dist/src/read-models/coordinator.d.ts.map +1 -0
- package/dist/src/read-models/coordinator.js +62 -0
- package/dist/src/read-models/coordinator.js.map +1 -0
- package/dist/src/read-models/document-view.d.ts +20 -0
- package/dist/src/read-models/document-view.d.ts.map +1 -0
- package/dist/src/read-models/document-view.js +365 -0
- package/dist/src/read-models/document-view.js.map +1 -0
- package/dist/src/read-models/interfaces.d.ts +29 -0
- package/dist/src/read-models/interfaces.d.ts.map +1 -0
- package/dist/src/read-models/interfaces.js +2 -0
- package/dist/src/read-models/interfaces.js.map +1 -0
- package/dist/src/read-models/types.d.ts +46 -0
- package/dist/src/read-models/types.d.ts.map +1 -0
- package/dist/src/read-models/types.js +2 -0
- package/dist/src/read-models/types.js.map +1 -0
- package/dist/src/registry/implementation.js +1 -1
- package/dist/src/registry/implementation.js.map +1 -1
- package/dist/src/shared/awaiter.d.ts +32 -0
- package/dist/src/shared/awaiter.d.ts.map +1 -0
- package/dist/src/shared/awaiter.js +132 -0
- package/dist/src/shared/awaiter.js.map +1 -0
- package/dist/src/shared/errors.d.ts +17 -0
- package/dist/src/shared/errors.d.ts.map +1 -0
- package/dist/src/shared/errors.js +33 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/factories.d.ts +1 -1
- package/dist/src/shared/factories.d.ts.map +1 -1
- package/dist/src/shared/types.d.ts +17 -1
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +5 -0
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +6 -0
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
- package/dist/src/signer/passthrough-signer.js +6 -0
- package/dist/src/signer/passthrough-signer.js.map +1 -0
- package/dist/src/signer/types.d.ts +15 -0
- package/dist/src/signer/types.d.ts.map +1 -0
- package/dist/src/signer/types.js +2 -0
- package/dist/src/signer/types.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +121 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -0
- package/dist/src/storage/interfaces.js +19 -0
- package/dist/src/storage/interfaces.js.map +1 -0
- package/dist/src/storage/kysely/keyframe-store.d.ts +15 -0
- package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -0
- package/dist/src/storage/kysely/keyframe-store.js +71 -0
- package/dist/src/storage/kysely/keyframe-store.js.map +1 -0
- package/dist/src/storage/kysely/store.d.ts +15 -0
- package/dist/src/storage/kysely/store.d.ts.map +1 -0
- package/dist/src/storage/kysely/store.js +196 -0
- package/dist/src/storage/kysely/store.js.map +1 -0
- package/dist/src/storage/kysely/types.d.ts +39 -0
- package/dist/src/storage/kysely/types.d.ts.map +1 -0
- package/dist/src/storage/kysely/types.js +2 -0
- package/dist/src/storage/kysely/types.js.map +1 -0
- package/dist/src/storage/txn.d.ts +15 -0
- package/dist/src/storage/txn.d.ts.map +1 -0
- package/dist/src/storage/txn.js +41 -0
- package/dist/src/storage/txn.js.map +1 -0
- package/dist/src/subs/default-error-handler.d.ts +13 -0
- package/dist/src/subs/default-error-handler.d.ts.map +1 -0
- package/dist/src/subs/default-error-handler.js +27 -0
- package/dist/src/subs/default-error-handler.js.map +1 -0
- package/dist/src/subs/react-subscription-manager.d.ts +45 -0
- package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
- package/dist/src/subs/react-subscription-manager.js +185 -0
- package/dist/src/subs/react-subscription-manager.js.map +1 -0
- package/dist/src/subs/types.d.ts +64 -0
- package/dist/src/subs/types.d.ts.map +1 -0
- package/dist/src/subs/types.js +2 -0
- package/dist/src/subs/types.js.map +1 -0
- package/dist/src/utils/reshuffle.d.ts +30 -0
- package/dist/src/utils/reshuffle.d.ts.map +1 -0
- package/dist/src/utils/reshuffle.js +47 -0
- package/dist/src/utils/reshuffle.js.map +1 -0
- package/package.json +15 -9
- package/dist/bench/event-bus.bench.d.ts +0 -2
- package/dist/bench/event-bus.bench.d.ts.map +0 -1
- package/dist/bench/event-bus.bench.js +0 -228
- package/dist/bench/event-bus.bench.js.map +0 -1
- package/dist/bench/queue-only.bench.d.ts +0 -2
- package/dist/bench/queue-only.bench.d.ts.map +0 -1
- package/dist/bench/queue-only.bench.js +0 -46
- package/dist/bench/queue-only.bench.js.map +0 -1
- package/dist/bench/reactor-throughput.bench.d.ts +0 -2
- package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
- package/dist/bench/reactor-throughput.bench.js +0 -144
- package/dist/bench/reactor-throughput.bench.js.map +0 -1
- package/dist/src/interfaces/reactor.d.ts.map +0 -1
- package/dist/src/interfaces/reactor.js +0 -2
- package/dist/src/interfaces/reactor.js.map +0 -1
- package/dist/src/reactor.d.ts.map +0 -1
- package/dist/src/reactor.js.map +0 -1
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js.map +0 -1
- package/dist/test/event-bus.test.d.ts +0 -2
- package/dist/test/event-bus.test.d.ts.map +0 -1
- package/dist/test/event-bus.test.js +0 -541
- package/dist/test/event-bus.test.js.map +0 -1
- package/dist/test/executor/executor-integration.test.d.ts +0 -2
- package/dist/test/executor/executor-integration.test.d.ts.map +0 -1
- package/dist/test/executor/executor-integration.test.js +0 -287
- package/dist/test/executor/executor-integration.test.js.map +0 -1
- package/dist/test/executor/job-execution-handle.test.d.ts +0 -2
- package/dist/test/executor/job-execution-handle.test.d.ts.map +0 -1
- package/dist/test/executor/job-execution-handle.test.js +0 -272
- package/dist/test/executor/job-execution-handle.test.js.map +0 -1
- package/dist/test/executor/simple-job-executor-manager.test.d.ts +0 -2
- package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +0 -1
- package/dist/test/executor/simple-job-executor-manager.test.js +0 -132
- package/dist/test/executor/simple-job-executor-manager.test.js.map +0 -1
- package/dist/test/executor/simple-job-executor.test.d.ts +0 -2
- package/dist/test/executor/simple-job-executor.test.d.ts.map +0 -1
- package/dist/test/executor/simple-job-executor.test.js +0 -139
- package/dist/test/executor/simple-job-executor.test.js.map +0 -1
- package/dist/test/factories.d.ts +0 -122
- package/dist/test/factories.d.ts.map +0 -1
- package/dist/test/factories.js +0 -319
- package/dist/test/factories.js.map +0 -1
- package/dist/test/integration/document-drive-integration.test.d.ts +0 -2
- package/dist/test/integration/document-drive-integration.test.d.ts.map +0 -1
- package/dist/test/integration/document-drive-integration.test.js +0 -1102
- package/dist/test/integration/document-drive-integration.test.js.map +0 -1
- package/dist/test/integration/reactor-read.test.d.ts +0 -2
- package/dist/test/integration/reactor-read.test.d.ts.map +0 -1
- package/dist/test/integration/reactor-read.test.js +0 -300
- package/dist/test/integration/reactor-read.test.js.map +0 -1
- package/dist/test/queue/queue-integration.test.d.ts +0 -2
- package/dist/test/queue/queue-integration.test.d.ts.map +0 -1
- package/dist/test/queue/queue-integration.test.js +0 -322
- package/dist/test/queue/queue-integration.test.js.map +0 -1
- package/dist/test/queue/queue.test.d.ts +0 -2
- package/dist/test/queue/queue.test.d.ts.map +0 -1
- package/dist/test/queue/queue.test.js +0 -770
- package/dist/test/queue/queue.test.js.map +0 -1
- package/dist/test/registry/registry.test.d.ts +0 -2
- package/dist/test/registry/registry.test.d.ts.map +0 -1
- package/dist/test/registry/registry.test.js +0 -182
- package/dist/test/registry/registry.test.js.map +0 -1
- package/dist/test/utils.test.d.ts +0 -2
- package/dist/test/utils.test.d.ts.map +0 -1
- package/dist/test/utils.test.js +0 -66
- package/dist/test/utils.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -11
- package/dist/vitest.config.js.map +0 -1
- /package/dist/src/{utils.js → core/utils.js} +0 -0
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { EventBus } from "../src/events/event-bus.js";
|
|
3
|
-
import { EventBusAggregateError } from "../src/events/types.js";
|
|
4
|
-
describe("EventBus", () => {
|
|
5
|
-
describe("order of subscriber execution", () => {
|
|
6
|
-
it("should execute subscribers in registration order", async () => {
|
|
7
|
-
const eventBus = new EventBus();
|
|
8
|
-
const executionOrder = [];
|
|
9
|
-
const eventType = 1;
|
|
10
|
-
// Register subscribers in specific order
|
|
11
|
-
eventBus.subscribe(eventType, () => {
|
|
12
|
-
executionOrder.push(1);
|
|
13
|
-
});
|
|
14
|
-
eventBus.subscribe(eventType, () => {
|
|
15
|
-
executionOrder.push(2);
|
|
16
|
-
});
|
|
17
|
-
eventBus.subscribe(eventType, () => {
|
|
18
|
-
executionOrder.push(3);
|
|
19
|
-
});
|
|
20
|
-
await eventBus.emit(eventType, {});
|
|
21
|
-
expect(executionOrder).toEqual([1, 2, 3]);
|
|
22
|
-
});
|
|
23
|
-
it("should maintain order even with async subscribers", async () => {
|
|
24
|
-
const eventBus = new EventBus();
|
|
25
|
-
const executionOrder = [];
|
|
26
|
-
const eventType = 1;
|
|
27
|
-
// Mix of sync and async subscribers with different delays
|
|
28
|
-
eventBus.subscribe(eventType, async () => {
|
|
29
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
30
|
-
executionOrder.push(1);
|
|
31
|
-
});
|
|
32
|
-
eventBus.subscribe(eventType, () => {
|
|
33
|
-
executionOrder.push(2);
|
|
34
|
-
});
|
|
35
|
-
eventBus.subscribe(eventType, async () => {
|
|
36
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
37
|
-
executionOrder.push(3);
|
|
38
|
-
});
|
|
39
|
-
await eventBus.emit(eventType, {});
|
|
40
|
-
// With sequential execution, order should be preserved regardless of delays
|
|
41
|
-
expect(executionOrder).toEqual([1, 2, 3]);
|
|
42
|
-
});
|
|
43
|
-
it("should preserve order when subscribers are added during emission", async () => {
|
|
44
|
-
const eventBus = new EventBus();
|
|
45
|
-
const executionOrder = [];
|
|
46
|
-
const eventType = 1;
|
|
47
|
-
eventBus.subscribe(eventType, () => {
|
|
48
|
-
executionOrder.push(1);
|
|
49
|
-
// Add a new subscriber during emission
|
|
50
|
-
eventBus.subscribe(eventType, () => {
|
|
51
|
-
executionOrder.push(4);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
eventBus.subscribe(eventType, () => {
|
|
55
|
-
executionOrder.push(2);
|
|
56
|
-
});
|
|
57
|
-
eventBus.subscribe(eventType, () => {
|
|
58
|
-
executionOrder.push(3);
|
|
59
|
-
});
|
|
60
|
-
await eventBus.emit(eventType, {});
|
|
61
|
-
// The subscriber added during emission should not be called in this cycle
|
|
62
|
-
expect(executionOrder).toEqual([1, 2, 3]);
|
|
63
|
-
// But should be called in the next emission
|
|
64
|
-
executionOrder.length = 0;
|
|
65
|
-
await eventBus.emit(eventType, {});
|
|
66
|
-
expect(executionOrder).toEqual([1, 2, 3, 4]);
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe("concurrent emits", () => {
|
|
70
|
-
it("should handle multiple concurrent emits without blocking", async () => {
|
|
71
|
-
const eventBus = new EventBus();
|
|
72
|
-
const results = [];
|
|
73
|
-
const eventType1 = 1;
|
|
74
|
-
const eventType2 = 2;
|
|
75
|
-
// Subscriber for event type 1 with delay
|
|
76
|
-
eventBus.subscribe(eventType1, async (type, data) => {
|
|
77
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
78
|
-
results.push({ eventType: type, data, timestampUtcMs: Date.now() });
|
|
79
|
-
});
|
|
80
|
-
// Subscriber for event type 2 with shorter delay
|
|
81
|
-
eventBus.subscribe(eventType2, async (type, data) => {
|
|
82
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
83
|
-
results.push({ eventType: type, data, timestampUtcMs: Date.now() });
|
|
84
|
-
});
|
|
85
|
-
const startTime = Date.now();
|
|
86
|
-
// Emit both events concurrently
|
|
87
|
-
const [result1, result2] = await Promise.all([
|
|
88
|
-
eventBus.emit(eventType1, { message: "event1" }),
|
|
89
|
-
eventBus.emit(eventType2, { message: "event2" }),
|
|
90
|
-
]);
|
|
91
|
-
const endTime = Date.now();
|
|
92
|
-
const totalTime = endTime - startTime;
|
|
93
|
-
// Both emits should complete
|
|
94
|
-
expect(result1).toBeUndefined();
|
|
95
|
-
expect(result2).toBeUndefined();
|
|
96
|
-
// Should have results for both events
|
|
97
|
-
expect(results).toHaveLength(2);
|
|
98
|
-
// Event 2 should complete first due to shorter delay
|
|
99
|
-
expect(results[0].eventType).toBe(2);
|
|
100
|
-
expect(results[1].eventType).toBe(1);
|
|
101
|
-
// Total time should be closer to 100ms (longer delay) than 150ms (sum of delays)
|
|
102
|
-
// This proves they ran concurrently
|
|
103
|
-
expect(totalTime).toBeLessThan(150);
|
|
104
|
-
expect(totalTime).toBeGreaterThan(90);
|
|
105
|
-
});
|
|
106
|
-
it("should handle concurrent emits of the same event type", async () => {
|
|
107
|
-
const eventBus = new EventBus();
|
|
108
|
-
const results = [];
|
|
109
|
-
const eventType = 1;
|
|
110
|
-
// Multiple subscribers with different delays
|
|
111
|
-
eventBus.subscribe(eventType, async (type, data) => {
|
|
112
|
-
await new Promise((resolve) => setTimeout(resolve, 30));
|
|
113
|
-
results.push({
|
|
114
|
-
emitId: data.emitId ?? "",
|
|
115
|
-
subscriberId: 1,
|
|
116
|
-
timestampUtcMs: Date.now(),
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
eventBus.subscribe(eventType, async (type, data) => {
|
|
120
|
-
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
121
|
-
results.push({
|
|
122
|
-
emitId: data.emitId ?? "",
|
|
123
|
-
subscriberId: 2,
|
|
124
|
-
timestampUtcMs: Date.now(),
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
// Emit the same event type concurrently
|
|
128
|
-
await Promise.all([
|
|
129
|
-
eventBus.emit(eventType, { emitId: "emit1" }),
|
|
130
|
-
eventBus.emit(eventType, { emitId: "emit2" }),
|
|
131
|
-
eventBus.emit(eventType, { emitId: "emit3" }),
|
|
132
|
-
]);
|
|
133
|
-
// Should have 6 results total (3 emits × 2 subscribers)
|
|
134
|
-
expect(results).toHaveLength(6);
|
|
135
|
-
// Each emit should have triggered both subscribers
|
|
136
|
-
const emit1Results = results.filter((r) => r.emitId === "emit1");
|
|
137
|
-
const emit2Results = results.filter((r) => r.emitId === "emit2");
|
|
138
|
-
const emit3Results = results.filter((r) => r.emitId === "emit3");
|
|
139
|
-
expect(emit1Results).toHaveLength(2);
|
|
140
|
-
expect(emit2Results).toHaveLength(2);
|
|
141
|
-
expect(emit3Results).toHaveLength(2);
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
describe("sync and async subscribers", () => {
|
|
145
|
-
it("should handle mix of synchronous and asynchronous subscribers", async () => {
|
|
146
|
-
const eventBus = new EventBus();
|
|
147
|
-
const results = [];
|
|
148
|
-
const eventType = 1;
|
|
149
|
-
// Synchronous subscriber
|
|
150
|
-
eventBus.subscribe(eventType, (type, data) => {
|
|
151
|
-
results.push({ type: "sync", value: data.value ?? 0 });
|
|
152
|
-
});
|
|
153
|
-
// Asynchronous subscriber
|
|
154
|
-
eventBus.subscribe(eventType, async (type, data) => {
|
|
155
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
156
|
-
results.push({ type: "async", value: data.value ?? 0 });
|
|
157
|
-
});
|
|
158
|
-
// Another synchronous subscriber
|
|
159
|
-
eventBus.subscribe(eventType, (type, data) => {
|
|
160
|
-
results.push({ type: "sync2", value: data.value ?? 0 });
|
|
161
|
-
});
|
|
162
|
-
await eventBus.emit(eventType, { value: 42 });
|
|
163
|
-
expect(results).toHaveLength(3);
|
|
164
|
-
// With sequential execution, all subscribers complete in registration order
|
|
165
|
-
expect(results[0]).toEqual({ type: "sync", value: 42 });
|
|
166
|
-
expect(results[1]).toEqual({ type: "async", value: 42 });
|
|
167
|
-
expect(results[2]).toEqual({ type: "sync2", value: 42 });
|
|
168
|
-
});
|
|
169
|
-
it("should handle subscribers that return promises vs void", async () => {
|
|
170
|
-
const eventBus = new EventBus();
|
|
171
|
-
const results = [];
|
|
172
|
-
const eventType = 1;
|
|
173
|
-
// Subscriber returning void
|
|
174
|
-
eventBus.subscribe(eventType, () => {
|
|
175
|
-
results.push("void");
|
|
176
|
-
});
|
|
177
|
-
// Subscriber returning Promise<void>
|
|
178
|
-
eventBus.subscribe(eventType, async () => {
|
|
179
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
180
|
-
results.push("promise-void");
|
|
181
|
-
});
|
|
182
|
-
// Subscriber returning a value (should be ignored)
|
|
183
|
-
eventBus.subscribe(eventType, () => {
|
|
184
|
-
results.push("value");
|
|
185
|
-
// Don't return anything to avoid type error
|
|
186
|
-
});
|
|
187
|
-
await eventBus.emit(eventType, {});
|
|
188
|
-
// With sequential execution, all complete in registration order
|
|
189
|
-
expect(results).toEqual(["void", "promise-void", "value"]);
|
|
190
|
-
});
|
|
191
|
-
it("should handle synchronous errors in async context", async () => {
|
|
192
|
-
const eventBus = new EventBus();
|
|
193
|
-
const eventType = 1;
|
|
194
|
-
eventBus.subscribe(eventType, () => {
|
|
195
|
-
throw new Error("Sync error");
|
|
196
|
-
});
|
|
197
|
-
eventBus.subscribe(eventType, () => {
|
|
198
|
-
throw new Error("Async error");
|
|
199
|
-
});
|
|
200
|
-
await expect(eventBus.emit(eventType, {})).rejects.toThrow(EventBusAggregateError);
|
|
201
|
-
try {
|
|
202
|
-
await eventBus.emit(eventType, {});
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
expect(error).toBeInstanceOf(EventBusAggregateError);
|
|
206
|
-
expect(error.errors).toHaveLength(2);
|
|
207
|
-
expect(error.errors[0].message).toBe("Sync error");
|
|
208
|
-
expect(error.errors[1].message).toBe("Async error");
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
describe("unsubscribe safety", () => {
|
|
213
|
-
it("should be safe to call unsubscribe multiple times", () => {
|
|
214
|
-
const eventBus = new EventBus();
|
|
215
|
-
const eventType = 1;
|
|
216
|
-
let callCount = 0;
|
|
217
|
-
const unsubscribe = eventBus.subscribe(eventType, () => {
|
|
218
|
-
callCount++;
|
|
219
|
-
});
|
|
220
|
-
// Emit event before unsubscribing
|
|
221
|
-
eventBus.emit(eventType, { data: "test" });
|
|
222
|
-
expect(callCount).toBe(1);
|
|
223
|
-
// Call unsubscribe multiple times
|
|
224
|
-
unsubscribe();
|
|
225
|
-
unsubscribe();
|
|
226
|
-
unsubscribe();
|
|
227
|
-
// Should not throw and should work correctly
|
|
228
|
-
expect(() => unsubscribe()).not.toThrow();
|
|
229
|
-
// Emit again to verify unsubscribe worked
|
|
230
|
-
eventBus.emit(eventType, { data: "test" });
|
|
231
|
-
expect(callCount).toBe(1); // Should still be 1
|
|
232
|
-
});
|
|
233
|
-
it("should handle unsubscribe during emission", async () => {
|
|
234
|
-
const eventBus = new EventBus();
|
|
235
|
-
const results = [];
|
|
236
|
-
const eventType = 1;
|
|
237
|
-
let unsubscribe2 = undefined;
|
|
238
|
-
eventBus.subscribe(eventType, () => {
|
|
239
|
-
results.push(1);
|
|
240
|
-
// Unsubscribe subscriber 2 during emission
|
|
241
|
-
if (unsubscribe2) {
|
|
242
|
-
unsubscribe2();
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
unsubscribe2 = eventBus.subscribe(eventType, () => {
|
|
246
|
-
results.push(2);
|
|
247
|
-
});
|
|
248
|
-
eventBus.subscribe(eventType, () => {
|
|
249
|
-
results.push(3);
|
|
250
|
-
});
|
|
251
|
-
await eventBus.emit(eventType, {});
|
|
252
|
-
// Subscriber 2 should still be called since it was registered before emission started
|
|
253
|
-
expect(results).toEqual([1, 2, 3]);
|
|
254
|
-
// But should not be called in subsequent emissions
|
|
255
|
-
results.length = 0;
|
|
256
|
-
await eventBus.emit(eventType, {});
|
|
257
|
-
expect(results).toEqual([1, 3]);
|
|
258
|
-
});
|
|
259
|
-
it("should clean up empty listener arrays", () => {
|
|
260
|
-
const eventBus = new EventBus();
|
|
261
|
-
const eventType = 1;
|
|
262
|
-
const unsubscribe1 = eventBus.subscribe(eventType, () => { });
|
|
263
|
-
const unsubscribe2 = eventBus.subscribe(eventType, () => { });
|
|
264
|
-
// Verify listeners exist
|
|
265
|
-
expect(eventBus.eventTypeToSubscribers.has(eventType)).toBe(true);
|
|
266
|
-
expect(eventBus.eventTypeToSubscribers.get(eventType)).toHaveLength(2);
|
|
267
|
-
// Unsubscribe first subscriber
|
|
268
|
-
unsubscribe1();
|
|
269
|
-
expect(eventBus.eventTypeToSubscribers.get(eventType)).toHaveLength(1);
|
|
270
|
-
// Unsubscribe last subscriber - should clean up the map entry
|
|
271
|
-
unsubscribe2();
|
|
272
|
-
expect(eventBus.eventTypeToSubscribers.has(eventType)).toBe(false);
|
|
273
|
-
});
|
|
274
|
-
it("should handle unsubscribe of non-existent subscriber gracefully", () => {
|
|
275
|
-
const eventBus = new EventBus();
|
|
276
|
-
const eventType = 1;
|
|
277
|
-
const unsubscribe = eventBus.subscribe(eventType, () => { });
|
|
278
|
-
// Manually remove the subscriber to simulate edge case
|
|
279
|
-
const listeners = eventBus.eventTypeToSubscribers.get(eventType);
|
|
280
|
-
if (!listeners) {
|
|
281
|
-
throw new Error("Listeners not found");
|
|
282
|
-
}
|
|
283
|
-
listeners.length = 0;
|
|
284
|
-
// Should not throw
|
|
285
|
-
expect(() => unsubscribe()).not.toThrow();
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
describe("error handling", () => {
|
|
289
|
-
it("should not affect other subscribers when one throws", async () => {
|
|
290
|
-
const eventBus = new EventBus();
|
|
291
|
-
const results = [];
|
|
292
|
-
const eventType = 1;
|
|
293
|
-
eventBus.subscribe(eventType, () => {
|
|
294
|
-
results.push(1);
|
|
295
|
-
});
|
|
296
|
-
eventBus.subscribe(eventType, () => {
|
|
297
|
-
throw new Error("Subscriber 2 error");
|
|
298
|
-
});
|
|
299
|
-
eventBus.subscribe(eventType, () => {
|
|
300
|
-
results.push(3);
|
|
301
|
-
});
|
|
302
|
-
eventBus.subscribe(eventType, () => {
|
|
303
|
-
throw new Error("Subscriber 4 error");
|
|
304
|
-
});
|
|
305
|
-
eventBus.subscribe(eventType, () => {
|
|
306
|
-
results.push(5);
|
|
307
|
-
});
|
|
308
|
-
await expect(eventBus.emit(eventType, {})).rejects.toThrow(EventBusAggregateError);
|
|
309
|
-
// All non-throwing subscribers should have been called
|
|
310
|
-
expect(results).toEqual([1, 3, 5]);
|
|
311
|
-
// Verify the aggregate error contains both errors
|
|
312
|
-
try {
|
|
313
|
-
await eventBus.emit(eventType, {});
|
|
314
|
-
}
|
|
315
|
-
catch (error) {
|
|
316
|
-
expect(error).toBeInstanceOf(EventBusAggregateError);
|
|
317
|
-
expect(error.errors).toHaveLength(2);
|
|
318
|
-
expect(error.errors[0].message).toBe("Subscriber 2 error");
|
|
319
|
-
expect(error.errors[1].message).toBe("Subscriber 4 error");
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
it("should throw aggregate error when multiple subscribers throw", async () => {
|
|
323
|
-
const eventBus = new EventBus();
|
|
324
|
-
const eventType = 1;
|
|
325
|
-
eventBus.subscribe(eventType, () => {
|
|
326
|
-
throw new Error("First error");
|
|
327
|
-
});
|
|
328
|
-
eventBus.subscribe(eventType, () => {
|
|
329
|
-
throw new Error("Second error");
|
|
330
|
-
});
|
|
331
|
-
eventBus.subscribe(eventType, () => {
|
|
332
|
-
throw new Error("Third error");
|
|
333
|
-
});
|
|
334
|
-
await expect(eventBus.emit(eventType, {})).rejects.toThrow(EventBusAggregateError);
|
|
335
|
-
try {
|
|
336
|
-
await eventBus.emit(eventType, {});
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
expect(error).toBeInstanceOf(EventBusAggregateError);
|
|
340
|
-
expect(error.errors).toHaveLength(3);
|
|
341
|
-
expect(error.errors[0].message).toBe("First error");
|
|
342
|
-
expect(error.errors[1].message).toBe("Second error");
|
|
343
|
-
expect(error.errors[2].message).toBe("Third error");
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
it("should handle async errors correctly", async () => {
|
|
347
|
-
const eventBus = new EventBus();
|
|
348
|
-
const results = [];
|
|
349
|
-
const eventType = 1;
|
|
350
|
-
eventBus.subscribe(eventType, async () => {
|
|
351
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
352
|
-
results.push("success1");
|
|
353
|
-
});
|
|
354
|
-
eventBus.subscribe(eventType, async () => {
|
|
355
|
-
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
356
|
-
throw new Error("Async error");
|
|
357
|
-
});
|
|
358
|
-
eventBus.subscribe(eventType, async () => {
|
|
359
|
-
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
360
|
-
results.push("success2");
|
|
361
|
-
});
|
|
362
|
-
await expect(eventBus.emit(eventType, {})).rejects.toThrow(EventBusAggregateError);
|
|
363
|
-
// All subscribers run sequentially, even if earlier ones throw errors
|
|
364
|
-
expect(results).toEqual(["success1", "success2"]);
|
|
365
|
-
// Verify the aggregate error contains the async error
|
|
366
|
-
try {
|
|
367
|
-
await eventBus.emit(eventType, {});
|
|
368
|
-
}
|
|
369
|
-
catch (error) {
|
|
370
|
-
expect(error).toBeInstanceOf(EventBusAggregateError);
|
|
371
|
-
expect(error.errors).toHaveLength(1);
|
|
372
|
-
expect(error.errors[0].message).toBe("Async error");
|
|
373
|
-
}
|
|
374
|
-
});
|
|
375
|
-
it("should handle mixed sync and async errors", async () => {
|
|
376
|
-
const eventBus = new EventBus();
|
|
377
|
-
const results = [];
|
|
378
|
-
const eventType = 1;
|
|
379
|
-
eventBus.subscribe(eventType, () => {
|
|
380
|
-
results.push("sync-success");
|
|
381
|
-
});
|
|
382
|
-
eventBus.subscribe(eventType, () => {
|
|
383
|
-
throw new Error("Sync error");
|
|
384
|
-
});
|
|
385
|
-
eventBus.subscribe(eventType, async () => {
|
|
386
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
387
|
-
results.push("async-success");
|
|
388
|
-
});
|
|
389
|
-
eventBus.subscribe(eventType, async () => {
|
|
390
|
-
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
391
|
-
throw new Error("Async error");
|
|
392
|
-
});
|
|
393
|
-
await expect(eventBus.emit(eventType, {})).rejects.toThrow(EventBusAggregateError);
|
|
394
|
-
// Non-throwing subscribers should complete
|
|
395
|
-
expect(results).toEqual(["sync-success", "async-success"]);
|
|
396
|
-
// Verify the aggregate error contains both sync and async errors
|
|
397
|
-
try {
|
|
398
|
-
await eventBus.emit(eventType, {});
|
|
399
|
-
}
|
|
400
|
-
catch (error) {
|
|
401
|
-
expect(error).toBeInstanceOf(EventBusAggregateError);
|
|
402
|
-
expect(error.errors).toHaveLength(2);
|
|
403
|
-
expect(error.errors[0].message).toBe("Sync error");
|
|
404
|
-
expect(error.errors[1].message).toBe("Async error");
|
|
405
|
-
}
|
|
406
|
-
});
|
|
407
|
-
it("should continue processing other event types when one fails", async () => {
|
|
408
|
-
const eventBus = new EventBus();
|
|
409
|
-
const results = [];
|
|
410
|
-
eventBus.subscribe(1, () => {
|
|
411
|
-
results.push({ eventType: 1, success: true });
|
|
412
|
-
throw new Error("Event 1 error");
|
|
413
|
-
});
|
|
414
|
-
eventBus.subscribe(2, () => {
|
|
415
|
-
results.push({ eventType: 2, success: true });
|
|
416
|
-
});
|
|
417
|
-
// Emit both events concurrently
|
|
418
|
-
const [result1, result2] = await Promise.allSettled([
|
|
419
|
-
eventBus.emit(1, {}),
|
|
420
|
-
eventBus.emit(2, {}),
|
|
421
|
-
]);
|
|
422
|
-
expect(result1.status).toBe("rejected");
|
|
423
|
-
expect(result2.status).toBe("fulfilled");
|
|
424
|
-
expect(results).toHaveLength(2);
|
|
425
|
-
});
|
|
426
|
-
});
|
|
427
|
-
describe("edge cases", () => {
|
|
428
|
-
it("should handle emit with no subscribers", async () => {
|
|
429
|
-
const eventBus = new EventBus();
|
|
430
|
-
// Should not throw and should complete immediately
|
|
431
|
-
await expect(eventBus.emit(999, { data: "test" })).resolves.toBeUndefined();
|
|
432
|
-
});
|
|
433
|
-
it("should handle different event types independently", async () => {
|
|
434
|
-
const eventBus = new EventBus();
|
|
435
|
-
const results = [];
|
|
436
|
-
eventBus.subscribe(1, (type, data) => {
|
|
437
|
-
results.push({ eventType: type, data });
|
|
438
|
-
});
|
|
439
|
-
eventBus.subscribe(2, (type, data) => {
|
|
440
|
-
results.push({ eventType: type, data });
|
|
441
|
-
});
|
|
442
|
-
await eventBus.emit(1, { message: "type1" });
|
|
443
|
-
await eventBus.emit(2, { message: "type2" });
|
|
444
|
-
await eventBus.emit(3, { message: "type3" }); // No subscribers
|
|
445
|
-
expect(results).toHaveLength(2);
|
|
446
|
-
expect(results[0]).toEqual({ eventType: 1, data: { message: "type1" } });
|
|
447
|
-
expect(results[1]).toEqual({ eventType: 2, data: { message: "type2" } });
|
|
448
|
-
});
|
|
449
|
-
it("should handle rapid subscribe/unsubscribe cycles", async () => {
|
|
450
|
-
const eventBus = new EventBus();
|
|
451
|
-
const eventType = 1;
|
|
452
|
-
const results = [];
|
|
453
|
-
// Rapid subscribe/unsubscribe
|
|
454
|
-
for (let i = 0; i < 100; i++) {
|
|
455
|
-
const unsubscribe = eventBus.subscribe(eventType, () => {
|
|
456
|
-
results.push(i);
|
|
457
|
-
});
|
|
458
|
-
if (i % 2 === 0) {
|
|
459
|
-
unsubscribe();
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
await eventBus.emit(eventType, {});
|
|
463
|
-
// Should only have results from odd-numbered subscribers (not unsubscribed)
|
|
464
|
-
expect(results).toHaveLength(50);
|
|
465
|
-
expect(results.every((n) => n % 2 === 1)).toBe(true);
|
|
466
|
-
});
|
|
467
|
-
it("should maintain type safety with generic subscriber types", async () => {
|
|
468
|
-
const eventBus = new EventBus();
|
|
469
|
-
const eventType = 1;
|
|
470
|
-
const results = [];
|
|
471
|
-
eventBus.subscribe(eventType, (type, event) => {
|
|
472
|
-
// TypeScript should infer event as TestEvent
|
|
473
|
-
results.push(event);
|
|
474
|
-
});
|
|
475
|
-
const testEvent = { id: "test", value: 42 };
|
|
476
|
-
await eventBus.emit(eventType, testEvent);
|
|
477
|
-
expect(results).toHaveLength(1);
|
|
478
|
-
expect(results[0]).toEqual(testEvent);
|
|
479
|
-
});
|
|
480
|
-
});
|
|
481
|
-
describe("performance characteristics", () => {
|
|
482
|
-
it("should handle large numbers of subscribers efficiently", async () => {
|
|
483
|
-
const eventBus = new EventBus();
|
|
484
|
-
const eventType = 1;
|
|
485
|
-
const subscriberCount = 1000;
|
|
486
|
-
let callCount = 0;
|
|
487
|
-
// Add many subscribers
|
|
488
|
-
for (let i = 0; i < subscriberCount; i++) {
|
|
489
|
-
eventBus.subscribe(eventType, () => {
|
|
490
|
-
callCount++;
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
const startTime = Date.now();
|
|
494
|
-
await eventBus.emit(eventType, {});
|
|
495
|
-
const endTime = Date.now();
|
|
496
|
-
expect(callCount).toBe(subscriberCount);
|
|
497
|
-
// Should complete reasonably quickly (less than 100ms for 1000 subscribers)
|
|
498
|
-
expect(endTime - startTime).toBeLessThan(100);
|
|
499
|
-
});
|
|
500
|
-
it("should handle many concurrent emits efficiently", async () => {
|
|
501
|
-
const eventBus = new EventBus();
|
|
502
|
-
const eventType = 1;
|
|
503
|
-
const emitCount = 100;
|
|
504
|
-
let totalCalls = 0;
|
|
505
|
-
eventBus.subscribe(eventType, () => {
|
|
506
|
-
totalCalls++;
|
|
507
|
-
});
|
|
508
|
-
const startTime = Date.now();
|
|
509
|
-
const promises = Array.from({ length: emitCount }, () => eventBus.emit(eventType, {}));
|
|
510
|
-
await Promise.all(promises);
|
|
511
|
-
const endTime = Date.now();
|
|
512
|
-
expect(totalCalls).toBe(emitCount);
|
|
513
|
-
// Should complete reasonably quickly
|
|
514
|
-
expect(endTime - startTime).toBeLessThan(100);
|
|
515
|
-
});
|
|
516
|
-
});
|
|
517
|
-
});
|
|
518
|
-
describe("EventBusAggregateError", () => {
|
|
519
|
-
it("should create aggregate error with proper message and errors array", () => {
|
|
520
|
-
const error1 = new Error("First error");
|
|
521
|
-
const error2 = new Error("Second error");
|
|
522
|
-
const error3 = "String error";
|
|
523
|
-
const aggregateError = new EventBusAggregateError([error1, error2, error3]);
|
|
524
|
-
expect(aggregateError).toBeInstanceOf(Error);
|
|
525
|
-
expect(aggregateError).toBeInstanceOf(EventBusAggregateError);
|
|
526
|
-
expect(aggregateError.name).toBe("EventBusAggregateError");
|
|
527
|
-
expect(aggregateError.errors).toEqual([error1, error2, error3]);
|
|
528
|
-
expect(aggregateError.message).toBe("EventBus emit failed with 3 error(s): First error; Second error; String error");
|
|
529
|
-
});
|
|
530
|
-
it("should handle errors without message property", () => {
|
|
531
|
-
const error1 = new Error("Has message");
|
|
532
|
-
const error2 = { code: "NO_MESSAGE" };
|
|
533
|
-
const error3 = null;
|
|
534
|
-
const aggregateError = new EventBusAggregateError([error1, error2, error3]);
|
|
535
|
-
expect(aggregateError.errors).toHaveLength(3);
|
|
536
|
-
expect(aggregateError.message).toContain("Has message");
|
|
537
|
-
expect(aggregateError.message).toContain("[object Object]");
|
|
538
|
-
expect(aggregateError.message).toContain("null");
|
|
539
|
-
});
|
|
540
|
-
});
|
|
541
|
-
//# sourceMappingURL=event-bus.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.test.js","sourceRoot":"","sources":["../../test/event-bus.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor-integration.test.d.ts","sourceRoot":"","sources":["../../../test/executor/executor-integration.test.ts"],"names":[],"mappings":""}
|