semola 0.5.1 → 0.5.3

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 (488) hide show
  1. package/README.md +144 -29
  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/builder/index.cjs +166 -0
  39. package/dist/cron/builder/index.d.cts +28 -0
  40. package/dist/cron/builder/index.d.cts.map +1 -0
  41. package/dist/cron/builder/index.d.mts +28 -0
  42. package/dist/cron/builder/index.d.mts.map +1 -0
  43. package/dist/cron/builder/index.mjs +163 -0
  44. package/dist/cron/builder/index.mjs.map +1 -0
  45. package/dist/cron/builder/types.cjs +27 -0
  46. package/dist/cron/builder/types.d.cts +79 -0
  47. package/dist/cron/builder/types.d.cts.map +1 -0
  48. package/dist/cron/builder/types.d.mts +79 -0
  49. package/dist/cron/builder/types.d.mts.map +1 -0
  50. package/dist/cron/builder/types.mjs +28 -0
  51. package/dist/cron/builder/types.mjs.map +1 -0
  52. package/dist/cron/core/index.cjs +308 -0
  53. package/dist/cron/core/index.d.cts +39 -0
  54. package/dist/cron/core/index.d.cts.map +1 -0
  55. package/dist/cron/core/index.d.mts +39 -0
  56. package/dist/cron/core/index.d.mts.map +1 -0
  57. package/dist/cron/core/index.mjs +310 -0
  58. package/dist/cron/core/index.mjs.map +1 -0
  59. package/dist/cron/core/scanner.cjs +237 -0
  60. package/dist/cron/core/scanner.mjs +238 -0
  61. package/dist/cron/core/scanner.mjs.map +1 -0
  62. package/dist/cron/core/types.d.cts +11 -0
  63. package/dist/cron/core/types.d.cts.map +1 -0
  64. package/dist/cron/core/types.d.mts +11 -0
  65. package/dist/cron/core/types.d.mts.map +1 -0
  66. package/dist/errors/types.d.cts +5 -0
  67. package/dist/errors/types.d.cts.map +1 -0
  68. package/dist/errors/types.d.mts +5 -0
  69. package/dist/errors/types.d.mts.map +1 -0
  70. package/dist/i18n/types.d.cts +13 -0
  71. package/dist/i18n/types.d.cts.map +1 -0
  72. package/dist/i18n/types.d.mts +13 -0
  73. package/dist/i18n/types.d.mts.map +1 -0
  74. package/dist/lib/api/index.cjs +5 -0
  75. package/dist/lib/api/index.d.cts +5 -0
  76. package/dist/lib/api/index.d.mts +5 -0
  77. package/dist/lib/api/index.mjs +3 -0
  78. package/dist/lib/cache/index.cjs +74 -0
  79. package/dist/lib/cache/index.d.cts +36 -0
  80. package/dist/lib/cache/index.d.cts.map +1 -0
  81. package/dist/lib/cache/index.d.mts +36 -0
  82. package/dist/lib/cache/index.d.mts.map +1 -0
  83. package/dist/lib/cache/index.mjs +75 -0
  84. package/dist/lib/cache/index.mjs.map +1 -0
  85. package/dist/lib/cron/index.cjs +13 -0
  86. package/dist/lib/cron/index.d.cts +4 -0
  87. package/dist/lib/cron/index.d.mts +4 -0
  88. package/dist/lib/cron/index.mjs +4 -0
  89. package/dist/lib/errors/index.cjs +30 -0
  90. package/dist/lib/errors/index.d.cts +13 -0
  91. package/dist/lib/errors/index.d.cts.map +1 -0
  92. package/dist/lib/errors/index.d.mts +13 -0
  93. package/dist/lib/errors/index.d.mts.map +1 -0
  94. package/dist/lib/errors/index.mjs +28 -0
  95. package/dist/lib/errors/index.mjs.map +1 -0
  96. package/dist/lib/i18n/index.cjs +42 -0
  97. package/dist/lib/i18n/index.d.cts +20 -0
  98. package/dist/lib/i18n/index.d.cts.map +1 -0
  99. package/dist/lib/i18n/index.d.mts +20 -0
  100. package/dist/lib/i18n/index.d.mts.map +1 -0
  101. package/dist/lib/i18n/index.mjs +43 -0
  102. package/dist/lib/i18n/index.mjs.map +1 -0
  103. package/dist/lib/logging/index.cjs +18 -0
  104. package/dist/lib/logging/index.d.cts +7 -0
  105. package/dist/lib/logging/index.d.mts +7 -0
  106. package/dist/lib/logging/index.mjs +5 -0
  107. package/dist/lib/orm/index.cjs +20 -0
  108. package/dist/lib/orm/index.d.cts +7 -0
  109. package/dist/lib/orm/index.d.mts +7 -0
  110. package/dist/lib/orm/index.mjs +6 -0
  111. package/dist/lib/policy/index.cjs +99 -0
  112. package/dist/lib/policy/index.d.cts +21 -0
  113. package/dist/lib/policy/index.d.cts.map +1 -0
  114. package/dist/lib/policy/index.d.mts +21 -0
  115. package/dist/lib/policy/index.d.mts.map +1 -0
  116. package/dist/lib/policy/index.mjs +81 -0
  117. package/dist/lib/policy/index.mjs.map +1 -0
  118. package/dist/lib/prompts/index.cjs +409 -0
  119. package/dist/lib/prompts/index.d.cts +31 -0
  120. package/dist/lib/prompts/index.d.cts.map +1 -0
  121. package/dist/lib/prompts/index.d.mts +31 -0
  122. package/dist/lib/prompts/index.d.mts.map +1 -0
  123. package/dist/lib/prompts/index.mjs +405 -0
  124. package/dist/lib/prompts/index.mjs.map +1 -0
  125. package/dist/lib/pubsub/index.cjs +117 -0
  126. package/dist/lib/pubsub/index.d.cts +36 -0
  127. package/dist/lib/pubsub/index.d.cts.map +1 -0
  128. package/dist/lib/pubsub/index.d.mts +36 -0
  129. package/dist/lib/pubsub/index.d.mts.map +1 -0
  130. package/dist/lib/pubsub/index.mjs +118 -0
  131. package/dist/lib/pubsub/index.mjs.map +1 -0
  132. package/dist/lib/queue/index.cjs +182 -0
  133. package/dist/lib/queue/index.d.cts +32 -0
  134. package/dist/lib/queue/index.d.cts.map +1 -0
  135. package/dist/lib/queue/index.d.mts +32 -0
  136. package/dist/lib/queue/index.d.mts.map +1 -0
  137. package/dist/lib/queue/index.mjs +183 -0
  138. package/dist/lib/queue/index.mjs.map +1 -0
  139. package/dist/lib/workflow/index.cjs +534 -0
  140. package/dist/lib/workflow/index.d.cts +7 -0
  141. package/dist/lib/workflow/index.d.cts.map +1 -0
  142. package/dist/lib/workflow/index.d.mts +7 -0
  143. package/dist/lib/workflow/index.d.mts.map +1 -0
  144. package/dist/lib/workflow/index.mjs +535 -0
  145. package/dist/lib/workflow/index.mjs.map +1 -0
  146. package/dist/logging/core/index.cjs +99 -0
  147. package/dist/logging/core/index.d.cts +26 -0
  148. package/dist/logging/core/index.d.cts.map +1 -0
  149. package/dist/logging/core/index.d.mts +26 -0
  150. package/dist/logging/core/index.d.mts.map +1 -0
  151. package/dist/logging/core/index.mjs +99 -0
  152. package/dist/logging/core/index.mjs.map +1 -0
  153. package/dist/logging/core/types.cjs +10 -0
  154. package/dist/logging/core/types.d.cts +22 -0
  155. package/dist/logging/core/types.d.cts.map +1 -0
  156. package/dist/logging/core/types.d.mts +22 -0
  157. package/dist/logging/core/types.d.mts.map +1 -0
  158. package/dist/logging/core/types.mjs +12 -0
  159. package/dist/logging/core/types.mjs.map +1 -0
  160. package/dist/logging/formatter/index.cjs +119 -0
  161. package/dist/logging/formatter/index.d.cts +27 -0
  162. package/dist/logging/formatter/index.d.cts.map +1 -0
  163. package/dist/logging/formatter/index.d.mts +27 -0
  164. package/dist/logging/formatter/index.d.mts.map +1 -0
  165. package/dist/logging/formatter/index.mjs +115 -0
  166. package/dist/logging/formatter/index.mjs.map +1 -0
  167. package/dist/logging/formatter/types.d.cts +5 -0
  168. package/dist/logging/formatter/types.d.cts.map +1 -0
  169. package/dist/logging/formatter/types.d.mts +5 -0
  170. package/dist/logging/formatter/types.d.mts.map +1 -0
  171. package/dist/logging/provider/index.cjs +165 -0
  172. package/dist/logging/provider/index.d.cts +28 -0
  173. package/dist/logging/provider/index.d.cts.map +1 -0
  174. package/dist/logging/provider/index.d.mts +28 -0
  175. package/dist/logging/provider/index.d.mts.map +1 -0
  176. package/dist/logging/provider/index.mjs +165 -0
  177. package/dist/logging/provider/index.mjs.map +1 -0
  178. package/dist/logging/provider/types.d.cts +23 -0
  179. package/dist/logging/provider/types.d.cts.map +1 -0
  180. package/dist/logging/provider/types.d.mts +23 -0
  181. package/dist/logging/provider/types.d.mts.map +1 -0
  182. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +80 -0
  183. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +1 -0
  184. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +80 -0
  185. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +1 -0
  186. package/dist/orm/column.cjs +137 -0
  187. package/dist/orm/column.d.cts +121 -0
  188. package/dist/orm/column.d.cts.map +1 -0
  189. package/dist/orm/column.d.mts +121 -0
  190. package/dist/orm/column.d.mts.map +1 -0
  191. package/dist/orm/column.mjs +132 -0
  192. package/dist/orm/column.mjs.map +1 -0
  193. package/dist/orm/dialect/index.cjs +14 -0
  194. package/dist/orm/dialect/index.mjs +16 -0
  195. package/dist/orm/dialect/index.mjs.map +1 -0
  196. package/dist/orm/dialect/mysql.cjs +31 -0
  197. package/dist/orm/dialect/mysql.mjs +33 -0
  198. package/dist/orm/dialect/mysql.mjs.map +1 -0
  199. package/dist/orm/dialect/postgres.cjs +23 -0
  200. package/dist/orm/dialect/postgres.mjs +25 -0
  201. package/dist/orm/dialect/postgres.mjs.map +1 -0
  202. package/dist/orm/dialect/sqlite.cjs +31 -0
  203. package/dist/orm/dialect/sqlite.mjs +33 -0
  204. package/dist/orm/dialect/sqlite.mjs.map +1 -0
  205. package/dist/orm/dialect/utils.cjs +8 -0
  206. package/dist/orm/dialect/utils.mjs +10 -0
  207. package/dist/orm/dialect/utils.mjs.map +1 -0
  208. package/dist/orm/internal/table-columns.cjs +31 -0
  209. package/dist/orm/internal/table-columns.mjs +32 -0
  210. package/dist/orm/internal/table-columns.mjs.map +1 -0
  211. package/dist/orm/internal/table-lookup.cjs +35 -0
  212. package/dist/orm/internal/table-lookup.mjs +35 -0
  213. package/dist/orm/internal/table-lookup.mjs.map +1 -0
  214. package/dist/orm/internal/table-relations.cjs +28 -0
  215. package/dist/orm/internal/table-relations.mjs +29 -0
  216. package/dist/orm/internal/table-relations.mjs.map +1 -0
  217. package/dist/orm/migration/config.cjs +7 -0
  218. package/dist/orm/migration/config.d.cts +7 -0
  219. package/dist/orm/migration/config.d.cts.map +1 -0
  220. package/dist/orm/migration/config.d.mts +7 -0
  221. package/dist/orm/migration/config.d.mts.map +1 -0
  222. package/dist/orm/migration/config.mjs +8 -0
  223. package/dist/orm/migration/config.mjs.map +1 -0
  224. package/dist/orm/migration/types.d.cts +20 -0
  225. package/dist/orm/migration/types.d.cts.map +1 -0
  226. package/dist/orm/migration/types.d.mts +20 -0
  227. package/dist/orm/migration/types.d.mts.map +1 -0
  228. package/dist/orm/orm.cjs +41 -0
  229. package/dist/orm/orm.d.cts +18 -0
  230. package/dist/orm/orm.d.cts.map +1 -0
  231. package/dist/orm/orm.d.mts +18 -0
  232. package/dist/orm/orm.d.mts.map +1 -0
  233. package/dist/orm/orm.mjs +43 -0
  234. package/dist/orm/orm.mjs.map +1 -0
  235. package/dist/orm/relation.cjs +18 -0
  236. package/dist/orm/relation.d.cts +8 -0
  237. package/dist/orm/relation.d.cts.map +1 -0
  238. package/dist/orm/relation.d.mts +8 -0
  239. package/dist/orm/relation.d.mts.map +1 -0
  240. package/dist/orm/relation.mjs +19 -0
  241. package/dist/orm/relation.mjs.map +1 -0
  242. package/dist/orm/runtime/builders/mutations.cjs +29 -0
  243. package/dist/orm/runtime/builders/mutations.mjs +28 -0
  244. package/dist/orm/runtime/builders/mutations.mjs.map +1 -0
  245. package/dist/orm/runtime/builders/select.cjs +18 -0
  246. package/dist/orm/runtime/builders/select.mjs +19 -0
  247. package/dist/orm/runtime/builders/select.mjs.map +1 -0
  248. package/dist/orm/runtime/client.cjs +90 -0
  249. package/dist/orm/runtime/client.mjs +92 -0
  250. package/dist/orm/runtime/client.mjs.map +1 -0
  251. package/dist/orm/runtime/context.cjs +49 -0
  252. package/dist/orm/runtime/context.mjs +51 -0
  253. package/dist/orm/runtime/context.mjs.map +1 -0
  254. package/dist/orm/runtime/dialect/index.cjs +11 -0
  255. package/dist/orm/runtime/dialect/index.mjs +13 -0
  256. package/dist/orm/runtime/dialect/index.mjs.map +1 -0
  257. package/dist/orm/runtime/dialect/mysql.cjs +95 -0
  258. package/dist/orm/runtime/dialect/mysql.mjs +97 -0
  259. package/dist/orm/runtime/dialect/mysql.mjs.map +1 -0
  260. package/dist/orm/runtime/dialect/postgres.cjs +51 -0
  261. package/dist/orm/runtime/dialect/postgres.mjs +53 -0
  262. package/dist/orm/runtime/dialect/postgres.mjs.map +1 -0
  263. package/dist/orm/runtime/dialect/sqlite.cjs +4 -0
  264. package/dist/orm/runtime/dialect/sqlite.mjs +7 -0
  265. package/dist/orm/runtime/dialect/sqlite.mjs.map +1 -0
  266. package/dist/orm/runtime/errors.cjs +19 -0
  267. package/dist/orm/runtime/errors.mjs +21 -0
  268. package/dist/orm/runtime/errors.mjs.map +1 -0
  269. package/dist/orm/runtime/hydrate/many.cjs +46 -0
  270. package/dist/orm/runtime/hydrate/many.mjs +48 -0
  271. package/dist/orm/runtime/hydrate/many.mjs.map +1 -0
  272. package/dist/orm/runtime/hydrate/one.cjs +38 -0
  273. package/dist/orm/runtime/hydrate/one.mjs +40 -0
  274. package/dist/orm/runtime/hydrate/one.mjs.map +1 -0
  275. package/dist/orm/runtime/hydrate.cjs +49 -0
  276. package/dist/orm/runtime/hydrate.mjs +51 -0
  277. package/dist/orm/runtime/hydrate.mjs.map +1 -0
  278. package/dist/orm/runtime/rows.cjs +30 -0
  279. package/dist/orm/runtime/rows.mjs +31 -0
  280. package/dist/orm/runtime/rows.mjs.map +1 -0
  281. package/dist/orm/runtime/utils.cjs +27 -0
  282. package/dist/orm/runtime/utils.mjs +27 -0
  283. package/dist/orm/runtime/utils.mjs.map +1 -0
  284. package/dist/orm/sql/parse-array.cjs +64 -0
  285. package/dist/orm/sql/parse-array.mjs +66 -0
  286. package/dist/orm/sql/parse-array.mjs.map +1 -0
  287. package/dist/orm/sql/plan/select.cjs +36 -0
  288. package/dist/orm/sql/plan/select.mjs +38 -0
  289. package/dist/orm/sql/plan/select.mjs.map +1 -0
  290. package/dist/orm/sql/plan/where/operators.cjs +95 -0
  291. package/dist/orm/sql/plan/where/operators.mjs +97 -0
  292. package/dist/orm/sql/plan/where/operators.mjs.map +1 -0
  293. package/dist/orm/sql/plan/where.cjs +59 -0
  294. package/dist/orm/sql/plan/where.mjs +61 -0
  295. package/dist/orm/sql/plan/where.mjs.map +1 -0
  296. package/dist/orm/sql/serialize/clauses.cjs +36 -0
  297. package/dist/orm/sql/serialize/clauses.mjs +37 -0
  298. package/dist/orm/sql/serialize/clauses.mjs.map +1 -0
  299. package/dist/orm/sql/serialize/joins.cjs +31 -0
  300. package/dist/orm/sql/serialize/joins.mjs +33 -0
  301. package/dist/orm/sql/serialize/joins.mjs.map +1 -0
  302. package/dist/orm/sql/serialize/values.cjs +30 -0
  303. package/dist/orm/sql/serialize/values.mjs +32 -0
  304. package/dist/orm/sql/serialize/values.mjs.map +1 -0
  305. package/dist/orm/sql/serialize/where/predicate.cjs +73 -0
  306. package/dist/orm/sql/serialize/where/predicate.mjs +75 -0
  307. package/dist/orm/sql/serialize/where/predicate.mjs.map +1 -0
  308. package/dist/orm/sql/serialize/where/tree.cjs +26 -0
  309. package/dist/orm/sql/serialize/where/tree.mjs +28 -0
  310. package/dist/orm/sql/serialize/where/tree.mjs.map +1 -0
  311. package/dist/orm/sql/serialize/where.cjs +10 -0
  312. package/dist/orm/sql/serialize/where.mjs +12 -0
  313. package/dist/orm/sql/serialize/where.mjs.map +1 -0
  314. package/dist/orm/sql/serialize.cjs +24 -0
  315. package/dist/orm/sql/serialize.mjs +25 -0
  316. package/dist/orm/sql/serialize.mjs.map +1 -0
  317. package/dist/orm/table.cjs +12 -0
  318. package/dist/orm/table.d.cts +12 -0
  319. package/dist/orm/table.d.cts.map +1 -0
  320. package/dist/orm/table.d.mts +12 -0
  321. package/dist/orm/table.d.mts.map +1 -0
  322. package/dist/orm/table.mjs +14 -0
  323. package/dist/orm/table.mjs.map +1 -0
  324. package/dist/orm/types.d.cts +183 -0
  325. package/dist/orm/types.d.cts.map +1 -0
  326. package/dist/orm/types.d.mts +183 -0
  327. package/dist/orm/types.d.mts.map +1 -0
  328. package/dist/policy/helpers.cjs +206 -0
  329. package/dist/policy/helpers.d.cts +50 -0
  330. package/dist/policy/helpers.d.cts.map +1 -0
  331. package/dist/policy/helpers.d.mts +50 -0
  332. package/dist/policy/helpers.d.mts.map +1 -0
  333. package/dist/policy/helpers.mjs +190 -0
  334. package/dist/policy/helpers.mjs.map +1 -0
  335. package/dist/policy/types.d.cts +16 -0
  336. package/dist/policy/types.d.cts.map +1 -0
  337. package/dist/policy/types.d.mts +16 -0
  338. package/dist/policy/types.d.mts.map +1 -0
  339. package/dist/prompts/core/keys.cjs +165 -0
  340. package/dist/prompts/core/keys.mjs +167 -0
  341. package/dist/prompts/core/keys.mjs.map +1 -0
  342. package/dist/prompts/core/runtime.cjs +104 -0
  343. package/dist/prompts/core/runtime.mjs +106 -0
  344. package/dist/prompts/core/runtime.mjs.map +1 -0
  345. package/dist/prompts/core/session.cjs +98 -0
  346. package/dist/prompts/core/session.mjs +100 -0
  347. package/dist/prompts/core/session.mjs.map +1 -0
  348. package/dist/prompts/core/types.d.cts +21 -0
  349. package/dist/prompts/core/types.d.cts.map +1 -0
  350. package/dist/prompts/core/types.d.mts +21 -0
  351. package/dist/prompts/core/types.d.mts.map +1 -0
  352. package/dist/prompts/types.d.cts +52 -0
  353. package/dist/prompts/types.d.cts.map +1 -0
  354. package/dist/prompts/types.d.mts +52 -0
  355. package/dist/prompts/types.d.mts.map +1 -0
  356. package/dist/pubsub/types.d.cts +10 -0
  357. package/dist/pubsub/types.d.cts.map +1 -0
  358. package/dist/pubsub/types.d.mts +10 -0
  359. package/dist/pubsub/types.d.mts.map +1 -0
  360. package/dist/queue/types.d.cts +47 -0
  361. package/dist/queue/types.d.cts.map +1 -0
  362. package/dist/queue/types.d.mts +47 -0
  363. package/dist/queue/types.d.mts.map +1 -0
  364. package/dist/workflow/types.d.cts +83 -0
  365. package/dist/workflow/types.d.cts.map +1 -0
  366. package/dist/workflow/types.d.mts +83 -0
  367. package/dist/workflow/types.d.mts.map +1 -0
  368. package/package.json +112 -16
  369. package/dist/lib/api/core/index.d.ts +0 -15
  370. package/dist/lib/api/core/index.d.ts.map +0 -1
  371. package/dist/lib/api/core/index.js +0 -218
  372. package/dist/lib/api/core/index.js.map +0 -1
  373. package/dist/lib/api/core/index.test.d.ts +0 -2
  374. package/dist/lib/api/core/index.test.d.ts.map +0 -1
  375. package/dist/lib/api/core/index.test.js +0 -219
  376. package/dist/lib/api/core/index.test.js.map +0 -1
  377. package/dist/lib/api/core/types.d.ts +0 -109
  378. package/dist/lib/api/core/types.d.ts.map +0 -1
  379. package/dist/lib/api/core/types.js +0 -2
  380. package/dist/lib/api/core/types.js.map +0 -1
  381. package/dist/lib/api/index.d.ts +0 -5
  382. package/dist/lib/api/index.d.ts.map +0 -1
  383. package/dist/lib/api/index.js +0 -3
  384. package/dist/lib/api/index.js.map +0 -1
  385. package/dist/lib/api/middleware/index.d.ts +0 -7
  386. package/dist/lib/api/middleware/index.d.ts.map +0 -1
  387. package/dist/lib/api/middleware/index.js +0 -7
  388. package/dist/lib/api/middleware/index.js.map +0 -1
  389. package/dist/lib/api/middleware/index.test.d.ts +0 -2
  390. package/dist/lib/api/middleware/index.test.d.ts.map +0 -1
  391. package/dist/lib/api/middleware/index.test.js +0 -67
  392. package/dist/lib/api/middleware/index.test.js.map +0 -1
  393. package/dist/lib/api/middleware/types.d.ts +0 -12
  394. package/dist/lib/api/middleware/types.d.ts.map +0 -1
  395. package/dist/lib/api/middleware/types.js +0 -2
  396. package/dist/lib/api/middleware/types.js.map +0 -1
  397. package/dist/lib/api/openapi/index.d.ts +0 -31
  398. package/dist/lib/api/openapi/index.d.ts.map +0 -1
  399. package/dist/lib/api/openapi/index.js +0 -284
  400. package/dist/lib/api/openapi/index.js.map +0 -1
  401. package/dist/lib/api/openapi/index.test.d.ts +0 -2
  402. package/dist/lib/api/openapi/index.test.d.ts.map +0 -1
  403. package/dist/lib/api/openapi/index.test.js +0 -359
  404. package/dist/lib/api/openapi/index.test.js.map +0 -1
  405. package/dist/lib/api/openapi/types.d.ts +0 -57
  406. package/dist/lib/api/openapi/types.d.ts.map +0 -1
  407. package/dist/lib/api/openapi/types.js +0 -5
  408. package/dist/lib/api/openapi/types.js.map +0 -1
  409. package/dist/lib/api/validation/index.d.ts +0 -33
  410. package/dist/lib/api/validation/index.d.ts.map +0 -1
  411. package/dist/lib/api/validation/index.js +0 -92
  412. package/dist/lib/api/validation/index.js.map +0 -1
  413. package/dist/lib/api/validation/index.test.d.ts +0 -2
  414. package/dist/lib/api/validation/index.test.d.ts.map +0 -1
  415. package/dist/lib/api/validation/index.test.js +0 -135
  416. package/dist/lib/api/validation/index.test.js.map +0 -1
  417. package/dist/lib/cache/index.d.ts +0 -25
  418. package/dist/lib/cache/index.d.ts.map +0 -1
  419. package/dist/lib/cache/index.js +0 -62
  420. package/dist/lib/cache/index.js.map +0 -1
  421. package/dist/lib/cache/index.test.d.ts +0 -2
  422. package/dist/lib/cache/index.test.d.ts.map +0 -1
  423. package/dist/lib/cache/index.test.js +0 -314
  424. package/dist/lib/cache/index.test.js.map +0 -1
  425. package/dist/lib/cache/types.d.ts +0 -5
  426. package/dist/lib/cache/types.d.ts.map +0 -1
  427. package/dist/lib/cache/types.js +0 -2
  428. package/dist/lib/cache/types.js.map +0 -1
  429. package/dist/lib/errors/index.d.ts +0 -9
  430. package/dist/lib/errors/index.d.ts.map +0 -1
  431. package/dist/lib/errors/index.js +0 -25
  432. package/dist/lib/errors/index.js.map +0 -1
  433. package/dist/lib/errors/index.test.d.ts +0 -2
  434. package/dist/lib/errors/index.test.d.ts.map +0 -1
  435. package/dist/lib/errors/index.test.js +0 -197
  436. package/dist/lib/errors/index.test.js.map +0 -1
  437. package/dist/lib/errors/types.d.ts +0 -2
  438. package/dist/lib/errors/types.d.ts.map +0 -1
  439. package/dist/lib/errors/types.js +0 -2
  440. package/dist/lib/errors/types.js.map +0 -1
  441. package/dist/lib/i18n/index.d.ts +0 -18
  442. package/dist/lib/i18n/index.d.ts.map +0 -1
  443. package/dist/lib/i18n/index.js +0 -38
  444. package/dist/lib/i18n/index.js.map +0 -1
  445. package/dist/lib/i18n/index.test.d.ts +0 -2
  446. package/dist/lib/i18n/index.test.d.ts.map +0 -1
  447. package/dist/lib/i18n/index.test.js +0 -402
  448. package/dist/lib/i18n/index.test.js.map +0 -1
  449. package/dist/lib/i18n/types.d.ts +0 -15
  450. package/dist/lib/i18n/types.d.ts.map +0 -1
  451. package/dist/lib/i18n/types.js +0 -2
  452. package/dist/lib/i18n/types.js.map +0 -1
  453. package/dist/lib/policy/index.d.ts +0 -9
  454. package/dist/lib/policy/index.d.ts.map +0 -1
  455. package/dist/lib/policy/index.js +0 -51
  456. package/dist/lib/policy/index.js.map +0 -1
  457. package/dist/lib/policy/index.test.d.ts +0 -2
  458. package/dist/lib/policy/index.test.d.ts.map +0 -1
  459. package/dist/lib/policy/index.test.js +0 -328
  460. package/dist/lib/policy/index.test.js.map +0 -1
  461. package/dist/lib/policy/types.d.ts +0 -27
  462. package/dist/lib/policy/types.d.ts.map +0 -1
  463. package/dist/lib/policy/types.js +0 -2
  464. package/dist/lib/policy/types.js.map +0 -1
  465. package/dist/lib/pubsub/index.d.ts +0 -23
  466. package/dist/lib/pubsub/index.d.ts.map +0 -1
  467. package/dist/lib/pubsub/index.js +0 -55
  468. package/dist/lib/pubsub/index.js.map +0 -1
  469. package/dist/lib/pubsub/index.test.d.ts +0 -2
  470. package/dist/lib/pubsub/index.test.d.ts.map +0 -1
  471. package/dist/lib/pubsub/index.test.js +0 -550
  472. package/dist/lib/pubsub/index.test.js.map +0 -1
  473. package/dist/lib/pubsub/types.d.ts +0 -7
  474. package/dist/lib/pubsub/types.d.ts.map +0 -1
  475. package/dist/lib/pubsub/types.js +0 -2
  476. package/dist/lib/pubsub/types.js.map +0 -1
  477. package/dist/lib/queue/index.d.ts +0 -28
  478. package/dist/lib/queue/index.d.ts.map +0 -1
  479. package/dist/lib/queue/index.js +0 -211
  480. package/dist/lib/queue/index.js.map +0 -1
  481. package/dist/lib/queue/index.test.d.ts +0 -2
  482. package/dist/lib/queue/index.test.d.ts.map +0 -1
  483. package/dist/lib/queue/index.test.js +0 -740
  484. package/dist/lib/queue/index.test.js.map +0 -1
  485. package/dist/lib/queue/types.d.ts +0 -52
  486. package/dist/lib/queue/types.d.ts.map +0 -1
  487. package/dist/lib/queue/types.js +0 -2
  488. package/dist/lib/queue/types.js.map +0 -1
