semola 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +75 -20
  2. package/dist/api/core/index.cjs +206 -0
  3. package/dist/api/core/index.d.cts +21 -0
  4. package/dist/api/core/index.d.cts.map +1 -0
  5. package/dist/api/core/index.d.mts +21 -0
  6. package/dist/api/core/index.d.mts.map +1 -0
  7. package/dist/api/core/index.mjs +208 -0
  8. package/dist/api/core/index.mjs.map +1 -0
  9. package/dist/api/core/types.d.cts +107 -0
  10. package/dist/api/core/types.d.cts.map +1 -0
  11. package/dist/api/core/types.d.mts +107 -0
  12. package/dist/api/core/types.d.mts.map +1 -0
  13. package/dist/api/middleware/index.cjs +8 -0
  14. package/dist/api/middleware/index.d.cts +11 -0
  15. package/dist/api/middleware/index.d.cts.map +1 -0
  16. package/dist/api/middleware/index.d.mts +11 -0
  17. package/dist/api/middleware/index.d.mts.map +1 -0
  18. package/dist/api/middleware/index.mjs +10 -0
  19. package/dist/api/middleware/index.mjs.map +1 -0
  20. package/dist/api/middleware/types.d.cts +16 -0
  21. package/dist/api/middleware/types.d.cts.map +1 -0
  22. package/dist/api/middleware/types.d.mts +16 -0
  23. package/dist/api/middleware/types.d.mts.map +1 -0
  24. package/dist/api/openapi/index.cjs +254 -0
  25. package/dist/api/openapi/index.mjs +256 -0
  26. package/dist/api/openapi/index.mjs.map +1 -0
  27. package/dist/api/openapi/types.d.cts +60 -0
  28. package/dist/api/openapi/types.d.cts.map +1 -0
  29. package/dist/api/openapi/types.d.mts +60 -0
  30. package/dist/api/openapi/types.d.mts.map +1 -0
  31. package/dist/api/validation/index.cjs +64 -0
  32. package/dist/api/validation/index.mjs +61 -0
  33. package/dist/api/validation/index.mjs.map +1 -0
  34. package/dist/cache/types.d.cts +17 -0
  35. package/dist/cache/types.d.cts.map +1 -0
  36. package/dist/cache/types.d.mts +17 -0
  37. package/dist/cache/types.d.mts.map +1 -0
  38. package/dist/cron/scanner.cjs +237 -0
  39. package/dist/cron/scanner.mjs +238 -0
  40. package/dist/cron/scanner.mjs.map +1 -0
  41. package/dist/cron/types.d.cts +11 -0
  42. package/dist/cron/types.d.cts.map +1 -0
  43. package/dist/cron/types.d.mts +11 -0
  44. package/dist/cron/types.d.mts.map +1 -0
  45. package/dist/errors/types.d.cts +5 -0
  46. package/dist/errors/types.d.cts.map +1 -0
  47. package/dist/errors/types.d.mts +5 -0
  48. package/dist/errors/types.d.mts.map +1 -0
  49. package/dist/i18n/types.d.cts +13 -0
  50. package/dist/i18n/types.d.cts.map +1 -0
  51. package/dist/i18n/types.d.mts +13 -0
  52. package/dist/i18n/types.d.mts.map +1 -0
  53. package/dist/lib/api/index.cjs +5 -0
  54. package/dist/lib/api/index.d.cts +5 -0
  55. package/dist/lib/api/index.d.mts +5 -0
  56. package/dist/lib/api/index.mjs +3 -0
  57. package/dist/lib/cache/index.cjs +74 -0
  58. package/dist/lib/cache/index.d.cts +36 -0
  59. package/dist/lib/cache/index.d.cts.map +1 -0
  60. package/dist/lib/cache/index.d.mts +36 -0
  61. package/dist/lib/cache/index.d.mts.map +1 -0
  62. package/dist/lib/cache/index.mjs +75 -0
  63. package/dist/lib/cache/index.mjs.map +1 -0
  64. package/dist/lib/cron/index.cjs +276 -0
  65. package/dist/lib/cron/index.d.cts +39 -0
  66. package/dist/lib/cron/index.d.cts.map +1 -0
  67. package/dist/lib/cron/index.d.mts +39 -0
  68. package/dist/lib/cron/index.d.mts.map +1 -0
  69. package/dist/lib/cron/index.mjs +277 -0
  70. package/dist/lib/cron/index.mjs.map +1 -0
  71. package/dist/lib/errors/index.cjs +30 -0
  72. package/dist/lib/errors/index.d.cts +13 -0
  73. package/dist/lib/errors/index.d.cts.map +1 -0
  74. package/dist/lib/errors/index.d.mts +13 -0
  75. package/dist/lib/errors/index.d.mts.map +1 -0
  76. package/dist/lib/errors/index.mjs +28 -0
  77. package/dist/lib/errors/index.mjs.map +1 -0
  78. package/dist/lib/i18n/index.cjs +37 -0
  79. package/dist/lib/i18n/index.d.cts +20 -0
  80. package/dist/lib/i18n/index.d.cts.map +1 -0
  81. package/dist/lib/i18n/index.d.mts +20 -0
  82. package/dist/lib/i18n/index.d.mts.map +1 -0
  83. package/dist/lib/i18n/index.mjs +38 -0
  84. package/dist/lib/i18n/index.mjs.map +1 -0
  85. package/dist/lib/policy/index.cjs +99 -0
  86. package/dist/lib/policy/index.d.cts +21 -0
  87. package/dist/lib/policy/index.d.cts.map +1 -0
  88. package/dist/lib/policy/index.d.mts +21 -0
  89. package/dist/lib/policy/index.d.mts.map +1 -0
  90. package/dist/lib/policy/index.mjs +81 -0
  91. package/dist/lib/policy/index.mjs.map +1 -0
  92. package/dist/lib/prompts/index.cjs +409 -0
  93. package/dist/lib/prompts/index.d.cts +31 -0
  94. package/dist/lib/prompts/index.d.cts.map +1 -0
  95. package/dist/lib/prompts/index.d.mts +31 -0
  96. package/dist/lib/prompts/index.d.mts.map +1 -0
  97. package/dist/lib/prompts/index.mjs +405 -0
  98. package/dist/lib/prompts/index.mjs.map +1 -0
  99. package/dist/lib/pubsub/index.cjs +48 -0
  100. package/dist/lib/pubsub/index.d.cts +27 -0
  101. package/dist/lib/pubsub/index.d.cts.map +1 -0
  102. package/dist/lib/pubsub/index.d.mts +27 -0
  103. package/dist/lib/pubsub/index.d.mts.map +1 -0
  104. package/dist/lib/pubsub/index.mjs +49 -0
  105. package/dist/lib/pubsub/index.mjs.map +1 -0
  106. package/dist/lib/queue/index.cjs +182 -0
  107. package/dist/lib/queue/index.d.cts +32 -0
  108. package/dist/lib/queue/index.d.cts.map +1 -0
  109. package/dist/lib/queue/index.d.mts +32 -0
  110. package/dist/lib/queue/index.d.mts.map +1 -0
  111. package/dist/lib/queue/index.mjs +183 -0
  112. package/dist/lib/queue/index.mjs.map +1 -0
  113. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +80 -0
  114. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +1 -0
  115. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +80 -0
  116. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +1 -0
  117. package/dist/policy/helpers.cjs +206 -0
  118. package/dist/policy/helpers.d.cts +50 -0
  119. package/dist/policy/helpers.d.cts.map +1 -0
  120. package/dist/policy/helpers.d.mts +50 -0
  121. package/dist/policy/helpers.d.mts.map +1 -0
  122. package/dist/policy/helpers.mjs +190 -0
  123. package/dist/policy/helpers.mjs.map +1 -0
  124. package/dist/policy/types.d.cts +16 -0
  125. package/dist/policy/types.d.cts.map +1 -0
  126. package/dist/policy/types.d.mts +16 -0
  127. package/dist/policy/types.d.mts.map +1 -0
  128. package/dist/prompts/core/keys.cjs +165 -0
  129. package/dist/prompts/core/keys.mjs +167 -0
  130. package/dist/prompts/core/keys.mjs.map +1 -0
  131. package/dist/prompts/core/runtime.cjs +104 -0
  132. package/dist/prompts/core/runtime.mjs +106 -0
  133. package/dist/prompts/core/runtime.mjs.map +1 -0
  134. package/dist/prompts/core/session.cjs +98 -0
  135. package/dist/prompts/core/session.mjs +100 -0
  136. package/dist/prompts/core/session.mjs.map +1 -0
  137. package/dist/prompts/core/types.d.cts +21 -0
  138. package/dist/prompts/core/types.d.cts.map +1 -0
  139. package/dist/prompts/core/types.d.mts +21 -0
  140. package/dist/prompts/core/types.d.mts.map +1 -0
  141. package/dist/prompts/types.d.cts +52 -0
  142. package/dist/prompts/types.d.cts.map +1 -0
  143. package/dist/prompts/types.d.mts +52 -0
  144. package/dist/prompts/types.d.mts.map +1 -0
  145. package/dist/pubsub/types.d.cts +10 -0
  146. package/dist/pubsub/types.d.cts.map +1 -0
  147. package/dist/pubsub/types.d.mts +10 -0
  148. package/dist/pubsub/types.d.mts.map +1 -0
  149. package/dist/queue/types.d.cts +47 -0
  150. package/dist/queue/types.d.cts.map +1 -0
  151. package/dist/queue/types.d.mts +47 -0
  152. package/dist/queue/types.d.mts.map +1 -0
  153. package/package.json +86 -16
  154. package/dist/lib/api/core/index.d.ts +0 -15
  155. package/dist/lib/api/core/index.d.ts.map +0 -1
  156. package/dist/lib/api/core/index.js +0 -166
  157. package/dist/lib/api/core/index.js.map +0 -1
  158. package/dist/lib/api/core/index.test.d.ts +0 -2
  159. package/dist/lib/api/core/index.test.d.ts.map +0 -1
  160. package/dist/lib/api/core/index.test.js +0 -219
  161. package/dist/lib/api/core/index.test.js.map +0 -1
  162. package/dist/lib/api/core/types.d.ts +0 -102
  163. package/dist/lib/api/core/types.d.ts.map +0 -1
  164. package/dist/lib/api/core/types.js +0 -2
  165. package/dist/lib/api/core/types.js.map +0 -1
  166. package/dist/lib/api/index.d.ts +0 -5
  167. package/dist/lib/api/index.d.ts.map +0 -1
  168. package/dist/lib/api/index.js +0 -3
  169. package/dist/lib/api/index.js.map +0 -1
  170. package/dist/lib/api/middleware/index.d.ts +0 -7
  171. package/dist/lib/api/middleware/index.d.ts.map +0 -1
  172. package/dist/lib/api/middleware/index.js +0 -7
  173. package/dist/lib/api/middleware/index.js.map +0 -1
  174. package/dist/lib/api/middleware/index.test.d.ts +0 -2
  175. package/dist/lib/api/middleware/index.test.d.ts.map +0 -1
  176. package/dist/lib/api/middleware/index.test.js +0 -67
  177. package/dist/lib/api/middleware/index.test.js.map +0 -1
  178. package/dist/lib/api/middleware/types.d.ts +0 -12
  179. package/dist/lib/api/middleware/types.d.ts.map +0 -1
  180. package/dist/lib/api/middleware/types.js +0 -2
  181. package/dist/lib/api/middleware/types.js.map +0 -1
  182. package/dist/lib/api/openapi/index.d.ts +0 -31
  183. package/dist/lib/api/openapi/index.d.ts.map +0 -1
  184. package/dist/lib/api/openapi/index.js +0 -328
  185. package/dist/lib/api/openapi/index.js.map +0 -1
  186. package/dist/lib/api/openapi/index.test.d.ts +0 -2
  187. package/dist/lib/api/openapi/index.test.d.ts.map +0 -1
  188. package/dist/lib/api/openapi/index.test.js +0 -359
  189. package/dist/lib/api/openapi/index.test.js.map +0 -1
  190. package/dist/lib/api/openapi/types.d.ts +0 -57
  191. package/dist/lib/api/openapi/types.d.ts.map +0 -1
  192. package/dist/lib/api/openapi/types.js +0 -5
  193. package/dist/lib/api/openapi/types.js.map +0 -1
  194. package/dist/lib/api/validation/index.d.ts +0 -33
  195. package/dist/lib/api/validation/index.d.ts.map +0 -1
  196. package/dist/lib/api/validation/index.js +0 -81
  197. package/dist/lib/api/validation/index.js.map +0 -1
  198. package/dist/lib/api/validation/index.test.d.ts +0 -2
  199. package/dist/lib/api/validation/index.test.d.ts.map +0 -1
  200. package/dist/lib/api/validation/index.test.js +0 -135
  201. package/dist/lib/api/validation/index.test.js.map +0 -1
  202. package/dist/lib/cache/index.d.ts +0 -25
  203. package/dist/lib/cache/index.d.ts.map +0 -1
  204. package/dist/lib/cache/index.js +0 -62
  205. package/dist/lib/cache/index.js.map +0 -1
  206. package/dist/lib/cache/index.test.d.ts +0 -2
  207. package/dist/lib/cache/index.test.d.ts.map +0 -1
  208. package/dist/lib/cache/index.test.js +0 -314
  209. package/dist/lib/cache/index.test.js.map +0 -1
  210. package/dist/lib/cache/types.d.ts +0 -5
  211. package/dist/lib/cache/types.d.ts.map +0 -1
  212. package/dist/lib/cache/types.js +0 -2
  213. package/dist/lib/cache/types.js.map +0 -1
  214. package/dist/lib/errors/index.d.ts +0 -9
  215. package/dist/lib/errors/index.d.ts.map +0 -1
  216. package/dist/lib/errors/index.js +0 -25
  217. package/dist/lib/errors/index.js.map +0 -1
  218. package/dist/lib/errors/index.test.d.ts +0 -2
  219. package/dist/lib/errors/index.test.d.ts.map +0 -1
  220. package/dist/lib/errors/index.test.js +0 -197
  221. package/dist/lib/errors/index.test.js.map +0 -1
  222. package/dist/lib/errors/types.d.ts +0 -2
  223. package/dist/lib/errors/types.d.ts.map +0 -1
  224. package/dist/lib/errors/types.js +0 -2
  225. package/dist/lib/errors/types.js.map +0 -1
  226. package/dist/lib/i18n/index.d.ts +0 -18
  227. package/dist/lib/i18n/index.d.ts.map +0 -1
  228. package/dist/lib/i18n/index.js +0 -38
  229. package/dist/lib/i18n/index.js.map +0 -1
  230. package/dist/lib/i18n/index.test.d.ts +0 -2
  231. package/dist/lib/i18n/index.test.d.ts.map +0 -1
  232. package/dist/lib/i18n/index.test.js +0 -402
  233. package/dist/lib/i18n/index.test.js.map +0 -1
  234. package/dist/lib/i18n/types.d.ts +0 -15
  235. package/dist/lib/i18n/types.d.ts.map +0 -1
  236. package/dist/lib/i18n/types.js +0 -2
  237. package/dist/lib/i18n/types.js.map +0 -1
  238. package/dist/lib/policy/index.d.ts +0 -9
  239. package/dist/lib/policy/index.d.ts.map +0 -1
  240. package/dist/lib/policy/index.js +0 -51
  241. package/dist/lib/policy/index.js.map +0 -1
  242. package/dist/lib/policy/index.test.d.ts +0 -2
  243. package/dist/lib/policy/index.test.d.ts.map +0 -1
  244. package/dist/lib/policy/index.test.js +0 -328
  245. package/dist/lib/policy/index.test.js.map +0 -1
  246. package/dist/lib/policy/types.d.ts +0 -27
  247. package/dist/lib/policy/types.d.ts.map +0 -1
  248. package/dist/lib/policy/types.js +0 -2
  249. package/dist/lib/policy/types.js.map +0 -1
  250. package/dist/lib/pubsub/index.d.ts +0 -23
  251. package/dist/lib/pubsub/index.d.ts.map +0 -1
  252. package/dist/lib/pubsub/index.js +0 -55
  253. package/dist/lib/pubsub/index.js.map +0 -1
  254. package/dist/lib/pubsub/index.test.d.ts +0 -2
  255. package/dist/lib/pubsub/index.test.d.ts.map +0 -1
  256. package/dist/lib/pubsub/index.test.js +0 -550
  257. package/dist/lib/pubsub/index.test.js.map +0 -1
  258. package/dist/lib/pubsub/types.d.ts +0 -7
  259. package/dist/lib/pubsub/types.d.ts.map +0 -1
  260. package/dist/lib/pubsub/types.js +0 -2
  261. package/dist/lib/pubsub/types.js.map +0 -1
  262. package/dist/lib/queue/index.d.ts +0 -28
  263. package/dist/lib/queue/index.d.ts.map +0 -1
  264. package/dist/lib/queue/index.js +0 -211
  265. package/dist/lib/queue/index.js.map +0 -1
  266. package/dist/lib/queue/index.test.d.ts +0 -2
  267. package/dist/lib/queue/index.test.d.ts.map +0 -1
  268. package/dist/lib/queue/index.test.js +0 -740
  269. package/dist/lib/queue/index.test.js.map +0 -1
  270. package/dist/lib/queue/types.d.ts +0 -52
  271. package/dist/lib/queue/types.d.ts.map +0 -1
  272. package/dist/lib/queue/types.js +0 -2
  273. package/dist/lib/queue/types.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ import { err, mightThrow, ok } from "../../lib/errors/index.mjs";
