@warlock.js/notifications 5.18.0 → 5.19.1

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 (298) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/cjs/{esm-CvfvkTHr.cjs → esm-BxeBV3ce.cjs} +185 -175
  3. package/cjs/esm-BxeBV3ce.cjs.map +1 -0
  4. package/cjs/index.cjs +1 -1
  5. package/cjs/rabbitmq-driver-ii7OCEmF.cjs +3 -0
  6. package/esm/index.d.mts +4 -4
  7. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/broker-registry.mjs +1 -1
  8. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/broker-registry.mjs.map +1 -1
  9. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/broker.mjs +1 -1
  10. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/broker.mjs.map +1 -1
  11. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/decorators/consumable.mjs +1 -1
  12. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/decorators/consumable.mjs.map +1 -1
  13. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/rabbitmq-channel.mjs +3 -3
  14. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/rabbitmq-channel.mjs.map +1 -1
  15. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/rabbitmq-driver.mjs +1 -1
  16. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/rabbitmq-driver.mjs.map +1 -1
  17. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/event-consumer.mjs +3 -3
  18. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/event-consumer.mjs.map +1 -1
  19. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/event-message.mjs +1 -1
  20. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/event-message.mjs.map +1 -1
  21. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/prepare-consumer-subscription.mjs +1 -1
  22. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/prepare-consumer-subscription.mjs.map +1 -1
  23. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/use-case-broadcast.mjs +1 -1
  24. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/use-case-broadcast.mjs.map +1 -1
  25. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/utils/connect-to-broker.mjs +1 -1
  26. package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/utils/connect-to-broker.mjs.map +1 -1
  27. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/config.mjs +1 -1
  28. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/config.mjs.map +1 -1
  29. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/factory/validate.mjs +1 -1
  30. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/factory/validate.mjs.map +1 -1
  31. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/factory/validators.mjs +5 -4
  32. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/factory/validators.mjs.map +1 -0
  33. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/date-helpers.mjs +1 -1
  34. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/date-helpers.mjs.map +1 -1
  35. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/get-field-value.mjs +1 -1
  36. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/get-field-value.mjs.map +1 -1
  37. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/is-empty-value.mjs +1 -1
  38. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/is-empty-value.mjs.map +1 -1
  39. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/path-helpers.mjs +1 -1
  40. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/path-helpers.mjs.map +1 -1
  41. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/validation-helpers.mjs +2 -2
  42. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/validation-helpers.mjs.map +1 -1
  43. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/index.mjs +1 -1
  44. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/array-mutators.mjs +1 -1
  45. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/array-mutators.mjs.map +1 -1
  46. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/boolean-mutators.mjs +1 -1
  47. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/boolean-mutators.mjs.map +1 -1
  48. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/date-mutators.mjs +1 -1
  49. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/date-mutators.mjs.map +1 -1
  50. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/number-mutators.mjs +1 -1
  51. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/number-mutators.mjs.map +1 -1
  52. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/object-mutators.mjs +1 -1
  53. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/object-mutators.mjs.map +1 -1
  54. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/scalar-mutators.mjs +1 -1
  55. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/scalar-mutators.mjs.map +1 -1
  56. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/string-mutators.mjs +1 -1
  57. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/string-mutators.mjs.map +1 -1
  58. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/object.mjs +13 -0
  59. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/object.mjs.map +1 -0
  60. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/array/array-rules.mjs +1 -1
  61. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/array/array-rules.mjs.map +1 -1
  62. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/color/color-rules.mjs +1 -1
  63. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/color/color-rules.mjs.map +1 -1
  64. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/enum.mjs +1 -1
  65. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/enum.mjs.map +1 -1
  66. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/equals-field-rules.mjs +2 -2
  67. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/equals-field-rules.mjs.map +1 -1
  68. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/instanceof.mjs +1 -1
  69. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/instanceof.mjs.map +1 -1
  70. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/literal.mjs +1 -1
  71. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/literal.mjs.map +1 -1
  72. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/type-rules.mjs +1 -1
  73. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/type-rules.mjs.map +1 -1
  74. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/unknown-key.mjs +1 -1
  75. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/unknown-key.mjs.map +1 -1
  76. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/forbidden-if-rules.mjs +2 -2
  77. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/forbidden-if-rules.mjs.map +1 -1
  78. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-if-rules.mjs +2 -2
  79. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-if-rules.mjs.map +1 -1
  80. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-unless-rules.mjs +2 -2
  81. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-unless-rules.mjs.map +1 -1
  82. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-with-rules.mjs +2 -2
  83. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-with-rules.mjs.map +1 -1
  84. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-without-rules.mjs +2 -2
  85. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/present-without-rules.mjs.map +1 -1
  86. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-if-rules.mjs +2 -2
  87. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-if-rules.mjs.map +1 -1
  88. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-unless-rules.mjs +2 -2
  89. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-unless-rules.mjs.map +1 -1
  90. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-when-rule.mjs +1 -1
  91. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-when-rule.mjs.map +1 -1
  92. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-with-rules.mjs +2 -2
  93. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-with-rules.mjs.map +1 -1
  94. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-without-rules.mjs +2 -2
  95. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/required-without-rules.mjs.map +1 -1
  96. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/equal.mjs +1 -1
  97. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/equal.mjs.map +1 -1
  98. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/forbidden.mjs +1 -1
  99. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/forbidden.mjs.map +1 -1
  100. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/required.mjs +1 -1
  101. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/required.mjs.map +1 -1
  102. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/union.mjs +1 -1
  103. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/union.mjs.map +1 -1
  104. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/when.mjs +2 -2
  105. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/when.mjs.map +1 -1
  106. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-comparison-rules.mjs +1 -1
  107. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-comparison-rules.mjs.map +1 -1
  108. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-day-rules.mjs +1 -1
  109. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-day-rules.mjs.map +1 -1
  110. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-field-comparison-rules.mjs +2 -2
  111. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-field-comparison-rules.mjs.map +1 -1
  112. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-period-rules.mjs +2 -2
  113. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-period-rules.mjs.map +1 -1
  114. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-relative-rules.mjs +1 -1
  115. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-relative-rules.mjs.map +1 -1
  116. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-special-rules.mjs +1 -1
  117. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date-special-rules.mjs.map +1 -1
  118. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date.mjs +2 -2
  119. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/date.mjs.map +1 -1
  120. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/length/length-rules.mjs +1 -1
  121. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/length/length-rules.mjs.map +1 -1
  122. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/number/number-rules.mjs +2 -2
  123. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/number/number-rules.mjs.map +1 -1
  124. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/scalar/accepted-rule.mjs +2 -2
  125. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/scalar/accepted-rule.mjs.map +1 -1
  126. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/scalar/declined-rule.mjs +2 -2
  127. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/scalar/declined-rule.mjs.map +1 -1
  128. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/alpha.mjs +1 -1
  129. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/alpha.mjs.map +1 -1
  130. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/credit-card.mjs +1 -1
  131. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/credit-card.mjs.map +1 -1
  132. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/email.mjs +1 -1
  133. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/email.mjs.map +1 -1
  134. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/id-formats.mjs +1 -1
  135. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/id-formats.mjs.map +1 -1
  136. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/ip.mjs +1 -1
  137. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/ip.mjs.map +1 -1
  138. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/pattern.mjs +1 -1
  139. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/pattern.mjs.map +1 -1
  140. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/string-comparison.mjs +1 -1
  141. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/string-comparison.mjs.map +1 -1
  142. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/strong-password-rule.mjs +1 -1
  143. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/strong-password-rule.mjs.map +1 -1
  144. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/url.mjs +1 -1
  145. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/url.mjs.map +1 -1
  146. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/without-whitespace.mjs +1 -1
  147. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/without-whitespace.mjs.map +1 -1
  148. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/json-schema.d.mts +1 -1
  149. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/json-schema.d.mts.map +1 -1
  150. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/json-schema.mjs +1 -1
  151. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/json-schema.mjs.map +1 -1
  152. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/map-result.mjs +1 -1
  153. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/map-result.mjs.map +1 -1
  154. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/types.d.mts +1 -1
  155. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/standard-schema/types.d.mts.map +1 -1
  156. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/string.mjs +13 -0
  157. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/string.mjs.map +1 -0
  158. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/conditional-types.d.mts +1 -1
  159. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/conditional-types.d.mts.map +1 -1
  160. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/context-types.d.mts +3 -2
  161. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/types/context-types.d.mts.map +1 -0
  162. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/data-transformer-types.d.mts +1 -1
  163. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/data-transformer-types.d.mts.map +1 -1
  164. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/date-types.mjs +1 -1
  165. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/date-types.mjs.map +1 -1
  166. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/mutator-types.d.mts +1 -1
  167. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/mutator-types.d.mts.map +1 -1
  168. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/result-types.d.mts +1 -1
  169. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/result-types.d.mts.map +1 -1
  170. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/rule-types.d.mts +1 -1
  171. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/rule-types.d.mts.map +1 -1
  172. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/schema-types.d.mts +1 -1
  173. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/types/schema-types.d.mts.map +1 -1
  174. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/any-validator.mjs +1 -1
  175. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/any-validator.mjs.map +1 -1
  176. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/array-validator.mjs +1 -1
  177. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/array-validator.mjs.map +1 -1
  178. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/base-validator.d.mts +1 -1
  179. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/base-validator.d.mts.map +1 -0
  180. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/base-validator.mjs +2 -3
  181. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/base-validator.mjs.map +1 -0
  182. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/boolean-validator.mjs +1 -1
  183. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/boolean-validator.mjs.map +1 -1
  184. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/computed-validator.mjs +1 -1
  185. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/computed-validator.mjs.map +1 -1
  186. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/date-validator.mjs +1 -1
  187. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/date-validator.mjs.map +1 -1
  188. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/discriminated-union-validator.mjs +1 -1
  189. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/discriminated-union-validator.mjs.map +1 -1
  190. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/float-validator.mjs +1 -1
  191. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/float-validator.mjs.map +1 -1
  192. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/instanceof-validator.mjs +1 -1
  193. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/instanceof-validator.mjs.map +1 -1
  194. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/int-validator.mjs +1 -1
  195. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/int-validator.mjs.map +1 -1
  196. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/lazy-validator.mjs +1 -1
  197. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/lazy-validator.mjs.map +1 -1
  198. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/literal-validator.mjs +1 -1
  199. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/literal-validator.mjs.map +1 -1
  200. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/managed-validator.mjs +1 -1
  201. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/managed-validator.mjs.map +1 -1
  202. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/equality-conditional-methods.d.mts +1 -1
  203. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/methods/equality-conditional-methods.d.mts.map +1 -0
  204. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/equality-conditional-methods.mjs +1 -1
  205. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/equality-conditional-methods.mjs.map +1 -1
  206. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/forbidden-methods.d.mts +1 -1
  207. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/forbidden-methods.d.mts.map +1 -1
  208. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/forbidden-methods.mjs +1 -1
  209. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/forbidden-methods.mjs.map +1 -1
  210. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/present-methods.d.mts +1 -1
  211. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/present-methods.d.mts.map +1 -1
  212. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/present-methods.mjs +1 -1
  213. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/present-methods.mjs.map +1 -1
  214. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/required-methods.d.mts +1 -1
  215. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/methods/required-methods.d.mts.map +1 -0
  216. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/required-methods.mjs +1 -1
  217. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/methods/required-methods.mjs.map +1 -1
  218. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/number-validator.mjs +1 -1
  219. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/number-validator.mjs.map +1 -1
  220. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/numeric-validator.mjs +1 -1
  221. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/numeric-validator.mjs.map +1 -1
  222. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/object-validator.mjs +1 -4
  223. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/object-validator.mjs.map +1 -0
  224. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/primitive-validator.mjs +1 -2
  225. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/primitive-validator.mjs.map +1 -0
  226. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/record-validator.mjs +1 -1
  227. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/record-validator.mjs.map +1 -1
  228. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/scalar-validator.mjs +1 -1
  229. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/scalar-validator.mjs.map +1 -1
  230. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/string-validator.mjs +3 -3
  231. package/esm/node_modules/.pnpm/@warlock.js_seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/string-validator.mjs.map +1 -0
  232. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/tuple-validator.mjs +1 -1
  233. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/tuple-validator.mjs.map +1 -1
  234. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/union-validator.mjs +1 -1
  235. package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/union-validator.mjs.map +1 -1
  236. package/esm/queue/load-herald.mjs +1 -1
  237. package/llms-full.txt +9 -9
  238. package/llms.txt +9 -9
  239. package/package.json +7 -7
  240. package/skills/configure-notifications/SKILL.md +1 -1
  241. package/skills/define-channel/SKILL.md +1 -1
  242. package/skills/define-notification/SKILL.md +1 -1
  243. package/skills/notifications-basics/SKILL.md +1 -1
  244. package/skills/observe-notifications/SKILL.md +1 -1
  245. package/skills/queue-notifications/SKILL.md +1 -1
  246. package/skills/send-ad-hoc/SKILL.md +1 -1
  247. package/skills/use-in-app/SKILL.md +1 -1
  248. package/skills/write-notification-migration/SKILL.md +1 -1
  249. package/cjs/esm-CvfvkTHr.cjs.map +0 -1
  250. package/cjs/rabbitmq-driver-BGjvRKGq.cjs +0 -3
  251. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/factory/validators.mjs.map +0 -1
  252. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/types/context-types.d.mts.map +0 -1
  253. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/base-validator.d.mts.map +0 -1
  254. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/base-validator.mjs.map +0 -1
  255. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/methods/equality-conditional-methods.d.mts.map +0 -1
  256. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/methods/required-methods.d.mts.map +0 -1
  257. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/object-validator.mjs.map +0 -1
  258. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/primitive-validator.mjs.map +0 -1
  259. package/esm/node_modules/.pnpm/@warlock.js_seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/string-validator.mjs.map +0 -1
  260. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/broker-registry.d.mts +0 -0
  261. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/broker.d.mts +0 -0
  262. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/communicators/index.mjs +0 -0
  263. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/contracts/broker-driver.contract.d.mts +0 -0
  264. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/contracts/channel.contract.d.mts +0 -0
  265. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/decorators/index.mjs +0 -0
  266. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/index.mjs +0 -0
  267. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/index.mjs +0 -0
  268. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/rabbitmq-channel.d.mts +0 -0
  269. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/drivers/rabbitmq/rabbitmq-driver.d.mts +0 -0
  270. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/index.d.mts +0 -0
  271. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/index.mjs +0 -0
  272. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/event-consumer.d.mts +0 -0
  273. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/event-message.d.mts +0 -0
  274. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/message-managers/index.mjs +0 -0
  275. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/types/channel.types.d.mts +0 -0
  276. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/types/registry.types.d.mts +0 -0
  277. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/utils/connect-to-broker.d.mts +0 -0
  278. /package/esm/node_modules/.pnpm/{@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64 → @warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280}/node_modules/@warlock.js/herald/esm/utils/index.mjs +0 -0
  279. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/factory/index.mjs +0 -0
  280. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/helpers/index.mjs +0 -0
  281. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/index.d.mts +0 -0
  282. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/mutators/index.mjs +0 -0
  283. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/array/index.mjs +0 -0
  284. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/color/index.mjs +0 -0
  285. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/common/index.mjs +0 -0
  286. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/conditional/index.mjs +0 -0
  287. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/core/index.mjs +0 -0
  288. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/date/index.mjs +0 -0
  289. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/file/dimensions.mjs +0 -0
  290. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/file/file-size.mjs +0 -0
  291. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/file/index.mjs +0 -0
  292. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/index.mjs +0 -0
  293. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/length/index.mjs +0 -0
  294. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/number/index.mjs +0 -0
  295. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/scalar/index.mjs +0 -0
  296. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/index.mjs +0 -0
  297. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/rules/string/matches.mjs +0 -0
  298. /package/esm/node_modules/.pnpm/{@warlock.js_seal@5.16.0 → @warlock.js_seal@5.18.0}/node_modules/@warlock.js/seal/esm/validators/index.mjs +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitive-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/primitive-validator.mjs"],"sourcesContent":["import { BaseValidator } from \"./base-validator.mjs\";\nimport { allowedValuesRule, enumRule, inRule, notAllowedValuesRule } from \"../rules/common/enum.mjs\";\n\n//#region ../seal/src/validators/primitive-validator.ts\n/**\n* Abstract base validator for primitive-typed fields (string, number, boolean).\n*\n* Provides value-membership rules that are meaningful for any single primitive value\n* but not for complex structures (object, array).\n*\n* Do NOT expose this on the `v` factory — it is an inheritance-only base class.\n*\n* Hierarchy:\n* BaseValidator\n* └── PrimitiveValidator ← enum, in, oneOf, allowsOnly, forbids, notIn\n* ├── StringValidator\n* ├── NumberValidator\n* │ └── FloatValidator\n* ├── BooleanValidator\n* └── ScalarValidator (extends PrimitiveValidator, adds asNumber/asString/accepted/declined)\n*\n* @example\n* class MyValidator extends PrimitiveValidator {\n* // inherits: in(), forbids(), enum(), oneOf(), allowsOnly(), notIn()\n* }\n*/\nvar PrimitiveValidator = class extends BaseValidator {\n\t/**\n\t* Value must be one of the enum's values\n\t*\n\t* @example\n\t* v.string().enum(Direction) // Direction is a TS enum\n\t*/\n\tenum(values, errorMessage) {\n\t\treturn this.addRule(enumRule, errorMessage, { enum: Object.values(values) });\n\t}\n\t/**\n\t* Value must be one of the given values\n\t*\n\t* @example\n\t* v.string().in([\"admin\", \"user\", \"guest\"])\n\t* v.number().in([1, 2, 3])\n\t*/\n\tin(values, errorMessage) {\n\t\treturn this.addRule(inRule, errorMessage, { values });\n\t}\n\t/**\n\t* Alias for `in()`\n\t*\n\t* @example\n\t* v.string().oneOf([\"active\", \"inactive\"])\n\t*/\n\toneOf(values, errorMessage) {\n\t\treturn this.in(values, errorMessage);\n\t}\n\t/**\n\t* Value must be one of the allowed values (stricter variant)\n\t*\n\t* @example\n\t* v.string().allowsOnly([\"yes\", \"no\"])\n\t*/\n\tallowsOnly(values, errorMessage) {\n\t\treturn this.addRule(allowedValuesRule, errorMessage, { allowedValues: values });\n\t}\n\t/**\n\t* Value must NOT be one of the given values\n\t*\n\t* @example\n\t* v.string().forbids([\"banned\", \"blacklisted\"])\n\t* v.number().forbids([0, -1])\n\t*/\n\tforbids(values, errorMessage) {\n\t\treturn this.addRule(notAllowedValuesRule, errorMessage, { notAllowedValues: values });\n\t}\n\t/**\n\t* Alias for `forbids()`\n\t*\n\t* @example\n\t* v.string().notIn([\"OK\", \"NOT OK\"])\n\t*/\n\tnotIn(values, errorMessage) {\n\t\treturn this.forbids(values, errorMessage);\n\t}\n};\n\n//#endregion\nexport { PrimitiveValidator };\n//# sourceMappingURL=primitive-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,IAAI,qBAAqB,cAAc,cAAc;;;;;;;CAOpD,KAAK,QAAQ,cAAc;EAC1B,OAAO,KAAK,QAAQ,UAAU,cAAc,EAAE,MAAM,OAAO,OAAO,MAAM,EAAE,CAAC;CAC5E;;;;;;;;CAQA,GAAG,QAAQ,cAAc;EACxB,OAAO,KAAK,QAAQ,QAAQ,cAAc,EAAE,OAAO,CAAC;CACrD;;;;;;;CAOA,MAAM,QAAQ,cAAc;EAC3B,OAAO,KAAK,GAAG,QAAQ,YAAY;CACpC;;;;;;;CAOA,WAAW,QAAQ,cAAc;EAChC,OAAO,KAAK,QAAQ,mBAAmB,cAAc,EAAE,eAAe,OAAO,CAAC;CAC/E;;;;;;;;CAQA,QAAQ,QAAQ,cAAc;EAC7B,OAAO,KAAK,QAAQ,sBAAsB,cAAc,EAAE,kBAAkB,OAAO,CAAC;CACrF;;;;;;;CAOA,MAAM,QAAQ,cAAc;EAC3B,OAAO,KAAK,QAAQ,QAAQ,YAAY;CACzC;AACD"}
