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,135 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { z } from "zod";
3
- import { validateBody, validateCookies, validateHeaders, validateQuery, validateSchema, } from "./index.js";
4
- describe("Validation Module", () => {
5
- describe("validateSchema", () => {
6
- test("should format validation errors into a readable string", async () => {
7
- const schema = z.object({
8
- user: z.object({
9
- email: z.string().email(),
10
- }),
11
- age: z.number(),
12
- });
13
- const [error, data] = await validateSchema(schema, {
14
- user: { email: "invalid" },
15
- });
16
- expect(data).toBeNull();
17
- expect(error?.message).toContain("user.email:");
18
- expect(error?.message).toContain("age:");
19
- });
20
- });
21
- describe("validateBody", () => {
22
- test("should validate JSON body and return parsed data", async () => {
23
- const schema = z.object({ id: z.number() });
24
- const req = new Request("http://localhost", {
25
- method: "POST",
26
- headers: { "Content-Type": "application/json" },
27
- body: JSON.stringify({ id: 123 }),
28
- });
29
- const [error, data] = await validateBody(req, schema);
30
- expect(error).toBeNull();
31
- expect(data).toEqual({ id: 123 });
32
- });
33
- test("should return ParseError for malformed JSON", async () => {
34
- const req = new Request("http://localhost", {
35
- method: "POST",
36
- headers: { "Content-Type": "application/json" },
37
- body: "{ invalid json }",
38
- });
39
- const [error] = await validateBody(req, z.any());
40
- expect(error?.type).toBe("ParseError");
41
- });
42
- test("should skip validation if Content-Type is not JSON", async () => {
43
- const req = new Request("http://localhost", {
44
- method: "POST",
45
- headers: { "Content-Type": "text/plain" },
46
- body: "hello",
47
- });
48
- const [error, data] = await validateBody(req, z.string());
49
- expect(error).toBeNull();
50
- expect(data).toBeTrue();
51
- });
52
- test("should cache parsed body and reuse on subsequent calls", async () => {
53
- const schema = z.object({ name: z.string() });
54
- const req = new Request("http://localhost", {
55
- method: "POST",
56
- headers: { "Content-Type": "application/json" },
57
- body: JSON.stringify({ name: "test" }),
58
- });
59
- const bodyCache = { parsed: false, value: undefined };
60
- const [err1, data1] = await validateBody(req, schema, bodyCache);
61
- expect(err1).toBeNull();
62
- expect(data1).toEqual({ name: "test" });
63
- expect(bodyCache.parsed).toBe(true);
64
- expect(bodyCache.value).toEqual({ name: "test" });
65
- // Second call should use cached value (would fail without cache since body is consumed)
66
- const [err2, data2] = await validateBody(req, schema, bodyCache);
67
- expect(err2).toBeNull();
68
- expect(data2).toEqual({ name: "test" });
69
- });
70
- test("should validate cached body against different schemas", async () => {
71
- const partialSchema = z.object({ name: z.string() });
72
- const fullSchema = z.object({ name: z.string(), age: z.number() });
73
- const req = new Request("http://localhost", {
74
- method: "POST",
75
- headers: { "Content-Type": "application/json" },
76
- body: JSON.stringify({ name: "test", age: 25 }),
77
- });
78
- const bodyCache = { parsed: false, value: undefined };
79
- // First validation with partial schema
80
- const [err1, data1] = await validateBody(req, partialSchema, bodyCache);
81
- expect(err1).toBeNull();
82
- expect(data1).toEqual({ name: "test" });
83
- // Second validation with full schema using cached body
84
- const [err2, data2] = await validateBody(req, fullSchema, bodyCache);
85
- expect(err2).toBeNull();
86
- expect(data2).toEqual({ name: "test", age: 25 });
87
- });
88
- });
89
- describe("validateQuery", () => {
90
- test("should handle single and multiple query parameters", async () => {
91
- const schema = z.object({
92
- filter: z.string(),
93
- tags: z.array(z.string()),
94
- });
95
- const req = new Request("http://localhost?filter=active&tags=a&tags=b");
96
- const [error, data] = await validateQuery(req, schema);
97
- expect(error).toBeNull();
98
- expect(data).toEqual({ filter: "active", tags: ["a", "b"] });
99
- });
100
- });
101
- describe("validateHeaders", () => {
102
- test("should validate normalized lowercase headers", async () => {
103
- const schema = z.object({
104
- "x-api-key": z.string(),
105
- });
106
- const req = new Request("http://localhost", {
107
- headers: { "X-API-KEY": "secret-123" },
108
- });
109
- const [error, data] = await validateHeaders(req, schema);
110
- expect(error).toBeNull();
111
- expect(data).toEqual({ "x-api-key": "secret-123" });
112
- });
113
- });
114
- describe("validateCookies", () => {
115
- test("should parse and validate cookies", async () => {
116
- const schema = z.object({
117
- theme: z.enum(["light", "dark"]),
118
- session: z.string(),
119
- });
120
- const req = new Request("http://localhost", {
121
- headers: { cookie: "theme=dark; session=abc" },
122
- });
123
- const [error, data] = await validateCookies(req, schema);
124
- expect(error).toBeNull();
125
- expect(data).toEqual({ theme: "dark", session: "abc" });
126
- });
127
- test("should return error when required cookie is missing", async () => {
128
- const schema = z.object({ requiredCookie: z.string() });
129
- const req = new Request("http://localhost");
130
- const [error] = await validateCookies(req, schema);
131
- expect(error?.message).toContain("requiredCookie:");
132
- });
133
- });
134
- });
135
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/lib/api/validation/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import type { CacheOptions } from "./types.js";
2
- export declare class Cache<T> {
3
- private options;
4
- constructor(options: CacheOptions);
5
- get(key: string): Promise<readonly [{
6
- readonly type: "CacheError";
7
- readonly message: string;
8
- }, null] | readonly [{
9
- readonly type: "NotFoundError";
10
- readonly message: string;
11
- }, null] | readonly [null, T | null]>;
12
- set(key: string, value: T): Promise<readonly [{
13
- readonly type: "CacheError";
14
- readonly message: string;
15
- }, null] | readonly [null, T] | readonly [{
16
- readonly type: "InvalidTTLError";
17
- readonly message: string;
18
- }, null]>;
19
- delete(key: string): Promise<readonly [{
20
- readonly type: "CacheError";
21
- readonly message: string;
22
- }, null] | readonly [null, number | null]>;
23
- private isTTLValid;
24
- }
25
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,KAAK,CAAC,CAAC;IAClB,OAAO,CAAC,OAAO,CAAe;gBAEX,OAAO,EAAE,YAAY;IAI3B,GAAG,CAAC,GAAG,EAAE,MAAM;;;;;;;IAoBf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;;;;;;;IAiCzB,MAAM,CAAC,GAAG,EAAE,MAAM;;;;IAU/B,OAAO,CAAC,UAAU;CAgBnB"}
@@ -1,62 +0,0 @@
1
- import { err, mightThrow, mightThrowSync, ok } from "../errors/index.js";
2
- export class Cache {
3
- options;
4
- constructor(options) {
5
- this.options = options;
6
- }
7
- async get(key) {
8
- const [error, value] = await mightThrow(this.options.redis.get(key));
9
- if (error) {
10
- return err("CacheError", `Unable to get value for key ${key}`);
11
- }
12
- if (!value) {
13
- return err("NotFoundError", `Key ${key} not found`);
14
- }
15
- const [parseError, parsed] = mightThrowSync(() => JSON.parse(value));
16
- if (parseError) {
17
- return err("CacheError", `Unable to parse value for key ${key}`);
18
- }
19
- return ok(parsed);
20
- }
21
- async set(key, value) {
22
- const [stringifyError, stringified] = mightThrowSync(() => JSON.stringify(value));
23
- if (stringifyError) {
24
- return err("CacheError", `Unable to stringify value for key ${key}`);
25
- }
26
- if (!stringified) {
27
- return err("CacheError", `Unable to stringify value for key ${key}`);
28
- }
29
- if (!this.isTTLValid()) {
30
- return err("InvalidTTLError", `Unable to save records with ttl equal to ${this.options.ttl}`);
31
- }
32
- const [setError] = await mightThrow(this.options.ttl
33
- ? this.options.redis.set(key, stringified, "PX", this.options.ttl)
34
- : this.options.redis.set(key, stringified));
35
- if (setError) {
36
- return err("CacheError", `Unable to set value for key ${key}`);
37
- }
38
- return ok(value);
39
- }
40
- async delete(key) {
41
- const [error, data] = await mightThrow(this.options.redis.del(key));
42
- if (error) {
43
- return err("CacheError", `Unable to delete key ${key}`);
44
- }
45
- return ok(data);
46
- }
47
- isTTLValid() {
48
- const { ttl } = this.options;
49
- if (ttl === undefined || ttl === null)
50
- return true;
51
- // ttl is now set to a numeric value insted of not being provided
52
- // inside the options.
53
- if (!Number.isFinite(ttl))
54
- return false;
55
- if (!Number.isInteger(ttl))
56
- return false;
57
- if (ttl < 0)
58
- return false;
59
- return true;
60
- }
61
- }
62
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/cache/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/index.test.ts"],"names":[],"mappings":""}
@@ -1,314 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { Cache } from "./index.js";
3
- // Mock Redis client for testing
4
- class MockRedisClient {
5
- store = new Map();
6
- shouldFail = false;
7
- setShouldFail(value) {
8
- this.shouldFail = value;
9
- }
10
- async get(key) {
11
- if (this.shouldFail) {
12
- throw new Error("Redis connection error");
13
- }
14
- return this.store.get(key);
15
- }
16
- async set(key, value) {
17
- if (this.shouldFail) {
18
- throw new Error("Redis connection error");
19
- }
20
- this.store.set(key, value);
21
- return "OK";
22
- }
23
- async del(key) {
24
- if (this.shouldFail) {
25
- throw new Error("Redis connection error");
26
- }
27
- const existed = this.store.has(key);
28
- if (!existed) {
29
- return 0;
30
- }
31
- this.store.delete(key);
32
- return 1;
33
- }
34
- clear() {
35
- this.store.clear();
36
- }
37
- getStore() {
38
- return this.store;
39
- }
40
- }
41
- // Helper to create a properly typed mock redis client for testing
42
- const createMockRedis = () => {
43
- return new MockRedisClient();
44
- };
45
- describe("Cache", () => {
46
- describe("get", () => {
47
- test("should retrieve and parse a cached value", async () => {
48
- const redis = createMockRedis();
49
- const cache = new Cache({ redis });
50
- await redis.set("user:1", JSON.stringify({ name: "John" }));
51
- const [error, data] = await cache.get("user:1");
52
- expect(error).toBeNull();
53
- expect(data).toEqual({ name: "John" });
54
- });
55
- test("should return NotFoundError when key does not exist", async () => {
56
- const redis = createMockRedis();
57
- const cache = new Cache({ redis });
58
- const [error, data] = await cache.get("nonexistent");
59
- expect(error).toEqual({
60
- type: "NotFoundError",
61
- message: "Key nonexistent not found",
62
- });
63
- expect(data).toBeNull();
64
- });
65
- test("should return CacheError on Redis connection failure", async () => {
66
- const redis = createMockRedis();
67
- redis.setShouldFail(true);
68
- const cache = new Cache({ redis });
69
- const [error, data] = await cache.get("key");
70
- expect(error).toEqual({
71
- type: "CacheError",
72
- message: "Unable to get value for key key",
73
- });
74
- expect(data).toBeNull();
75
- });
76
- test("should return CacheError on invalid JSON", async () => {
77
- const redis = createMockRedis();
78
- const cache = new Cache({ redis });
79
- await redis.set("invalid", "not valid json {");
80
- const [error, data] = await cache.get("invalid");
81
- expect(error).toEqual({
82
- type: "CacheError",
83
- message: "Unable to parse value for key invalid",
84
- });
85
- expect(data).toBeNull();
86
- });
87
- test("should work with different data types", async () => {
88
- const redis = createMockRedis();
89
- // Test with number
90
- const numberCache = new Cache({ redis });
91
- await redis.set("number", "42");
92
- const [, num] = await numberCache.get("number");
93
- expect(num).toBe(42);
94
- // Test with boolean
95
- const boolCache = new Cache({ redis });
96
- await redis.set("bool", "true");
97
- const [, bool] = await boolCache.get("bool");
98
- expect(bool).toBe(true);
99
- // Test with array
100
- const arrayCache = new Cache({ redis });
101
- await redis.set("array", JSON.stringify([1, 2, 3]));
102
- const [, arr] = await arrayCache.get("array");
103
- expect(arr).toEqual([1, 2, 3]);
104
- // Test with nested object
105
- const objCache = new Cache({
106
- redis,
107
- });
108
- await redis.set("nested", JSON.stringify({ user: { name: "Alice", age: 30 } }));
109
- const [, obj] = await objCache.get("nested");
110
- expect(obj).toEqual({ user: { name: "Alice", age: 30 } });
111
- });
112
- });
113
- describe("set", () => {
114
- test("should store a value in cache", async () => {
115
- const redis = createMockRedis();
116
- const cache = new Cache({ redis });
117
- const [error, data] = await cache.set("user:1", { name: "John" });
118
- expect(error).toBeNull();
119
- expect(data).toEqual({ name: "John" });
120
- const stored = redis.getStore().get("user:1");
121
- expect(stored).toBe(JSON.stringify({ name: "John" }));
122
- });
123
- test("should handle NaN", async () => {
124
- const redis = createMockRedis();
125
- const cache = new Cache({ redis });
126
- const [error, data] = await cache.set("user:id", { id: NaN });
127
- expect(error).toBeNull();
128
- expect(data).toEqual({ id: NaN });
129
- const stored = redis.getStore().get("user:id");
130
- expect(stored).toBe(JSON.stringify({ id: NaN }));
131
- });
132
- test("should store value with TTL when provided", async () => {
133
- const redis = createMockRedis();
134
- const cache = new Cache({ redis, ttl: 5000 });
135
- const [error, data] = await cache.set("key", "value");
136
- expect(error).toBeNull();
137
- expect(data).toBe("value");
138
- });
139
- test("should return CacheError on stringify failure", async () => {
140
- const redis = createMockRedis();
141
- const cache = new Cache({ redis });
142
- // Create circular reference that cannot be stringified
143
- const circular = { a: 1 };
144
- circular.self = circular;
145
- const [error, data] = await cache.set("circular", circular);
146
- expect(error).toEqual({
147
- type: "CacheError",
148
- message: "Unable to stringify value for key circular",
149
- });
150
- expect(data).toBeNull();
151
- });
152
- test("should return CacheError on Redis connection failure", async () => {
153
- const redis = createMockRedis();
154
- const cache = new Cache({ redis });
155
- redis.setShouldFail(true);
156
- const [error, data] = await cache.set("key", "value");
157
- expect(error).toEqual({
158
- type: "CacheError",
159
- message: "Unable to set value for key key",
160
- });
161
- expect(data).toBeNull();
162
- });
163
- test("should work with different data types", async () => {
164
- const redis = createMockRedis();
165
- // Number
166
- const numCache = new Cache({ redis });
167
- const [, num] = await numCache.set("num", 42);
168
- expect(num).toBe(42);
169
- expect(redis.getStore().get("num")).toBe("42");
170
- // Boolean
171
- const boolCache = new Cache({ redis });
172
- const [, bool] = await boolCache.set("bool", false);
173
- expect(bool).toBe(false);
174
- expect(redis.getStore().get("bool")).toBe("false");
175
- // Array
176
- const arrCache = new Cache({ redis });
177
- const [, arr] = await arrCache.set("arr", ["a", "b", "c"]);
178
- expect(arr).toEqual(["a", "b", "c"]);
179
- expect(redis.getStore().get("arr")).toBe('["a","b","c"]');
180
- // Object
181
- const objCache = new Cache({
182
- redis,
183
- });
184
- const [, obj] = await objCache.set("obj", { key: "value" });
185
- expect(obj).toEqual({ key: "value" });
186
- expect(redis.getStore().get("obj")).toBe('{"key":"value"}');
187
- });
188
- test("should return InvalidTTLError on negative TTL", async () => {
189
- const redis = createMockRedis();
190
- const cache = new Cache({ redis, ttl: -1 });
191
- const [error, data] = await cache.set("user:1", { name: "John" });
192
- expect(error).toEqual({
193
- type: "InvalidTTLError",
194
- message: "Unable to save records with ttl equal to -1",
195
- });
196
- expect(data).toBeNull();
197
- });
198
- test("should return InvalidTTLError on non integer TTL", async () => {
199
- const redis = createMockRedis();
200
- const nonIntegerTTL = 0.1 + 0.2;
201
- const cache = new Cache({ redis, ttl: nonIntegerTTL });
202
- const [error, data] = await cache.set("user:1", { name: "John" });
203
- expect(error).toEqual({
204
- type: "InvalidTTLError",
205
- message: `Unable to save records with ttl equal to ${nonIntegerTTL}`,
206
- });
207
- expect(data).toBeNull();
208
- });
209
- test("should return InvalidTTLError on NaN TTL", async () => {
210
- const redis = createMockRedis();
211
- const cache = new Cache({ redis, ttl: NaN });
212
- const [error, data] = await cache.set("user:1", { name: "John" });
213
- expect(error).toEqual({
214
- type: "InvalidTTLError",
215
- message: "Unable to save records with ttl equal to NaN",
216
- });
217
- expect(data).toBeNull();
218
- });
219
- test("should return InvalidTTLError on very large TTL", async () => {
220
- const redis = createMockRedis();
221
- const cache = new Cache({ redis, ttl: Infinity });
222
- const [error, data] = await cache.set("user:1", { name: "John" });
223
- expect(error).toEqual({
224
- type: "InvalidTTLError",
225
- message: "Unable to save records with ttl equal to Infinity",
226
- });
227
- expect(data).toBeNull();
228
- });
229
- });
230
- describe("delete", () => {
231
- test("should delete an existing key", async () => {
232
- const redis = createMockRedis();
233
- const cache = new Cache({ redis });
234
- await redis.set("key", "value");
235
- expect(redis.getStore().has("key")).toBe(true);
236
- const [error, count] = await cache.delete("key");
237
- expect(error).toBeNull();
238
- expect(count).toBe(1);
239
- expect(redis.getStore().has("key")).toBe(false);
240
- });
241
- test("should return 0 when deleting non-existent key", async () => {
242
- const redis = createMockRedis();
243
- const cache = new Cache({ redis });
244
- const [error, count] = await cache.delete("nonexistent");
245
- expect(error).toBeNull();
246
- expect(count).toBe(0);
247
- });
248
- test("should return CacheError on Redis connection failure", async () => {
249
- const redis = createMockRedis();
250
- const cache = new Cache({ redis });
251
- redis.setShouldFail(true);
252
- const [error, data] = await cache.delete("key");
253
- expect(error).toEqual({
254
- type: "CacheError",
255
- message: "Unable to delete key key",
256
- });
257
- expect(data).toBeNull();
258
- });
259
- });
260
- describe("Integration scenarios", () => {
261
- test("should handle complete set-get-delete flow", async () => {
262
- const redis = createMockRedis();
263
- const cache = new Cache({
264
- redis,
265
- });
266
- // Set
267
- const [setError, setValue] = await cache.set("user:123", {
268
- id: 123,
269
- name: "Alice",
270
- });
271
- expect(setError).toBeNull();
272
- expect(setValue).toEqual({ id: 123, name: "Alice" });
273
- // Get
274
- const [getError, getValue] = await cache.get("user:123");
275
- expect(getError).toBeNull();
276
- expect(getValue).toEqual({ id: 123, name: "Alice" });
277
- // Delete
278
- const [delError, delCount] = await cache.delete("user:123");
279
- expect(delError).toBeNull();
280
- expect(delCount).toBe(1);
281
- // Verify deleted
282
- const [notFoundError] = await cache.get("user:123");
283
- expect(notFoundError?.type).toBe("NotFoundError");
284
- });
285
- test("should handle multiple cache instances with same Redis client", async () => {
286
- const redis = createMockRedis();
287
- const cache1 = new Cache({ redis });
288
- const cache2 = new Cache({ redis });
289
- await cache1.set("shared", "value1");
290
- const [, value] = await cache2.get("shared");
291
- expect(value).toBe("value1");
292
- });
293
- test("should handle cache with TTL option", async () => {
294
- const redis = createMockRedis();
295
- const cache = new Cache({ redis, ttl: 1000 });
296
- const [error, data] = await cache.set("expiring", "value");
297
- expect(error).toBeNull();
298
- expect(data).toBe("value");
299
- const [, retrieved] = await cache.get("expiring");
300
- expect(retrieved).toBe("value");
301
- });
302
- test("should overwrite existing keys", async () => {
303
- const redis = createMockRedis();
304
- const cache = new Cache({ redis });
305
- await cache.set("key", "value1");
306
- const [, first] = await cache.get("key");
307
- expect(first).toBe("value1");
308
- await cache.set("key", "value2");
309
- const [, second] = await cache.get("key");
310
- expect(second).toBe("value2");
311
- });
312
- });
313
- });
314
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/lib/cache/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export type CacheOptions = {
2
- redis: Bun.RedisClient;
3
- ttl?: number;
4
- };
5
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,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/cache/types.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
1
- import type { CommonError } from "./types.js";
2
- export declare const ok: <T>(data: T) => readonly [null, T];
3
- export declare const err: <T extends CommonError>(type: T, message: string) => readonly [{
4
- readonly type: T;
5
- readonly message: string;
6
- }, null];
7
- export declare const mightThrowSync: <T>(fn: () => T) => readonly [null, T] | readonly [unknown, null];
8
- export declare const mightThrow: <T>(promise: Promise<T>) => Promise<readonly [unknown, null] | readonly [null, Awaited<T>]>;
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,MAAM,CAAC,uBAE5B,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,CAAC,SAAS,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,MAAM;;;QAElE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,IAAI,MAAM,CAAC,kDAO5C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,CAAC,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,oEAOtD,CAAC"}