@warlock.js/notifications 4.15.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 (344) hide show
  1. package/CHANGELOG.md +12 -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 +34 -4
  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/base-notifications-repository.d.mts +15 -1
  39. package/esm/in-app/base-notifications-repository.d.mts.map +1 -1
  40. package/esm/in-app/base-notifications-repository.mjs +33 -3
  41. package/esm/in-app/base-notifications-repository.mjs.map +1 -1
  42. package/esm/in-app/in-app.d.mts +3 -3
  43. package/esm/in-app/in-app.d.mts.map +1 -1
  44. package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs +6 -0
  45. package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs.map +1 -0
  46. package/esm/node_modules/@mongez/reinforcements/esm/Random/bool.mjs +3 -0
  47. package/esm/node_modules/@mongez/reinforcements/esm/Random/color.mjs +3 -0
  48. package/esm/node_modules/@mongez/reinforcements/esm/Random/date.mjs +3 -0
  49. package/esm/node_modules/@mongez/reinforcements/esm/Random/float.mjs +3 -0
  50. package/esm/node_modules/@mongez/reinforcements/esm/Random/id.mjs +3 -0
  51. package/esm/node_modules/@mongez/reinforcements/esm/Random/int.mjs +3 -0
  52. package/esm/node_modules/@mongez/reinforcements/esm/Random/nanoid.mjs +3 -0
  53. package/esm/node_modules/@mongez/reinforcements/esm/Random/pick.mjs +3 -0
  54. package/esm/node_modules/@mongez/reinforcements/esm/Random/random.mjs +16 -0
  55. package/esm/node_modules/@mongez/reinforcements/esm/Random/sample.mjs +3 -0
  56. package/esm/node_modules/@mongez/reinforcements/esm/Random/string.mjs +3 -0
  57. package/esm/node_modules/@mongez/reinforcements/esm/Random/token.mjs +3 -0
  58. package/esm/node_modules/@mongez/reinforcements/esm/Random/uuid.mjs +3 -0
  59. package/esm/node_modules/@mongez/reinforcements/esm/Random/weighted.mjs +3 -0
  60. package/esm/node_modules/@mongez/reinforcements/esm/async/retry.mjs +3 -0
  61. package/esm/node_modules/@mongez/reinforcements/esm/index.mjs +24 -0
  62. package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs +82 -0
  63. package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs.map +1 -0
  64. package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs +17 -0
  65. package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs.map +1 -0
  66. package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs +13 -0
  67. package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs.map +1 -0
  68. package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs +18 -0
  69. package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs.map +1 -0
  70. package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs +17 -0
  71. package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs.map +1 -0
  72. package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs +30 -0
  73. package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs.map +1 -0
  74. package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs +19 -0
  75. package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs.map +1 -0
  76. package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs +18 -0
  77. package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs.map +1 -0
  78. package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs +14 -0
  79. package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs.map +1 -0
  80. package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs +18 -0
  81. package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs.map +1 -0
  82. package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs +22 -0
  83. package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs.map +1 -0
  84. package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs +17 -0
  85. package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs.map +1 -0
  86. package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs +21 -0
  87. package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs.map +1 -0
  88. package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs +21 -0
  89. package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs.map +1 -0
  90. package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs +20 -0
  91. package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs.map +1 -0
  92. package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs +15 -0
  93. package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs.map +1 -0
  94. package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs +25 -0
  95. package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs.map +1 -0
  96. package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs +11 -0
  97. package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs.map +1 -0
  98. package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs +100 -0
  99. package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs.map +1 -0
  100. package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs +27 -0
  101. package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs.map +1 -0
  102. package/esm/node_modules/@mongez/supportive-is/esm/index.mjs +353 -0
  103. package/esm/node_modules/@mongez/supportive-is/esm/index.mjs.map +1 -0
  104. package/esm/node_modules/amqplib/channel_api.mjs +28 -0
  105. package/esm/node_modules/amqplib/channel_api.mjs.map +1 -0
  106. package/esm/node_modules/amqplib/lib/api_args.mjs +241 -0
  107. package/esm/node_modules/amqplib/lib/api_args.mjs.map +1 -0
  108. package/esm/node_modules/amqplib/lib/bitset.mjs +130 -0
  109. package/esm/node_modules/amqplib/lib/bitset.mjs.map +1 -0
  110. package/esm/node_modules/amqplib/lib/channel.mjs +302 -0
  111. package/esm/node_modules/amqplib/lib/channel.mjs.map +1 -0
  112. package/esm/node_modules/amqplib/lib/channel_model.mjs +206 -0
  113. package/esm/node_modules/amqplib/lib/channel_model.mjs.map +1 -0
  114. package/esm/node_modules/amqplib/lib/codec.mjs +273 -0
  115. package/esm/node_modules/amqplib/lib/codec.mjs.map +1 -0
  116. package/esm/node_modules/amqplib/lib/connect.mjs +143 -0
  117. package/esm/node_modules/amqplib/lib/connect.mjs.map +1 -0
  118. package/esm/node_modules/amqplib/lib/connection.mjs +416 -0
  119. package/esm/node_modules/amqplib/lib/connection.mjs.map +1 -0
  120. package/esm/node_modules/amqplib/lib/credentials.mjs +50 -0
  121. package/esm/node_modules/amqplib/lib/credentials.mjs.map +1 -0
  122. package/esm/node_modules/amqplib/lib/defs.mjs +4600 -0
  123. package/esm/node_modules/amqplib/lib/defs.mjs.map +1 -0
  124. package/esm/node_modules/amqplib/lib/error.mjs +29 -0
  125. package/esm/node_modules/amqplib/lib/error.mjs.map +1 -0
  126. package/esm/node_modules/amqplib/lib/format.mjs +28 -0
  127. package/esm/node_modules/amqplib/lib/format.mjs.map +1 -0
  128. package/esm/node_modules/amqplib/lib/frame.mjs +130 -0
  129. package/esm/node_modules/amqplib/lib/frame.mjs.map +1 -0
  130. package/esm/node_modules/amqplib/lib/heartbeat.mjs +40 -0
  131. package/esm/node_modules/amqplib/lib/heartbeat.mjs.map +1 -0
  132. package/esm/node_modules/amqplib/lib/mux.mjs +86 -0
  133. package/esm/node_modules/amqplib/lib/mux.mjs.map +1 -0
  134. package/esm/node_modules/amqplib/package.mjs +41 -0
  135. package/esm/node_modules/amqplib/package.mjs.map +1 -0
  136. package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs +360 -0
  137. package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs.map +1 -0
  138. package/esm/node_modules/dayjs/dayjs.min.mjs +305 -0
  139. package/esm/node_modules/dayjs/dayjs.min.mjs.map +1 -0
  140. package/esm/node_modules/querystringify/index.mjs +80 -0
  141. package/esm/node_modules/querystringify/index.mjs.map +1 -0
  142. package/esm/node_modules/requires-port/index.mjs +35 -0
  143. package/esm/node_modules/requires-port/index.mjs.map +1 -0
  144. package/esm/node_modules/url-parse/index.mjs +388 -0
  145. package/esm/node_modules/url-parse/index.mjs.map +1 -0
  146. package/esm/queue/load-herald.mjs +1 -1
  147. package/esm/seal/src/config.mjs +15 -0
  148. package/esm/seal/src/config.mjs.map +1 -0
  149. package/esm/seal/src/factory/index.mjs +4 -0
  150. package/esm/seal/src/factory/validate.mjs +34 -0
  151. package/esm/seal/src/factory/validate.mjs.map +1 -0
  152. package/esm/seal/src/factory/validators.mjs +132 -0
  153. package/esm/seal/src/factory/validators.mjs.map +1 -0
  154. package/esm/seal/src/helpers/date-helpers.mjs +24 -0
  155. package/esm/seal/src/helpers/date-helpers.mjs.map +1 -0
  156. package/esm/seal/src/helpers/get-field-value.mjs +46 -0
  157. package/esm/seal/src/helpers/get-field-value.mjs.map +1 -0
  158. package/esm/seal/src/helpers/index.mjs +6 -0
  159. package/esm/seal/src/helpers/is-empty-value.mjs +10 -0
  160. package/esm/seal/src/helpers/is-empty-value.mjs.map +1 -0
  161. package/esm/seal/src/helpers/path-helpers.mjs +12 -0
  162. package/esm/seal/src/helpers/path-helpers.mjs.map +1 -0
  163. package/esm/seal/src/helpers/validation-helpers.mjs +72 -0
  164. package/esm/seal/src/helpers/validation-helpers.mjs.map +1 -0
  165. package/esm/seal/src/index.mjs +87 -0
  166. package/esm/seal/src/mutators/array-mutators.mjs +32 -0
  167. package/esm/seal/src/mutators/array-mutators.mjs.map +1 -0
  168. package/esm/seal/src/mutators/date-mutators.mjs +94 -0
  169. package/esm/seal/src/mutators/date-mutators.mjs.map +1 -0
  170. package/esm/seal/src/mutators/index.mjs +8 -0
  171. package/esm/seal/src/mutators/number-mutators.mjs +52 -0
  172. package/esm/seal/src/mutators/number-mutators.mjs.map +1 -0
  173. package/esm/seal/src/mutators/object-mutators.mjs +30 -0
  174. package/esm/seal/src/mutators/object-mutators.mjs.map +1 -0
  175. package/esm/seal/src/mutators/scalar-mutators.mjs +9 -0
  176. package/esm/seal/src/mutators/scalar-mutators.mjs.map +1 -0
  177. package/esm/seal/src/mutators/string-mutators.mjs +186 -0
  178. package/esm/seal/src/mutators/string-mutators.mjs.map +1 -0
  179. package/esm/seal/src/rules/array/array-rules.mjs +41 -0
  180. package/esm/seal/src/rules/array/array-rules.mjs.map +1 -0
  181. package/esm/seal/src/rules/array/index.mjs +3 -0
  182. package/esm/seal/src/rules/color/color-rules.mjs +104 -0
  183. package/esm/seal/src/rules/color/color-rules.mjs.map +1 -0
  184. package/esm/seal/src/rules/color/index.mjs +3 -0
  185. package/esm/seal/src/rules/common/enum.mjs +77 -0
  186. package/esm/seal/src/rules/common/enum.mjs.map +1 -0
  187. package/esm/seal/src/rules/common/equals-field-rules.mjs +42 -0
  188. package/esm/seal/src/rules/common/equals-field-rules.mjs.map +1 -0
  189. package/esm/seal/src/rules/common/index.mjs +8 -0
  190. package/esm/seal/src/rules/common/instanceof.mjs +23 -0
  191. package/esm/seal/src/rules/common/instanceof.mjs.map +1 -0
  192. package/esm/seal/src/rules/common/literal.mjs +31 -0
  193. package/esm/seal/src/rules/common/literal.mjs.map +1 -0
  194. package/esm/seal/src/rules/common/type-rules.mjs +97 -0
  195. package/esm/seal/src/rules/common/type-rules.mjs.map +1 -0
  196. package/esm/seal/src/rules/common/unknown-key.mjs +25 -0
  197. package/esm/seal/src/rules/common/unknown-key.mjs.map +1 -0
  198. package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs +116 -0
  199. package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs.map +1 -0
  200. package/esm/seal/src/rules/conditional/index.mjs +12 -0
  201. package/esm/seal/src/rules/conditional/present-if-rules.mjs +97 -0
  202. package/esm/seal/src/rules/conditional/present-if-rules.mjs.map +1 -0
  203. package/esm/seal/src/rules/conditional/present-unless-rules.mjs +30 -0
  204. package/esm/seal/src/rules/conditional/present-unless-rules.mjs.map +1 -0
  205. package/esm/seal/src/rules/conditional/present-with-rules.mjs +76 -0
  206. package/esm/seal/src/rules/conditional/present-with-rules.mjs.map +1 -0
  207. package/esm/seal/src/rules/conditional/present-without-rules.mjs +76 -0
  208. package/esm/seal/src/rules/conditional/present-without-rules.mjs.map +1 -0
  209. package/esm/seal/src/rules/conditional/required-if-rules.mjs +204 -0
  210. package/esm/seal/src/rules/conditional/required-if-rules.mjs.map +1 -0
  211. package/esm/seal/src/rules/conditional/required-unless-rules.mjs +31 -0
  212. package/esm/seal/src/rules/conditional/required-unless-rules.mjs.map +1 -0
  213. package/esm/seal/src/rules/conditional/required-when-rule.mjs +32 -0
  214. package/esm/seal/src/rules/conditional/required-when-rule.mjs.map +1 -0
  215. package/esm/seal/src/rules/conditional/required-with-rules.mjs +67 -0
  216. package/esm/seal/src/rules/conditional/required-with-rules.mjs.map +1 -0
  217. package/esm/seal/src/rules/conditional/required-without-rules.mjs +67 -0
  218. package/esm/seal/src/rules/conditional/required-without-rules.mjs.map +1 -0
  219. package/esm/seal/src/rules/core/equal.mjs +22 -0
  220. package/esm/seal/src/rules/core/equal.mjs.map +1 -0
  221. package/esm/seal/src/rules/core/forbidden.mjs +20 -0
  222. package/esm/seal/src/rules/core/forbidden.mjs.map +1 -0
  223. package/esm/seal/src/rules/core/index.mjs +7 -0
  224. package/esm/seal/src/rules/core/required.mjs +36 -0
  225. package/esm/seal/src/rules/core/required.mjs.map +1 -0
  226. package/esm/seal/src/rules/core/union.mjs +30 -0
  227. package/esm/seal/src/rules/core/union.mjs.map +1 -0
  228. package/esm/seal/src/rules/core/when.mjs +37 -0
  229. package/esm/seal/src/rules/core/when.mjs.map +1 -0
  230. package/esm/seal/src/rules/date/date-comparison-rules.mjs +78 -0
  231. package/esm/seal/src/rules/date/date-comparison-rules.mjs.map +1 -0
  232. package/esm/seal/src/rules/date/date-day-rules.mjs +49 -0
  233. package/esm/seal/src/rules/date/date-day-rules.mjs.map +1 -0
  234. package/esm/seal/src/rules/date/date-field-comparison-rules.mjs +82 -0
  235. package/esm/seal/src/rules/date/date-field-comparison-rules.mjs.map +1 -0
  236. package/esm/seal/src/rules/date/date-period-rules.mjs +399 -0
  237. package/esm/seal/src/rules/date/date-period-rules.mjs.map +1 -0
  238. package/esm/seal/src/rules/date/date-relative-rules.mjs +55 -0
  239. package/esm/seal/src/rules/date/date-relative-rules.mjs.map +1 -0
  240. package/esm/seal/src/rules/date/date-special-rules.mjs +58 -0
  241. package/esm/seal/src/rules/date/date-special-rules.mjs.map +1 -0
  242. package/esm/seal/src/rules/date/date.mjs +235 -0
  243. package/esm/seal/src/rules/date/date.mjs.map +1 -0
  244. package/esm/seal/src/rules/date/index.mjs +9 -0
  245. package/esm/seal/src/rules/file/dimensions.mjs +3 -0
  246. package/esm/seal/src/rules/file/file-size.mjs +3 -0
  247. package/esm/seal/src/rules/file/index.mjs +4 -0
  248. package/esm/seal/src/rules/index.mjs +54 -0
  249. package/esm/seal/src/rules/length/index.mjs +3 -0
  250. package/esm/seal/src/rules/length/length-rules.mjs +98 -0
  251. package/esm/seal/src/rules/length/length-rules.mjs.map +1 -0
  252. package/esm/seal/src/rules/number/index.mjs +3 -0
  253. package/esm/seal/src/rules/number/number-rules.mjs +197 -0
  254. package/esm/seal/src/rules/number/number-rules.mjs.map +1 -0
  255. package/esm/seal/src/rules/scalar/accepted-rule.mjs +116 -0
  256. package/esm/seal/src/rules/scalar/accepted-rule.mjs.map +1 -0
  257. package/esm/seal/src/rules/scalar/declined-rule.mjs +116 -0
  258. package/esm/seal/src/rules/scalar/declined-rule.mjs.map +1 -0
  259. package/esm/seal/src/rules/scalar/index.mjs +4 -0
  260. package/esm/seal/src/rules/string/alpha.mjs +41 -0
  261. package/esm/seal/src/rules/string/alpha.mjs.map +1 -0
  262. package/esm/seal/src/rules/string/credit-card.mjs +32 -0
  263. package/esm/seal/src/rules/string/credit-card.mjs.map +1 -0
  264. package/esm/seal/src/rules/string/email.mjs +20 -0
  265. package/esm/seal/src/rules/string/email.mjs.map +1 -0
  266. package/esm/seal/src/rules/string/id-formats.mjs +104 -0
  267. package/esm/seal/src/rules/string/id-formats.mjs.map +1 -0
  268. package/esm/seal/src/rules/string/index.mjs +13 -0
  269. package/esm/seal/src/rules/string/ip.mjs +66 -0
  270. package/esm/seal/src/rules/string/ip.mjs.map +1 -0
  271. package/esm/seal/src/rules/string/matches.mjs +4 -0
  272. package/esm/seal/src/rules/string/pattern.mjs +20 -0
  273. package/esm/seal/src/rules/string/pattern.mjs.map +1 -0
  274. package/esm/seal/src/rules/string/string-comparison.mjs +56 -0
  275. package/esm/seal/src/rules/string/string-comparison.mjs.map +1 -0
  276. package/esm/seal/src/rules/string/strong-password-rule.mjs +31 -0
  277. package/esm/seal/src/rules/string/strong-password-rule.mjs.map +1 -0
  278. package/esm/seal/src/rules/string/url.mjs +23 -0
  279. package/esm/seal/src/rules/string/url.mjs.map +1 -0
  280. package/esm/seal/src/rules/string/without-whitespace.mjs +19 -0
  281. package/esm/seal/src/rules/string/without-whitespace.mjs.map +1 -0
  282. package/esm/seal/src/standard-schema/json-schema.mjs +81 -0
  283. package/esm/seal/src/standard-schema/json-schema.mjs.map +1 -0
  284. package/esm/seal/src/standard-schema/map-result.mjs +26 -0
  285. package/esm/seal/src/standard-schema/map-result.mjs.map +1 -0
  286. package/esm/seal/src/types/date-types.mjs +17 -0
  287. package/esm/seal/src/types/date-types.mjs.map +1 -0
  288. package/esm/seal/src/validators/any-validator.mjs +38 -0
  289. package/esm/seal/src/validators/any-validator.mjs.map +1 -0
  290. package/esm/seal/src/validators/array-validator.mjs +177 -0
  291. package/esm/seal/src/validators/array-validator.mjs.map +1 -0
  292. package/esm/seal/src/validators/base-validator.mjs +691 -0
  293. package/esm/seal/src/validators/base-validator.mjs.map +1 -0
  294. package/esm/seal/src/validators/boolean-validator.mjs +126 -0
  295. package/esm/seal/src/validators/boolean-validator.mjs.map +1 -0
  296. package/esm/seal/src/validators/computed-validator.mjs +118 -0
  297. package/esm/seal/src/validators/computed-validator.mjs.map +1 -0
  298. package/esm/seal/src/validators/date-validator.mjs +639 -0
  299. package/esm/seal/src/validators/date-validator.mjs.map +1 -0
  300. package/esm/seal/src/validators/discriminated-union-validator.mjs +129 -0
  301. package/esm/seal/src/validators/discriminated-union-validator.mjs.map +1 -0
  302. package/esm/seal/src/validators/float-validator.mjs +18 -0
  303. package/esm/seal/src/validators/float-validator.mjs.map +1 -0
  304. package/esm/seal/src/validators/index.mjs +28 -0
  305. package/esm/seal/src/validators/instanceof-validator.mjs +64 -0
  306. package/esm/seal/src/validators/instanceof-validator.mjs.map +1 -0
  307. package/esm/seal/src/validators/int-validator.mjs +30 -0
  308. package/esm/seal/src/validators/int-validator.mjs.map +1 -0
  309. package/esm/seal/src/validators/lazy-validator.mjs +87 -0
  310. package/esm/seal/src/validators/lazy-validator.mjs.map +1 -0
  311. package/esm/seal/src/validators/literal-validator.mjs +71 -0
  312. package/esm/seal/src/validators/literal-validator.mjs.map +1 -0
  313. package/esm/seal/src/validators/managed-validator.mjs +39 -0
  314. package/esm/seal/src/validators/managed-validator.mjs.map +1 -0
  315. package/esm/seal/src/validators/methods/equality-conditional-methods.mjs +129 -0
  316. package/esm/seal/src/validators/methods/equality-conditional-methods.mjs.map +1 -0
  317. package/esm/seal/src/validators/methods/forbidden-methods.mjs +131 -0
  318. package/esm/seal/src/validators/methods/forbidden-methods.mjs.map +1 -0
  319. package/esm/seal/src/validators/methods/present-methods.mjs +235 -0
  320. package/esm/seal/src/validators/methods/present-methods.mjs.map +1 -0
  321. package/esm/seal/src/validators/methods/required-methods.mjs +347 -0
  322. package/esm/seal/src/validators/methods/required-methods.mjs.map +1 -0
  323. package/esm/seal/src/validators/number-validator.mjs +310 -0
  324. package/esm/seal/src/validators/number-validator.mjs.map +1 -0
  325. package/esm/seal/src/validators/numeric-validator.mjs +27 -0
  326. package/esm/seal/src/validators/numeric-validator.mjs.map +1 -0
  327. package/esm/seal/src/validators/object-validator.mjs +442 -0
  328. package/esm/seal/src/validators/object-validator.mjs.map +1 -0
  329. package/esm/seal/src/validators/primitive-validator.mjs +89 -0
  330. package/esm/seal/src/validators/primitive-validator.mjs.map +1 -0
  331. package/esm/seal/src/validators/record-validator.mjs +112 -0
  332. package/esm/seal/src/validators/record-validator.mjs.map +1 -0
  333. package/esm/seal/src/validators/scalar-validator.mjs +172 -0
  334. package/esm/seal/src/validators/scalar-validator.mjs.map +1 -0
  335. package/esm/seal/src/validators/string-validator.mjs +459 -0
  336. package/esm/seal/src/validators/string-validator.mjs.map +1 -0
  337. package/esm/seal/src/validators/tuple-validator.mjs +134 -0
  338. package/esm/seal/src/validators/tuple-validator.mjs.map +1 -0
  339. package/esm/seal/src/validators/union-validator.mjs +66 -0
  340. package/esm/seal/src/validators/union-validator.mjs.map +1 -0
  341. package/llms-full.txt +5 -1
  342. package/package.json +5 -5
  343. package/skills/send-ad-hoc/SKILL.md +1 -1
  344. package/skills/use-in-app/SKILL.md +4 -0