@@ -6,7 +6,7 @@ import { BaseValidator } from "./base-validator.mjs";
6
6
  import { objectRule, plainObjectRule } from "../rules/common/type-rules.mjs";
7
7
  import "../rules/index.mjs";
8
8
 
9
- //#region ../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/record-validator.mjs
9
+ //#region ../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/record-validator.mjs
10
10
  /**
11
11
  * Record validator class - validates objects with dynamic keys and consistent value types
12
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"record-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/record-validator.mjs"],"sourcesContent":["import { applyNullable } from \"../standard-schema/json-schema.mjs\";\nimport { setKeyPath } from \"../helpers/path-helpers.mjs\";\nimport \"../helpers/index.mjs\";\nimport { BaseValidator } from \"./base-validator.mjs\";\nimport { objectRule, plainObjectRule } from \"../rules/common/type-rules.mjs\";\nimport \"../rules/index.mjs\";\nimport { isPlainObject } from \"@mongez/supportive-is\";\n\n//#region ../seal/src/validators/record-validator.ts\n/**\n* Record validator class - validates objects with dynamic keys and consistent value types\n*\n* @example\n* ```ts\n* // Translations object\n* v.record(v.string())\n* // Valid: { en: \"Hello\", ar: \"مرحبا\", fr: \"Bonjour\" }\n*\n* // User preferences\n* v.record(v.union([v.string(), v.number(), v.boolean()]))\n* // Valid: { theme: \"dark\", fontSize: 16, notifications: true }\n* ```\n*/\nvar RecordValidator = class extends BaseValidator {\n\tconstructor(valueValidator, errorMessage) {\n\t\tsuper();\n\t\tthis.valueValidator = valueValidator;\n\t\tthis.addMutableRule(objectRule, errorMessage);\n\t}\n\t/**\n\t* Validate it as plain object\n\t*/\n\tplainObject(errorMessage) {\n\t\treturn this.addRule(plainObjectRule, errorMessage);\n\t}\n\t/**\n\t* Check if value is a plain object type\n\t*/\n\tmatchesType(value) {\n\t\treturn isPlainObject(value);\n\t}\n\t/**\n\t* Clone the validator\n\t*/\n\tclone() {\n\t\tconst cloned = super.clone();\n\t\tcloned.valueValidator = this.valueValidator.clone();\n\t\treturn cloned;\n\t}\n\t/**\n\t* Validate record - iterate all keys and validate each value\n\t*\n\t* Absent input (and absent without `.default()`) propagates as `data: undefined`\n\t* so the parent ObjectValidator can omit the key. Without this, optional record\n\t* fields would silently materialise as `{}` in the validated output.\n\t*/\n\tasync validate(data, context) {\n\t\tconst valueForRules = data ?? this.getDefaultValue();\n\t\tconst mutatedData = await this.mutate(valueForRules, context);\n\t\tconst result = await super.validate(data, context);\n\t\tif (result.isValid === false) return result;\n\t\tif (mutatedData === void 0 || mutatedData === null) return result;\n\t\tif (!isPlainObject(mutatedData)) return result;\n\t\tconst errors = [];\n\t\tconst validationPromises = Object.keys(mutatedData).map(async (key) => {\n\t\t\tconst childContext = {\n\t\t\t\t...context,\n\t\t\t\tparent: mutatedData,\n\t\t\t\tvalue: mutatedData[key],\n\t\t\t\tkey,\n\t\t\t\tpath: setKeyPath(context.path, key)\n\t\t\t};\n\t\t\tconst childResult = await this.valueValidator.validate(mutatedData[key], childContext);\n\t\t\tmutatedData[key] = childResult.data;\n\t\t\tif (childResult.isValid === false) errors.push(...childResult.errors);\n\t\t});\n\t\tawait Promise.all(validationPromises);\n\t\treturn {\n\t\t\tisValid: errors.length === 0,\n\t\t\terrors,\n\t\t\tdata: await this.startTransformationPipeline(mutatedData, context)\n\t\t};\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Generates `{ type: \"object\", additionalProperties: <valueSchema> }` —\n\t* the standard JSON Schema for a dictionary/map with homogeneous values.\n\t*\n\t* @example\n\t* ```ts\n\t* v.record(v.string()).toJsonSchema(\"draft-2020-12\")\n\t* // → { type: \"object\", additionalProperties: { type: \"string\" } }\n\t*\n\t* v.record(v.union([v.string(), v.number()])).toJsonSchema(\"draft-2020-12\")\n\t* // → { type: \"object\", additionalProperties: { oneOf: [{ type: \"string\" }, { type: \"number\" }] } }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\tconst schema = {\n\t\t\ttype: \"object\",\n\t\t\tadditionalProperties: this.valueValidator.toJsonSchema(target)\n\t\t};\n\t\tif (this.isNullable) applyNullable(schema, target);\n\t\treturn schema;\n\t}\n};\n\n//#endregion\nexport { RecordValidator };\n//# sourceMappingURL=record-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAI,kBAAkB,cAAc,cAAc;CACjD,YAAY,gBAAgB,cAAc;EACzC,MAAM;EACN,KAAK,iBAAiB;EACtB,KAAK,eAAe,YAAY,YAAY;CAC7C;;;;CAIA,YAAY,cAAc;EACzB,OAAO,KAAK,QAAQ,iBAAiB,YAAY;CAClD;;;;CAIA,YAAY,OAAO;EAClB,OAAO,cAAc,KAAK;CAC3B;;;;CAIA,QAAQ;EACP,MAAM,SAAS,MAAM,MAAM;EAC3B,OAAO,iBAAiB,KAAK,eAAe,MAAM;EAClD,OAAO;CACR;;;;;;;;CAQA,MAAM,SAAS,MAAM,SAAS;EAC7B,MAAM,gBAAgB,QAAQ,KAAK,gBAAgB;EACnD,MAAM,cAAc,MAAM,KAAK,OAAO,eAAe,OAAO;EAC5D,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,OAAO;EACjD,IAAI,OAAO,YAAY,OAAO,OAAO;EACrC,IAAI,gBAAgB,KAAK,KAAK,gBAAgB,MAAM,OAAO;EAC3D,IAAI,CAAC,cAAc,WAAW,GAAG,OAAO;EACxC,MAAM,SAAS,CAAC;EAChB,MAAM,qBAAqB,OAAO,KAAK,WAAW,CAAC,CAAC,IAAI,OAAO,QAAQ;GACtE,MAAM,eAAe;IACpB,GAAG;IACH,QAAQ;IACR,OAAO,YAAY;IACnB;IACA,MAAM,WAAW,QAAQ,MAAM,GAAG;GACnC;GACA,MAAM,cAAc,MAAM,KAAK,eAAe,SAAS,YAAY,MAAM,YAAY;GACrF,YAAY,OAAO,YAAY;GAC/B,IAAI,YAAY,YAAY,OAAO,OAAO,KAAK,GAAG,YAAY,MAAM;EACrE,CAAC;EACD,MAAM,QAAQ,IAAI,kBAAkB;EACpC,OAAO;GACN,SAAS,OAAO,WAAW;GAC3B;GACA,MAAM,MAAM,KAAK,4BAA4B,aAAa,OAAO;EAClE;CACD;;;;;;;;;;;;;;;;CAgBA,aAAa,SAAS,iBAAiB;EACtC,MAAM,SAAS;GACd,MAAM;GACN,sBAAsB,KAAK,eAAe,aAAa,MAAM;EAC9D;EACA,IAAI,KAAK,YAAY,cAAc,QAAQ,MAAM;EACjD,OAAO;CACR;AACD"}
1
+ {"version":3,"file":"record-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/record-validator.mjs"],"sourcesContent":["import { applyNullable } from \"../standard-schema/json-schema.mjs\";\nimport { setKeyPath } from \"../helpers/path-helpers.mjs\";\nimport \"../helpers/index.mjs\";\nimport { BaseValidator } from \"./base-validator.mjs\";\nimport { objectRule, plainObjectRule } from \"../rules/common/type-rules.mjs\";\nimport \"../rules/index.mjs\";\nimport { isPlainObject } from \"@mongez/supportive-is\";\n\n//#region ../seal/src/validators/record-validator.ts\n/**\n* Record validator class - validates objects with dynamic keys and consistent value types\n*\n* @example\n* ```ts\n* // Translations object\n* v.record(v.string())\n* // Valid: { en: \"Hello\", ar: \"مرحبا\", fr: \"Bonjour\" }\n*\n* // User preferences\n* v.record(v.union([v.string(), v.number(), v.boolean()]))\n* // Valid: { theme: \"dark\", fontSize: 16, notifications: true }\n* ```\n*/\nvar RecordValidator = class extends BaseValidator {\n\tconstructor(valueValidator, errorMessage) {\n\t\tsuper();\n\t\tthis.valueValidator = valueValidator;\n\t\tthis.addMutableRule(objectRule, errorMessage);\n\t}\n\t/**\n\t* Validate it as plain object\n\t*/\n\tplainObject(errorMessage) {\n\t\treturn this.addRule(plainObjectRule, errorMessage);\n\t}\n\t/**\n\t* Check if value is a plain object type\n\t*/\n\tmatchesType(value) {\n\t\treturn isPlainObject(value);\n\t}\n\t/**\n\t* Clone the validator\n\t*/\n\tclone() {\n\t\tconst cloned = super.clone();\n\t\tcloned.valueValidator = this.valueValidator.clone();\n\t\treturn cloned;\n\t}\n\t/**\n\t* Validate record - iterate all keys and validate each value\n\t*\n\t* Absent input (and absent without `.default()`) propagates as `data: undefined`\n\t* so the parent ObjectValidator can omit the key. Without this, optional record\n\t* fields would silently materialise as `{}` in the validated output.\n\t*/\n\tasync validate(data, context) {\n\t\tconst valueForRules = data ?? this.getDefaultValue();\n\t\tconst mutatedData = await this.mutate(valueForRules, context);\n\t\tconst result = await super.validate(data, context);\n\t\tif (result.isValid === false) return result;\n\t\tif (mutatedData === void 0 || mutatedData === null) return result;\n\t\tif (!isPlainObject(mutatedData)) return result;\n\t\tconst errors = [];\n\t\tconst validationPromises = Object.keys(mutatedData).map(async (key) => {\n\t\t\tconst childContext = {\n\t\t\t\t...context,\n\t\t\t\tparent: mutatedData,\n\t\t\t\tvalue: mutatedData[key],\n\t\t\t\tkey,\n\t\t\t\tpath: setKeyPath(context.path, key)\n\t\t\t};\n\t\t\tconst childResult = await this.valueValidator.validate(mutatedData[key], childContext);\n\t\t\tmutatedData[key] = childResult.data;\n\t\t\tif (childResult.isValid === false) errors.push(...childResult.errors);\n\t\t});\n\t\tawait Promise.all(validationPromises);\n\t\treturn {\n\t\t\tisValid: errors.length === 0,\n\t\t\terrors,\n\t\t\tdata: await this.startTransformationPipeline(mutatedData, context)\n\t\t};\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Generates `{ type: \"object\", additionalProperties: <valueSchema> }` —\n\t* the standard JSON Schema for a dictionary/map with homogeneous values.\n\t*\n\t* @example\n\t* ```ts\n\t* v.record(v.string()).toJsonSchema(\"draft-2020-12\")\n\t* // → { type: \"object\", additionalProperties: { type: \"string\" } }\n\t*\n\t* v.record(v.union([v.string(), v.number()])).toJsonSchema(\"draft-2020-12\")\n\t* // → { type: \"object\", additionalProperties: { oneOf: [{ type: \"string\" }, { type: \"number\" }] } }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\tconst schema = {\n\t\t\ttype: \"object\",\n\t\t\tadditionalProperties: this.valueValidator.toJsonSchema(target)\n\t\t};\n\t\tif (this.isNullable) applyNullable(schema, target);\n\t\treturn schema;\n\t}\n};\n\n//#endregion\nexport { RecordValidator };\n//# sourceMappingURL=record-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAI,kBAAkB,cAAc,cAAc;CACjD,YAAY,gBAAgB,cAAc;EACzC,MAAM;EACN,KAAK,iBAAiB;EACtB,KAAK,eAAe,YAAY,YAAY;CAC7C;;;;CAIA,YAAY,cAAc;EACzB,OAAO,KAAK,QAAQ,iBAAiB,YAAY;CAClD;;;;CAIA,YAAY,OAAO;EAClB,OAAO,cAAc,KAAK;CAC3B;;;;CAIA,QAAQ;EACP,MAAM,SAAS,MAAM,MAAM;EAC3B,OAAO,iBAAiB,KAAK,eAAe,MAAM;EAClD,OAAO;CACR;;;;;;;;CAQA,MAAM,SAAS,MAAM,SAAS;EAC7B,MAAM,gBAAgB,QAAQ,KAAK,gBAAgB;EACnD,MAAM,cAAc,MAAM,KAAK,OAAO,eAAe,OAAO;EAC5D,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,OAAO;EACjD,IAAI,OAAO,YAAY,OAAO,OAAO;EACrC,IAAI,gBAAgB,KAAK,KAAK,gBAAgB,MAAM,OAAO;EAC3D,IAAI,CAAC,cAAc,WAAW,GAAG,OAAO;EACxC,MAAM,SAAS,CAAC;EAChB,MAAM,qBAAqB,OAAO,KAAK,WAAW,CAAC,CAAC,IAAI,OAAO,QAAQ;GACtE,MAAM,eAAe;IACpB,GAAG;IACH,QAAQ;IACR,OAAO,YAAY;IACnB;IACA,MAAM,WAAW,QAAQ,MAAM,GAAG;GACnC;GACA,MAAM,cAAc,MAAM,KAAK,eAAe,SAAS,YAAY,MAAM,YAAY;GACrF,YAAY,OAAO,YAAY;GAC/B,IAAI,YAAY,YAAY,OAAO,OAAO,KAAK,GAAG,YAAY,MAAM;EACrE,CAAC;EACD,MAAM,QAAQ,IAAI,kBAAkB;EACpC,OAAO;GACN,SAAS,OAAO,WAAW;GAC3B;GACA,MAAM,MAAM,KAAK,4BAA4B,aAAa,OAAO;EAClE;CACD;;;;;;;;;;;;;;;;CAgBA,aAAa,SAAS,iBAAiB;EACtC,MAAM,SAAS;GACd,MAAM;GACN,sBAAsB,KAAK,eAAe,aAAa,MAAM;EAC9D;EACA,IAAI,KAAK,YAAY,cAAc,QAAQ,MAAM;EACjD,OAAO;CACR;AACD"}
@@ -9,7 +9,7 @@ import "../mutators/index.mjs";
9
9
  import { PrimitiveValidator } from "./primitive-validator.mjs";
10
10
  import "../rules/scalar/index.mjs";
11
11
 
12
- //#region ../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/scalar-validator.mjs
12
+ //#region ../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/scalar-validator.mjs
13
13
  /**
14
14
  * Scalar validator class
15
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"scalar-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/scalar-validator.mjs"],"sourcesContent":["import { getRuleOptions } from \"../standard-schema/json-schema.mjs\";\nimport { VALID_RULE, invalidRule } from \"../helpers/validation-helpers.mjs\";\nimport \"../helpers/index.mjs\";\nimport { acceptedIfPresentRule, acceptedIfRequiredRule, acceptedIfRule, acceptedRule, acceptedUnlessRule, acceptedWithoutRule } from \"../rules/scalar/accepted-rule.mjs\";\nimport { declinedIfPresentRule, declinedIfRequiredRule, declinedIfRule, declinedRule, declinedUnlessRule, declinedWithoutRule } from \"../rules/scalar/declined-rule.mjs\";\nimport { numberMutator } from \"../mutators/number-mutators.mjs\";\nimport { stringMutator } from \"../mutators/scalar-mutators.mjs\";\nimport \"../mutators/index.mjs\";\nimport { PrimitiveValidator } from \"./primitive-validator.mjs\";\nimport \"../rules/scalar/index.mjs\";\n\n//#region ../seal/src/validators/scalar-validator.ts\n/**\n* Scalar validator class\n*\n* Core validator for scalar values (string, number, boolean).\n* Extends PrimitiveValidator (inherits enum/in/oneOf/allowsOnly/forbids/notIn)\n* and additionally provides type-coercion mutators and accepted/declined rules.\n*\n* Database methods (unique, exists, etc.) are injected by the framework\n*/\nvar ScalarValidator = class extends PrimitiveValidator {\n\tconstructor(errorMessage) {\n\t\tsuper();\n\t\tthis.addMutableRule({\n\t\t\tname: \"scalar\",\n\t\t\tdefaultErrorMessage: \"The :input must be a scalar value\",\n\t\t\tasync validate(value, context) {\n\t\t\t\tif ([\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"number\",\n\t\t\t\t\t\"boolean\"\n\t\t\t\t].includes(typeof value)) return VALID_RULE;\n\t\t\t\treturn invalidRule(this, context);\n\t\t\t}\n\t\t}, errorMessage);\n\t}\n\t/**\n\t* Add matches type\n\t*/\n\tmatchesType(value) {\n\t\treturn typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n\t}\n\t/**\n\t* Mutate the scalar value to be number\n\t*/\n\tasNumber() {\n\t\treturn this.addMutator(numberMutator);\n\t}\n\t/**\n\t* Mutate the scalar value to be string\n\t*/\n\tasString() {\n\t\treturn this.addMutator(stringMutator);\n\t}\n\t/**\n\t* Accepted value\n\t* The value will be valid if it equals 1 | \"1\" | true | \"true\" | \"yes\" | \"y\" | \"on\"\n\t*/\n\taccepted(errorMessage) {\n\t\treturn this.addRule(acceptedRule, errorMessage);\n\t}\n\t/**\n\t* Accepted value if another field's value equals to a specific value\n\t*/\n\tacceptedIf(field, value, errorMessage) {\n\t\treturn this.addRule(acceptedIfRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Accepted value if another field's value is not equal to the given value\n\t*/\n\tacceptedUnless(field, value, errorMessage) {\n\t\treturn this.addRule(acceptedUnlessRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Accepted value if another field is required\n\t*/\n\tacceptedIfRequired(field, errorMessage) {\n\t\treturn this.addRule(acceptedIfRequiredRule, errorMessage, { field });\n\t}\n\t/**\n\t* Accepted value if another field is present\n\t*/\n\tacceptedIfPresent(field, errorMessage) {\n\t\treturn this.addRule(acceptedIfPresentRule, errorMessage, { field });\n\t}\n\t/**\n\t* Accepted value if another field is missing\n\t*/\n\tacceptedWithout(field, errorMessage) {\n\t\treturn this.addRule(acceptedWithoutRule, errorMessage, { field });\n\t}\n\t/**\n\t* Declined value\n\t* The value will be valid if it equals 0 | \"0\" | false | \"false\" | \"no\" | \"n\" | \"off\"\n\t*/\n\tdeclined(errorMessage) {\n\t\treturn this.addRule(declinedRule, errorMessage);\n\t}\n\t/**\n\t* Declined value if another field's value equals to a specific value\n\t*/\n\tdeclinedIf(field, value, errorMessage) {\n\t\treturn this.addRule(declinedIfRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Declined value if another field's value is not equal to the given value\n\t*/\n\tdeclinedUnless(field, value, errorMessage) {\n\t\treturn this.addRule(declinedUnlessRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Declined value if another field is required\n\t*/\n\tdeclinedIfRequired(field, errorMessage) {\n\t\treturn this.addRule(declinedIfRequiredRule, errorMessage, { field });\n\t}\n\t/**\n\t* Declined value if another field is present\n\t*/\n\tdeclinedIfPresent(field, errorMessage) {\n\t\treturn this.addRule(declinedIfPresentRule, errorMessage, { field });\n\t}\n\t/**\n\t* Declined value if another field is missing\n\t*/\n\tdeclinedWithout(field, errorMessage) {\n\t\treturn this.addRule(declinedWithoutRule, errorMessage, { field });\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* A scalar accepts string | number | boolean. If `.in()` / `.enum()` is used,\n\t* output collapses to a simple `enum` list instead.\n\t*\n\t* @example\n\t* ```ts\n\t* v.scalar().toJsonSchema(\"draft-2020-12\")\n\t* // → { oneOf: [{ type: \"string\" }, { type: \"number\" }, { type: \"boolean\" }] }\n\t*\n\t* v.scalar().in([\"active\", \"inactive\"]).toJsonSchema(\"draft-2020-12\")\n\t* // → { enum: [\"active\", \"inactive\"] }\n\t* ```\n\t*/\n\ttoJsonSchema(_target = \"draft-2020-12\") {\n\t\tconst inOpts = getRuleOptions(this.rules, \"in\");\n\t\tif (inOpts?.values && Array.isArray(inOpts.values)) return { enum: inOpts.values };\n\t\tconst enumOpts = getRuleOptions(this.rules, \"enum\");\n\t\tif (enumOpts?.enum && Array.isArray(enumOpts.enum)) return { enum: enumOpts.enum };\n\t\treturn { oneOf: [\n\t\t\t{ type: \"string\" },\n\t\t\t{ type: \"number\" },\n\t\t\t{ type: \"boolean\" }\n\t\t] };\n\t}\n};\n\n//#endregion\nexport { ScalarValidator };\n//# sourceMappingURL=scalar-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,IAAI,kBAAkB,cAAc,mBAAmB;CACtD,YAAY,cAAc;EACzB,MAAM;EACN,KAAK,eAAe;GACnB,MAAM;GACN,qBAAqB;GACrB,MAAM,SAAS,OAAO,SAAS;IAC9B,IAAI;KACH;KACA;KACA;IACD,CAAC,CAAC,SAAS,OAAO,KAAK,GAAG,OAAO;IACjC,OAAO,YAAY,MAAM,OAAO;GACjC;EACD,GAAG,YAAY;CAChB;;;;CAIA,YAAY,OAAO;EAClB,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU;CACnF;;;;CAIA,WAAW;EACV,OAAO,KAAK,WAAW,aAAa;CACrC;;;;CAIA,WAAW;EACV,OAAO,KAAK,WAAW,aAAa;CACrC;;;;;CAKA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;;;CAIA,WAAW,OAAO,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,gBAAgB,cAAc;GACjD;GACA;EACD,CAAC;CACF;;;;CAIA,eAAe,OAAO,OAAO,cAAc;EAC1C,OAAO,KAAK,QAAQ,oBAAoB,cAAc;GACrD;GACA;EACD,CAAC;CACF;;;;CAIA,mBAAmB,OAAO,cAAc;EACvC,OAAO,KAAK,QAAQ,wBAAwB,cAAc,EAAE,MAAM,CAAC;CACpE;;;;CAIA,kBAAkB,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,uBAAuB,cAAc,EAAE,MAAM,CAAC;CACnE;;;;CAIA,gBAAgB,OAAO,cAAc;EACpC,OAAO,KAAK,QAAQ,qBAAqB,cAAc,EAAE,MAAM,CAAC;CACjE;;;;;CAKA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;;;CAIA,WAAW,OAAO,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,gBAAgB,cAAc;GACjD;GACA;EACD,CAAC;CACF;;;;CAIA,eAAe,OAAO,OAAO,cAAc;EAC1C,OAAO,KAAK,QAAQ,oBAAoB,cAAc;GACrD;GACA;EACD,CAAC;CACF;;;;CAIA,mBAAmB,OAAO,cAAc;EACvC,OAAO,KAAK,QAAQ,wBAAwB,cAAc,EAAE,MAAM,CAAC;CACpE;;;;CAIA,kBAAkB,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,uBAAuB,cAAc,EAAE,MAAM,CAAC;CACnE;;;;CAIA,gBAAgB,OAAO,cAAc;EACpC,OAAO,KAAK,QAAQ,qBAAqB,cAAc,EAAE,MAAM,CAAC;CACjE;;;;;;;;;;;;;;;;CAgBA,aAAa,UAAU,iBAAiB;EACvC,MAAM,SAAS,eAAe,KAAK,OAAO,IAAI;EAC9C,IAAI,QAAQ,UAAU,MAAM,QAAQ,OAAO,MAAM,GAAG,OAAO,EAAE,MAAM,OAAO,OAAO;EACjF,MAAM,WAAW,eAAe,KAAK,OAAO,MAAM;EAClD,IAAI,UAAU,QAAQ,MAAM,QAAQ,SAAS,IAAI,GAAG,OAAO,EAAE,MAAM,SAAS,KAAK;EACjF,OAAO,EAAE,OAAO;GACf,EAAE,MAAM,SAAS;GACjB,EAAE,MAAM,SAAS;GACjB,EAAE,MAAM,UAAU;EACnB,EAAE;CACH;AACD"}
1
+ {"version":3,"file":"scalar-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/scalar-validator.mjs"],"sourcesContent":["import { getRuleOptions } from \"../standard-schema/json-schema.mjs\";\nimport { VALID_RULE, invalidRule } from \"../helpers/validation-helpers.mjs\";\nimport \"../helpers/index.mjs\";\nimport { acceptedIfPresentRule, acceptedIfRequiredRule, acceptedIfRule, acceptedRule, acceptedUnlessRule, acceptedWithoutRule } from \"../rules/scalar/accepted-rule.mjs\";\nimport { declinedIfPresentRule, declinedIfRequiredRule, declinedIfRule, declinedRule, declinedUnlessRule, declinedWithoutRule } from \"../rules/scalar/declined-rule.mjs\";\nimport { numberMutator } from \"../mutators/number-mutators.mjs\";\nimport { stringMutator } from \"../mutators/scalar-mutators.mjs\";\nimport \"../mutators/index.mjs\";\nimport { PrimitiveValidator } from \"./primitive-validator.mjs\";\nimport \"../rules/scalar/index.mjs\";\n\n//#region ../seal/src/validators/scalar-validator.ts\n/**\n* Scalar validator class\n*\n* Core validator for scalar values (string, number, boolean).\n* Extends PrimitiveValidator (inherits enum/in/oneOf/allowsOnly/forbids/notIn)\n* and additionally provides type-coercion mutators and accepted/declined rules.\n*\n* Database methods (unique, exists, etc.) are injected by the framework\n*/\nvar ScalarValidator = class extends PrimitiveValidator {\n\tconstructor(errorMessage) {\n\t\tsuper();\n\t\tthis.addMutableRule({\n\t\t\tname: \"scalar\",\n\t\t\tdefaultErrorMessage: \"The :input must be a scalar value\",\n\t\t\tasync validate(value, context) {\n\t\t\t\tif ([\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"number\",\n\t\t\t\t\t\"boolean\"\n\t\t\t\t].includes(typeof value)) return VALID_RULE;\n\t\t\t\treturn invalidRule(this, context);\n\t\t\t}\n\t\t}, errorMessage);\n\t}\n\t/**\n\t* Add matches type\n\t*/\n\tmatchesType(value) {\n\t\treturn typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n\t}\n\t/**\n\t* Mutate the scalar value to be number\n\t*/\n\tasNumber() {\n\t\treturn this.addMutator(numberMutator);\n\t}\n\t/**\n\t* Mutate the scalar value to be string\n\t*/\n\tasString() {\n\t\treturn this.addMutator(stringMutator);\n\t}\n\t/**\n\t* Accepted value\n\t* The value will be valid if it equals 1 | \"1\" | true | \"true\" | \"yes\" | \"y\" | \"on\"\n\t*/\n\taccepted(errorMessage) {\n\t\treturn this.addRule(acceptedRule, errorMessage);\n\t}\n\t/**\n\t* Accepted value if another field's value equals to a specific value\n\t*/\n\tacceptedIf(field, value, errorMessage) {\n\t\treturn this.addRule(acceptedIfRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Accepted value if another field's value is not equal to the given value\n\t*/\n\tacceptedUnless(field, value, errorMessage) {\n\t\treturn this.addRule(acceptedUnlessRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Accepted value if another field is required\n\t*/\n\tacceptedIfRequired(field, errorMessage) {\n\t\treturn this.addRule(acceptedIfRequiredRule, errorMessage, { field });\n\t}\n\t/**\n\t* Accepted value if another field is present\n\t*/\n\tacceptedIfPresent(field, errorMessage) {\n\t\treturn this.addRule(acceptedIfPresentRule, errorMessage, { field });\n\t}\n\t/**\n\t* Accepted value if another field is missing\n\t*/\n\tacceptedWithout(field, errorMessage) {\n\t\treturn this.addRule(acceptedWithoutRule, errorMessage, { field });\n\t}\n\t/**\n\t* Declined value\n\t* The value will be valid if it equals 0 | \"0\" | false | \"false\" | \"no\" | \"n\" | \"off\"\n\t*/\n\tdeclined(errorMessage) {\n\t\treturn this.addRule(declinedRule, errorMessage);\n\t}\n\t/**\n\t* Declined value if another field's value equals to a specific value\n\t*/\n\tdeclinedIf(field, value, errorMessage) {\n\t\treturn this.addRule(declinedIfRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Declined value if another field's value is not equal to the given value\n\t*/\n\tdeclinedUnless(field, value, errorMessage) {\n\t\treturn this.addRule(declinedUnlessRule, errorMessage, {\n\t\t\tfield,\n\t\t\tvalue\n\t\t});\n\t}\n\t/**\n\t* Declined value if another field is required\n\t*/\n\tdeclinedIfRequired(field, errorMessage) {\n\t\treturn this.addRule(declinedIfRequiredRule, errorMessage, { field });\n\t}\n\t/**\n\t* Declined value if another field is present\n\t*/\n\tdeclinedIfPresent(field, errorMessage) {\n\t\treturn this.addRule(declinedIfPresentRule, errorMessage, { field });\n\t}\n\t/**\n\t* Declined value if another field is missing\n\t*/\n\tdeclinedWithout(field, errorMessage) {\n\t\treturn this.addRule(declinedWithoutRule, errorMessage, { field });\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* A scalar accepts string | number | boolean. If `.in()` / `.enum()` is used,\n\t* output collapses to a simple `enum` list instead.\n\t*\n\t* @example\n\t* ```ts\n\t* v.scalar().toJsonSchema(\"draft-2020-12\")\n\t* // → { oneOf: [{ type: \"string\" }, { type: \"number\" }, { type: \"boolean\" }] }\n\t*\n\t* v.scalar().in([\"active\", \"inactive\"]).toJsonSchema(\"draft-2020-12\")\n\t* // → { enum: [\"active\", \"inactive\"] }\n\t* ```\n\t*/\n\ttoJsonSchema(_target = \"draft-2020-12\") {\n\t\tconst inOpts = getRuleOptions(this.rules, \"in\");\n\t\tif (inOpts?.values && Array.isArray(inOpts.values)) return { enum: inOpts.values };\n\t\tconst enumOpts = getRuleOptions(this.rules, \"enum\");\n\t\tif (enumOpts?.enum && Array.isArray(enumOpts.enum)) return { enum: enumOpts.enum };\n\t\treturn { oneOf: [\n\t\t\t{ type: \"string\" },\n\t\t\t{ type: \"number\" },\n\t\t\t{ type: \"boolean\" }\n\t\t] };\n\t}\n};\n\n//#endregion\nexport { ScalarValidator };\n//# sourceMappingURL=scalar-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,IAAI,kBAAkB,cAAc,mBAAmB;CACtD,YAAY,cAAc;EACzB,MAAM;EACN,KAAK,eAAe;GACnB,MAAM;GACN,qBAAqB;GACrB,MAAM,SAAS,OAAO,SAAS;IAC9B,IAAI;KACH;KACA;KACA;IACD,CAAC,CAAC,SAAS,OAAO,KAAK,GAAG,OAAO;IACjC,OAAO,YAAY,MAAM,OAAO;GACjC;EACD,GAAG,YAAY;CAChB;;;;CAIA,YAAY,OAAO;EAClB,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU;CACnF;;;;CAIA,WAAW;EACV,OAAO,KAAK,WAAW,aAAa;CACrC;;;;CAIA,WAAW;EACV,OAAO,KAAK,WAAW,aAAa;CACrC;;;;;CAKA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;;;CAIA,WAAW,OAAO,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,gBAAgB,cAAc;GACjD;GACA;EACD,CAAC;CACF;;;;CAIA,eAAe,OAAO,OAAO,cAAc;EAC1C,OAAO,KAAK,QAAQ,oBAAoB,cAAc;GACrD;GACA;EACD,CAAC;CACF;;;;CAIA,mBAAmB,OAAO,cAAc;EACvC,OAAO,KAAK,QAAQ,wBAAwB,cAAc,EAAE,MAAM,CAAC;CACpE;;;;CAIA,kBAAkB,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,uBAAuB,cAAc,EAAE,MAAM,CAAC;CACnE;;;;CAIA,gBAAgB,OAAO,cAAc;EACpC,OAAO,KAAK,QAAQ,qBAAqB,cAAc,EAAE,MAAM,CAAC;CACjE;;;;;CAKA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;;;CAIA,WAAW,OAAO,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,gBAAgB,cAAc;GACjD;GACA;EACD,CAAC;CACF;;;;CAIA,eAAe,OAAO,OAAO,cAAc;EAC1C,OAAO,KAAK,QAAQ,oBAAoB,cAAc;GACrD;GACA;EACD,CAAC;CACF;;;;CAIA,mBAAmB,OAAO,cAAc;EACvC,OAAO,KAAK,QAAQ,wBAAwB,cAAc,EAAE,MAAM,CAAC;CACpE;;;;CAIA,kBAAkB,OAAO,cAAc;EACtC,OAAO,KAAK,QAAQ,uBAAuB,cAAc,EAAE,MAAM,CAAC;CACnE;;;;CAIA,gBAAgB,OAAO,cAAc;EACpC,OAAO,KAAK,QAAQ,qBAAqB,cAAc,EAAE,MAAM,CAAC;CACjE;;;;;;;;;;;;;;;;CAgBA,aAAa,UAAU,iBAAiB;EACvC,MAAM,SAAS,eAAe,KAAK,OAAO,IAAI;EAC9C,IAAI,QAAQ,UAAU,MAAM,QAAQ,OAAO,MAAM,GAAG,OAAO,EAAE,MAAM,OAAO,OAAO;EACjF,MAAM,WAAW,eAAe,KAAK,OAAO,MAAM;EAClD,IAAI,UAAU,QAAQ,MAAM,QAAQ,SAAS,IAAI,GAAG,OAAO,EAAE,MAAM,SAAS,KAAK;EACjF,OAAO,EAAE,OAAO;GACf,EAAE,MAAM,SAAS;GACjB,EAAE,MAAM,SAAS;GACjB,EAAE,MAAM,UAAU;EACnB,EAAE;CACH;AACD"}
@@ -1,6 +1,5 @@
1
1
  import { applyNullable, getRuleOptions } from "../standard-schema/json-schema.mjs";
2
2
  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";
3
- import "../mutators/index.mjs";
4
3
  import { alphaNumericRule, alphaRule, isNumericRule } from "../rules/string/alpha.mjs";
5
4
  import { isCreditCardRule } from "../rules/string/credit-card.mjs";
6
5
  import { emailRule } from "../rules/string/email.mjs";
@@ -14,10 +13,11 @@ import { withoutWhitespaceRule } from "../rules/string/without-whitespace.mjs";
14
13
  import { betweenLengthRule, lengthRule, maxLengthRule, maxWordsRule, minLengthRule, minWordsRule, wordsRule } from "../rules/length/length-rules.mjs";
15
14
  import { colorRule, darkColorRule, hexColorRule, hslColorRule, lightColorRule, rgbColorRule, rgbaColorRule } from "../rules/color/color-rules.mjs";
16
15
  import { stringRule } from "../rules/common/type-rules.mjs";
17
- import "../rules/index.mjs";
16
+ import "../rules/length/index.mjs";
17
+ import "../rules/color/index.mjs";
18
18
  import { PrimitiveValidator } from "./primitive-validator.mjs";
19
19
 
20
- //#region ../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/string-validator.mjs
20
+ //#region ../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/string-validator.mjs
21
21
  /**
22
22
  * String validator class
23
23
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/string-validator.mjs"],"sourcesContent":["import { applyNullable, getRuleOptions } from \"../standard-schema/json-schema.mjs\";\nimport { 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\";\nimport { alphaNumericRule, alphaRule, isNumericRule } from \"../rules/string/alpha.mjs\";\nimport { isCreditCardRule } from \"../rules/string/credit-card.mjs\";\nimport { emailRule } from \"../rules/string/email.mjs\";\nimport { cuidRule, nanoidRule, ulidRule, uuidRule } from \"../rules/string/id-formats.mjs\";\nimport { ip4Rule, ip6Rule, ipRule } from \"../rules/string/ip.mjs\";\nimport { patternRule } from \"../rules/string/pattern.mjs\";\nimport { containsRule, endsWithRule, notContainsRule, startsWithRule } from \"../rules/string/string-comparison.mjs\";\nimport { strongPasswordRule } from \"../rules/string/strong-password-rule.mjs\";\nimport { urlRule } from \"../rules/string/url.mjs\";\nimport { withoutWhitespaceRule } from \"../rules/string/without-whitespace.mjs\";\nimport { betweenLengthRule, lengthRule, maxLengthRule, maxWordsRule, minLengthRule, minWordsRule, wordsRule } from \"../rules/length/length-rules.mjs\";\nimport \"../rules/length/index.mjs\";\nimport { colorRule, darkColorRule, hexColorRule, hslColorRule, lightColorRule, rgbColorRule, rgbaColorRule } from \"../rules/color/color-rules.mjs\";\nimport \"../rules/color/index.mjs\";\nimport { stringRule } from \"../rules/common/type-rules.mjs\";\nimport { PrimitiveValidator } from \"./primitive-validator.mjs\";\n\n//#region ../seal/src/validators/string-validator.ts\n/**\n* String validator class\n*/\nvar StringValidator = class extends PrimitiveValidator {\n\tconstructor(errorMessage) {\n\t\tsuper();\n\t\tthis.addMutableRule(stringRule, errorMessage);\n\t}\n\t/**\n\t* Check if value is a string type\n\t*/\n\tmatchesType(value) {\n\t\treturn typeof value === \"string\";\n\t}\n\t/**\n\t* Stringify the value if not a string\n\t*/\n\ttoString() {\n\t\treturn this.addMutator(stringifyMutator);\n\t}\n\t/** Convert string to uppercase */\n\tuppercase() {\n\t\treturn this.addMutator(uppercaseMutator);\n\t}\n\t/** Convert string to lowercase */\n\tlowercase() {\n\t\treturn this.addMutator(lowercaseMutator);\n\t}\n\t/** Capitalize only the first letter of the string */\n\tcapitalize() {\n\t\treturn this.addMutator(capitalizeMutator);\n\t}\n\t/** Capitalize the first letter of each word (Title Case) */\n\ttitleCase() {\n\t\treturn this.addMutator(titleCaseMutator);\n\t}\n\t/** Convert to camelCase */\n\tcamelCase() {\n\t\treturn this.addMutator(camelCaseMutator);\n\t}\n\t/** Convert to PascalCase */\n\tpascalCase() {\n\t\treturn this.addMutator(pascalCaseMutator);\n\t}\n\t/** Convert to snake_case */\n\tsnakeCase() {\n\t\treturn this.addMutator(snakeCaseMutator);\n\t}\n\t/** Convert to kebab-case */\n\tkebabCase() {\n\t\treturn this.addMutator(kebabCaseMutator);\n\t}\n\t/**\n\t* Trim the given needle from the string\n\t* If no needle is provided, the default is a single space\n\t*/\n\ttrim(needle) {\n\t\treturn this.addMutator(trimMutator, { needle });\n\t}\n\t/** Trim from the left/start */\n\tltrim(needle) {\n\t\treturn this.addMutator(ltrimMutator, { needle });\n\t}\n\t/** Trim from the right/end */\n\trtrim(needle) {\n\t\treturn this.addMutator(rtrimMutator, { needle });\n\t}\n\t/** Trim multiple whitespace into single space */\n\ttrimMultipleWhitespace() {\n\t\treturn this.addMutator(trimMultipleWhitespaceMutator);\n\t}\n\t/** Pad string from the start to reach target length */\n\tpadStart(length, char = \" \") {\n\t\treturn this.addMutator(padStartMutator, {\n\t\t\tlength,\n\t\t\tchar\n\t\t});\n\t}\n\t/** Pad string from the end to reach target length */\n\tpadEnd(length, char = \" \") {\n\t\treturn this.addMutator(padEndMutator, {\n\t\t\tlength,\n\t\t\tchar\n\t\t});\n\t}\n\t/**\n\t* Strip HTML tags with a naive `<...>` regex.\n\t*\n\t* This is a **tag stripper, not an XSS sanitizer**: it is not a parser,\n\t* so malformed/nested markup or content re-introduced later in a\n\t* pipeline can defeat it. Do not rely on this alone to make untrusted\n\t* rich text safe to render — use a real parser-based sanitizer (e.g.\n\t* DOMPurify / sanitize-html) for that.\n\t*/\n\tstripTags() {\n\t\treturn this.addMutator(stripTagsMutator);\n\t}\n\t/**\n\t* @deprecated Renamed to {@link StringValidator.stripTags} — the old\n\t* name implied XSS safety this tag-stripping regex does not provide.\n\t* Kept as an alias for backward compatibility; switch to `.stripTags()`.\n\t*/\n\tsafeHtml() {\n\t\treturn this.stripTags();\n\t}\n\t/** HTML escape special characters */\n\thtmlEscape() {\n\t\treturn this.addMutator(htmlEscapeMutator);\n\t}\n\t/** Unescape HTML entities */\n\tunescapeHtml() {\n\t\treturn this.addMutator(unescapeHtmlMutator);\n\t}\n\t/**\n\t* Remove special characters\n\t* This will remove all characters that are not alphanumeric or whitespace\n\t*/\n\tremoveSpecialCharacters() {\n\t\treturn this.addMutator(removeSpecialCharactersMutator);\n\t}\n\t/** Convert to only alphabetic characters */\n\ttoAlpha() {\n\t\treturn this.addMutator(alphaOnlyMutator);\n\t}\n\t/** Convert to only alphanumeric characters */\n\ttoAlphanumeric() {\n\t\treturn this.addMutator(alphanumericOnlyMutator);\n\t}\n\t/** Remove all numeric characters */\n\tremoveNumbers() {\n\t\treturn this.addMutator(removeNumbersMutator);\n\t}\n\t/** URL decode */\n\turlDecode() {\n\t\treturn this.addMutator(urlDecodeMutator);\n\t}\n\t/** URL encode */\n\turlEncode() {\n\t\treturn this.addMutator(urlEncodeMutator);\n\t}\n\t/** Convert to URL-friendly slug */\n\tslug() {\n\t\treturn this.addMutator(slugMutator);\n\t}\n\t/** Base64 encode */\n\tbase64Encode() {\n\t\treturn this.addMutator(base64EncodeMutator);\n\t}\n\t/** Base64 decode */\n\tbase64Decode() {\n\t\treturn this.addMutator(base64DecodeMutator);\n\t}\n\t/** Replace substring or pattern */\n\treplace(search, replace) {\n\t\treturn this.addMutator(replaceMutator, {\n\t\t\tsearch,\n\t\t\treplace\n\t\t});\n\t}\n\t/** Replace all occurrences of substring or pattern */\n\treplaceAll(search, replace) {\n\t\treturn this.addMutator(replaceAllMutator, {\n\t\t\tsearch,\n\t\t\treplace\n\t\t});\n\t}\n\t/** Append/suffix text to the end */\n\tappend(suffix) {\n\t\treturn this.addMutator(appendMutator, { suffix });\n\t}\n\t/** Prepend/prefix text to the beginning */\n\tprepend(prefix) {\n\t\treturn this.addMutator(prependMutator, { prefix });\n\t}\n\t/** Reverse the string */\n\treverse() {\n\t\treturn this.addMutator(reverseMutator);\n\t}\n\t/** Truncate to a maximum length */\n\ttruncate(maxLength, suffix = \"...\") {\n\t\treturn this.addMutator(truncateMutator, {\n\t\t\tmaxLength,\n\t\t\tsuffix\n\t\t});\n\t}\n\t/** Repeat string N times */\n\trepeat(count) {\n\t\treturn this.addMutator(repeatMutator, { count });\n\t}\n\t/** Mask part of string */\n\tmask(start, end, char = \"*\") {\n\t\treturn this.addMutator(maskMutator, {\n\t\t\tstart,\n\t\t\tend,\n\t\t\tchar\n\t\t});\n\t}\n\t/** Value must be a valid email */\n\temail(errorMessage) {\n\t\treturn this.addRule(emailRule, errorMessage);\n\t}\n\t/** Value must be a valid URL */\n\turl(errorMessage) {\n\t\treturn this.addRule(urlRule, errorMessage);\n\t}\n\t/** Value can not have whitespace */\n\twithoutWhitespace(errorMessage) {\n\t\treturn this.addRule(withoutWhitespaceRule, errorMessage);\n\t}\n\t/** Value must match the given pattern */\n\tpattern(pattern, errorMessage) {\n\t\treturn this.addRule(patternRule, errorMessage, { pattern });\n\t}\n\t/**\n\t* Value must be a strong password\n\t* Requirements:\n\t* - At least 8 characters\n\t* - At least 1 uppercase letter\n\t* - At least 1 lowercase letter\n\t* - At least 1 number\n\t* - At least 1 special character\n\t*/\n\tstrongPassword(minLength, errorMessage) {\n\t\treturn this.addRule(strongPasswordRule, errorMessage, { minLength });\n\t}\n\t/** Value must be exactly the given number of words */\n\twords(words, errorMessage) {\n\t\treturn this.addRule(wordsRule, errorMessage, { words });\n\t}\n\t/** Value must be at least the given number of words */\n\tminWords(words, errorMessage) {\n\t\treturn this.addRule(minWordsRule, errorMessage, { minWords: words });\n\t}\n\t/** Value must be at most the given number of words */\n\tmaxWords(words, errorMessage) {\n\t\treturn this.addRule(maxWordsRule, errorMessage, { maxWords: words });\n\t}\n\t/** Value length must be greater than the given length */\n\tminLength(length, errorMessage) {\n\t\treturn this.addRule(minLengthRule, errorMessage, { minLength: length });\n\t}\n\t/** @alias minLength */\n\tmin(min, errorMessage) {\n\t\treturn this.minLength(min, errorMessage);\n\t}\n\t/** Value length must be less than the given length */\n\tmaxLength(length, errorMessage) {\n\t\treturn this.addRule(maxLengthRule, errorMessage, { maxLength: length });\n\t}\n\t/** @alias maxLength */\n\tmax(max, errorMessage) {\n\t\treturn this.maxLength(max, errorMessage);\n\t}\n\t/** Value must be of the given length */\n\tlength(length, errorMessage) {\n\t\treturn this.addRule(lengthRule, errorMessage, { length });\n\t}\n\t/**\n\t* String length must be between min and max (inclusive)\n\t*\n\t* @param min - Minimum length (inclusive)\n\t* @param max - Maximum length (inclusive)\n\t*\n\t* @example\n\t* ```ts\n\t* v.string().between(5, 10) // Length: 5 to 10 characters\n\t* v.string().lengthBetween(8, 20) // Same using alias\n\t* ```\n\t*\n\t* @category Validation Rule\n\t*/\n\tlengthBetween(min, max, errorMessage) {\n\t\treturn this.addRule(betweenLengthRule, errorMessage, {\n\t\t\tminLength: min,\n\t\t\tmaxLength: max\n\t\t});\n\t}\n\t/** Allow only alphabetic characters */\n\talpha(errorMessage) {\n\t\treturn this.addRule(alphaRule, errorMessage);\n\t}\n\t/** Allow only alphanumeric characters */\n\talphanumeric(errorMessage) {\n\t\treturn this.addRule(alphaNumericRule, errorMessage);\n\t}\n\t/** Allow only numeric characters */\n\tnumeric(errorMessage) {\n\t\treturn this.addRule(isNumericRule, errorMessage);\n\t}\n\t/** Value must starts with the given string */\n\tstartsWith(value, errorMessage) {\n\t\treturn this.addRule(startsWithRule, errorMessage, { value });\n\t}\n\t/** Value must ends with the given string */\n\tendsWith(value, errorMessage) {\n\t\treturn this.addRule(endsWithRule, errorMessage, { value });\n\t}\n\t/** Value must contain the given string */\n\tcontains(value, errorMessage) {\n\t\treturn this.addRule(containsRule, errorMessage, { value });\n\t}\n\t/** Value must not contain the given string */\n\tnotContains(value, errorMessage) {\n\t\treturn this.addRule(notContainsRule, errorMessage, { value });\n\t}\n\t/** Value must be a valid IP address */\n\tip(errorMessage) {\n\t\treturn this.addRule(ipRule, errorMessage);\n\t}\n\t/** Value must be a valid IPv4 address */\n\tip4(errorMessage) {\n\t\treturn this.addRule(ip4Rule, errorMessage);\n\t}\n\t/** Value must be a valid IPv6 address */\n\tip6(errorMessage) {\n\t\treturn this.addRule(ip6Rule, errorMessage);\n\t}\n\t/** Check if the string matches a credit card number */\n\tcreditCard(errorMessage) {\n\t\treturn this.addRule(isCreditCardRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid color */\n\tcolor(errorMessage) {\n\t\treturn this.addRule(colorRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid hex color */\n\thexColor(errorMessage) {\n\t\treturn this.addRule(hexColorRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid HSL color */\n\thslColor(errorMessage) {\n\t\treturn this.addRule(hslColorRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid RGB color */\n\trgbColor(errorMessage) {\n\t\treturn this.addRule(rgbColorRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid RGBA color */\n\trgbaColor(errorMessage) {\n\t\treturn this.addRule(rgbaColorRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid light color */\n\tlightColor(errorMessage) {\n\t\treturn this.addRule(lightColorRule, errorMessage);\n\t}\n\t/** Determine if the value is a valid dark color */\n\tdarkColor(errorMessage) {\n\t\treturn this.addRule(darkColorRule, errorMessage);\n\t}\n\t/**\n\t* Value must be a valid UUID. Optionally restrict to a specific version.\n\t*\n\t* @example\n\t* v.string().uuid() // any RFC 4122 UUID\n\t* v.string().uuid(4) // only v4 (random)\n\t* v.string().uuid(7) // only v7 (timestamp-ordered)\n\t*/\n\tuuid(version, errorMessage) {\n\t\treturn this.addRule(uuidRule, errorMessage, { version });\n\t}\n\t/**\n\t* Value must be a valid CUID. Defaults to CUID2; pass `{ version: 1 }` for legacy.\n\t*\n\t* @example\n\t* v.string().cuid() // CUID2\n\t* v.string().cuid({ version: 1 }) // legacy CUID1\n\t*/\n\tcuid(options) {\n\t\tconst { errorMessage, version } = options ?? {};\n\t\treturn this.addRule(cuidRule, errorMessage, { version });\n\t}\n\t/** Value must be a valid ULID (26 chars, Crockford base32). */\n\tulid(errorMessage) {\n\t\treturn this.addRule(ulidRule, errorMessage);\n\t}\n\t/**\n\t* Value must be a valid nanoid string. Default length is 21.\n\t*\n\t* @example\n\t* v.string().nanoid() // 21 chars (default)\n\t* v.string().nanoid(10) // 10 chars\n\t*/\n\tnanoid(length, errorMessage) {\n\t\treturn this.addRule(nanoidRule, errorMessage, { length });\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Maps String-specific rule options to JSON Schema keywords.\n\t* Non-representable rules (cross-field, refine, color rules, etc.) are silently omitted.\n\t*\n\t* @example\n\t* ```ts\n\t* v.string().min(2).max(100).email().toJsonSchema(\"draft-2020-12\")\n\t* // → { type: \"string\", minLength: 2, maxLength: 100, format: \"email\" }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\tconst schema = { type: \"string\" };\n\t\tconst minOpts = getRuleOptions(this.rules, \"minLength\");\n\t\tif (minOpts?.minLength !== void 0) schema.minLength = minOpts.minLength;\n\t\tconst maxOpts = getRuleOptions(this.rules, \"maxLength\");\n\t\tif (maxOpts?.maxLength !== void 0) schema.maxLength = maxOpts.maxLength;\n\t\tconst betweenOpts = getRuleOptions(this.rules, \"betweenLength\");\n\t\tif (betweenOpts) {\n\t\t\tif (betweenOpts.minLength !== void 0) schema.minLength = betweenOpts.minLength;\n\t\t\tif (betweenOpts.maxLength !== void 0) schema.maxLength = betweenOpts.maxLength;\n\t\t}\n\t\tconst lengthOpts = getRuleOptions(this.rules, \"length\");\n\t\tif (lengthOpts?.length !== void 0) {\n\t\t\tschema.minLength = lengthOpts.length;\n\t\t\tschema.maxLength = lengthOpts.length;\n\t\t}\n\t\tconst patternOpts = getRuleOptions(this.rules, \"pattern\");\n\t\tif (patternOpts?.pattern instanceof RegExp) schema.pattern = patternOpts.pattern.source;\n\t\tif (getRuleOptions(this.rules, \"email\") !== void 0 || this.rules.some((r) => r.name === \"email\")) schema.format = \"email\";\n\t\telse if (this.rules.some((r) => r.name === \"url\")) schema.format = \"uri\";\n\t\telse if (this.rules.some((r) => r.name === \"ip\")) schema.format = \"ipv4\";\n\t\telse if (this.rules.some((r) => r.name === \"ip4\")) schema.format = \"ipv4\";\n\t\telse if (this.rules.some((r) => r.name === \"ip6\")) schema.format = \"ipv6\";\n\t\telse if (this.rules.some((r) => r.name === \"uuid\")) schema.format = \"uuid\";\n\t\telse if (this.rules.some((r) => r.name === \"hexColor\")) schema.format = \"color\";\n\t\tif (!schema.format) {\n\t\t\tconst cuidOpts = getRuleOptions(this.rules, \"cuid\");\n\t\t\tif (cuidOpts) schema.pattern = cuidOpts.version === 1 ? \"^c[a-z0-9]{24,}$\" : \"^[a-z][a-z0-9]{23}$\";\n\t\t\tif (this.rules.some((r) => r.name === \"ulid\")) schema.pattern = \"^[0-9A-HJKMNP-TV-Z]{26}$\";\n\t\t\tconst nanoidOpts = getRuleOptions(this.rules, \"nanoid\");\n\t\t\tif (nanoidOpts) schema.pattern = `^[A-Za-z0-9_-]{${nanoidOpts.length ?? 21}}$`;\n\t\t}\n\t\tconst inOpts = getRuleOptions(this.rules, \"in\");\n\t\tif (inOpts?.values && Array.isArray(inOpts.values)) schema.enum = inOpts.values;\n\t\tif (this.isNullable) applyNullable(schema, target);\n\t\treturn schema;\n\t}\n};\n\n//#endregion\nexport { StringValidator };\n//# sourceMappingURL=string-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAI,kBAAkB,cAAc,mBAAmB;CACtD,YAAY,cAAc;EACzB,MAAM;EACN,KAAK,eAAe,YAAY,YAAY;CAC7C;;;;CAIA,YAAY,OAAO;EAClB,OAAO,OAAO,UAAU;CACzB;;;;CAIA,WAAW;EACV,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,aAAa;EACZ,OAAO,KAAK,WAAW,iBAAiB;CACzC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,aAAa;EACZ,OAAO,KAAK,WAAW,iBAAiB;CACzC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;;;;CAKA,KAAK,QAAQ;EACZ,OAAO,KAAK,WAAW,aAAa,EAAE,OAAO,CAAC;CAC/C;;CAEA,MAAM,QAAQ;EACb,OAAO,KAAK,WAAW,cAAc,EAAE,OAAO,CAAC;CAChD;;CAEA,MAAM,QAAQ;EACb,OAAO,KAAK,WAAW,cAAc,EAAE,OAAO,CAAC;CAChD;;CAEA,yBAAyB;EACxB,OAAO,KAAK,WAAW,6BAA6B;CACrD;;CAEA,SAAS,QAAQ,OAAO,KAAK;EAC5B,OAAO,KAAK,WAAW,iBAAiB;GACvC;GACA;EACD,CAAC;CACF;;CAEA,OAAO,QAAQ,OAAO,KAAK;EAC1B,OAAO,KAAK,WAAW,eAAe;GACrC;GACA;EACD,CAAC;CACF;;;;;;;;;;CAUA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;;;;;CAMA,WAAW;EACV,OAAO,KAAK,UAAU;CACvB;;CAEA,aAAa;EACZ,OAAO,KAAK,WAAW,iBAAiB;CACzC;;CAEA,eAAe;EACd,OAAO,KAAK,WAAW,mBAAmB;CAC3C;;;;;CAKA,0BAA0B;EACzB,OAAO,KAAK,WAAW,8BAA8B;CACtD;;CAEA,UAAU;EACT,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,iBAAiB;EAChB,OAAO,KAAK,WAAW,uBAAuB;CAC/C;;CAEA,gBAAgB;EACf,OAAO,KAAK,WAAW,oBAAoB;CAC5C;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,YAAY;EACX,OAAO,KAAK,WAAW,gBAAgB;CACxC;;CAEA,OAAO;EACN,OAAO,KAAK,WAAW,WAAW;CACnC;;CAEA,eAAe;EACd,OAAO,KAAK,WAAW,mBAAmB;CAC3C;;CAEA,eAAe;EACd,OAAO,KAAK,WAAW,mBAAmB;CAC3C;;CAEA,QAAQ,QAAQ,SAAS;EACxB,OAAO,KAAK,WAAW,gBAAgB;GACtC;GACA;EACD,CAAC;CACF;;CAEA,WAAW,QAAQ,SAAS;EAC3B,OAAO,KAAK,WAAW,mBAAmB;GACzC;GACA;EACD,CAAC;CACF;;CAEA,OAAO,QAAQ;EACd,OAAO,KAAK,WAAW,eAAe,EAAE,OAAO,CAAC;CACjD;;CAEA,QAAQ,QAAQ;EACf,OAAO,KAAK,WAAW,gBAAgB,EAAE,OAAO,CAAC;CAClD;;CAEA,UAAU;EACT,OAAO,KAAK,WAAW,cAAc;CACtC;;CAEA,SAAS,WAAW,SAAS,OAAO;EACnC,OAAO,KAAK,WAAW,iBAAiB;GACvC;GACA;EACD,CAAC;CACF;;CAEA,OAAO,OAAO;EACb,OAAO,KAAK,WAAW,eAAe,EAAE,MAAM,CAAC;CAChD;;CAEA,KAAK,OAAO,KAAK,OAAO,KAAK;EAC5B,OAAO,KAAK,WAAW,aAAa;GACnC;GACA;GACA;EACD,CAAC;CACF;;CAEA,MAAM,cAAc;EACnB,OAAO,KAAK,QAAQ,WAAW,YAAY;CAC5C;;CAEA,IAAI,cAAc;EACjB,OAAO,KAAK,QAAQ,SAAS,YAAY;CAC1C;;CAEA,kBAAkB,cAAc;EAC/B,OAAO,KAAK,QAAQ,uBAAuB,YAAY;CACxD;;CAEA,QAAQ,SAAS,cAAc;EAC9B,OAAO,KAAK,QAAQ,aAAa,cAAc,EAAE,QAAQ,CAAC;CAC3D;;;;;;;;;;CAUA,eAAe,WAAW,cAAc;EACvC,OAAO,KAAK,QAAQ,oBAAoB,cAAc,EAAE,UAAU,CAAC;CACpE;;CAEA,MAAM,OAAO,cAAc;EAC1B,OAAO,KAAK,QAAQ,WAAW,cAAc,EAAE,MAAM,CAAC;CACvD;;CAEA,SAAS,OAAO,cAAc;EAC7B,OAAO,KAAK,QAAQ,cAAc,cAAc,EAAE,UAAU,MAAM,CAAC;CACpE;;CAEA,SAAS,OAAO,cAAc;EAC7B,OAAO,KAAK,QAAQ,cAAc,cAAc,EAAE,UAAU,MAAM,CAAC;CACpE;;CAEA,UAAU,QAAQ,cAAc;EAC/B,OAAO,KAAK,QAAQ,eAAe,cAAc,EAAE,WAAW,OAAO,CAAC;CACvE;;CAEA,IAAI,KAAK,cAAc;EACtB,OAAO,KAAK,UAAU,KAAK,YAAY;CACxC;;CAEA,UAAU,QAAQ,cAAc;EAC/B,OAAO,KAAK,QAAQ,eAAe,cAAc,EAAE,WAAW,OAAO,CAAC;CACvE;;CAEA,IAAI,KAAK,cAAc;EACtB,OAAO,KAAK,UAAU,KAAK,YAAY;CACxC;;CAEA,OAAO,QAAQ,cAAc;EAC5B,OAAO,KAAK,QAAQ,YAAY,cAAc,EAAE,OAAO,CAAC;CACzD;;;;;;;;;;;;;;;CAeA,cAAc,KAAK,KAAK,cAAc;EACrC,OAAO,KAAK,QAAQ,mBAAmB,cAAc;GACpD,WAAW;GACX,WAAW;EACZ,CAAC;CACF;;CAEA,MAAM,cAAc;EACnB,OAAO,KAAK,QAAQ,WAAW,YAAY;CAC5C;;CAEA,aAAa,cAAc;EAC1B,OAAO,KAAK,QAAQ,kBAAkB,YAAY;CACnD;;CAEA,QAAQ,cAAc;EACrB,OAAO,KAAK,QAAQ,eAAe,YAAY;CAChD;;CAEA,WAAW,OAAO,cAAc;EAC/B,OAAO,KAAK,QAAQ,gBAAgB,cAAc,EAAE,MAAM,CAAC;CAC5D;;CAEA,SAAS,OAAO,cAAc;EAC7B,OAAO,KAAK,QAAQ,cAAc,cAAc,EAAE,MAAM,CAAC;CAC1D;;CAEA,SAAS,OAAO,cAAc;EAC7B,OAAO,KAAK,QAAQ,cAAc,cAAc,EAAE,MAAM,CAAC;CAC1D;;CAEA,YAAY,OAAO,cAAc;EAChC,OAAO,KAAK,QAAQ,iBAAiB,cAAc,EAAE,MAAM,CAAC;CAC7D;;CAEA,GAAG,cAAc;EAChB,OAAO,KAAK,QAAQ,QAAQ,YAAY;CACzC;;CAEA,IAAI,cAAc;EACjB,OAAO,KAAK,QAAQ,SAAS,YAAY;CAC1C;;CAEA,IAAI,cAAc;EACjB,OAAO,KAAK,QAAQ,SAAS,YAAY;CAC1C;;CAEA,WAAW,cAAc;EACxB,OAAO,KAAK,QAAQ,kBAAkB,YAAY;CACnD;;CAEA,MAAM,cAAc;EACnB,OAAO,KAAK,QAAQ,WAAW,YAAY;CAC5C;;CAEA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;CAEA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;CAEA,SAAS,cAAc;EACtB,OAAO,KAAK,QAAQ,cAAc,YAAY;CAC/C;;CAEA,UAAU,cAAc;EACvB,OAAO,KAAK,QAAQ,eAAe,YAAY;CAChD;;CAEA,WAAW,cAAc;EACxB,OAAO,KAAK,QAAQ,gBAAgB,YAAY;CACjD;;CAEA,UAAU,cAAc;EACvB,OAAO,KAAK,QAAQ,eAAe,YAAY;CAChD;;;;;;;;;CASA,KAAK,SAAS,cAAc;EAC3B,OAAO,KAAK,QAAQ,UAAU,cAAc,EAAE,QAAQ,CAAC;CACxD;;;;;;;;CAQA,KAAK,SAAS;EACb,MAAM,EAAE,cAAc,YAAY,WAAW,CAAC;EAC9C,OAAO,KAAK,QAAQ,UAAU,cAAc,EAAE,QAAQ,CAAC;CACxD;;CAEA,KAAK,cAAc;EAClB,OAAO,KAAK,QAAQ,UAAU,YAAY;CAC3C;;;;;;;;CAQA,OAAO,QAAQ,cAAc;EAC5B,OAAO,KAAK,QAAQ,YAAY,cAAc,EAAE,OAAO,CAAC;CACzD;;;;;;;;;;;;;CAaA,aAAa,SAAS,iBAAiB;EACtC,MAAM,SAAS,EAAE,MAAM,SAAS;EAChC,MAAM,UAAU,eAAe,KAAK,OAAO,WAAW;EACtD,IAAI,SAAS,cAAc,KAAK,GAAG,OAAO,YAAY,QAAQ;EAC9D,MAAM,UAAU,eAAe,KAAK,OAAO,WAAW;EACtD,IAAI,SAAS,cAAc,KAAK,GAAG,OAAO,YAAY,QAAQ;EAC9D,MAAM,cAAc,eAAe,KAAK,OAAO,eAAe;EAC9D,IAAI,aAAa;GAChB,IAAI,YAAY,cAAc,KAAK,GAAG,OAAO,YAAY,YAAY;GACrE,IAAI,YAAY,cAAc,KAAK,GAAG,OAAO,YAAY,YAAY;EACtE;EACA,MAAM,aAAa,eAAe,KAAK,OAAO,QAAQ;EACtD,IAAI,YAAY,WAAW,KAAK,GAAG;GAClC,OAAO,YAAY,WAAW;GAC9B,OAAO,YAAY,WAAW;EAC/B;EACA,MAAM,cAAc,eAAe,KAAK,OAAO,SAAS;EACxD,IAAI,aAAa,mBAAmB,QAAQ,OAAO,UAAU,YAAY,QAAQ;EACjF,IAAI,eAAe,KAAK,OAAO,OAAO,MAAM,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,OAAO,GAAG,OAAO,SAAS;OAC7G,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,KAAK,GAAG,OAAO,SAAS;OAC9D,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,IAAI,GAAG,OAAO,SAAS;OAC7D,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,KAAK,GAAG,OAAO,SAAS;OAC9D,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,KAAK,GAAG,OAAO,SAAS;OAC9D,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,MAAM,GAAG,OAAO,SAAS;OAC/D,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,UAAU,GAAG,OAAO,SAAS;EACxE,IAAI,CAAC,OAAO,QAAQ;GACnB,MAAM,WAAW,eAAe,KAAK,OAAO,MAAM;GAClD,IAAI,UAAU,OAAO,UAAU,SAAS,YAAY,IAAI,qBAAqB;GAC7E,IAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,MAAM,GAAG,OAAO,UAAU;GAChE,MAAM,aAAa,eAAe,KAAK,OAAO,QAAQ;GACtD,IAAI,YAAY,OAAO,UAAU,kBAAkB,WAAW,UAAU,GAAG;EAC5E;EACA,MAAM,SAAS,eAAe,KAAK,OAAO,IAAI;EAC9C,IAAI,QAAQ,UAAU,MAAM,QAAQ,OAAO,MAAM,GAAG,OAAO,OAAO,OAAO;EACzE,IAAI,KAAK,YAAY,cAAc,QAAQ,MAAM;EACjD,OAAO;CACR;AACD"}
@@ -5,7 +5,7 @@ import { BaseValidator } from "./base-validator.mjs";
5
5
  import { arrayRule } from "../rules/common/type-rules.mjs";
6
6
  import "../rules/index.mjs";
7
7
 
8
- //#region ../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/tuple-validator.mjs
8
+ //#region ../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/tuple-validator.mjs
9
9
  /**
10
10
  * Tuple validator class - validates fixed-length arrays with position-specific types
11
11
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tuple-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/tuple-validator.mjs"],"sourcesContent":["import { applyNullable } from \"../standard-schema/json-schema.mjs\";\nimport { setKeyPath } from \"../helpers/path-helpers.mjs\";\nimport \"../helpers/index.mjs\";\nimport { BaseValidator } from \"./base-validator.mjs\";\nimport { arrayRule } from \"../rules/common/type-rules.mjs\";\nimport \"../rules/index.mjs\";\n\n//#region ../seal/src/validators/tuple-validator.ts\n/**\n* Tuple validator class - validates fixed-length arrays with position-specific types\n*\n* @example\n* ```ts\n* // RGB color tuple\n* v.tuple([v.number(), v.number(), v.number()])\n* // Valid: [255, 128, 0]\n* // Invalid: [255, 128] (too short)\n*\n* // Mixed types\n* v.tuple([v.string(), v.int(), v.boolean()])\n* // Valid: [\"John\", 25, true]\n* ```\n*/\nvar TupleValidator = class extends BaseValidator {\n\tconstructor(validators, errorMessage) {\n\t\tsuper();\n\t\tthis.validators = validators;\n\t\tthis.addMutableRule(arrayRule, errorMessage);\n\t}\n\t/**\n\t* Check if value is an array type\n\t*/\n\tmatchesType(value) {\n\t\treturn Array.isArray(value);\n\t}\n\t/**\n\t* Clone the validator\n\t*/\n\tclone() {\n\t\tconst cloned = super.clone();\n\t\tcloned.validators = this.validators.map((v) => v.clone());\n\t\treturn cloned;\n\t}\n\t/**\n\t* Validate tuple - check length then validate each position\n\t*\n\t* Absent input (and absent without `.default()`) propagates as `data: undefined`\n\t* so the parent ObjectValidator can omit the key. Without this, optional tuple\n\t* fields would silently materialise as `[]` in the validated output and then\n\t* fail the length check.\n\t*/\n\tasync validate(data, context) {\n\t\tconst valueForRules = data ?? this.getDefaultValue();\n\t\tconst mutatedData = await this.mutate(valueForRules, context);\n\t\tconst result = await super.validate(data, context);\n\t\tif (result.isValid === false) return result;\n\t\tif (mutatedData === void 0 || mutatedData === null) return result;\n\t\tif (!Array.isArray(mutatedData)) return result;\n\t\tconst errors = [];\n\t\tif (mutatedData.length !== this.validators.length) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinput: context.key || \"value\",\n\t\t\t\terror: `Expected exactly ${this.validators.length} items, but got ${mutatedData.length}`\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terrors,\n\t\t\t\tdata: mutatedData\n\t\t\t};\n\t\t}\n\t\tconst validationPromises = this.validators.map(async (validator, index) => {\n\t\t\tconst childContext = {\n\t\t\t\t...context,\n\t\t\t\tparent: mutatedData,\n\t\t\t\tvalue: mutatedData[index],\n\t\t\t\tkey: index.toString(),\n\t\t\t\tpath: setKeyPath(context.path, index.toString())\n\t\t\t};\n\t\t\tconst childResult = await validator.validate(mutatedData[index], childContext);\n\t\t\tmutatedData[index] = childResult.data;\n\t\t\tif (childResult.isValid === false) errors.push(...childResult.errors);\n\t\t});\n\t\tawait Promise.all(validationPromises);\n\t\treturn {\n\t\t\tisValid: errors.length === 0,\n\t\t\terrors,\n\t\t\tdata: await this.startTransformationPipeline(mutatedData, context)\n\t\t};\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Tuple keyword diverges between targets:\n\t* - `draft-2020-12` → `prefixItems` + `items: false` (exact length enforced)\n\t* - `draft-07` → `items` as array + `additionalItems: false`\n\t* - `openapi-3.0` → same as draft-07 (OpenAPI 3.0 is based on draft-07)\n\t*\n\t* @example\n\t* ```ts\n\t* v.tuple([v.string(), v.int(), v.boolean()]).toJsonSchema(\"draft-2020-12\")\n\t* // → {\n\t* // type: \"array\",\n\t* // prefixItems: [{ type: \"string\" }, { type: \"integer\" }, { type: \"boolean\" }],\n\t* // items: false,\n\t* // minItems: 3,\n\t* // maxItems: 3\n\t* // }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\tconst itemSchemas = this.validators.map((v) => v.toJsonSchema(target));\n\t\tconst length = this.validators.length;\n\t\tconst schema = {\n\t\t\ttype: \"array\",\n\t\t\tminItems: length,\n\t\t\tmaxItems: length\n\t\t};\n\t\tif (target === \"draft-2020-12\") {\n\t\t\tschema.prefixItems = itemSchemas;\n\t\t\tschema.items = false;\n\t\t} else {\n\t\t\tschema.items = itemSchemas;\n\t\t\tschema.additionalItems = false;\n\t\t}\n\t\tif (this.isNullable) applyNullable(schema, target);\n\t\treturn schema;\n\t}\n};\n\n//#endregion\nexport { TupleValidator };\n//# sourceMappingURL=tuple-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAI,iBAAiB,cAAc,cAAc;CAChD,YAAY,YAAY,cAAc;EACrC,MAAM;EACN,KAAK,aAAa;EAClB,KAAK,eAAe,WAAW,YAAY;CAC5C;;;;CAIA,YAAY,OAAO;EAClB,OAAO,MAAM,QAAQ,KAAK;CAC3B;;;;CAIA,QAAQ;EACP,MAAM,SAAS,MAAM,MAAM;EAC3B,OAAO,aAAa,KAAK,WAAW,KAAK,MAAM,EAAE,MAAM,CAAC;EACxD,OAAO;CACR;;;;;;;;;CASA,MAAM,SAAS,MAAM,SAAS;EAC7B,MAAM,gBAAgB,QAAQ,KAAK,gBAAgB;EACnD,MAAM,cAAc,MAAM,KAAK,OAAO,eAAe,OAAO;EAC5D,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,OAAO;EACjD,IAAI,OAAO,YAAY,OAAO,OAAO;EACrC,IAAI,gBAAgB,KAAK,KAAK,gBAAgB,MAAM,OAAO;EAC3D,IAAI,CAAC,MAAM,QAAQ,WAAW,GAAG,OAAO;EACxC,MAAM,SAAS,CAAC;EAChB,IAAI,YAAY,WAAW,KAAK,WAAW,QAAQ;GAClD,OAAO,KAAK;IACX,MAAM;IACN,OAAO,QAAQ,OAAO;IACtB,OAAO,oBAAoB,KAAK,WAAW,OAAO,kBAAkB,YAAY;GACjF,CAAC;GACD,OAAO;IACN,SAAS;IACT;IACA,MAAM;GACP;EACD;EACA,MAAM,qBAAqB,KAAK,WAAW,IAAI,OAAO,WAAW,UAAU;GAC1E,MAAM,eAAe;IACpB,GAAG;IACH,QAAQ;IACR,OAAO,YAAY;IACnB,KAAK,MAAM,SAAS;IACpB,MAAM,WAAW,QAAQ,MAAM,MAAM,SAAS,CAAC;GAChD;GACA,MAAM,cAAc,MAAM,UAAU,SAAS,YAAY,QAAQ,YAAY;GAC7E,YAAY,SAAS,YAAY;GACjC,IAAI,YAAY,YAAY,OAAO,OAAO,KAAK,GAAG,YAAY,MAAM;EACrE,CAAC;EACD,MAAM,QAAQ,IAAI,kBAAkB;EACpC,OAAO;GACN,SAAS,OAAO,WAAW;GAC3B;GACA,MAAM,MAAM,KAAK,4BAA4B,aAAa,OAAO;EAClE;CACD;;;;;;;;;;;;;;;;;;;;;CAqBA,aAAa,SAAS,iBAAiB;EACtC,MAAM,cAAc,KAAK,WAAW,KAAK,MAAM,EAAE,aAAa,MAAM,CAAC;EACrE,MAAM,SAAS,KAAK,WAAW;EAC/B,MAAM,SAAS;GACd,MAAM;GACN,UAAU;GACV,UAAU;EACX;EACA,IAAI,WAAW,iBAAiB;GAC/B,OAAO,cAAc;GACrB,OAAO,QAAQ;EAChB,OAAO;GACN,OAAO,QAAQ;GACf,OAAO,kBAAkB;EAC1B;EACA,IAAI,KAAK,YAAY,cAAc,QAAQ,MAAM;EACjD,OAAO;CACR;AACD"}
1
+ {"version":3,"file":"tuple-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/tuple-validator.mjs"],"sourcesContent":["import { applyNullable } from \"../standard-schema/json-schema.mjs\";\nimport { setKeyPath } from \"../helpers/path-helpers.mjs\";\nimport \"../helpers/index.mjs\";\nimport { BaseValidator } from \"./base-validator.mjs\";\nimport { arrayRule } from \"../rules/common/type-rules.mjs\";\nimport \"../rules/index.mjs\";\n\n//#region ../seal/src/validators/tuple-validator.ts\n/**\n* Tuple validator class - validates fixed-length arrays with position-specific types\n*\n* @example\n* ```ts\n* // RGB color tuple\n* v.tuple([v.number(), v.number(), v.number()])\n* // Valid: [255, 128, 0]\n* // Invalid: [255, 128] (too short)\n*\n* // Mixed types\n* v.tuple([v.string(), v.int(), v.boolean()])\n* // Valid: [\"John\", 25, true]\n* ```\n*/\nvar TupleValidator = class extends BaseValidator {\n\tconstructor(validators, errorMessage) {\n\t\tsuper();\n\t\tthis.validators = validators;\n\t\tthis.addMutableRule(arrayRule, errorMessage);\n\t}\n\t/**\n\t* Check if value is an array type\n\t*/\n\tmatchesType(value) {\n\t\treturn Array.isArray(value);\n\t}\n\t/**\n\t* Clone the validator\n\t*/\n\tclone() {\n\t\tconst cloned = super.clone();\n\t\tcloned.validators = this.validators.map((v) => v.clone());\n\t\treturn cloned;\n\t}\n\t/**\n\t* Validate tuple - check length then validate each position\n\t*\n\t* Absent input (and absent without `.default()`) propagates as `data: undefined`\n\t* so the parent ObjectValidator can omit the key. Without this, optional tuple\n\t* fields would silently materialise as `[]` in the validated output and then\n\t* fail the length check.\n\t*/\n\tasync validate(data, context) {\n\t\tconst valueForRules = data ?? this.getDefaultValue();\n\t\tconst mutatedData = await this.mutate(valueForRules, context);\n\t\tconst result = await super.validate(data, context);\n\t\tif (result.isValid === false) return result;\n\t\tif (mutatedData === void 0 || mutatedData === null) return result;\n\t\tif (!Array.isArray(mutatedData)) return result;\n\t\tconst errors = [];\n\t\tif (mutatedData.length !== this.validators.length) {\n\t\t\terrors.push({\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinput: context.key || \"value\",\n\t\t\t\terror: `Expected exactly ${this.validators.length} items, but got ${mutatedData.length}`\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tisValid: false,\n\t\t\t\terrors,\n\t\t\t\tdata: mutatedData\n\t\t\t};\n\t\t}\n\t\tconst validationPromises = this.validators.map(async (validator, index) => {\n\t\t\tconst childContext = {\n\t\t\t\t...context,\n\t\t\t\tparent: mutatedData,\n\t\t\t\tvalue: mutatedData[index],\n\t\t\t\tkey: index.toString(),\n\t\t\t\tpath: setKeyPath(context.path, index.toString())\n\t\t\t};\n\t\t\tconst childResult = await validator.validate(mutatedData[index], childContext);\n\t\t\tmutatedData[index] = childResult.data;\n\t\t\tif (childResult.isValid === false) errors.push(...childResult.errors);\n\t\t});\n\t\tawait Promise.all(validationPromises);\n\t\treturn {\n\t\t\tisValid: errors.length === 0,\n\t\t\terrors,\n\t\t\tdata: await this.startTransformationPipeline(mutatedData, context)\n\t\t};\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Tuple keyword diverges between targets:\n\t* - `draft-2020-12` → `prefixItems` + `items: false` (exact length enforced)\n\t* - `draft-07` → `items` as array + `additionalItems: false`\n\t* - `openapi-3.0` → same as draft-07 (OpenAPI 3.0 is based on draft-07)\n\t*\n\t* @example\n\t* ```ts\n\t* v.tuple([v.string(), v.int(), v.boolean()]).toJsonSchema(\"draft-2020-12\")\n\t* // → {\n\t* // type: \"array\",\n\t* // prefixItems: [{ type: \"string\" }, { type: \"integer\" }, { type: \"boolean\" }],\n\t* // items: false,\n\t* // minItems: 3,\n\t* // maxItems: 3\n\t* // }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\tconst itemSchemas = this.validators.map((v) => v.toJsonSchema(target));\n\t\tconst length = this.validators.length;\n\t\tconst schema = {\n\t\t\ttype: \"array\",\n\t\t\tminItems: length,\n\t\t\tmaxItems: length\n\t\t};\n\t\tif (target === \"draft-2020-12\") {\n\t\t\tschema.prefixItems = itemSchemas;\n\t\t\tschema.items = false;\n\t\t} else {\n\t\t\tschema.items = itemSchemas;\n\t\t\tschema.additionalItems = false;\n\t\t}\n\t\tif (this.isNullable) applyNullable(schema, target);\n\t\treturn schema;\n\t}\n};\n\n//#endregion\nexport { TupleValidator };\n//# sourceMappingURL=tuple-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAI,iBAAiB,cAAc,cAAc;CAChD,YAAY,YAAY,cAAc;EACrC,MAAM;EACN,KAAK,aAAa;EAClB,KAAK,eAAe,WAAW,YAAY;CAC5C;;;;CAIA,YAAY,OAAO;EAClB,OAAO,MAAM,QAAQ,KAAK;CAC3B;;;;CAIA,QAAQ;EACP,MAAM,SAAS,MAAM,MAAM;EAC3B,OAAO,aAAa,KAAK,WAAW,KAAK,MAAM,EAAE,MAAM,CAAC;EACxD,OAAO;CACR;;;;;;;;;CASA,MAAM,SAAS,MAAM,SAAS;EAC7B,MAAM,gBAAgB,QAAQ,KAAK,gBAAgB;EACnD,MAAM,cAAc,MAAM,KAAK,OAAO,eAAe,OAAO;EAC5D,MAAM,SAAS,MAAM,MAAM,SAAS,MAAM,OAAO;EACjD,IAAI,OAAO,YAAY,OAAO,OAAO;EACrC,IAAI,gBAAgB,KAAK,KAAK,gBAAgB,MAAM,OAAO;EAC3D,IAAI,CAAC,MAAM,QAAQ,WAAW,GAAG,OAAO;EACxC,MAAM,SAAS,CAAC;EAChB,IAAI,YAAY,WAAW,KAAK,WAAW,QAAQ;GAClD,OAAO,KAAK;IACX,MAAM;IACN,OAAO,QAAQ,OAAO;IACtB,OAAO,oBAAoB,KAAK,WAAW,OAAO,kBAAkB,YAAY;GACjF,CAAC;GACD,OAAO;IACN,SAAS;IACT;IACA,MAAM;GACP;EACD;EACA,MAAM,qBAAqB,KAAK,WAAW,IAAI,OAAO,WAAW,UAAU;GAC1E,MAAM,eAAe;IACpB,GAAG;IACH,QAAQ;IACR,OAAO,YAAY;IACnB,KAAK,MAAM,SAAS;IACpB,MAAM,WAAW,QAAQ,MAAM,MAAM,SAAS,CAAC;GAChD;GACA,MAAM,cAAc,MAAM,UAAU,SAAS,YAAY,QAAQ,YAAY;GAC7E,YAAY,SAAS,YAAY;GACjC,IAAI,YAAY,YAAY,OAAO,OAAO,KAAK,GAAG,YAAY,MAAM;EACrE,CAAC;EACD,MAAM,QAAQ,IAAI,kBAAkB;EACpC,OAAO;GACN,SAAS,OAAO,WAAW;GAC3B;GACA,MAAM,MAAM,KAAK,4BAA4B,aAAa,OAAO;EAClE;CACD;;;;;;;;;;;;;;;;;;;;;CAqBA,aAAa,SAAS,iBAAiB;EACtC,MAAM,cAAc,KAAK,WAAW,KAAK,MAAM,EAAE,aAAa,MAAM,CAAC;EACrE,MAAM,SAAS,KAAK,WAAW;EAC/B,MAAM,SAAS;GACd,MAAM;GACN,UAAU;GACV,UAAU;EACX;EACA,IAAI,WAAW,iBAAiB;GAC/B,OAAO,cAAc;GACrB,OAAO,QAAQ;EAChB,OAAO;GACN,OAAO,QAAQ;GACf,OAAO,kBAAkB;EAC1B;EACA,IAAI,KAAK,YAAY,cAAc,QAAQ,MAAM;EACjD,OAAO;CACR;AACD"}
@@ -3,7 +3,7 @@ import { BaseValidator } from "./base-validator.mjs";
3
3
  import { unionRule } from "../rules/core/union.mjs";
4
4
  import "../rules/index.mjs";
5
5
 
6
- //#region ../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/union-validator.mjs
6
+ //#region ../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/union-validator.mjs
7
7
  /**
8
8
  * Union validator class - validates value against multiple validator types
9
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"union-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.16.0/node_modules/@warlock.js/seal/esm/validators/union-validator.mjs"],"sourcesContent":["import { getRuleOptions } from \"../standard-schema/json-schema.mjs\";\nimport { BaseValidator } from \"./base-validator.mjs\";\nimport { unionRule } from \"../rules/core/union.mjs\";\nimport \"../rules/index.mjs\";\n\n//#region ../seal/src/validators/union-validator.ts\n/**\n* Union validator class - validates value against multiple validator types\n*\n* Tries each validator in order until one passes. If a validator's matchesType()\n* returns false, it's skipped for optimization. First validator that both matches\n* the type and passes validation wins.\n*\n* @example\n* ```ts\n* // Accept email or username\n* const identifier = v.union([\n* v.string().email(),\n* v.string().alphanumeric().min(3).max(20)\n* ]);\n*\n* // Accept different types\n* const customValue = v.union([\n* v.string().required(),\n* v.number().required(),\n* v.boolean().required(),\n* v.file().required()\n* ]);\n* ```\n*/\nvar UnionValidator = class extends BaseValidator {\n\t/**\n\t* Set the validators to try for union validation\n\t*\n\t* @param validators - Array of validators to try\n\t* @param errorMessage - Optional custom error message if all validators fail\n\t* @returns This validator for chaining\n\t*\n\t* @example\n\t* ```ts\n\t* new UnionValidator()\n\t* .union([v.string(), v.number()], 'Must be string or number');\n\t* ```\n\t*/\n\tunion(validators, errorMessage) {\n\t\treturn this.addRule(unionRule, errorMessage, { validators });\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Generates `{ oneOf: [...] }` by mapping each sub-validator to its JSON Schema.\n\t*\n\t* @example\n\t* ```ts\n\t* v.union([v.string(), v.number()]).toJsonSchema(\"draft-2020-12\")\n\t* // → { oneOf: [{ type: \"string\" }, { type: \"number\" }] }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\treturn { oneOf: (getRuleOptions(this.rules, \"union\")?.validators ?? []).map((v) => v.toJsonSchema(target)) };\n\t}\n};\n\n//#endregion\nexport { UnionValidator };\n//# sourceMappingURL=union-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAI,iBAAiB,cAAc,cAAc;;;;;;;;;;;;;;CAchD,MAAM,YAAY,cAAc;EAC/B,OAAO,KAAK,QAAQ,WAAW,cAAc,EAAE,WAAW,CAAC;CAC5D;;;;;;;;;;;;CAYA,aAAa,SAAS,iBAAiB;EACtC,OAAO,EAAE,QAAQ,eAAe,KAAK,OAAO,OAAO,CAAC,EAAE,cAAc,CAAC,EAAC,CAAE,KAAK,MAAM,EAAE,aAAa,MAAM,CAAC,EAAE;CAC5G;AACD"}
1
+ {"version":3,"file":"union-validator.mjs","names":[],"sources":["../../../../../../../../../../../../../../node_modules/.pnpm/@warlock.js+seal@5.18.0/node_modules/@warlock.js/seal/esm/validators/union-validator.mjs"],"sourcesContent":["import { getRuleOptions } from \"../standard-schema/json-schema.mjs\";\nimport { BaseValidator } from \"./base-validator.mjs\";\nimport { unionRule } from \"../rules/core/union.mjs\";\nimport \"../rules/index.mjs\";\n\n//#region ../seal/src/validators/union-validator.ts\n/**\n* Union validator class - validates value against multiple validator types\n*\n* Tries each validator in order until one passes. If a validator's matchesType()\n* returns false, it's skipped for optimization. First validator that both matches\n* the type and passes validation wins.\n*\n* @example\n* ```ts\n* // Accept email or username\n* const identifier = v.union([\n* v.string().email(),\n* v.string().alphanumeric().min(3).max(20)\n* ]);\n*\n* // Accept different types\n* const customValue = v.union([\n* v.string().required(),\n* v.number().required(),\n* v.boolean().required(),\n* v.file().required()\n* ]);\n* ```\n*/\nvar UnionValidator = class extends BaseValidator {\n\t/**\n\t* Set the validators to try for union validation\n\t*\n\t* @param validators - Array of validators to try\n\t* @param errorMessage - Optional custom error message if all validators fail\n\t* @returns This validator for chaining\n\t*\n\t* @example\n\t* ```ts\n\t* new UnionValidator()\n\t* .union([v.string(), v.number()], 'Must be string or number');\n\t* ```\n\t*/\n\tunion(validators, errorMessage) {\n\t\treturn this.addRule(unionRule, errorMessage, { validators });\n\t}\n\t/**\n\t* @inheritdoc\n\t*\n\t* Generates `{ oneOf: [...] }` by mapping each sub-validator to its JSON Schema.\n\t*\n\t* @example\n\t* ```ts\n\t* v.union([v.string(), v.number()]).toJsonSchema(\"draft-2020-12\")\n\t* // → { oneOf: [{ type: \"string\" }, { type: \"number\" }] }\n\t* ```\n\t*/\n\ttoJsonSchema(target = \"draft-2020-12\") {\n\t\treturn { oneOf: (getRuleOptions(this.rules, \"union\")?.validators ?? []).map((v) => v.toJsonSchema(target)) };\n\t}\n};\n\n//#endregion\nexport { UnionValidator };\n//# sourceMappingURL=union-validator.mjs.map"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAI,iBAAiB,cAAc,cAAc;;;;;;;;;;;;;;CAchD,MAAM,YAAY,cAAc;EAC/B,OAAO,KAAK,QAAQ,WAAW,cAAc,EAAE,WAAW,CAAC;CAC5D;;;;;;;;;;;;CAYA,aAAa,SAAS,iBAAiB;EACtC,OAAO,EAAE,QAAQ,eAAe,KAAK,OAAO,OAAO,CAAC,EAAE,cAAc,CAAC,EAAC,CAAE,KAAK,MAAM,EAAE,aAAa,MAAM,CAAC,EAAE;CAC5G;AACD"}
@@ -21,7 +21,7 @@ Or with your preferred package manager:
21
21
  async function loadHerald() {
22
22
  if (heraldModule) return heraldModule;
23
23
  try {
24
- heraldModule = await import("../node_modules/.pnpm/@warlock.js_herald@5.16.0_@_15e7e2572808bf0b3692557815998b64/node_modules/@warlock.js/herald/esm/index.mjs");
24
+ heraldModule = await import("../node_modules/.pnpm/@warlock.js_herald@5.18.0_@_cff41be99df8cf0240c0ee463e185280/node_modules/@warlock.js/herald/esm/index.mjs");
25
25
  return heraldModule;
26
26
  } catch {
27
27
  throw new Error(INSTALL_INSTRUCTIONS);
package/llms-full.txt CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ---
10
10
  name: configure-notifications
11
- description: 'Wire `@warlock.js/notifications` via a declarative `src/config/notifications.ts` that exports a `NotificationConfig` default — the notifications connector registers it at boot, so app code never calls `setNotificationConfig`. `channels`: registry mapping name → factory result (`mailChannel`, `inApp.configure`, custom `defineChannel`); `queue`: optional `QueueDispatcher` (`.queue()` throws without it); `preferences`: optional `PreferenceProvider` (drops channels the recipient muted); `rateLimit`: optional `RateLimiter` (drops channels exceeding per-recipient budgets). Triggers: `config/notifications.ts`, `NotificationConfig`, `setNotificationConfig`, `getNotificationConfig`, `mailChannel`, `inApp.configure`, "configure notifications", "wire notifications at boot", "set preferences provider", "set rate limit"; typical import `import { type NotificationConfig, mailChannel, inApp } from "@warlock.js/notifications"`. Skip: building a reusable notification — `@warlock.js/notifications/define-notification/SKILL.md`; the in-app read API — `@warlock.js/notifications/use-in-app/SKILL.md`; adding a custom channel — `@warlock.js/notifications/define-channel/SKILL.md`.'
11
+ description: "Configure notifications in @warlock.js/notifications; use when you need to configure notifications."
12
12
  ---
13
13
 
14
14
  # Configure notifications
@@ -150,7 +150,7 @@ afterEach(() => resetNotificationConfig());
150
150
 
151
151
  ---
152
152
  name: define-channel
153
- description: 'Add a custom notification channel — `defineChannel<P>({ name, route?, send })` returns a `Channel<P>` you register in the `channels` map of `setNotificationConfig`. `name` matches the key in `NotificationChannels` (extend via `declare module` for typing); `route(notifiable)` resolves the recipient''s address (defaults to `{ id }` when omitted); `send({ payload, route, notifiable, options })` does the actual transport. Use for Slack/Discord/internal-webhook/anything else — `fetch`-based with NO SDK is the simplest variant. Channels that load a heavy SDK should follow the lazy-import pattern from the develop-feature playbook. Triggers: `defineChannel`, `Channel<P>`, "custom notification channel", "add discord channel", "slack channel", "webhook channel", "new channel type", `declare module "@warlock.js/notifications"`; typical import `import { defineChannel } from "@warlock.js/notifications"`. Skip: lazy-loading an optional SDK behind the channel — `D:/xampp/htdocs/mongez/node/.claude/skills/develop-warlock.js-feature/SKILL.md`; using built-in channels — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
153
+ description: "defineChannel — custom channels in @warlock.js/notifications; use when you need to define channel."
154
154
  ---
155
155
 
156
156
  # `defineChannel` — custom channels
@@ -261,7 +261,7 @@ export const slackChannel = (config: { token: string }) =>
261
261
 
262
262
  ---
263
263
  name: define-notification
264
- description: 'Build a reusable multi-channel notification with `defineNotification<Data>({ type, via, ...renderers })`. `type` is the stable identifier preference/rate-limit gates use AND defaults the database channel''s `type`. `via` is `ChannelName[]` OR `(data, to) => ChannelName[]` for per-recipient channel selection. Renderers are `(data, to, ctx) => NotificationChannels[C]`; `ctx` carries `locale` + `meta` from `SendOptions`. The returned object exposes `.send(to|to[], data, options?)`, `.queue(to|to[], data, options?)`, and `.only(...channels)`. Per-recipient + per-channel `Promise.allSettled` isolates failures; the database channel''s `type` is auto-defaulted from `def.type`; `SendOptions.idempotencyKey` is injected into the database payload. Triggers: `defineNotification`, `via`, "reusable notification", "multi-channel notification", "send through several channels at once", "render per channel", `RenderContext`, `def.type`; "force on a notification", "queue with delay"; typical import `import { defineNotification } from "@warlock.js/notifications"`. Skip: single-channel ad-hoc sends — `@warlock.js/notifications/send-ad-hoc/SKILL.md`; adding a brand-new channel — `@warlock.js/notifications/define-channel/SKILL.md`; observing dispatch outcomes — `@warlock.js/notifications/observe-notifications/SKILL.md`.'
264
+ description: "defineNotification — reusable multi-channel notification in @warlock.js/notifications; use when you need to define notification."
265
265
  ---
266
266
 
267
267
  # `defineNotification` — reusable multi-channel notification
@@ -398,7 +398,7 @@ Per-recipient: each recipient gets an independent `Promise.allSettled`. Per-chan
398
398
 
399
399
  ---
400
400
  name: notifications-basics
401
- description: 'Front-door for `@warlock.js/notifications` — what the package is, when to reach for it, and the four moving parts (channel registry, defineNotification, notify, inApp). Multi-channel dispatch: define once, fire anywhere. Recipients are cascade `Model` instances; payloads are typed per channel via a declaration-merge `NotificationChannels` registry; reusable definitions go through `defineNotification`; ad-hoc per-channel sends go through the `notify.<channel>` proxy; the in-app database channel is read via the `inApp` facade. Phase 1 ships `mail` + `database`; bridges-backed channels (whatsapp/telegram/push/slack) arrive in Phase 2. Triggers: `defineNotification`, `notify.<channel>`, `inApp.configure`, `setNotificationConfig`, `NotificationConfig`, `NotificationChannels`; "send a notification", "in-app notifications", "what channels can I use", "what is `@warlock.js/notifications`", "where do I start"; typical import `import { defineNotification, notify, inApp } from "@warlock.js/notifications"`. Skip: configuring channels in `config/notifications.ts` — `@warlock.js/notifications/configure-notifications/SKILL.md`; building a multi-channel definition — `@warlock.js/notifications/define-notification/SKILL.md`; reading in-app rows — `@warlock.js/notifications/use-in-app/SKILL.md`.'
401
+ description: "Start here for @warlock.js/notifications channels, notification definitions, delivery, and application setup."
402
402
  ---
403
403
 
404
404
  # `@warlock.js/notifications` — basics
@@ -500,7 +500,7 @@ await inApp.markAsRead(user, "ntf_123");
500
500
 
501
501
  ---
502
502
  name: observe-notifications
503
- description: 'Wire metrics, logging, tracing, and audits via `notifications.on(event, handler)` — four events fire per (channel, recipient): `sending` (gates passed, about to hit the transport), `sent` (succeeded), `failed` (channel threw — carries the Error), `skipped` (a pre-send gate dropped it — carries `reason: "preference" | "rate-limit"`). Every event carries the recipient as `notifiable?` (undefined only for raw-target ad-hoc sends) and a `dispatchId` — `sending` and its terminal `sent`/`failed` share it, so observers can pair them (spans, latency, hung-send detection). `sent`/`failed` also carry `durationMs`. Handler exceptions are logged-and-swallowed so one bad listener can not break the dispatcher. `on(...)` returns an unsubscribe function; `off(event, handler)` exists for symmetry. Triggers: `notifications.on`, `notifications.off`, `"sending"` event, `"sent"` event, `"failed"` event, `"skipped"` event, `dispatchId`, `durationMs`, `NotificationEvents`, "notification metrics", "notification latency", "trace notifications", "notification audit log", "track notification drops"; typical import `import { notifications } from "@warlock.js/notifications"`. Skip: building notifications — `@warlock.js/notifications/define-notification/SKILL.md`; configuring the preference/rate-limit gates that produce `skipped` — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
503
+ description: "Observe notifications in @warlock.js/notifications; use when you need to observe notifications."
504
504
  ---
505
505
 
506
506
  # Observe notifications
@@ -570,7 +570,7 @@ A handler that throws is logged and swallowed — the other handlers for the sam
570
570
 
571
571
  ---
572
572
  name: queue-notifications
573
- description: "Send notifications asynchronously through the herald backend or the BullMQ driver. Configure a QueueDispatcher in config/notifications.ts, then use notif.queue(to, data, options?) to enqueue rendered jobs. Herald uses heraldQueue() and startNotificationsWorker(); bullmqQueue({ attempts, backoff }) from @warlock.js/notifications uses BullMQ (lazy-loading the optional @warlock.js/queue peer), supports retries, and honours SendOptions.delay. Without a queue configured, .queue() rejects NoQueueDispatcherError. Triggers: heraldQueue, bullmqQueue, startNotificationsWorker, QueueDispatcher, .queue(, async notifications, queue notifications, notification worker, background notifications, notifications.dispatch. Skip: synchronous sends - @warlock.js/notifications/define-notification/SKILL.md; herald itself - @warlock.js/herald/*."
573
+ description: "Queue notifications (async) in @warlock.js/notifications; use when you need to queue notifications."
574
574
  ---
575
575
 
576
576
  # Queue notifications (async)
@@ -684,7 +684,7 @@ await orderShipped.queue(user, { order }, { idempotencyKey: `ship:${order.id}` }
684
684
 
685
685
  ---
686
686
  name: send-ad-hoc
687
- description: 'Ad-hoc per-channel send via the `notify.<channel>(to, payload, options?)` Proxy facade. Works for any channel registered in `NotificationChannels` (built-in or custom). `to` accepts a `Notifiable` model OR a raw route string (`"x@y.com"`); `payload` is typed per channel via the registry; `options` is the standard `SendOptions`. `notify.channel(name).send(...)` is the runtime escape when the channel name is not a compile-time literal. Type-based preference gating applies when a type is known — explicit via `options.type` OR auto-detected from a database payload''s `type` field. For multi-channel sends use `defineNotification` instead — there is no inline `notify(to, { via, ... })` form on purpose. Triggers: `notify.<channel>`, `notify.channel(name)`, `notify.mail`, `notify.database`, "send a one-off notification", "ad-hoc notification", "send an email without defining a notification", "raw email target", "dynamic channel name"; typical import `import { notify } from "@warlock.js/notifications"`. Skip: reusable multi-channel notifications — `@warlock.js/notifications/define-notification/SKILL.md`; configuring channels — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
687
+ description: "notify.<channel> — ad-hoc, per-channel sends in @warlock.js/notifications; use when you need to send ad hoc."
688
688
  ---
689
689
 
690
690
  # `notify.<channel>` — ad-hoc, per-channel sends
@@ -783,7 +783,7 @@ await notify.slack(staff, { text: "Deploy starting" });
783
783
 
784
784
  ---
785
785
  name: use-in-app
786
- description: 'Use the `inApp` facade for the in-app/database channel''s READ side: `inApp.configure({ model: Notification })` or `{ repository: myRepo }` binds the store AND returns the channel; `inApp.list / listUnread / countUnread / markAsRead / markAsUnread` are RECIPIENT-SCOPED by construction (no IDOR — `markAsRead(user, id)` cannot flip another user''s row even with a foreign id). `countUnread` uses `RepositoryManager.countCached` for the badge fast-path. Triggers: `inApp.configure`, `inApp.list`, `inApp.listUnread`, `inApp.countUnread`, `inApp.markAsRead`, `inApp.markAsUnread`, `BaseNotificationsRepository`, `DatabaseNotification`, `NotificationsFilter`, "in-app notifications", "mark notification as read", "unread count", "notification badge", "IDOR-safe markAsRead"; typical import `import { inApp } from "@warlock.js/notifications"`. Skip: writing notifications (use `defineNotification` or `notify.database`) — `@warlock.js/notifications/define-notification/SKILL.md`; the migration columns — `@warlock.js/notifications/write-notification-migration/SKILL.md`; wiring it into config — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
786
+ description: "inApp — in-app notification read API in @warlock.js/notifications; use when you need to use in app."
787
787
  ---
788
788
 
789
789
  # `inApp` — in-app notification read API
@@ -959,7 +959,7 @@ database: inApp.configure({ repository: notificationsRepository }),
959
959
 
960
960
  ---
961
961
  name: write-notification-migration
962
- description: 'Create the notifications table with the `notificationColumns(Notification)` factory + cascade `Migration.create`. Column NAMES come from the model''s `columnMap` (recipient / tenant / readAt / isRead); the fixed columns are `type` / `title` / `body` / `payload` / `idempotency_key`. Read-state follows columnMap presence: `readAt` → nullable timestamp, `isRead` → indexed boolean, both → both. Defaults to `user_id` + `read_at` when no columnMap. Spread + extend for extras (FK references, composite indexes). Triggers: `notificationColumns`, `Migration.create` for notifications, "create the notifications table", "notification migration", "add organization_id to notifications", `is_read` column, `read_at` column, `idempotency_key` column; typical import `import { Migration } from "@warlock.js/cascade"; import { notificationColumns } from "@warlock.js/notifications"`. Skip: generic cascade migration writing — `@warlock.js/cascade/write-migration/SKILL.md`; the model itself — `@warlock.js/notifications/use-in-app/SKILL.md`.'
962
+ description: "Write the notifications migration in @warlock.js/notifications; use when you need to write notification migration."
963
963
  ---
964
964
 
965
965
  # Write the notifications migration
package/llms.txt CHANGED
@@ -6,12 +6,12 @@
6
6
 
7
7
  ## Skills
8
8
 
9
- - [configure-notifications](@warlock.js/notifications/configure-notifications/SKILL.md): Wire `@warlock.js/notifications` via a declarative `src/config/notifications.ts` that exports a `NotificationConfig` default — the notifications connector registers it at boot, so app code never calls `setNotificationConfig`. `channels`: registry mapping name → factory result (`mailChannel`, `inApp.configure`, custom `defineChannel`); `queue`: optional `QueueDispatcher` (`.queue()` throws without it); `preferences`: optional `PreferenceProvider` (drops channels the recipient muted); `rateLimit`: optional `RateLimiter` (drops channels exceeding per-recipient budgets). Triggers: `config/notifications.ts`, `NotificationConfig`, `setNotificationConfig`, `getNotificationConfig`, `mailChannel`, `inApp.configure`, "configure notifications", "wire notifications at boot", "set preferences provider", "set rate limit"; typical import `import { type NotificationConfig, mailChannel, inApp } from "@warlock.js/notifications"`. Skip: building a reusable notification — `@warlock.js/notifications/define-notification/SKILL.md`; the in-app read API — `@warlock.js/notifications/use-in-app/SKILL.md`; adding a custom channel — `@warlock.js/notifications/define-channel/SKILL.md`.
10
- - [define-channel](@warlock.js/notifications/define-channel/SKILL.md): Add a custom notification channel — `defineChannel<P>({ name, route?, send })` returns a `Channel<P>` you register in the `channels` map of `setNotificationConfig`. `name` matches the key in `NotificationChannels` (extend via `declare module` for typing); `route(notifiable)` resolves the recipient's address (defaults to `{ id }` when omitted); `send({ payload, route, notifiable, options })` does the actual transport. Use for Slack/Discord/internal-webhook/anything else — `fetch`-based with NO SDK is the simplest variant. Channels that load a heavy SDK should follow the lazy-import pattern from the develop-feature playbook. Triggers: `defineChannel`, `Channel<P>`, "custom notification channel", "add discord channel", "slack channel", "webhook channel", "new channel type", `declare module "@warlock.js/notifications"`; typical import `import { defineChannel } from "@warlock.js/notifications"`. Skip: lazy-loading an optional SDK behind the channel — `D:/xampp/htdocs/mongez/node/.claude/skills/develop-warlock.js-feature/SKILL.md`; using built-in channels — `@warlock.js/notifications/configure-notifications/SKILL.md`.
11
- - [define-notification](@warlock.js/notifications/define-notification/SKILL.md): Build a reusable multi-channel notification with `defineNotification<Data>({ type, via, ...renderers })`. `type` is the stable identifier preference/rate-limit gates use AND defaults the database channel's `type`. `via` is `ChannelName[]` OR `(data, to) => ChannelName[]` for per-recipient channel selection. Renderers are `(data, to, ctx) => NotificationChannels[C]`; `ctx` carries `locale` + `meta` from `SendOptions`. The returned object exposes `.send(to|to[], data, options?)`, `.queue(to|to[], data, options?)`, and `.only(...channels)`. Per-recipient + per-channel `Promise.allSettled` isolates failures; the database channel's `type` is auto-defaulted from `def.type`; `SendOptions.idempotencyKey` is injected into the database payload. Triggers: `defineNotification`, `via`, "reusable notification", "multi-channel notification", "send through several channels at once", "render per channel", `RenderContext`, `def.type`; "force on a notification", "queue with delay"; typical import `import { defineNotification } from "@warlock.js/notifications"`. Skip: single-channel ad-hoc sends — `@warlock.js/notifications/send-ad-hoc/SKILL.md`; adding a brand-new channel — `@warlock.js/notifications/define-channel/SKILL.md`; observing dispatch outcomes — `@warlock.js/notifications/observe-notifications/SKILL.md`.
12
- - [notifications-basics](@warlock.js/notifications/notifications-basics/SKILL.md): Front-door for `@warlock.js/notifications` — what the package is, when to reach for it, and the four moving parts (channel registry, defineNotification, notify, inApp). Multi-channel dispatch: define once, fire anywhere. Recipients are cascade `Model` instances; payloads are typed per channel via a declaration-merge `NotificationChannels` registry; reusable definitions go through `defineNotification`; ad-hoc per-channel sends go through the `notify.<channel>` proxy; the in-app database channel is read via the `inApp` facade. Phase 1 ships `mail` + `database`; bridges-backed channels (whatsapp/telegram/push/slack) arrive in Phase 2. Triggers: `defineNotification`, `notify.<channel>`, `inApp.configure`, `setNotificationConfig`, `NotificationConfig`, `NotificationChannels`; "send a notification", "in-app notifications", "what channels can I use", "what is `@warlock.js/notifications`", "where do I start"; typical import `import { defineNotification, notify, inApp } from "@warlock.js/notifications"`. Skip: configuring channels in `config/notifications.ts` — `@warlock.js/notifications/configure-notifications/SKILL.md`; building a multi-channel definition — `@warlock.js/notifications/define-notification/SKILL.md`; reading in-app rows — `@warlock.js/notifications/use-in-app/SKILL.md`.
13
- - [observe-notifications](@warlock.js/notifications/observe-notifications/SKILL.md): Wire metrics, logging, tracing, and audits via `notifications.on(event, handler)` — four events fire per (channel, recipient): `sending` (gates passed, about to hit the transport), `sent` (succeeded), `failed` (channel threw — carries the Error), `skipped` (a pre-send gate dropped it — carries `reason: "preference" | "rate-limit"`). Every event carries the recipient as `notifiable?` (undefined only for raw-target ad-hoc sends) and a `dispatchId` — `sending` and its terminal `sent`/`failed` share it, so observers can pair them (spans, latency, hung-send detection). `sent`/`failed` also carry `durationMs`. Handler exceptions are logged-and-swallowed so one bad listener can not break the dispatcher. `on(...)` returns an unsubscribe function; `off(event, handler)` exists for symmetry. Triggers: `notifications.on`, `notifications.off`, `"sending"` event, `"sent"` event, `"failed"` event, `"skipped"` event, `dispatchId`, `durationMs`, `NotificationEvents`, "notification metrics", "notification latency", "trace notifications", "notification audit log", "track notification drops"; typical import `import { notifications } from "@warlock.js/notifications"`. Skip: building notifications — `@warlock.js/notifications/define-notification/SKILL.md`; configuring the preference/rate-limit gates that produce `skipped` — `@warlock.js/notifications/configure-notifications/SKILL.md`.
14
- - [queue-notifications](@warlock.js/notifications/queue-notifications/SKILL.md): Send notifications asynchronously through the herald backend or the BullMQ driver. Configure a QueueDispatcher in config/notifications.ts, then use notif.queue(to, data, options?) to enqueue rendered jobs. Herald uses heraldQueue() and startNotificationsWorker(); bullmqQueue({ attempts, backoff }) from @warlock.js/notifications uses BullMQ (lazy-loading the optional @warlock.js/queue peer), supports retries, and honours SendOptions.delay. Without a queue configured, .queue() rejects NoQueueDispatcherError. Triggers: heraldQueue, bullmqQueue, startNotificationsWorker, QueueDispatcher, .queue(, async notifications, queue notifications, notification worker, background notifications, notifications.dispatch. Skip: synchronous sends - @warlock.js/notifications/define-notification/SKILL.md; herald itself - @warlock.js/herald/*.
15
- - [send-ad-hoc](@warlock.js/notifications/send-ad-hoc/SKILL.md): Ad-hoc per-channel send via the `notify.<channel>(to, payload, options?)` Proxy facade. Works for any channel registered in `NotificationChannels` (built-in or custom). `to` accepts a `Notifiable` model OR a raw route string (`"x@y.com"`); `payload` is typed per channel via the registry; `options` is the standard `SendOptions`. `notify.channel(name).send(...)` is the runtime escape when the channel name is not a compile-time literal. Type-based preference gating applies when a type is known — explicit via `options.type` OR auto-detected from a database payload's `type` field. For multi-channel sends use `defineNotification` instead — there is no inline `notify(to, { via, ... })` form on purpose. Triggers: `notify.<channel>`, `notify.channel(name)`, `notify.mail`, `notify.database`, "send a one-off notification", "ad-hoc notification", "send an email without defining a notification", "raw email target", "dynamic channel name"; typical import `import { notify } from "@warlock.js/notifications"`. Skip: reusable multi-channel notifications — `@warlock.js/notifications/define-notification/SKILL.md`; configuring channels — `@warlock.js/notifications/configure-notifications/SKILL.md`.
16
- - [use-in-app](@warlock.js/notifications/use-in-app/SKILL.md): Use the `inApp` facade for the in-app/database channel's READ side: `inApp.configure({ model: Notification })` or `{ repository: myRepo }` binds the store AND returns the channel; `inApp.list / listUnread / countUnread / markAsRead / markAsUnread` are RECIPIENT-SCOPED by construction (no IDOR — `markAsRead(user, id)` cannot flip another user's row even with a foreign id). `countUnread` uses `RepositoryManager.countCached` for the badge fast-path. Triggers: `inApp.configure`, `inApp.list`, `inApp.listUnread`, `inApp.countUnread`, `inApp.markAsRead`, `inApp.markAsUnread`, `BaseNotificationsRepository`, `DatabaseNotification`, `NotificationsFilter`, "in-app notifications", "mark notification as read", "unread count", "notification badge", "IDOR-safe markAsRead"; typical import `import { inApp } from "@warlock.js/notifications"`. Skip: writing notifications (use `defineNotification` or `notify.database`) — `@warlock.js/notifications/define-notification/SKILL.md`; the migration columns — `@warlock.js/notifications/write-notification-migration/SKILL.md`; wiring it into config — `@warlock.js/notifications/configure-notifications/SKILL.md`.
17
- - [write-notification-migration](@warlock.js/notifications/write-notification-migration/SKILL.md): Create the notifications table with the `notificationColumns(Notification)` factory + cascade `Migration.create`. Column NAMES come from the model's `columnMap` (recipient / tenant / readAt / isRead); the fixed columns are `type` / `title` / `body` / `payload` / `idempotency_key`. Read-state follows columnMap presence: `readAt` → nullable timestamp, `isRead` → indexed boolean, both → both. Defaults to `user_id` + `read_at` when no columnMap. Spread + extend for extras (FK references, composite indexes). Triggers: `notificationColumns`, `Migration.create` for notifications, "create the notifications table", "notification migration", "add organization_id to notifications", `is_read` column, `read_at` column, `idempotency_key` column; typical import `import { Migration } from "@warlock.js/cascade"; import { notificationColumns } from "@warlock.js/notifications"`. Skip: generic cascade migration writing — `@warlock.js/cascade/write-migration/SKILL.md`; the model itself — `@warlock.js/notifications/use-in-app/SKILL.md`.
9
+ - [configure-notifications](@warlock.js/notifications/configure-notifications/SKILL.md): Configure notifications in @warlock.js/notifications; use when you need to configure notifications.
10
+ - [define-channel](@warlock.js/notifications/define-channel/SKILL.md): defineChannel — custom channels in @warlock.js/notifications; use when you need to define channel.
11
+ - [define-notification](@warlock.js/notifications/define-notification/SKILL.md): defineNotification — reusable multi-channel notification in @warlock.js/notifications; use when you need to define notification.
12
+ - [notifications-basics](@warlock.js/notifications/notifications-basics/SKILL.md): Start here for @warlock.js/notifications channels, notification definitions, delivery, and application setup.
13
+ - [observe-notifications](@warlock.js/notifications/observe-notifications/SKILL.md): Observe notifications in @warlock.js/notifications; use when you need to observe notifications.
14
+ - [queue-notifications](@warlock.js/notifications/queue-notifications/SKILL.md): Queue notifications (async) in @warlock.js/notifications; use when you need to queue notifications.
15
+ - [send-ad-hoc](@warlock.js/notifications/send-ad-hoc/SKILL.md): notify.<channel> — ad-hoc, per-channel sends in @warlock.js/notifications; use when you need to send ad hoc.
16
+ - [use-in-app](@warlock.js/notifications/use-in-app/SKILL.md): inApp — in-app notification read API in @warlock.js/notifications; use when you need to use in app.
17
+ - [write-notification-migration](@warlock.js/notifications/write-notification-migration/SKILL.md): Write the notifications migration in @warlock.js/notifications; use when you need to write notification migration.
package/package.json CHANGED
@@ -5,16 +5,16 @@
5
5
  "environment": "server"
6
6
  },
7
7
  "dependencies": {
8
- "@warlock.js/cache": "5.18.0",
9
- "@warlock.js/cascade": "5.18.0",
10
- "@warlock.js/core": "5.18.0",
11
- "@warlock.js/logger": "5.18.0"
8
+ "@warlock.js/cache": "5.19.1",
9
+ "@warlock.js/cascade": "5.19.1",
10
+ "@warlock.js/core": "5.19.1",
11
+ "@warlock.js/logger": "5.19.1"
12
12
  },
13
13
  "optionalDependencies": {
14
- "@warlock.js/herald": "5.18.0"
14
+ "@warlock.js/herald": "5.19.1"
15
15
  },
16
16
  "peerDependencies": {
17
- "@warlock.js/queue": "5.18.0"
17
+ "@warlock.js/queue": "5.19.1"
18
18
  },
19
19
  "peerDependenciesMeta": {
20
20
  "@warlock.js/queue": {
@@ -35,7 +35,7 @@
35
35
  ],
36
36
  "author": "hassanzohdy",
37
37
  "license": "MIT",
38
- "version": "5.18.0",
38
+ "version": "5.19.1",
39
39
  "main": "./cjs/index.cjs",
40
40
  "module": "./esm/index.mjs",
41
41
  "types": "./esm/index.d.mts",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: configure-notifications
3
- description: 'Wire `@warlock.js/notifications` via a declarative `src/config/notifications.ts` that exports a `NotificationConfig` default — the notifications connector registers it at boot, so app code never calls `setNotificationConfig`. `channels`: registry mapping name → factory result (`mailChannel`, `inApp.configure`, custom `defineChannel`); `queue`: optional `QueueDispatcher` (`.queue()` throws without it); `preferences`: optional `PreferenceProvider` (drops channels the recipient muted); `rateLimit`: optional `RateLimiter` (drops channels exceeding per-recipient budgets). Triggers: `config/notifications.ts`, `NotificationConfig`, `setNotificationConfig`, `getNotificationConfig`, `mailChannel`, `inApp.configure`, "configure notifications", "wire notifications at boot", "set preferences provider", "set rate limit"; typical import `import { type NotificationConfig, mailChannel, inApp } from "@warlock.js/notifications"`. Skip: building a reusable notification — `@warlock.js/notifications/define-notification/SKILL.md`; the in-app read API — `@warlock.js/notifications/use-in-app/SKILL.md`; adding a custom channel — `@warlock.js/notifications/define-channel/SKILL.md`.'
3
+ description: "Configure notifications in @warlock.js/notifications; use when you need to configure notifications."
4
4
  ---
5
5
 
6
6
  # Configure notifications
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: define-channel
3
- description: 'Add a custom notification channel — `defineChannel<P>({ name, route?, send })` returns a `Channel<P>` you register in the `channels` map of `setNotificationConfig`. `name` matches the key in `NotificationChannels` (extend via `declare module` for typing); `route(notifiable)` resolves the recipient''s address (defaults to `{ id }` when omitted); `send({ payload, route, notifiable, options })` does the actual transport. Use for Slack/Discord/internal-webhook/anything else — `fetch`-based with NO SDK is the simplest variant. Channels that load a heavy SDK should follow the lazy-import pattern from the develop-feature playbook. Triggers: `defineChannel`, `Channel<P>`, "custom notification channel", "add discord channel", "slack channel", "webhook channel", "new channel type", `declare module "@warlock.js/notifications"`; typical import `import { defineChannel } from "@warlock.js/notifications"`. Skip: lazy-loading an optional SDK behind the channel — `D:/xampp/htdocs/mongez/node/.claude/skills/develop-warlock.js-feature/SKILL.md`; using built-in channels — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
3
+ description: "defineChannel — custom channels in @warlock.js/notifications; use when you need to define channel."
4
4
  ---
5
5
 
6
6
  # `defineChannel` — custom channels
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: define-notification
3
- description: 'Build a reusable multi-channel notification with `defineNotification<Data>({ type, via, ...renderers })`. `type` is the stable identifier preference/rate-limit gates use AND defaults the database channel''s `type`. `via` is `ChannelName[]` OR `(data, to) => ChannelName[]` for per-recipient channel selection. Renderers are `(data, to, ctx) => NotificationChannels[C]`; `ctx` carries `locale` + `meta` from `SendOptions`. The returned object exposes `.send(to|to[], data, options?)`, `.queue(to|to[], data, options?)`, and `.only(...channels)`. Per-recipient + per-channel `Promise.allSettled` isolates failures; the database channel''s `type` is auto-defaulted from `def.type`; `SendOptions.idempotencyKey` is injected into the database payload. Triggers: `defineNotification`, `via`, "reusable notification", "multi-channel notification", "send through several channels at once", "render per channel", `RenderContext`, `def.type`; "force on a notification", "queue with delay"; typical import `import { defineNotification } from "@warlock.js/notifications"`. Skip: single-channel ad-hoc sends — `@warlock.js/notifications/send-ad-hoc/SKILL.md`; adding a brand-new channel — `@warlock.js/notifications/define-channel/SKILL.md`; observing dispatch outcomes — `@warlock.js/notifications/observe-notifications/SKILL.md`.'
3
+ description: "defineNotification — reusable multi-channel notification in @warlock.js/notifications; use when you need to define notification."
4
4
  ---
5
5
 
6
6
  # `defineNotification` — reusable multi-channel notification
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: notifications-basics
3
- description: 'Front-door for `@warlock.js/notifications` — what the package is, when to reach for it, and the four moving parts (channel registry, defineNotification, notify, inApp). Multi-channel dispatch: define once, fire anywhere. Recipients are cascade `Model` instances; payloads are typed per channel via a declaration-merge `NotificationChannels` registry; reusable definitions go through `defineNotification`; ad-hoc per-channel sends go through the `notify.<channel>` proxy; the in-app database channel is read via the `inApp` facade. Phase 1 ships `mail` + `database`; bridges-backed channels (whatsapp/telegram/push/slack) arrive in Phase 2. Triggers: `defineNotification`, `notify.<channel>`, `inApp.configure`, `setNotificationConfig`, `NotificationConfig`, `NotificationChannels`; "send a notification", "in-app notifications", "what channels can I use", "what is `@warlock.js/notifications`", "where do I start"; typical import `import { defineNotification, notify, inApp } from "@warlock.js/notifications"`. Skip: configuring channels in `config/notifications.ts` — `@warlock.js/notifications/configure-notifications/SKILL.md`; building a multi-channel definition — `@warlock.js/notifications/define-notification/SKILL.md`; reading in-app rows — `@warlock.js/notifications/use-in-app/SKILL.md`.'
3
+ description: "Start here for @warlock.js/notifications channels, notification definitions, delivery, and application setup."
4
4
  ---
5
5
 
6
6
  # `@warlock.js/notifications` — basics
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: observe-notifications
3
- description: 'Wire metrics, logging, tracing, and audits via `notifications.on(event, handler)` — four events fire per (channel, recipient): `sending` (gates passed, about to hit the transport), `sent` (succeeded), `failed` (channel threw — carries the Error), `skipped` (a pre-send gate dropped it — carries `reason: "preference" | "rate-limit"`). Every event carries the recipient as `notifiable?` (undefined only for raw-target ad-hoc sends) and a `dispatchId` — `sending` and its terminal `sent`/`failed` share it, so observers can pair them (spans, latency, hung-send detection). `sent`/`failed` also carry `durationMs`. Handler exceptions are logged-and-swallowed so one bad listener can not break the dispatcher. `on(...)` returns an unsubscribe function; `off(event, handler)` exists for symmetry. Triggers: `notifications.on`, `notifications.off`, `"sending"` event, `"sent"` event, `"failed"` event, `"skipped"` event, `dispatchId`, `durationMs`, `NotificationEvents`, "notification metrics", "notification latency", "trace notifications", "notification audit log", "track notification drops"; typical import `import { notifications } from "@warlock.js/notifications"`. Skip: building notifications — `@warlock.js/notifications/define-notification/SKILL.md`; configuring the preference/rate-limit gates that produce `skipped` — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
3
+ description: "Observe notifications in @warlock.js/notifications; use when you need to observe notifications."
4
4
  ---
5
5
 
6
6
  # Observe notifications
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: queue-notifications
3
- description: "Send notifications asynchronously through the herald backend or the BullMQ driver. Configure a QueueDispatcher in config/notifications.ts, then use notif.queue(to, data, options?) to enqueue rendered jobs. Herald uses heraldQueue() and startNotificationsWorker(); bullmqQueue({ attempts, backoff }) from @warlock.js/notifications uses BullMQ (lazy-loading the optional @warlock.js/queue peer), supports retries, and honours SendOptions.delay. Without a queue configured, .queue() rejects NoQueueDispatcherError. Triggers: heraldQueue, bullmqQueue, startNotificationsWorker, QueueDispatcher, .queue(, async notifications, queue notifications, notification worker, background notifications, notifications.dispatch. Skip: synchronous sends - @warlock.js/notifications/define-notification/SKILL.md; herald itself - @warlock.js/herald/*."
3
+ description: "Queue notifications (async) in @warlock.js/notifications; use when you need to queue notifications."
4
4
  ---
5
5
 
6
6
  # Queue notifications (async)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: send-ad-hoc
3
- description: 'Ad-hoc per-channel send via the `notify.<channel>(to, payload, options?)` Proxy facade. Works for any channel registered in `NotificationChannels` (built-in or custom). `to` accepts a `Notifiable` model OR a raw route string (`"x@y.com"`); `payload` is typed per channel via the registry; `options` is the standard `SendOptions`. `notify.channel(name).send(...)` is the runtime escape when the channel name is not a compile-time literal. Type-based preference gating applies when a type is known — explicit via `options.type` OR auto-detected from a database payload''s `type` field. For multi-channel sends use `defineNotification` instead — there is no inline `notify(to, { via, ... })` form on purpose. Triggers: `notify.<channel>`, `notify.channel(name)`, `notify.mail`, `notify.database`, "send a one-off notification", "ad-hoc notification", "send an email without defining a notification", "raw email target", "dynamic channel name"; typical import `import { notify } from "@warlock.js/notifications"`. Skip: reusable multi-channel notifications — `@warlock.js/notifications/define-notification/SKILL.md`; configuring channels — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
3
+ description: "notify.<channel> — ad-hoc, per-channel sends in @warlock.js/notifications; use when you need to send ad hoc."
4
4
  ---
5
5
 
6
6
  # `notify.<channel>` — ad-hoc, per-channel sends
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: use-in-app
3
- description: 'Use the `inApp` facade for the in-app/database channel''s READ side: `inApp.configure({ model: Notification })` or `{ repository: myRepo }` binds the store AND returns the channel; `inApp.list / listUnread / countUnread / markAsRead / markAsUnread` are RECIPIENT-SCOPED by construction (no IDOR — `markAsRead(user, id)` cannot flip another user''s row even with a foreign id). `countUnread` uses `RepositoryManager.countCached` for the badge fast-path. Triggers: `inApp.configure`, `inApp.list`, `inApp.listUnread`, `inApp.countUnread`, `inApp.markAsRead`, `inApp.markAsUnread`, `BaseNotificationsRepository`, `DatabaseNotification`, `NotificationsFilter`, "in-app notifications", "mark notification as read", "unread count", "notification badge", "IDOR-safe markAsRead"; typical import `import { inApp } from "@warlock.js/notifications"`. Skip: writing notifications (use `defineNotification` or `notify.database`) — `@warlock.js/notifications/define-notification/SKILL.md`; the migration columns — `@warlock.js/notifications/write-notification-migration/SKILL.md`; wiring it into config — `@warlock.js/notifications/configure-notifications/SKILL.md`.'
3
+ description: "inApp — in-app notification read API in @warlock.js/notifications; use when you need to use in app."
4
4
  ---
5
5
 
6
6
  # `inApp` — in-app notification read API
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: write-notification-migration
3
- description: 'Create the notifications table with the `notificationColumns(Notification)` factory + cascade `Migration.create`. Column NAMES come from the model''s `columnMap` (recipient / tenant / readAt / isRead); the fixed columns are `type` / `title` / `body` / `payload` / `idempotency_key`. Read-state follows columnMap presence: `readAt` → nullable timestamp, `isRead` → indexed boolean, both → both. Defaults to `user_id` + `read_at` when no columnMap. Spread + extend for extras (FK references, composite indexes). Triggers: `notificationColumns`, `Migration.create` for notifications, "create the notifications table", "notification migration", "add organization_id to notifications", `is_read` column, `read_at` column, `idempotency_key` column; typical import `import { Migration } from "@warlock.js/cascade"; import { notificationColumns } from "@warlock.js/notifications"`. Skip: generic cascade migration writing — `@warlock.js/cascade/write-migration/SKILL.md`; the model itself — `@warlock.js/notifications/use-in-app/SKILL.md`.'
3
+ description: "Write the notifications migration in @warlock.js/notifications; use when you need to write notification migration."
4
4
  ---
5
5
 
6
6
  # Write the notifications migration