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
package/README.md CHANGED
@@ -18,15 +18,20 @@ Type-safe APIs, Redis queues, pub/sub, i18n, caching & auth with tree-shakeable
18
18
 
19
19
  ## ✨ Features
20
20
 
21
- | Module | Description | Import |
22
- | -------------------- | ------------------------------------------------------ | --------------- |
23
- | **🚀 API Framework** | Type-safe REST API with OpenAPI & Bun-native routing | `semola/api` |
24
- | **📬 Queue** | Redis-backed job queue with timeouts & concurrency | `semola/queue` |
25
- | **📡 PubSub** | Type-safe Redis pub/sub for real-time messaging | `semola/pubsub` |
26
- | **🔐 Policy** | Policy-based authorization with type-safe guards | `semola/policy` |
27
- | **🌍 i18n** | Compile-time validated internationalization | `semola/i18n` |
28
- | **💾 Cache** | Redis cache wrapper with TTL & automatic serialization | `semola/cache` |
29
- | **⚠️ Errors** | Result-based error handling without try/catch | `semola/errors` |
21
+ | Module | Description | Import |
22
+ | -------------------- | ------------------------------------------------------ | ----------------- |
23
+ | **🚀 API Framework** | Type-safe REST API with OpenAPI & Bun-native routing | `semola/api` |
24
+ | **📬 Queue** | Redis-backed job queue with timeouts & concurrency | `semola/queue` |
25
+ | **📡 PubSub** | Type-safe Redis pub/sub for real-time messaging | `semola/pubsub` |
26
+ | **🔐 Policy** | Policy-based authorization with type-safe guards | `semola/policy` |
27
+ | **🌍 i18n** | Compile-time validated internationalization | `semola/i18n` |
28
+ | **💾 Cache** | Redis cache wrapper with TTL & automatic serialization | `semola/cache` |
29
+ | **⏰ Cron** | In-memory cron scheduler for periodic task execution | `semola/cron` |
30
+ | **🔁 Workflow** | Durable resumable workflows with step persistence | `semola/workflow` |
31
+ | **⚠️ Errors** | Result-based error handling without try/catch | `semola/errors` |
32
+ | **📃 Logging** | A simple logging utility | `semola/logging` |
33
+ | **⌨️ Prompts** | Interactive zero-dependency CLI prompts | `semola/prompts` |
34
+ | **🗄️ ORM** | Type-safe data layer with query APIs + migrations | `semola/orm` |
30
35
 
31
36
  ---
32
37
 
