@warlock.js/notifications 4.16.0 → 5.0.0

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 (337) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/cjs/channel_api-CH3DxhRU.cjs +7463 -0
  3. package/cjs/channel_api-CH3DxhRU.cjs.map +1 -0
  4. package/cjs/chunk-fl3r8ClO.cjs +41 -0
  5. package/cjs/index.cjs +1 -1
  6. package/cjs/index.cjs.map +1 -1
  7. package/cjs/rabbitmq-driver-CJtyxjUQ.cjs +3 -0
  8. package/cjs/src-Cus6pYPC.cjs +10981 -0
  9. package/cjs/src-Cus6pYPC.cjs.map +1 -0
  10. package/esm/_virtual/_rolldown/runtime.mjs +32 -0
  11. package/esm/herald/src/communicators/broker-registry.mjs +204 -0
  12. package/esm/herald/src/communicators/broker-registry.mjs.map +1 -0
  13. package/esm/herald/src/communicators/broker.mjs +110 -0
  14. package/esm/herald/src/communicators/broker.mjs.map +1 -0
  15. package/esm/herald/src/communicators/index.mjs +4 -0
  16. package/esm/herald/src/decorators/consumable.mjs +36 -0
  17. package/esm/herald/src/decorators/consumable.mjs.map +1 -0
  18. package/esm/herald/src/decorators/index.mjs +3 -0
  19. package/esm/herald/src/drivers/index.mjs +5 -0
  20. package/esm/herald/src/drivers/rabbitmq/index.mjs +4 -0
  21. package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs +403 -0
  22. package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs.map +1 -0
  23. package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs +303 -0
  24. package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs.map +1 -0
  25. package/esm/herald/src/index.mjs +16 -0
  26. package/esm/herald/src/message-managers/event-consumer.mjs +76 -0
  27. package/esm/herald/src/message-managers/event-consumer.mjs.map +1 -0
  28. package/esm/herald/src/message-managers/event-message.mjs +85 -0
  29. package/esm/herald/src/message-managers/event-message.mjs.map +1 -0
  30. package/esm/herald/src/message-managers/index.mjs +4 -0
  31. package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs +42 -0
  32. package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs.map +1 -0
  33. package/esm/herald/src/use-case-broadcast.mjs +30 -0
  34. package/esm/herald/src/use-case-broadcast.mjs.map +1 -0
  35. package/esm/herald/src/utils/connect-to-broker.mjs +168 -0
  36. package/esm/herald/src/utils/connect-to-broker.mjs.map +1 -0
  37. package/esm/herald/src/utils/index.mjs +3 -0
  38. package/esm/in-app/in-app.d.mts +3 -3
  39. package/esm/in-app/in-app.d.mts.map +1 -1
  40. package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs +6 -0
  41. package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs.map +1 -0
  42. package/esm/node_modules/@mongez/reinforcements/esm/Random/bool.mjs +3 -0
  43. package/esm/node_modules/@mongez/reinforcements/esm/Random/color.mjs +3 -0
  44. package/esm/node_modules/@mongez/reinforcements/esm/Random/date.mjs +3 -0
  45. package/esm/node_modules/@mongez/reinforcements/esm/Random/float.mjs +3 -0
  46. package/esm/node_modules/@mongez/reinforcements/esm/Random/id.mjs +3 -0
  47. package/esm/node_modules/@mongez/reinforcements/esm/Random/int.mjs +3 -0
  48. package/esm/node_modules/@mongez/reinforcements/esm/Random/nanoid.mjs +3 -0
  49. package/esm/node_modules/@mongez/reinforcements/esm/Random/pick.mjs +3 -0
  50. package/esm/node_modules/@mongez/reinforcements/esm/Random/random.mjs +16 -0
  51. package/esm/node_modules/@mongez/reinforcements/esm/Random/sample.mjs +3 -0
  52. package/esm/node_modules/@mongez/reinforcements/esm/Random/string.mjs +3 -0
  53. package/esm/node_modules/@mongez/reinforcements/esm/Random/token.mjs +3 -0
  54. package/esm/node_modules/@mongez/reinforcements/esm/Random/uuid.mjs +3 -0
  55. package/esm/node_modules/@mongez/reinforcements/esm/Random/weighted.mjs +3 -0
  56. package/esm/node_modules/@mongez/reinforcements/esm/async/retry.mjs +3 -0
  57. package/esm/node_modules/@mongez/reinforcements/esm/index.mjs +24 -0
  58. package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs +82 -0
  59. package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs.map +1 -0
  60. package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs +17 -0
  61. package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs.map +1 -0
  62. package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs +13 -0
  63. package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs.map +1 -0
  64. package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs +18 -0
  65. package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs.map +1 -0
  66. package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs +17 -0
  67. package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs.map +1 -0
  68. package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs +30 -0
  69. package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs.map +1 -0
  70. package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs +19 -0
  71. package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs.map +1 -0
  72. package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs +18 -0
  73. package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs.map +1 -0
  74. package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs +14 -0
  75. package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs.map +1 -0
  76. package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs +18 -0
  77. package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs.map +1 -0
  78. package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs +22 -0
  79. package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs.map +1 -0
  80. package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs +17 -0
  81. package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs.map +1 -0
  82. package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs +21 -0
  83. package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs.map +1 -0
  84. package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs +21 -0
  85. package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs.map +1 -0
  86. package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs +20 -0
  87. package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs.map +1 -0
  88. package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs +15 -0
  89. package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs.map +1 -0
  90. package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs +25 -0
  91. package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs.map +1 -0
  92. package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs +11 -0
  93. package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs.map +1 -0
  94. package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs +100 -0
  95. package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs.map +1 -0
  96. package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs +27 -0
  97. package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs.map +1 -0
  98. package/esm/node_modules/@mongez/supportive-is/esm/index.mjs +353 -0
  99. package/esm/node_modules/@mongez/supportive-is/esm/index.mjs.map +1 -0
  100. package/esm/node_modules/amqplib/channel_api.mjs +28 -0
  101. package/esm/node_modules/amqplib/channel_api.mjs.map +1 -0
  102. package/esm/node_modules/amqplib/lib/api_args.mjs +241 -0
  103. package/esm/node_modules/amqplib/lib/api_args.mjs.map +1 -0
  104. package/esm/node_modules/amqplib/lib/bitset.mjs +130 -0
  105. package/esm/node_modules/amqplib/lib/bitset.mjs.map +1 -0
  106. package/esm/node_modules/amqplib/lib/channel.mjs +302 -0
  107. package/esm/node_modules/amqplib/lib/channel.mjs.map +1 -0
  108. package/esm/node_modules/amqplib/lib/channel_model.mjs +206 -0
  109. package/esm/node_modules/amqplib/lib/channel_model.mjs.map +1 -0
  110. package/esm/node_modules/amqplib/lib/codec.mjs +273 -0
  111. package/esm/node_modules/amqplib/lib/codec.mjs.map +1 -0
  112. package/esm/node_modules/amqplib/lib/connect.mjs +143 -0
  113. package/esm/node_modules/amqplib/lib/connect.mjs.map +1 -0
  114. package/esm/node_modules/amqplib/lib/connection.mjs +416 -0
  115. package/esm/node_modules/amqplib/lib/connection.mjs.map +1 -0
  116. package/esm/node_modules/amqplib/lib/credentials.mjs +50 -0
  117. package/esm/node_modules/amqplib/lib/credentials.mjs.map +1 -0
  118. package/esm/node_modules/amqplib/lib/defs.mjs +4600 -0
  119. package/esm/node_modules/amqplib/lib/defs.mjs.map +1 -0
  120. package/esm/node_modules/amqplib/lib/error.mjs +29 -0
  121. package/esm/node_modules/amqplib/lib/error.mjs.map +1 -0
  122. package/esm/node_modules/amqplib/lib/format.mjs +28 -0
  123. package/esm/node_modules/amqplib/lib/format.mjs.map +1 -0
  124. package/esm/node_modules/amqplib/lib/frame.mjs +130 -0
  125. package/esm/node_modules/amqplib/lib/frame.mjs.map +1 -0
  126. package/esm/node_modules/amqplib/lib/heartbeat.mjs +40 -0
  127. package/esm/node_modules/amqplib/lib/heartbeat.mjs.map +1 -0
  128. package/esm/node_modules/amqplib/lib/mux.mjs +86 -0
  129. package/esm/node_modules/amqplib/lib/mux.mjs.map +1 -0
  130. package/esm/node_modules/amqplib/package.mjs +41 -0
  131. package/esm/node_modules/amqplib/package.mjs.map +1 -0
  132. package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs +360 -0
  133. package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs.map +1 -0
  134. package/esm/node_modules/dayjs/dayjs.min.mjs +305 -0
  135. package/esm/node_modules/dayjs/dayjs.min.mjs.map +1 -0
  136. package/esm/node_modules/querystringify/index.mjs +80 -0
  137. package/esm/node_modules/querystringify/index.mjs.map +1 -0
  138. package/esm/node_modules/requires-port/index.mjs +35 -0
  139. package/esm/node_modules/requires-port/index.mjs.map +1 -0
  140. package/esm/node_modules/url-parse/index.mjs +388 -0
  141. package/esm/node_modules/url-parse/index.mjs.map +1 -0
  142. package/esm/queue/load-herald.mjs +1 -1
  143. package/esm/seal/src/config.mjs +15 -0
  144. package/esm/seal/src/config.mjs.map +1 -0
  145. package/esm/seal/src/factory/index.mjs +4 -0
  146. package/esm/seal/src/factory/validate.mjs +34 -0
  147. package/esm/seal/src/factory/validate.mjs.map +1 -0
  148. package/esm/seal/src/factory/validators.mjs +132 -0
  149. package/esm/seal/src/factory/validators.mjs.map +1 -0
  150. package/esm/seal/src/helpers/date-helpers.mjs +24 -0
  151. package/esm/seal/src/helpers/date-helpers.mjs.map +1 -0
  152. package/esm/seal/src/helpers/get-field-value.mjs +46 -0
  153. package/esm/seal/src/helpers/get-field-value.mjs.map +1 -0
  154. package/esm/seal/src/helpers/index.mjs +6 -0
  155. package/esm/seal/src/helpers/is-empty-value.mjs +10 -0
  156. package/esm/seal/src/helpers/is-empty-value.mjs.map +1 -0
  157. package/esm/seal/src/helpers/path-helpers.mjs +12 -0
  158. package/esm/seal/src/helpers/path-helpers.mjs.map +1 -0
  159. package/esm/seal/src/helpers/validation-helpers.mjs +72 -0
  160. package/esm/seal/src/helpers/validation-helpers.mjs.map +1 -0
  161. package/esm/seal/src/index.mjs +87 -0
  162. package/esm/seal/src/mutators/array-mutators.mjs +32 -0
  163. package/esm/seal/src/mutators/array-mutators.mjs.map +1 -0
  164. package/esm/seal/src/mutators/date-mutators.mjs +94 -0
  165. package/esm/seal/src/mutators/date-mutators.mjs.map +1 -0
  166. package/esm/seal/src/mutators/index.mjs +8 -0
  167. package/esm/seal/src/mutators/number-mutators.mjs +52 -0
  168. package/esm/seal/src/mutators/number-mutators.mjs.map +1 -0
  169. package/esm/seal/src/mutators/object-mutators.mjs +30 -0
  170. package/esm/seal/src/mutators/object-mutators.mjs.map +1 -0
  171. package/esm/seal/src/mutators/scalar-mutators.mjs +9 -0
  172. package/esm/seal/src/mutators/scalar-mutators.mjs.map +1 -0
  173. package/esm/seal/src/mutators/string-mutators.mjs +186 -0
  174. package/esm/seal/src/mutators/string-mutators.mjs.map +1 -0
  175. package/esm/seal/src/rules/array/array-rules.mjs +41 -0
  176. package/esm/seal/src/rules/array/array-rules.mjs.map +1 -0
  177. package/esm/seal/src/rules/array/index.mjs +3 -0
  178. package/esm/seal/src/rules/color/color-rules.mjs +104 -0
  179. package/esm/seal/src/rules/color/color-rules.mjs.map +1 -0
  180. package/esm/seal/src/rules/color/index.mjs +3 -0
  181. package/esm/seal/src/rules/common/enum.mjs +77 -0
  182. package/esm/seal/src/rules/common/enum.mjs.map +1 -0
  183. package/esm/seal/src/rules/common/equals-field-rules.mjs +42 -0
  184. package/esm/seal/src/rules/common/equals-field-rules.mjs.map +1 -0
  185. package/esm/seal/src/rules/common/index.mjs +8 -0
  186. package/esm/seal/src/rules/common/instanceof.mjs +23 -0
  187. package/esm/seal/src/rules/common/instanceof.mjs.map +1 -0
  188. package/esm/seal/src/rules/common/literal.mjs +31 -0
  189. package/esm/seal/src/rules/common/literal.mjs.map +1 -0
  190. package/esm/seal/src/rules/common/type-rules.mjs +97 -0
  191. package/esm/seal/src/rules/common/type-rules.mjs.map +1 -0
  192. package/esm/seal/src/rules/common/unknown-key.mjs +25 -0
  193. package/esm/seal/src/rules/common/unknown-key.mjs.map +1 -0
  194. package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs +116 -0
  195. package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs.map +1 -0
  196. package/esm/seal/src/rules/conditional/index.mjs +12 -0
  197. package/esm/seal/src/rules/conditional/present-if-rules.mjs +97 -0
  198. package/esm/seal/src/rules/conditional/present-if-rules.mjs.map +1 -0
  199. package/esm/seal/src/rules/conditional/present-unless-rules.mjs +30 -0
  200. package/esm/seal/src/rules/conditional/present-unless-rules.mjs.map +1 -0
  201. package/esm/seal/src/rules/conditional/present-with-rules.mjs +76 -0
  202. package/esm/seal/src/rules/conditional/present-with-rules.mjs.map +1 -0
  203. package/esm/seal/src/rules/conditional/present-without-rules.mjs +76 -0
  204. package/esm/seal/src/rules/conditional/present-without-rules.mjs.map +1 -0
  205. package/esm/seal/src/rules/conditional/required-if-rules.mjs +204 -0
  206. package/esm/seal/src/rules/conditional/required-if-rules.mjs.map +1 -0
  207. package/esm/seal/src/rules/conditional/required-unless-rules.mjs +31 -0
  208. package/esm/seal/src/rules/conditional/required-unless-rules.mjs.map +1 -0
  209. package/esm/seal/src/rules/conditional/required-when-rule.mjs +32 -0
  210. package/esm/seal/src/rules/conditional/required-when-rule.mjs.map +1 -0
  211. package/esm/seal/src/rules/conditional/required-with-rules.mjs +67 -0
  212. package/esm/seal/src/rules/conditional/required-with-rules.mjs.map +1 -0
  213. package/esm/seal/src/rules/conditional/required-without-rules.mjs +67 -0
  214. package/esm/seal/src/rules/conditional/required-without-rules.mjs.map +1 -0
  215. package/esm/seal/src/rules/core/equal.mjs +22 -0
  216. package/esm/seal/src/rules/core/equal.mjs.map +1 -0
  217. package/esm/seal/src/rules/core/forbidden.mjs +20 -0
  218. package/esm/seal/src/rules/core/forbidden.mjs.map +1 -0
  219. package/esm/seal/src/rules/core/index.mjs +7 -0
  220. package/esm/seal/src/rules/core/required.mjs +36 -0
  221. package/esm/seal/src/rules/core/required.mjs.map +1 -0
  222. package/esm/seal/src/rules/core/union.mjs +30 -0
  223. package/esm/seal/src/rules/core/union.mjs.map +1 -0
  224. package/esm/seal/src/rules/core/when.mjs +37 -0
  225. package/esm/seal/src/rules/core/when.mjs.map +1 -0
  226. package/esm/seal/src/rules/date/date-comparison-rules.mjs +78 -0
  227. package/esm/seal/src/rules/date/date-comparison-rules.mjs.map +1 -0
  228. package/esm/seal/src/rules/date/date-day-rules.mjs +49 -0
  229. package/esm/seal/src/rules/date/date-day-rules.mjs.map +1 -0
  230. package/esm/seal/src/rules/date/date-field-comparison-rules.mjs +82 -0
  231. package/esm/seal/src/rules/date/date-field-comparison-rules.mjs.map +1 -0
  232. package/esm/seal/src/rules/date/date-period-rules.mjs +399 -0
  233. package/esm/seal/src/rules/date/date-period-rules.mjs.map +1 -0
  234. package/esm/seal/src/rules/date/date-relative-rules.mjs +55 -0
  235. package/esm/seal/src/rules/date/date-relative-rules.mjs.map +1 -0
  236. package/esm/seal/src/rules/date/date-special-rules.mjs +58 -0
  237. package/esm/seal/src/rules/date/date-special-rules.mjs.map +1 -0
  238. package/esm/seal/src/rules/date/date.mjs +235 -0
  239. package/esm/seal/src/rules/date/date.mjs.map +1 -0
  240. package/esm/seal/src/rules/date/index.mjs +9 -0
  241. package/esm/seal/src/rules/file/dimensions.mjs +3 -0
  242. package/esm/seal/src/rules/file/file-size.mjs +3 -0
  243. package/esm/seal/src/rules/file/index.mjs +4 -0
  244. package/esm/seal/src/rules/index.mjs +54 -0
  245. package/esm/seal/src/rules/length/index.mjs +3 -0
  246. package/esm/seal/src/rules/length/length-rules.mjs +98 -0
  247. package/esm/seal/src/rules/length/length-rules.mjs.map +1 -0
  248. package/esm/seal/src/rules/number/index.mjs +3 -0
  249. package/esm/seal/src/rules/number/number-rules.mjs +197 -0
  250. package/esm/seal/src/rules/number/number-rules.mjs.map +1 -0
  251. package/esm/seal/src/rules/scalar/accepted-rule.mjs +116 -0
  252. package/esm/seal/src/rules/scalar/accepted-rule.mjs.map +1 -0
  253. package/esm/seal/src/rules/scalar/declined-rule.mjs +116 -0
  254. package/esm/seal/src/rules/scalar/declined-rule.mjs.map +1 -0
  255. package/esm/seal/src/rules/scalar/index.mjs +4 -0
  256. package/esm/seal/src/rules/string/alpha.mjs +41 -0
  257. package/esm/seal/src/rules/string/alpha.mjs.map +1 -0
  258. package/esm/seal/src/rules/string/credit-card.mjs +32 -0
  259. package/esm/seal/src/rules/string/credit-card.mjs.map +1 -0
  260. package/esm/seal/src/rules/string/email.mjs +20 -0
  261. package/esm/seal/src/rules/string/email.mjs.map +1 -0
  262. package/esm/seal/src/rules/string/id-formats.mjs +104 -0
  263. package/esm/seal/src/rules/string/id-formats.mjs.map +1 -0
  264. package/esm/seal/src/rules/string/index.mjs +13 -0
  265. package/esm/seal/src/rules/string/ip.mjs +66 -0
  266. package/esm/seal/src/rules/string/ip.mjs.map +1 -0
  267. package/esm/seal/src/rules/string/matches.mjs +4 -0
  268. package/esm/seal/src/rules/string/pattern.mjs +20 -0
  269. package/esm/seal/src/rules/string/pattern.mjs.map +1 -0
  270. package/esm/seal/src/rules/string/string-comparison.mjs +56 -0
  271. package/esm/seal/src/rules/string/string-comparison.mjs.map +1 -0
  272. package/esm/seal/src/rules/string/strong-password-rule.mjs +31 -0
  273. package/esm/seal/src/rules/string/strong-password-rule.mjs.map +1 -0
  274. package/esm/seal/src/rules/string/url.mjs +23 -0
  275. package/esm/seal/src/rules/string/url.mjs.map +1 -0
  276. package/esm/seal/src/rules/string/without-whitespace.mjs +19 -0
  277. package/esm/seal/src/rules/string/without-whitespace.mjs.map +1 -0
  278. package/esm/seal/src/standard-schema/json-schema.mjs +81 -0
  279. package/esm/seal/src/standard-schema/json-schema.mjs.map +1 -0
  280. package/esm/seal/src/standard-schema/map-result.mjs +26 -0
  281. package/esm/seal/src/standard-schema/map-result.mjs.map +1 -0
  282. package/esm/seal/src/types/date-types.mjs +17 -0
  283. package/esm/seal/src/types/date-types.mjs.map +1 -0
  284. package/esm/seal/src/validators/any-validator.mjs +38 -0
  285. package/esm/seal/src/validators/any-validator.mjs.map +1 -0
  286. package/esm/seal/src/validators/array-validator.mjs +177 -0
  287. package/esm/seal/src/validators/array-validator.mjs.map +1 -0
  288. package/esm/seal/src/validators/base-validator.mjs +691 -0
  289. package/esm/seal/src/validators/base-validator.mjs.map +1 -0
  290. package/esm/seal/src/validators/boolean-validator.mjs +126 -0
  291. package/esm/seal/src/validators/boolean-validator.mjs.map +1 -0
  292. package/esm/seal/src/validators/computed-validator.mjs +118 -0
  293. package/esm/seal/src/validators/computed-validator.mjs.map +1 -0
  294. package/esm/seal/src/validators/date-validator.mjs +639 -0
  295. package/esm/seal/src/validators/date-validator.mjs.map +1 -0
  296. package/esm/seal/src/validators/discriminated-union-validator.mjs +129 -0
  297. package/esm/seal/src/validators/discriminated-union-validator.mjs.map +1 -0
  298. package/esm/seal/src/validators/float-validator.mjs +18 -0
  299. package/esm/seal/src/validators/float-validator.mjs.map +1 -0
  300. package/esm/seal/src/validators/index.mjs +28 -0
  301. package/esm/seal/src/validators/instanceof-validator.mjs +64 -0
  302. package/esm/seal/src/validators/instanceof-validator.mjs.map +1 -0
  303. package/esm/seal/src/validators/int-validator.mjs +30 -0
  304. package/esm/seal/src/validators/int-validator.mjs.map +1 -0
  305. package/esm/seal/src/validators/lazy-validator.mjs +87 -0
  306. package/esm/seal/src/validators/lazy-validator.mjs.map +1 -0
  307. package/esm/seal/src/validators/literal-validator.mjs +71 -0
  308. package/esm/seal/src/validators/literal-validator.mjs.map +1 -0
  309. package/esm/seal/src/validators/managed-validator.mjs +39 -0
  310. package/esm/seal/src/validators/managed-validator.mjs.map +1 -0
  311. package/esm/seal/src/validators/methods/equality-conditional-methods.mjs +129 -0
  312. package/esm/seal/src/validators/methods/equality-conditional-methods.mjs.map +1 -0
  313. package/esm/seal/src/validators/methods/forbidden-methods.mjs +131 -0
  314. package/esm/seal/src/validators/methods/forbidden-methods.mjs.map +1 -0
  315. package/esm/seal/src/validators/methods/present-methods.mjs +235 -0
  316. package/esm/seal/src/validators/methods/present-methods.mjs.map +1 -0
  317. package/esm/seal/src/validators/methods/required-methods.mjs +347 -0
  318. package/esm/seal/src/validators/methods/required-methods.mjs.map +1 -0
  319. package/esm/seal/src/validators/number-validator.mjs +310 -0
  320. package/esm/seal/src/validators/number-validator.mjs.map +1 -0
  321. package/esm/seal/src/validators/numeric-validator.mjs +27 -0
  322. package/esm/seal/src/validators/numeric-validator.mjs.map +1 -0
  323. package/esm/seal/src/validators/object-validator.mjs +442 -0
  324. package/esm/seal/src/validators/object-validator.mjs.map +1 -0
  325. package/esm/seal/src/validators/primitive-validator.mjs +89 -0
  326. package/esm/seal/src/validators/primitive-validator.mjs.map +1 -0
  327. package/esm/seal/src/validators/record-validator.mjs +112 -0
  328. package/esm/seal/src/validators/record-validator.mjs.map +1 -0
  329. package/esm/seal/src/validators/scalar-validator.mjs +172 -0
  330. package/esm/seal/src/validators/scalar-validator.mjs.map +1 -0
  331. package/esm/seal/src/validators/string-validator.mjs +459 -0
  332. package/esm/seal/src/validators/string-validator.mjs.map +1 -0
  333. package/esm/seal/src/validators/tuple-validator.mjs +134 -0
  334. package/esm/seal/src/validators/tuple-validator.mjs.map +1 -0
  335. package/esm/seal/src/validators/union-validator.mjs +66 -0
  336. package/esm/seal/src/validators/union-validator.mjs.map +1 -0
  337. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.mjs","names":["validateFunction"],"sources":["../../../../../../../../../seal/src/factory/validators.ts"],"sourcesContent":["import { SealConfig } from \"../config\";\nimport type { StandardSchemaV1 } from \"../standard-schema/types\";\nimport type { Schema, SchemaContext, ValidationResult } from \"../types\";\nimport type { Infer } from \"../types/inference-types\";\nimport { AnyValidator } from \"../validators/any-validator\";\nimport { ArrayValidator } from \"../validators/array-validator\";\nimport type { BaseValidator } from \"../validators/base-validator\";\nimport { BooleanValidator } from \"../validators/boolean-validator\";\nimport { ComputedValidator } from \"../validators/computed-validator\";\nimport { DateValidator } from \"../validators/date-validator\";\nimport { DiscriminatedUnionValidator } from \"../validators/discriminated-union-validator\";\nimport { FloatValidator } from \"../validators/float-validator\";\nimport { InstanceOfValidator } from \"../validators/instanceof-validator\";\nimport { IntValidator } from \"../validators/int-validator\";\nimport { LazyValidator } from \"../validators/lazy-validator\";\nimport { LiteralValidator } from \"../validators/literal-validator\";\nimport { ManagedValidator } from \"../validators/managed-validator\";\nimport { NumberValidator } from \"../validators/number-validator\";\nimport { NumericValidator } from \"../validators/numeric-validator\";\nimport { ObjectValidator } from \"../validators/object-validator\";\nimport { RecordValidator } from \"../validators/record-validator\";\nimport { ScalarValidator } from \"../validators/scalar-validator\";\nimport { StringValidator } from \"../validators/string-validator\";\nimport { TupleValidator } from \"../validators/tuple-validator\";\nimport { UnionValidator } from \"../validators/union-validator\";\n// BaseValidator prototype augmentations — side-effect imports so the `v`\n// factory always exposes the chain methods (.required, .requiredIf, .sameAs,\n// .present, .forbidden, .when, …) regardless of which entry path loaded it.\n// The package barrel (src/index.ts) loads these via the validators barrel, but\n// importing the factory leaf directly would otherwise yield a half-built `v`.\nimport \"../validators/methods/equality-conditional-methods\";\nimport \"../validators/methods/forbidden-methods\";\nimport \"../validators/methods/present-methods\";\nimport \"../validators/methods/required-methods\";\nimport { validate as validateFunction } from \"./validate\";\n\n/**\n * Seal factory object - creates instances of validators\n *\n * Use 'v' to create validation schemas (seals) for your data\n */\nexport const v: ValidatorV = {\n /** Create an object validator */\n object: <T extends Schema>(schema: T, errorMessage?: string) =>\n new ObjectValidator<T>(schema, errorMessage) as ObjectValidator<T> &\n StandardSchemaV1<Infer<ObjectValidator<T>>>,\n\n /** Create an any validator */\n any: () => new AnyValidator() as AnyValidator & StandardSchemaV1<any>,\n\n /** Create an array validator */\n array: <T extends BaseValidator>(validator: T, errorMessage?: string) =>\n new ArrayValidator(validator, errorMessage) as ArrayValidator & {\n validator: T;\n } & StandardSchemaV1<Array<Infer<T>>>,\n\n /** Create a record validator - object with dynamic keys and consistent value types */\n record: <T extends BaseValidator>(validator?: T, errorMessage?: string) =>\n new RecordValidator(validator || v.any(), errorMessage) as RecordValidator & {\n valueValidator: T;\n } & StandardSchemaV1<Record<string, Infer<T>>>,\n\n /** Create a tuple validator - fixed-length array with position-specific types */\n tuple: <T extends BaseValidator[]>(validators: T, errorMessage?: string) =>\n new TupleValidator(validators, errorMessage) as TupleValidator & {\n validators: T;\n } & StandardSchemaV1<{ [K in keyof T]: Infer<T[K]> }>,\n\n /** Create a date validator */\n date: (errorMessage?: string) =>\n new DateValidator(errorMessage) as DateValidator & StandardSchemaV1<Date>,\n\n /**\n * Create a literal validator — narrows to the union of given literal values\n *\n * @example\n * v.literal(\"items\") // type: \"items\"\n * v.literal(\"draft\", \"published\") // type: \"draft\" | \"published\"\n * v.literal(1, 2, 3) // type: 1 | 2 | 3\n */\n literal: <T extends readonly [string | number | boolean, ...(string | number | boolean)[]]>(\n ...values: T\n ) =>\n new LiteralValidator<T>(values) as LiteralValidator<T> & StandardSchemaV1<T[number]>,\n\n /**\n * Create an instanceof validator — value must be `instanceof` the constructor\n *\n * @example\n * v.instanceof(File) // type: File\n * v.instanceof(Buffer) // type: Buffer\n * v.instanceof(MyClass) // type: MyClass\n */\n instanceof: <T>(ctor: new (...args: any[]) => T, errorMessage?: string) =>\n new InstanceOfValidator<T>(ctor, errorMessage) as InstanceOfValidator<T> &\n StandardSchemaV1<T>,\n\n /**\n * Create a lazy validator — defers resolution of the inner validator until\n * validate-time. Use for recursive or forward-referenced schemas.\n *\n * @example\n * type Category = { name: string; children: Category[] };\n *\n * const category: ObjectValidator<...> = v.object({\n * name: v.string(),\n * children: v.array(v.lazy(() => category)),\n * });\n */\n lazy: <T extends BaseValidator>(thunk: () => T) =>\n new LazyValidator(thunk) as LazyValidator<T> & StandardSchemaV1<Infer<T>>,\n\n /** Create a string validator */\n string: (errorMessage?: string) =>\n new StringValidator(errorMessage) as StringValidator & StandardSchemaV1<string>,\n\n /** Create an email validator */\n email: (emailErrorMessage?: string, errorMessage?: string) =>\n new StringValidator(errorMessage).email(emailErrorMessage) as StringValidator &\n StandardSchemaV1<string>,\n\n /**\n * Create an enum validator — preserves the literal union of accepted\n * values in the inferred Standard Schema output.\n *\n * Two input shapes:\n * - Tuple of literals: `v.enum([\"draft\", \"published\"])` →\n * `StandardSchemaV1<\"draft\" | \"published\">`\n * - TypeScript enum object: `v.enum(Status)` →\n * `StandardSchemaV1<Status[keyof Status]>`\n *\n * Implementation is loosely typed; the public `ValidatorV.enum`\n * surface declares the precise overloads.\n */\n enum: ((values: any, errorMessage?: string) =>\n Array.isArray(values)\n ? new StringValidator().oneOf(values, errorMessage)\n : new ScalarValidator().enum(values, errorMessage)) as ValidatorV[\"enum\"],\n\n /** Create a number validator */\n number: (errorMessage?: string) =>\n new NumberValidator(errorMessage) as NumberValidator & StandardSchemaV1<number>,\n\n /** Create a numeric validator */\n numeric: (errorMessage?: string) =>\n new NumericValidator(errorMessage) as NumericValidator & StandardSchemaV1<number>,\n\n /** Create an integer validator */\n int: (errorMessage?: string) =>\n new IntValidator(errorMessage) as IntValidator & StandardSchemaV1<number>,\n\n /** Create a float validator */\n float: (errorMessage?: string) =>\n new FloatValidator(errorMessage) as FloatValidator & StandardSchemaV1<number>,\n\n /** Create a boolean validator */\n boolean: (errorMessage?: string) =>\n new BooleanValidator(errorMessage) as BooleanValidator & StandardSchemaV1<boolean>,\n\n /** Create a scalar validator */\n scalar: (errorMessage?: string) =>\n new ScalarValidator(errorMessage) as ScalarValidator &\n StandardSchemaV1<string | number | boolean>,\n\n /** Create a union validator - validates against multiple types */\n union: <T extends BaseValidator[]>(validators: T, errorMessage?: string) =>\n new UnionValidator().union(validators, errorMessage) as UnionValidator &\n StandardSchemaV1<Infer<T[number]>>,\n\n /**\n * Create a discriminated union — routes payloads by a shared literal\n * discriminator field. Each branch must be a `v.object(...)` with the\n * discriminator typed as `v.literal(...)`.\n *\n * @example\n * const email = v.object({ type: v.literal(\"email\"), email: v.string().email() });\n * const sms = v.object({ type: v.literal(\"sms\"), phone: v.string() });\n * const notif = v.discriminatedUnion(\"type\", [email, sms]);\n * // type T = Infer<typeof notif>;\n * // → { type: \"email\", email: string } | { type: \"sms\", phone: string }\n */\n discriminatedUnion: <\n K extends string,\n Branches extends ReadonlyArray<ObjectValidator<any>>,\n >(\n discriminator: K,\n validators: Branches,\n ) =>\n new DiscriminatedUnionValidator(discriminator, validators) as DiscriminatedUnionValidator<\n K,\n Branches\n > &\n StandardSchemaV1<Infer<Branches[number]>>,\n\n /** Create a computed field validator - derives value from other validated fields */\n computed: <TResult = any>(\n callback: (data: any, context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) =>\n new ComputedValidator<TResult>(callback, resultValidator) as ComputedValidator<TResult> &\n StandardSchemaV1<TResult>,\n\n /** Create a managed field validator - framework-injected value */\n managed: <TResult = any>(\n callback: (context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) =>\n new ManagedValidator<TResult>(callback, resultValidator) as ManagedValidator<TResult> &\n StandardSchemaV1<TResult>,\n\n /** Validate data against a schema */\n validate: validateFunction,\n} as unknown as ValidatorV;\n\nexport type ValidateOptions = {\n context?: Record<string, any>;\n} & SealConfig;\n\nexport interface ValidatorV {\n object: <T extends Schema>(\n schema: T,\n errorMessage?: string,\n ) => ObjectValidator<T> & StandardSchemaV1<Infer<ObjectValidator<T>>>;\n any: () => AnyValidator & StandardSchemaV1<any>;\n array: <T extends BaseValidator>(\n validator: T,\n errorMessage?: string,\n ) => ArrayValidator & {\n validator: T;\n } & StandardSchemaV1<Array<Infer<T>>>;\n record: <T extends BaseValidator>(\n validator?: T,\n errorMessage?: string,\n ) => RecordValidator & {\n valueValidator: T;\n } & StandardSchemaV1<Record<string, Infer<T>>>;\n tuple: <T extends BaseValidator[]>(\n validators: T,\n errorMessage?: string,\n ) => TupleValidator & {\n validators: T;\n } & StandardSchemaV1<{ [K in keyof T]: Infer<T[K]> }>;\n date: (errorMessage?: string) => DateValidator & StandardSchemaV1<Date>;\n literal: <T extends readonly [string | number | boolean, ...(string | number | boolean)[]]>(\n ...values: T\n ) => LiteralValidator<T> & StandardSchemaV1<T[number]>;\n instanceof: <T>(\n ctor: new (...args: any[]) => T,\n errorMessage?: string,\n ) => InstanceOfValidator<T> & StandardSchemaV1<T>;\n lazy: <T extends BaseValidator>(\n thunk: () => T,\n ) => LazyValidator<T> & StandardSchemaV1<Infer<T>>;\n string: (errorMessage?: string) => StringValidator & StandardSchemaV1<string>;\n email: (errorMessage?: string) => StringValidator & StandardSchemaV1<string>;\n enum: {\n <const T extends readonly (string | number | boolean)[]>(\n values: T,\n errorMessage?: string,\n ): ScalarValidator & StandardSchemaV1<T[number]>;\n <const T extends Record<string, string | number>>(\n values: T,\n errorMessage?: string,\n ): ScalarValidator & StandardSchemaV1<T[keyof T]>;\n };\n number: (errorMessage?: string) => NumberValidator & StandardSchemaV1<number>;\n numeric: (errorMessage?: string) => NumericValidator & StandardSchemaV1<number>;\n int: (errorMessage?: string) => IntValidator & StandardSchemaV1<number>;\n float: (errorMessage?: string) => FloatValidator & StandardSchemaV1<number>;\n boolean: (errorMessage?: string) => BooleanValidator & StandardSchemaV1<boolean>;\n scalar: (\n errorMessage?: string,\n ) => ScalarValidator & StandardSchemaV1<string | number | boolean>;\n union: <T extends BaseValidator[]>(\n validators: T,\n errorMessage?: string,\n ) => UnionValidator & StandardSchemaV1<Infer<T[number]>>;\n discriminatedUnion: <\n K extends string,\n Branches extends ReadonlyArray<ObjectValidator<any>>,\n >(\n discriminator: K,\n validators: Branches,\n ) => DiscriminatedUnionValidator<K, Branches> & StandardSchemaV1<Infer<Branches[number]>>;\n computed: <TResult = any>(\n callback: (data: any, context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) => ComputedValidator<TResult> & StandardSchemaV1<TResult>;\n managed: <TResult = any>(\n callback?: (context: SchemaContext) => TResult | Promise<TResult>,\n resultValidator?: BaseValidator,\n ) => ManagedValidator<TResult> & StandardSchemaV1<TResult>;\n validate: <T extends BaseValidator>(\n schema: T,\n data: any,\n options?: ValidateOptions,\n ) => Promise<ValidationResult>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAa,IAAgB;;CAE3B,SAA2B,QAAW,iBACpC,IAAI,gBAAmB,QAAQ,YAAY;;CAI7C,WAAW,IAAI,aAAa;;CAG5B,QAAiC,WAAc,iBAC7C,IAAI,eAAe,WAAW,YAAY;;CAK5C,SAAkC,WAAe,iBAC/C,IAAI,gBAAgB,aAAa,EAAE,IAAI,GAAG,YAAY;;CAKxD,QAAmC,YAAe,iBAChD,IAAI,eAAe,YAAY,YAAY;;CAK7C,OAAO,iBACL,IAAI,cAAc,YAAY;;;;;;;;;CAUhC,UACE,GAAG,WAEH,IAAI,iBAAoB,MAAM;;;;;;;;;CAUhC,aAAgB,MAAiC,iBAC/C,IAAI,oBAAuB,MAAM,YAAY;;;;;;;;;;;;;CAe/C,OAAgC,UAC9B,IAAI,cAAc,KAAK;;CAGzB,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAGlC,QAAQ,mBAA4B,iBAClC,IAAI,gBAAgB,YAAY,CAAC,CAAC,MAAM,iBAAiB;;;;;;;;;;;;;;CAgB3D,QAAQ,QAAa,iBACnB,MAAM,QAAQ,MAAM,IAChB,IAAI,gBAAgB,CAAC,CAAC,MAAM,QAAQ,YAAY,IAChD,IAAI,gBAAgB,CAAC,CAAC,KAAK,QAAQ,YAAY;;CAGrD,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAGlC,UAAU,iBACR,IAAI,iBAAiB,YAAY;;CAGnC,MAAM,iBACJ,IAAI,aAAa,YAAY;;CAG/B,QAAQ,iBACN,IAAI,eAAe,YAAY;;CAGjC,UAAU,iBACR,IAAI,iBAAiB,YAAY;;CAGnC,SAAS,iBACP,IAAI,gBAAgB,YAAY;;CAIlC,QAAmC,YAAe,iBAChD,IAAI,eAAe,CAAC,CAAC,MAAM,YAAY,YAAY;;;;;;;;;;;;;CAerD,qBAIE,eACA,eAEA,IAAI,4BAA4B,eAAe,UAAU;;CAO3D,WACE,UACA,oBAEA,IAAI,kBAA2B,UAAU,eAAe;;CAI1D,UACE,UACA,oBAEA,IAAI,iBAA0B,UAAU,eAAe;;CAI/CA;AACZ"}