2
+ //#region src/lib/prompts/core/session.ts
3
+ const CANCEL_MESSAGE = "Interrupted, bye!";
4
+ const resolveOutput = async (options, value) => {
5
+ if (!options.transform) return ok(value);
6
+ const [transformError, transformed] = await mightThrow(Promise.resolve().then(() => options.transform?.(value)));
7
+ if (transformError || transformed === null || transformed === void 0) return err("PromptIOError", "Prompt transform callback failed unexpectedly");
8
+ return ok(transformed);
9
+ };
10
+ const runValidation = async (options, value) => {
11
+ if (!options.validate) return ok(null);
12
+ const [validationError, validationMessage] = await mightThrow(Promise.resolve().then(() => options.validate?.(value)));
13
+ if (validationError) return err("PromptIOError", "Prompt validate callback failed unexpectedly");
14
+ if (typeof validationMessage === "string" && validationMessage.length > 0) return ok(validationMessage);
15
+ return ok(null);
16
+ };
17
+ const isCancelKey = (key) => {
18
+ if (key.name === "ctrl_c") return true;
19
+ if (key.name === "escape") return true;
20
+ return false;
21
+ };
22
+ const runPromptSession = async (params) => {
23
+ const [initError] = params.runtime.init();
24
+ if (initError) return err(initError.type, initError.message);
25
+ let state = params.initialState;
26
+ let errorMessage = null;
27
+ const closeAndDone = (message) => {
28
+ const [closeErr] = params.runtime.close();
29
+ if (closeErr) return err(closeErr.type, closeErr.message);
30
+ const [doneErr] = params.runtime.done(message);
31
+ if (doneErr) return err(doneErr.type, doneErr.message);
32
+ return null;
33
+ };
34
+ while (true) {
35
+ const [renderError] = params.runtime.render(params.render({
36
+ options: params.options,
37
+ state,
38
+ errorMessage
39
+ }));
40
+ if (renderError) {
41
+ params.runtime.close();
42
+ return err(renderError.type, renderError.message);
43
+ }
44
+ const [readError, key] = await params.runtime.readKey();
45
+ if (readError || !key) {
46
+ params.runtime.close();
47
+ return err(readError?.type ?? "PromptIOError", readError?.message ?? "Unable to read prompt input");
48
+ }
49
+ if (isCancelKey(key)) {
50
+ const [closeError] = params.runtime.close();
51
+ if (closeError) return err(closeError.type, closeError.message);
52
+ const [doneError] = params.runtime.done(`✖ ${CANCEL_MESSAGE}`);
53
+ if (doneError) return err(doneError.type, doneError.message);
54
+ if (params.runtime.interrupt) {
55
+ const [interruptError] = params.runtime.interrupt(CANCEL_MESSAGE);
56
+ if (interruptError) return err(interruptError.type, interruptError.message);
57
+ }
58
+ return err("PromptCancelledError", CANCEL_MESSAGE);
59
+ }
60
+ if (key.name !== "enter") {
61
+ state = params.onKey(state, key);
62
+ errorMessage = null;
63
+ continue;
64
+ }
65
+ const submitResult = params.onSubmit(state);
66
+ if ("errorMessage" in submitResult) {
67
+ errorMessage = submitResult.errorMessage;
68
+ continue;
69
+ }
70
+ const rawValue = submitResult.value;
71
+ const [validationRunError, validationErrorMessage] = await runValidation(params.options, rawValue);
72
+ if (validationRunError) {
73
+ const closeDoneErr = closeAndDone(`✖ ${params.options.message}`);
74
+ if (closeDoneErr) return closeDoneErr;
75
+ return err(validationRunError.type, validationRunError.message);
76
+ }
77
+ if (validationErrorMessage) {
78
+ errorMessage = validationErrorMessage;
79
+ continue;
80
+ }
81
+ const [transformError, finalValue] = await resolveOutput(params.options, rawValue);
82
+ if (transformError) {
83
+ const closeDoneErr = closeAndDone(`✖ ${params.options.message}`);
84
+ if (closeDoneErr) return closeDoneErr;
85
+ return err(transformError.type, transformError.message);
86
+ }
87
+ if (finalValue === null) return err("PromptIOError", "Unable to transform prompt value");
88
+ const closeDoneErr = closeAndDone(params.complete({
89
+ options: params.options,
90
+ state,
91
+ value: finalValue
92
+ }));
93
+ if (closeDoneErr) return closeDoneErr;
94
+ return ok(finalValue);
95
+ }
96
+ };
97
+ //#endregion
98
+ export { runPromptSession };
99
+
100
+ //# sourceMappingURL=session.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.mjs","names":[],"sources":["../../../src/lib/prompts/core/session.ts"],"sourcesContent":["import { err, mightThrow, ok } from \"../../errors/index.js\";\nimport type { BasePromptOptions } from \"../types.js\";\nimport type { Key, PromptRuntime } from \"./types.js\";\n\ntype SubmitResult<TValue> =\n | {\n value: TValue;\n }\n | {\n errorMessage: string;\n };\n\ntype SessionOptions<\n TState,\n TValue,\n TOptions extends BasePromptOptions<TValue>,\n> = {\n runtime: PromptRuntime;\n options: TOptions;\n initialState: TState;\n render: (params: {\n options: TOptions;\n state: TState;\n errorMessage: string | null;\n }) => string;\n complete: (params: {\n options: TOptions;\n state: TState;\n value: TValue;\n }) => string;\n onKey: (state: TState, key: Key) => TState;\n onSubmit: (state: TState) => SubmitResult<TValue>;\n};\n\nconst CANCEL_MESSAGE = \"Interrupted, bye!\";\n\nconst resolveOutput = async <TValue>(\n options: BasePromptOptions<TValue>,\n value: TValue,\n) => {\n if (!options.transform) {\n return ok(value);\n }\n\n const [transformError, transformed] = await mightThrow(\n Promise.resolve().then(() => options.transform?.(value)),\n );\n\n if (transformError || transformed === null || transformed === undefined) {\n return err(\n \"PromptIOError\",\n \"Prompt transform callback failed unexpectedly\",\n );\n }\n\n return ok(transformed);\n};\n\nconst runValidation = async <TValue>(\n options: BasePromptOptions<TValue>,\n value: TValue,\n) => {\n if (!options.validate) {\n return ok(null);\n }\n\n const [validationError, validationMessage] = await mightThrow(\n Promise.resolve().then(() => options.validate?.(value)),\n );\n\n if (validationError) {\n return err(\"PromptIOError\", \"Prompt validate callback failed unexpectedly\");\n }\n\n if (typeof validationMessage === \"string\" && validationMessage.length > 0) {\n return ok(validationMessage);\n }\n\n return ok(null);\n};\n\nconst isCancelKey = (key: Key) => {\n if (key.name === \"ctrl_c\") return true;\n if (key.name === \"escape\") return true;\n\n return false;\n};\n\nexport const runPromptSession = async <\n TState,\n TValue,\n TOptions extends BasePromptOptions<TValue>,\n>(\n params: SessionOptions<TState, TValue, TOptions>,\n) => {\n const [initError] = params.runtime.init();\n\n if (initError) {\n return err(initError.type, initError.message);\n }\n\n let state = params.initialState;\n let errorMessage: string | null = null;\n\n const closeAndDone = (message: string) => {\n const [closeErr] = params.runtime.close();\n\n if (closeErr) {\n return err(closeErr.type, closeErr.message);\n }\n\n const [doneErr] = params.runtime.done(message);\n\n if (doneErr) {\n return err(doneErr.type, doneErr.message);\n }\n\n return null;\n };\n\n while (true) {\n const [renderError] = params.runtime.render(\n params.render({\n options: params.options,\n state,\n errorMessage,\n }),\n );\n\n if (renderError) {\n params.runtime.close();\n return err(renderError.type, renderError.message);\n }\n\n const [readError, key] = await params.runtime.readKey();\n\n if (readError || !key) {\n params.runtime.close();\n return err(\n readError?.type ?? \"PromptIOError\",\n readError?.message ?? \"Unable to read prompt input\",\n );\n }\n\n if (isCancelKey(key)) {\n const [closeError] = params.runtime.close();\n\n if (closeError) {\n return err(closeError.type, closeError.message);\n }\n\n const [doneError] = params.runtime.done(`✖ ${CANCEL_MESSAGE}`);\n\n if (doneError) {\n return err(doneError.type, doneError.message);\n }\n\n if (params.runtime.interrupt) {\n const [interruptError] = params.runtime.interrupt(CANCEL_MESSAGE);\n\n if (interruptError) {\n return err(interruptError.type, interruptError.message);\n }\n }\n\n return err(\"PromptCancelledError\", CANCEL_MESSAGE);\n }\n\n if (key.name !== \"enter\") {\n state = params.onKey(state, key);\n errorMessage = null;\n continue;\n }\n\n const submitResult = params.onSubmit(state);\n\n if (\"errorMessage\" in submitResult) {\n errorMessage = submitResult.errorMessage;\n continue;\n }\n\n const rawValue = submitResult.value;\n\n const [validationRunError, validationErrorMessage] = await runValidation(\n params.options,\n rawValue,\n );\n\n if (validationRunError) {\n const closeDoneErr = closeAndDone(`✖ ${params.options.message}`);\n\n if (closeDoneErr) {\n return closeDoneErr;\n }\n\n return err(validationRunError.type, validationRunError.message);\n }\n\n if (validationErrorMessage) {\n errorMessage = validationErrorMessage;\n continue;\n }\n\n const [transformError, finalValue] = await resolveOutput(\n params.options,\n rawValue,\n );\n\n if (transformError) {\n const closeDoneErr = closeAndDone(`✖ ${params.options.message}`);\n\n if (closeDoneErr) {\n return closeDoneErr;\n }\n\n return err(transformError.type, transformError.message);\n }\n\n if (finalValue === null) {\n return err(\"PromptIOError\", \"Unable to transform prompt value\");\n }\n\n const closeDoneErr = closeAndDone(\n params.complete({\n options: params.options,\n state,\n value: finalValue,\n }),\n );\n\n if (closeDoneErr) {\n return closeDoneErr;\n }\n\n return ok(finalValue);\n }\n};\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { err, ok } from "../../lib/errors/index.cjs";
2
+
3
+ //#region src/lib/prompts/core/types.d.ts
4
+ type PromptResultLike<T> = ReturnType<typeof err<string>> | ReturnType<typeof ok<T>>;
5
+ type KeyName = "character" | "enter" | "backspace" | "delete" | "up" | "down" | "left" | "right" | "ctrl_left" | "ctrl_right" | "shift_left" | "shift_right" | "space" | "escape" | "ctrl_c" | "ctrl_backspace" | "ctrl_a" | "home" | "end" | "shift_ctrl_left" | "shift_ctrl_right" | "tab";
6
+ type Key = {
7
+ name: KeyName;
8
+ value?: string;
9
+ };
10
+ type PromptRuntime = {
11
+ isInteractive: () => boolean;
12
+ init: () => PromptResultLike<void>;
13
+ readKey: () => Promise<PromptResultLike<Key>>;
14
+ render: (frame: string) => PromptResultLike<void>;
15
+ done: (frame: string) => PromptResultLike<void>;
16
+ close: () => PromptResultLike<void>;
17
+ interrupt?: (message: string) => PromptResultLike<undefined>;
18
+ };
19
+ //#endregion
20
+ export { PromptRuntime };
21
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/lib/prompts/core/types.ts"],"mappings":";;;KAEY,gBAAA,MACR,UAAA,QAAkB,GAAA,YAClB,UAAA,QAAkB,EAAA,CAAG,CAAA;AAAA,KAEb,OAAA;AAAA,KAwBA,GAAA;EACV,IAAA,EAAM,OAAA;EACN,KAAA;AAAA;AAAA,KAGU,aAAA;EACV,aAAA;EACA,IAAA,QAAY,gBAAA;EACZ,OAAA,QAAe,OAAA,CAAQ,gBAAA,CAAiB,GAAA;EACxC,MAAA,GAAS,KAAA,aAAkB,gBAAA;EAC3B,IAAA,GAAO,KAAA,aAAkB,gBAAA;EACzB,KAAA,QAAa,gBAAA;EACb,SAAA,IAAa,OAAA,aAAoB,gBAAA;AAAA"}
@@ -0,0 +1,21 @@
1
+ import { err, ok } from "../../lib/errors/index.mjs";
2
+
3
+ //#region src/lib/prompts/core/types.d.ts
4
+ type PromptResultLike<T> = ReturnType<typeof err<string>> | ReturnType<typeof ok<T>>;
5
+ type KeyName = "character" | "enter" | "backspace" | "delete" | "up" | "down" | "left" | "right" | "ctrl_left" | "ctrl_right" | "shift_left" | "shift_right" | "space" | "escape" | "ctrl_c" | "ctrl_backspace" | "ctrl_a" | "home" | "end" | "shift_ctrl_left" | "shift_ctrl_right" | "tab";
6
+ type Key = {
7
+ name: KeyName;
8
+ value?: string;
9
+ };
10
+ type PromptRuntime = {
11
+ isInteractive: () => boolean;
12
+ init: () => PromptResultLike<void>;
13
+ readKey: () => Promise<PromptResultLike<Key>>;
14
+ render: (frame: string) => PromptResultLike<void>;
15
+ done: (frame: string) => PromptResultLike<void>;
16
+ close: () => PromptResultLike<void>;
17
+ interrupt?: (message: string) => PromptResultLike<undefined>;
18
+ };
19
+ //#endregion
20
+ export { PromptRuntime };
21
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/lib/prompts/core/types.ts"],"mappings":";;;KAEY,gBAAA,MACR,UAAA,QAAkB,GAAA,YAClB,UAAA,QAAkB,EAAA,CAAG,CAAA;AAAA,KAEb,OAAA;AAAA,KAwBA,GAAA;EACV,IAAA,EAAM,OAAA;EACN,KAAA;AAAA;AAAA,KAGU,aAAA;EACV,aAAA;EACA,IAAA,QAAY,gBAAA;EACZ,OAAA,QAAe,OAAA,CAAQ,gBAAA,CAAiB,GAAA;EACxC,MAAA,GAAS,KAAA,aAAkB,gBAAA;EAC3B,IAAA,GAAO,KAAA,aAAkB,gBAAA;EACzB,KAAA,QAAa,gBAAA;EACb,SAAA,IAAa,OAAA,aAAoB,gBAAA;AAAA"}
@@ -0,0 +1,52 @@
1
+ //#region src/lib/prompts/types.d.ts
2
+ type PromptErrorType = "PromptEnvironmentError" | "PromptValidationError" | "PromptCancelledError" | "PromptIOError" | (string & {});
3
+ type MaybePromise<T> = T | Promise<T>;
4
+ type Validate<TValue> = ((value: TValue) => MaybePromise<string | null | undefined>) | undefined;
5
+ type Transform<TValue> = ((value: TValue) => MaybePromise<TValue>) | undefined;
6
+ type BasePromptOptions<TValue> = {
7
+ message: string;
8
+ validate?: Validate<TValue>;
9
+ transform?: Transform<TValue>;
10
+ };
11
+ type InputOptions = BasePromptOptions<string> & {
12
+ defaultValue?: string;
13
+ placeholder?: string;
14
+ required?: boolean;
15
+ requiredMessage?: string;
16
+ };
17
+ type PasswordOptions = InputOptions & {
18
+ mask?: string;
19
+ };
20
+ type ConfirmOptions = BasePromptOptions<boolean> & {
21
+ defaultValue?: boolean;
22
+ activeLabel?: string;
23
+ inactiveLabel?: string;
24
+ };
25
+ type NumberOptions = BasePromptOptions<number> & {
26
+ defaultValue?: number;
27
+ min?: number;
28
+ max?: number;
29
+ requiredMessage?: string;
30
+ invalidMessage?: string;
31
+ minMessage?: string;
32
+ maxMessage?: string;
33
+ };
34
+ type SelectChoice<TValue extends string> = {
35
+ value: TValue;
36
+ label?: string;
37
+ hint?: string;
38
+ disabled?: boolean;
39
+ };
40
+ type SelectOptions<TValue extends string> = BasePromptOptions<TValue> & {
41
+ choices: readonly [SelectChoice<TValue>, ...SelectChoice<TValue>[]];
42
+ defaultValue?: TValue;
43
+ };
44
+ type MultiselectOptions<TValue extends string> = BasePromptOptions<TValue[]> & {
45
+ choices: readonly [SelectChoice<TValue>, ...SelectChoice<TValue>[]];
46
+ defaultValue?: readonly TValue[];
47
+ min?: number;
48
+ max?: number;
49
+ };
50
+ //#endregion
51
+ export { ConfirmOptions, InputOptions, MultiselectOptions, NumberOptions, PasswordOptions, PromptErrorType, SelectChoice, SelectOptions };
52
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/prompts/types.ts"],"mappings":";KAAY,eAAA;AAAA,KAOA,YAAA,MAAkB,CAAA,GAAI,OAAA,CAAQ,CAAA;AAAA,KAE9B,QAAA,aACN,KAAA,EAAO,MAAA,KAAW,YAAA;AAAA,KAGZ,SAAA,aACN,KAAA,EAAO,MAAA,KAAW,YAAA,CAAa,MAAA;AAAA,KAGzB,iBAAA;EACV,OAAA;EACA,QAAA,GAAW,QAAA,CAAS,MAAA;EACpB,SAAA,GAAY,SAAA,CAAU,MAAA;AAAA;AAAA,KAGZ,YAAA,GAAe,iBAAA;EACzB,YAAA;EACA,WAAA;EACA,QAAA;EACA,eAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,YAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,cAAA,GAAiB,iBAAA;EAC3B,YAAA;EACA,WAAA;EACA,aAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,iBAAA;EAC1B,YAAA;EACA,GAAA;EACA,GAAA;EACA,eAAA;EACA,cAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAGU,YAAA;EACV,KAAA,EAAO,MAAA;EACP,KAAA;EACA,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,aAAA,0BAAuC,iBAAA,CAAkB,MAAA;EACnE,OAAA,YAAmB,YAAA,CAAa,MAAA,MAAY,YAAA,CAAa,MAAA;EACzD,YAAA,GAAe,MAAA;AAAA;AAAA,KAGL,kBAAA,0BAA4C,iBAAA,CACtD,MAAA;EAEA,OAAA,YAAmB,YAAA,CAAa,MAAA,MAAY,YAAA,CAAa,MAAA;EACzD,YAAA,YAAwB,MAAA;EACxB,GAAA;EACA,GAAA;AAAA"}
@@ -0,0 +1,52 @@
1
+ //#region src/lib/prompts/types.d.ts
2
+ type PromptErrorType = "PromptEnvironmentError" | "PromptValidationError" | "PromptCancelledError" | "PromptIOError" | (string & {});
3
+ type MaybePromise<T> = T | Promise<T>;
4
+ type Validate<TValue> = ((value: TValue) => MaybePromise<string | null | undefined>) | undefined;
5
+ type Transform<TValue> = ((value: TValue) => MaybePromise<TValue>) | undefined;
6
+ type BasePromptOptions<TValue> = {
7
+ message: string;
8
+ validate?: Validate<TValue>;
9
+ transform?: Transform<TValue>;
10
+ };
11
+ type InputOptions = BasePromptOptions<string> & {
12
+ defaultValue?: string;
13
+ placeholder?: string;
14
+ required?: boolean;
15
+ requiredMessage?: string;
16
+ };
17
+ type PasswordOptions = InputOptions & {
18
+ mask?: string;
19
+ };
20
+ type ConfirmOptions = BasePromptOptions<boolean> & {
21
+ defaultValue?: boolean;
22
+ activeLabel?: string;
23
+ inactiveLabel?: string;
24
+ };
25
+ type NumberOptions = BasePromptOptions<number> & {
26
+ defaultValue?: number;
27
+ min?: number;
28
+ max?: number;
29
+ requiredMessage?: string;
30
+ invalidMessage?: string;
31
+ minMessage?: string;
32
+ maxMessage?: string;
33
+ };
34
+ type SelectChoice<TValue extends string> = {
35
+ value: TValue;
36
+ label?: string;
37
+ hint?: string;
38
+ disabled?: boolean;
39
+ };
40
+ type SelectOptions<TValue extends string> = BasePromptOptions<TValue> & {
41
+ choices: readonly [SelectChoice<TValue>, ...SelectChoice<TValue>[]];
42
+ defaultValue?: TValue;
43
+ };
44
+ type MultiselectOptions<TValue extends string> = BasePromptOptions<TValue[]> & {
45
+ choices: readonly [SelectChoice<TValue>, ...SelectChoice<TValue>[]];
46
+ defaultValue?: readonly TValue[];
47
+ min?: number;
48
+ max?: number;
49
+ };
50
+ //#endregion
51
+ export { ConfirmOptions, InputOptions, MultiselectOptions, NumberOptions, PasswordOptions, PromptErrorType, SelectChoice, SelectOptions };
52
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/prompts/types.ts"],"mappings":";KAAY,eAAA;AAAA,KAOA,YAAA,MAAkB,CAAA,GAAI,OAAA,CAAQ,CAAA;AAAA,KAE9B,QAAA,aACN,KAAA,EAAO,MAAA,KAAW,YAAA;AAAA,KAGZ,SAAA,aACN,KAAA,EAAO,MAAA,KAAW,YAAA,CAAa,MAAA;AAAA,KAGzB,iBAAA;EACV,OAAA;EACA,QAAA,GAAW,QAAA,CAAS,MAAA;EACpB,SAAA,GAAY,SAAA,CAAU,MAAA;AAAA;AAAA,KAGZ,YAAA,GAAe,iBAAA;EACzB,YAAA;EACA,WAAA;EACA,QAAA;EACA,eAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,YAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,cAAA,GAAiB,iBAAA;EAC3B,YAAA;EACA,WAAA;EACA,aAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,iBAAA;EAC1B,YAAA;EACA,GAAA;EACA,GAAA;EACA,eAAA;EACA,cAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAGU,YAAA;EACV,KAAA,EAAO,MAAA;EACP,KAAA;EACA,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,aAAA,0BAAuC,iBAAA,CAAkB,MAAA;EACnE,OAAA,YAAmB,YAAA,CAAa,MAAA,MAAY,YAAA,CAAa,MAAA;EACzD,YAAA,GAAe,MAAA;AAAA;AAAA,KAGL,kBAAA,0BAA4C,iBAAA,CACtD,MAAA;EAEA,OAAA,YAAmB,YAAA,CAAa,MAAA,MAAY,YAAA,CAAa,MAAA;EACzD,YAAA,YAAwB,MAAA;EACxB,GAAA;EACA,GAAA;AAAA"}
@@ -0,0 +1,10 @@
1
+ //#region src/lib/pubsub/types.d.ts
2
+ type PubSubOptions = {
3
+ subscriber: Bun.RedisClient;
4
+ publisher: Bun.RedisClient;
5
+ channel: string;
6
+ };
7
+ type MessageHandler<T> = (message: T, channel: string) => void | Promise<void>;
8
+ //#endregion
9
+ export { MessageHandler, PubSubOptions };
10
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/pubsub/types.ts"],"mappings":";KAAY,aAAA;EACV,UAAA,EAAY,GAAA,CAAI,WAAA;EAChB,SAAA,EAAW,GAAA,CAAI,WAAA;EACf,OAAA;AAAA;AAAA,KAGU,cAAA,OACV,OAAA,EAAS,CAAA,EACT,OAAA,oBACU,OAAA"}
@@ -0,0 +1,10 @@
1
+ //#region src/lib/pubsub/types.d.ts
2
+ type PubSubOptions = {
3
+ subscriber: Bun.RedisClient;
4
+ publisher: Bun.RedisClient;
5
+ channel: string;
6
+ };
7
+ type MessageHandler<T> = (message: T, channel: string) => void | Promise<void>;
8
+ //#endregion
9
+ export { MessageHandler, PubSubOptions };
10
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/pubsub/types.ts"],"mappings":";KAAY,aAAA;EACV,UAAA,EAAY,GAAA,CAAI,WAAA;EAChB,SAAA,EAAW,GAAA,CAAI,WAAA;EACf,OAAA;AAAA;AAAA,KAGU,cAAA,OACV,OAAA,EAAS,CAAA,EACT,OAAA,oBACU,OAAA"}
@@ -0,0 +1,47 @@
1
+ //#region src/lib/queue/types.d.ts
2
+ type Job<T> = {
3
+ id: string;
4
+ data: T;
5
+ attempts: number;
6
+ maxRetries: number;
7
+ createdAt: number;
8
+ };
9
+ type RetryContext<T> = {
10
+ job: Job<T>;
11
+ error: string;
12
+ nextRetryDelayMs: number;
13
+ retriesRemaining: number;
14
+ backoffMultiplier: number;
15
+ };
16
+ type ErrorContext<T> = {
17
+ job: Job<T>;
18
+ lastError: string;
19
+ totalDurationMs: number;
20
+ totalAttempts: number;
21
+ errorHistory: Array<{
22
+ attempt: number;
23
+ error: string;
24
+ timestamp: number;
25
+ }>;
26
+ };
27
+ type ParseErrorContext = {
28
+ rawJobData: string;
29
+ parseError: string;
30
+ timestamp: number;
31
+ };
32
+ type QueueOptions<T> = {
33
+ name: string;
34
+ redis: Bun.RedisClient;
35
+ handler: (data: T, signal?: AbortSignal) => void | Promise<void>;
36
+ onSuccess?: (job: Job<T>) => void | Promise<void>;
37
+ onRetry?: (context: RetryContext<T>) => void | Promise<void>;
38
+ onError?: (context: ErrorContext<T>) => void | Promise<void>;
39
+ onParseError?: (context: ParseErrorContext) => void | Promise<void>;
40
+ retries?: number;
41
+ timeout?: number;
42
+ concurrency?: number;
43
+ pollInterval?: number;
44
+ };
45
+ //#endregion
46
+ export { QueueOptions };
47
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/queue/types.ts"],"mappings":";KAAY,GAAA;EACV,EAAA;EACA,IAAA,EAAM,CAAA;EACN,QAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,KAYU,YAAA;EACV,GAAA,EAAK,GAAA,CAAI,CAAA;EACT,KAAA;EACA,gBAAA;EACA,gBAAA;EACA,iBAAA;AAAA;AAAA,KAGU,YAAA;EACV,GAAA,EAAK,GAAA,CAAI,CAAA;EACT,SAAA;EACA,eAAA;EACA,aAAA;EACA,YAAA,EAAc,KAAA;IACZ,OAAA;IACA,KAAA;IACA,SAAA;EAAA;AAAA;AAAA,KAIQ,iBAAA;EACV,UAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,KAGU,YAAA;EACV,IAAA;EACA,KAAA,EAAO,GAAA,CAAI,WAAA;EACX,OAAA,GAAU,IAAA,EAAM,CAAA,EAAG,MAAA,GAAS,WAAA,YAAuB,OAAA;EACnD,SAAA,IAAa,GAAA,EAAK,GAAA,CAAI,CAAA,aAAc,OAAA;EACpC,OAAA,IAAW,OAAA,EAAS,YAAA,CAAa,CAAA,aAAc,OAAA;EAC/C,OAAA,IAAW,OAAA,EAAS,YAAA,CAAa,CAAA,aAAc,OAAA;EAC/C,YAAA,IAAgB,OAAA,EAAS,iBAAA,YAA6B,OAAA;EACtD,OAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;AAAA"}
@@ -0,0 +1,47 @@
1
+ //#region src/lib/queue/types.d.ts
2
+ type Job<T> = {
3
+ id: string;
4
+ data: T;
5
+ attempts: number;
6
+ maxRetries: number;
7
+ createdAt: number;
8
+ };
9
+ type RetryContext<T> = {
10
+ job: Job<T>;
11
+ error: string;
12
+ nextRetryDelayMs: number;
13
+ retriesRemaining: number;
14
+ backoffMultiplier: number;
15
+ };
16
+ type ErrorContext<T> = {
17
+ job: Job<T>;
18
+ lastError: string;
19
+ totalDurationMs: number;
20
+ totalAttempts: number;
21
+ errorHistory: Array<{
22
+ attempt: number;
23
+ error: string;
24
+ timestamp: number;
25
+ }>;
26
+ };
27
+ type ParseErrorContext = {
28
+ rawJobData: string;
29
+ parseError: string;
30
+ timestamp: number;
31
+ };
32
+ type QueueOptions<T> = {
33
+ name: string;
34
+ redis: Bun.RedisClient;
35
+ handler: (data: T, signal?: AbortSignal) => void | Promise<void>;
36
+ onSuccess?: (job: Job<T>) => void | Promise<void>;
37
+ onRetry?: (context: RetryContext<T>) => void | Promise<void>;
38
+ onError?: (context: ErrorContext<T>) => void | Promise<void>;
39
+ onParseError?: (context: ParseErrorContext) => void | Promise<void>;
40
+ retries?: number;
41
+ timeout?: number;
42
+ concurrency?: number;
43
+ pollInterval?: number;
44
+ };
45
+ //#endregion
46
+ export { QueueOptions };
47
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/queue/types.ts"],"mappings":";KAAY,GAAA;EACV,EAAA;EACA,IAAA,EAAM,CAAA;EACN,QAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,KAYU,YAAA;EACV,GAAA,EAAK,GAAA,CAAI,CAAA;EACT,KAAA;EACA,gBAAA;EACA,gBAAA;EACA,iBAAA;AAAA;AAAA,KAGU,YAAA;EACV,GAAA,EAAK,GAAA,CAAI,CAAA;EACT,SAAA;EACA,eAAA;EACA,aAAA;EACA,YAAA,EAAc,KAAA;IACZ,OAAA;IACA,KAAA;IACA,SAAA;EAAA;AAAA;AAAA,KAIQ,iBAAA;EACV,UAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,KAGU,YAAA;EACV,IAAA;EACA,KAAA,EAAO,GAAA,CAAI,WAAA;EACX,OAAA,GAAU,IAAA,EAAM,CAAA,EAAG,MAAA,GAAS,WAAA,YAAuB,OAAA;EACnD,SAAA,IAAa,GAAA,EAAK,GAAA,CAAI,CAAA,aAAc,OAAA;EACpC,OAAA,IAAW,OAAA,EAAS,YAAA,CAAa,CAAA,aAAc,OAAA;EAC/C,OAAA,IAAW,OAAA,EAAS,YAAA,CAAa,CAAA,aAAc,OAAA;EAC/C,YAAA,IAAgB,OAAA,EAAS,iBAAA,YAA6B,OAAA;EACtD,OAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;AAAA"}
package/package.json CHANGED
@@ -1,36 +1,102 @@
1
1
  {
2
2
  "name": "semola",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Zero-dependency TypeScript utilities for Bun. Type-safe APIs, Redis queues, pub/sub, i18n, caching & auth with tree-shakeable imports.",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  "./errors": {
8
- "import": "./dist/lib/errors/index.js",
9
- "types": "./dist/lib/errors/index.d.ts"
8
+ "import": {
9
+ "types": "./dist/lib/errors/index.d.mts",
10
+ "default": "./dist/lib/errors/index.mjs"
11
+ },
12
+ "require": {
13
+ "types": "./dist/lib/errors/index.d.cts",
14
+ "default": "./dist/lib/errors/index.cjs"
15
+ }
10
16
  },
