semola 0.5.0 → 0.5.2
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/README.md +75 -20
- package/dist/api/core/index.cjs +206 -0
- package/dist/api/core/index.d.cts +21 -0
- package/dist/api/core/index.d.cts.map +1 -0
- package/dist/api/core/index.d.mts +21 -0
- package/dist/api/core/index.d.mts.map +1 -0
- package/dist/api/core/index.mjs +208 -0
- package/dist/api/core/index.mjs.map +1 -0
- package/dist/api/core/types.d.cts +107 -0
- package/dist/api/core/types.d.cts.map +1 -0
- package/dist/api/core/types.d.mts +107 -0
- package/dist/api/core/types.d.mts.map +1 -0
- package/dist/api/middleware/index.cjs +8 -0
- package/dist/api/middleware/index.d.cts +11 -0
- package/dist/api/middleware/index.d.cts.map +1 -0
- package/dist/api/middleware/index.d.mts +11 -0
- package/dist/api/middleware/index.d.mts.map +1 -0
- package/dist/api/middleware/index.mjs +10 -0
- package/dist/api/middleware/index.mjs.map +1 -0
- package/dist/api/middleware/types.d.cts +16 -0
- package/dist/api/middleware/types.d.cts.map +1 -0
- package/dist/api/middleware/types.d.mts +16 -0
- package/dist/api/middleware/types.d.mts.map +1 -0
- package/dist/api/openapi/index.cjs +254 -0
- package/dist/api/openapi/index.mjs +256 -0
- package/dist/api/openapi/index.mjs.map +1 -0
- package/dist/api/openapi/types.d.cts +60 -0
- package/dist/api/openapi/types.d.cts.map +1 -0
- package/dist/api/openapi/types.d.mts +60 -0
- package/dist/api/openapi/types.d.mts.map +1 -0
- package/dist/api/validation/index.cjs +64 -0
- package/dist/api/validation/index.mjs +61 -0
- package/dist/api/validation/index.mjs.map +1 -0
- package/dist/cache/types.d.cts +17 -0
- package/dist/cache/types.d.cts.map +1 -0
- package/dist/cache/types.d.mts +17 -0
- package/dist/cache/types.d.mts.map +1 -0
- package/dist/cron/scanner.cjs +237 -0
- package/dist/cron/scanner.mjs +238 -0
- package/dist/cron/scanner.mjs.map +1 -0
- package/dist/cron/types.d.cts +11 -0
- package/dist/cron/types.d.cts.map +1 -0
- package/dist/cron/types.d.mts +11 -0
- package/dist/cron/types.d.mts.map +1 -0
- package/dist/errors/types.d.cts +5 -0
- package/dist/errors/types.d.cts.map +1 -0
- package/dist/errors/types.d.mts +5 -0
- package/dist/errors/types.d.mts.map +1 -0
- package/dist/i18n/types.d.cts +13 -0
- package/dist/i18n/types.d.cts.map +1 -0
- package/dist/i18n/types.d.mts +13 -0
- package/dist/i18n/types.d.mts.map +1 -0
- package/dist/lib/api/index.cjs +5 -0
- package/dist/lib/api/index.d.cts +5 -0
- package/dist/lib/api/index.d.mts +5 -0
- package/dist/lib/api/index.mjs +3 -0
- package/dist/lib/cache/index.cjs +74 -0
- package/dist/lib/cache/index.d.cts +36 -0
- package/dist/lib/cache/index.d.cts.map +1 -0
- package/dist/lib/cache/index.d.mts +36 -0
- package/dist/lib/cache/index.d.mts.map +1 -0
- package/dist/lib/cache/index.mjs +75 -0
- package/dist/lib/cache/index.mjs.map +1 -0
- package/dist/lib/cron/index.cjs +276 -0
- package/dist/lib/cron/index.d.cts +39 -0
- package/dist/lib/cron/index.d.cts.map +1 -0
- package/dist/lib/cron/index.d.mts +39 -0
- package/dist/lib/cron/index.d.mts.map +1 -0
- package/dist/lib/cron/index.mjs +277 -0
- package/dist/lib/cron/index.mjs.map +1 -0
- package/dist/lib/errors/index.cjs +30 -0
- package/dist/lib/errors/index.d.cts +13 -0
- package/dist/lib/errors/index.d.cts.map +1 -0
- package/dist/lib/errors/index.d.mts +13 -0
- package/dist/lib/errors/index.d.mts.map +1 -0
- package/dist/lib/errors/index.mjs +28 -0
- package/dist/lib/errors/index.mjs.map +1 -0
- package/dist/lib/i18n/index.cjs +37 -0
- package/dist/lib/i18n/index.d.cts +20 -0
- package/dist/lib/i18n/index.d.cts.map +1 -0
- package/dist/lib/i18n/index.d.mts +20 -0
- package/dist/lib/i18n/index.d.mts.map +1 -0
- package/dist/lib/i18n/index.mjs +38 -0
- package/dist/lib/i18n/index.mjs.map +1 -0
- package/dist/lib/policy/index.cjs +99 -0
- package/dist/lib/policy/index.d.cts +21 -0
- package/dist/lib/policy/index.d.cts.map +1 -0
- package/dist/lib/policy/index.d.mts +21 -0
- package/dist/lib/policy/index.d.mts.map +1 -0
- package/dist/lib/policy/index.mjs +81 -0
- package/dist/lib/policy/index.mjs.map +1 -0
- package/dist/lib/prompts/index.cjs +409 -0
- package/dist/lib/prompts/index.d.cts +31 -0
- package/dist/lib/prompts/index.d.cts.map +1 -0
- package/dist/lib/prompts/index.d.mts +31 -0
- package/dist/lib/prompts/index.d.mts.map +1 -0
- package/dist/lib/prompts/index.mjs +405 -0
- package/dist/lib/prompts/index.mjs.map +1 -0
- package/dist/lib/pubsub/index.cjs +48 -0
- package/dist/lib/pubsub/index.d.cts +27 -0
- package/dist/lib/pubsub/index.d.cts.map +1 -0
- package/dist/lib/pubsub/index.d.mts +27 -0
- package/dist/lib/pubsub/index.d.mts.map +1 -0
- package/dist/lib/pubsub/index.mjs +49 -0
- package/dist/lib/pubsub/index.mjs.map +1 -0
- package/dist/lib/queue/index.cjs +182 -0
- package/dist/lib/queue/index.d.cts +32 -0
- package/dist/lib/queue/index.d.cts.map +1 -0
- package/dist/lib/queue/index.d.mts +32 -0
- package/dist/lib/queue/index.d.mts.map +1 -0
- package/dist/lib/queue/index.mjs +183 -0
- package/dist/lib/queue/index.mjs.map +1 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +80 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +1 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +80 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +1 -0
- package/dist/policy/helpers.cjs +206 -0
- package/dist/policy/helpers.d.cts +50 -0
- package/dist/policy/helpers.d.cts.map +1 -0
- package/dist/policy/helpers.d.mts +50 -0
- package/dist/policy/helpers.d.mts.map +1 -0
- package/dist/policy/helpers.mjs +190 -0
- package/dist/policy/helpers.mjs.map +1 -0
- package/dist/policy/types.d.cts +16 -0
- package/dist/policy/types.d.cts.map +1 -0
- package/dist/policy/types.d.mts +16 -0
- package/dist/policy/types.d.mts.map +1 -0
- package/dist/prompts/core/keys.cjs +165 -0
- package/dist/prompts/core/keys.mjs +167 -0
- package/dist/prompts/core/keys.mjs.map +1 -0
- package/dist/prompts/core/runtime.cjs +104 -0
- package/dist/prompts/core/runtime.mjs +106 -0
- package/dist/prompts/core/runtime.mjs.map +1 -0
- package/dist/prompts/core/session.cjs +98 -0
- package/dist/prompts/core/session.mjs +100 -0
- package/dist/prompts/core/session.mjs.map +1 -0
- package/dist/prompts/core/types.d.cts +21 -0
- package/dist/prompts/core/types.d.cts.map +1 -0
- package/dist/prompts/core/types.d.mts +21 -0
- package/dist/prompts/core/types.d.mts.map +1 -0
- package/dist/prompts/types.d.cts +52 -0
- package/dist/prompts/types.d.cts.map +1 -0
- package/dist/prompts/types.d.mts +52 -0
- package/dist/prompts/types.d.mts.map +1 -0
- package/dist/pubsub/types.d.cts +10 -0
- package/dist/pubsub/types.d.cts.map +1 -0
- package/dist/pubsub/types.d.mts +10 -0
- package/dist/pubsub/types.d.mts.map +1 -0
- package/dist/queue/types.d.cts +47 -0
- package/dist/queue/types.d.cts.map +1 -0
- package/dist/queue/types.d.mts +47 -0
- package/dist/queue/types.d.mts.map +1 -0
- package/package.json +86 -16
- package/dist/lib/api/core/index.d.ts +0 -15
- package/dist/lib/api/core/index.d.ts.map +0 -1
- package/dist/lib/api/core/index.js +0 -166
- package/dist/lib/api/core/index.js.map +0 -1
- package/dist/lib/api/core/index.test.d.ts +0 -2
- package/dist/lib/api/core/index.test.d.ts.map +0 -1
- package/dist/lib/api/core/index.test.js +0 -219
- package/dist/lib/api/core/index.test.js.map +0 -1
- package/dist/lib/api/core/types.d.ts +0 -102
- package/dist/lib/api/core/types.d.ts.map +0 -1
- package/dist/lib/api/core/types.js +0 -2
- package/dist/lib/api/core/types.js.map +0 -1
- package/dist/lib/api/index.d.ts +0 -5
- package/dist/lib/api/index.d.ts.map +0 -1
- package/dist/lib/api/index.js +0 -3
- package/dist/lib/api/index.js.map +0 -1
- package/dist/lib/api/middleware/index.d.ts +0 -7
- package/dist/lib/api/middleware/index.d.ts.map +0 -1
- package/dist/lib/api/middleware/index.js +0 -7
- package/dist/lib/api/middleware/index.js.map +0 -1
- package/dist/lib/api/middleware/index.test.d.ts +0 -2
- package/dist/lib/api/middleware/index.test.d.ts.map +0 -1
- package/dist/lib/api/middleware/index.test.js +0 -67
- package/dist/lib/api/middleware/index.test.js.map +0 -1
- package/dist/lib/api/middleware/types.d.ts +0 -12
- package/dist/lib/api/middleware/types.d.ts.map +0 -1
- package/dist/lib/api/middleware/types.js +0 -2
- package/dist/lib/api/middleware/types.js.map +0 -1
- package/dist/lib/api/openapi/index.d.ts +0 -31
- package/dist/lib/api/openapi/index.d.ts.map +0 -1
- package/dist/lib/api/openapi/index.js +0 -328
- package/dist/lib/api/openapi/index.js.map +0 -1
- package/dist/lib/api/openapi/index.test.d.ts +0 -2
- package/dist/lib/api/openapi/index.test.d.ts.map +0 -1
- package/dist/lib/api/openapi/index.test.js +0 -359
- package/dist/lib/api/openapi/index.test.js.map +0 -1
- package/dist/lib/api/openapi/types.d.ts +0 -57
- package/dist/lib/api/openapi/types.d.ts.map +0 -1
- package/dist/lib/api/openapi/types.js +0 -5
- package/dist/lib/api/openapi/types.js.map +0 -1
- package/dist/lib/api/validation/index.d.ts +0 -33
- package/dist/lib/api/validation/index.d.ts.map +0 -1
- package/dist/lib/api/validation/index.js +0 -81
- package/dist/lib/api/validation/index.js.map +0 -1
- package/dist/lib/api/validation/index.test.d.ts +0 -2
- package/dist/lib/api/validation/index.test.d.ts.map +0 -1
- package/dist/lib/api/validation/index.test.js +0 -135
- package/dist/lib/api/validation/index.test.js.map +0 -1
- package/dist/lib/cache/index.d.ts +0 -25
- package/dist/lib/cache/index.d.ts.map +0 -1
- package/dist/lib/cache/index.js +0 -62
- package/dist/lib/cache/index.js.map +0 -1
- package/dist/lib/cache/index.test.d.ts +0 -2
- package/dist/lib/cache/index.test.d.ts.map +0 -1
- package/dist/lib/cache/index.test.js +0 -314
- package/dist/lib/cache/index.test.js.map +0 -1
- package/dist/lib/cache/types.d.ts +0 -5
- package/dist/lib/cache/types.d.ts.map +0 -1
- package/dist/lib/cache/types.js +0 -2
- package/dist/lib/cache/types.js.map +0 -1
- package/dist/lib/errors/index.d.ts +0 -9
- package/dist/lib/errors/index.d.ts.map +0 -1
- package/dist/lib/errors/index.js +0 -25
- package/dist/lib/errors/index.js.map +0 -1
- package/dist/lib/errors/index.test.d.ts +0 -2
- package/dist/lib/errors/index.test.d.ts.map +0 -1
- package/dist/lib/errors/index.test.js +0 -197
- package/dist/lib/errors/index.test.js.map +0 -1
- package/dist/lib/errors/types.d.ts +0 -2
- package/dist/lib/errors/types.d.ts.map +0 -1
- package/dist/lib/errors/types.js +0 -2
- package/dist/lib/errors/types.js.map +0 -1
- package/dist/lib/i18n/index.d.ts +0 -18
- package/dist/lib/i18n/index.d.ts.map +0 -1
- package/dist/lib/i18n/index.js +0 -38
- package/dist/lib/i18n/index.js.map +0 -1
- package/dist/lib/i18n/index.test.d.ts +0 -2
- package/dist/lib/i18n/index.test.d.ts.map +0 -1
- package/dist/lib/i18n/index.test.js +0 -402
- package/dist/lib/i18n/index.test.js.map +0 -1
- package/dist/lib/i18n/types.d.ts +0 -15
- package/dist/lib/i18n/types.d.ts.map +0 -1
- package/dist/lib/i18n/types.js +0 -2
- package/dist/lib/i18n/types.js.map +0 -1
- package/dist/lib/policy/index.d.ts +0 -9
- package/dist/lib/policy/index.d.ts.map +0 -1
- package/dist/lib/policy/index.js +0 -51
- package/dist/lib/policy/index.js.map +0 -1
- package/dist/lib/policy/index.test.d.ts +0 -2
- package/dist/lib/policy/index.test.d.ts.map +0 -1
- package/dist/lib/policy/index.test.js +0 -328
- package/dist/lib/policy/index.test.js.map +0 -1
- package/dist/lib/policy/types.d.ts +0 -27
- package/dist/lib/policy/types.d.ts.map +0 -1
- package/dist/lib/policy/types.js +0 -2
- package/dist/lib/policy/types.js.map +0 -1
- package/dist/lib/pubsub/index.d.ts +0 -23
- package/dist/lib/pubsub/index.d.ts.map +0 -1
- package/dist/lib/pubsub/index.js +0 -55
- package/dist/lib/pubsub/index.js.map +0 -1
- package/dist/lib/pubsub/index.test.d.ts +0 -2
- package/dist/lib/pubsub/index.test.d.ts.map +0 -1
- package/dist/lib/pubsub/index.test.js +0 -550
- package/dist/lib/pubsub/index.test.js.map +0 -1
- package/dist/lib/pubsub/types.d.ts +0 -7
- package/dist/lib/pubsub/types.d.ts.map +0 -1
- package/dist/lib/pubsub/types.js +0 -2
- package/dist/lib/pubsub/types.js.map +0 -1
- package/dist/lib/queue/index.d.ts +0 -28
- package/dist/lib/queue/index.d.ts.map +0 -1
- package/dist/lib/queue/index.js +0 -211
- package/dist/lib/queue/index.js.map +0 -1
- package/dist/lib/queue/index.test.d.ts +0 -2
- package/dist/lib/queue/index.test.d.ts.map +0 -1
- package/dist/lib/queue/index.test.js +0 -740
- package/dist/lib/queue/index.test.js.map +0 -1
- package/dist/lib/queue/types.d.ts +0 -52
- package/dist/lib/queue/types.d.ts.map +0 -1
- package/dist/lib/queue/types.js +0 -2
- package/dist/lib/queue/types.js.map +0 -1
|
@@ -1,550 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "bun:test";
|
|
2
|
-
import { PubSub } from "./index.js";
|
|
3
|
-
class MockRedisClient {
|
|
4
|
-
subscriptions = new Map();
|
|
5
|
-
shouldFail = false;
|
|
6
|
-
setShouldFail(value) {
|
|
7
|
-
this.shouldFail = value;
|
|
8
|
-
}
|
|
9
|
-
async publish(channel, message) {
|
|
10
|
-
if (this.shouldFail) {
|
|
11
|
-
throw new Error("Redis connection error");
|
|
12
|
-
}
|
|
13
|
-
let count = 0;
|
|
14
|
-
// Trigger all channel subscriptions
|
|
15
|
-
const channelHandlers = this.subscriptions.get(channel);
|
|
16
|
-
if (channelHandlers) {
|
|
17
|
-
for (const handler of channelHandlers) {
|
|
18
|
-
await handler(message, channel);
|
|
19
|
-
count++;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return count;
|
|
23
|
-
}
|
|
24
|
-
async subscribe(channel, handler) {
|
|
25
|
-
if (this.shouldFail) {
|
|
26
|
-
throw new Error("Redis connection error");
|
|
27
|
-
}
|
|
28
|
-
const handlers = this.subscriptions.get(channel) ?? [];
|
|
29
|
-
handlers.push(handler);
|
|
30
|
-
this.subscriptions.set(channel, handlers);
|
|
31
|
-
return handlers.length;
|
|
32
|
-
}
|
|
33
|
-
async unsubscribe(channel) {
|
|
34
|
-
if (this.shouldFail) {
|
|
35
|
-
throw new Error("Redis connection error");
|
|
36
|
-
}
|
|
37
|
-
this.subscriptions.delete(channel);
|
|
38
|
-
}
|
|
39
|
-
clear() {
|
|
40
|
-
this.subscriptions.clear();
|
|
41
|
-
}
|
|
42
|
-
getSubscriptions() {
|
|
43
|
-
return this.subscriptions;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const createMockRedis = () => {
|
|
47
|
-
return new MockRedisClient();
|
|
48
|
-
};
|
|
49
|
-
describe("PubSub", () => {
|
|
50
|
-
describe("Channel mode", () => {
|
|
51
|
-
test("should publish and receive messages", async () => {
|
|
52
|
-
const redis = createMockRedis();
|
|
53
|
-
const pubsub = new PubSub({
|
|
54
|
-
subscriber: redis,
|
|
55
|
-
publisher: redis,
|
|
56
|
-
channel: "user-events",
|
|
57
|
-
});
|
|
58
|
-
const messages = [];
|
|
59
|
-
const [subscribeError, subscriberCount] = await pubsub.subscribe(async (message) => {
|
|
60
|
-
messages.push(message);
|
|
61
|
-
});
|
|
62
|
-
expect(subscribeError).toBeNull();
|
|
63
|
-
expect(subscriberCount).toBe(1);
|
|
64
|
-
expect(pubsub.isActive()).toBe(true);
|
|
65
|
-
const [publishError, count] = await pubsub.publish({
|
|
66
|
-
userId: "123",
|
|
67
|
-
action: "login",
|
|
68
|
-
});
|
|
69
|
-
expect(publishError).toBeNull();
|
|
70
|
-
expect(count).toBe(1);
|
|
71
|
-
// Wait for async message handling
|
|
72
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
73
|
-
expect(messages).toHaveLength(1);
|
|
74
|
-
expect(messages[0]).toEqual({ userId: "123", action: "login" });
|
|
75
|
-
});
|
|
76
|
-
test("should receive channel name in handler", async () => {
|
|
77
|
-
const redis = createMockRedis();
|
|
78
|
-
const pubsub = new PubSub({
|
|
79
|
-
subscriber: redis,
|
|
80
|
-
publisher: redis,
|
|
81
|
-
channel: "test-channel",
|
|
82
|
-
});
|
|
83
|
-
let receivedChannel = "";
|
|
84
|
-
await pubsub.subscribe(async (_message, channel) => {
|
|
85
|
-
receivedChannel = channel;
|
|
86
|
-
});
|
|
87
|
-
await pubsub.publish({ message: "test message" });
|
|
88
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
89
|
-
expect(receivedChannel).toBe("test-channel");
|
|
90
|
-
});
|
|
91
|
-
test("should unsubscribe cleanly", async () => {
|
|
92
|
-
const redis = createMockRedis();
|
|
93
|
-
const pubsub = new PubSub({
|
|
94
|
-
subscriber: redis,
|
|
95
|
-
publisher: redis,
|
|
96
|
-
channel: "test",
|
|
97
|
-
});
|
|
98
|
-
await pubsub.subscribe(async () => { });
|
|
99
|
-
expect(pubsub.isActive()).toBe(true);
|
|
100
|
-
const [error] = await pubsub.unsubscribe();
|
|
101
|
-
expect(error).toBeNull();
|
|
102
|
-
expect(pubsub.isActive()).toBe(false);
|
|
103
|
-
expect(redis.getSubscriptions().size).toBe(0);
|
|
104
|
-
});
|
|
105
|
-
test("should return error when subscribing twice", async () => {
|
|
106
|
-
const redis = createMockRedis();
|
|
107
|
-
const pubsub = new PubSub({
|
|
108
|
-
subscriber: redis,
|
|
109
|
-
publisher: redis,
|
|
110
|
-
channel: "test",
|
|
111
|
-
});
|
|
112
|
-
const [error1, count1] = await pubsub.subscribe(async () => { });
|
|
113
|
-
expect(error1).toBeNull();
|
|
114
|
-
expect(count1).toBe(1);
|
|
115
|
-
const [error2, count2] = await pubsub.subscribe(async () => { });
|
|
116
|
-
expect(error2).toEqual({
|
|
117
|
-
type: "SubscribeError",
|
|
118
|
-
message: "Already subscribed",
|
|
119
|
-
});
|
|
120
|
-
expect(count2).toBeNull();
|
|
121
|
-
});
|
|
122
|
-
test("should return subscriber count on successful subscribe", async () => {
|
|
123
|
-
const redis = createMockRedis();
|
|
124
|
-
const pubsub = new PubSub({
|
|
125
|
-
subscriber: redis,
|
|
126
|
-
publisher: redis,
|
|
127
|
-
channel: "test",
|
|
128
|
-
});
|
|
129
|
-
const [, count] = await pubsub.subscribe(async () => { });
|
|
130
|
-
expect(count).toBe(1);
|
|
131
|
-
});
|
|
132
|
-
test("should return null count on subscribe error", async () => {
|
|
133
|
-
const redis = createMockRedis();
|
|
134
|
-
const pubsub = new PubSub({
|
|
135
|
-
subscriber: redis,
|
|
136
|
-
publisher: redis,
|
|
137
|
-
channel: "test",
|
|
138
|
-
});
|
|
139
|
-
redis.setShouldFail(true);
|
|
140
|
-
const [, count] = await pubsub.subscribe(async () => { });
|
|
141
|
-
expect(count).toBeNull();
|
|
142
|
-
});
|
|
143
|
-
test("should increment subscriber count with multiple subscribers", async () => {
|
|
144
|
-
const redis = createMockRedis();
|
|
145
|
-
const pubsub1 = new PubSub({
|
|
146
|
-
subscriber: redis,
|
|
147
|
-
publisher: redis,
|
|
148
|
-
channel: "shared-channel",
|
|
149
|
-
});
|
|
150
|
-
const pubsub2 = new PubSub({
|
|
151
|
-
subscriber: redis,
|
|
152
|
-
publisher: redis,
|
|
153
|
-
channel: "shared-channel",
|
|
154
|
-
});
|
|
155
|
-
const pubsub3 = new PubSub({
|
|
156
|
-
subscriber: redis,
|
|
157
|
-
publisher: redis,
|
|
158
|
-
channel: "shared-channel",
|
|
159
|
-
});
|
|
160
|
-
const [, count1] = await pubsub1.subscribe(async () => { });
|
|
161
|
-
const [, count2] = await pubsub2.subscribe(async () => { });
|
|
162
|
-
const [, count3] = await pubsub3.subscribe(async () => { });
|
|
163
|
-
expect(count1).toBe(1);
|
|
164
|
-
expect(count2).toBe(2);
|
|
165
|
-
expect(count3).toBe(3);
|
|
166
|
-
});
|
|
167
|
-
test("should return error when unsubscribing without subscription", async () => {
|
|
168
|
-
const redis = createMockRedis();
|
|
169
|
-
const pubsub = new PubSub({
|
|
170
|
-
subscriber: redis,
|
|
171
|
-
publisher: redis,
|
|
172
|
-
channel: "test",
|
|
173
|
-
});
|
|
174
|
-
const [error] = await pubsub.unsubscribe();
|
|
175
|
-
expect(error).toEqual({
|
|
176
|
-
type: "UnsubscribeError",
|
|
177
|
-
message: "Not subscribed",
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
test("should handle multiple publish/subscribe cycles", async () => {
|
|
181
|
-
const redis = createMockRedis();
|
|
182
|
-
const pubsub = new PubSub({
|
|
183
|
-
subscriber: redis,
|
|
184
|
-
publisher: redis,
|
|
185
|
-
channel: "numbers",
|
|
186
|
-
});
|
|
187
|
-
// First cycle
|
|
188
|
-
let count1 = 0;
|
|
189
|
-
await pubsub.subscribe(async () => {
|
|
190
|
-
count1++;
|
|
191
|
-
});
|
|
192
|
-
await pubsub.publish({ value: 1 });
|
|
193
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
194
|
-
await pubsub.unsubscribe();
|
|
195
|
-
expect(count1).toBe(1);
|
|
196
|
-
// Second cycle
|
|
197
|
-
let count2 = 0;
|
|
198
|
-
await pubsub.subscribe(async () => {
|
|
199
|
-
count2++;
|
|
200
|
-
});
|
|
201
|
-
await pubsub.publish({ value: 2 });
|
|
202
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
203
|
-
await pubsub.unsubscribe();
|
|
204
|
-
expect(count2).toBe(1);
|
|
205
|
-
expect(count1).toBe(1); // Previous handler should not be called
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
describe("Multiple channels", () => {
|
|
209
|
-
test("should not receive messages from different channels", async () => {
|
|
210
|
-
const redis = createMockRedis();
|
|
211
|
-
const pubsub1 = new PubSub({
|
|
212
|
-
subscriber: redis,
|
|
213
|
-
publisher: redis,
|
|
214
|
-
channel: "channel1",
|
|
215
|
-
});
|
|
216
|
-
const messages = [];
|
|
217
|
-
await pubsub1.subscribe(async (message) => {
|
|
218
|
-
messages.push(message.message);
|
|
219
|
-
});
|
|
220
|
-
const pubsub2 = new PubSub({
|
|
221
|
-
subscriber: redis,
|
|
222
|
-
publisher: redis,
|
|
223
|
-
channel: "channel2",
|
|
224
|
-
});
|
|
225
|
-
await pubsub2.publish({ message: "should not receive" });
|
|
226
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
227
|
-
expect(messages).toHaveLength(0);
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
describe("Type safety", () => {
|
|
231
|
-
test("should work with object types", async () => {
|
|
232
|
-
const redis = createMockRedis();
|
|
233
|
-
const pubsub = new PubSub({
|
|
234
|
-
subscriber: redis,
|
|
235
|
-
publisher: redis,
|
|
236
|
-
channel: "users",
|
|
237
|
-
});
|
|
238
|
-
let received = null;
|
|
239
|
-
await pubsub.subscribe(async (message) => {
|
|
240
|
-
received = message;
|
|
241
|
-
});
|
|
242
|
-
await pubsub.publish({ name: "Alice", age: 30 });
|
|
243
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
244
|
-
expect(received).toEqual({ name: "Alice", age: 30 });
|
|
245
|
-
});
|
|
246
|
-
test("should work with arrays", async () => {
|
|
247
|
-
const redis = createMockRedis();
|
|
248
|
-
const pubsub = new PubSub({
|
|
249
|
-
subscriber: redis,
|
|
250
|
-
publisher: redis,
|
|
251
|
-
channel: "numbers",
|
|
252
|
-
});
|
|
253
|
-
let received = null;
|
|
254
|
-
await pubsub.subscribe(async (message) => {
|
|
255
|
-
received = message;
|
|
256
|
-
});
|
|
257
|
-
await pubsub.publish({ values: [1, 2, 3] });
|
|
258
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
259
|
-
expect(received).toEqual({ values: [1, 2, 3] });
|
|
260
|
-
});
|
|
261
|
-
test("should work with primitives", async () => {
|
|
262
|
-
const redis = createMockRedis();
|
|
263
|
-
const stringPubSub = new PubSub({
|
|
264
|
-
subscriber: redis,
|
|
265
|
-
publisher: redis,
|
|
266
|
-
channel: "strings",
|
|
267
|
-
});
|
|
268
|
-
const numberPubSub = new PubSub({
|
|
269
|
-
subscriber: redis,
|
|
270
|
-
publisher: redis,
|
|
271
|
-
channel: "numbers",
|
|
272
|
-
});
|
|
273
|
-
const boolPubSub = new PubSub({
|
|
274
|
-
subscriber: redis,
|
|
275
|
-
publisher: redis,
|
|
276
|
-
channel: "bools",
|
|
277
|
-
});
|
|
278
|
-
let str = "";
|
|
279
|
-
let num = 0;
|
|
280
|
-
let bool = false;
|
|
281
|
-
await stringPubSub.subscribe(async (message) => {
|
|
282
|
-
str = message.message;
|
|
283
|
-
});
|
|
284
|
-
await numberPubSub.subscribe(async (message) => {
|
|
285
|
-
num = message.value;
|
|
286
|
-
});
|
|
287
|
-
await boolPubSub.subscribe(async (message) => {
|
|
288
|
-
bool = message.value;
|
|
289
|
-
});
|
|
290
|
-
await stringPubSub.publish({ message: "hello" });
|
|
291
|
-
await numberPubSub.publish({ value: 42 });
|
|
292
|
-
await boolPubSub.publish({ value: true });
|
|
293
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
294
|
-
expect(str).toBe("hello");
|
|
295
|
-
expect(num).toBe(42);
|
|
296
|
-
expect(bool).toBe(true);
|
|
297
|
-
});
|
|
298
|
-
test("should work with nested objects", async () => {
|
|
299
|
-
const redis = createMockRedis();
|
|
300
|
-
const pubsub = new PubSub({ subscriber: redis, publisher: redis, channel: "complex" });
|
|
301
|
-
let received = null;
|
|
302
|
-
await pubsub.subscribe(async (message) => {
|
|
303
|
-
received = message;
|
|
304
|
-
});
|
|
305
|
-
await pubsub.publish({
|
|
306
|
-
user: { name: "Bob", profile: { age: 25 } },
|
|
307
|
-
});
|
|
308
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
309
|
-
expect(received).toEqual({
|
|
310
|
-
user: { name: "Bob", profile: { age: 25 } },
|
|
311
|
-
});
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
describe("Error handling", () => {
|
|
315
|
-
test("should handle serialization errors", async () => {
|
|
316
|
-
const redis = createMockRedis();
|
|
317
|
-
const pubsub = new PubSub({
|
|
318
|
-
subscriber: redis,
|
|
319
|
-
publisher: redis,
|
|
320
|
-
channel: "test",
|
|
321
|
-
});
|
|
322
|
-
const circular = { a: 1 };
|
|
323
|
-
circular.self = circular;
|
|
324
|
-
const [error, data] = await pubsub.publish(circular);
|
|
325
|
-
expect(error).toEqual({
|
|
326
|
-
type: "SerializationError",
|
|
327
|
-
message: "Unable to serialize message",
|
|
328
|
-
});
|
|
329
|
-
expect(data).toBeNull();
|
|
330
|
-
});
|
|
331
|
-
test("should handle publish errors", async () => {
|
|
332
|
-
const redis = createMockRedis();
|
|
333
|
-
const pubsub = new PubSub({
|
|
334
|
-
subscriber: redis,
|
|
335
|
-
publisher: redis,
|
|
336
|
-
channel: "test",
|
|
337
|
-
});
|
|
338
|
-
redis.setShouldFail(true);
|
|
339
|
-
const [error, data] = await pubsub.publish({ message: "message" });
|
|
340
|
-
expect(error).toEqual({
|
|
341
|
-
type: "PublishError",
|
|
342
|
-
message: "Unable to publish to test",
|
|
343
|
-
});
|
|
344
|
-
expect(data).toBeNull();
|
|
345
|
-
});
|
|
346
|
-
test("should handle subscribe errors", async () => {
|
|
347
|
-
const redis = createMockRedis();
|
|
348
|
-
const pubsub = new PubSub({
|
|
349
|
-
subscriber: redis,
|
|
350
|
-
publisher: redis,
|
|
351
|
-
channel: "test",
|
|
352
|
-
});
|
|
353
|
-
redis.setShouldFail(true);
|
|
354
|
-
const [error, count] = await pubsub.subscribe(async () => { });
|
|
355
|
-
expect(error).toEqual({
|
|
356
|
-
type: "SubscribeError",
|
|
357
|
-
message: "Unable to subscribe to test",
|
|
358
|
-
});
|
|
359
|
-
expect(count).toBeNull();
|
|
360
|
-
expect(pubsub.isActive()).toBe(false);
|
|
361
|
-
});
|
|
362
|
-
test("should handle unsubscribe errors", async () => {
|
|
363
|
-
const redis = createMockRedis();
|
|
364
|
-
const pubsub = new PubSub({
|
|
365
|
-
subscriber: redis,
|
|
366
|
-
publisher: redis,
|
|
367
|
-
channel: "test",
|
|
368
|
-
});
|
|
369
|
-
await pubsub.subscribe(async () => { });
|
|
370
|
-
redis.setShouldFail(true);
|
|
371
|
-
const [error, data] = await pubsub.unsubscribe();
|
|
372
|
-
expect(error).toEqual({
|
|
373
|
-
type: "UnsubscribeError",
|
|
374
|
-
message: "Unable to unsubscribe from test",
|
|
375
|
-
});
|
|
376
|
-
expect(data).toBeNull();
|
|
377
|
-
});
|
|
378
|
-
test("should handle invalid JSON gracefully", async () => {
|
|
379
|
-
const redis = createMockRedis();
|
|
380
|
-
const pubsub = new PubSub({
|
|
381
|
-
subscriber: redis,
|
|
382
|
-
publisher: redis,
|
|
383
|
-
channel: "test",
|
|
384
|
-
});
|
|
385
|
-
const messages = [];
|
|
386
|
-
await pubsub.subscribe(async (message) => {
|
|
387
|
-
messages.push(message);
|
|
388
|
-
});
|
|
389
|
-
// Simulate receiving invalid JSON
|
|
390
|
-
const handlers = redis.getSubscriptions().get("test");
|
|
391
|
-
const firstHandler = handlers?.[0];
|
|
392
|
-
if (firstHandler) {
|
|
393
|
-
await firstHandler("not valid json {", "test");
|
|
394
|
-
}
|
|
395
|
-
// Should not receive any messages due to parse error
|
|
396
|
-
expect(messages).toHaveLength(0);
|
|
397
|
-
// Subscription should still be active
|
|
398
|
-
expect(pubsub.isActive()).toBe(true);
|
|
399
|
-
});
|
|
400
|
-
test("should handle handler errors gracefully", async () => {
|
|
401
|
-
const redis = createMockRedis();
|
|
402
|
-
const pubsub = new PubSub({
|
|
403
|
-
subscriber: redis,
|
|
404
|
-
publisher: redis,
|
|
405
|
-
channel: "test",
|
|
406
|
-
});
|
|
407
|
-
let errorThrown = false;
|
|
408
|
-
await pubsub.subscribe(async () => {
|
|
409
|
-
errorThrown = true;
|
|
410
|
-
throw new Error("Handler error");
|
|
411
|
-
});
|
|
412
|
-
await pubsub.publish({ message: "test" });
|
|
413
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
414
|
-
// Handler was called and threw error
|
|
415
|
-
expect(errorThrown).toBe(true);
|
|
416
|
-
// Subscription should still be active despite handler error
|
|
417
|
-
expect(pubsub.isActive()).toBe(true);
|
|
418
|
-
});
|
|
419
|
-
test("should handle synchronous handler errors gracefully", async () => {
|
|
420
|
-
const redis = createMockRedis();
|
|
421
|
-
const pubsub = new PubSub({
|
|
422
|
-
subscriber: redis,
|
|
423
|
-
publisher: redis,
|
|
424
|
-
channel: "test",
|
|
425
|
-
});
|
|
426
|
-
let errorThrown = false;
|
|
427
|
-
await pubsub.subscribe(() => {
|
|
428
|
-
errorThrown = true;
|
|
429
|
-
throw new Error("Synchronous handler error");
|
|
430
|
-
});
|
|
431
|
-
await pubsub.publish({ message: "test" });
|
|
432
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
433
|
-
// Handler was called and threw error
|
|
434
|
-
expect(errorThrown).toBe(true);
|
|
435
|
-
// Subscription should still be active despite handler error
|
|
436
|
-
expect(pubsub.isActive()).toBe(true);
|
|
437
|
-
});
|
|
438
|
-
});
|
|
439
|
-
describe("Multiple instances", () => {
|
|
440
|
-
test("should support multiple PubSub instances on different channels", async () => {
|
|
441
|
-
const redis = createMockRedis();
|
|
442
|
-
const pubsub1 = new PubSub({
|
|
443
|
-
subscriber: redis,
|
|
444
|
-
publisher: redis,
|
|
445
|
-
channel: "channel1",
|
|
446
|
-
});
|
|
447
|
-
const pubsub2 = new PubSub({
|
|
448
|
-
subscriber: redis,
|
|
449
|
-
publisher: redis,
|
|
450
|
-
channel: "channel2",
|
|
451
|
-
});
|
|
452
|
-
const messages1 = [];
|
|
453
|
-
const messages2 = [];
|
|
454
|
-
await pubsub1.subscribe(async (message) => {
|
|
455
|
-
messages1.push(message.message);
|
|
456
|
-
});
|
|
457
|
-
await pubsub2.subscribe(async (message) => {
|
|
458
|
-
messages2.push(message.message);
|
|
459
|
-
});
|
|
460
|
-
await pubsub1.publish({ message: "message1" });
|
|
461
|
-
await pubsub2.publish({ message: "message2" });
|
|
462
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
463
|
-
expect(messages1).toEqual(["message1"]);
|
|
464
|
-
expect(messages2).toEqual(["message2"]);
|
|
465
|
-
});
|
|
466
|
-
test("should allow one instance to publish and another to receive", async () => {
|
|
467
|
-
const redis = createMockRedis();
|
|
468
|
-
const subscriber = new PubSub({
|
|
469
|
-
subscriber: redis,
|
|
470
|
-
publisher: redis,
|
|
471
|
-
channel: "events",
|
|
472
|
-
});
|
|
473
|
-
const publisher = new PubSub({
|
|
474
|
-
subscriber: redis,
|
|
475
|
-
publisher: redis,
|
|
476
|
-
channel: "events",
|
|
477
|
-
});
|
|
478
|
-
const messages = [];
|
|
479
|
-
await subscriber.subscribe(async (message) => {
|
|
480
|
-
messages.push(message);
|
|
481
|
-
});
|
|
482
|
-
await publisher.publish({ event: "test" });
|
|
483
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
484
|
-
expect(messages).toHaveLength(1);
|
|
485
|
-
expect(messages[0]).toEqual({ event: "test" });
|
|
486
|
-
});
|
|
487
|
-
});
|
|
488
|
-
describe("Lifecycle", () => {
|
|
489
|
-
test("should track subscription state correctly", async () => {
|
|
490
|
-
const redis = createMockRedis();
|
|
491
|
-
const pubsub = new PubSub({
|
|
492
|
-
subscriber: redis,
|
|
493
|
-
publisher: redis,
|
|
494
|
-
channel: "test",
|
|
495
|
-
});
|
|
496
|
-
expect(pubsub.isActive()).toBe(false);
|
|
497
|
-
await pubsub.subscribe(async () => { });
|
|
498
|
-
expect(pubsub.isActive()).toBe(true);
|
|
499
|
-
await pubsub.unsubscribe();
|
|
500
|
-
expect(pubsub.isActive()).toBe(false);
|
|
501
|
-
});
|
|
502
|
-
test("should clean up handler on unsubscribe", async () => {
|
|
503
|
-
const redis = createMockRedis();
|
|
504
|
-
const pubsub = new PubSub({
|
|
505
|
-
subscriber: redis,
|
|
506
|
-
publisher: redis,
|
|
507
|
-
channel: "test",
|
|
508
|
-
});
|
|
509
|
-
let callCount = 0;
|
|
510
|
-
await pubsub.subscribe(async () => {
|
|
511
|
-
callCount++;
|
|
512
|
-
});
|
|
513
|
-
await pubsub.publish({ message: "message1" });
|
|
514
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
515
|
-
expect(callCount).toBe(1);
|
|
516
|
-
await pubsub.unsubscribe();
|
|
517
|
-
// Subscribe new handler
|
|
518
|
-
await pubsub.subscribe(async () => {
|
|
519
|
-
callCount += 10;
|
|
520
|
-
});
|
|
521
|
-
await pubsub.publish({ message: "message2" });
|
|
522
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
523
|
-
expect(callCount).toBe(11); // Old handler not called, new one adds 10
|
|
524
|
-
});
|
|
525
|
-
test("should prevent concurrent unsubscribe calls", async () => {
|
|
526
|
-
const redis = createMockRedis();
|
|
527
|
-
const pubsub = new PubSub({
|
|
528
|
-
subscriber: redis,
|
|
529
|
-
publisher: redis,
|
|
530
|
-
channel: "test",
|
|
531
|
-
});
|
|
532
|
-
await pubsub.subscribe(async () => { });
|
|
533
|
-
expect(pubsub.isActive()).toBe(true);
|
|
534
|
-
// Attempt two concurrent unsubscribe calls using Promise.all
|
|
535
|
-
const results = await Promise.all([
|
|
536
|
-
pubsub.unsubscribe(),
|
|
537
|
-
pubsub.unsubscribe(),
|
|
538
|
-
]);
|
|
539
|
-
const [error1] = results[0];
|
|
540
|
-
const [error2] = results[1];
|
|
541
|
-
// Only one should succeed (null error), the other should fail
|
|
542
|
-
const successCount = [error1, error2].filter((e) => e === null).length;
|
|
543
|
-
const failureCount = [error1, error2].filter((e) => e !== null).length;
|
|
544
|
-
expect(successCount).toBe(1);
|
|
545
|
-
expect(failureCount).toBe(1);
|
|
546
|
-
expect(pubsub.isActive()).toBe(false);
|
|
547
|
-
});
|
|
548
|
-
});
|
|
549
|
-
});
|
|
550
|
-
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/lib/pubsub/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/pubsub/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAC9B,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,MAAM,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/lib/pubsub/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/pubsub/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { QueueOptions } from "./types.js";
|
|
2
|
-
export declare class Queue<T> {
|
|
3
|
-
private options;
|
|
4
|
-
private running;
|
|
5
|
-
private activeWorkers;
|
|
6
|
-
private retries;
|
|
7
|
-
private timeout;
|
|
8
|
-
private concurrency;
|
|
9
|
-
private pollInterval;
|
|
10
|
-
constructor(options: QueueOptions<T>);
|
|
11
|
-
enqueue(data: T): Promise<readonly [null, string] | readonly [{
|
|
12
|
-
readonly type: "QueueError";
|
|
13
|
-
readonly message: string;
|
|
14
|
-
}, null]>;
|
|
15
|
-
stop(): Promise<void>;
|
|
16
|
-
private waitForPollInterval;
|
|
17
|
-
private serializeJob;
|
|
18
|
-
private enqueueJobData;
|
|
19
|
-
private moveToDeadLetterQueue;
|
|
20
|
-
private formatErrorMessage;
|
|
21
|
-
private startWorkers;
|
|
22
|
-
private processJobs;
|
|
23
|
-
private handleJob;
|
|
24
|
-
private callOnError;
|
|
25
|
-
private callOnErrorForParseFailure;
|
|
26
|
-
private retryJob;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/queue/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAmB9D,qBAAa,KAAK,CAAC,CAAC;IAClB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;gBAEV,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAS9B,OAAO,CAAC,IAAI,EAAE,CAAC;;;;IAsBf,IAAI;IAWjB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,YAAY;YAIN,cAAc;YAKd,qBAAqB;IAWnC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,YAAY;YAMN,WAAW;YAkDX,SAAS;YA6ET,WAAW;YAkBX,0BAA0B;YAmB1B,QAAQ;CA2BvB"}
|