@@ -0,0 +1,24 @@
1
+ //#region ../seal/src/helpers/date-helpers.ts
2
+ /**
3
+ * Detect if value is a date value or field name
4
+ *
5
+ * Date values:
6
+ * - Date instance
7
+ * - Number (timestamp)
8
+ * - String with date separators (- or /)
9
+ *
10
+ * Field names:
11
+ * - Strings without - or /
12
+ *
13
+ * @param value - Value to check
14
+ * @returns true if it's a date value, false if it's a field name
15
+ */
16
+ function isDateValue(value) {
17
+ if (value instanceof Date) return true;
18
+ const date = new Date(value);
19
+ return !isNaN(date.getTime());
20
+ }
21
+
22
+ //#endregion
23
+ export { isDateValue };
24
+ //# sourceMappingURL=date-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-helpers.mjs","names":[],"sources":["../../../../../../../../../seal/src/helpers/date-helpers.ts"],"sourcesContent":["/**\r\n * Detect if value is a date value or field name\r\n *\r\n * Date values:\r\n * - Date instance\r\n * - Number (timestamp)\r\n * - String with date separators (- or /)\r\n *\r\n * Field names:\r\n * - Strings without - or /\r\n *\r\n * @param value - Value to check\r\n * @returns true if it's a date value, false if it's a field name\r\n */\r\nexport function isDateValue(value: any): boolean {\r\n if (value instanceof Date) return true;\r\n\r\n const date = new Date(value);\r\n\r\n return !isNaN(date.getTime());\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;AAcA,SAAgB,YAAY,OAAqB;CAC/C,IAAI,iBAAiB,MAAM,OAAO;CAElC,MAAM,OAAO,IAAI,KAAK,KAAK;CAE3B,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC9B"}
@@ -0,0 +1,46 @@
1
+ import { get } from "../../../node_modules/@mongez/reinforcements/esm/object/get.mjs";
2
+ import "../../../node_modules/@mongez/reinforcements/esm/index.mjs";
3
+
4
+ //#region ../seal/src/helpers/get-field-value.ts
5
+ /**
6
+ * Get field value based on scope from rule options
7
+ *
8
+ * This utility extracts a field value from either the global context or sibling context
9
+ * based on the `scope` option in the rule's context.
10
+ *
11
+ * @param rule - The contextual schema rule containing options with:
12
+ * - `field` (or custom fieldKey): The field name to extract
13
+ * - `scope` (optional): Either "global" (default) or "sibling"
14
+ * @param context - The schema validation context containing allValues and parent
15
+ * @param fieldKey - The key in rule.context.options that contains the field name (defaults to "field")
16
+ *
17
+ * @returns The value of the specified field from the appropriate source
18
+ *
19
+ * @example
20
+ * // In a validation rule with scope support:
21
+ * async validate(value: any, context) {
22
+ * const otherFieldValue = getFieldValue(this, context);
23
+ * // Extracts from context.allValues if scope is "global"
24
+ * // Extracts from context.parent if scope is "sibling"
25
+ * }
26
+ *
27
+ * @example
28
+ * // Using a custom field key:
29
+ * async validate(value: any, context) {
30
+ * const compareValue = getFieldValue(this, context, "compareField");
31
+ * // Looks for rule.context.options.compareField instead of .field
32
+ * }
33
+ *
34
+ * @remarks
35
+ * - **Global scope** (`scope: "global"`): Searches the entire input data (context.allValues)
36
+ * - **Sibling scope** (`scope: "sibling"`): Searches only within the parent object (context.parent)
37
+ * - Uses `@mongez/reinforcements.get()` to support nested paths (e.g., "user.email")
38
+ */
39
+ function getFieldValue(rule, context, fieldKey = "field") {
40
+ const field = rule.context.options[fieldKey];
41
+ return get((rule.context.options.scope || "global") === "sibling" ? context.parent : context.allValues, field);
42
+ }
43
+
44
+ //#endregion
45
+ export { getFieldValue };
46
+ //# sourceMappingURL=get-field-value.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-field-value.mjs","names":[],"sources":["../../../../../../../../../seal/src/helpers/get-field-value.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\r\nimport type { ContextualSchemaRule, SchemaContext } from \"../types\";\r\n\r\n/**\r\n * Get field value based on scope from rule options\r\n *\r\n * This utility extracts a field value from either the global context or sibling context\r\n * based on the `scope` option in the rule's context.\r\n *\r\n * @param rule - The contextual schema rule containing options with:\r\n * - `field` (or custom fieldKey): The field name to extract\r\n * - `scope` (optional): Either \"global\" (default) or \"sibling\"\r\n * @param context - The schema validation context containing allValues and parent\r\n * @param fieldKey - The key in rule.context.options that contains the field name (defaults to \"field\")\r\n *\r\n * @returns The value of the specified field from the appropriate source\r\n *\r\n * @example\r\n * // In a validation rule with scope support:\r\n * async validate(value: any, context) {\r\n * const otherFieldValue = getFieldValue(this, context);\r\n * // Extracts from context.allValues if scope is \"global\"\r\n * // Extracts from context.parent if scope is \"sibling\"\r\n * }\r\n *\r\n * @example\r\n * // Using a custom field key:\r\n * async validate(value: any, context) {\r\n * const compareValue = getFieldValue(this, context, \"compareField\");\r\n * // Looks for rule.context.options.compareField instead of .field\r\n * }\r\n *\r\n * @remarks\r\n * - **Global scope** (`scope: \"global\"`): Searches the entire input data (context.allValues)\r\n * - **Sibling scope** (`scope: \"sibling\"`): Searches only within the parent object (context.parent)\r\n * - Uses `@mongez/reinforcements.get()` to support nested paths (e.g., \"user.email\")\r\n */\r\nexport function getFieldValue(\r\n rule: ContextualSchemaRule,\r\n context: SchemaContext,\r\n fieldKey = \"field\",\r\n) {\r\n const field = rule.context.options[fieldKey];\r\n const scope = rule.context.options.scope || \"global\";\r\n const source = scope === \"sibling\" ? context.parent : context.allValues;\r\n return get(source, field);\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAgB,cACd,MACA,SACA,WAAW,SACX;CACA,MAAM,QAAQ,KAAK,QAAQ,QAAQ;CAGnC,OAAO,KAFO,KAAK,QAAQ,QAAQ,SAAS,cACnB,YAAY,QAAQ,SAAS,QAAQ,WAC3C,KAAK;AAC1B"}
@@ -0,0 +1,6 @@
1
+ import { isDateValue } from "./date-helpers.mjs";
2
+ import { getFieldValue } from "./get-field-value.mjs";
3
+ import { setKeyPath } from "./path-helpers.mjs";
4
+ import { VALID_RULE, invalidRule, resolveTranslation } from "./validation-helpers.mjs";
5
+
6
+ export { };
@@ -0,0 +1,10 @@
1
+ import { isEmpty, isObject } from "../../../node_modules/@mongez/supportive-is/esm/index.mjs";
2
+
3
+ //#region ../seal/src/helpers/is-empty-value.ts
4
+ function isEmptyValue(value) {
5
+ return isEmpty(value) && !isObject(value);
6
+ }
7
+
8
+ //#endregion
9
+ export { isEmptyValue };
10
+ //# sourceMappingURL=is-empty-value.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-empty-value.mjs","names":[],"sources":["../../../../../../../../../seal/src/helpers/is-empty-value.ts"],"sourcesContent":["import { isEmpty, isObject } from \"@mongez/supportive-is\";\n\nexport function isEmptyValue(value: any) {\n return isEmpty(value) && !isObject(value);\n}\n"],"mappings":";;;AAEA,SAAgB,aAAa,OAAY;CACvC,OAAO,QAAQ,KAAK,KAAK,CAAC,SAAS,KAAK;AAC1C"}
@@ -0,0 +1,12 @@
1
+ //#region ../seal/src/helpers/path-helpers.ts
2
+ /**
3
+ * Set the key path for nested validation
4
+ */
5
+ const setKeyPath = (path, key) => {
6
+ if (!path) return key;
7
+ return `${path}.${key}`;
8
+ };
9
+
10
+ //#endregion
11
+ export { setKeyPath };
12
+ //# sourceMappingURL=path-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-helpers.mjs","names":[],"sources":["../../../../../../../../../seal/src/helpers/path-helpers.ts"],"sourcesContent":["/**\r\n * Set the key path for nested validation\r\n */\r\nexport const setKeyPath = (path: string, key: string): string => {\r\n if (!path) return key;\r\n return `${path}.${key}`;\r\n};\r\n"],"mappings":";;;;AAGA,MAAa,cAAc,MAAc,QAAwB;CAC/D,IAAI,CAAC,MAAM,OAAO;CAClB,OAAO,GAAG,KAAK,GAAG;AACpB"}
@@ -0,0 +1,72 @@
1
+ import { getSealConfig } from "../config.mjs";
2
+
3
+ //#region ../seal/src/helpers/validation-helpers.ts
4
+ const VALID_RULE = { isValid: true };
5
+ /**
6
+ * Resolve a single attribute value through the full translation priority chain:
7
+ * 1. attributesList[key] — developer direct text override (highest priority)
8
+ * 2. translatedAttributes[key] — developer explicit translation key
9
+ * 3. translator(rawValue) — auto-translate the raw value (fallback)
10
+ *
11
+ * Use this in rule bodies when you need per-item translation
12
+ * (e.g. translating each enum value before joining them).
13
+ *
14
+ * @example
15
+ * // Translate each enum value individually then join
16
+ * const enumList = enumValues
17
+ * .map(v => resolveTranslation(String(v), String(v), this, context))
18
+ * .join(", ");
19
+ * this.context.translationParams.enumList = enumList;
20
+ */
21
+ const resolveTranslation = ({ key, rawValue, rule, context }) => {
22
+ const translator = getSealConfig().translateAttribute;
23
+ const direct = rule.context.attributesList?.[key];
24
+ if (direct && typeof direct === "string") return direct;
25
+ if (!translator) return String(rawValue ?? key);
26
+ const transKey = rule.context.translatedAttributes?.[key];
27
+ if (transKey) return translator({
28
+ attribute: transKey,
29
+ context,
30
+ rule
31
+ });
32
+ return translator({
33
+ attribute: String(rawValue ?? key),
34
+ context,
35
+ rule
36
+ });
37
+ };
38
+ const resolveAttribute = resolveTranslation;
39
+ const invalidRule = (rule, context) => {
40
+ const translatableWithInput = {
41
+ input: context.key || "schema",
42
+ ...rule.context.translatableParams
43
+ };
44
+ const resolvedParams = Object.fromEntries(Object.entries(translatableWithInput).map(([key, rawValue]) => [key, resolveAttribute({
45
+ key,
46
+ rawValue,
47
+ rule,
48
+ context
49
+ })]));
50
+ const attributes = {
51
+ path: context.path,
52
+ key: context.key,
53
+ value: context.value,
54
+ ...rule.context.translationParams,
55
+ ...resolvedParams,
56
+ input: resolvedParams.input
57
+ };
58
+ return {
59
+ isValid: false,
60
+ error: (rule.context.errorMessage || rule.errorMessage || context.translateRule?.({
61
+ rule,
62
+ context,
63
+ attributes
64
+ }) || rule.defaultErrorMessage).replace(/:([a-zA-Z_]+)/g, (match, key) => key in attributes ? String(attributes[key]) : match),
65
+ input: attributes.input,
66
+ path: context.path
67
+ };
68
+ };
69
+
70
+ //#endregion
71
+ export { VALID_RULE, invalidRule, resolveTranslation };
72
+ //# sourceMappingURL=validation-helpers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-helpers.mjs","names":[],"sources":["../../../../../../../../../seal/src/helpers/validation-helpers.ts"],"sourcesContent":["import { getSealConfig } from \"../config\";\nimport type { ContextualSchemaRule, RuleResult, RuleTranslation, SchemaContext } from \"../types\";\n\nexport const VALID_RULE: RuleResult = {\n isValid: true,\n};\n/**\n * Resolve a single attribute value through the full translation priority chain:\n * 1. attributesList[key] — developer direct text override (highest priority)\n * 2. translatedAttributes[key] — developer explicit translation key\n * 3. translator(rawValue) — auto-translate the raw value (fallback)\n *\n * Use this in rule bodies when you need per-item translation\n * (e.g. translating each enum value before joining them).\n *\n * @example\n * // Translate each enum value individually then join\n * const enumList = enumValues\n * .map(v => resolveTranslation(String(v), String(v), this, context))\n * .join(\", \");\n * this.context.translationParams.enumList = enumList;\n */\nexport const resolveTranslation = ({\n key,\n rawValue,\n rule,\n context,\n}: {\n key: string;\n rawValue: any;\n rule: ContextualSchemaRule;\n context: SchemaContext;\n}): string => {\n const translator = getSealConfig().translateAttribute;\n\n // 1. Direct text override wins\n const direct = rule.context.attributesList?.[key];\n if (direct && typeof direct === \"string\") return direct;\n\n if (!translator) return String(rawValue ?? key);\n\n // 2. Explicit translation key\n const transKey = rule.context.translatedAttributes?.[key];\n if (transKey) return translator({ attribute: transKey, context, rule });\n\n // 3. Auto-translate the raw value (fallback)\n return translator({ attribute: String(rawValue ?? key), context, rule });\n};\n\n// Internal alias — invalidRule uses the same function without re-importing config\nconst resolveAttribute = resolveTranslation;\n\nexport const invalidRule = (rule: ContextualSchemaRule, context: SchemaContext): RuleResult => {\n // `input` is always translatable — rules may add more (e.g., field references in sameAs)\n // Rule-defined translatableParams override the default input if the key matches\n const translatableWithInput: Record<string, string> = {\n // Fall back to \"schema\" when validating at the root level (no key)\n input: context.key || \"schema\",\n ...rule.context.translatableParams,\n };\n\n // Resolve all translatable params through the full priority chain\n const resolvedParams = Object.fromEntries(\n Object.entries(translatableWithInput).map(([key, rawValue]) => [\n key,\n resolveAttribute({ key, rawValue, rule, context }),\n ]),\n );\n\n const attributes: RuleTranslation[\"attributes\"] = {\n path: context.path,\n key: context.key,\n value: context.value,\n // Raw placeholders (:enumList, :min, :max, etc.) — no translation\n ...rule.context.translationParams,\n // Translated placeholders (:input, :field, etc.) — override raws if key collides\n ...resolvedParams,\n // Satisfy TypeScript's required field (always present via resolvedParams)\n input: resolvedParams.input,\n };\n\n const rawError =\n rule.context.errorMessage ||\n rule.errorMessage ||\n context.translateRule?.({ rule, context, attributes }) ||\n rule.defaultErrorMessage!;\n\n // Fallback interpolation: replace :placeholder patterns from attributes\n // This kicks in when translateRule is absent or returns \"\" (not configured)\n const error = rawError.replace(/:([a-zA-Z_]+)/g, (match, key) =>\n key in attributes ? String(attributes[key as keyof typeof attributes]) : match,\n );\n\n return {\n isValid: false,\n error,\n input: attributes.input, // use resolved input, not raw context.key (may be \"\")\n path: context.path,\n };\n};\n"],"mappings":";;;AAGA,MAAa,aAAyB,EACpC,SAAS,KACX;;;;;;;;;;;;;;;;;AAiBA,MAAa,sBAAsB,EACjC,KACA,UACA,MACA,cAMY;CACZ,MAAM,aAAa,cAAc,CAAC,CAAC;CAGnC,MAAM,SAAS,KAAK,QAAQ,iBAAiB;CAC7C,IAAI,UAAU,OAAO,WAAW,UAAU,OAAO;CAEjD,IAAI,CAAC,YAAY,OAAO,OAAO,YAAY,GAAG;CAG9C,MAAM,WAAW,KAAK,QAAQ,uBAAuB;CACrD,IAAI,UAAU,OAAO,WAAW;EAAE,WAAW;EAAU;EAAS;CAAK,CAAC;CAGtE,OAAO,WAAW;EAAE,WAAW,OAAO,YAAY,GAAG;EAAG;EAAS;CAAK,CAAC;AACzE;AAGA,MAAM,mBAAmB;AAEzB,MAAa,eAAe,MAA4B,YAAuC;CAG7F,MAAM,wBAAgD;EAEpD,OAAO,QAAQ,OAAO;EACtB,GAAG,KAAK,QAAQ;CAClB;CAGA,MAAM,iBAAiB,OAAO,YAC5B,OAAO,QAAQ,qBAAqB,CAAC,CAAC,KAAK,CAAC,KAAK,cAAc,CAC7D,KACA,iBAAiB;EAAE;EAAK;EAAU;EAAM;CAAQ,CAAC,CACnD,CAAC,CACH;CAEA,MAAM,aAA4C;EAChD,MAAM,QAAQ;EACd,KAAK,QAAQ;EACb,OAAO,QAAQ;EAEf,GAAG,KAAK,QAAQ;EAEhB,GAAG;EAEH,OAAO,eAAe;CACxB;CAcA,OAAO;EACL,SAAS;EACT,QAbA,KAAK,QAAQ,gBACb,KAAK,gBACL,QAAQ,gBAAgB;GAAE;GAAM;GAAS;EAAW,CAAC,KACrD,KAAK,oBAIe,CAAC,QAAQ,mBAAmB,OAAO,QACvD,OAAO,aAAa,OAAO,WAAW,IAA+B,IAAI,KAKrE;EACJ,OAAO,WAAW;EAClB,MAAM,QAAQ;CAChB;AACF"}
@@ -0,0 +1,87 @@
1
+ import { applyNullable, getRuleOptions, wrapNullableStrict } from "./standard-schema/json-schema.mjs";
2
+ import { getSealConfig } from "./config.mjs";
3
+ import { validate } from "./factory/validate.mjs";
4
+ import { isDateValue } from "./helpers/date-helpers.mjs";
5
+ import { getFieldValue } from "./helpers/get-field-value.mjs";
6
+ import { setKeyPath } from "./helpers/path-helpers.mjs";
7
+ import { VALID_RULE, invalidRule, resolveTranslation } from "./helpers/validation-helpers.mjs";
8
+ import "./helpers/index.mjs";
9
+ import { presentRule, requiredRule } from "./rules/core/required.mjs";
10
+ import { mapToStandardResult } from "./standard-schema/map-result.mjs";
11
+ import { BaseValidator } from "./validators/base-validator.mjs";
12
+ import { AnyValidator } from "./validators/any-validator.mjs";
13
+ import { flipArrayMutator, sortArrayMutator, uniqueArrayMutator } from "./mutators/array-mutators.mjs";
14
+ import { addDaysMutator, addHoursMutator, addMonthsMutator, addYearsMutator, dateMutator, toEndOfDayMutator, toEndOfMonthMutator, toEndOfYearMutator, toStartOfDayMutator, toStartOfMonthMutator, toStartOfYearMutator, toUTCMutator } from "./mutators/date-mutators.mjs";
15
+ import { absMutator, ceilMutator, floorMutator, numberMutator, numericMutator, roundMutator, toFixedMutator } from "./mutators/number-mutators.mjs";
16
+ import { objectTrimMutator, stripUnknownMutator } from "./mutators/object-mutators.mjs";
17
+ import { stringMutator } from "./mutators/scalar-mutators.mjs";
18
+ import { alphaOnlyMutator, alphanumericOnlyMutator, appendMutator, base64DecodeMutator, base64EncodeMutator, camelCaseMutator, capitalizeMutator, htmlEscapeMutator, kebabCaseMutator, lowercaseMutator, ltrimMutator, maskMutator, padEndMutator, padStartMutator, pascalCaseMutator, prependMutator, removeNumbersMutator, removeSpecialCharactersMutator, repeatMutator, replaceAllMutator, replaceMutator, reverseMutator, rtrimMutator, slugMutator, snakeCaseMutator, stringifyMutator, stripTagsMutator, titleCaseMutator, trimMultipleWhitespaceMutator, trimMutator, truncateMutator, unescapeHtmlMutator, uppercaseMutator, urlDecodeMutator, urlEncodeMutator } from "./mutators/string-mutators.mjs";
19
+ import "./mutators/index.mjs";
20
+ import { equalRule } from "./rules/core/equal.mjs";
21
+ import { forbiddenRule } from "./rules/core/forbidden.mjs";
22
+ import { unionRule } from "./rules/core/union.mjs";
23
+ import { whenRule } from "./rules/core/when.mjs";
24
+ import { alphaNumericRule, alphaRule, isNumericRule } from "./rules/string/alpha.mjs";
25
+ import { isCreditCardRule } from "./rules/string/credit-card.mjs";
26
+ import { emailRule } from "./rules/string/email.mjs";
27
+ import { cuidRule, nanoidRule, ulidRule, uuidRule } from "./rules/string/id-formats.mjs";
28
+ import { ip4Rule, ip6Rule, ipRule, isIP, isIPv4, isIPv6 } from "./rules/string/ip.mjs";
29
+ import { patternRule } from "./rules/string/pattern.mjs";
30
+ import { containsRule, endsWithRule, notContainsRule, startsWithRule } from "./rules/string/string-comparison.mjs";
31
+ import { strongPasswordRule } from "./rules/string/strong-password-rule.mjs";
32
+ import { urlRule } from "./rules/string/url.mjs";
33
+ import { withoutWhitespaceRule } from "./rules/string/without-whitespace.mjs";
34
+ import { betweenNumbersRule, evenRule, greaterThanRule, lessThanRule, maxRule, minRule, moduloRule, negativeRule, oddRule, positiveRule } from "./rules/number/number-rules.mjs";
35
+ import { betweenLengthRule, lengthRule, maxLengthRule, maxWordsRule, minLengthRule, minWordsRule, wordsRule } from "./rules/length/length-rules.mjs";
36
+ import { sortedArrayRule, uniqueArrayRule } from "./rules/array/array-rules.mjs";
37
+ import { WEEK_DAYS } from "./types/date-types.mjs";
38
+ import { ageRule, beforeHourRule, beforeMinuteRule, beforeTodayRule, betweenHoursRule, betweenMinutesRule, dateRule, fromHourRule, fromMinuteRule, fromTodayRule, maxAgeRule, maxDateRule, minAgeRule, minDateRule, weekDayRule } from "./rules/date/date.mjs";
39
+ import { afterTodayRule, betweenDatesRule, futureRule, pastRule, todayRule } from "./rules/date/date-comparison-rules.mjs";
40
+ import { businessDayRule, weekdaysRule, weekendRule } from "./rules/date/date-day-rules.mjs";
41
+ import { afterFieldRule, beforeFieldRule, sameAsFieldDateRule } from "./rules/date/date-field-comparison-rules.mjs";
42
+ import { betweenDaysRule, betweenMonthsRule, betweenTimesRule, betweenYearsRule, maxDayRule, maxMonthRule, maxYearRule, minDayRule, minMonthRule, minYearRule, monthRule, quarterRule, yearRule } from "./rules/date/date-period-rules.mjs";
43
+ import { withinDaysRule, withinFutureDaysRule, withinPastDaysRule } from "./rules/date/date-relative-rules.mjs";
44
+ import { betweenAgeRule, birthdayRule, leapYearRule } from "./rules/date/date-special-rules.mjs";
45
+ import { colorRule, darkColorRule, hexColorRule, hslColorRule, lightColorRule, rgbColorRule, rgbaColorRule } from "./rules/color/color-rules.mjs";
46
+ import { requiredIfAllEmptyRule, requiredIfAllNotEmptyRule, requiredIfAnyEmptyRule, requiredIfAnyNotEmptyRule, requiredIfEmptyRule, requiredIfInRule, requiredIfNotEmptyRule, requiredIfNotInRule, requiredIfRule } from "./rules/conditional/required-if-rules.mjs";
47
+ import { requiredUnlessRule } from "./rules/conditional/required-unless-rules.mjs";
48
+ import { requiredWhenRule } from "./rules/conditional/required-when-rule.mjs";
49
+ import { requiredWithAllRule, requiredWithAnyRule, requiredWithRule } from "./rules/conditional/required-with-rules.mjs";
50
+ import { requiredWithoutAllRule, requiredWithoutAnyRule, requiredWithoutRule } from "./rules/conditional/required-without-rules.mjs";
51
+ import { presentIfEmptyRule, presentIfInRule, presentIfNotEmptyRule, presentIfNotInRule, presentIfRule } from "./rules/conditional/present-if-rules.mjs";
52
+ import { presentUnlessRule } from "./rules/conditional/present-unless-rules.mjs";
53
+ import { presentWithAllRule, presentWithAnyRule, presentWithRule } from "./rules/conditional/present-with-rules.mjs";
54
+ import { presentWithoutAllRule, presentWithoutAnyRule, presentWithoutRule } from "./rules/conditional/present-without-rules.mjs";
55
+ import { forbiddenIfEmptyRule, forbiddenIfInRule, forbiddenIfNotEmptyRule, forbiddenIfNotInRule, forbiddenIfNotRule, forbiddenIfRule } from "./rules/conditional/forbidden-if-rules.mjs";
56
+ import { allowedValuesRule, enumRule, inRule, notAllowedValuesRule } from "./rules/common/enum.mjs";
57
+ import { equalsFieldRule, notEqualsFieldRule } from "./rules/common/equals-field-rules.mjs";
58
+ import { instanceofRule } from "./rules/common/instanceof.mjs";
59
+ import { literalRule } from "./rules/common/literal.mjs";
60
+ import { arrayRule, booleanRule, floatRule, intRule, numberRule, objectRule, plainObjectRule, stringRule } from "./rules/common/type-rules.mjs";
61
+ import { unknownKeyRule } from "./rules/common/unknown-key.mjs";
62
+ import "./rules/index.mjs";
63
+ import { ArrayValidator } from "./validators/array-validator.mjs";
64
+ import { PrimitiveValidator } from "./validators/primitive-validator.mjs";
65
+ import { BooleanValidator } from "./validators/boolean-validator.mjs";
66
+ import { ComputedValidator } from "./validators/computed-validator.mjs";
67
+ import { DateValidator } from "./validators/date-validator.mjs";
68
+ import { LiteralValidator } from "./validators/literal-validator.mjs";
69
+ import { DiscriminatedUnionValidator } from "./validators/discriminated-union-validator.mjs";
70
+ import { NumberValidator } from "./validators/number-validator.mjs";
71
+ import { FloatValidator } from "./validators/float-validator.mjs";
72
+ import { InstanceOfValidator } from "./validators/instanceof-validator.mjs";
73
+ import { IntValidator } from "./validators/int-validator.mjs";
74
+ import { LazyValidator } from "./validators/lazy-validator.mjs";
75
+ import { ManagedValidator } from "./validators/managed-validator.mjs";
76
+ import { NumericValidator } from "./validators/numeric-validator.mjs";
77
+ import { ObjectValidator } from "./validators/object-validator.mjs";
78
+ import { RecordValidator } from "./validators/record-validator.mjs";
79
+ import { ScalarValidator } from "./validators/scalar-validator.mjs";
80
+ import { StringValidator } from "./validators/string-validator.mjs";
81
+ import { TupleValidator } from "./validators/tuple-validator.mjs";
82
+ import { UnionValidator } from "./validators/union-validator.mjs";
83
+ import "./validators/index.mjs";
84
+ import { v } from "./factory/validators.mjs";
85
+ import "./factory/index.mjs";
86
+
87
+ export { };
@@ -0,0 +1,32 @@
1
+ import { get } from "../../../node_modules/@mongez/reinforcements/esm/object/get.mjs";
2
+ import "../../../node_modules/@mongez/reinforcements/esm/index.mjs";
3
+
4
+ //#region ../seal/src/mutators/array-mutators.ts
5
+ /** Reverse array order */
6
+ const flipArrayMutator = async (value) => {
7
+ return value.reverse();
8
+ };
9
+ /** Sort array */
10
+ const sortArrayMutator = async (value, context) => {
11
+ if (!Array.isArray(value)) return value;
12
+ const sortDirection = context?.options.direction ?? "asc";
13
+ const sortByKey = context?.options.key ?? null;
14
+ return value.sort((a, b) => {
15
+ if (sortByKey) {
16
+ const aValue = get(a, sortByKey);
17
+ const bValue = get(b, sortByKey);
18
+ if (sortDirection === "asc") return aValue - bValue;
19
+ return bValue - aValue;
20
+ }
21
+ if (sortDirection === "asc") return a - b;
22
+ return b - a;
23
+ });
24
+ };
25
+ /** Make array have only unique values */
26
+ const uniqueArrayMutator = async (value) => {
27
+ return [...new Set(value)];
28
+ };
29
+
30
+ //#endregion
31
+ export { flipArrayMutator, sortArrayMutator, uniqueArrayMutator };
32
+ //# sourceMappingURL=array-mutators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-mutators.mjs","names":[],"sources":["../../../../../../../../../seal/src/mutators/array-mutators.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\r\nimport { isEmptyValue } from \"../helpers/is-empty-value\";\r\nimport type { Mutator } from \"../types\";\r\n\r\n/** Reverse array order */\r\nexport const flipArrayMutator: Mutator = async (value) => {\r\n return value.reverse();\r\n};\r\n\r\n/** Reverse array order (alias) */\r\nexport const reverseArrayMutator: Mutator = async (value) => {\r\n return value.reverse();\r\n};\r\n\r\n/** Sort array */\r\nexport const sortArrayMutator: Mutator = async (value, context) => {\r\n if (!Array.isArray(value)) return value;\r\n\r\n const sortDirection = context?.options.direction ?? \"asc\";\r\n const sortByKey = context?.options.key ?? null;\r\n\r\n return value.sort((a: any, b: any) => {\r\n if (sortByKey) {\r\n const aValue = get(a, sortByKey);\r\n const bValue = get(b, sortByKey);\r\n\r\n if (sortDirection === \"asc\") {\r\n return aValue - bValue;\r\n }\r\n return bValue - aValue;\r\n }\r\n\r\n if (sortDirection === \"asc\") {\r\n return a - b;\r\n }\r\n return b - a;\r\n });\r\n};\r\n\r\n/** Make array have only unique values */\r\nexport const uniqueArrayMutator: Mutator = async (value) => {\r\n return [...new Set(value)];\r\n};\r\n\r\n/** Remove empty elements from array */\r\nexport const removeEmptyArrayElementsMutator: Mutator = async (value) => {\r\n return value.filter((item: any) => !isEmptyValue(item));\r\n};\r\n"],"mappings":";;;;;AAKA,MAAa,mBAA4B,OAAO,UAAU;CACxD,OAAO,MAAM,QAAQ;AACvB;;AAQA,MAAa,mBAA4B,OAAO,OAAO,YAAY;CACjE,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO;CAElC,MAAM,gBAAgB,SAAS,QAAQ,aAAa;CACpD,MAAM,YAAY,SAAS,QAAQ,OAAO;CAE1C,OAAO,MAAM,MAAM,GAAQ,MAAW;EACpC,IAAI,WAAW;GACb,MAAM,SAAS,IAAI,GAAG,SAAS;GAC/B,MAAM,SAAS,IAAI,GAAG,SAAS;GAE/B,IAAI,kBAAkB,OACpB,OAAO,SAAS;GAElB,OAAO,SAAS;EAClB;EAEA,IAAI,kBAAkB,OACpB,OAAO,IAAI;EAEb,OAAO,IAAI;CACb,CAAC;AACH;;AAGA,MAAa,qBAA8B,OAAO,UAAU;CAC1D,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAC3B"}
@@ -0,0 +1,94 @@
1
+ import { __toESM } from "../../../_virtual/_rolldown/runtime.mjs";
2
+ import { require_dayjs_min } from "../../../node_modules/dayjs/dayjs.min.mjs";
3
+
4
+ //#region ../seal/src/mutators/date-mutators.ts
5
+ var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min(), 1);
6
+ /**
7
+ * Convert value to Date object
8
+ * Returns Invalid Date if value cannot be converted
9
+ */
10
+ const dateMutator = async (value) => {
11
+ if (!value) return;
12
+ if (value instanceof Date) return value;
13
+ return new Date(value);
14
+ };
15
+ /** Convert date to start of day (00:00:00) */
16
+ const toStartOfDayMutator = async (value) => {
17
+ const date = new Date(value);
18
+ date.setHours(0, 0, 0, 0);
19
+ return date;
20
+ };
21
+ /** Convert date to end of day (23:59:59.999) */
22
+ const toEndOfDayMutator = async (value) => {
23
+ const date = new Date(value);
24
+ date.setHours(23, 59, 59, 999);
25
+ return date;
26
+ };
27
+ /** Add or subtract days from date */
28
+ const addDaysMutator = async (value, context) => {
29
+ const date = new Date(value);
30
+ const days = context?.options.days ?? 0;
31
+ date.setDate(date.getDate() + days);
32
+ return date;
33
+ };
34
+ /** Add or subtract months from date */
35
+ const addMonthsMutator = async (value, context) => {
36
+ const date = new Date(value);
37
+ const months = context?.options.months ?? 0;
38
+ date.setMonth(date.getMonth() + months);
39
+ return date;
40
+ };
41
+ /** Add or subtract years from date */
42
+ const addYearsMutator = async (value, context) => {
43
+ const date = new Date(value);
44
+ const years = context?.options.years ?? 0;
45
+ date.setFullYear(date.getFullYear() + years);
46
+ return date;
47
+ };
48
+ /** Add or subtract hours from date */
49
+ const addHoursMutator = async (value, context) => {
50
+ const date = new Date(value);
51
+ const hours = context?.options.hours ?? 0;
52
+ date.setHours(date.getHours() + hours);
53
+ return date;
54
+ };
55
+ /** Convert date to UTC */
56
+ const toUTCMutator = async (value) => {
57
+ const date = new Date(value);
58
+ return new Date(date.toUTCString());
59
+ };
60
+ /** Set to start of month */
61
+ const toStartOfMonthMutator = async (value) => {
62
+ const date = new Date(value);
63
+ date.setDate(1);
64
+ date.setHours(0, 0, 0, 0);
65
+ return date;
66
+ };
67
+ /** Set to end of month */
68
+ const toEndOfMonthMutator = async (value) => {
69
+ const date = new Date(value);
70
+ date.setMonth(date.getMonth() + 1);
71
+ date.setDate(0);
72
+ date.setHours(23, 59, 59, 999);
73
+ return date;
74
+ };
75
+ /** Set to start of year */
76
+ const toStartOfYearMutator = async (value) => {
77
+ const date = new Date(value);
78
+ date.setMonth(0);
79
+ date.setDate(1);
80
+ date.setHours(0, 0, 0, 0);
81
+ return date;
82
+ };
83
+ /** Set to end of year */
84
+ const toEndOfYearMutator = async (value) => {
85
+ const date = new Date(value);
86
+ date.setMonth(11);
87
+ date.setDate(31);
88
+ date.setHours(23, 59, 59, 999);
89
+ return date;
90
+ };
91
+
92
+ //#endregion
93
+ export { addDaysMutator, addHoursMutator, addMonthsMutator, addYearsMutator, dateMutator, toEndOfDayMutator, toEndOfMonthMutator, toEndOfYearMutator, toStartOfDayMutator, toStartOfMonthMutator, toStartOfYearMutator, toUTCMutator };
94
+ //# sourceMappingURL=date-mutators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-mutators.mjs","names":[],"sources":["../../../../../../../../../seal/src/mutators/date-mutators.ts"],"sourcesContent":["import dayjs from \"dayjs\";\r\nimport type { Mutator } from \"../types\";\r\n\r\n/**\r\n * Convert value to Date object\r\n * Returns Invalid Date if value cannot be converted\r\n */\r\nexport const dateMutator: Mutator = async (value) => {\r\n // Handle null/undefined\r\n if (!value) {\r\n return;\r\n }\r\n\r\n // Already a Date object\r\n if (value instanceof Date) {\r\n return value;\r\n }\r\n\r\n // Try to convert to Date\r\n const date = new Date(value);\r\n\r\n // Return the date (valid or Invalid Date)\r\n // dateRule will validate and fail if invalid\r\n return date;\r\n};\r\n\r\n/** Convert date to ISO string format */\r\nexport const toISOStringMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n return date.toISOString();\r\n};\r\n\r\n/** Convert date to Unix timestamp (milliseconds) */\r\nexport const toTimestampMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n return date.getTime();\r\n};\r\n\r\n/** Convert date to start of day (00:00:00) */\r\nexport const toStartOfDayMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n};\r\n\r\n/** Convert date to end of day (23:59:59.999) */\r\nexport const toEndOfDayMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n date.setHours(23, 59, 59, 999);\r\n return date;\r\n};\r\n\r\n/** Add or subtract days from date */\r\nexport const addDaysMutator: Mutator = async (value, context) => {\r\n const date = new Date(value);\r\n const days = context?.options.days ?? 0;\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n};\r\n\r\n/** Add or subtract months from date */\r\nexport const addMonthsMutator: Mutator = async (value, context) => {\r\n const date = new Date(value);\r\n const months = context?.options.months ?? 0;\r\n date.setMonth(date.getMonth() + months);\r\n return date;\r\n};\r\n\r\n/** Add or subtract years from date */\r\nexport const addYearsMutator: Mutator = async (value, context) => {\r\n const date = new Date(value);\r\n const years = context?.options.years ?? 0;\r\n date.setFullYear(date.getFullYear() + years);\r\n return date;\r\n};\r\n\r\n/** Add or subtract hours from date */\r\nexport const addHoursMutator: Mutator = async (value, context) => {\r\n const date = new Date(value);\r\n const hours = context?.options.hours ?? 0;\r\n date.setHours(date.getHours() + hours);\r\n return date;\r\n};\r\n\r\n/** Convert date to UTC */\r\nexport const toUTCMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n return new Date(date.toUTCString());\r\n};\r\n\r\n/** Convert date to specific format using dayjs */\r\nexport const toFormatMutator: Mutator = async (value, context) => {\r\n const format = context?.options.format ?? \"YYYY-MM-DD\";\r\n return dayjs(value).format(format);\r\n};\r\n\r\n/** Convert to date only (remove time) */\r\nexport const toDateOnlyMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n return date.toISOString().split(\"T\")[0];\r\n};\r\n\r\n/** Convert to time only (HH:MM:SS) */\r\nexport const toTimeOnlyMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n return date.toTimeString().split(\" \")[0];\r\n};\r\n\r\n/** Set to start of month */\r\nexport const toStartOfMonthMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n date.setDate(1);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n};\r\n\r\n/** Set to end of month */\r\nexport const toEndOfMonthMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n date.setMonth(date.getMonth() + 1);\r\n date.setDate(0);\r\n date.setHours(23, 59, 59, 999);\r\n return date;\r\n};\r\n\r\n/** Set to start of year */\r\nexport const toStartOfYearMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n date.setMonth(0);\r\n date.setDate(1);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n};\r\n\r\n/** Set to end of year */\r\nexport const toEndOfYearMutator: Mutator = async (value) => {\r\n const date = new Date(value);\r\n date.setMonth(11);\r\n date.setDate(31);\r\n date.setHours(23, 59, 59, 999);\r\n return date;\r\n};\r\n"],"mappings":";;;;;;;;;AAOA,MAAa,cAAuB,OAAO,UAAU;CAEnD,IAAI,CAAC,OACH;CAIF,IAAI,iBAAiB,MACnB,OAAO;CAQT,OAAO,IAJU,KAAK,KAIZ;AACZ;;AAeA,MAAa,sBAA+B,OAAO,UAAU;CAC3D,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC;CACxB,OAAO;AACT;;AAGA,MAAa,oBAA6B,OAAO,UAAU;CACzD,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG;CAC7B,OAAO;AACT;;AAGA,MAAa,iBAA0B,OAAO,OAAO,YAAY;CAC/D,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,MAAM,OAAO,SAAS,QAAQ,QAAQ;CACtC,KAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI;CAClC,OAAO;AACT;;AAGA,MAAa,mBAA4B,OAAO,OAAO,YAAY;CACjE,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,MAAM,SAAS,SAAS,QAAQ,UAAU;CAC1C,KAAK,SAAS,KAAK,SAAS,IAAI,MAAM;CACtC,OAAO;AACT;;AAGA,MAAa,kBAA2B,OAAO,OAAO,YAAY;CAChE,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,MAAM,QAAQ,SAAS,QAAQ,SAAS;CACxC,KAAK,YAAY,KAAK,YAAY,IAAI,KAAK;CAC3C,OAAO;AACT;;AAGA,MAAa,kBAA2B,OAAO,OAAO,YAAY;CAChE,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,MAAM,QAAQ,SAAS,QAAQ,SAAS;CACxC,KAAK,SAAS,KAAK,SAAS,IAAI,KAAK;CACrC,OAAO;AACT;;AAGA,MAAa,eAAwB,OAAO,UAAU;CACpD,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,OAAO,IAAI,KAAK,KAAK,YAAY,CAAC;AACpC;;AAqBA,MAAa,wBAAiC,OAAO,UAAU;CAC7D,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,KAAK,QAAQ,CAAC;CACd,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC;CACxB,OAAO;AACT;;AAGA,MAAa,sBAA+B,OAAO,UAAU;CAC3D,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,KAAK,SAAS,KAAK,SAAS,IAAI,CAAC;CACjC,KAAK,QAAQ,CAAC;CACd,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG;CAC7B,OAAO;AACT;;AAGA,MAAa,uBAAgC,OAAO,UAAU;CAC5D,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,KAAK,SAAS,CAAC;CACf,KAAK,QAAQ,CAAC;CACd,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC;CACxB,OAAO;AACT;;AAGA,MAAa,qBAA8B,OAAO,UAAU;CAC1D,MAAM,OAAO,IAAI,KAAK,KAAK;CAC3B,KAAK,SAAS,EAAE;CAChB,KAAK,QAAQ,EAAE;CACf,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG;CAC7B,OAAO;AACT"}
@@ -0,0 +1,8 @@
1
+ import { flipArrayMutator, sortArrayMutator, uniqueArrayMutator } from "./array-mutators.mjs";
2
+ import { addDaysMutator, addHoursMutator, addMonthsMutator, addYearsMutator, dateMutator, toEndOfDayMutator, toEndOfMonthMutator, toEndOfYearMutator, toStartOfDayMutator, toStartOfMonthMutator, toStartOfYearMutator, toUTCMutator } from "./date-mutators.mjs";
3
+ import { absMutator, ceilMutator, floorMutator, numberMutator, numericMutator, roundMutator, toFixedMutator } from "./number-mutators.mjs";
4
+ import { objectTrimMutator, stripUnknownMutator } from "./object-mutators.mjs";
5
+ import { stringMutator } from "./scalar-mutators.mjs";
6
+ import { alphaOnlyMutator, alphanumericOnlyMutator, appendMutator, base64DecodeMutator, base64EncodeMutator, camelCaseMutator, capitalizeMutator, htmlEscapeMutator, kebabCaseMutator, lowercaseMutator, ltrimMutator, maskMutator, padEndMutator, padStartMutator, pascalCaseMutator, prependMutator, removeNumbersMutator, removeSpecialCharactersMutator, repeatMutator, replaceAllMutator, replaceMutator, reverseMutator, rtrimMutator, slugMutator, snakeCaseMutator, stringifyMutator, stripTagsMutator, titleCaseMutator, trimMultipleWhitespaceMutator, trimMutator, truncateMutator, unescapeHtmlMutator, uppercaseMutator, urlDecodeMutator, urlEncodeMutator } from "./string-mutators.mjs";
7
+
8
+ export { };
@@ -0,0 +1,52 @@
1
+ import { round } from "../../../node_modules/@mongez/reinforcements/esm/number/round.mjs";
2
+ import "../../../node_modules/@mongez/reinforcements/esm/index.mjs";
3
+ import { isNumeric } from "../../../node_modules/@mongez/supportive-is/esm/index.mjs";
4
+
5
+ //#region ../seal/src/mutators/number-mutators.ts
6
+ /** Convert value to number */
7
+ const numberMutator = async (value) => {
8
+ if (!value) return value;
9
+ return Number(value);
10
+ };
11
+ const numericMutator = async (value) => {
12
+ if (!isNumeric(value)) return value;
13
+ return Number(value);
14
+ };
15
+ /** Absolute value mutator */
16
+ const absMutator = async (value) => {
17
+ return Math.abs(Number(value));
18
+ };
19
+ /** Ceil mutator */
20
+ const ceilMutator = async (value) => {
21
+ return Math.ceil(Number(value));
22
+ };
23
+ /** Floor mutator */
24
+ const floorMutator = async (value) => {
25
+ return Math.floor(Number(value));
26
+ };
27
+ /**
28
+ * Round mutator
29
+ * Supports decimal precision via options.decimals
30
+ */
31
+ const roundMutator = async (value, context) => {
32
+ const decimals = context?.options?.decimals ?? 0;
33
+ if (decimals === 0) return Math.round(Number(value));
34
+ return round(Number(value), decimals);
35
+ };
36
+ /**
37
+ * To fixed mutator — rounds to a fixed number of decimal places, as a number.
38
+ *
39
+ * `Number.prototype.toFixed` returns a *string*, which the number validator's
40
+ * own type rule then rejected: `v.number().toFixed(2)` could never produce a
41
+ * valid result. Coercing back to a number keeps the method usable where it
42
+ * lives. For the fixed-point string form, format at the edge instead of asking
43
+ * a number schema to output a string.
44
+ */
45
+ const toFixedMutator = async (value, context) => {
46
+ const decimals = context?.options?.decimals ?? 2;
47
+ return Number(Number(value).toFixed(decimals));
48
+ };
49
+
50
+ //#endregion
51
+ export { absMutator, ceilMutator, floorMutator, numberMutator, numericMutator, roundMutator, toFixedMutator };
52
+ //# sourceMappingURL=number-mutators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-mutators.mjs","names":[],"sources":["../../../../../../../../../seal/src/mutators/number-mutators.ts"],"sourcesContent":["import { round } from \"@mongez/reinforcements\";\r\nimport { isNumeric } from \"@mongez/supportive-is\";\r\nimport type { Mutator } from \"../types\";\r\n\r\n/** Convert value to number */\r\nexport const numberMutator: Mutator = async (value) => {\r\n if (!value) return value;\r\n return Number(value);\r\n};\r\n\r\n/** Round number to specified decimals */\r\nexport const roundNumberMutator: Mutator = async (value, context) => {\r\n return round(value, context?.options?.decimals ?? 2);\r\n};\r\n\r\n/** Convert to boolean */\r\nexport const booleanMutator: Mutator = async (value) => {\r\n if (value === \"true\") return true;\r\n if (value === \"false\") return false;\r\n return Boolean(value);\r\n};\r\n\r\nexport const numericMutator: Mutator = async (value) => {\r\n if (!isNumeric(value)) return value;\r\n return Number(value);\r\n};\r\n\r\n/** Absolute value mutator */\r\nexport const absMutator: Mutator = async (value) => {\r\n return Math.abs(Number(value));\r\n};\r\n\r\n/** Ceil mutator */\r\nexport const ceilMutator: Mutator = async (value) => {\r\n return Math.ceil(Number(value));\r\n};\r\n\r\n/** Floor mutator */\r\nexport const floorMutator: Mutator = async (value) => {\r\n return Math.floor(Number(value));\r\n};\r\n\r\n/**\r\n * Round mutator\r\n * Supports decimal precision via options.decimals\r\n */\r\nexport const roundMutator: Mutator = async (value, context) => {\r\n const decimals = context?.options?.decimals ?? 0;\r\n // If decimals is 0, use standard Math.round for integers\r\n if (decimals === 0) {\r\n return Math.round(Number(value));\r\n }\r\n // Otherwise use reinforcements round helper for precision\r\n return round(Number(value), decimals);\r\n};\r\n\r\n/**\r\n * To fixed mutator — rounds to a fixed number of decimal places, as a number.\r\n *\r\n * `Number.prototype.toFixed` returns a *string*, which the number validator's\r\n * own type rule then rejected: `v.number().toFixed(2)` could never produce a\r\n * valid result. Coercing back to a number keeps the method usable where it\r\n * lives. For the fixed-point string form, format at the edge instead of asking\r\n * a number schema to output a string.\r\n */\r\nexport const toFixedMutator: Mutator = async (value, context) => {\r\n const decimals = context?.options?.decimals ?? 2;\r\n return Number(Number(value).toFixed(decimals));\r\n};\r\n"],"mappings":";;;;;;AAKA,MAAa,gBAAyB,OAAO,UAAU;CACrD,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,OAAO,KAAK;AACrB;AAcA,MAAa,iBAA0B,OAAO,UAAU;CACtD,IAAI,CAAC,UAAU,KAAK,GAAG,OAAO;CAC9B,OAAO,OAAO,KAAK;AACrB;;AAGA,MAAa,aAAsB,OAAO,UAAU;CAClD,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC;AAC/B;;AAGA,MAAa,cAAuB,OAAO,UAAU;CACnD,OAAO,KAAK,KAAK,OAAO,KAAK,CAAC;AAChC;;AAGA,MAAa,eAAwB,OAAO,UAAU;CACpD,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC;AACjC;;;;;AAMA,MAAa,eAAwB,OAAO,OAAO,YAAY;CAC7D,MAAM,WAAW,SAAS,SAAS,YAAY;CAE/C,IAAI,aAAa,GACf,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC;CAGjC,OAAO,MAAM,OAAO,KAAK,GAAG,QAAQ;AACtC;;;;;;;;;;AAWA,MAAa,iBAA0B,OAAO,OAAO,YAAY;CAC/D,MAAM,WAAW,SAAS,SAAS,YAAY;CAC/C,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,QAAQ,CAAC;AAC/C"}
@@ -0,0 +1,30 @@
1
+ import { trim } from "../../../node_modules/@mongez/reinforcements/esm/string/trim.mjs";
2
+ import "../../../node_modules/@mongez/reinforcements/esm/index.mjs";
3
+ import { isPlainObject } from "../../../node_modules/@mongez/supportive-is/esm/index.mjs";
4
+
5
+ //#region ../seal/src/mutators/object-mutators.ts
6
+ /** Strip unknown keys from object */
7
+ const stripUnknownMutator = async (value, context) => {
8
+ const allowedKeys = [...context?.ctx.schema ? Object.keys(context.ctx.schema) : [], ...context?.options.allowedKeys ?? []];
9
+ const result = {};
10
+ for (const key in value) if (allowedKeys.includes(key)) result[key] = value[key];
11
+ return result;
12
+ };
13
+ /** Trim all string values in object */
14
+ const objectTrimMutator = async (value, context) => {
15
+ if (!isPlainObject(value)) return value;
16
+ const result = {};
17
+ const recursive = context?.options.recursive ?? false;
18
+ for (const key in value) {
19
+ const item = value[key];
20
+ if (recursive) if (Array.isArray(item)) result[key] = await Promise.all(item.map(async (i) => typeof i === "string" ? trim(i) : await objectTrimMutator(i, context)));
21
+ else if (isPlainObject(item)) result[key] = await objectTrimMutator(item, context);
22
+ else result[key] = typeof item === "string" ? trim(item) : item;
23
+ else result[key] = typeof item === "string" ? trim(item) : item;
24
+ }
25
+ return result;
26
+ };
27
+
28
+ //#endregion
29
+ export { objectTrimMutator, stripUnknownMutator };
30
+ //# sourceMappingURL=object-mutators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-mutators.mjs","names":[],"sources":["../../../../../../../../../seal/src/mutators/object-mutators.ts"],"sourcesContent":["import { trim } from \"@mongez/reinforcements\";\r\nimport { isPlainObject } from \"@mongez/supportive-is\";\r\nimport type { Mutator } from \"../types\";\r\n\r\n/** Strip unknown keys from object */\r\nexport const stripUnknownMutator: Mutator = async (value, context) => {\r\n const allowedKeys = [\r\n ...(context?.ctx.schema ? Object.keys(context.ctx.schema) : []),\r\n ...(context?.options.allowedKeys ?? []),\r\n ];\r\n\r\n const result: Record<string, any> = {};\r\n\r\n for (const key in value) {\r\n if (allowedKeys.includes(key)) {\r\n result[key] = value[key];\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/** Trim all string values in object */\r\nexport const objectTrimMutator: Mutator = async (value, context) => {\r\n if (!isPlainObject(value)) return value;\r\n\r\n const result: Record<string, any> = {};\r\n const recursive = context?.options.recursive ?? false;\r\n\r\n for (const key in value) {\r\n const item = value[key];\r\n\r\n if (recursive) {\r\n if (Array.isArray(item)) {\r\n result[key] = await Promise.all(\r\n item.map(async (i: any) =>\r\n typeof i === \"string\" ? trim(i) : await objectTrimMutator(i, context),\r\n ),\r\n );\r\n } else if (isPlainObject(item)) {\r\n result[key] = await objectTrimMutator(item, context);\r\n } else {\r\n result[key] = typeof item === \"string\" ? trim(item) : item;\r\n }\r\n } else {\r\n result[key] = typeof item === \"string\" ? trim(item) : item;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/** Parse JSON string */\r\nexport const jsonMutator: Mutator = async (value) => {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n};\r\n"],"mappings":";;;;;;AAKA,MAAa,sBAA+B,OAAO,OAAO,YAAY;CACpE,MAAM,cAAc,CAClB,GAAI,SAAS,IAAI,SAAS,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,GAC7D,GAAI,SAAS,QAAQ,eAAe,CAAC,CACvC;CAEA,MAAM,SAA8B,CAAC;CAErC,KAAK,MAAM,OAAO,OAChB,IAAI,YAAY,SAAS,GAAG,GAC1B,OAAO,OAAO,MAAM;CAIxB,OAAO;AACT;;AAGA,MAAa,oBAA6B,OAAO,OAAO,YAAY;CAClE,IAAI,CAAC,cAAc,KAAK,GAAG,OAAO;CAElC,MAAM,SAA8B,CAAC;CACrC,MAAM,YAAY,SAAS,QAAQ,aAAa;CAEhD,KAAK,MAAM,OAAO,OAAO;EACvB,MAAM,OAAO,MAAM;EAEnB,IAAI,WACF,IAAI,MAAM,QAAQ,IAAI,GACpB,OAAO,OAAO,MAAM,QAAQ,IAC1B,KAAK,IAAI,OAAO,MACd,OAAO,MAAM,WAAW,KAAK,CAAC,IAAI,MAAM,kBAAkB,GAAG,OAAO,CACtE,CACF;OACK,IAAI,cAAc,IAAI,GAC3B,OAAO,OAAO,MAAM,kBAAkB,MAAM,OAAO;OAEnD,OAAO,OAAO,OAAO,SAAS,WAAW,KAAK,IAAI,IAAI;OAGxD,OAAO,OAAO,OAAO,SAAS,WAAW,KAAK,IAAI,IAAI;CAE1D;CAEA,OAAO;AACT"}
@@ -0,0 +1,9 @@
1
+ //#region ../seal/src/mutators/scalar-mutators.ts
2
+ const stringMutator = async (value) => {
3
+ if ([void 0, null].includes(value)) return value;
4
+ return String(value);
5
+ };
6
+
7
+ //#endregion
8
+ export { stringMutator };
9
+ //# sourceMappingURL=scalar-mutators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar-mutators.mjs","names":[],"sources":["../../../../../../../../../seal/src/mutators/scalar-mutators.ts"],"sourcesContent":["import type { Mutator } from \"../types\";\r\n\r\nexport const stringMutator: Mutator = async (value) => {\r\n if ([undefined, null].includes(value)) {\r\n return value;\r\n }\r\n\r\n return String(value);\r\n};\r\n"],"mappings":";AAEA,MAAa,gBAAyB,OAAO,UAAU;CACrD,IAAI,CAAC,QAAW,IAAI,CAAC,CAAC,SAAS,KAAK,GAClC,OAAO;CAGT,OAAO,OAAO,KAAK;AACrB"}