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 +0,0 @@
1
- {"version":3,"file":"helpers.mjs","names":[],"sources":["../../src/lib/policy/helpers.ts"],"sourcesContent":["const _brand = Symbol(\"conditionHelper\");\n\nexport type ConditionHelper<V> = {\n readonly [_brand]: (actual: V) => boolean;\n operator: string;\n value: unknown;\n fn: (actual: V) => boolean;\n};\n\nexport const eq = <V>(value: V): ConditionHelper<V> => {\n const fn = (actual: V) => actual === value;\n\n return {\n [_brand]: fn,\n operator: \"eq\",\n value,\n fn,\n };\n};\n\nexport const neq = <V>(value: V): ConditionHelper<V> => {\n const fn = (actual: V) => actual !== value;\n\n return {\n [_brand]: fn,\n operator: \"neq\",\n value,\n fn,\n };\n};\n\nexport const gt: {\n (value: Date): ConditionHelper<Date>;\n (value: number): ConditionHelper<number>;\n (value: string): ConditionHelper<string>;\n} = (\n value: string | number | Date,\n): ConditionHelper<string | number | Date> => {\n const fn = (actual: string | number | Date) => actual > value;\n\n return {\n [_brand]: fn,\n operator: \"gt\",\n value,\n fn,\n };\n};\n\nexport const gte: {\n (value: Date): ConditionHelper<Date>;\n (value: number): ConditionHelper<number>;\n (value: string): ConditionHelper<string>;\n} = (\n value: string | number | Date,\n): ConditionHelper<string | number | Date> => {\n const fn = (actual: string | number | Date) => actual >= value;\n\n return {\n [_brand]: fn,\n operator: \"gte\",\n value,\n fn,\n };\n};\n\nexport const lt: {\n (value: Date): ConditionHelper<Date>;\n (value: number): ConditionHelper<number>;\n (value: string): ConditionHelper<string>;\n} = (\n value: string | number | Date,\n): ConditionHelper<string | number | Date> => {\n const fn = (actual: string | number | Date) => actual < value;\n\n return {\n [_brand]: fn,\n operator: \"lt\",\n value,\n fn,\n };\n};\n\nexport const lte: {\n (value: Date): ConditionHelper<Date>;\n (value: number): ConditionHelper<number>;\n (value: string): ConditionHelper<string>;\n} = (\n value: string | number | Date,\n): ConditionHelper<string | number | Date> => {\n const fn = (actual: string | number | Date) => actual <= value;\n\n return {\n [_brand]: fn,\n operator: \"lte\",\n value,\n fn,\n };\n};\n\nexport const not = <V>(inner: ConditionHelper<V>): ConditionHelper<V> => {\n const fn = (actual: V) => !inner.fn(actual);\n\n return {\n [_brand]: fn,\n operator: \"not\",\n value: inner,\n fn,\n };\n};\n\nexport const and = <V>(\n ...helpers: ConditionHelper<V>[]\n): ConditionHelper<V> => {\n const fn = (actual: V) => helpers.every((h) => h.fn(actual));\n\n return {\n [_brand]: fn,\n operator: \"and\",\n value: helpers,\n fn,\n };\n};\n\nexport const or = <V>(...helpers: ConditionHelper<V>[]): ConditionHelper<V> => {\n const fn = (actual: V) => helpers.some((h) => h.fn(actual));\n\n return {\n [_brand]: fn,\n operator: \"or\",\n value: helpers,\n fn,\n };\n};\n\nexport const startsWith = (prefix: string): ConditionHelper<string> => {\n const fn = (actual: string) => actual.startsWith(prefix);\n\n return {\n [_brand]: fn,\n operator: \"startsWith\",\n value: prefix,\n fn,\n };\n};\n\nexport const endsWith = (suffix: string): ConditionHelper<string> => {\n const fn = (actual: string) => actual.endsWith(suffix);\n\n return {\n [_brand]: fn,\n operator: \"endsWith\",\n value: suffix,\n fn,\n };\n};\n\nexport const includes = (substring: string): ConditionHelper<string> => {\n const fn = (actual: string) => actual.includes(substring);\n\n return {\n [_brand]: fn,\n operator: \"includes\",\n value: substring,\n fn,\n };\n};\n\nexport const matches = (pattern: RegExp): ConditionHelper<string> => {\n const fn = (actual: string) => {\n pattern.lastIndex = 0;\n\n return pattern.test(actual);\n };\n\n return {\n [_brand]: fn,\n operator: \"matches\",\n value: pattern,\n fn,\n };\n};\n\nexport const has = <V>(items: V | V[]): ConditionHelper<V[]> => {\n const fn = (actual: V[]) => {\n if (Array.isArray(items)) {\n return items.every((item) => actual.includes(item));\n }\n\n return actual.includes(items);\n };\n\n return {\n [_brand]: fn,\n operator: \"has\",\n value: items,\n fn,\n };\n};\n\nexport const hasAny = <V>(items: V | V[]): ConditionHelper<V[]> => {\n const normalized = Array.isArray(items) ? items : [items];\n const fn = (actual: V[]) => normalized.some((item) => actual.includes(item));\n\n return {\n [_brand]: fn,\n operator: \"hasAny\",\n value: items,\n fn,\n };\n};\n\ntype HasLengthArg = number | { min?: number; max?: number };\n\nexport const hasLength = (\n length: HasLengthArg,\n): ConditionHelper<string | unknown[]> => {\n const fn = (actual: string | unknown[]) => {\n const len = actual.length;\n\n if (typeof length === \"number\") {\n return len === length;\n }\n\n if (length.min !== undefined && len < length.min) {\n return false;\n }\n\n if (length.max !== undefined && len > length.max) {\n return false;\n }\n\n return true;\n };\n\n return {\n [_brand]: fn,\n operator: \"hasLength\",\n value: length,\n fn,\n };\n};\n\nexport const isEmpty = (): ConditionHelper<string | unknown[]> => {\n const fn = (actual: string | unknown[]) => actual.length === 0;\n\n return {\n [_brand]: fn,\n operator: \"isEmpty\",\n value: undefined,\n fn,\n };\n};\n\nexport const isDefined = (): ConditionHelper<unknown> => {\n const fn = (actual: unknown) => actual !== null && actual !== undefined;\n\n return {\n [_brand]: fn,\n operator: \"isDefined\",\n value: undefined,\n fn,\n };\n};\n\nexport const isNullish = (): ConditionHelper<unknown> => {\n const fn = (actual: unknown) => actual === null || actual === undefined;\n\n return {\n [_brand]: fn,\n operator: \"isNullish\",\n value: undefined,\n fn,\n };\n};\n"],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { ConditionHelper } from "./helpers.cjs";
2
-
3
- //#region src/lib/policy/types.d.ts
4
- type Action = "read" | "create" | "update" | "delete" | (string & {});
5
- type ConditionValue<V> = V extends Record<string, unknown> ? ConditionHelper<V> | Conditions<V> : ConditionHelper<V>;
6
- type Conditions<T = Record<string, unknown>> = { [K in keyof T]?: ConditionValue<T[K]> };
7
- type PolicyRuleParams<T = Record<string, unknown>> = {
8
- action: Action | Action[];
9
- conditions?: Conditions<T>;
10
- reason?: string;
11
- };
12
- type AllowParams<T = Record<string, unknown>> = PolicyRuleParams<T>;
13
- type ForbidParams<T = Record<string, unknown>> = PolicyRuleParams<T>;
14
- //#endregion
15
- export { Action, AllowParams, ForbidParams };
16
- //# sourceMappingURL=types.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/lib/policy/types.ts"],"mappings":";;;KAEY,MAAA;AAAA,KAEA,cAAA,MACV,CAAA,SAAU,MAAA,oBACN,eAAA,CAAgB,CAAA,IAAK,UAAA,CAAW,CAAA,IAChC,eAAA,CAAgB,CAAA;AAAA,KAEV,UAAA,KAAe,MAAA,mCACb,CAAA,IAAK,cAAA,CAAe,CAAA,CAAE,CAAA;AAAA,KAU/B,gBAAA,KAAqB,MAAA;EACxB,MAAA,EAAQ,MAAA,GAAS,MAAA;EACjB,UAAA,GAAa,UAAA,CAAW,CAAA;EACxB,MAAA;AAAA;AAAA,KAGU,WAAA,KAAgB,MAAA,qBAA2B,gBAAA,CAAiB,CAAA;AAAA,KAE5D,YAAA,KAAiB,MAAA,qBAA2B,gBAAA,CAAiB,CAAA"}
@@ -1,16 +0,0 @@
1
- import { ConditionHelper } from "./helpers.mjs";
2
-
3
- //#region src/lib/policy/types.d.ts
4
- type Action = "read" | "create" | "update" | "delete" | (string & {});
5
- type ConditionValue<V> = V extends Record<string, unknown> ? ConditionHelper<V> | Conditions<V> : ConditionHelper<V>;
6
- type Conditions<T = Record<string, unknown>> = { [K in keyof T]?: ConditionValue<T[K]> };
7
- type PolicyRuleParams<T = Record<string, unknown>> = {
8
- action: Action | Action[];
9
- conditions?: Conditions<T>;
10
- reason?: string;
11
- };
12
- type AllowParams<T = Record<string, unknown>> = PolicyRuleParams<T>;
13
- type ForbidParams<T = Record<string, unknown>> = PolicyRuleParams<T>;
14
- //#endregion
15
- export { Action, AllowParams, ForbidParams };
16
- //# sourceMappingURL=types.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/policy/types.ts"],"mappings":";;;KAEY,MAAA;AAAA,KAEA,cAAA,MACV,CAAA,SAAU,MAAA,oBACN,eAAA,CAAgB,CAAA,IAAK,UAAA,CAAW,CAAA,IAChC,eAAA,CAAgB,CAAA;AAAA,KAEV,UAAA,KAAe,MAAA,mCACb,CAAA,IAAK,cAAA,CAAe,CAAA,CAAE,CAAA;AAAA,KAU/B,gBAAA,KAAqB,MAAA;EACxB,MAAA,EAAQ,MAAA,GAAS,MAAA;EACjB,UAAA,GAAa,UAAA,CAAW,CAAA;EACxB,MAAA;AAAA;AAAA,KAGU,WAAA,KAAgB,MAAA,qBAA2B,gBAAA,CAAiB,CAAA;AAAA,KAE5D,YAAA,KAAiB,MAAA,qBAA2B,gBAAA,CAAiB,CAAA"}
@@ -1,165 +0,0 @@
1
- //#region src/lib/prompts/core/keys.ts
2
- const ESC = "\x1B";
3
- const CSI = "\x1B[";
4
- const ESC_BACKSPACE = `${ESC}\u007F`;
5
- const CHAR_KEY_MAP = new Map(Object.values({
6
- enterCr: {
7
- value: "\r",
8
- name: "enter"
9
- },
10
- enterLf: {
11
- value: "\n",
12
- name: "enter"
13
- },
14
- ctrlA: {
15
- value: "",
16
- name: "ctrl_a"
17
- },
18
- ctrlC: {
19
- value: "",
20
- name: "ctrl_c"
21
- },
22
- ctrlBackspace: {
23
- value: "",
24
- name: "ctrl_backspace"
25
- },
26
- backspace: {
27
- value: "",
28
- name: "backspace"
29
- },
30
- tab: {
31
- value: " ",
32
- name: "tab"
33
- },
34
- space: {
35
- value: " ",
36
- name: "space"
37
- }
38
- }).map((entry) => [entry.value, { name: entry.name }]));
39
- const KNOWN_SEQUENCES = [
40
- {
41
- sequence: "\x1B[1;2D",
42
- key: { name: "shift_left" }
43
- },
44
- {
45
- sequence: "\x1B[1;2C",
46
- key: { name: "shift_right" }
47
- },
48
- {
49
- sequence: "\x1B[1;5D",
50
- key: { name: "ctrl_left" }
51
- },
52
- {
53
- sequence: "\x1B[1;5C",
54
- key: { name: "ctrl_right" }
55
- },
56
- {
57
- sequence: "\x1B[1;6D",
58
- key: { name: "shift_ctrl_left" }
59
- },
60
- {
61
- sequence: "\x1B[1;6C",
62
- key: { name: "shift_ctrl_right" }
63
- },
64
- {
65
- sequence: "\x1B[3~",
66
- key: { name: "delete" }
67
- },
68
- {
69
- sequence: "\x1B[H",
70
- key: { name: "home" }
71
- },
72
- {
73
- sequence: "\x1B[F",
74
- key: { name: "end" }
75
- },
76
- {
77
- sequence: "\x1B[A",
78
- key: { name: "up" }
79
- },
80
- {
81
- sequence: "\x1B[B",
82
- key: { name: "down" }
83
- },
84
- {
85
- sequence: "\x1B[C",
86
- key: { name: "right" }
87
- },
88
- {
89
- sequence: "\x1B[D",
90
- key: { name: "left" }
91
- }
92
- ];
93
- const isControlChar = (char) => {
94
- return char <= "" || char === "";
95
- };
96
- const isCsiFinalByte = (char) => {
97
- if (!char) return false;
98
- if (char >= "A" && char <= "Z") return true;
99
- if (char >= "a" && char <= "z") return true;
100
- if (char === "~") return true;
101
- return false;
102
- };
103
- const readCsiLength = (remaining) => {
104
- if (!remaining.startsWith(CSI)) return null;
105
- let index = 2;
106
- while (index < remaining.length) {
107
- if (isCsiFinalByte(remaining[index] ?? "")) return {
108
- length: index + 1,
109
- incomplete: false
110
- };
111
- index += 1;
112
- }
113
- return {
114
- length: 0,
115
- incomplete: true
116
- };
117
- };
118
- const parseKeys = (chunk) => {
119
- const keys = [];
120
- let cursor = 0;
121
- while (cursor < chunk.length) {
122
- const remaining = chunk.slice(cursor);
123
- if (remaining.startsWith(ESC_BACKSPACE)) {
124
- keys.push({ name: "ctrl_backspace" });
125
- cursor += 2;
126
- continue;
127
- }
128
- const knownSequence = KNOWN_SEQUENCES.find((entry) => remaining.startsWith(entry.sequence));
129
- if (knownSequence) {
130
- keys.push(knownSequence.key);
131
- cursor += knownSequence.sequence.length;
132
- continue;
133
- }
134
- const csiLength = readCsiLength(remaining);
135
- if (csiLength) {
136
- if (csiLength.incomplete) return {
137
- keys,
138
- remaining: chunk.slice(cursor)
139
- };
140
- cursor += csiLength.length;
141
- continue;
142
- }
143
- const char = chunk[cursor] ?? "";
144
- switch (char) {
145
- case ESC:
146
- if (cursor === chunk.length - 1) keys.push({ name: "escape" });
147
- break;
148
- default: {
149
- const key = CHAR_KEY_MAP.get(char);
150
- if (key) keys.push(key);
151
- else if (!isControlChar(char)) keys.push({
152
- name: "character",
153
- value: char
154
- });
155
- }
156
- }
157
- cursor += 1;
158
- }
159
- return {
160
- keys,
161
- remaining: ""
162
- };
163
- };
164
- //#endregion
165
- exports.parseKeys = parseKeys;
@@ -1,167 +0,0 @@
1
- //#region src/lib/prompts/core/keys.ts
2
- const ESC = "\x1B";
3
- const CSI = "\x1B[";
4
- const ESC_BACKSPACE = `${ESC}\u007F`;
5
- const CHAR_KEY_MAP = new Map(Object.values({
6
- enterCr: {
7
- value: "\r",
8
- name: "enter"
9
- },
10
- enterLf: {
11
- value: "\n",
12
- name: "enter"
13
- },
14
- ctrlA: {
15
- value: "",
16
- name: "ctrl_a"
17
- },
18
- ctrlC: {
19
- value: "",
20
- name: "ctrl_c"
21
- },
22
- ctrlBackspace: {
23
- value: "",
24
- name: "ctrl_backspace"
25
- },
26
- backspace: {
27
- value: "",
28
- name: "backspace"
29
- },
30
- tab: {
31
- value: " ",
32
- name: "tab"
33
- },
34
- space: {
35
- value: " ",
36
- name: "space"
37
- }
38
- }).map((entry) => [entry.value, { name: entry.name }]));
39
- const KNOWN_SEQUENCES = [
40
- {
41
- sequence: "\x1B[1;2D",
42
- key: { name: "shift_left" }
43
- },
44
- {
45
- sequence: "\x1B[1;2C",
46
- key: { name: "shift_right" }
47
- },
48
- {
49
- sequence: "\x1B[1;5D",
50
- key: { name: "ctrl_left" }
51
- },
52
- {
53
- sequence: "\x1B[1;5C",
54
- key: { name: "ctrl_right" }
55
- },
56
- {
57
- sequence: "\x1B[1;6D",
58
- key: { name: "shift_ctrl_left" }
59
- },
60
- {
61
- sequence: "\x1B[1;6C",
62
- key: { name: "shift_ctrl_right" }
63
- },
64
- {
65
- sequence: "\x1B[3~",
66
- key: { name: "delete" }
67
- },
68
- {
69
- sequence: "\x1B[H",
70
- key: { name: "home" }
71
- },
72
- {
73
- sequence: "\x1B[F",
74
- key: { name: "end" }
75
- },
76
- {
77
- sequence: "\x1B[A",
78
- key: { name: "up" }
79
- },
80
- {
81
- sequence: "\x1B[B",
82
- key: { name: "down" }
83
- },
84
- {
85
- sequence: "\x1B[C",
86
- key: { name: "right" }
87
- },
88
- {
89
- sequence: "\x1B[D",
90
- key: { name: "left" }
91
- }
92
- ];
93
- const isControlChar = (char) => {
94
- return char <= "" || char === "";
95
- };
96
- const isCsiFinalByte = (char) => {
97
- if (!char) return false;
98
- if (char >= "A" && char <= "Z") return true;
99
- if (char >= "a" && char <= "z") return true;
100
- if (char === "~") return true;
101
- return false;
102
- };
103
- const readCsiLength = (remaining) => {
104
- if (!remaining.startsWith(CSI)) return null;
105
- let index = 2;
106
- while (index < remaining.length) {
107
- if (isCsiFinalByte(remaining[index] ?? "")) return {
108
- length: index + 1,
109
- incomplete: false
110
- };
111
- index += 1;
112
- }
113
- return {
114
- length: 0,
115
- incomplete: true
116
- };
117
- };
118
- const parseKeys = (chunk) => {
119
- const keys = [];
120
- let cursor = 0;
121
- while (cursor < chunk.length) {
122
- const remaining = chunk.slice(cursor);
123
- if (remaining.startsWith(ESC_BACKSPACE)) {
124
- keys.push({ name: "ctrl_backspace" });
125
- cursor += 2;
126
- continue;
127
- }
128
- const knownSequence = KNOWN_SEQUENCES.find((entry) => remaining.startsWith(entry.sequence));
129
- if (knownSequence) {
130
- keys.push(knownSequence.key);
131
- cursor += knownSequence.sequence.length;
132
- continue;
133
- }
134
- const csiLength = readCsiLength(remaining);
135
- if (csiLength) {
136
- if (csiLength.incomplete) return {
137
- keys,
138
- remaining: chunk.slice(cursor)
139
- };
140
- cursor += csiLength.length;
141
- continue;
142
- }
143
- const char = chunk[cursor] ?? "";
144
- switch (char) {
145
- case ESC:
146
- if (cursor === chunk.length - 1) keys.push({ name: "escape" });
147
- break;
148
- default: {
149
- const key = CHAR_KEY_MAP.get(char);
150
- if (key) keys.push(key);
151
- else if (!isControlChar(char)) keys.push({
152
- name: "character",
153
- value: char
154
- });
155
- }
156
- }
157
- cursor += 1;
158
- }
159
- return {
160
- keys,
161
- remaining: ""
162
- };
163
- };
164
- //#endregion
165
- export { parseKeys };
166
-
167
- //# sourceMappingURL=keys.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys.mjs","names":[],"sources":["../../../src/lib/prompts/core/keys.ts"],"sourcesContent":["import type { Key, KeyName } from \"./types.js\";\n\nconst ESC = \"\\u001B\";\nconst CSI = \"\\u001B[\";\nconst ESC_BACKSPACE = `${ESC}\\u007F`;\n\nconst CHAR_KEYS = {\n enterCr: { value: \"\\r\", name: \"enter\" },\n enterLf: { value: \"\\n\", name: \"enter\" },\n ctrlA: { value: \"\\u0001\", name: \"ctrl_a\" },\n ctrlC: { value: \"\\u0003\", name: \"ctrl_c\" },\n ctrlBackspace: { value: \"\\u0017\", name: \"ctrl_backspace\" },\n backspace: { value: \"\\u007F\", name: \"backspace\" },\n tab: { value: \"\\t\", name: \"tab\" },\n space: { value: \" \", name: \"space\" },\n} satisfies Record<string, { value: string; name: KeyName }>;\n\nconst CHAR_KEY_MAP = new Map<string, Key>(\n Object.values(CHAR_KEYS).map((entry) => [entry.value, { name: entry.name }]),\n);\n\nconst KNOWN_SEQUENCES = [\n { sequence: \"\\u001B[1;2D\", key: { name: \"shift_left\" } },\n { sequence: \"\\u001B[1;2C\", key: { name: \"shift_right\" } },\n { sequence: \"\\u001B[1;5D\", key: { name: \"ctrl_left\" } },\n { sequence: \"\\u001B[1;5C\", key: { name: \"ctrl_right\" } },\n { sequence: \"\\u001B[1;6D\", key: { name: \"shift_ctrl_left\" } },\n { sequence: \"\\u001B[1;6C\", key: { name: \"shift_ctrl_right\" } },\n { sequence: \"\\u001B[3~\", key: { name: \"delete\" } },\n { sequence: \"\\u001B[H\", key: { name: \"home\" } },\n { sequence: \"\\u001B[F\", key: { name: \"end\" } },\n { sequence: \"\\u001B[A\", key: { name: \"up\" } },\n { sequence: \"\\u001B[B\", key: { name: \"down\" } },\n { sequence: \"\\u001B[C\", key: { name: \"right\" } },\n { sequence: \"\\u001B[D\", key: { name: \"left\" } },\n] as const;\n\nconst isControlChar = (char: string) => {\n return char <= \"\\u001F\" || char === \"\\u007F\";\n};\n\nconst isCsiFinalByte = (char: string) => {\n if (!char) {\n return false;\n }\n\n if (char >= \"A\" && char <= \"Z\") {\n return true;\n }\n\n if (char >= \"a\" && char <= \"z\") {\n return true;\n }\n\n if (char === \"~\") {\n return true;\n }\n\n return false;\n};\n\nconst readCsiLength = (remaining: string) => {\n if (!remaining.startsWith(CSI)) {\n return null;\n }\n\n let index = CSI.length;\n\n while (index < remaining.length) {\n const char = remaining[index] ?? \"\";\n\n if (isCsiFinalByte(char)) {\n return { length: index + 1, incomplete: false };\n }\n\n index += 1;\n }\n\n return { length: 0, incomplete: true };\n};\n\nexport const parseKeys = (chunk: string) => {\n const keys: Key[] = [];\n\n let cursor = 0;\n\n while (cursor < chunk.length) {\n const remaining = chunk.slice(cursor);\n\n if (remaining.startsWith(ESC_BACKSPACE)) {\n keys.push({ name: \"ctrl_backspace\" });\n cursor += 2;\n continue;\n }\n\n const knownSequence = KNOWN_SEQUENCES.find((entry) =>\n remaining.startsWith(entry.sequence),\n );\n\n if (knownSequence) {\n keys.push(knownSequence.key);\n cursor += knownSequence.sequence.length;\n continue;\n }\n\n const csiLength = readCsiLength(remaining);\n\n if (csiLength) {\n if (csiLength.incomplete) {\n return { keys, remaining: chunk.slice(cursor) };\n }\n\n cursor += csiLength.length;\n continue;\n }\n\n const char = chunk[cursor] ?? \"\";\n\n switch (char) {\n case ESC: {\n if (cursor === chunk.length - 1) {\n keys.push({ name: \"escape\" });\n }\n break;\n }\n default: {\n const key = CHAR_KEY_MAP.get(char);\n\n if (key) {\n keys.push(key);\n } else if (!isControlChar(char)) {\n keys.push({ name: \"character\", value: char });\n }\n }\n }\n\n cursor += 1;\n }\n\n return { keys, remaining: \"\" };\n};\n"],"mappings":"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"}
@@ -1,104 +0,0 @@
1
- const require_lib_errors_index = require("../../lib/errors/index.cjs");
2
- const require_keys = require("./keys.cjs");
3
- //#region src/lib/prompts/core/runtime.ts
4
- const HIDE_CURSOR = "\x1B[?25l";
5
- const SHOW_CURSOR = "\x1B[?25h";
6
- const countLines = (text) => {
7
- let count = 1;
8
- for (let i = 0; i < text.length; i++) if (text[i] === "\n") count += 1;
9
- return count;
10
- };
11
- var NodePromptRuntime = class {
12
- stdin;
13
- stdout;
14
- queue = [];
15
- waiters = [];
16
- initialized = false;
17
- previousLines = 0;
18
- buffer = "";
19
- constructor(stdin = process.stdin, stdout = process.stdout) {
20
- this.stdin = stdin;
21
- this.stdout = stdout;
22
- }
23
- isInteractive() {
24
- return Boolean(this.stdin.isTTY && this.stdout.isTTY && typeof this.stdin.setRawMode === "function");
25
- }
26
- init() {
27
- if (!this.isInteractive()) return require_lib_errors_index.err("PromptEnvironmentError", "Interactive prompts require a TTY with raw mode support");
28
- if (this.initialized) return require_lib_errors_index.ok(void 0);
29
- const [initError] = require_lib_errors_index.mightThrowSync(() => {
30
- this.stdin.setRawMode(true);
31
- this.stdin.setEncoding("utf8");
32
- this.stdin.resume();
33
- this.stdin.on("data", this.onData);
34
- this.stdout.write(HIDE_CURSOR);
35
- });
36
- if (initError) return require_lib_errors_index.err("PromptIOError", "Unable to initialize prompt runtime");
37
- this.initialized = true;
38
- return require_lib_errors_index.ok(void 0);
39
- }
40
- readKey() {
41
- const queued = this.queue.shift();
42
- if (queued) return Promise.resolve(require_lib_errors_index.ok(queued));
43
- return new Promise((resolve) => {
44
- this.waiters.push(resolve);
45
- });
46
- }
47
- render(frame) {
48
- const [renderError] = require_lib_errors_index.mightThrowSync(() => {
49
- if (this.previousLines > 1) this.stdout.write(`\u001B[${this.previousLines - 1}A`);
50
- this.stdout.write("\r\x1B[J");
51
- this.stdout.write(frame);
52
- this.previousLines = countLines(frame);
53
- });
54
- if (renderError) return require_lib_errors_index.err("PromptIOError", "Unable to render prompt frame");
55
- return require_lib_errors_index.ok(void 0);
56
- }
57
- done(frame) {
58
- const [doneError] = require_lib_errors_index.mightThrowSync(() => {
59
- if (this.previousLines > 1) this.stdout.write(`\u001B[${this.previousLines - 1}A`);
60
- this.stdout.write("\r\x1B[J");
61
- this.stdout.write(`${frame}\n`);
62
- this.previousLines = 0;
63
- });
64
- if (doneError) return require_lib_errors_index.err("PromptIOError", "Unable to finalize prompt frame");
65
- return require_lib_errors_index.ok(void 0);
66
- }
67
- close() {
68
- if (!this.initialized) return require_lib_errors_index.ok(void 0);
69
- this.initialized = false;
70
- const [closeError] = require_lib_errors_index.mightThrowSync(() => {
71
- this.stdin.off("data", this.onData);
72
- this.stdin.setRawMode(false);
73
- this.stdin.pause?.();
74
- this.stdout.write(SHOW_CURSOR);
75
- });
76
- if (closeError) return require_lib_errors_index.err("PromptIOError", "Unable to close prompt runtime");
77
- return require_lib_errors_index.ok(void 0);
78
- }
79
- interrupt() {
80
- this.close();
81
- process.exit(0);
82
- }
83
- onData = (chunk) => {
84
- const value = typeof chunk === "string" ? chunk : chunk.toString("utf8");
85
- const combined = `${this.buffer}${value}`;
86
- this.buffer = "";
87
- const [parseError, result] = require_lib_errors_index.mightThrowSync(() => require_keys.parseKeys(combined));
88
- if (parseError || !result) {
89
- for (const waiter of this.waiters.splice(0)) waiter(require_lib_errors_index.err("PromptIOError", "Failed to parse input"));
90
- return;
91
- }
92
- this.buffer = result.remaining;
93
- for (const key of result.keys) {
94
- const waiter = this.waiters.shift();
95
- if (waiter) waiter(require_lib_errors_index.ok(key));
96
- else this.queue.push(key);
97
- }
98
- };
99
- };
100
- const createNodePromptRuntime = () => {
101
- return new NodePromptRuntime();
102
- };
103
- //#endregion
104
- exports.createNodePromptRuntime = createNodePromptRuntime;
@@ -1,106 +0,0 @@
1
- import { err, mightThrowSync, ok } from "../../lib/errors/index.mjs";
2
- import { parseKeys } from "./keys.mjs";
3
- //#region src/lib/prompts/core/runtime.ts
4
- const HIDE_CURSOR = "\x1B[?25l";
5
- const SHOW_CURSOR = "\x1B[?25h";
6
- const countLines = (text) => {
7
- let count = 1;
8
- for (let i = 0; i < text.length; i++) if (text[i] === "\n") count += 1;
9
- return count;
10
- };
11
- var NodePromptRuntime = class {
12
- stdin;
13
- stdout;
14
- queue = [];
15
- waiters = [];
16
- initialized = false;
17
- previousLines = 0;
18
- buffer = "";
19
- constructor(stdin = process.stdin, stdout = process.stdout) {
20
- this.stdin = stdin;
21
- this.stdout = stdout;
22
- }
23
- isInteractive() {
24
- return Boolean(this.stdin.isTTY && this.stdout.isTTY && typeof this.stdin.setRawMode === "function");
25
- }
26
- init() {
27
- if (!this.isInteractive()) return err("PromptEnvironmentError", "Interactive prompts require a TTY with raw mode support");
28
- if (this.initialized) return ok(void 0);
29
- const [initError] = mightThrowSync(() => {
30
- this.stdin.setRawMode(true);
31
- this.stdin.setEncoding("utf8");
32
- this.stdin.resume();
33
- this.stdin.on("data", this.onData);
34
- this.stdout.write(HIDE_CURSOR);
35
- });
36
- if (initError) return err("PromptIOError", "Unable to initialize prompt runtime");
37
- this.initialized = true;
38
- return ok(void 0);
39
- }
40
- readKey() {
41
- const queued = this.queue.shift();
42
- if (queued) return Promise.resolve(ok(queued));
43
- return new Promise((resolve) => {
44
- this.waiters.push(resolve);
45
- });
46
- }
47
- render(frame) {
48
- const [renderError] = mightThrowSync(() => {
49
- if (this.previousLines > 1) this.stdout.write(`\u001B[${this.previousLines - 1}A`);
50
- this.stdout.write("\r\x1B[J");
51
- this.stdout.write(frame);
52
- this.previousLines = countLines(frame);
53
- });
54
- if (renderError) return err("PromptIOError", "Unable to render prompt frame");
55
- return ok(void 0);
56
- }
57
- done(frame) {
58
- const [doneError] = mightThrowSync(() => {
59
- if (this.previousLines > 1) this.stdout.write(`\u001B[${this.previousLines - 1}A`);
60
- this.stdout.write("\r\x1B[J");
61
- this.stdout.write(`${frame}\n`);
62
- this.previousLines = 0;
63
- });
64
- if (doneError) return err("PromptIOError", "Unable to finalize prompt frame");
65
- return ok(void 0);
66
- }
67
- close() {
68
- if (!this.initialized) return ok(void 0);
69
- this.initialized = false;
70
- const [closeError] = mightThrowSync(() => {
71
- this.stdin.off("data", this.onData);
72
- this.stdin.setRawMode(false);
73
- this.stdin.pause?.();
74
- this.stdout.write(SHOW_CURSOR);
75
- });
76
- if (closeError) return err("PromptIOError", "Unable to close prompt runtime");
77
- return ok(void 0);
78
- }
79
- interrupt() {
80
- this.close();
81
- process.exit(0);
82
- }
83
- onData = (chunk) => {
84
- const value = typeof chunk === "string" ? chunk : chunk.toString("utf8");
85
- const combined = `${this.buffer}${value}`;
86
- this.buffer = "";
87
- const [parseError, result] = mightThrowSync(() => parseKeys(combined));
88
- if (parseError || !result) {
89
- for (const waiter of this.waiters.splice(0)) waiter(err("PromptIOError", "Failed to parse input"));
90
- return;
91
- }
92
- this.buffer = result.remaining;
93
- for (const key of result.keys) {
94
- const waiter = this.waiters.shift();
95
- if (waiter) waiter(ok(key));
96
- else this.queue.push(key);
97
- }
98
- };
99
- };
100
- const createNodePromptRuntime = () => {
101
- return new NodePromptRuntime();
102
- };
103
- //#endregion
104
- export { createNodePromptRuntime };
105
-
106
- //# sourceMappingURL=runtime.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.mjs","names":[],"sources":["../../../src/lib/prompts/core/runtime.ts"],"sourcesContent":["import { err, mightThrowSync, ok } from \"../../errors/index.js\";\nimport { parseKeys } from \"./keys.js\";\nimport type { Key, PromptResultLike, PromptRuntime } from \"./types.js\";\n\nconst HIDE_CURSOR = \"\\u001B[?25l\";\nconst SHOW_CURSOR = \"\\u001B[?25h\";\n\nconst countLines = (text: string) => {\n let count = 1;\n\n for (let i = 0; i < text.length; i++) {\n if (text[i] === \"\\n\") {\n count += 1;\n }\n }\n\n return count;\n};\n\ntype StdinLike = {\n isTTY?: boolean;\n setRawMode: (mode: boolean) => void;\n setEncoding: (encoding: BufferEncoding) => void;\n resume: () => void;\n pause?: () => void;\n on: (event: string, listener: (chunk: Buffer | string) => void) => unknown;\n off: (event: string, listener: (chunk: Buffer | string) => void) => unknown;\n};\n\ntype StdoutLike = {\n isTTY?: boolean;\n write: (chunk: string) => boolean;\n};\n\nexport class NodePromptRuntime implements PromptRuntime {\n private readonly stdin: StdinLike;\n private readonly stdout: StdoutLike;\n private readonly queue: Key[] = [];\n private readonly waiters: Array<(result: PromptResultLike<Key>) => void> = [];\n private initialized = false;\n private previousLines = 0;\n private buffer = \"\";\n\n public constructor(\n stdin: StdinLike = process.stdin,\n stdout: StdoutLike = process.stdout,\n ) {\n this.stdin = stdin;\n this.stdout = stdout;\n }\n\n public isInteractive() {\n return Boolean(\n this.stdin.isTTY &&\n this.stdout.isTTY &&\n typeof this.stdin.setRawMode === \"function\",\n );\n }\n\n public init() {\n if (!this.isInteractive()) {\n return err(\n \"PromptEnvironmentError\",\n \"Interactive prompts require a TTY with raw mode support\",\n );\n }\n\n if (this.initialized) {\n return ok(undefined);\n }\n\n const [initError] = mightThrowSync(() => {\n this.stdin.setRawMode(true);\n this.stdin.setEncoding(\"utf8\");\n this.stdin.resume();\n this.stdin.on(\"data\", this.onData);\n this.stdout.write(HIDE_CURSOR);\n });\n\n if (initError) {\n return err(\"PromptIOError\", \"Unable to initialize prompt runtime\");\n }\n\n this.initialized = true;\n return ok(undefined);\n }\n\n public readKey(): Promise<PromptResultLike<Key>> {\n const queued = this.queue.shift();\n\n if (queued) {\n return Promise.resolve(ok(queued));\n }\n\n return new Promise<PromptResultLike<Key>>((resolve) => {\n this.waiters.push(resolve);\n });\n }\n\n public render(frame: string) {\n const [renderError] = mightThrowSync(() => {\n if (this.previousLines > 1) {\n this.stdout.write(`\\u001B[${this.previousLines - 1}A`);\n }\n\n this.stdout.write(\"\\r\\u001B[J\");\n this.stdout.write(frame);\n\n this.previousLines = countLines(frame);\n });\n\n if (renderError) {\n return err(\"PromptIOError\", \"Unable to render prompt frame\");\n }\n\n return ok(undefined);\n }\n\n public done(frame: string) {\n const [doneError] = mightThrowSync(() => {\n if (this.previousLines > 1) {\n this.stdout.write(`\\u001B[${this.previousLines - 1}A`);\n }\n\n this.stdout.write(\"\\r\\u001B[J\");\n this.stdout.write(`${frame}\\n`);\n this.previousLines = 0;\n });\n\n if (doneError) {\n return err(\"PromptIOError\", \"Unable to finalize prompt frame\");\n }\n\n return ok(undefined);\n }\n\n public close() {\n if (!this.initialized) {\n return ok(undefined);\n }\n\n this.initialized = false;\n\n const [closeError] = mightThrowSync(() => {\n this.stdin.off(\"data\", this.onData);\n this.stdin.setRawMode(false);\n this.stdin.pause?.();\n this.stdout.write(SHOW_CURSOR);\n });\n\n if (closeError) {\n return err(\"PromptIOError\", \"Unable to close prompt runtime\");\n }\n\n return ok(undefined);\n }\n\n public interrupt(): never {\n this.close();\n process.exit(0);\n }\n\n private onData = (chunk: Buffer | string) => {\n const value = typeof chunk === \"string\" ? chunk : chunk.toString(\"utf8\");\n const combined = `${this.buffer}${value}`;\n this.buffer = \"\";\n\n const [parseError, result] = mightThrowSync(() => parseKeys(combined));\n\n if (parseError || !result) {\n for (const waiter of this.waiters.splice(0)) {\n waiter(err(\"PromptIOError\", \"Failed to parse input\"));\n }\n\n return;\n }\n\n this.buffer = result.remaining;\n\n for (const key of result.keys) {\n const waiter = this.waiters.shift();\n\n if (waiter) {\n waiter(ok(key));\n } else {\n this.queue.push(key);\n }\n }\n };\n}\n\nexport const createNodePromptRuntime = () => {\n return new NodePromptRuntime();\n};\n"],"mappings":"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"}