11
17
  "./cache": {
12
- "import": "./dist/lib/cache/index.js",
13
- "types": "./dist/lib/cache/index.d.ts"
18
+ "import": {
19
+ "types": "./dist/lib/cache/index.d.mts",
20
+ "default": "./dist/lib/cache/index.mjs"
21
+ },
22
+ "require": {
23
+ "types": "./dist/lib/cache/index.d.cts",
24
+ "default": "./dist/lib/cache/index.cjs"
25
+ }
14
26
  },
15
27
  "./i18n": {
16
- "import": "./dist/lib/i18n/index.js",
17
- "types": "./dist/lib/i18n/index.d.ts"
28
+ "import": {
29
+ "types": "./dist/lib/i18n/index.d.mts",
30
+ "default": "./dist/lib/i18n/index.mjs"
31
+ },
32
+ "require": {
33
+ "types": "./dist/lib/i18n/index.d.cts",
34
+ "default": "./dist/lib/i18n/index.cjs"
35
+ }
18
36
  },
19
37
  "./policy": {
20
- "import": "./dist/lib/policy/index.js",
21
- "types": "./dist/lib/policy/index.d.ts"
38
+ "import": {
39
+ "types": "./dist/lib/policy/index.d.mts",
40
+ "default": "./dist/lib/policy/index.mjs"
41
+ },
42
+ "require": {
43
+ "types": "./dist/lib/policy/index.d.cts",
44
+ "default": "./dist/lib/policy/index.cjs"
45
+ }
22
46
  },