@@ -0,0 +1,177 @@
1
+ import { applyNullable, getRuleOptions } from "../standard-schema/json-schema.mjs";
2
+ import { setKeyPath } from "../helpers/path-helpers.mjs";
3
+ import "../helpers/index.mjs";
4
+ import { BaseValidator } from "./base-validator.mjs";
5
+ import { flipArrayMutator, sortArrayMutator, uniqueArrayMutator } from "../mutators/array-mutators.mjs";
6
+ import "../mutators/index.mjs";
7
+ import { betweenLengthRule, lengthRule, maxLengthRule, minLengthRule } from "../rules/length/length-rules.mjs";
8
+ import { sortedArrayRule, uniqueArrayRule } from "../rules/array/array-rules.mjs";
9
+ import { arrayRule } from "../rules/common/type-rules.mjs";
10
+ import "../rules/index.mjs";
11
+
12
+ //#region ../seal/src/validators/array-validator.ts
13
+ /**
14
+ * Array validator class
15
+ */
16
+ var ArrayValidator = class extends BaseValidator {
17
+ validator;
18
+ constructor(validator, errorMessage) {
19
+ super();
20
+ this.validator = validator;
21
+ this.addMutableRule(arrayRule, errorMessage);
22
+ }
23
+ /**
24
+ * Check if value is an array type
25
+ */
26
+ matchesType(value) {
27
+ return Array.isArray(value);
28
+ }
29
+ /**
30
+ * Clone the validator
31
+ */
32
+ clone() {
33
+ const cloned = super.clone();
34
+ cloned.validator = this.validator.clone();
35
+ return cloned;
36
+ }
37
+ /** Reverse array order */
38
+ flip() {
39
+ return this.addMutator(flipArrayMutator);
40
+ }
41
+ /** Reverse array order (alias) */
42
+ reverse() {
43
+ return this.addMutator(flipArrayMutator);
44
+ }
45
+ /** Make it has only unique values */
46
+ onlyUnique() {
47
+ return this.addMutator(uniqueArrayMutator);
48
+ }
49
+ /** Sort array */
50
+ sort(direction = "asc", key) {
51
+ return this.addMutator(sortArrayMutator, {
52
+ direction,
53
+ key
54
+ });
55
+ }
56
+ /** Array length must be greater than the given length */
57
+ minLength(length, errorMessage) {
58
+ return this.addRule(minLengthRule, errorMessage, { minLength: length });
59
+ }
60
+ /** Array length must be less than the given length */
61
+ maxLength(length, errorMessage) {
62
+ return this.addRule(maxLengthRule, errorMessage, { maxLength: length });
63
+ }
64
+ /** Array length must be of the given length */
65
+ length(length, errorMessage) {
66
+ return this.addRule(lengthRule, errorMessage, { length });
67
+ }
68
+ /**
69
+ * Array length must be between min and max (inclusive)
70
+ *
71
+ * @param min - Minimum length (inclusive)
72
+ * @param max - Maximum length (inclusive)
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * v.array(v.string()).between(1, 10) // Array must have 1 to 10 items
77
+ * v.array(v.number()).lengthBetween(5, 20) // Same using alias
78
+ * ```
79
+ *
80
+ * @category Validation Rule
81
+ */
82
+ between(min, max, errorMessage) {
83
+ return this.addRule(betweenLengthRule, errorMessage, {
84
+ minLength: min,
85
+ maxLength: max
86
+ });
87
+ }
88
+ /**
89
+ * Alias for between() - array length between min and max
90
+ */
91
+ lengthBetween(min, max, errorMessage) {
92
+ return this.between(min, max, errorMessage);
93
+ }
94
+ /** Array must have unique values */
95
+ unique(errorMessage) {
96
+ return this.addRule(uniqueArrayRule, errorMessage);
97
+ }
98
+ /** Array must be sorted */
99
+ sorted(direction = "asc", errorMessage) {
100
+ return this.addRule(sortedArrayRule, errorMessage, { direction });
101
+ }
102
+ /** Mutate the data */
103
+ mutate(data, context) {
104
+ if (!Array.isArray(data)) return data;
105
+ return super.mutate([...data], context);
106
+ }
107
+ /** Validate array
108
+ *
109
+ * Absent input (and absent without `.default()`) propagates as `data: undefined`
110
+ * so the parent ObjectValidator can omit the key. Without this, optional array
111
+ * fields would silently materialise as `[]` in the validated output.
112
+ */
113
+ async validate(data, context) {
114
+ const valueForRules = data ?? this.getDefaultValue();
115
+ const mutatedData = await this.mutate(valueForRules, context);
116
+ const result = await super.validate(data, context);
117
+ if (result.isValid === false) return result;
118
+ if (mutatedData === void 0 || mutatedData === null) return result;
119
+ if (!Array.isArray(mutatedData)) return result;
120
+ const errors = [];
121
+ const validationPromises = mutatedData.map(async (value, index) => {
122
+ const childContext = {
123
+ ...context,
124
+ parent: mutatedData,
125
+ value,
126
+ key: index.toString(),
127
+ path: setKeyPath(context.path, index.toString())
128
+ };
129
+ const childResult = await this.validator.validate(value, childContext);
130
+ mutatedData[index] = childResult.data;
131
+ if (childResult.isValid === false) errors.push(...childResult.errors);
132
+ });
133
+ await Promise.all(validationPromises);
134
+ return {
135
+ isValid: errors.length === 0,
136
+ errors,
137
+ data: await this.startTransformationPipeline(mutatedData, context)
138
+ };
139
+ }
140
+ /**
141
+ * @inheritdoc
142
+ *
143
+ * Recursively generates JSON Schema for the array items.
144
+ *
145
+ * @example
146
+ * ```ts
147
+ * v.array(v.string().min(1)).minLength(1).toJsonSchema("draft-2020-12")
148
+ * // → { type: "array", items: { type: "string", minLength: 1 }, minItems: 1 }
149
+ * ```
150
+ */
151
+ toJsonSchema(target = "draft-2020-12") {
152
+ const schema = {
153
+ type: "array",
154
+ items: this.validator.toJsonSchema(target)
155
+ };
156
+ const minOpts = getRuleOptions(this.rules, "minLength");
157
+ if (minOpts?.minLength !== void 0) schema.minItems = minOpts.minLength;
158
+ const maxOpts = getRuleOptions(this.rules, "maxLength");
159
+ if (maxOpts?.maxLength !== void 0) schema.maxItems = maxOpts.maxLength;
160
+ const betweenOpts = getRuleOptions(this.rules, "betweenLength");
161
+ if (betweenOpts) {
162
+ if (betweenOpts.minLength !== void 0) schema.minItems = betweenOpts.minLength;
163
+ if (betweenOpts.maxLength !== void 0) schema.maxItems = betweenOpts.maxLength;
164
+ }
165
+ const lengthOpts = getRuleOptions(this.rules, "length");
166
+ if (lengthOpts?.length !== void 0) {
167
+ schema.minItems = lengthOpts.length;
168
+ schema.maxItems = lengthOpts.length;
169
+ }
170
+ if (this.isNullable) applyNullable(schema, target);
171
+ return schema;
172
+ }
173
+ };
174
+
175
+ //#endregion
176
+ export { ArrayValidator };
177
+ //# sourceMappingURL=array-validator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-validator.mjs","names":[],"sources":["../../../../../../../../../seal/src/validators/array-validator.ts"],"sourcesContent":["import { setKeyPath } from \"../helpers\";\r\nimport { flipArrayMutator, sortArrayMutator, uniqueArrayMutator } from \"../mutators\";\r\nimport {\r\n arrayRule,\r\n betweenLengthRule,\r\n lengthRule,\r\n maxLengthRule,\r\n minLengthRule,\r\n sortedArrayRule,\r\n uniqueArrayRule,\r\n} from \"../rules\";\r\nimport type { SchemaContext, ValidationResult } from \"../types\";\r\nimport { BaseValidator } from \"./base-validator\";\r\nimport { applyNullable, getRuleOptions } from \"../standard-schema/json-schema\";\r\nimport type { JsonSchemaResult, JsonSchemaTarget } from \"../standard-schema/json-schema\";\r\n\r\n/**\r\n * Array validator class\r\n */\r\nexport class ArrayValidator extends BaseValidator {\r\n public constructor(\r\n public validator: BaseValidator,\r\n errorMessage?: string,\r\n ) {\r\n super();\r\n this.addMutableRule(arrayRule, errorMessage);\r\n }\r\n\r\n /**\r\n * Check if value is an array type\r\n */\r\n public matchesType(value: any): boolean {\r\n return Array.isArray(value);\r\n }\r\n\r\n /**\r\n * Clone the validator\r\n */\r\n public override clone(): this {\r\n const cloned = super.clone();\r\n\r\n cloned.validator = this.validator.clone();\r\n\r\n return cloned;\r\n }\r\n\r\n /** Reverse array order */\r\n public flip() {\r\n return this.addMutator(flipArrayMutator);\r\n }\r\n\r\n /** Reverse array order (alias) */\r\n public reverse() {\r\n return this.addMutator(flipArrayMutator);\r\n }\r\n\r\n /** Make it has only unique values */\r\n public onlyUnique() {\r\n return this.addMutator(uniqueArrayMutator);\r\n }\r\n\r\n /** Sort array */\r\n public sort(direction: \"asc\" | \"desc\" = \"asc\", key?: string) {\r\n return this.addMutator(sortArrayMutator, { direction, key });\r\n }\r\n\r\n /** Array length must be greater than the given length */\r\n public minLength(length: number, errorMessage?: string) {\r\n return this.addRule(minLengthRule, errorMessage, { minLength: length });\r\n }\r\n\r\n /** Array length must be less than the given length */\r\n public maxLength(length: number, errorMessage?: string) {\r\n return this.addRule(maxLengthRule, errorMessage, { maxLength: length });\r\n }\r\n\r\n /** Array length must be of the given length */\r\n public length(length: number, errorMessage?: string) {\r\n return this.addRule(lengthRule, errorMessage, { length });\r\n }\r\n\r\n /**\r\n * Array length must be between min and max (inclusive)\r\n *\r\n * @param min - Minimum length (inclusive)\r\n * @param max - Maximum length (inclusive)\r\n *\r\n * @example\r\n * ```ts\r\n * v.array(v.string()).between(1, 10) // Array must have 1 to 10 items\r\n * v.array(v.number()).lengthBetween(5, 20) // Same using alias\r\n * ```\r\n *\r\n * @category Validation Rule\r\n */\r\n public between(min: number, max: number, errorMessage?: string) {\r\n return this.addRule(betweenLengthRule, errorMessage, {\r\n minLength: min,\r\n maxLength: max,\r\n });\r\n }\r\n\r\n /**\r\n * Alias for between() - array length between min and max\r\n */\r\n public lengthBetween(min: number, max: number, errorMessage?: string) {\r\n return this.between(min, max, errorMessage);\r\n }\r\n\r\n /** Array must have unique values */\r\n public unique(errorMessage?: string) {\r\n return this.addRule(uniqueArrayRule, errorMessage);\r\n }\r\n\r\n /** Array must be sorted */\r\n public sorted(direction: \"asc\" | \"desc\" = \"asc\", errorMessage?: string) {\r\n return this.addRule(sortedArrayRule, errorMessage, { direction });\r\n }\r\n\r\n /** Mutate the data */\r\n public mutate(data: any, context: SchemaContext) {\r\n if (!Array.isArray(data)) return data;\r\n return super.mutate([...data], context);\r\n }\r\n\r\n /** Validate array\r\n *\r\n * Absent input (and absent without `.default()`) propagates as `data: undefined`\r\n * so the parent ObjectValidator can omit the key. Without this, optional array\r\n * fields would silently materialise as `[]` in the validated output.\r\n */\r\n public async validate(data: any, context: SchemaContext): Promise<ValidationResult> {\r\n // Apply default when absent, then mutate. Mirrors BaseValidator's\r\n // `valueForRules = data ?? this.getDefaultValue()` so `.default([...])`\r\n // works on arrays too.\r\n const valueForRules = data ?? this.getDefaultValue();\r\n const mutatedData = await this.mutate(valueForRules, context);\r\n\r\n const result = await super.validate(data, context);\r\n\r\n if (result.isValid === false) return result;\r\n\r\n // Nothing to iterate for absent (no default) or null (nullable) inputs —\r\n // propagate so the parent ObjectValidator can omit the key.\r\n if (mutatedData === undefined || mutatedData === null) return result;\r\n\r\n // Defensive: type rule (arrayRule) should have failed for non-arrays.\r\n if (!Array.isArray(mutatedData)) return result;\r\n\r\n const errors: ValidationResult[\"errors\"] = [];\r\n\r\n // Validate all items in parallel (consistent with ObjectValidator)\r\n const validationPromises = mutatedData.map(async (value: any, index: number) => {\r\n const childContext: SchemaContext = {\r\n ...context,\r\n parent: mutatedData,\r\n value,\r\n key: index.toString(),\r\n path: setKeyPath(context.path, index.toString()),\r\n };\r\n\r\n const childResult = await this.validator.validate(value, childContext);\r\n\r\n // Update mutated data with validated result\r\n mutatedData[index] = childResult.data;\r\n\r\n // Collect errors from this element\r\n if (childResult.isValid === false) {\r\n errors.push(...childResult.errors);\r\n }\r\n });\r\n\r\n await Promise.all(validationPromises);\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors,\r\n data: await this.startTransformationPipeline(mutatedData, context),\r\n };\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n *\r\n * Recursively generates JSON Schema for the array items.\r\n *\r\n * @example\r\n * ```ts\r\n * v.array(v.string().min(1)).minLength(1).toJsonSchema(\"draft-2020-12\")\r\n * // → { type: \"array\", items: { type: \"string\", minLength: 1 }, minItems: 1 }\r\n * ```\r\n */\r\n public override toJsonSchema(target: JsonSchemaTarget = \"draft-2020-12\"): JsonSchemaResult {\r\n const schema: JsonSchemaResult = {\r\n type: \"array\",\r\n items: this.validator.toJsonSchema(target),\r\n };\r\n\r\n const minOpts = getRuleOptions(this.rules, \"minLength\");\r\n if (minOpts?.minLength !== undefined) schema.minItems = minOpts.minLength;\r\n\r\n const maxOpts = getRuleOptions(this.rules, \"maxLength\");\r\n if (maxOpts?.maxLength !== undefined) schema.maxItems = maxOpts.maxLength;\r\n\r\n const betweenOpts = getRuleOptions(this.rules, \"betweenLength\");\r\n if (betweenOpts) {\r\n if (betweenOpts.minLength !== undefined) schema.minItems = betweenOpts.minLength;\r\n if (betweenOpts.maxLength !== undefined) schema.maxItems = betweenOpts.maxLength;\r\n }\r\n\r\n const lengthOpts = getRuleOptions(this.rules, \"length\");\r\n if (lengthOpts?.length !== undefined) {\r\n schema.minItems = lengthOpts.length;\r\n schema.maxItems = lengthOpts.length;\r\n }\r\n\r\n if (this.isNullable) applyNullable(schema, target);\r\n\r\n return schema;\r\n }\r\n}\r\n"],"mappings":"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"}