semola 0.5.3 → 0.5.4

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 (363) hide show
  1. package/dist/index-BhGNDjPq.d.mts +13 -0
  2. package/dist/index-DxSbeGP-.d.cts +13 -0
  3. package/dist/lib/api/index.cjs +522 -4
  4. package/dist/lib/api/index.d.cts +270 -4
  5. package/dist/lib/api/index.d.mts +270 -4
  6. package/dist/lib/api/index.mjs +520 -2
  7. package/dist/lib/cache/index.d.cts +16 -4
  8. package/dist/lib/cache/index.d.mts +16 -4
  9. package/dist/lib/cache/index.mjs +0 -2
  10. package/dist/lib/cron/index.cjs +734 -12
  11. package/dist/lib/cron/index.d.cts +145 -3
  12. package/dist/lib/cron/index.d.mts +145 -3
  13. package/dist/lib/cron/index.mjs +725 -3
  14. package/dist/lib/errors/index.d.cts +2 -13
  15. package/dist/lib/errors/index.d.mts +2 -13
  16. package/dist/lib/errors/index.mjs +0 -2
  17. package/dist/lib/i18n/index.d.cts +12 -4
  18. package/dist/lib/i18n/index.d.mts +12 -4
  19. package/dist/lib/i18n/index.mjs +0 -2
  20. package/dist/lib/logging/index.cjs +386 -17
  21. package/dist/lib/logging/index.d.cts +107 -6
  22. package/dist/lib/logging/index.d.mts +107 -6
  23. package/dist/lib/logging/index.mjs +373 -4
  24. package/dist/lib/policy/index.cjs +206 -20
  25. package/dist/lib/policy/index.d.cts +61 -5
  26. package/dist/lib/policy/index.d.mts +61 -5
  27. package/dist/lib/policy/index.mjs +187 -3
  28. package/dist/lib/prompts/index.cjs +374 -14
  29. package/dist/lib/prompts/index.d.cts +69 -4
  30. package/dist/lib/prompts/index.d.mts +69 -4
  31. package/dist/lib/prompts/index.mjs +362 -4
  32. package/dist/lib/pubsub/index.d.cts +9 -4
  33. package/dist/lib/pubsub/index.d.mts +9 -4
  34. package/dist/lib/pubsub/index.mjs +0 -2
  35. package/dist/lib/queue/index.d.cts +48 -6
  36. package/dist/lib/queue/index.d.mts +48 -6
  37. package/dist/lib/queue/index.mjs +0 -2
  38. package/dist/lib/workflow/index.d.cts +82 -4
  39. package/dist/lib/workflow/index.d.mts +82 -4
  40. package/dist/lib/workflow/index.mjs +0 -2
  41. package/package.json +1 -1
  42. package/dist/api/core/index.cjs +0 -206
  43. package/dist/api/core/index.d.cts +0 -21
  44. package/dist/api/core/index.d.cts.map +0 -1
  45. package/dist/api/core/index.d.mts +0 -21
  46. package/dist/api/core/index.d.mts.map +0 -1
  47. package/dist/api/core/index.mjs +0 -208
  48. package/dist/api/core/index.mjs.map +0 -1
  49. package/dist/api/core/types.d.cts +0 -107
  50. package/dist/api/core/types.d.cts.map +0 -1
  51. package/dist/api/core/types.d.mts +0 -107
  52. package/dist/api/core/types.d.mts.map +0 -1
  53. package/dist/api/middleware/index.cjs +0 -8
  54. package/dist/api/middleware/index.d.cts +0 -11
  55. package/dist/api/middleware/index.d.cts.map +0 -1
  56. package/dist/api/middleware/index.d.mts +0 -11
  57. package/dist/api/middleware/index.d.mts.map +0 -1
  58. package/dist/api/middleware/index.mjs +0 -10
  59. package/dist/api/middleware/index.mjs.map +0 -1
  60. package/dist/api/middleware/types.d.cts +0 -16
  61. package/dist/api/middleware/types.d.cts.map +0 -1
  62. package/dist/api/middleware/types.d.mts +0 -16
  63. package/dist/api/middleware/types.d.mts.map +0 -1
  64. package/dist/api/openapi/index.cjs +0 -254
  65. package/dist/api/openapi/index.mjs +0 -256
  66. package/dist/api/openapi/index.mjs.map +0 -1
  67. package/dist/api/openapi/types.d.cts +0 -60
  68. package/dist/api/openapi/types.d.cts.map +0 -1
  69. package/dist/api/openapi/types.d.mts +0 -60
  70. package/dist/api/openapi/types.d.mts.map +0 -1
  71. package/dist/api/validation/index.cjs +0 -64
  72. package/dist/api/validation/index.mjs +0 -61
  73. package/dist/api/validation/index.mjs.map +0 -1
  74. package/dist/cache/types.d.cts +0 -17
  75. package/dist/cache/types.d.cts.map +0 -1
  76. package/dist/cache/types.d.mts +0 -17
  77. package/dist/cache/types.d.mts.map +0 -1
  78. package/dist/cron/builder/index.cjs +0 -166
  79. package/dist/cron/builder/index.d.cts +0 -28
  80. package/dist/cron/builder/index.d.cts.map +0 -1
  81. package/dist/cron/builder/index.d.mts +0 -28
  82. package/dist/cron/builder/index.d.mts.map +0 -1
  83. package/dist/cron/builder/index.mjs +0 -163
  84. package/dist/cron/builder/index.mjs.map +0 -1
  85. package/dist/cron/builder/types.cjs +0 -27
  86. package/dist/cron/builder/types.d.cts +0 -79
  87. package/dist/cron/builder/types.d.cts.map +0 -1
  88. package/dist/cron/builder/types.d.mts +0 -79
  89. package/dist/cron/builder/types.d.mts.map +0 -1
  90. package/dist/cron/builder/types.mjs +0 -28
  91. package/dist/cron/builder/types.mjs.map +0 -1
  92. package/dist/cron/core/index.cjs +0 -308
  93. package/dist/cron/core/index.d.cts +0 -39
  94. package/dist/cron/core/index.d.cts.map +0 -1
  95. package/dist/cron/core/index.d.mts +0 -39
  96. package/dist/cron/core/index.d.mts.map +0 -1
  97. package/dist/cron/core/index.mjs +0 -310
  98. package/dist/cron/core/index.mjs.map +0 -1
  99. package/dist/cron/core/scanner.cjs +0 -237
  100. package/dist/cron/core/scanner.mjs +0 -238
  101. package/dist/cron/core/scanner.mjs.map +0 -1
  102. package/dist/cron/core/types.d.cts +0 -11
  103. package/dist/cron/core/types.d.cts.map +0 -1
  104. package/dist/cron/core/types.d.mts +0 -11
  105. package/dist/cron/core/types.d.mts.map +0 -1
  106. package/dist/errors/types.d.cts +0 -5
  107. package/dist/errors/types.d.cts.map +0 -1
  108. package/dist/errors/types.d.mts +0 -5
  109. package/dist/errors/types.d.mts.map +0 -1
  110. package/dist/i18n/types.d.cts +0 -13
  111. package/dist/i18n/types.d.cts.map +0 -1
  112. package/dist/i18n/types.d.mts +0 -13
  113. package/dist/i18n/types.d.mts.map +0 -1
  114. package/dist/lib/cache/index.d.cts.map +0 -1
  115. package/dist/lib/cache/index.d.mts.map +0 -1
  116. package/dist/lib/cache/index.mjs.map +0 -1
  117. package/dist/lib/errors/index.d.cts.map +0 -1
  118. package/dist/lib/errors/index.d.mts.map +0 -1
  119. package/dist/lib/errors/index.mjs.map +0 -1
  120. package/dist/lib/i18n/index.d.cts.map +0 -1
  121. package/dist/lib/i18n/index.d.mts.map +0 -1
  122. package/dist/lib/i18n/index.mjs.map +0 -1
  123. package/dist/lib/orm/index.cjs +0 -20
  124. package/dist/lib/orm/index.d.cts +0 -7
  125. package/dist/lib/orm/index.d.mts +0 -7
  126. package/dist/lib/orm/index.mjs +0 -6
  127. package/dist/lib/policy/index.d.cts.map +0 -1
  128. package/dist/lib/policy/index.d.mts.map +0 -1
  129. package/dist/lib/policy/index.mjs.map +0 -1
  130. package/dist/lib/prompts/index.d.cts.map +0 -1
  131. package/dist/lib/prompts/index.d.mts.map +0 -1
  132. package/dist/lib/prompts/index.mjs.map +0 -1
  133. package/dist/lib/pubsub/index.d.cts.map +0 -1
  134. package/dist/lib/pubsub/index.d.mts.map +0 -1
  135. package/dist/lib/pubsub/index.mjs.map +0 -1
  136. package/dist/lib/queue/index.d.cts.map +0 -1
  137. package/dist/lib/queue/index.d.mts.map +0 -1
  138. package/dist/lib/queue/index.mjs.map +0 -1
  139. package/dist/lib/workflow/index.d.cts.map +0 -1
  140. package/dist/lib/workflow/index.d.mts.map +0 -1
  141. package/dist/lib/workflow/index.mjs.map +0 -1
  142. package/dist/logging/core/index.cjs +0 -99
  143. package/dist/logging/core/index.d.cts +0 -26
  144. package/dist/logging/core/index.d.cts.map +0 -1
  145. package/dist/logging/core/index.d.mts +0 -26
  146. package/dist/logging/core/index.d.mts.map +0 -1
  147. package/dist/logging/core/index.mjs +0 -99
  148. package/dist/logging/core/index.mjs.map +0 -1
  149. package/dist/logging/core/types.cjs +0 -10
  150. package/dist/logging/core/types.d.cts +0 -22
  151. package/dist/logging/core/types.d.cts.map +0 -1
  152. package/dist/logging/core/types.d.mts +0 -22
  153. package/dist/logging/core/types.d.mts.map +0 -1
  154. package/dist/logging/core/types.mjs +0 -12
  155. package/dist/logging/core/types.mjs.map +0 -1
  156. package/dist/logging/formatter/index.cjs +0 -119
  157. package/dist/logging/formatter/index.d.cts +0 -27
  158. package/dist/logging/formatter/index.d.cts.map +0 -1
  159. package/dist/logging/formatter/index.d.mts +0 -27
  160. package/dist/logging/formatter/index.d.mts.map +0 -1
  161. package/dist/logging/formatter/index.mjs +0 -115
  162. package/dist/logging/formatter/index.mjs.map +0 -1
  163. package/dist/logging/formatter/types.d.cts +0 -5
  164. package/dist/logging/formatter/types.d.cts.map +0 -1
  165. package/dist/logging/formatter/types.d.mts +0 -5
  166. package/dist/logging/formatter/types.d.mts.map +0 -1
  167. package/dist/logging/provider/index.cjs +0 -165
  168. package/dist/logging/provider/index.d.cts +0 -28
  169. package/dist/logging/provider/index.d.cts.map +0 -1
  170. package/dist/logging/provider/index.d.mts +0 -28
  171. package/dist/logging/provider/index.d.mts.map +0 -1
  172. package/dist/logging/provider/index.mjs +0 -165
  173. package/dist/logging/provider/index.mjs.map +0 -1
  174. package/dist/logging/provider/types.d.cts +0 -23
  175. package/dist/logging/provider/types.d.cts.map +0 -1
  176. package/dist/logging/provider/types.d.mts +0 -23
  177. package/dist/logging/provider/types.d.mts.map +0 -1
  178. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +0 -80
  179. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +0 -1
  180. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +0 -80
  181. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +0 -1
  182. package/dist/orm/column.cjs +0 -137
  183. package/dist/orm/column.d.cts +0 -121
  184. package/dist/orm/column.d.cts.map +0 -1
  185. package/dist/orm/column.d.mts +0 -121
  186. package/dist/orm/column.d.mts.map +0 -1
  187. package/dist/orm/column.mjs +0 -132
  188. package/dist/orm/column.mjs.map +0 -1
  189. package/dist/orm/dialect/index.cjs +0 -14
  190. package/dist/orm/dialect/index.mjs +0 -16
  191. package/dist/orm/dialect/index.mjs.map +0 -1
  192. package/dist/orm/dialect/mysql.cjs +0 -31
  193. package/dist/orm/dialect/mysql.mjs +0 -33
  194. package/dist/orm/dialect/mysql.mjs.map +0 -1
  195. package/dist/orm/dialect/postgres.cjs +0 -23
  196. package/dist/orm/dialect/postgres.mjs +0 -25
  197. package/dist/orm/dialect/postgres.mjs.map +0 -1
  198. package/dist/orm/dialect/sqlite.cjs +0 -31
  199. package/dist/orm/dialect/sqlite.mjs +0 -33
  200. package/dist/orm/dialect/sqlite.mjs.map +0 -1
  201. package/dist/orm/dialect/utils.cjs +0 -8
  202. package/dist/orm/dialect/utils.mjs +0 -10
  203. package/dist/orm/dialect/utils.mjs.map +0 -1
  204. package/dist/orm/internal/table-columns.cjs +0 -31
  205. package/dist/orm/internal/table-columns.mjs +0 -32
  206. package/dist/orm/internal/table-columns.mjs.map +0 -1
  207. package/dist/orm/internal/table-lookup.cjs +0 -35
  208. package/dist/orm/internal/table-lookup.mjs +0 -35
  209. package/dist/orm/internal/table-lookup.mjs.map +0 -1
  210. package/dist/orm/internal/table-relations.cjs +0 -28
  211. package/dist/orm/internal/table-relations.mjs +0 -29
  212. package/dist/orm/internal/table-relations.mjs.map +0 -1
  213. package/dist/orm/migration/config.cjs +0 -7
  214. package/dist/orm/migration/config.d.cts +0 -7
  215. package/dist/orm/migration/config.d.cts.map +0 -1
  216. package/dist/orm/migration/config.d.mts +0 -7
  217. package/dist/orm/migration/config.d.mts.map +0 -1
  218. package/dist/orm/migration/config.mjs +0 -8
  219. package/dist/orm/migration/config.mjs.map +0 -1
  220. package/dist/orm/migration/types.d.cts +0 -20
  221. package/dist/orm/migration/types.d.cts.map +0 -1
  222. package/dist/orm/migration/types.d.mts +0 -20
  223. package/dist/orm/migration/types.d.mts.map +0 -1
  224. package/dist/orm/orm.cjs +0 -41
  225. package/dist/orm/orm.d.cts +0 -18
  226. package/dist/orm/orm.d.cts.map +0 -1
  227. package/dist/orm/orm.d.mts +0 -18
  228. package/dist/orm/orm.d.mts.map +0 -1
  229. package/dist/orm/orm.mjs +0 -43
  230. package/dist/orm/orm.mjs.map +0 -1
  231. package/dist/orm/relation.cjs +0 -18
  232. package/dist/orm/relation.d.cts +0 -8
  233. package/dist/orm/relation.d.cts.map +0 -1
  234. package/dist/orm/relation.d.mts +0 -8
  235. package/dist/orm/relation.d.mts.map +0 -1
  236. package/dist/orm/relation.mjs +0 -19
  237. package/dist/orm/relation.mjs.map +0 -1
  238. package/dist/orm/runtime/builders/mutations.cjs +0 -29
  239. package/dist/orm/runtime/builders/mutations.mjs +0 -28
  240. package/dist/orm/runtime/builders/mutations.mjs.map +0 -1
  241. package/dist/orm/runtime/builders/select.cjs +0 -18
  242. package/dist/orm/runtime/builders/select.mjs +0 -19
  243. package/dist/orm/runtime/builders/select.mjs.map +0 -1
  244. package/dist/orm/runtime/client.cjs +0 -90
  245. package/dist/orm/runtime/client.mjs +0 -92
  246. package/dist/orm/runtime/client.mjs.map +0 -1
  247. package/dist/orm/runtime/context.cjs +0 -49
  248. package/dist/orm/runtime/context.mjs +0 -51
  249. package/dist/orm/runtime/context.mjs.map +0 -1
  250. package/dist/orm/runtime/dialect/index.cjs +0 -11
  251. package/dist/orm/runtime/dialect/index.mjs +0 -13
  252. package/dist/orm/runtime/dialect/index.mjs.map +0 -1
  253. package/dist/orm/runtime/dialect/mysql.cjs +0 -95
  254. package/dist/orm/runtime/dialect/mysql.mjs +0 -97
  255. package/dist/orm/runtime/dialect/mysql.mjs.map +0 -1
  256. package/dist/orm/runtime/dialect/postgres.cjs +0 -51
  257. package/dist/orm/runtime/dialect/postgres.mjs +0 -53
  258. package/dist/orm/runtime/dialect/postgres.mjs.map +0 -1
  259. package/dist/orm/runtime/dialect/sqlite.cjs +0 -4
  260. package/dist/orm/runtime/dialect/sqlite.mjs +0 -7
  261. package/dist/orm/runtime/dialect/sqlite.mjs.map +0 -1
  262. package/dist/orm/runtime/errors.cjs +0 -19
  263. package/dist/orm/runtime/errors.mjs +0 -21
  264. package/dist/orm/runtime/errors.mjs.map +0 -1
  265. package/dist/orm/runtime/hydrate/many.cjs +0 -46
  266. package/dist/orm/runtime/hydrate/many.mjs +0 -48
  267. package/dist/orm/runtime/hydrate/many.mjs.map +0 -1
  268. package/dist/orm/runtime/hydrate/one.cjs +0 -38
  269. package/dist/orm/runtime/hydrate/one.mjs +0 -40
  270. package/dist/orm/runtime/hydrate/one.mjs.map +0 -1
  271. package/dist/orm/runtime/hydrate.cjs +0 -49
  272. package/dist/orm/runtime/hydrate.mjs +0 -51
  273. package/dist/orm/runtime/hydrate.mjs.map +0 -1
  274. package/dist/orm/runtime/rows.cjs +0 -30
  275. package/dist/orm/runtime/rows.mjs +0 -31
  276. package/dist/orm/runtime/rows.mjs.map +0 -1
  277. package/dist/orm/runtime/utils.cjs +0 -27
  278. package/dist/orm/runtime/utils.mjs +0 -27
  279. package/dist/orm/runtime/utils.mjs.map +0 -1
  280. package/dist/orm/sql/parse-array.cjs +0 -64
  281. package/dist/orm/sql/parse-array.mjs +0 -66
  282. package/dist/orm/sql/parse-array.mjs.map +0 -1
  283. package/dist/orm/sql/plan/select.cjs +0 -36
  284. package/dist/orm/sql/plan/select.mjs +0 -38
  285. package/dist/orm/sql/plan/select.mjs.map +0 -1
  286. package/dist/orm/sql/plan/where/operators.cjs +0 -95
  287. package/dist/orm/sql/plan/where/operators.mjs +0 -97
  288. package/dist/orm/sql/plan/where/operators.mjs.map +0 -1
  289. package/dist/orm/sql/plan/where.cjs +0 -59
  290. package/dist/orm/sql/plan/where.mjs +0 -61
  291. package/dist/orm/sql/plan/where.mjs.map +0 -1
  292. package/dist/orm/sql/serialize/clauses.cjs +0 -36
  293. package/dist/orm/sql/serialize/clauses.mjs +0 -37
  294. package/dist/orm/sql/serialize/clauses.mjs.map +0 -1
  295. package/dist/orm/sql/serialize/joins.cjs +0 -31
  296. package/dist/orm/sql/serialize/joins.mjs +0 -33
  297. package/dist/orm/sql/serialize/joins.mjs.map +0 -1
  298. package/dist/orm/sql/serialize/values.cjs +0 -30
  299. package/dist/orm/sql/serialize/values.mjs +0 -32
  300. package/dist/orm/sql/serialize/values.mjs.map +0 -1
  301. package/dist/orm/sql/serialize/where/predicate.cjs +0 -73
  302. package/dist/orm/sql/serialize/where/predicate.mjs +0 -75
  303. package/dist/orm/sql/serialize/where/predicate.mjs.map +0 -1
  304. package/dist/orm/sql/serialize/where/tree.cjs +0 -26
  305. package/dist/orm/sql/serialize/where/tree.mjs +0 -28
  306. package/dist/orm/sql/serialize/where/tree.mjs.map +0 -1
  307. package/dist/orm/sql/serialize/where.cjs +0 -10
  308. package/dist/orm/sql/serialize/where.mjs +0 -12
  309. package/dist/orm/sql/serialize/where.mjs.map +0 -1
  310. package/dist/orm/sql/serialize.cjs +0 -24
  311. package/dist/orm/sql/serialize.mjs +0 -25
  312. package/dist/orm/sql/serialize.mjs.map +0 -1
  313. package/dist/orm/table.cjs +0 -12
  314. package/dist/orm/table.d.cts +0 -12
  315. package/dist/orm/table.d.cts.map +0 -1
  316. package/dist/orm/table.d.mts +0 -12
  317. package/dist/orm/table.d.mts.map +0 -1
  318. package/dist/orm/table.mjs +0 -14
  319. package/dist/orm/table.mjs.map +0 -1
  320. package/dist/orm/types.d.cts +0 -183
  321. package/dist/orm/types.d.cts.map +0 -1
  322. package/dist/orm/types.d.mts +0 -183
  323. package/dist/orm/types.d.mts.map +0 -1
  324. package/dist/policy/helpers.cjs +0 -206
  325. package/dist/policy/helpers.d.cts +0 -50
  326. package/dist/policy/helpers.d.cts.map +0 -1
  327. package/dist/policy/helpers.d.mts +0 -50
  328. package/dist/policy/helpers.d.mts.map +0 -1
  329. package/dist/policy/helpers.mjs +0 -190
  330. package/dist/policy/helpers.mjs.map +0 -1
  331. package/dist/policy/types.d.cts +0 -16
  332. package/dist/policy/types.d.cts.map +0 -1
  333. package/dist/policy/types.d.mts +0 -16
  334. package/dist/policy/types.d.mts.map +0 -1
  335. package/dist/prompts/core/keys.cjs +0 -165
  336. package/dist/prompts/core/keys.mjs +0 -167
  337. package/dist/prompts/core/keys.mjs.map +0 -1
  338. package/dist/prompts/core/runtime.cjs +0 -104
  339. package/dist/prompts/core/runtime.mjs +0 -106
  340. package/dist/prompts/core/runtime.mjs.map +0 -1
  341. package/dist/prompts/core/session.cjs +0 -98
  342. package/dist/prompts/core/session.mjs +0 -100
  343. package/dist/prompts/core/session.mjs.map +0 -1
  344. package/dist/prompts/core/types.d.cts +0 -21
  345. package/dist/prompts/core/types.d.cts.map +0 -1
  346. package/dist/prompts/core/types.d.mts +0 -21
  347. package/dist/prompts/core/types.d.mts.map +0 -1
  348. package/dist/prompts/types.d.cts +0 -52
  349. package/dist/prompts/types.d.cts.map +0 -1
  350. package/dist/prompts/types.d.mts +0 -52
  351. package/dist/prompts/types.d.mts.map +0 -1
  352. package/dist/pubsub/types.d.cts +0 -10
  353. package/dist/pubsub/types.d.cts.map +0 -1
  354. package/dist/pubsub/types.d.mts +0 -10
  355. package/dist/pubsub/types.d.mts.map +0 -1
  356. package/dist/queue/types.d.cts +0 -47
  357. package/dist/queue/types.d.cts.map +0 -1
  358. package/dist/queue/types.d.mts +0 -47
  359. package/dist/queue/types.d.mts.map +0 -1
  360. package/dist/workflow/types.d.cts +0 -83
  361. package/dist/workflow/types.d.cts.map +0 -1
  362. package/dist/workflow/types.d.mts +0 -83
  363. package/dist/workflow/types.d.mts.map +0 -1