23
47
  "./api": {
24
- "import": "./dist/lib/api/index.js",
25
- "types": "./dist/lib/api/index.d.ts"
48
+ "import": {
49
+ "types": "./dist/lib/api/index.d.mts",
50
+ "default": "./dist/lib/api/index.mjs"
51
+ },
52
+ "require": {
53
+ "types": "./dist/lib/api/index.d.cts",
54
+ "default": "./dist/lib/api/index.cjs"
55
+ }
26
56
  },
27
57
  "./queue": {
28
- "import": "./dist/lib/queue/index.js",
29
- "types": "./dist/lib/queue/index.d.ts"
58
+ "import": {
59
+ "types": "./dist/lib/queue/index.d.mts",
60
+ "default": "./dist/lib/queue/index.mjs"
61
+ },
62
+ "require": {
63
+ "types": "./dist/lib/queue/index.d.cts",
64
+ "default": "./dist/lib/queue/index.cjs"
65
+ }
30
66
  },
31
67
  "./pubsub": {
32
- "import": "./dist/lib/pubsub/index.js",
33
- "types": "./dist/lib/pubsub/index.d.ts"
68
+ "import": {
69
+ "types": "./dist/lib/pubsub/index.d.mts",
70
+ "default": "./dist/lib/pubsub/index.mjs"
71
+ },
72
+ "require": {
73
+ "types": "./dist/lib/pubsub/index.d.cts",
74
+ "default": "./dist/lib/pubsub/index.cjs"
75
+ }
76
+ },
77
+ "./cron": {
78
+ "import": {
79
+ "types": "./dist/lib/cron/index.d.mts",
80
+ "default": "./dist/lib/cron/index.mjs"
81
+ },
82
+ "require": {
83
+ "types": "./dist/lib/cron/index.d.cts",
84
+ "default": "./dist/lib/cron/index.cjs"
85
+ }
86
+ },
87
+ "./logging": {
88
+ "import": "./dist/lib/logging/index.js",
89
+ "types": "./dist/lib/logging/index.d.ts"
90
+ },
91
+ "./prompts": {
92
+ "import": {
93
+ "types": "./dist/lib/prompts/index.d.mts",
94
+ "default": "./dist/lib/prompts/index.mjs"
95
+ },
96
+ "require": {
97
+ "types": "./dist/lib/prompts/index.d.cts",
98
+ "default": "./dist/lib/prompts/index.cjs"
99
+ }
34
100
  }