@@ -0,0 +1,238 @@
1
+ import { err, ok } from "../../lib/errors/index.mjs";
2
+ //#region src/lib/cron/core/scanner.ts
3
+ const FieldAmount = {
4
+ min: 5,
5
+ max: 6
6
+ };
7
+ var Token = class {
8
+ type;
9
+ component;
10
+ value;
11
+ field;
12
+ constructor(component, type, value, field) {
13
+ this.component = component;
14
+ this.type = type;
15
+ this.value = value;
16
+ this.field = field;
17
+ }
18
+ getComponent() {
19
+ return this.component;
20
+ }
21
+ getTokenType() {
22
+ return this.type;
23
+ }
24
+ getTokenValue() {
25
+ return this.value;
26
+ }
27
+ getField() {
28
+ return this.field;
29
+ }
30
+ toString() {
31
+ return `Token{${`component="${this.component}", type=${this.type}`}, ${`field="${this.field}", value=${this.value}`}}`;
32
+ }
33
+ equals(other) {
34
+ if (!other) return false;
35
+ const isComponentEqual = this.component === other.getComponent();
36
+ const isTokenTypeEqual = this.type === other.getTokenType();
37
+ const isTokenValueEqual = this.value === other.getTokenValue();
38
+ const isFieldEqual = this.field === other.getField();
39
+ return isComponentEqual && isTokenTypeEqual && isTokenValueEqual && isFieldEqual;
40
+ }
41
+ };
42
+ var Scanner = class {
43
+ expression;
44
+ current;
45
+ start;
46
+ tokens;
47
+ constructor(expression) {
48
+ this.expression = expression;
49
+ this.current = 0;
50
+ this.start = 0;
51
+ this.tokens = [];
52
+ }
53
+ scan() {
54
+ if (this.expression.length === 0) return err("EmptyCronExpressionError", "Cron expression have zero length");
55
+ const fields = this.expression.trim().split(/\s+/);
56
+ const hasMinLen = fields.length === FieldAmount.min;
57
+ const hasMaxLen = fields.length === FieldAmount.max;
58
+ if (!hasMinLen && !hasMaxLen) return err("CronLengthError", `Invalid number of fields for '${this.expression}'. Expected 5 or 6 fields but got ${fields.length} field(s)`);
59
+ const components = this.createComponent(fields);
60
+ for (let idx = 0; idx < components.length; idx++) {
61
+ const component = components[idx];
62
+ if (!component) return err("CronExpressionError", `Invalid cron expression: ${this.expression}`);
63
+ this.current = 0;
64
+ this.start = 0;
65
+ const [error, _] = this.scanComponent(component);
66
+ if (error) return err(error.type, error.message);
67
+ }
68
+ return ok(this.tokens);
69
+ }
70
+ scanComponent(component) {
71
+ const { field, content } = component;
72
+ while (this.current < content.length) {
73
+ let currentCh = this.advance(content);
74
+ switch (currentCh) {
75
+ case "*": {
76
+ const ch = this.peek(content);
77
+ if (this.match(content, "/")) {
78
+ const [error, _] = this.handleStep(component);
79
+ if (error) return err(error.type, error.message);
80
+ } else if (!ch || ch === ",") this.addToken("*", "any", "*", field);
81
+ else return err("CronExpressionError", `Invalid any expression '${content}' for field '${field}'`);
82
+ break;
83
+ }
84
+ case "-":
85
+ currentCh = this.advance(content);
86
+ if (this.isDigit(currentCh)) {
87
+ const [error, _] = this.handleRangeWithStep(component);
88
+ if (error) return err(error.type, error.message);
89
+ } else return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
90
+ break;
91
+ case ",": {
92
+ if (this.current === 1 && this.start === 0) return err("CronExpressionError", `Invalid list expression '${content}' for field '${field}'`);
93
+ const next = this.peek(content);
94
+ if (!next || next === ",") return err("CronExpressionError", `Invalid list expression '${content}' for field '${field}'`);
95
+ break;
96
+ }
97
+ default:
98
+ if (this.isDigit(currentCh)) {
99
+ const [error, _] = this.handleNumber(component);
100
+ if (error) return err(error.type, error.message);
101
+ } else return err("CronExpressionError", `Invalid cron expression '${this.expression}' in field '${field}'`);
102
+ break;
103
+ }
104
+ this.start = this.current;
105
+ }
106
+ return ok(true);
107
+ }
108
+ addToken(component, type, value, field) {
109
+ const token = new Token(component, type, value, field);
110
+ this.tokens.push(token);
111
+ }
112
+ advance(content) {
113
+ const currentCh = content.charAt(this.current);
114
+ this.current += 1;
115
+ return currentCh;
116
+ }
117
+ match(content, expected) {
118
+ if (this.current >= content.length) return false;
119
+ if (content.charAt(this.current) !== expected) return false;
120
+ this.current += 1;
121
+ return true;
122
+ }
123
+ peek(content) {
124
+ if (this.current >= content.length) return void 0;
125
+ return content.charAt(this.current);
126
+ }
127
+ handleStep(component) {
128
+ const { field, content } = component;
129
+ let ch = this.peek(content);
130
+ const slashIdx = this.current - 1;
131
+ while (ch && this.isDigit(ch)) {
132
+ this.advance(content);
133
+ ch = this.peek(content);
134
+ }
135
+ if (ch && ch !== ",") return err("CronExpressionError", `Invalid step expression '${content}' for field '${field}'`);
136
+ const tokenContent = content.substring(this.start, this.current);
137
+ const value = content.slice(slashIdx + 1, this.current);
138
+ if (value.length === 0) return err("CronExpressionError", `Invalid step expression '${content}' for field '${field}'`);
139
+ this.addToken(tokenContent, "step", Number(value), field);
140
+ return ok(true);
141
+ }
142
+ handleRangeWithStep(component) {
143
+ const { field, content } = component;
144
+ let ch = this.peek(content);
145
+ while (ch && this.isDigit(ch)) {
146
+ this.advance(content);
147
+ ch = this.peek(content);
148
+ }
149
+ if (!ch) return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
150
+ if (this.match(content, "/")) {
151
+ const [error, _] = this.handleStep(component);
152
+ if (error) return err(error.type, error.message);
153
+ return ok(true);
154
+ }
155
+ return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
156
+ }
157
+ handleNumber(component) {
158
+ const { field, content } = component;
159
+ let ch = this.peek(content);
160
+ this.start = this.current - 1;
161
+ while (ch && this.isDigit(ch)) {
162
+ this.advance(content);
163
+ ch = this.peek(content);
164
+ }
165
+ if (!ch) {
166
+ const item = content.substring(this.start);
167
+ this.addToken(item, "number", Number(item), field);
168
+ return ok(true);
169
+ }
170
+ if (this.match(content, "-")) {
171
+ const [error, _] = this.handleRange(component);
172
+ if (error) return err(error.type, error.message);
173
+ return ok(true);
174
+ }
175
+ if (this.match(content, "/")) {
176
+ const [error, _] = this.handleStep(component);
177
+ if (error) return err(error.type, error.message);
178
+ return ok(true);
179
+ }
180
+ if (!this.isDigit(ch) && ch !== ",") return err("CronExpressionError", `Invalid number '${content}' for field '${field}'`);
181
+ const item = content.substring(this.start, this.current);
182
+ this.addToken(item, "number", Number(item), field);
183
+ return ok(true);
184
+ }
185
+ handleRange(component) {
186
+ const { field, content } = component;
187
+ let ch = this.peek(content);
188
+ if (!ch) return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
189
+ while (ch && this.isDigit(ch)) {
190
+ this.advance(content);
191
+ ch = this.peek(content);
192
+ }
193
+ if (!ch) {
194
+ const tokenContent = content.substring(this.start);
195
+ this.addToken(tokenContent, "range", tokenContent, field);
196
+ return ok(true);
197
+ }
198
+ if (this.match(content, "/")) {
199
+ const [error, _] = this.handleStep(component);
200
+ if (error) return err(error.type, error.message);
201
+ return ok(true);
202
+ }
203
+ if (ch && ch !== ",") return err("CronExpressionError", `Invalid range expression '${content}' for field '${field}'`);
204
+ const tokenContent = content.substring(this.start, this.current);
205
+ this.addToken(tokenContent, "range", tokenContent, field);
206
+ return ok(true);
207
+ }
208
+ isDigit(ch) {
209
+ return ch >= "0" && ch <= "9";
210
+ }
211
+ createComponent(fields) {
212
+ const fieldNames = [
213
+ "second",
214
+ "minute",
215
+ "hour",
216
+ "day",
217
+ "month",
218
+ "weekday"
219
+ ];
220
+ const components = [];
221
+ let offset = 1;
222
+ if (fields.length === FieldAmount.max) offset = 0;
223
+ for (let idx = 0; idx < fields.length; idx++) {
224
+ const fieldName = fieldNames[idx + offset];
225
+ const content = fields[idx];
226
+ if (!fieldName || !content) break;
227
+ components.push({
228
+ content,
229
+ field: fieldName
230
+ });
231
+ }
232
+ return components;
233
+ }
234
+ };
235
+ //#endregion
236
+ export { FieldAmount, Scanner };
237
+
238
+ //# sourceMappingURL=scanner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.mjs","names":[],"sources":["../../../src/lib/cron/core/scanner.ts"],"sourcesContent":["import { err, ok } from \"../../errors/index.js\";\nimport type { CronScannerError } from \"./types.js\";\n\nexport const FieldAmount = {\n min: 5,\n max: 6,\n} as const;\n\ntype TokenValueType = string | number;\ntype CronFieldType = \"second\" | \"minute\" | \"hour\" | \"day\" | \"month\" | \"weekday\";\ntype ComponentType = {\n content: string;\n field: CronFieldType;\n};\n\ntype TokenType = \"any\" | \"range\" | \"step\" | \"number\";\n\nexport class Token {\n private readonly type: TokenType;\n private readonly component: string;\n private readonly value: TokenValueType;\n\n private readonly field: CronFieldType;\n\n public constructor(\n component: string,\n type: TokenType,\n value: TokenValueType,\n field: CronFieldType,\n ) {\n this.component = component;\n this.type = type;\n this.value = value;\n this.field = field;\n }\n\n public getComponent() {\n return this.component;\n }\n\n public getTokenType() {\n return this.type;\n }\n\n public getTokenValue() {\n return this.value;\n }\n\n public getField() {\n return this.field;\n }\n\n public toString() {\n const header = `component=\"${this.component}\", type=${this.type}`;\n const body = `field=\"${this.field}\", value=${this.value}`;\n\n return `Token{${header}, ${body}}`;\n }\n\n public equals(other: Token) {\n if (!other) return false;\n\n const isComponentEqual = this.component === other.getComponent();\n const isTokenTypeEqual = this.type === other.getTokenType();\n const isTokenValueEqual = this.value === other.getTokenValue();\n const isFieldEqual = this.field === other.getField();\n\n return (\n isComponentEqual && isTokenTypeEqual && isTokenValueEqual && isFieldEqual\n );\n }\n}\n\nexport class Scanner {\n private expression: string;\n private current: number;\n private start: number;\n private tokens: Token[];\n\n public constructor(expression: string) {\n this.expression = expression;\n this.current = 0;\n this.start = 0;\n this.tokens = [];\n }\n\n public scan() {\n if (this.expression.length === 0) {\n return err<CronScannerError>(\n \"EmptyCronExpressionError\",\n \"Cron expression have zero length\",\n );\n }\n\n const fields = this.expression.trim().split(/\\s+/);\n const hasMinLen = fields.length === FieldAmount.min;\n const hasMaxLen = fields.length === FieldAmount.max;\n\n if (!hasMinLen && !hasMaxLen) {\n return err<CronScannerError>(\n \"CronLengthError\",\n `Invalid number of fields for '${this.expression}'. Expected 5 or 6 fields but got ${fields.length} field(s)`,\n );\n }\n\n const components = this.createComponent(fields);\n\n for (let idx = 0; idx < components.length; idx++) {\n const component = components[idx];\n if (!component) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid cron expression: ${this.expression}`,\n );\n }\n\n this.current = 0;\n this.start = 0;\n const [error, _] = this.scanComponent(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n }\n\n return ok(this.tokens);\n }\n\n private scanComponent(component: ComponentType) {\n const { field, content } = component;\n while (this.current < content.length) {\n let currentCh = this.advance(content);\n\n switch (currentCh) {\n case \"*\": {\n const ch = this.peek(content);\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n } else if (!ch || ch === \",\") {\n this.addToken(\"*\", \"any\", \"*\", field);\n } else {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid any expression '${content}' for field '${field}'`,\n );\n }\n\n break;\n }\n case \"-\": {\n currentCh = this.advance(content);\n if (this.isDigit(currentCh)) {\n const [error, _] = this.handleRangeWithStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n } else {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n break;\n }\n case \",\": {\n if (this.current === 1 && this.start === 0) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid list expression '${content}' for field '${field}'`,\n );\n }\n\n const next = this.peek(content);\n if (!next || next === \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid list expression '${content}' for field '${field}'`,\n );\n }\n\n break;\n }\n default: {\n if (this.isDigit(currentCh)) {\n const [error, _] = this.handleNumber(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n } else {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid cron expression '${this.expression}' in field '${field}'`,\n );\n }\n\n break;\n }\n }\n\n this.start = this.current;\n }\n\n return ok(true);\n }\n\n private addToken(\n component: string,\n type: TokenType,\n value: TokenValueType,\n field: CronFieldType,\n ) {\n const token = new Token(component, type, value, field);\n this.tokens.push(token);\n }\n\n private advance(content: string) {\n const currentCh = content.charAt(this.current);\n this.current += 1;\n\n return currentCh;\n }\n\n private match(content: string, expected: string) {\n if (this.current >= content.length) return false;\n if (content.charAt(this.current) !== expected) return false;\n\n this.current += 1;\n return true;\n }\n\n private peek(content: string) {\n if (this.current >= content.length) return undefined;\n\n return content.charAt(this.current);\n }\n\n private handleStep(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n const slashIdx = this.current - 1;\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (ch && ch !== \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid step expression '${content}' for field '${field}'`,\n );\n }\n\n const tokenContent = content.substring(this.start, this.current);\n const value = content.slice(slashIdx + 1, this.current);\n\n if (value.length === 0) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid step expression '${content}' for field '${field}'`,\n );\n }\n\n this.addToken(tokenContent, \"step\", Number(value), field);\n return ok(true);\n }\n\n private handleRangeWithStep(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (!ch) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n private handleNumber(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n this.start = this.current - 1;\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (!ch) {\n // Reached the end of the component\n const item = content.substring(this.start);\n this.addToken(item, \"number\", Number(item), field);\n return ok(true);\n }\n\n if (this.match(content, \"-\")) {\n const [error, _] = this.handleRange(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n if (!this.isDigit(ch) && ch !== \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid number '${content}' for field '${field}'`,\n );\n }\n\n const item = content.substring(this.start, this.current);\n this.addToken(item, \"number\", Number(item), field);\n return ok(true);\n }\n\n private handleRange(component: ComponentType) {\n const { field, content } = component;\n let ch = this.peek(content);\n\n if (!ch) {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n while (ch && this.isDigit(ch)) {\n this.advance(content);\n ch = this.peek(content);\n }\n\n if (!ch) {\n // Reached the end of the component\n const tokenContent = content.substring(this.start);\n this.addToken(tokenContent, \"range\", tokenContent, field);\n\n return ok(true);\n }\n\n if (this.match(content, \"/\")) {\n const [error, _] = this.handleStep(component);\n if (error) return err<CronScannerError>(error.type, error.message);\n\n return ok(true);\n }\n\n if (ch && ch !== \",\") {\n return err<CronScannerError>(\n \"CronExpressionError\",\n `Invalid range expression '${content}' for field '${field}'`,\n );\n }\n\n const tokenContent = content.substring(this.start, this.current);\n this.addToken(tokenContent, \"range\", tokenContent, field);\n return ok(true);\n }\n\n private isDigit(ch: string) {\n return ch >= \"0\" && ch <= \"9\";\n }\n\n private createComponent(fields: string[]) {\n const fieldNames = [\n \"second\",\n \"minute\",\n \"hour\",\n \"day\",\n \"month\",\n \"weekday\",\n ] as const;\n const components = [];\n let offset = 1;\n if (fields.length === FieldAmount.max) offset = 0;\n\n for (let idx = 0; idx < fields.length; idx++) {\n const fieldName = fieldNames[idx + offset];\n const content = fields[idx];\n if (!fieldName || !content) break;\n\n components.push({ content, field: fieldName });\n }\n\n return components;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ //#region src/lib/cron/core/types.d.ts
2
+ type CronAlias = "@yearly" | "@monthly" | "@weekly" | "@daily" | "@hourly" | "@minutely";
3
+ type CronStatus = "idle" | "running" | "paused";
4
+ type CronOptions = {
5
+ name: string;
6
+ schedule: CronAlias | (string & {});
7
+ handler: () => void | Promise<void>;
8
+ };
9
+ //#endregion
10
+ export { CronOptions, CronStatus };
11
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/lib/cron/core/types.ts"],"mappings":";KAAY,SAAA;AAAA,KAQA,UAAA;AAAA,KASA,WAAA;EACV,IAAA;EACA,QAAA,EAAU,SAAA;EACV,OAAA,eAAsB,OAAA;AAAA"}
@@ -0,0 +1,11 @@
1
+ //#region src/lib/cron/core/types.d.ts
2
+ type CronAlias = "@yearly" | "@monthly" | "@weekly" | "@daily" | "@hourly" | "@minutely";
3
+ type CronStatus = "idle" | "running" | "paused";
4
+ type CronOptions = {
5
+ name: string;
6
+ schedule: CronAlias | (string & {});
7
+ handler: () => void | Promise<void>;
8
+ };
9
+ //#endregion
10
+ export { CronOptions, CronStatus };
11
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/lib/cron/core/types.ts"],"mappings":";KAAY,SAAA;AAAA,KAQA,UAAA;AAAA,KASA,WAAA;EACV,IAAA;EACA,QAAA,EAAU,SAAA;EACV,OAAA,eAAsB,OAAA;AAAA"}
@@ -0,0 +1,5 @@
1
+ //#region src/lib/errors/types.d.ts
2
+ type CommonError = "NotFoundError" | "UnauthorizedError" | "InternalServerError" | "ValidationError" | "MigrationError" | "SchemaError" | (string & {});
3
+ //#endregion
4
+ export { CommonError };
5
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/errors/types.ts"],"mappings":";KAAY,WAAA"}
@@ -0,0 +1,5 @@
1
+ //#region src/lib/errors/types.d.ts
2
+ type CommonError = "NotFoundError" | "UnauthorizedError" | "InternalServerError" | "ValidationError" | "MigrationError" | "SchemaError" | (string & {});
3
+ //#endregion
4
+ export { CommonError };
5
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/errors/types.ts"],"mappings":";KAAY,WAAA"}
@@ -0,0 +1,13 @@
1
+ //#region src/lib/i18n/types.d.ts
2
+ type ExtractParamType<T extends string> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never;
3
+ type BuildParamObject<T extends string, Acc = {}> = T extends `${infer _Start}{${infer Name}:${infer Type}}${infer Rest}` ? BuildParamObject<Rest, Acc & Record<Name, ExtractParamType<Type>>> : Acc;
4
+ type IsString<T> = T extends string ? true : false;
5
+ type IsArray<T> = T extends readonly unknown[] ? true : false;
6
+ type IsObject<T> = T extends object ? T extends readonly unknown[] ? false : true : false;
7
+ type ArrayKeys<T extends readonly unknown[]> = { [K in keyof T & `${number}`]: `${K}` }[keyof T & `${number}`];
8
+ type ObjectPropertyKeys<K extends string, V> = IsString<V> extends true ? K : IsArray<V> extends true ? V extends readonly unknown[] ? `${K}.${NestedKeyOf<V>}` : never : IsObject<V> extends true ? `${K}.${NestedKeyOf<V>}` : never;
9
+ type NestedKeyOf<T> = IsArray<T> extends true ? T extends readonly unknown[] ? ArrayKeys<T> : never : IsObject<T> extends true ? { [K in keyof T & string]: ObjectPropertyKeys<K, T[K]> }[keyof T & string] : never;
10
+ type GetNestedValue<T, K extends string> = K extends `${infer First}.${infer Rest}` ? First extends keyof T ? GetNestedValue<T[First], Rest> : never : K extends keyof T ? T[K] : never;
11
+ //#endregion
12
+ export { BuildParamObject, GetNestedValue, NestedKeyOf };
13
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/i18n/types.ts"],"mappings":";KACY,gBAAA,qBAAqC,CAAA,6BAE7C,CAAA,6BAEE,CAAA;AAAA,KAIM,gBAAA,+BAGR,CAAA,uEACA,gBAAA,CAAiB,IAAA,EAAM,GAAA,GAAM,MAAA,CAAO,IAAA,EAAM,gBAAA,CAAiB,IAAA,MAC3D,GAAA;AAAA,KAGC,QAAA,MAAc,CAAA;AAAA,KACd,OAAA,MAAa,CAAA;AAAA,KACb,QAAA,MAAc,CAAA,kBACf,CAAA;AAAA,KAMC,SAAA,+CACS,CAAA,oBAAqB,CAAA,WAC3B,CAAA;AAAA,KAGH,kBAAA,wBAA0C,QAAA,CAAS,CAAA,iBACpD,CAAA,GACA,OAAA,CAAQ,CAAA,iBACN,CAAA,iCACK,CAAA,IAAK,WAAA,CAAY,CAAA,cAEtB,QAAA,CAAS,CAAA,oBACJ,CAAA,IAAK,WAAA,CAAY,CAAA;AAAA,KAIhB,WAAA,MACV,OAAA,CAAQ,CAAA,iBACJ,CAAA,8BACE,SAAA,CAAU,CAAA,YAEZ,QAAA,CAAS,CAAA,+BAEO,CAAA,YAAa,kBAAA,CAAmB,CAAA,EAAG,CAAA,CAAE,CAAA,WAC3C,CAAA;AAAA,KAIJ,cAAA,wBAGR,CAAA,0CACA,KAAA,eAAoB,CAAA,GAClB,cAAA,CAAe,CAAA,CAAE,KAAA,GAAQ,IAAA,YAE3B,CAAA,eAAgB,CAAA,GACd,CAAA,CAAE,CAAA"}
@@ -0,0 +1,13 @@
1
+ //#region src/lib/i18n/types.d.ts
2
+ type ExtractParamType<T extends string> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never;
3
+ type BuildParamObject<T extends string, Acc = {}> = T extends `${infer _Start}{${infer Name}:${infer Type}}${infer Rest}` ? BuildParamObject<Rest, Acc & Record<Name, ExtractParamType<Type>>> : Acc;
4
+ type IsString<T> = T extends string ? true : false;
5
+ type IsArray<T> = T extends readonly unknown[] ? true : false;
6
+ type IsObject<T> = T extends object ? T extends readonly unknown[] ? false : true : false;
7
+ type ArrayKeys<T extends readonly unknown[]> = { [K in keyof T & `${number}`]: `${K}` }[keyof T & `${number}`];
8
+ type ObjectPropertyKeys<K extends string, V> = IsString<V> extends true ? K : IsArray<V> extends true ? V extends readonly unknown[] ? `${K}.${NestedKeyOf<V>}` : never : IsObject<V> extends true ? `${K}.${NestedKeyOf<V>}` : never;
9
+ type NestedKeyOf<T> = IsArray<T> extends true ? T extends readonly unknown[] ? ArrayKeys<T> : never : IsObject<T> extends true ? { [K in keyof T & string]: ObjectPropertyKeys<K, T[K]> }[keyof T & string] : never;
10
+ type GetNestedValue<T, K extends string> = K extends `${infer First}.${infer Rest}` ? First extends keyof T ? GetNestedValue<T[First], Rest> : never : K extends keyof T ? T[K] : never;
11
+ //#endregion
12
+ export { BuildParamObject, GetNestedValue, NestedKeyOf };
13
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/i18n/types.ts"],"mappings":";KACY,gBAAA,qBAAqC,CAAA,6BAE7C,CAAA,6BAEE,CAAA;AAAA,KAIM,gBAAA,+BAGR,CAAA,uEACA,gBAAA,CAAiB,IAAA,EAAM,GAAA,GAAM,MAAA,CAAO,IAAA,EAAM,gBAAA,CAAiB,IAAA,MAC3D,GAAA;AAAA,KAGC,QAAA,MAAc,CAAA;AAAA,KACd,OAAA,MAAa,CAAA;AAAA,KACb,QAAA,MAAc,CAAA,kBACf,CAAA;AAAA,KAMC,SAAA,+CACS,CAAA,oBAAqB,CAAA,WAC3B,CAAA;AAAA,KAGH,kBAAA,wBAA0C,QAAA,CAAS,CAAA,iBACpD,CAAA,GACA,OAAA,CAAQ,CAAA,iBACN,CAAA,iCACK,CAAA,IAAK,WAAA,CAAY,CAAA,cAEtB,QAAA,CAAS,CAAA,oBACJ,CAAA,IAAK,WAAA,CAAY,CAAA;AAAA,KAIhB,WAAA,MACV,OAAA,CAAQ,CAAA,iBACJ,CAAA,8BACE,SAAA,CAAU,CAAA,YAEZ,QAAA,CAAS,CAAA,+BAEO,CAAA,YAAa,kBAAA,CAAmB,CAAA,EAAG,CAAA,CAAE,CAAA,WAC3C,CAAA;AAAA,KAIJ,cAAA,wBAGR,CAAA,0CACA,KAAA,eAAoB,CAAA,GAClB,cAAA,CAAe,CAAA,CAAE,KAAA,GAAQ,IAAA,YAE3B,CAAA,eAAgB,CAAA,GACd,CAAA,CAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_index = require("../../api/core/index.cjs");
3
+ const require_index$1 = require("../../api/middleware/index.cjs");
4
+ exports.Api = require_index.Api;
5
+ exports.Middleware = require_index$1.Middleware;
@@ -0,0 +1,5 @@
1
+ import { InferMiddlewareExtension, MergeMiddlewareExtensions, MiddlewareHandler, MiddlewareOptions } from "../../api/middleware/types.cjs";
2
+ import { ApiOptions, Context, ExtractStatusCodes, InferInput, InferOutput, OpenApiOptions, RequestSchema, ResponseSchema, RouteConfig, RouteHandler, SecurityScheme, SecuritySchemeApiKey, SecuritySchemeHttp, SecuritySchemeOAuth2, SecuritySchemeOAuth2Flow, SecuritySchemeOpenIdConnect } from "../../api/core/types.cjs";
3
+ import { Middleware } from "../../api/middleware/index.cjs";
4
+ import { Api } from "../../api/core/index.cjs";
5
+ export { Api, type ApiOptions, type Context, type ExtractStatusCodes, type InferInput, type InferMiddlewareExtension, type InferOutput, type MergeMiddlewareExtensions, Middleware, type MiddlewareHandler, type MiddlewareOptions, type OpenApiOptions, type RequestSchema, type ResponseSchema, type RouteConfig, type RouteHandler, type SecurityScheme, type SecuritySchemeApiKey, type SecuritySchemeHttp, type SecuritySchemeOAuth2, type SecuritySchemeOAuth2Flow, type SecuritySchemeOpenIdConnect };
@@ -0,0 +1,5 @@
1
+ import { InferMiddlewareExtension, MergeMiddlewareExtensions, MiddlewareHandler, MiddlewareOptions } from "../../api/middleware/types.mjs";
2
+ import { ApiOptions, Context, ExtractStatusCodes, InferInput, InferOutput, OpenApiOptions, RequestSchema, ResponseSchema, RouteConfig, RouteHandler, SecurityScheme, SecuritySchemeApiKey, SecuritySchemeHttp, SecuritySchemeOAuth2, SecuritySchemeOAuth2Flow, SecuritySchemeOpenIdConnect } from "../../api/core/types.mjs";
3
+ import { Middleware } from "../../api/middleware/index.mjs";
4
+ import { Api } from "../../api/core/index.mjs";
5
+ export { Api, type ApiOptions, type Context, type ExtractStatusCodes, type InferInput, type InferMiddlewareExtension, type InferOutput, type MergeMiddlewareExtensions, Middleware, type MiddlewareHandler, type MiddlewareOptions, type OpenApiOptions, type RequestSchema, type ResponseSchema, type RouteConfig, type RouteHandler, type SecurityScheme, type SecuritySchemeApiKey, type SecuritySchemeHttp, type SecuritySchemeOAuth2, type SecuritySchemeOAuth2Flow, type SecuritySchemeOpenIdConnect };
@@ -0,0 +1,3 @@
1
+ import { Api } from "../../api/core/index.mjs";
2
+ import { Middleware } from "../../api/middleware/index.mjs";
3
+ export { Api, Middleware };
@@ -0,0 +1,74 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_lib_errors_index = require("../errors/index.cjs");
3
+ //#region src/lib/cache/index.ts
4
+ var Cache = class {
5
+ options;
6
+ serialize;
7
+ deserialize;
8
+ constructor(options) {
9
+ this.options = options;
10
+ this.serialize = options.serializer ?? JSON.stringify;
11
+ this.deserialize = options.deserializer ?? ((raw) => JSON.parse(raw));
12
+ }
13
+ async get(key) {
14
+ if (!this.isEnabled) return this.fail("NotFoundError", `Key ${key} not found`);
15
+ const resolvedKey = this.resolveKey(key);
16
+ const [error, value] = await require_lib_errors_index.mightThrow(this.options.redis.get(resolvedKey));
17
+ if (error) return this.fail("CacheError", `Unable to get value for key ${key}`);
18
+ if (value === null || value === void 0) return this.fail("NotFoundError", `Key ${key} not found`);
19
+ const [deserializeErr, deserialized] = require_lib_errors_index.mightThrowSync(() => this.deserialize(value));
20
+ if (deserializeErr) return this.fail("CacheError", `Unable to deserialize value for key ${key}`);
21
+ return require_lib_errors_index.ok(deserialized);
22
+ }
23
+ async set(key, value) {
24
+ if (!this.isEnabled) return require_lib_errors_index.ok(value);
25
+ const [serializeErr, serialized] = require_lib_errors_index.mightThrowSync(() => this.serialize(value));
26
+ if (serializeErr) return this.fail("CacheError", `Unable to serialize value for key ${key}`);
27
+ if (serialized === null || serialized === void 0) return this.fail("CacheError", `Unable to serialize value for key ${key}`);
28
+ const [ttlErr, ttl] = require_lib_errors_index.mightThrowSync(() => this.resolveTTL(key, value));
29
+ if (ttlErr) return this.fail("InvalidTTLError", `Unable to resolve ttl for key ${key}`);
30
+ if (!this.isTTLValid(ttl)) return this.fail("InvalidTTLError", `Unable to save records with ttl equal to ${ttl}`);
31
+ const resolvedKey = this.resolveKey(key);
32
+ const [setError] = await require_lib_errors_index.mightThrow(this.getSetPromise(resolvedKey, serialized, ttl));
33
+ if (setError) return this.fail("CacheError", `Unable to set value for key ${key}`);
34
+ return require_lib_errors_index.ok(value);
35
+ }
36
+ async delete(key) {
37
+ if (!this.isEnabled) return require_lib_errors_index.ok(0);
38
+ const resolvedKey = this.resolveKey(key);
39
+ const [error, data] = await require_lib_errors_index.mightThrow(this.options.redis.del(resolvedKey));
40
+ if (error) return this.fail("CacheError", `Unable to delete key ${key}`);
41
+ return require_lib_errors_index.ok(data);
42
+ }
43
+ fail(type, message) {
44
+ this.options.onError?.({
45
+ type,
46
+ message
47
+ });
48
+ return require_lib_errors_index.err(type, message);
49
+ }
50
+ get isEnabled() {
51
+ return this.options.enabled !== false;
52
+ }
53
+ resolveKey(key) {
54
+ if (this.options.prefix) return `${this.options.prefix}:${key}`;
55
+ return key;
56
+ }
57
+ resolveTTL(key, value) {
58
+ if (typeof this.options.ttl === "function") return this.options.ttl(key, value);
59
+ return this.options.ttl;
60
+ }
61
+ getSetPromise(key, value, ttl) {
62
+ if (ttl === void 0 || ttl === null) return this.options.redis.set(key, value);
63
+ return this.options.redis.set(key, value, "PX", ttl);
64
+ }
65
+ isTTLValid(ttl) {
66
+ if (ttl === void 0 || ttl === null) return true;
67
+ if (!Number.isFinite(ttl)) return false;
68
+ if (!Number.isInteger(ttl)) return false;
69
+ if (ttl < 0) return false;
70
+ return true;
71
+ }
72
+ };
73
+ //#endregion
74
+ exports.Cache = Cache;
@@ -0,0 +1,36 @@
1
+ import { CacheOptions } from "../../cache/types.cjs";
2
+
3
+ //#region src/lib/cache/index.d.ts
4
+ declare class Cache<T> {
5
+ private options;
6
+ private serialize;
7
+ private deserialize;
8
+ constructor(options: CacheOptions<T>);
9
+ get(key: string): Promise<readonly [{
10
+ readonly type: "NotFoundError";
11
+ readonly message: string;
12
+ }, null] | readonly [{
13
+ readonly type: "CacheError";
14
+ readonly message: string;
15
+ }, null] | readonly [null, T]>;
16
+ set(key: string, value: T): Promise<readonly [{
17
+ readonly type: "CacheError";
18
+ readonly message: string;
19
+ }, null] | readonly [null, T] | readonly [{
20
+ readonly type: "InvalidTTLError";
21
+ readonly message: string;
22
+ }, null]>;
23
+ delete(key: string): Promise<readonly [null, number] | readonly [{
24
+ readonly type: "CacheError";
25
+ readonly message: string;
26
+ }, null]>;
27
+ private fail;
28
+ private get isEnabled();
29
+ private resolveKey;
30
+ private resolveTTL;
31
+ private getSetPromise;
32
+ private isTTLValid;
33
+ }
34
+ //#endregion
35
+ export { Cache };
36
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/cache/index.ts"],"mappings":";;;cAGa,KAAA;EAAA,QACH,OAAA;EAAA,QACA,SAAA;EAAA,QACA,WAAA;cAEW,OAAA,EAAS,YAAA,CAAa,CAAA;EAM5B,GAAA,CAAI,GAAA,WAAW,OAAA;IAAA;;;;;;EAiCf,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,CAAA,GAAC,OAAA;IAAA;;;;;;EAoDzB,MAAA,CAAO,GAAA,WAAW,OAAA;IAAA;;;UAgBvB,IAAA;EAAA,YAMI,SAAA,CAAA;EAAA,QAIJ,UAAA;EAAA,QAQA,UAAA;EAAA,QAQA,aAAA;EAAA,QAYA,UAAA;AAAA"}
@@ -0,0 +1,36 @@
1
+ import { CacheOptions } from "../../cache/types.mjs";
2
+
3
+ //#region src/lib/cache/index.d.ts
4
+ declare class Cache<T> {
5
+ private options;
6
+ private serialize;
7
+ private deserialize;
8
+ constructor(options: CacheOptions<T>);
9
+ get(key: string): Promise<readonly [{
10
+ readonly type: "NotFoundError";
11
+ readonly message: string;
12
+ }, null] | readonly [{
13
+ readonly type: "CacheError";
14
+ readonly message: string;
15
+ }, null] | readonly [null, T]>;
16
+ set(key: string, value: T): Promise<readonly [{
17
+ readonly type: "CacheError";
18
+ readonly message: string;
19
+ }, null] | readonly [null, T] | readonly [{
20
+ readonly type: "InvalidTTLError";
21
+ readonly message: string;
22
+ }, null]>;
23
+ delete(key: string): Promise<readonly [null, number] | readonly [{
24
+ readonly type: "CacheError";
25
+ readonly message: string;
26
+ }, null]>;
27
+ private fail;
28
+ private get isEnabled();
29
+ private resolveKey;
30
+ private resolveTTL;
31
+ private getSetPromise;
32
+ private isTTLValid;
33
+ }
34
+ //#endregion
35
+ export { Cache };
36
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/cache/index.ts"],"mappings":";;;cAGa,KAAA;EAAA,QACH,OAAA;EAAA,QACA,SAAA;EAAA,QACA,WAAA;cAEW,OAAA,EAAS,YAAA,CAAa,CAAA;EAM5B,GAAA,CAAI,GAAA,WAAW,OAAA;IAAA;;;;;;EAiCf,GAAA,CAAI,GAAA,UAAa,KAAA,EAAO,CAAA,GAAC,OAAA;IAAA;;;;;;EAoDzB,MAAA,CAAO,GAAA,WAAW,OAAA;IAAA;;;UAgBvB,IAAA;EAAA,YAMI,SAAA,CAAA;EAAA,QAIJ,UAAA;EAAA,QAQA,UAAA;EAAA,QAQA,aAAA;EAAA,QAYA,UAAA;AAAA"}
@@ -0,0 +1,75 @@
1
+ import { err, mightThrow, mightThrowSync, ok } from "../errors/index.mjs";
2
+ //#region src/lib/cache/index.ts
3
+ var Cache = class {
4
+ options;
5
+ serialize;
6
+ deserialize;
7
+ constructor(options) {
8
+ this.options = options;
9
+ this.serialize = options.serializer ?? JSON.stringify;
10
+ this.deserialize = options.deserializer ?? ((raw) => JSON.parse(raw));
11
+ }
12
+ async get(key) {
13
+ if (!this.isEnabled) return this.fail("NotFoundError", `Key ${key} not found`);
14
+ const resolvedKey = this.resolveKey(key);
15
+ const [error, value] = await mightThrow(this.options.redis.get(resolvedKey));
16
+ if (error) return this.fail("CacheError", `Unable to get value for key ${key}`);
17
+ if (value === null || value === void 0) return this.fail("NotFoundError", `Key ${key} not found`);
18
+ const [deserializeErr, deserialized] = mightThrowSync(() => this.deserialize(value));
19
+ if (deserializeErr) return this.fail("CacheError", `Unable to deserialize value for key ${key}`);
20
+ return ok(deserialized);
21
+ }
22
+ async set(key, value) {
23
+ if (!this.isEnabled) return ok(value);
24
+ const [serializeErr, serialized] = mightThrowSync(() => this.serialize(value));
25
+ if (serializeErr) return this.fail("CacheError", `Unable to serialize value for key ${key}`);
26
+ if (serialized === null || serialized === void 0) return this.fail("CacheError", `Unable to serialize value for key ${key}`);
27
+ const [ttlErr, ttl] = mightThrowSync(() => this.resolveTTL(key, value));
28
+ if (ttlErr) return this.fail("InvalidTTLError", `Unable to resolve ttl for key ${key}`);
29
+ if (!this.isTTLValid(ttl)) return this.fail("InvalidTTLError", `Unable to save records with ttl equal to ${ttl}`);
30
+ const resolvedKey = this.resolveKey(key);
31
+ const [setError] = await mightThrow(this.getSetPromise(resolvedKey, serialized, ttl));
32
+ if (setError) return this.fail("CacheError", `Unable to set value for key ${key}`);
33
+ return ok(value);
34
+ }
35
+ async delete(key) {
36
+ if (!this.isEnabled) return ok(0);
37
+ const resolvedKey = this.resolveKey(key);
38
+ const [error, data] = await mightThrow(this.options.redis.del(resolvedKey));
39
+ if (error) return this.fail("CacheError", `Unable to delete key ${key}`);
40
+ return ok(data);
41
+ }
42
+ fail(type, message) {
43
+ this.options.onError?.({
44
+ type,
45
+ message
46
+ });
47
+ return err(type, message);
48
+ }
49
+ get isEnabled() {
50
+ return this.options.enabled !== false;
51
+ }
52
+ resolveKey(key) {
53
+ if (this.options.prefix) return `${this.options.prefix}:${key}`;
54
+ return key;
55
+ }
56
+ resolveTTL(key, value) {
57
+ if (typeof this.options.ttl === "function") return this.options.ttl(key, value);
58
+ return this.options.ttl;
59
+ }
60
+ getSetPromise(key, value, ttl) {
61
+ if (ttl === void 0 || ttl === null) return this.options.redis.set(key, value);
62
+ return this.options.redis.set(key, value, "PX", ttl);
63
+ }
64
+ isTTLValid(ttl) {
65
+ if (ttl === void 0 || ttl === null) return true;
66
+ if (!Number.isFinite(ttl)) return false;
67
+ if (!Number.isInteger(ttl)) return false;
68
+ if (ttl < 0) return false;
69
+ return true;
70
+ }
71
+ };
72
+ //#endregion
73
+ export { Cache };
74
+
75
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/cache/index.ts"],"sourcesContent":["import { err, mightThrow, mightThrowSync, ok } from \"../errors/index.js\";\nimport type { CacheError, CacheOptions } from \"./types.js\";\n\nexport class Cache<T> {\n private options: CacheOptions<T>;\n private serialize: (value: T) => string;\n private deserialize: (raw: string) => T;\n\n public constructor(options: CacheOptions<T>) {\n this.options = options;\n this.serialize = options.serializer ?? JSON.stringify;\n this.deserialize = options.deserializer ?? ((raw) => JSON.parse(raw));\n }\n\n public async get(key: string) {\n if (!this.isEnabled) {\n return this.fail(\"NotFoundError\", `Key ${key} not found`);\n }\n\n const resolvedKey = this.resolveKey(key);\n\n const [error, value] = await mightThrow(\n this.options.redis.get(resolvedKey),\n );\n\n if (error) {\n return this.fail(\"CacheError\", `Unable to get value for key ${key}`);\n }\n\n if (value === null || value === undefined) {\n return this.fail(\"NotFoundError\", `Key ${key} not found`);\n }\n\n const [deserializeErr, deserialized] = mightThrowSync<T>(() =>\n this.deserialize(value),\n );\n\n if (deserializeErr) {\n return this.fail(\n \"CacheError\",\n `Unable to deserialize value for key ${key}`,\n );\n }\n\n return ok(deserialized);\n }\n\n public async set(key: string, value: T) {\n if (!this.isEnabled) {\n return ok(value);\n }\n\n const [serializeErr, serialized] = mightThrowSync(() =>\n this.serialize(value),\n );\n\n if (serializeErr) {\n return this.fail(\n \"CacheError\",\n `Unable to serialize value for key ${key}`,\n );\n }\n\n if (serialized === null || serialized === undefined) {\n return this.fail(\n \"CacheError\",\n `Unable to serialize value for key ${key}`,\n );\n }\n\n const [ttlErr, ttl] = mightThrowSync(() => this.resolveTTL(key, value));\n\n if (ttlErr) {\n return this.fail(\n \"InvalidTTLError\",\n `Unable to resolve ttl for key ${key}`,\n );\n }\n\n if (!this.isTTLValid(ttl)) {\n return this.fail(\n \"InvalidTTLError\",\n `Unable to save records with ttl equal to ${ttl}`,\n );\n }\n\n const resolvedKey = this.resolveKey(key);\n\n const setPromise = this.getSetPromise(resolvedKey, serialized, ttl);\n\n const [setError] = await mightThrow(setPromise);\n\n if (setError) {\n return this.fail(\"CacheError\", `Unable to set value for key ${key}`);\n }\n\n return ok(value);\n }\n\n public async delete(key: string) {\n if (!this.isEnabled) {\n return ok(0);\n }\n\n const resolvedKey = this.resolveKey(key);\n\n const [error, data] = await mightThrow(this.options.redis.del(resolvedKey));\n\n if (error) {\n return this.fail(\"CacheError\", `Unable to delete key ${key}`);\n }\n\n return ok(data);\n }\n\n private fail<E extends CacheError>(type: E, message: string) {\n this.options.onError?.({ type, message });\n\n return err(type, message);\n }\n\n private get isEnabled() {\n return this.options.enabled !== false;\n }\n\n private resolveKey(key: string) {\n if (this.options.prefix) {\n return `${this.options.prefix}:${key}`;\n }\n\n return key;\n }\n\n private resolveTTL(key: string, value: T) {\n if (typeof this.options.ttl === \"function\") {\n return this.options.ttl(key, value);\n }\n\n return this.options.ttl;\n }\n\n private getSetPromise(\n key: string,\n value: string,\n ttl: number | undefined | null,\n ) {\n if (ttl === undefined || ttl === null) {\n return this.options.redis.set(key, value);\n }\n\n return this.options.redis.set(key, value, \"PX\", ttl);\n }\n\n private isTTLValid(ttl: number | undefined | null) {\n if (ttl === undefined || ttl === null) return true;\n\n if (!Number.isFinite(ttl)) return false;\n\n if (!Number.isInteger(ttl)) return false;\n\n if (ttl < 0) return false;\n\n return true;\n }\n}\n"],"mappings":"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"}