@@ -1,238 +0,0 @@
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
@@ -1 +0,0 @@
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":";;AAGA,MAAa,cAAc;CACzB,KAAK;CACL,KAAK;CACN;AAWD,IAAa,QAAb,MAAmB;CACjB;CACA;CACA;CAEA;CAEA,YACE,WACA,MACA,OACA,OACA;AACA,OAAK,YAAY;AACjB,OAAK,OAAO;AACZ,OAAK,QAAQ;AACb,OAAK,QAAQ;;CAGf,eAAsB;AACpB,SAAO,KAAK;;CAGd,eAAsB;AACpB,SAAO,KAAK;;CAGd,gBAAuB;AACrB,SAAO,KAAK;;CAGd,WAAkB;AAChB,SAAO,KAAK;;CAGd,WAAkB;AAIhB,SAAO,SAHQ,cAAc,KAAK,UAAU,UAAU,KAAK,OAGpC,IAFV,UAAU,KAAK,MAAM,WAAW,KAAK,QAElB;;CAGlC,OAAc,OAAc;AAC1B,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,mBAAmB,KAAK,cAAc,MAAM,cAAc;EAChE,MAAM,mBAAmB,KAAK,SAAS,MAAM,cAAc;EAC3D,MAAM,oBAAoB,KAAK,UAAU,MAAM,eAAe;EAC9D,MAAM,eAAe,KAAK,UAAU,MAAM,UAAU;AAEpD,SACE,oBAAoB,oBAAoB,qBAAqB;;;AAKnE,IAAa,UAAb,MAAqB;CACnB;CACA;CACA;CACA;CAEA,YAAmB,YAAoB;AACrC,OAAK,aAAa;AAClB,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,OAAK,SAAS,EAAE;;CAGlB,OAAc;AACZ,MAAI,KAAK,WAAW,WAAW,EAC7B,QAAO,IACL,4BACA,mCACD;EAGH,MAAM,SAAS,KAAK,WAAW,MAAM,CAAC,MAAM,MAAM;EAClD,MAAM,YAAY,OAAO,WAAW,YAAY;EAChD,MAAM,YAAY,OAAO,WAAW,YAAY;AAEhD,MAAI,CAAC,aAAa,CAAC,UACjB,QAAO,IACL,mBACA,iCAAiC,KAAK,WAAW,oCAAoC,OAAO,OAAO,WACpG;EAGH,MAAM,aAAa,KAAK,gBAAgB,OAAO;AAE/C,OAAK,IAAI,MAAM,GAAG,MAAM,WAAW,QAAQ,OAAO;GAChD,MAAM,YAAY,WAAW;AAC7B,OAAI,CAAC,UACH,QAAO,IACL,uBACA,4BAA4B,KAAK,aAClC;AAGH,QAAK,UAAU;AACf,QAAK,QAAQ;GACb,MAAM,CAAC,OAAO,KAAK,KAAK,cAAc,UAAU;AAChD,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;;AAGpE,SAAO,GAAG,KAAK,OAAO;;CAGxB,cAAsB,WAA0B;EAC9C,MAAM,EAAE,OAAO,YAAY;AAC3B,SAAO,KAAK,UAAU,QAAQ,QAAQ;GACpC,IAAI,YAAY,KAAK,QAAQ,QAAQ;AAErC,WAAQ,WAAR;IACE,KAAK,KAAK;KACR,MAAM,KAAK,KAAK,KAAK,QAAQ;AAC7B,SAAI,KAAK,MAAM,SAAS,IAAI,EAAE;MAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,UAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;gBACzD,CAAC,MAAM,OAAO,IACvB,MAAK,SAAS,KAAK,OAAO,KAAK,MAAM;SAErC,QAAO,IACL,uBACA,2BAA2B,QAAQ,eAAe,MAAM,GACzD;AAGH;;IAEF,KAAK;AACH,iBAAY,KAAK,QAAQ,QAAQ;AACjC,SAAI,KAAK,QAAQ,UAAU,EAAE;MAC3B,MAAM,CAAC,OAAO,KAAK,KAAK,oBAAoB,UAAU;AACtD,UAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;WAElE,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;AAEH;IAEF,KAAK,KAAK;AACR,SAAI,KAAK,YAAY,KAAK,KAAK,UAAU,EACvC,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;KAGH,MAAM,OAAO,KAAK,KAAK,QAAQ;AAC/B,SAAI,CAAC,QAAQ,SAAS,IACpB,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;AAGH;;IAEF;AACE,SAAI,KAAK,QAAQ,UAAU,EAAE;MAC3B,MAAM,CAAC,OAAO,KAAK,KAAK,aAAa,UAAU;AAC/C,UAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;WAElE,QAAO,IACL,uBACA,4BAA4B,KAAK,WAAW,cAAc,MAAM,GACjE;AAGH;;AAIJ,QAAK,QAAQ,KAAK;;AAGpB,SAAO,GAAG,KAAK;;CAGjB,SACE,WACA,MACA,OACA,OACA;EACA,MAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,OAAO,MAAM;AACtD,OAAK,OAAO,KAAK,MAAM;;CAGzB,QAAgB,SAAiB;EAC/B,MAAM,YAAY,QAAQ,OAAO,KAAK,QAAQ;AAC9C,OAAK,WAAW;AAEhB,SAAO;;CAGT,MAAc,SAAiB,UAAkB;AAC/C,MAAI,KAAK,WAAW,QAAQ,OAAQ,QAAO;AAC3C,MAAI,QAAQ,OAAO,KAAK,QAAQ,KAAK,SAAU,QAAO;AAEtD,OAAK,WAAW;AAChB,SAAO;;CAGT,KAAa,SAAiB;AAC5B,MAAI,KAAK,WAAW,QAAQ,OAAQ,QAAO,KAAA;AAE3C,SAAO,QAAQ,OAAO,KAAK,QAAQ;;CAGrC,WAAmB,WAA0B;EAC3C,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;EAC3B,MAAM,WAAW,KAAK,UAAU;AAEhC,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,MAAM,OAAO,IACf,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;EAGH,MAAM,eAAe,QAAQ,UAAU,KAAK,OAAO,KAAK,QAAQ;EAChE,MAAM,QAAQ,QAAQ,MAAM,WAAW,GAAG,KAAK,QAAQ;AAEvD,MAAI,MAAM,WAAW,EACnB,QAAO,IACL,uBACA,4BAA4B,QAAQ,eAAe,MAAM,GAC1D;AAGH,OAAK,SAAS,cAAc,QAAQ,OAAO,MAAM,EAAE,MAAM;AACzD,SAAO,GAAG,KAAK;;CAGjB,oBAA4B,WAA0B;EACpD,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;AAE3B,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,CAAC,GACH,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;AAGH,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,SAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;;CAGH,aAAqB,WAA0B;EAC7C,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;AAC3B,OAAK,QAAQ,KAAK,UAAU;AAE5B,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,CAAC,IAAI;GAEP,MAAM,OAAO,QAAQ,UAAU,KAAK,MAAM;AAC1C,QAAK,SAAS,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM;AAClD,UAAO,GAAG,KAAK;;AAGjB,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,YAAY,UAAU;AAC9C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,MAAI,CAAC,KAAK,QAAQ,GAAG,IAAI,OAAO,IAC9B,QAAO,IACL,uBACA,mBAAmB,QAAQ,eAAe,MAAM,GACjD;EAGH,MAAM,OAAO,QAAQ,UAAU,KAAK,OAAO,KAAK,QAAQ;AACxD,OAAK,SAAS,MAAM,UAAU,OAAO,KAAK,EAAE,MAAM;AAClD,SAAO,GAAG,KAAK;;CAGjB,YAAoB,WAA0B;EAC5C,MAAM,EAAE,OAAO,YAAY;EAC3B,IAAI,KAAK,KAAK,KAAK,QAAQ;AAE3B,MAAI,CAAC,GACH,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;AAGH,SAAO,MAAM,KAAK,QAAQ,GAAG,EAAE;AAC7B,QAAK,QAAQ,QAAQ;AACrB,QAAK,KAAK,KAAK,QAAQ;;AAGzB,MAAI,CAAC,IAAI;GAEP,MAAM,eAAe,QAAQ,UAAU,KAAK,MAAM;AAClD,QAAK,SAAS,cAAc,SAAS,cAAc,MAAM;AAEzD,UAAO,GAAG,KAAK;;AAGjB,MAAI,KAAK,MAAM,SAAS,IAAI,EAAE;GAC5B,MAAM,CAAC,OAAO,KAAK,KAAK,WAAW,UAAU;AAC7C,OAAI,MAAO,QAAO,IAAsB,MAAM,MAAM,MAAM,QAAQ;AAElE,UAAO,GAAG,KAAK;;AAGjB,MAAI,MAAM,OAAO,IACf,QAAO,IACL,uBACA,6BAA6B,QAAQ,eAAe,MAAM,GAC3D;EAGH,MAAM,eAAe,QAAQ,UAAU,KAAK,OAAO,KAAK,QAAQ;AAChE,OAAK,SAAS,cAAc,SAAS,cAAc,MAAM;AACzD,SAAO,GAAG,KAAK;;CAGjB,QAAgB,IAAY;AAC1B,SAAO,MAAM,OAAO,MAAM;;CAG5B,gBAAwB,QAAkB;EACxC,MAAM,aAAa;GACjB;GACA;GACA;GACA;GACA;GACA;GACD;EACD,MAAM,aAAa,EAAE;EACrB,IAAI,SAAS;AACb,MAAI,OAAO,WAAW,YAAY,IAAK,UAAS;AAEhD,OAAK,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ,OAAO;GAC5C,MAAM,YAAY,WAAW,MAAM;GACnC,MAAM,UAAU,OAAO;AACvB,OAAI,CAAC,aAAa,CAAC,QAAS;AAE5B,cAAW,KAAK;IAAE;IAAS,OAAO;IAAW,CAAC;;AAGhD,SAAO"}
@@ -1,11 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,11 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,5 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/errors/types.ts"],"mappings":";KAAY,WAAA"}
@@ -1,5 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/errors/types.ts"],"mappings":";KAAY,WAAA"}
@@ -1,13 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,13 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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":";;AAGA,IAAa,QAAb,MAAsB;CACpB;CACA;CACA;CAEA,YAAmB,SAA0B;AAC3C,OAAK,UAAU;AACf,OAAK,YAAY,QAAQ,cAAc,KAAK;AAC5C,OAAK,cAAc,QAAQ,kBAAkB,QAAQ,KAAK,MAAM,IAAI;;CAGtE,MAAa,IAAI,KAAa;AAC5B,MAAI,CAAC,KAAK,UACR,QAAO,KAAK,KAAK,iBAAiB,OAAO,IAAI,YAAY;EAG3D,MAAM,cAAc,KAAK,WAAW,IAAI;EAExC,MAAM,CAAC,OAAO,SAAS,MAAM,WAC3B,KAAK,QAAQ,MAAM,IAAI,YAAY,CACpC;AAED,MAAI,MACF,QAAO,KAAK,KAAK,cAAc,+BAA+B,MAAM;AAGtE,MAAI,UAAU,QAAQ,UAAU,KAAA,EAC9B,QAAO,KAAK,KAAK,iBAAiB,OAAO,IAAI,YAAY;EAG3D,MAAM,CAAC,gBAAgB,gBAAgB,qBACrC,KAAK,YAAY,MAAM,CACxB;AAED,MAAI,eACF,QAAO,KAAK,KACV,cACA,uCAAuC,MACxC;AAGH,SAAO,GAAG,aAAa;;CAGzB,MAAa,IAAI,KAAa,OAAU;AACtC,MAAI,CAAC,KAAK,UACR,QAAO,GAAG,MAAM;EAGlB,MAAM,CAAC,cAAc,cAAc,qBACjC,KAAK,UAAU,MAAM,CACtB;AAED,MAAI,aACF,QAAO,KAAK,KACV,cACA,qCAAqC,MACtC;AAGH,MAAI,eAAe,QAAQ,eAAe,KAAA,EACxC,QAAO,KAAK,KACV,cACA,qCAAqC,MACtC;EAGH,MAAM,CAAC,QAAQ,OAAO,qBAAqB,KAAK,WAAW,KAAK,MAAM,CAAC;AAEvE,MAAI,OACF,QAAO,KAAK,KACV,mBACA,iCAAiC,MAClC;AAGH,MAAI,CAAC,KAAK,WAAW,IAAI,CACvB,QAAO,KAAK,KACV,mBACA,4CAA4C,MAC7C;EAGH,MAAM,cAAc,KAAK,WAAW,IAAI;EAIxC,MAAM,CAAC,YAAY,MAAM,WAFN,KAAK,cAAc,aAAa,YAAY,IAAI,CAEpB;AAE/C,MAAI,SACF,QAAO,KAAK,KAAK,cAAc,+BAA+B,MAAM;AAGtE,SAAO,GAAG,MAAM;;CAGlB,MAAa,OAAO,KAAa;AAC/B,MAAI,CAAC,KAAK,UACR,QAAO,GAAG,EAAE;EAGd,MAAM,cAAc,KAAK,WAAW,IAAI;EAExC,MAAM,CAAC,OAAO,QAAQ,MAAM,WAAW,KAAK,QAAQ,MAAM,IAAI,YAAY,CAAC;AAE3E,MAAI,MACF,QAAO,KAAK,KAAK,cAAc,wBAAwB,MAAM;AAG/D,SAAO,GAAG,KAAK;;CAGjB,KAAmC,MAAS,SAAiB;AAC3D,OAAK,QAAQ,UAAU;GAAE;GAAM;GAAS,CAAC;AAEzC,SAAO,IAAI,MAAM,QAAQ;;CAG3B,IAAY,YAAY;AACtB,SAAO,KAAK,QAAQ,YAAY;;CAGlC,WAAmB,KAAa;AAC9B,MAAI,KAAK,QAAQ,OACf,QAAO,GAAG,KAAK,QAAQ,OAAO,GAAG;AAGnC,SAAO;;CAGT,WAAmB,KAAa,OAAU;AACxC,MAAI,OAAO,KAAK,QAAQ,QAAQ,WAC9B,QAAO,KAAK,QAAQ,IAAI,KAAK,MAAM;AAGrC,SAAO,KAAK,QAAQ;;CAGtB,cACE,KACA,OACA,KACA;AACA,MAAI,QAAQ,KAAA,KAAa,QAAQ,KAC/B,QAAO,KAAK,QAAQ,MAAM,IAAI,KAAK,MAAM;AAG3C,SAAO,KAAK,QAAQ,MAAM,IAAI,KAAK,OAAO,MAAM,IAAI;;CAGtD,WAAmB,KAAgC;AACjD,MAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,MAAI,CAAC,OAAO,SAAS,IAAI,CAAE,QAAO;AAElC,MAAI,CAAC,OAAO,UAAU,IAAI,CAAE,QAAO;AAEnC,MAAI,MAAM,EAAG,QAAO;AAEpB,SAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/errors/index.ts"],"mappings":";;;cAEa,EAAA,MAAS,IAAA,EAAM,CAAA,qBAAC,CAAA;AAAA,cAIhB,GAAA,aAAiB,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG,OAAA;EAAA;;;cAIvC,cAAA,UAAyB,KAAA,EACpC,EAAA,QAAU,CAAA,qBACO,CAAA,cAAe,CAAA;AAAA,cASrB,UAAA,UAA2B,KAAA,EACtC,OAAA,EAAS,OAAA,CAAQ,CAAA,MAChB,OAAA,iBAAwB,CAAA,cAAe,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/errors/index.ts"],"mappings":";;;cAEa,EAAA,MAAS,IAAA,EAAM,CAAA,qBAAC,CAAA;AAAA,cAIhB,GAAA,aAAiB,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG,OAAA;EAAA;;;cAIvC,cAAA,UAAyB,KAAA,EACpC,EAAA,QAAU,CAAA,qBACO,CAAA,cAAe,CAAA;AAAA,cASrB,UAAA,UAA2B,KAAA,EACtC,OAAA,EAAS,OAAA,CAAQ,CAAA,MAChB,OAAA,iBAAwB,CAAA,cAAe,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/errors/index.ts"],"sourcesContent":["import type { CommonError } from \"./types.js\";\n\nexport const ok = <T>(data: T) => {\n return [null, data] as const;\n};\n\nexport const err = <T extends CommonError>(type: T, message: string) => {\n return [{ type, message }, null] as const;\n};\n\nexport const mightThrowSync = <T, E = Error>(\n fn: () => T,\n): readonly [null, T] | readonly [E, null] => {\n try {\n const result = fn();\n return [null, result] as const;\n } catch (error) {\n return [error as E, null] as const;\n }\n};\n\nexport const mightThrow = async <T, E = Error>(\n promise: Promise<T>,\n): Promise<readonly [null, T] | readonly [E, null]> => {\n try {\n const data = await promise;\n return [null, data] as const;\n } catch (error) {\n return [error as E, null] as const;\n }\n};\n"],"mappings":";AAEA,MAAa,MAAS,SAAY;AAChC,QAAO,CAAC,MAAM,KAAK;;AAGrB,MAAa,OAA8B,MAAS,YAAoB;AACtE,QAAO,CAAC;EAAE;EAAM;EAAS,EAAE,KAAK;;AAGlC,MAAa,kBACX,OAC4C;AAC5C,KAAI;AAEF,SAAO,CAAC,MADO,IAAI,CACE;UACd,OAAO;AACd,SAAO,CAAC,OAAY,KAAK;;;AAI7B,MAAa,aAAa,OACxB,YACqD;AACrD,KAAI;AAEF,SAAO,CAAC,MADK,MAAM,QACA;UACZ,OAAO;AACd,SAAO,CAAC,OAAY,KAAK"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/i18n/index.ts"],"mappings":";;;cAEa,IAAA,wBACY,MAAA,SAAe,MAAA,iDACT,QAAA;EAAA,QAErB,OAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAEW,MAAA;IACjB,aAAA,EAAe,cAAA;IACf,OAAA,EAAS,QAAA;EAAA;EAOJ,SAAA,CAAU,MAAA,QAAc,QAAA;EAIxB,SAAA,CAAA,SAAS,QAAA;EAIT,SAAA,cAAuB,WAAA,CAAY,QAAA,CAAS,cAAA,GAAA,CACjD,GAAA,EAAK,IAAA,KACF,MAAA,EAAQ,gBAAA,CACT,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBAErC,MAAA,wBAGJ,gBAAA,CACE,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA;EAAA,QAwB/C,cAAA;EAAA,QAiBA,gBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/i18n/index.ts"],"mappings":";;;cAEa,IAAA,wBACY,MAAA,SAAe,MAAA,iDACT,QAAA;EAAA,QAErB,OAAA;EAAA,QACA,aAAA;EAAA,QACA,aAAA;cAEW,MAAA;IACjB,aAAA,EAAe,cAAA;IACf,OAAA,EAAS,QAAA;EAAA;EAOJ,SAAA,CAAU,MAAA,QAAc,QAAA;EAIxB,SAAA,CAAA,SAAS,QAAA;EAIT,SAAA,cAAuB,WAAA,CAAY,QAAA,CAAS,cAAA,GAAA,CACjD,GAAA,EAAK,IAAA,KACF,MAAA,EAAQ,gBAAA,CACT,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBAErC,MAAA,wBAGJ,gBAAA,CACE,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA,mBACrC,cAAA,CAAe,QAAA,CAAS,cAAA,GAAiB,IAAA;EAAA,QAwB/C,cAAA;EAAA,QAiBA,gBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/i18n/index.ts"],"sourcesContent":["import type { BuildParamObject, GetNestedValue, NestedKeyOf } from \"./types.js\";\n\nexport class I18n<\n const TLocales extends Record<string, Record<string, unknown>>,\n TDefaultLocale extends keyof TLocales,\n> {\n private locales: TLocales;\n private currentLocale: keyof TLocales;\n private defaultLocale: TDefaultLocale;\n\n public constructor(config: {\n defaultLocale: TDefaultLocale;\n locales: TLocales;\n }) {\n this.defaultLocale = config.defaultLocale;\n this.currentLocale = config.defaultLocale;\n this.locales = config.locales;\n }\n\n public setLocale(locale: keyof TLocales) {\n this.currentLocale = locale;\n }\n\n public getLocale() {\n return this.currentLocale;\n }\n\n public translate<TKey extends NestedKeyOf<TLocales[TDefaultLocale]>>(\n key: TKey,\n ...params: BuildParamObject<\n GetNestedValue<TLocales[TDefaultLocale], TKey> extends string\n ? GetNestedValue<TLocales[TDefaultLocale], TKey>\n : never\n > extends Record<string, never>\n ? []\n : [\n BuildParamObject<\n GetNestedValue<TLocales[TDefaultLocale], TKey> extends string\n ? GetNestedValue<TLocales[TDefaultLocale], TKey>\n : never\n >,\n ]\n ) {\n const currentTranslations = this.locales[this.currentLocale];\n const defaultTranslations = this.locales[this.defaultLocale];\n\n const translation =\n this.getNestedValue(currentTranslations, key) ??\n this.getNestedValue(defaultTranslations, key);\n\n if (typeof translation !== \"string\") {\n return key;\n }\n\n if (!translation) {\n return key;\n }\n\n const paramObj = params[0] as Record<string, unknown> | undefined;\n return this.substituteParams(translation, paramObj);\n }\n\n private getNestedValue(\n obj: Record<string, unknown> | undefined,\n path: string,\n ) {\n return path.split(\".\").reduce((current: unknown, key: string) => {\n if (typeof current !== \"object\") {\n return undefined;\n }\n\n if (current === null) {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[key];\n }, obj);\n }\n\n private substituteParams(template: string, params?: Record<string, unknown>) {\n if (!params) return template;\n\n return template.replace(/\\{(\\w+):(\\w+)\\}/g, (_match, name) => {\n return String(params[name]);\n });\n }\n}\n"],"mappings":";AAEA,IAAa,OAAb,MAGE;CACA;CACA;CACA;CAEA,YAAmB,QAGhB;AACD,OAAK,gBAAgB,OAAO;AAC5B,OAAK,gBAAgB,OAAO;AAC5B,OAAK,UAAU,OAAO;;CAGxB,UAAiB,QAAwB;AACvC,OAAK,gBAAgB;;CAGvB,YAAmB;AACjB,SAAO,KAAK;;CAGd,UACE,KACA,GAAG,QAaH;EACA,MAAM,sBAAsB,KAAK,QAAQ,KAAK;EAC9C,MAAM,sBAAsB,KAAK,QAAQ,KAAK;EAE9C,MAAM,cACJ,KAAK,eAAe,qBAAqB,IAAI,IAC7C,KAAK,eAAe,qBAAqB,IAAI;AAE/C,MAAI,OAAO,gBAAgB,SACzB,QAAO;AAGT,MAAI,CAAC,YACH,QAAO;EAGT,MAAM,WAAW,OAAO;AACxB,SAAO,KAAK,iBAAiB,aAAa,SAAS;;CAGrD,eACE,KACA,MACA;AACA,SAAO,KAAK,MAAM,IAAI,CAAC,QAAQ,SAAkB,QAAgB;AAC/D,OAAI,OAAO,YAAY,SACrB;AAGF,OAAI,YAAY,KACd;AAGF,UAAQ,QAAoC;KAC3C,IAAI;;CAGT,iBAAyB,UAAkB,QAAkC;AAC3E,MAAI,CAAC,OAAQ,QAAO;AAEpB,SAAO,SAAS,QAAQ,qBAAqB,QAAQ,SAAS;AAC5D,UAAO,OAAO,OAAO,MAAM;IAC3B"}
@@ -1,20 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_column = require("../../orm/column.cjs");
3
- const require_config = require("../../orm/migration/config.cjs");
4
- const require_orm = require("../../orm/orm.cjs");
5
- const require_relation = require("../../orm/relation.cjs");
6
- const require_table = require("../../orm/table.cjs");
7
- exports.boolean = require_column.boolean;
8
- exports.createOrm = require_orm.createOrm;
9
- exports.createTable = require_table.createTable;
10
- exports.date = require_column.date;
11
- exports.defineConfig = require_config.defineConfig;
12
- exports.enumColumn = require_column.enumeration;
13
- exports.enumeration = require_column.enumeration;
14
- exports.json = require_column.json;
15
- exports.jsonb = require_column.jsonb;
16
- exports.many = require_relation.many;
17
- exports.number = require_column.number;
18
- exports.one = require_relation.one;
19
- exports.string = require_column.string;
20
- exports.uuid = require_column.uuid;
@@ -1,7 +0,0 @@
1
- import { createTable } from "../../orm/table.cjs";
2
- import { CreateInput, CreateManyInput, DeleteBuilderInput, DeleteInput, DeleteManyInput, Dialect, DialectAdapter, FindFirstInput, FindManyInput, FindUniqueInput, InsertInput, JoinNode, OrderDirection, SelectInput, SelectPlan, TableRow, TinyTableClient, UpdateBuilderInput, UpdateInput, UpdateManyInput, WhereNode } from "../../orm/types.cjs";
3
- import { boolean, date, enumeration, json, jsonb, number, string, uuid } from "../../orm/column.cjs";
4
- import { defineConfig } from "../../orm/migration/config.cjs";
5
- import { createOrm } from "../../orm/orm.cjs";
6
- import { many, one } from "../../orm/relation.cjs";
7
- export { type CreateInput, type CreateManyInput, type DeleteBuilderInput, type DeleteInput, type DeleteManyInput, type Dialect, type DialectAdapter, type FindFirstInput, type FindManyInput, type FindUniqueInput, type InsertInput, type JoinNode, type OrderDirection, type SelectInput, type SelectPlan, type TableRow, type TinyTableClient, type UpdateBuilderInput, type UpdateInput, type UpdateManyInput, type WhereNode, boolean, createOrm, createTable, date, defineConfig, enumeration as enumColumn, enumeration, json, jsonb, many, number, one, string, uuid };
@@ -1,7 +0,0 @@
1
- import { createTable } from "../../orm/table.mjs";
2
- import { CreateInput, CreateManyInput, DeleteBuilderInput, DeleteInput, DeleteManyInput, Dialect, DialectAdapter, FindFirstInput, FindManyInput, FindUniqueInput, InsertInput, JoinNode, OrderDirection, SelectInput, SelectPlan, TableRow, TinyTableClient, UpdateBuilderInput, UpdateInput, UpdateManyInput, WhereNode } from "../../orm/types.mjs";
3
- import { boolean, date, enumeration, json, jsonb, number, string, uuid } from "../../orm/column.mjs";
4
- import { defineConfig } from "../../orm/migration/config.mjs";
5
- import { createOrm } from "../../orm/orm.mjs";
6
- import { many, one } from "../../orm/relation.mjs";
7
- export { type CreateInput, type CreateManyInput, type DeleteBuilderInput, type DeleteInput, type DeleteManyInput, type Dialect, type DialectAdapter, type FindFirstInput, type FindManyInput, type FindUniqueInput, type InsertInput, type JoinNode, type OrderDirection, type SelectInput, type SelectPlan, type TableRow, type TinyTableClient, type UpdateBuilderInput, type UpdateInput, type UpdateManyInput, type WhereNode, boolean, createOrm, createTable, date, defineConfig, enumeration as enumColumn, enumeration, json, jsonb, many, number, one, string, uuid };
@@ -1,6 +0,0 @@
1
- import { boolean, date, enumeration, json, jsonb, number, string, uuid } from "../../orm/column.mjs";
2
- import { defineConfig } from "../../orm/migration/config.mjs";
3
- import { createOrm } from "../../orm/orm.mjs";
4
- import { many, one } from "../../orm/relation.mjs";
5
- import { createTable } from "../../orm/table.mjs";
6
- export { boolean, createOrm, createTable, date, defineConfig, enumeration as enumColumn, enumeration, json, jsonb, many, number, one, string, uuid };
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/policy/index.ts"],"mappings":";;;;cAEa,MAAA,iBACK,MAAA,oBAA0B,MAAA;EAAA,QAElC,KAAA;EAED,KAAA,CAAM,MAAA,EAAQ,WAAA,CAAY,OAAA;EAa1B,MAAA,CAAO,MAAA,EAAQ,YAAA,CAAa,OAAA;EAAA,QAa3B,SAAA;EAQD,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAQ,MAAA,GAAS,OAAA;;;;UAkB5B,YAAA;EAAA,QAgBA,WAAA;EAAA,QAgBA,SAAA;EAAA,QAgBA,UAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/policy/index.ts"],"mappings":";;;;cAEa,MAAA,iBACK,MAAA,oBAA0B,MAAA;EAAA,QAElC,KAAA;EAED,KAAA,CAAM,MAAA,EAAQ,WAAA,CAAY,OAAA;EAa1B,MAAA,CAAO,MAAA,EAAQ,YAAA,CAAa,OAAA;EAAA,QAa3B,SAAA;EAQD,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAQ,MAAA,GAAS,OAAA;;;;UAkB5B,YAAA;EAAA,QAgBA,WAAA;EAAA,QAgBA,SAAA;EAAA,QAgBA,UAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/policy/index.ts"],"sourcesContent":["import type { Action, AllowParams, ForbidParams, Rule } from \"./types.js\";\n\nexport class Policy<\n TEntity extends Record<string, unknown> = Record<string, unknown>,\n> {\n private rules: Rule<TEntity>[] = [];\n\n public allow(params: AllowParams<TEntity>) {\n const actions = this.toActions(params.action);\n\n for (const action of actions) {\n this.rules.push({\n action,\n conditions: params.conditions,\n inverted: false,\n reason: params.reason,\n });\n }\n }\n\n public forbid(params: ForbidParams<TEntity>) {\n const actions = this.toActions(params.action);\n\n for (const action of actions) {\n this.rules.push({\n action,\n conditions: params.conditions,\n inverted: true,\n reason: params.reason,\n });\n }\n }\n\n private toActions(action: Action | Action[]) {\n if (Array.isArray(action)) {\n return action;\n }\n\n return [action];\n }\n\n public can(action: Action, object?: TEntity) {\n const filteredRules = this.rules.filter((rule) => rule.action === action);\n\n const forbidResult = this.checkForbids(filteredRules, object);\n\n if (forbidResult) {\n return forbidResult;\n }\n\n const allowResult = this.checkAllows(filteredRules, object);\n\n if (allowResult) {\n return allowResult;\n }\n\n return { allowed: false, reason: undefined };\n }\n\n private checkForbids(rules: Rule<TEntity>[], object?: TEntity) {\n for (const rule of rules) {\n if (!rule.inverted) {\n continue;\n }\n\n if (!rule.conditions || Object.entries(rule.conditions).length === 0) {\n return { allowed: false, reason: rule.reason };\n }\n\n if (object && this.deepMatch(object, rule.conditions)) {\n return { allowed: false, reason: rule.reason };\n }\n }\n }\n\n private checkAllows(rules: Rule<TEntity>[], object?: TEntity) {\n for (const rule of rules) {\n if (rule.inverted) {\n continue;\n }\n\n if (!rule.conditions || Object.entries(rule.conditions).length === 0) {\n return { allowed: true, reason: rule.reason };\n }\n\n if (object && this.deepMatch(object, rule.conditions)) {\n return { allowed: true, reason: rule.reason };\n }\n }\n }\n\n private deepMatch(objectValue: unknown, conditionValue: object) {\n if (typeof objectValue !== \"object\" || objectValue === null) {\n return false;\n }\n\n for (const [key, nestedCondition] of Object.entries(conditionValue)) {\n const nestedValue = Reflect.get(objectValue, key);\n\n if (!this.matchValue(nestedValue, nestedCondition)) {\n return false;\n }\n }\n\n return true;\n }\n\n private matchValue(actual: unknown, condition: unknown) {\n if (typeof condition !== \"object\" || condition === null) {\n return false;\n }\n\n if (\"fn\" in condition && typeof condition.fn === \"function\") {\n return condition.fn(actual);\n }\n\n return this.deepMatch(actual, condition);\n }\n}\n\nexport type { ConditionHelper } from \"./helpers.js\";\nexport {\n and,\n endsWith,\n eq,\n gt,\n gte,\n has,\n hasAny,\n hasLength,\n includes,\n isDefined,\n isEmpty,\n isNullish,\n lt,\n lte,\n matches,\n neq,\n not,\n or,\n startsWith,\n} from \"./helpers.js\";\n"],"mappings":";;AAEA,IAAa,SAAb,MAEE;CACA,QAAiC,EAAE;CAEnC,MAAa,QAA8B;EACzC,MAAM,UAAU,KAAK,UAAU,OAAO,OAAO;AAE7C,OAAK,MAAM,UAAU,QACnB,MAAK,MAAM,KAAK;GACd;GACA,YAAY,OAAO;GACnB,UAAU;GACV,QAAQ,OAAO;GAChB,CAAC;;CAIN,OAAc,QAA+B;EAC3C,MAAM,UAAU,KAAK,UAAU,OAAO,OAAO;AAE7C,OAAK,MAAM,UAAU,QACnB,MAAK,MAAM,KAAK;GACd;GACA,YAAY,OAAO;GACnB,UAAU;GACV,QAAQ,OAAO;GAChB,CAAC;;CAIN,UAAkB,QAA2B;AAC3C,MAAI,MAAM,QAAQ,OAAO,CACvB,QAAO;AAGT,SAAO,CAAC,OAAO;;CAGjB,IAAW,QAAgB,QAAkB;EAC3C,MAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS,KAAK,WAAW,OAAO;EAEzE,MAAM,eAAe,KAAK,aAAa,eAAe,OAAO;AAE7D,MAAI,aACF,QAAO;EAGT,MAAM,cAAc,KAAK,YAAY,eAAe,OAAO;AAE3D,MAAI,YACF,QAAO;AAGT,SAAO;GAAE,SAAS;GAAO,QAAQ,KAAA;GAAW;;CAG9C,aAAqB,OAAwB,QAAkB;AAC7D,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,CAAC,KAAK,SACR;AAGF,OAAI,CAAC,KAAK,cAAc,OAAO,QAAQ,KAAK,WAAW,CAAC,WAAW,EACjE,QAAO;IAAE,SAAS;IAAO,QAAQ,KAAK;IAAQ;AAGhD,OAAI,UAAU,KAAK,UAAU,QAAQ,KAAK,WAAW,CACnD,QAAO;IAAE,SAAS;IAAO,QAAQ,KAAK;IAAQ;;;CAKpD,YAAoB,OAAwB,QAAkB;AAC5D,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,SACP;AAGF,OAAI,CAAC,KAAK,cAAc,OAAO,QAAQ,KAAK,WAAW,CAAC,WAAW,EACjE,QAAO;IAAE,SAAS;IAAM,QAAQ,KAAK;IAAQ;AAG/C,OAAI,UAAU,KAAK,UAAU,QAAQ,KAAK,WAAW,CACnD,QAAO;IAAE,SAAS;IAAM,QAAQ,KAAK;IAAQ;;;CAKnD,UAAkB,aAAsB,gBAAwB;AAC9D,MAAI,OAAO,gBAAgB,YAAY,gBAAgB,KACrD,QAAO;AAGT,OAAK,MAAM,CAAC,KAAK,oBAAoB,OAAO,QAAQ,eAAe,EAAE;GACnE,MAAM,cAAc,QAAQ,IAAI,aAAa,IAAI;AAEjD,OAAI,CAAC,KAAK,WAAW,aAAa,gBAAgB,CAChD,QAAO;;AAIX,SAAO;;CAGT,WAAmB,QAAiB,WAAoB;AACtD,MAAI,OAAO,cAAc,YAAY,cAAc,KACjD,QAAO;AAGT,MAAI,QAAQ,aAAa,OAAO,UAAU,OAAO,WAC/C,QAAO,UAAU,GAAG,OAAO;AAG7B,SAAO,KAAK,UAAU,QAAQ,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/prompts/index.ts"],"mappings":";;;;cAoTa,KAAA,GAAe,OAAA,EAAS,YAAA,EAAc,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cA8B7D,QAAA,GACX,OAAA,EAAS,eAAA,EACT,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cAuCZ,OAAA,GACX,OAAA,EAAS,cAAA,EACT,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cAkEZ,MAAA,GACX,OAAA,EAAS,aAAA,EACT,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cAiJZ,MAAA,0BACX,OAAA,EAAS,aAAA,CAAc,MAAA,GACvB,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cA0EZ,WAAA,0BACX,OAAA,EAAS,kBAAA,CAAmB,MAAA,GAC5B,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/prompts/index.ts"],"mappings":";;;;cAoTa,KAAA,GAAe,OAAA,EAAS,YAAA,EAAc,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cA8B7D,QAAA,GACX,OAAA,EAAS,eAAA,EACT,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cAuCZ,OAAA,GACX,OAAA,EAAS,cAAA,EACT,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cAkEZ,MAAA,GACX,OAAA,EAAS,aAAA,EACT,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cAiJZ,MAAA,0BACX,OAAA,EAAS,aAAA,CAAc,MAAA,GACvB,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA;;;cA0EZ,WAAA,0BACX,OAAA,EAAS,kBAAA,CAAmB,MAAA,GAC5B,OAAA,GAAU,aAAA,KAAa,OAAA;EAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/lib/prompts/index.ts"],"sourcesContent":["import { styleText } from \"node:util\";\nimport { createNodePromptRuntime } from \"./core/runtime.js\";\nimport { runPromptSession } from \"./core/session.js\";\nimport type { PromptRuntime } from \"./core/types.js\";\nimport type {\n ConfirmOptions,\n InputOptions,\n MultiselectOptions,\n NumberOptions,\n PasswordOptions,\n SelectOptions,\n} from \"./types.js\";\n\nconst pointer = (active: boolean) => {\n return active ? paint(\"cyan\", \"❯\") : \" \";\n};\n\nconst addErrorLine = (content: string, errorMessage: string | null) => {\n if (!errorMessage) {\n return content;\n }\n\n return `${content}\\n${errorMark()} ${paint(\"red\", errorMessage)}`;\n};\n\nconst insertAt = (value: string, at: number, character: string) => {\n return `${value.slice(0, at)}${character}${value.slice(at)}`;\n};\n\nconst INVERSE = \"\\u001B[7m\";\nconst RESET = \"\\u001B[0m\";\nconst WHITESPACE = /\\s/;\nconst NUMBER_CHAR = /[0-9.-]/;\nconst CURSOR_BLOCK = `${INVERSE} ${RESET}`;\nconst paint = (\n color: \"cyan\" | \"green\" | \"red\" | \"yellow\" | \"dim\",\n text: string,\n) => {\n return styleText(color, text, { validateStream: false });\n};\n\nconst questionMark = () => paint(\"cyan\", \"?\");\nconst successMark = () => paint(\"green\", \"✔\");\nconst errorMark = () => paint(\"red\", \"✖\");\n\nconst renderQuestionLine = (message: string, content: string) => {\n return `${questionMark()} ${paint(\"cyan\", message)} ${content}`;\n};\n\nconst renderSuccessLine = (message: string, content: string) => {\n return `${successMark()} ${message} ${content}`;\n};\n\ntype TextState = {\n value: string;\n cursor: number;\n selectionAnchor: number | null;\n};\n\nconst createTextState = (value: string): TextState => {\n return {\n value,\n cursor: value.length,\n selectionAnchor: null,\n };\n};\n\nconst submitTextValue = (\n state: TextState,\n options: {\n defaultValue?: string;\n required?: boolean;\n requiredMessage?: string;\n },\n) => {\n const value =\n state.value.length > 0 ? state.value : (options.defaultValue ?? \"\");\n\n if (options.required && value.trim().length === 0) {\n return { errorMessage: options.requiredMessage ?? \"A value is required\" };\n }\n\n return { value };\n};\n\nconst getSelectionRange = (state: TextState) => {\n if (\n state.selectionAnchor === null ||\n state.selectionAnchor === state.cursor\n ) {\n return null;\n }\n\n return {\n start: Math.min(state.selectionAnchor, state.cursor),\n end: Math.max(state.selectionAnchor, state.cursor),\n };\n};\n\nconst moveCursor = (\n state: TextState,\n cursor: number,\n keepSelection: boolean,\n) => {\n if (!keepSelection) {\n return {\n ...state,\n cursor,\n selectionAnchor: null,\n };\n }\n\n return {\n ...state,\n cursor,\n selectionAnchor: state.selectionAnchor ?? state.cursor,\n };\n};\n\nconst deleteRange = (\n state: TextState,\n start: number,\n end: number,\n): TextState => {\n return {\n value: `${state.value.slice(0, start)}${state.value.slice(end)}`,\n cursor: start,\n selectionAnchor: null,\n };\n};\n\nconst deleteSelectedRange = (state: TextState) => {\n const selection = getSelectionRange(state);\n\n if (!selection) {\n return state;\n }\n\n return deleteRange(state, selection.start, selection.end);\n};\n\nconst findWordStart = (value: string, cursor: number) => {\n let index = cursor;\n\n while (index > 0 && WHITESPACE.test(value[index - 1] ?? \"\")) {\n index -= 1;\n }\n\n while (index > 0 && !WHITESPACE.test(value[index - 1] ?? \"\")) {\n index -= 1;\n }\n\n return index;\n};\n\nconst findWordEnd = (value: string, cursor: number) => {\n let index = cursor;\n\n while (index < value.length && WHITESPACE.test(value[index] ?? \"\")) {\n index += 1;\n }\n\n while (index < value.length && !WHITESPACE.test(value[index] ?? \"\")) {\n index += 1;\n }\n\n return index;\n};\n\nconst renderTextSelection = (state: TextState, mask?: string) => {\n const selection = getSelectionRange(state);\n const content = mask ? mask.repeat(state.value.length) : state.value;\n const boundedCursor = Math.max(0, Math.min(state.cursor, content.length));\n\n if (!selection) {\n if (content.length === 0) {\n return CURSOR_BLOCK;\n }\n\n if (boundedCursor === content.length) {\n return `${content}${CURSOR_BLOCK}`;\n }\n\n const focusedChar = content[boundedCursor] ?? \" \";\n\n return `${content.slice(0, boundedCursor)}${INVERSE}${focusedChar}${RESET}${content.slice(boundedCursor + 1)}`;\n }\n\n const selected = content.slice(selection.start, selection.end);\n\n return `${content.slice(0, selection.start)}${INVERSE}${selected}${RESET}${content.slice(selection.end)}`;\n};\n\nconst textOnKey = (\n state: TextState,\n key: {\n name: string;\n value?: string;\n },\n) => {\n switch (key.name) {\n case \"ctrl_a\": {\n return {\n ...state,\n cursor: state.value.length,\n selectionAnchor: 0,\n };\n }\n case \"home\": {\n return moveCursor(state, 0, false);\n }\n case \"end\": {\n return moveCursor(state, state.value.length, false);\n }\n case \"shift_ctrl_left\": {\n return moveCursor(state, findWordStart(state.value, state.cursor), true);\n }\n case \"shift_ctrl_right\": {\n return moveCursor(state, findWordEnd(state.value, state.cursor), true);\n }\n case \"left\": {\n return moveCursor(state, Math.max(state.cursor - 1, 0), false);\n }\n case \"shift_left\": {\n return moveCursor(state, Math.max(state.cursor - 1, 0), true);\n }\n case \"right\": {\n return moveCursor(\n state,\n Math.min(state.cursor + 1, state.value.length),\n false,\n );\n }\n case \"ctrl_left\": {\n return moveCursor(state, findWordStart(state.value, state.cursor), false);\n }\n case \"ctrl_right\": {\n return moveCursor(state, findWordEnd(state.value, state.cursor), false);\n }\n case \"shift_right\": {\n return moveCursor(\n state,\n Math.min(state.cursor + 1, state.value.length),\n true,\n );\n }\n case \"backspace\": {\n const selectionDeleted = deleteSelectedRange(state);\n\n if (selectionDeleted !== state) {\n return selectionDeleted;\n }\n\n if (state.cursor === 0) {\n return state;\n }\n\n const nextCursor = state.cursor - 1;\n\n return {\n value: `${state.value.slice(0, nextCursor)}${state.value.slice(state.cursor)}`,\n cursor: nextCursor,\n selectionAnchor: null,\n };\n }\n case \"ctrl_backspace\": {\n const selectionDeleted = deleteSelectedRange(state);\n\n if (selectionDeleted !== state) {\n return selectionDeleted;\n }\n\n if (state.cursor === 0) {\n return state;\n }\n\n const nextCursor = findWordStart(state.value, state.cursor);\n return deleteRange(state, nextCursor, state.cursor);\n }\n case \"delete\": {\n const selectionDeleted = deleteSelectedRange(state);\n\n if (selectionDeleted !== state) {\n return selectionDeleted;\n }\n\n return {\n ...state,\n value: `${state.value.slice(0, state.cursor)}${state.value.slice(state.cursor + 1)}`,\n };\n }\n case \"character\":\n case \"space\": {\n const collapsed = deleteSelectedRange(state);\n const text = key.name === \"space\" ? \" \" : (key.value ?? \"\");\n\n return {\n value: insertAt(collapsed.value, collapsed.cursor, text),\n cursor: collapsed.cursor + 1,\n selectionAnchor: null,\n };\n }\n default: {\n return state;\n }\n }\n};\n\nexport const input = async (options: InputOptions, runtime?: PromptRuntime) => {\n const promptRuntime = runtime ?? createNodePromptRuntime();\n const initialValue = options.defaultValue ?? \"\";\n\n return runPromptSession<TextState, string, InputOptions>({\n runtime: promptRuntime,\n options,\n initialState: createTextState(initialValue),\n render: ({ options: currentOptions, state, errorMessage }) => {\n let text = renderTextSelection(state);\n\n if (state.value.length === 0 && currentOptions.placeholder) {\n text = `${CURSOR_BLOCK}${paint(\"dim\", currentOptions.placeholder)}`;\n }\n\n return addErrorLine(\n renderQuestionLine(currentOptions.message, text),\n errorMessage,\n );\n },\n complete: ({ options: currentOptions, value }) => {\n return renderSuccessLine(currentOptions.message, value);\n },\n onKey: (state, key) => {\n return textOnKey(state, key);\n },\n onSubmit: (state) => submitTextValue(state, options),\n });\n};\n\nexport const password = async (\n options: PasswordOptions,\n runtime?: PromptRuntime,\n) => {\n const promptRuntime = runtime ?? createNodePromptRuntime();\n const initialValue = options.defaultValue ?? \"\";\n const mask = options.mask;\n\n return runPromptSession<TextState, string, PasswordOptions>({\n runtime: promptRuntime,\n options,\n initialState: createTextState(initialValue),\n render: ({ options: currentOptions, state, errorMessage }) => {\n let visible: string;\n\n if (state.value.length === 0 && currentOptions.placeholder) {\n visible = `${CURSOR_BLOCK}${paint(\"dim\", currentOptions.placeholder)}`;\n } else if (mask !== undefined) {\n visible = renderTextSelection(state, mask);\n } else {\n visible = CURSOR_BLOCK;\n }\n\n return addErrorLine(\n renderQuestionLine(currentOptions.message, visible),\n errorMessage,\n );\n },\n complete: ({ options: currentOptions, value }) => {\n return renderSuccessLine(\n currentOptions.message,\n mask !== undefined ? mask.repeat(value.length) : \"\",\n );\n },\n onKey: (state, key) => {\n return textOnKey(state, key);\n },\n onSubmit: (state) => submitTextValue(state, options),\n });\n};\n\nexport const confirm = async (\n options: ConfirmOptions,\n runtime?: PromptRuntime,\n) => {\n const promptRuntime = runtime ?? createNodePromptRuntime();\n const defaultValue = options.defaultValue ?? false;\n\n return runPromptSession<{ value: boolean }, boolean, ConfirmOptions>({\n runtime: promptRuntime,\n options,\n initialState: {\n value: defaultValue,\n },\n render: ({ options: currentOptions, state, errorMessage }) => {\n const yesLabel = currentOptions.activeLabel ?? \"Yes\";\n const noLabel = currentOptions.inactiveLabel ?? \"No\";\n const rendered = state.value ? yesLabel : noLabel;\n\n return addErrorLine(\n [\n renderQuestionLine(currentOptions.message, `(${rendered})`),\n paint(\"dim\", \" (y/n to select, ← yes / → no, space to toggle)\"),\n ].join(\"\\n\"),\n errorMessage,\n );\n },\n complete: ({ options: currentOptions, value }) => {\n const label = value\n ? (currentOptions.activeLabel ?? \"Yes\")\n : (currentOptions.inactiveLabel ?? \"No\");\n\n return renderSuccessLine(currentOptions.message, label);\n },\n onKey: (state, key) => {\n switch (key.name) {\n case \"left\": {\n return { value: true };\n }\n case \"right\": {\n return { value: false };\n }\n case \"space\": {\n return { value: !state.value };\n }\n case \"character\": {\n const lowered = (key.value ?? \"\").toLowerCase();\n\n if (lowered === \"y\") {\n return { value: true };\n }\n\n if (lowered === \"n\") {\n return { value: false };\n }\n\n return state;\n }\n default: {\n return state;\n }\n }\n },\n onSubmit: (state) => {\n return { value: state.value };\n },\n });\n};\n\nexport const number = async (\n options: NumberOptions,\n runtime?: PromptRuntime,\n) => {\n const promptRuntime = runtime ?? createNodePromptRuntime();\n const defaultValue =\n options.defaultValue === undefined ? \"\" : String(options.defaultValue);\n\n return runPromptSession<TextState, number, NumberOptions>({\n runtime: promptRuntime,\n options,\n initialState: createTextState(defaultValue),\n render: ({ options: currentOptions, state, errorMessage }) => {\n return addErrorLine(\n renderQuestionLine(currentOptions.message, renderTextSelection(state)),\n errorMessage,\n );\n },\n complete: ({ options: currentOptions, value }) => {\n return renderSuccessLine(currentOptions.message, String(value));\n },\n onKey: (state, key) => {\n const next = textOnKey(state, key);\n const isTextEntry = key.name === \"character\" || key.name === \"space\";\n\n if (!isTextEntry) {\n return next;\n }\n\n const value = key.name === \"space\" ? \" \" : (key.value ?? \"\");\n\n if (!NUMBER_CHAR.test(value)) {\n return state;\n }\n\n if (value === \".\" || value === \"-\") {\n const collapsed = deleteSelectedRange(state);\n\n if (value === \".\" && collapsed.value.includes(\".\")) {\n return state;\n }\n\n if (value === \"-\") {\n if (collapsed.cursor !== 0) return state;\n if (collapsed.value.includes(\"-\")) return state;\n }\n }\n\n return next;\n },\n onSubmit: (state) => {\n const raw = state.value.trim();\n\n if (raw.length === 0) {\n return {\n errorMessage: options.requiredMessage ?? \"A number is required\",\n };\n }\n\n const parsed = Number(raw);\n\n if (!Number.isFinite(parsed)) {\n return {\n errorMessage: options.invalidMessage ?? \"Please enter a valid number\",\n };\n }\n\n if (options.min !== undefined && parsed < options.min) {\n return {\n errorMessage:\n options.minMessage ??\n `Number must be greater than or equal to ${options.min}`,\n };\n }\n\n if (options.max !== undefined && parsed > options.max) {\n return {\n errorMessage:\n options.maxMessage ??\n `Number must be lower than or equal to ${options.max}`,\n };\n }\n\n return { value: parsed };\n },\n });\n};\n\nconst findFirstEnabledIndex = <TValue extends string>(\n choices: readonly {\n value: TValue;\n disabled?: boolean;\n }[],\n) => {\n const firstEnabledIndex = choices.findIndex((choice) => !choice.disabled);\n\n if (firstEnabledIndex >= 0) {\n return firstEnabledIndex;\n }\n\n return 0;\n};\n\nconst findNextEnabledIndex = <TValue extends string>(\n choices: readonly {\n value: TValue;\n disabled?: boolean;\n }[],\n cursor: number,\n direction: 1 | -1,\n) => {\n const total = choices.length;\n let currentCursor = cursor;\n\n for (let offset = 0; offset < total; offset++) {\n const nextCursor = (currentCursor + direction + total) % total;\n const nextChoice = choices[nextCursor];\n\n if (nextChoice && !nextChoice.disabled) {\n return nextCursor;\n }\n\n currentCursor = nextCursor;\n }\n\n return currentCursor;\n};\n\nconst findDefaultIndex = <TValue extends string>(\n choices: SelectOptions<TValue>[\"choices\"],\n defaultValue: TValue | undefined,\n) => {\n if (defaultValue === undefined) {\n return findFirstEnabledIndex(choices);\n }\n\n const index = choices.findIndex(\n (choice) => choice.value === defaultValue && !choice.disabled,\n );\n\n if (index >= 0) {\n return index;\n }\n\n return findFirstEnabledIndex(choices);\n};\n\nexport const select = async <TValue extends string>(\n options: SelectOptions<TValue>,\n runtime?: PromptRuntime,\n) => {\n const promptRuntime = runtime ?? createNodePromptRuntime();\n const initialCursor = findDefaultIndex(options.choices, options.defaultValue);\n\n return runPromptSession<{ cursor: number }, TValue, SelectOptions<TValue>>({\n runtime: promptRuntime,\n options,\n initialState: {\n cursor: initialCursor,\n },\n render: ({ options: currentOptions, state, errorMessage }) => {\n const lines = [renderQuestionLine(currentOptions.message, \"\")];\n\n for (let index = 0; index < currentOptions.choices.length; index++) {\n const choice = currentOptions.choices[index];\n\n if (!choice) {\n continue;\n }\n\n const active = state.cursor === index;\n const label = choice.label ?? choice.value;\n const hint = choice.hint ? paint(\"dim\", ` (${choice.hint})`) : \"\";\n const disabled = choice.disabled ? paint(\"yellow\", \" [disabled]\") : \"\";\n\n lines.push(`${pointer(active)} ${label}${hint}${disabled}`);\n }\n\n return addErrorLine(lines.join(\"\\n\"), errorMessage);\n },\n complete: ({ options: currentOptions, value }) => {\n const selected = currentOptions.choices.find(\n (choice) => choice.value === value,\n );\n\n return renderSuccessLine(\n currentOptions.message,\n selected?.label ?? value,\n );\n },\n onKey: (state, key) => {\n switch (key.name) {\n case \"up\": {\n return {\n cursor: findNextEnabledIndex(options.choices, state.cursor, -1),\n };\n }\n case \"down\": {\n return {\n cursor: findNextEnabledIndex(options.choices, state.cursor, 1),\n };\n }\n default: {\n return state;\n }\n }\n },\n onSubmit: (state) => {\n const selectedChoice = options.choices[state.cursor];\n\n if (!selectedChoice) {\n return { errorMessage: \"Please select an option\" };\n }\n\n if (selectedChoice.disabled) {\n return { errorMessage: \"Selected option is disabled\" };\n }\n\n return { value: selectedChoice.value };\n },\n });\n};\n\nexport const multiselect = async <TValue extends string>(\n options: MultiselectOptions<TValue>,\n runtime?: PromptRuntime,\n) => {\n const promptRuntime = runtime ?? createNodePromptRuntime();\n\n return runPromptSession<\n { cursor: number; selected: Set<TValue> },\n TValue[],\n MultiselectOptions<TValue>\n >({\n runtime: promptRuntime,\n options,\n initialState: {\n cursor: findFirstEnabledIndex(options.choices),\n selected: new Set<TValue>(options.defaultValue ?? []),\n },\n render: ({ options: currentOptions, state, errorMessage }) => {\n const lines = [renderQuestionLine(currentOptions.message, \"\")];\n\n for (let index = 0; index < currentOptions.choices.length; index++) {\n const choice = currentOptions.choices[index];\n\n if (!choice) {\n continue;\n }\n\n const active = state.cursor === index;\n const checked = state.selected.has(choice.value) ? \"◉\" : \"◯\";\n const disabled = choice.disabled ? paint(\"yellow\", \" [disabled]\") : \"\";\n const label = choice.label ?? choice.value;\n const hint = choice.hint ? paint(\"dim\", ` (${choice.hint})`) : \"\";\n\n lines.push(`${pointer(active)} ${checked} ${label}${hint}${disabled}`);\n }\n\n lines.push(\n paint(\"dim\", \" (space to toggle, a to toggle all, enter to submit)\"),\n );\n\n return addErrorLine(lines.join(\"\\n\"), errorMessage);\n },\n complete: ({ options: currentOptions, value }) => {\n const labelMap = new Map(\n currentOptions.choices.map((choice) => [choice.value, choice.label]),\n );\n\n const labels = value.map((v) => labelMap.get(v) ?? v);\n\n return renderSuccessLine(currentOptions.message, labels.join(\", \"));\n },\n onKey: (state, key) => {\n switch (key.name) {\n case \"up\": {\n return {\n ...state,\n cursor: findNextEnabledIndex(options.choices, state.cursor, -1),\n };\n }\n case \"down\": {\n return {\n ...state,\n cursor: findNextEnabledIndex(options.choices, state.cursor, 1),\n };\n }\n case \"character\": {\n const lowered = (key.value ?? \"\").toLowerCase();\n\n if (lowered === \"a\") {\n const enabledValues = options.choices\n .filter((choice) => !choice.disabled)\n .map((choice) => choice.value);\n\n const hasEnabledValues = enabledValues.length > 0;\n\n if (!hasEnabledValues) {\n return state;\n }\n\n const areAllEnabledSelected = enabledValues.every((value) =>\n state.selected.has(value),\n );\n\n const nextSelection = new Set(state.selected);\n\n if (areAllEnabledSelected) {\n for (const value of enabledValues) {\n nextSelection.delete(value);\n }\n } else {\n for (const value of enabledValues) {\n nextSelection.add(value);\n }\n }\n\n return {\n ...state,\n selected: nextSelection,\n };\n }\n\n return state;\n }\n case \"space\": {\n const currentChoice = options.choices[state.cursor];\n\n if (!currentChoice || currentChoice.disabled) {\n return state;\n }\n\n const nextSelection = new Set(state.selected);\n\n if (nextSelection.has(currentChoice.value)) {\n nextSelection.delete(currentChoice.value);\n } else {\n nextSelection.add(currentChoice.value);\n }\n\n return {\n ...state,\n selected: nextSelection,\n };\n }\n default: {\n return state;\n }\n }\n },\n onSubmit: (state) => {\n const values = options.choices\n .filter((choice) => state.selected.has(choice.value))\n .map((choice) => choice.value);\n\n if (options.min !== undefined && values.length < options.min) {\n return {\n errorMessage: `Please select at least ${options.min} options`,\n };\n }\n\n if (options.max !== undefined && values.length > options.max) {\n return {\n errorMessage: `Please select at most ${options.max} options`,\n };\n }\n\n return { value: values };\n },\n });\n};\n\nexport type { PromptRuntime } from \"./core/types.js\";\nexport type {\n ConfirmOptions,\n InputOptions,\n MultiselectOptions,\n NumberOptions,\n PasswordOptions,\n PromptErrorType,\n SelectChoice,\n SelectOptions,\n} from \"./types.js\";\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"mappings":";;;cAGa,MAAA,WAAiB,MAAA;EAAA,QACpB,OAAA;EAAA,QACA,YAAA;EAAA,QACA,aAAA;EAAA,QACA,QAAA;EAAA,QACA,mBAAA;EAAA,QAGA,iBAAA;cAIW,OAAA,EAAS,aAAA;EAAA,QAId,SAAA;EAAA,QAaA,kBAAA;EAuDD,OAAA,CAAQ,OAAA,EAAS,CAAA,GAAC,OAAA;IAAA;;;;;;EAuBlB,SAAA,CAAU,OAAA,EAAS,cAAA,CAAe,CAAA,IAAE,OAAA,uBAAA,OAAA;IAAA;;;;;;EA8EpC,WAAA,CAAA,GAAW,OAAA;IAAA;;;EAmDjB,QAAA,CAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/lib/pubsub/index.ts"],"mappings":";;;cAGa,MAAA,WAAiB,MAAA;EAAA,QACpB,OAAA;EAAA,QACA,YAAA;EAAA,QACA,aAAA;EAAA,QACA,QAAA;EAAA,QACA,mBAAA;EAAA,QAGA,iBAAA;cAIW,OAAA,EAAS,aAAA;EAAA,QAId,SAAA;EAAA,QAaA,kBAAA;EAuDD,OAAA,CAAQ,OAAA,EAAS,CAAA,GAAC,OAAA;IAAA;;;;;;EAuBlB,SAAA,CAAU,OAAA,EAAS,cAAA,CAAe,CAAA,IAAE,OAAA,uBAAA,OAAA;IAAA;;;;;;EA8EpC,WAAA,CAAA,GAAW,OAAA;IAAA;;;EAmDjB,QAAA,CAAA;AAAA"}