@@ -81,6 +86,14 @@ if (error) {
81
86
  console.log("Success:", data);
82
87
  ```
83
88
 
89
+ `mightThrow` and `mightThrowSync` default their error type to `Error`. If a promise or function can reject or throw non-Error values, pass a custom error generic.
90
+
91
+ ```typescript
92
+ const [customError] = await mightThrow<never, { code: string }>(
93
+ Promise.reject({ code: "RATE_LIMITED" }),
94
+ );
95
+ ```
96
+
84
97
  ### Process Background Jobs
85
98
 
86
99
  ```typescript
@@ -109,12 +122,16 @@ const pubsub = new PubSub({
109
122
  });
110
123
 
111
124
  // Subscribe to messages
112
- await pubsub.subscribe((message) => {
125
+ const [, unsubscribeHandler] = await pubsub.subscribe((message) => {
113
126
  console.log("Received:", message);
114
127
  });
115
128
 
116
129
  // Publish a message
117
130
  await pubsub.publish({ userId: 123, text: "New alert!" });
131
+
132
+ if (unsubscribeHandler) {
133
+ await unsubscribeHandler();
134
+ }
118
135
  ```
119
136
 
120
137
  ### Cache Data with TTL
@@ -135,24 +152,108 @@ const [error, user] = await cache.get("user:123");
135
152
  if (!error) console.log(user);
136
153
  ```
137
154
 
155
+ ### Schedule Recurring Tasks
156
+
157
+ ```typescript
158
+ import { Cron } from "semola/cron";
159
+
160
+ const cleanup = new Cron({
161
+ name: "daily-cleanup",
162
+ schedule: "0 0 * * *", // Daily at midnight
163
+ handler: async () => {
164
+ await deleteOldLogs();
165
+ await archiveInactiveUsers();
166
+ },
167
+ });
168
+
169
+ cleanup.start();
170
+ ```
171
+
172
+ ### Query a Database
173
+
174
+ ```typescript
175
+ import { createOrm, createTable, string, uuid } from "semola/orm";
176
+
177
+ const users = createTable("users", {
178
+ id: uuid("id").primaryKey(),
179
+ name: string("name").notNull(),
180
+ email: string("email").unique().notNull(),
181
+ });
182
+
183
+ const db = createOrm({
184
+ url: "sqlite::memory:",
185
+ tables: { users },
186
+ });
187
+
188
+ // Result-pattern query
189
+ const [findErr, rows] = await db.users.findMany({
190
+ where: { name: { contains: "John" } },
191
+ take: 10,
192
+ });
193
+
194
+ if (findErr) {
195
+ console.error(findErr.type, findErr.message);
196
+ }
197
+
198
+ // Create record (result pattern)
199
+ const [createErr, user] = await db.users.create({
200
+ data: {
201
+ name: "John Doe",
202
+ email: "john@example.com",
203
+ },
204
+ });
205
+
206
+ // Low-level SQL-style methods are also available
207
+ const insertedRows = await db.users.insert({
208
+ data: {
209
+ name: "Jane Doe",
210
+ email: "jane@example.com",
211
+ },
212
+ returning: true,
213
+ });
214
+
215
+ console.log(rows, user, createErr, insertedRows);
216
+ ```
217
+
218
+ ### Run ORM Migrations
219
+
220
+ ```bash
221
+ # create migration from schema diff
222
+ semola orm migrations create add-users
223
+
224
+ # apply pending migrations
225
+ semola orm migrations apply
226
+
227
+ # rollback last applied migration
228
+ semola orm migrations rollback
229
+ ```
230
+
138
231
  ### Check Permissions
139
232
 
140
233
  ```typescript
141
- import { Policy } from "semola/policy";
234
+ import { Policy, eq, has } from "semola/policy";
235
+
236
+ type User = { id: number; role: string; permissions: string[] };
142
237
 
143
- const policy = new Policy();
238
+ const policy = new Policy<User>();
239
+
240
+ // Allow admins full access
241
+ policy.allow({
242
+ action: ["create", "update", "delete"],
243
+ conditions: { role: eq("admin") },
244
+ reason: "Admins have full access",
245
+ });
144
246
 
145
- // Allow admins to edit any post
247
+ // Allow users with a specific permission
146
248
  policy.allow({
147
- action: "update",
148
- entity: "post",
149
- conditions: { role: "admin" },
150
- reason: "Admins can edit any post",
249
+ action: "read",
250
+ conditions: { permissions: has("posts:read") },
151
251
  });
152
252
 
153
- // Check if user can edit
154
- const result = policy.can("update", "post", { role: user.role });
155
- console.log(result.allowed); // true or false
253
+ // Check if user can perform an action
254
+ const user: User = { id: 1, role: "admin", permissions: [] };
255
+ const result = policy.can("update", user);
256
+ console.log(result.allowed); // true
156
257
  ```
157
258
 
158
259
  ### Internationalize Your App
@@ -171,6 +272,15 @@ const i18n = new I18n({
171
272
  console.log(i18n.translate("greeting", { name: "World" }));
172
273
  ```
173
274
 
275
+ ### Log your messages
276
+
277
+ ```typescript
278
+ import { ConsoleProvider, Logger } from "semola/logging";
279
+
280
+ const logger = new Logger("database", [new ConsoleProvider()]);
281
+ logger.info("Hello!");
282
+ ```
283
+
174
284
  ---
175
285
 
176
286
  ## 📦 Installation
@@ -206,14 +316,14 @@ Stop piecing together half-baked solutions from npm. Stop wrestling with type de
206
316
 
207
317
  Semola API is the **fastest API framework** for Bun.
208
318
 
209
- | Framework | Avg Req/Sec | Latency Avg (ms) | vs Semola |
210
- | :--------- | ----------: | ---------------: | :-----------: |
211
- | **Semola** | **40,050** | **1.88** | **baseline** |
212
- | Elysia | 37,185 | 2.13 | 1.1x slower |
213
- | Hono | 34,611 | 2.31 | 1.2x slower |
214
- | Fastify | 26,330 | 3.70 | 1.5x slower |
215
- | Express | 20,031 | 5.02 | **2x slower** |
216
- | NestJS | 16,118 | 6.21 | 2.5x slower |
319
+ | Framework | Avg Req/Sec | Latency Avg (ms) | vs Semola |
320
+ | :--------- | ----------: | ---------------: | :----------: |
321
+ | **Semola** | **40,050** | **1.88** | **baseline** |
322
+ | Elysia | 37,185 | 2.13 | 1.1x slower |
323
+ | Hono | 34,611 | 2.31 | 1.2x slower |
324
+ | Fastify | 26,330 | 3.70 | 1.5x slower |
325
+ | Express | 20,031 | 5.02 | 2x slower |
326
+ | NestJS | 16,118 | 6.21 | 2.5x slower |
217
327
 
218
328
  _Higher is better for req/sec, lower is better for latency._
219
329
 
@@ -234,10 +344,15 @@ _Higher is better for req/sec, lower is better for latency._
234
344
  - [API Framework](./docs/api.md) - Type-safe REST API framework with OpenAPI
235
345
  - [Queue](./docs/queue.md) - Redis-backed job queue with timeouts & concurrency
236
346
  - [PubSub](./docs/pubsub.md) - Type-safe Redis pub/sub
347
+ - [Cron](./docs/cron.md) - In-memory cron scheduler for periodic task execution
348
+ - [Workflow](./docs/workflow.md) - Durable and resumable workflows with step persistence
237
349
  - [Policy](./docs/policy.md) - Policy-based authorization
238
350
  - [i18n](./docs/i18n.md) - Type-safe internationalization
239
351
  - [Cache](./docs/cache.md) - Redis cache wrapper with TTL
240
352
  - [Errors](./docs/errors.md) - Result-based error handling
353
+ - [Logging](./docs/logging.md) - Logging utility
354
+ - [Prompts](./docs/prompts.md) - Interactive CLI prompts
355
+ - [ORM](./docs/orm.md) - Type-safe data layer, result-pattern DX, and migrations
241
356
 
242
357
  ---
243
358
 
@@ -263,6 +378,6 @@ bun check
263
378
 
264
379
  This package uses GitHub Actions for automated publishing. To release:
265
380
 
266
- 1. Bump version: `bun version <major|minor|patch>`
381
+ 1. Bump version: `bun pm version <major|minor|patch>`
267
382
  2. Create a GitHub release with a new tag (e.g., `v0.4.0`)
268
383
  3. The GitHub Action automatically publishes to npm with provenance
@@ -0,0 +1,206 @@
1
+ const require_lib_errors_index = require("../../lib/errors/index.cjs");
2
+ const require_index = require("../openapi/index.cjs");
3
+ const require_index$1 = require("../validation/index.cjs");
4
+ //#region src/lib/api/core/index.ts
5
+ const defaultValidated = Object.freeze({
6
+ body: void 0,
7
+ query: void 0,
8
+ headers: void 0,
9
+ cookies: void 0,
10
+ params: void 0
11
+ });
12
+ const responseHelpers = {
13
+ json: (status, data) => Response.json(data, { status }),
14
+ text: (status, text) => new Response(text, { status }),
15
+ html: (status, html) => new Response(html, {
16
+ status,
17
+ headers: { "Content-Type": "text/html" }
18
+ }),
19
+ redirect: (status, url) => Response.redirect(url, status)
20
+ };
21
+ const noopGet = () => void 0;
22
+ const stripTrailingSlash = (path) => {
23
+ if (path !== "/" && path.endsWith("/")) return path.slice(0, -1);
24
+ return path;
25
+ };
26
+ const hasSchemas = (schema) => schema && (schema.body || schema.query || schema.headers || schema.cookies || schema.params);
27
+ const needsBodyCache = (schema) => schema?.body !== void 0;
28
+ const shouldCreateBodyCache = (hasMiddlewares, allMiddlewares, request) => {
29
+ if (needsBodyCache(request)) return true;
30
+ if (!hasMiddlewares) return false;
31
+ return allMiddlewares.some((mw) => needsBodyCache(mw.options.request));
32
+ };
33
+ const resolveValidation = (v) => {
34
+ if (v === void 0 || v === true) return {
35
+ input: true,
36
+ output: true
37
+ };
38
+ if (v === false) return {
39
+ input: false,
40
+ output: false
41
+ };
42
+ return {
43
+ input: v.input !== false,
44
+ output: v.output !== false
45
+ };
46
+ };
47
+ var Api = class {
48
+ options;
49
+ routes = [];
50
+ constructor(options = {}) {
51
+ this.options = options;
52
+ }
53
+ getFullPath(path) {
54
+ const normalizedPath = stripTrailingSlash(path) || "/";
55
+ if (!this.options.prefix) return normalizedPath;
56
+ const normalizedPrefix = stripTrailingSlash(this.options.prefix);
57
+ if (normalizedPrefix === "/") return normalizedPath;
58
+ if (normalizedPath === "/") return normalizedPrefix;
59
+ return normalizedPrefix + normalizedPath;
60
+ }
61
+ async validateRequestSchema(req, schema, bodyCache) {
62
+ if (!schema) return {
63
+ success: true,
64
+ data: {}
65
+ };
66
+ const v = {};
67
+ if (schema.body) {
68
+ const [err, val] = await require_index$1.validateBody(req, schema.body, bodyCache);
69
+ if (err) return {
70
+ success: false,
71
+ error: err
72
+ };
73
+ v.body = val;
74
+ }
75
+ if (schema.query) {
76
+ const [err, val] = await require_index$1.validateQuery(req, schema.query);
77
+ if (err) return {
78
+ success: false,
79
+ error: err
80
+ };
81
+ v.query = val;
82
+ }
83
+ if (schema.headers) {
84
+ const [err, val] = await require_index$1.validateHeaders(req, schema.headers);
85
+ if (err) return {
86
+ success: false,
87
+ error: err
88
+ };
89
+ v.headers = val;
90
+ }
91
+ if (schema.cookies) {
92
+ const [err, val] = await require_index$1.validateCookies(req, schema.cookies);
93
+ if (err) return {
94
+ success: false,
95
+ error: err
96
+ };
97
+ v.cookies = val;
98
+ }
99
+ if (schema.params) {
100
+ const [err, val] = await require_index$1.validateParams(req, schema.params);
101
+ if (err) return {
102
+ success: false,
103
+ error: err
104
+ };
105
+ v.params = val;
106
+ }
107
+ return {
108
+ success: true,
109
+ data: v
110
+ };
111
+ }
112
+ createContext(req, validated, extensions) {
113
+ return {
114
+ raw: req,
115
+ req: validated,
116
+ ...responseHelpers,
117
+ get: (key) => extensions[key]
118
+ };
119
+ }
120
+ async validateResponseBody(response, schema) {
121
+ if (!schema) return response;
122
+ const statusSchema = schema[response.status];
123
+ if (!statusSchema) return response;
124
+ if (!(response.headers.get("content-type") ?? "").includes("application/json")) return response;
125
+ const [parseError, body] = await require_lib_errors_index.mightThrow(response.clone().json());
126
+ if (parseError) return responseHelpers.json(400, { message: "Invalid response body" });
127
+ const [validationError] = await require_index$1.validateSchema(statusSchema, body);
128
+ if (validationError) return responseHelpers.json(400, { message: validationError.message });
129
+ return response;
130
+ }
131
+ buildBunRoutes() {
132
+ const bunRoutes = {};
133
+ const validationConfig = resolveValidation(this.options.validation);
134
+ for (const route of this.routes) {
135
+ const { path, method, handler, request, response, middlewares } = route;
136
+ const fullPath = this.getFullPath(path);
137
+ if (!bunRoutes[fullPath]) bunRoutes[fullPath] = {};
138
+ const allMiddlewares = [...this.options.middlewares ?? [], ...middlewares ?? []];
139
+ const hasMiddlewares = allMiddlewares.length > 0;
140
+ const hasRouteSchemas = hasSchemas(request);
141
+ const effectiveOutputValidation = validationConfig.output && !!response;
142
+ if (!hasMiddlewares && !(validationConfig.input && hasRouteSchemas) && !effectiveOutputValidation) bunRoutes[fullPath][method] = (req) => {
143
+ const context = Object.create(responseHelpers);
144
+ context.raw = req;
145
+ context.req = defaultValidated;
146
+ context.get = noopGet;
147
+ return handler(context);
148
+ };
149
+ else bunRoutes[fullPath][method] = async (req) => {
150
+ const extensions = {};
151
+ const bodyCache = validationConfig.input && shouldCreateBodyCache(hasMiddlewares, allMiddlewares, request) ? {
152
+ parsed: false,
153
+ value: void 0
154
+ } : void 0;
155
+ for (const mw of allMiddlewares) {
156
+ const { request: reqSchema, handler: mwHandler } = mw.options;
157
+ let validated = defaultValidated;
158
+ if (validationConfig.input && hasSchemas(reqSchema)) {
159
+ const result = await this.validateRequestSchema(req, reqSchema, bodyCache);
160
+ if (!result.success) return responseHelpers.json(400, { message: result.error?.message });
161
+ validated = result.data;
162
+ }
163
+ const mwResult = await mwHandler(this.createContext(req, validated, extensions));
164
+ if (mwResult instanceof Response) return mwResult;
165
+ if (mwResult) Object.assign(extensions, mwResult);
166
+ }
167
+ let routeValidated = defaultValidated;
168
+ if (validationConfig.input && hasRouteSchemas) {
169
+ const result = await this.validateRequestSchema(req, request, bodyCache);
170
+ if (!result.success) return responseHelpers.json(400, { message: result.error?.message });
171
+ routeValidated = result.data;
172
+ }
173
+ const handlerResponse = await handler(this.createContext(req, routeValidated, extensions));
174
+ if (effectiveOutputValidation) return this.validateResponseBody(handlerResponse, response);
175
+ return handlerResponse;
176
+ };
177
+ }
178
+ return bunRoutes;
179
+ }
180
+ defineRoute(config) {
181
+ this.routes.push(config);
182
+ }
183
+ getOpenApiSpec() {
184
+ return require_index.generateOpenApiSpec({
185
+ title: this.options.openapi?.title ?? "API",
186
+ description: this.options.openapi?.description,
187
+ version: this.options.openapi?.version ?? "1.0.0",
188
+ prefix: this.options.prefix,
189
+ servers: this.options.openapi?.servers,
190
+ securitySchemes: this.options.openapi?.securitySchemes,
191
+ routes: this.routes,
192
+ globalMiddlewares: this.options.middlewares
193
+ });
194
+ }
195
+ serve(port, callback) {
196
+ const bunRoutes = this.buildBunRoutes();
197
+ const server = Bun.serve({
198
+ port,
199
+ routes: bunRoutes,
200
+ fetch: () => new Response("Not found", { status: 404 })
201
+ });
202
+ if (callback) callback(server);
203
+ }
204
+ };
205
+ //#endregion
206
+ exports.Api = Api;
@@ -0,0 +1,21 @@
1
+ import { OpenApiSpec } from "../openapi/types.cjs";
2
+ import { ApiOptions, RequestSchema, ResponseSchema, RouteConfig } from "./types.cjs";
3
+ import { Middleware } from "../middleware/index.cjs";
4
+
5
+ //#region src/lib/api/core/index.d.ts
6
+ declare class Api<TMiddlewares extends readonly Middleware[] = readonly []> {
7
+ private options;
8
+ private routes;
9
+ constructor(options?: ApiOptions<TMiddlewares>);
10
+ private getFullPath;
11
+ private validateRequestSchema;
12
+ private createContext;
13
+ private validateResponseBody;
14
+ private buildBunRoutes;
15
+ defineRoute<TReq extends RequestSchema = RequestSchema, TRes extends ResponseSchema = ResponseSchema, TRouteMiddlewares extends readonly Middleware[] = readonly []>(config: RouteConfig<TReq, TRes, TMiddlewares, TRouteMiddlewares>): void;
16
+ getOpenApiSpec(): Promise<OpenApiSpec>;
17
+ serve(port: number, callback?: (server: Bun.Server<unknown>) => void): void;
18
+ }
19
+ //#endregion
20
+ export { Api };
21
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/api/core/index.ts"],"mappings":";;;;;cA4Ea,GAAA,+BAAkC,UAAA;EAAA,QACrC,OAAA;EAAA,QACA,MAAA;cAOW,OAAA,GAAS,UAAA,CAAW,YAAA;EAAA,QAI/B,WAAA;EAAA,QAaM,qBAAA;EAAA,QA+EN,aAAA;EAAA,QAaM,oBAAA;EAAA,QA6BN,cAAA;EAuHD,WAAA,cACQ,aAAA,GAAgB,aAAA,eAChB,cAAA,GAAiB,cAAA,qCACK,UAAA,iBAAA,CACnC,MAAA,EAAQ,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,iBAAA;EAWzC,cAAA,CAAA,GAAc,OAAA,CAXA,WAAA;EAwBd,KAAA,CAAM,IAAA,UAAc,QAAA,IAAY,MAAA,EAAQ,GAAA,CAAI,MAAA;AAAA"}
@@ -0,0 +1,21 @@
1
+ import { OpenApiSpec } from "../openapi/types.mjs";
2
+ import { ApiOptions, RequestSchema, ResponseSchema, RouteConfig } from "./types.mjs";
3
+ import { Middleware } from "../middleware/index.mjs";
4
+
5
+ //#region src/lib/api/core/index.d.ts
6
+ declare class Api<TMiddlewares extends readonly Middleware[] = readonly []> {
7
+ private options;
8
+ private routes;
9
+ constructor(options?: ApiOptions<TMiddlewares>);
10
+ private getFullPath;
11
+ private validateRequestSchema;
12
+ private createContext;
13
+ private validateResponseBody;
14
+ private buildBunRoutes;
15
+ defineRoute<TReq extends RequestSchema = RequestSchema, TRes extends ResponseSchema = ResponseSchema, TRouteMiddlewares extends readonly Middleware[] = readonly []>(config: RouteConfig<TReq, TRes, TMiddlewares, TRouteMiddlewares>): void;
16
+ getOpenApiSpec(): Promise<OpenApiSpec>;
17
+ serve(port: number, callback?: (server: Bun.Server<unknown>) => void): void;
18
+ }
19
+ //#endregion
20
+ export { Api };
21
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/api/core/index.ts"],"mappings":";;;;;cA4Ea,GAAA,+BAAkC,UAAA;EAAA,QACrC,OAAA;EAAA,QACA,MAAA;cAOW,OAAA,GAAS,UAAA,CAAW,YAAA;EAAA,QAI/B,WAAA;EAAA,QAaM,qBAAA;EAAA,QA+EN,aAAA;EAAA,QAaM,oBAAA;EAAA,QA6BN,cAAA;EAuHD,WAAA,cACQ,aAAA,GAAgB,aAAA,eAChB,cAAA,GAAiB,cAAA,qCACK,UAAA,iBAAA,CACnC,MAAA,EAAQ,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,YAAA,EAAc,iBAAA;EAWzC,cAAA,CAAA,GAAc,OAAA,CAXA,WAAA;EAwBd,KAAA,CAAM,IAAA,UAAc,QAAA,IAAY,MAAA,EAAQ,GAAA,CAAI,MAAA;AAAA"}