35
101
  },
36
102
  "files": [
@@ -38,7 +104,7 @@
38
104
  "README.md"
39
105
  ],
40
106
  "scripts": {
41
- "build": "tsc",
107
+ "build": "tsdown",
42
108
  "check": "biome check --write . && tsc --noEmit",
43
109
  "test": "bun test",
44
110
  "prepublishOnly": "bun run build"
@@ -55,6 +121,9 @@
55
121
  "redis",
56
122
  "pubsub",
57
123
  "caching",
124
+ "cron",
125
+ "scheduler",
126
+ "job-scheduler",
58
127
  "i18n",
59
128
  "internationalization",
60
129
  "authorization",
@@ -76,6 +145,7 @@
76
145
  "@standard-schema/spec": "^1.1.0",
77
146
  "@types/bun": "latest",
78
147
  "openapi-types": "^12.1.3",
148
+ "tsdown": "^0.21.7",
79
149
  "zod": "^4.3.6"
80
150
  },
81
151
  "peerDependencies": {
@@ -1,15 +0,0 @@
1
- import type { Middleware } from "../middleware/index.js";
2
- import type { ApiOptions, RequestSchema, ResponseSchema, RouteConfig } from "./types.js";
3
- export declare class Api<TMiddlewares extends readonly Middleware[] = readonly []> {
4
- private options;
5
- private routes;
6
- constructor(options?: ApiOptions<TMiddlewares>);
7
- private getFullPath;
8
- private validateRequest;
9
- private createContext;
10
- private buildBunRoutes;
11
- defineRoute<TReq extends RequestSchema = RequestSchema, TRes extends ResponseSchema = ResponseSchema, TRouteMiddlewares extends readonly Middleware[] = readonly []>(config: RouteConfig<TReq, TRes, TMiddlewares, TRouteMiddlewares>): void;
12
- getOpenApiSpec(): Promise<import("../openapi/types.js").OpenApiSpec>;
13
- serve(port: number, callback?: (server: Bun.Server<unknown>) => void): void;
14
- }
15
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/core/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUzD,OAAO,KAAK,EACV,UAAU,EAIV,aAAa,EACb,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,qBAAa,GAAG,CAAC,YAAY,SAAS,SAAS,UAAU,EAAE,GAAG,SAAS,EAAE;IACvE,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAKL;gBAEU,OAAO,GAAE,UAAU,CAAC,YAAY,CAAM;IAIzD,OAAO,CAAC,WAAW;YA4BL,eAAe;IA4B7B,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,cAAc;IA0Gf,WAAW,CAChB,IAAI,SAAS,aAAa,GAAG,aAAa,EAC1C,IAAI,SAAS,cAAc,GAAG,cAAc,EAC5C,iBAAiB,SAAS,SAAS,UAAU,EAAE,GAAG,SAAS,EAAE,EAC7D,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,iBAAiB,CAAC;IAW3D,cAAc;IAad,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;CAa5E"}