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.
Files changed (273) hide show
  1. package/README.md +75 -20
  2. package/dist/api/core/index.cjs +206 -0
  3. package/dist/api/core/index.d.cts +21 -0
  4. package/dist/api/core/index.d.cts.map +1 -0
  5. package/dist/api/core/index.d.mts +21 -0
  6. package/dist/api/core/index.d.mts.map +1 -0
  7. package/dist/api/core/index.mjs +208 -0
  8. package/dist/api/core/index.mjs.map +1 -0
  9. package/dist/api/core/types.d.cts +107 -0
  10. package/dist/api/core/types.d.cts.map +1 -0
  11. package/dist/api/core/types.d.mts +107 -0
  12. package/dist/api/core/types.d.mts.map +1 -0
  13. package/dist/api/middleware/index.cjs +8 -0
  14. package/dist/api/middleware/index.d.cts +11 -0
  15. package/dist/api/middleware/index.d.cts.map +1 -0
  16. package/dist/api/middleware/index.d.mts +11 -0
  17. package/dist/api/middleware/index.d.mts.map +1 -0
  18. package/dist/api/middleware/index.mjs +10 -0
  19. package/dist/api/middleware/index.mjs.map +1 -0
  20. package/dist/api/middleware/types.d.cts +16 -0
  21. package/dist/api/middleware/types.d.cts.map +1 -0
  22. package/dist/api/middleware/types.d.mts +16 -0
  23. package/dist/api/middleware/types.d.mts.map +1 -0
  24. package/dist/api/openapi/index.cjs +254 -0
  25. package/dist/api/openapi/index.mjs +256 -0
  26. package/dist/api/openapi/index.mjs.map +1 -0
  27. package/dist/api/openapi/types.d.cts +60 -0
  28. package/dist/api/openapi/types.d.cts.map +1 -0
  29. package/dist/api/openapi/types.d.mts +60 -0
  30. package/dist/api/openapi/types.d.mts.map +1 -0
  31. package/dist/api/validation/index.cjs +64 -0
  32. package/dist/api/validation/index.mjs +61 -0
  33. package/dist/api/validation/index.mjs.map +1 -0
  34. package/dist/cache/types.d.cts +17 -0
  35. package/dist/cache/types.d.cts.map +1 -0
  36. package/dist/cache/types.d.mts +17 -0
  37. package/dist/cache/types.d.mts.map +1 -0
  38. package/dist/cron/scanner.cjs +237 -0
  39. package/dist/cron/scanner.mjs +238 -0
  40. package/dist/cron/scanner.mjs.map +1 -0
  41. package/dist/cron/types.d.cts +11 -0
  42. package/dist/cron/types.d.cts.map +1 -0
  43. package/dist/cron/types.d.mts +11 -0
  44. package/dist/cron/types.d.mts.map +1 -0
  45. package/dist/errors/types.d.cts +5 -0
  46. package/dist/errors/types.d.cts.map +1 -0
  47. package/dist/errors/types.d.mts +5 -0
  48. package/dist/errors/types.d.mts.map +1 -0
  49. package/dist/i18n/types.d.cts +13 -0
  50. package/dist/i18n/types.d.cts.map +1 -0
  51. package/dist/i18n/types.d.mts +13 -0
  52. package/dist/i18n/types.d.mts.map +1 -0
  53. package/dist/lib/api/index.cjs +5 -0
  54. package/dist/lib/api/index.d.cts +5 -0
  55. package/dist/lib/api/index.d.mts +5 -0
  56. package/dist/lib/api/index.mjs +3 -0
  57. package/dist/lib/cache/index.cjs +74 -0
  58. package/dist/lib/cache/index.d.cts +36 -0
  59. package/dist/lib/cache/index.d.cts.map +1 -0
  60. package/dist/lib/cache/index.d.mts +36 -0
  61. package/dist/lib/cache/index.d.mts.map +1 -0
  62. package/dist/lib/cache/index.mjs +75 -0
  63. package/dist/lib/cache/index.mjs.map +1 -0
  64. package/dist/lib/cron/index.cjs +276 -0
  65. package/dist/lib/cron/index.d.cts +39 -0
  66. package/dist/lib/cron/index.d.cts.map +1 -0
  67. package/dist/lib/cron/index.d.mts +39 -0
  68. package/dist/lib/cron/index.d.mts.map +1 -0
  69. package/dist/lib/cron/index.mjs +277 -0
  70. package/dist/lib/cron/index.mjs.map +1 -0
  71. package/dist/lib/errors/index.cjs +30 -0
  72. package/dist/lib/errors/index.d.cts +13 -0
  73. package/dist/lib/errors/index.d.cts.map +1 -0
  74. package/dist/lib/errors/index.d.mts +13 -0
  75. package/dist/lib/errors/index.d.mts.map +1 -0
  76. package/dist/lib/errors/index.mjs +28 -0
  77. package/dist/lib/errors/index.mjs.map +1 -0
  78. package/dist/lib/i18n/index.cjs +37 -0
  79. package/dist/lib/i18n/index.d.cts +20 -0
  80. package/dist/lib/i18n/index.d.cts.map +1 -0
  81. package/dist/lib/i18n/index.d.mts +20 -0
  82. package/dist/lib/i18n/index.d.mts.map +1 -0
  83. package/dist/lib/i18n/index.mjs +38 -0
  84. package/dist/lib/i18n/index.mjs.map +1 -0
  85. package/dist/lib/policy/index.cjs +99 -0
  86. package/dist/lib/policy/index.d.cts +21 -0
  87. package/dist/lib/policy/index.d.cts.map +1 -0
  88. package/dist/lib/policy/index.d.mts +21 -0
  89. package/dist/lib/policy/index.d.mts.map +1 -0
  90. package/dist/lib/policy/index.mjs +81 -0
  91. package/dist/lib/policy/index.mjs.map +1 -0
  92. package/dist/lib/prompts/index.cjs +409 -0
  93. package/dist/lib/prompts/index.d.cts +31 -0
  94. package/dist/lib/prompts/index.d.cts.map +1 -0
  95. package/dist/lib/prompts/index.d.mts +31 -0
  96. package/dist/lib/prompts/index.d.mts.map +1 -0
  97. package/dist/lib/prompts/index.mjs +405 -0
  98. package/dist/lib/prompts/index.mjs.map +1 -0
  99. package/dist/lib/pubsub/index.cjs +48 -0
  100. package/dist/lib/pubsub/index.d.cts +27 -0
  101. package/dist/lib/pubsub/index.d.cts.map +1 -0
  102. package/dist/lib/pubsub/index.d.mts +27 -0
  103. package/dist/lib/pubsub/index.d.mts.map +1 -0
  104. package/dist/lib/pubsub/index.mjs +49 -0
  105. package/dist/lib/pubsub/index.mjs.map +1 -0
  106. package/dist/lib/queue/index.cjs +182 -0
  107. package/dist/lib/queue/index.d.cts +32 -0
  108. package/dist/lib/queue/index.d.cts.map +1 -0
  109. package/dist/lib/queue/index.d.mts +32 -0
  110. package/dist/lib/queue/index.d.mts.map +1 -0
  111. package/dist/lib/queue/index.mjs +183 -0
  112. package/dist/lib/queue/index.mjs.map +1 -0
  113. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +80 -0
  114. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +1 -0
  115. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +80 -0
  116. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +1 -0
  117. package/dist/policy/helpers.cjs +206 -0
  118. package/dist/policy/helpers.d.cts +50 -0
  119. package/dist/policy/helpers.d.cts.map +1 -0
  120. package/dist/policy/helpers.d.mts +50 -0
  121. package/dist/policy/helpers.d.mts.map +1 -0
  122. package/dist/policy/helpers.mjs +190 -0
  123. package/dist/policy/helpers.mjs.map +1 -0
  124. package/dist/policy/types.d.cts +16 -0
  125. package/dist/policy/types.d.cts.map +1 -0
  126. package/dist/policy/types.d.mts +16 -0
  127. package/dist/policy/types.d.mts.map +1 -0
  128. package/dist/prompts/core/keys.cjs +165 -0
  129. package/dist/prompts/core/keys.mjs +167 -0
  130. package/dist/prompts/core/keys.mjs.map +1 -0
  131. package/dist/prompts/core/runtime.cjs +104 -0
  132. package/dist/prompts/core/runtime.mjs +106 -0
  133. package/dist/prompts/core/runtime.mjs.map +1 -0
  134. package/dist/prompts/core/session.cjs +98 -0
  135. package/dist/prompts/core/session.mjs +100 -0
  136. package/dist/prompts/core/session.mjs.map +1 -0
  137. package/dist/prompts/core/types.d.cts +21 -0
  138. package/dist/prompts/core/types.d.cts.map +1 -0
  139. package/dist/prompts/core/types.d.mts +21 -0
  140. package/dist/prompts/core/types.d.mts.map +1 -0
  141. package/dist/prompts/types.d.cts +52 -0
  142. package/dist/prompts/types.d.cts.map +1 -0
  143. package/dist/prompts/types.d.mts +52 -0
  144. package/dist/prompts/types.d.mts.map +1 -0
  145. package/dist/pubsub/types.d.cts +10 -0
  146. package/dist/pubsub/types.d.cts.map +1 -0
  147. package/dist/pubsub/types.d.mts +10 -0
  148. package/dist/pubsub/types.d.mts.map +1 -0
  149. package/dist/queue/types.d.cts +47 -0
  150. package/dist/queue/types.d.cts.map +1 -0
  151. package/dist/queue/types.d.mts +47 -0
  152. package/dist/queue/types.d.mts.map +1 -0
  153. package/package.json +86 -16
  154. package/dist/lib/api/core/index.d.ts +0 -15
  155. package/dist/lib/api/core/index.d.ts.map +0 -1
  156. package/dist/lib/api/core/index.js +0 -166
  157. package/dist/lib/api/core/index.js.map +0 -1
  158. package/dist/lib/api/core/index.test.d.ts +0 -2
  159. package/dist/lib/api/core/index.test.d.ts.map +0 -1
  160. package/dist/lib/api/core/index.test.js +0 -219
  161. package/dist/lib/api/core/index.test.js.map +0 -1
  162. package/dist/lib/api/core/types.d.ts +0 -102
  163. package/dist/lib/api/core/types.d.ts.map +0 -1
  164. package/dist/lib/api/core/types.js +0 -2
  165. package/dist/lib/api/core/types.js.map +0 -1
  166. package/dist/lib/api/index.d.ts +0 -5
  167. package/dist/lib/api/index.d.ts.map +0 -1
  168. package/dist/lib/api/index.js +0 -3
  169. package/dist/lib/api/index.js.map +0 -1
  170. package/dist/lib/api/middleware/index.d.ts +0 -7
  171. package/dist/lib/api/middleware/index.d.ts.map +0 -1
  172. package/dist/lib/api/middleware/index.js +0 -7
  173. package/dist/lib/api/middleware/index.js.map +0 -1
  174. package/dist/lib/api/middleware/index.test.d.ts +0 -2
  175. package/dist/lib/api/middleware/index.test.d.ts.map +0 -1
  176. package/dist/lib/api/middleware/index.test.js +0 -67
  177. package/dist/lib/api/middleware/index.test.js.map +0 -1
  178. package/dist/lib/api/middleware/types.d.ts +0 -12
  179. package/dist/lib/api/middleware/types.d.ts.map +0 -1
  180. package/dist/lib/api/middleware/types.js +0 -2
  181. package/dist/lib/api/middleware/types.js.map +0 -1
  182. package/dist/lib/api/openapi/index.d.ts +0 -31
  183. package/dist/lib/api/openapi/index.d.ts.map +0 -1
  184. package/dist/lib/api/openapi/index.js +0 -328
  185. package/dist/lib/api/openapi/index.js.map +0 -1
  186. package/dist/lib/api/openapi/index.test.d.ts +0 -2
  187. package/dist/lib/api/openapi/index.test.d.ts.map +0 -1
  188. package/dist/lib/api/openapi/index.test.js +0 -359
  189. package/dist/lib/api/openapi/index.test.js.map +0 -1
  190. package/dist/lib/api/openapi/types.d.ts +0 -57
  191. package/dist/lib/api/openapi/types.d.ts.map +0 -1
  192. package/dist/lib/api/openapi/types.js +0 -5
  193. package/dist/lib/api/openapi/types.js.map +0 -1
  194. package/dist/lib/api/validation/index.d.ts +0 -33
  195. package/dist/lib/api/validation/index.d.ts.map +0 -1
  196. package/dist/lib/api/validation/index.js +0 -81
  197. package/dist/lib/api/validation/index.js.map +0 -1
  198. package/dist/lib/api/validation/index.test.d.ts +0 -2
  199. package/dist/lib/api/validation/index.test.d.ts.map +0 -1
  200. package/dist/lib/api/validation/index.test.js +0 -135
  201. package/dist/lib/api/validation/index.test.js.map +0 -1
  202. package/dist/lib/cache/index.d.ts +0 -25
  203. package/dist/lib/cache/index.d.ts.map +0 -1
  204. package/dist/lib/cache/index.js +0 -62
  205. package/dist/lib/cache/index.js.map +0 -1
  206. package/dist/lib/cache/index.test.d.ts +0 -2
  207. package/dist/lib/cache/index.test.d.ts.map +0 -1
  208. package/dist/lib/cache/index.test.js +0 -314
  209. package/dist/lib/cache/index.test.js.map +0 -1
  210. package/dist/lib/cache/types.d.ts +0 -5
  211. package/dist/lib/cache/types.d.ts.map +0 -1
  212. package/dist/lib/cache/types.js +0 -2
  213. package/dist/lib/cache/types.js.map +0 -1
  214. package/dist/lib/errors/index.d.ts +0 -9
  215. package/dist/lib/errors/index.d.ts.map +0 -1
  216. package/dist/lib/errors/index.js +0 -25
  217. package/dist/lib/errors/index.js.map +0 -1
  218. package/dist/lib/errors/index.test.d.ts +0 -2
  219. package/dist/lib/errors/index.test.d.ts.map +0 -1
  220. package/dist/lib/errors/index.test.js +0 -197
  221. package/dist/lib/errors/index.test.js.map +0 -1
  222. package/dist/lib/errors/types.d.ts +0 -2
  223. package/dist/lib/errors/types.d.ts.map +0 -1
  224. package/dist/lib/errors/types.js +0 -2
  225. package/dist/lib/errors/types.js.map +0 -1
  226. package/dist/lib/i18n/index.d.ts +0 -18
  227. package/dist/lib/i18n/index.d.ts.map +0 -1
  228. package/dist/lib/i18n/index.js +0 -38
  229. package/dist/lib/i18n/index.js.map +0 -1
  230. package/dist/lib/i18n/index.test.d.ts +0 -2
  231. package/dist/lib/i18n/index.test.d.ts.map +0 -1
  232. package/dist/lib/i18n/index.test.js +0 -402
  233. package/dist/lib/i18n/index.test.js.map +0 -1
  234. package/dist/lib/i18n/types.d.ts +0 -15
  235. package/dist/lib/i18n/types.d.ts.map +0 -1
  236. package/dist/lib/i18n/types.js +0 -2
  237. package/dist/lib/i18n/types.js.map +0 -1
  238. package/dist/lib/policy/index.d.ts +0 -9
  239. package/dist/lib/policy/index.d.ts.map +0 -1
  240. package/dist/lib/policy/index.js +0 -51
  241. package/dist/lib/policy/index.js.map +0 -1
  242. package/dist/lib/policy/index.test.d.ts +0 -2
  243. package/dist/lib/policy/index.test.d.ts.map +0 -1
  244. package/dist/lib/policy/index.test.js +0 -328
  245. package/dist/lib/policy/index.test.js.map +0 -1
  246. package/dist/lib/policy/types.d.ts +0 -27
  247. package/dist/lib/policy/types.d.ts.map +0 -1
  248. package/dist/lib/policy/types.js +0 -2
  249. package/dist/lib/policy/types.js.map +0 -1
  250. package/dist/lib/pubsub/index.d.ts +0 -23
  251. package/dist/lib/pubsub/index.d.ts.map +0 -1
  252. package/dist/lib/pubsub/index.js +0 -55
  253. package/dist/lib/pubsub/index.js.map +0 -1
  254. package/dist/lib/pubsub/index.test.d.ts +0 -2
  255. package/dist/lib/pubsub/index.test.d.ts.map +0 -1
  256. package/dist/lib/pubsub/index.test.js +0 -550
  257. package/dist/lib/pubsub/index.test.js.map +0 -1
  258. package/dist/lib/pubsub/types.d.ts +0 -7
  259. package/dist/lib/pubsub/types.d.ts.map +0 -1
  260. package/dist/lib/pubsub/types.js +0 -2
  261. package/dist/lib/pubsub/types.js.map +0 -1
  262. package/dist/lib/queue/index.d.ts +0 -28
  263. package/dist/lib/queue/index.d.ts.map +0 -1
  264. package/dist/lib/queue/index.js +0 -211
  265. package/dist/lib/queue/index.js.map +0 -1
  266. package/dist/lib/queue/index.test.d.ts +0 -2
  267. package/dist/lib/queue/index.test.d.ts.map +0 -1
  268. package/dist/lib/queue/index.test.js +0 -740
  269. package/dist/lib/queue/index.test.js.map +0 -1
  270. package/dist/lib/queue/types.d.ts +0 -52
  271. package/dist/lib/queue/types.d.ts.map +0 -1
  272. package/dist/lib/queue/types.js +0 -2
  273. 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,7 +0,0 @@
1
- export type PubSubOptions = {
2
- subscriber: Bun.RedisClient;
3
- publisher: Bun.RedisClient;
4
- channel: string;
5
- };
6
- export type MessageHandler<T> = (message: T, channel: string) => void | Promise<void>;
7
- //# sourceMappingURL=types.d.ts.map
@@ -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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -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"}