@warlock.js/seal 5.31.0 → 5.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/cjs/index.cjs +20 -16
  3. package/cjs/index.cjs.map +1 -1
  4. package/cjs/{object-VTtA-k1a.cjs → object-BoVGJ68E.cjs} +30 -13
  5. package/cjs/object-BoVGJ68E.cjs.map +1 -0
  6. package/cjs/object.cjs +2 -2
  7. package/cjs/{required-methods-chT0TXQS.cjs → required-methods-BJlnLnwa.cjs} +237 -228
  8. package/cjs/required-methods-BJlnLnwa.cjs.map +1 -0
  9. package/cjs/{string-edcPIpcU.cjs → string-CM8x0u2w.cjs} +44 -42
  10. package/cjs/string-CM8x0u2w.cjs.map +1 -0
  11. package/cjs/string.cjs +2 -2
  12. package/esm/config.d.mts +7 -8
  13. package/esm/config.d.mts.map +1 -1
  14. package/esm/factory/index.d.mts +2 -1
  15. package/esm/factory/index.mjs +1 -1
  16. package/esm/factory/validate.d.mts +3 -6
  17. package/esm/factory/validate.d.mts.map +1 -1
  18. package/esm/factory/validators.d.mts +9 -6
  19. package/esm/factory/validators.d.mts.map +1 -1
  20. package/esm/helpers/date-helpers.d.mts +1 -2
  21. package/esm/helpers/date-helpers.d.mts.map +1 -1
  22. package/esm/helpers/file.utils.d.mts +2 -4
  23. package/esm/helpers/file.utils.d.mts.map +1 -1
  24. package/esm/helpers/get-field-value.d.mts +2 -3
  25. package/esm/helpers/get-field-value.d.mts.map +1 -1
  26. package/esm/helpers/get-field-value.mjs +2 -1
  27. package/esm/helpers/get-field-value.mjs.map +1 -1
  28. package/esm/helpers/index.d.mts +6 -0
  29. package/esm/helpers/index.mjs +1 -1
  30. package/esm/helpers/path-helpers.d.mts +1 -2
  31. package/esm/helpers/path-helpers.d.mts.map +1 -1
  32. package/esm/helpers/validation-helpers.d.mts +4 -10
  33. package/esm/helpers/validation-helpers.d.mts.map +1 -1
  34. package/esm/index.d.mts +7 -0
  35. package/esm/mutators/array-mutators.d.mts +6 -7
  36. package/esm/mutators/array-mutators.d.mts.map +1 -1
  37. package/esm/mutators/boolean-mutators.d.mts +3 -4
  38. package/esm/mutators/boolean-mutators.d.mts.map +1 -1
  39. package/esm/mutators/date-mutators.d.mts +18 -19
  40. package/esm/mutators/date-mutators.d.mts.map +1 -1
  41. package/esm/mutators/index.d.mts +8 -0
  42. package/esm/mutators/index.mjs +1 -1
  43. package/esm/mutators/number-mutators.d.mts +10 -11
  44. package/esm/mutators/number-mutators.d.mts.map +1 -1
  45. package/esm/mutators/object-mutators.d.mts +4 -5
  46. package/esm/mutators/object-mutators.d.mts.map +1 -1
  47. package/esm/mutators/object-mutators.mjs +5 -4
  48. package/esm/mutators/object-mutators.mjs.map +1 -1
  49. package/esm/mutators/scalar-mutators.d.mts +2 -3
  50. package/esm/mutators/scalar-mutators.d.mts.map +1 -1
  51. package/esm/mutators/string-mutators.d.mts +37 -38
  52. package/esm/mutators/string-mutators.d.mts.map +1 -1
  53. package/esm/mutators/string-mutators.mjs +3 -1
  54. package/esm/mutators/string-mutators.mjs.map +1 -1
  55. package/esm/object.d.mts +3 -3
  56. package/esm/object.d.mts.map +1 -1
  57. package/esm/plugins/plugin-system.d.mts +11 -9
  58. package/esm/plugins/plugin-system.d.mts.map +1 -1
  59. package/esm/rules/array/array-rules.d.mts +3 -4
  60. package/esm/rules/array/array-rules.d.mts.map +1 -1
  61. package/esm/rules/array/index.d.mts +2 -0
  62. package/esm/rules/array/index.mjs +1 -1
  63. package/esm/rules/color/color-rules.d.mts +8 -9
  64. package/esm/rules/color/color-rules.d.mts.map +1 -1
  65. package/esm/rules/color/index.d.mts +2 -0
  66. package/esm/rules/color/index.mjs +1 -1
  67. package/esm/rules/common/enum.d.mts +5 -6
  68. package/esm/rules/common/enum.d.mts.map +1 -1
  69. package/esm/rules/common/equals-field-rules.d.mts +3 -4
  70. package/esm/rules/common/equals-field-rules.d.mts.map +1 -1
  71. package/esm/rules/common/index.d.mts +7 -0
  72. package/esm/rules/common/index.mjs +1 -1
  73. package/esm/rules/common/instanceof.d.mts +2 -3
  74. package/esm/rules/common/instanceof.d.mts.map +1 -1
  75. package/esm/rules/common/literal.d.mts +2 -3
  76. package/esm/rules/common/literal.d.mts.map +1 -1
  77. package/esm/rules/common/type-rules.d.mts +10 -11
  78. package/esm/rules/common/type-rules.d.mts.map +1 -1
  79. package/esm/rules/common/unknown-key.d.mts +2 -3
  80. package/esm/rules/common/unknown-key.d.mts.map +1 -1
  81. package/esm/rules/conditional/forbidden-if-rules.d.mts +7 -8
  82. package/esm/rules/conditional/forbidden-if-rules.d.mts.map +1 -1
  83. package/esm/rules/conditional/index.d.mts +11 -0
  84. package/esm/rules/conditional/index.mjs +1 -1
  85. package/esm/rules/conditional/present-if-rules.d.mts +6 -7
  86. package/esm/rules/conditional/present-if-rules.d.mts.map +1 -1
  87. package/esm/rules/conditional/present-unless-rules.d.mts +2 -3
  88. package/esm/rules/conditional/present-unless-rules.d.mts.map +1 -1
  89. package/esm/rules/conditional/present-with-rules.d.mts +4 -5
  90. package/esm/rules/conditional/present-with-rules.d.mts.map +1 -1
  91. package/esm/rules/conditional/present-without-rules.d.mts +4 -5
  92. package/esm/rules/conditional/present-without-rules.d.mts.map +1 -1
  93. package/esm/rules/conditional/required-if-rules.d.mts +10 -11
  94. package/esm/rules/conditional/required-if-rules.d.mts.map +1 -1
  95. package/esm/rules/conditional/required-unless-rules.d.mts +2 -3
  96. package/esm/rules/conditional/required-unless-rules.d.mts.map +1 -1
  97. package/esm/rules/conditional/required-when-rule.d.mts +2 -3
  98. package/esm/rules/conditional/required-when-rule.d.mts.map +1 -1
  99. package/esm/rules/conditional/required-with-rules.d.mts +4 -5
  100. package/esm/rules/conditional/required-with-rules.d.mts.map +1 -1
  101. package/esm/rules/conditional/required-without-rules.d.mts +4 -5
  102. package/esm/rules/conditional/required-without-rules.d.mts.map +1 -1
  103. package/esm/rules/core/equal.d.mts +2 -3
  104. package/esm/rules/core/equal.d.mts.map +1 -1
  105. package/esm/rules/core/forbidden.d.mts +2 -3
  106. package/esm/rules/core/forbidden.d.mts.map +1 -1
  107. package/esm/rules/core/index.d.mts +6 -0
  108. package/esm/rules/core/index.mjs +1 -1
  109. package/esm/rules/core/required.d.mts +3 -4
  110. package/esm/rules/core/required.d.mts.map +1 -1
  111. package/esm/rules/core/union.d.mts +2 -3
  112. package/esm/rules/core/union.d.mts.map +1 -1
  113. package/esm/rules/core/when.d.mts +2 -3
  114. package/esm/rules/core/when.d.mts.map +1 -1
  115. package/esm/rules/date/date-comparison-rules.d.mts +6 -7
  116. package/esm/rules/date/date-comparison-rules.d.mts.map +1 -1
  117. package/esm/rules/date/date-day-rules.d.mts +5 -6
  118. package/esm/rules/date/date-day-rules.d.mts.map +1 -1
  119. package/esm/rules/date/date-field-comparison-rules.d.mts +4 -5
  120. package/esm/rules/date/date-field-comparison-rules.d.mts.map +1 -1
  121. package/esm/rules/date/date-field-comparison-rules.mjs +6 -3
  122. package/esm/rules/date/date-field-comparison-rules.mjs.map +1 -1
  123. package/esm/rules/date/date-period-rules.d.mts +16 -16
  124. package/esm/rules/date/date-period-rules.d.mts.map +1 -1
  125. package/esm/rules/date/date-period-rules.mjs +24 -12
  126. package/esm/rules/date/date-period-rules.mjs.map +1 -1
  127. package/esm/rules/date/date-relative-rules.d.mts +4 -5
  128. package/esm/rules/date/date-relative-rules.d.mts.map +1 -1
  129. package/esm/rules/date/date-relative-rules.mjs +3 -3
  130. package/esm/rules/date/date-relative-rules.mjs.map +1 -1
  131. package/esm/rules/date/date-special-rules.d.mts +4 -5
  132. package/esm/rules/date/date-special-rules.d.mts.map +1 -1
  133. package/esm/rules/date/date.d.mts +16 -17
  134. package/esm/rules/date/date.d.mts.map +1 -1
  135. package/esm/rules/date/date.mjs +4 -2
  136. package/esm/rules/date/date.mjs.map +1 -1
  137. package/esm/rules/date/index.d.mts +8 -0
  138. package/esm/rules/date/index.mjs +1 -1
  139. package/esm/rules/file/dimensions.d.mts +5 -6
  140. package/esm/rules/file/dimensions.d.mts.map +1 -1
  141. package/esm/rules/file/file-size.d.mts +3 -4
  142. package/esm/rules/file/file-size.d.mts.map +1 -1
  143. package/esm/rules/file/index.d.mts +3 -0
  144. package/esm/rules/file/index.mjs +1 -1
  145. package/esm/rules/index.d.mts +56 -0
  146. package/esm/rules/index.mjs +1 -1
  147. package/esm/rules/length/index.d.mts +2 -0
  148. package/esm/rules/length/index.mjs +1 -1
  149. package/esm/rules/length/length-rules.d.mts +8 -9
  150. package/esm/rules/length/length-rules.d.mts.map +1 -1
  151. package/esm/rules/number/index.d.mts +2 -0
  152. package/esm/rules/number/index.mjs +1 -1
  153. package/esm/rules/number/number-rules.d.mts +11 -12
  154. package/esm/rules/number/number-rules.d.mts.map +1 -1
  155. package/esm/rules/number/number-rules.mjs +12 -6
  156. package/esm/rules/number/number-rules.mjs.map +1 -1
  157. package/esm/rules/scalar/index.mjs +1 -1
  158. package/esm/rules/string/alpha.d.mts +4 -5
  159. package/esm/rules/string/alpha.d.mts.map +1 -1
  160. package/esm/rules/string/credit-card.d.mts +2 -3
  161. package/esm/rules/string/credit-card.d.mts.map +1 -1
  162. package/esm/rules/string/email.d.mts +2 -3
  163. package/esm/rules/string/email.d.mts.map +1 -1
  164. package/esm/rules/string/id-formats.d.mts +6 -7
  165. package/esm/rules/string/id-formats.d.mts.map +1 -1
  166. package/esm/rules/string/index.d.mts +12 -0
  167. package/esm/rules/string/index.mjs +1 -1
  168. package/esm/rules/string/ip.d.mts +7 -8
  169. package/esm/rules/string/ip.d.mts.map +1 -1
  170. package/esm/rules/string/matches.d.mts +2 -3
  171. package/esm/rules/string/matches.d.mts.map +1 -1
  172. package/esm/rules/string/pattern.d.mts +2 -3
  173. package/esm/rules/string/pattern.d.mts.map +1 -1
  174. package/esm/rules/string/string-comparison.d.mts +5 -6
  175. package/esm/rules/string/string-comparison.d.mts.map +1 -1
  176. package/esm/rules/string/strong-password-rule.d.mts +2 -3
  177. package/esm/rules/string/strong-password-rule.d.mts.map +1 -1
  178. package/esm/rules/string/url.d.mts +2 -3
  179. package/esm/rules/string/url.d.mts.map +1 -1
  180. package/esm/rules/string/without-whitespace.d.mts +2 -3
  181. package/esm/rules/string/without-whitespace.d.mts.map +1 -1
  182. package/esm/standard-schema/index.d.mts +4 -0
  183. package/esm/standard-schema/json-schema.d.mts +5 -7
  184. package/esm/standard-schema/json-schema.d.mts.map +1 -1
  185. package/esm/standard-schema/map-result.d.mts +2 -3
  186. package/esm/standard-schema/map-result.d.mts.map +1 -1
  187. package/esm/standard-schema/types.d.mts +4 -5
  188. package/esm/standard-schema/types.d.mts.map +1 -1
  189. package/esm/string.d.mts +2 -3
  190. package/esm/string.d.mts.map +1 -1
  191. package/esm/types/conditional-types.d.mts +8 -6
  192. package/esm/types/conditional-types.d.mts.map +1 -1
  193. package/esm/types/context-types.d.mts +24 -15
  194. package/esm/types/context-types.d.mts.map +1 -1
  195. package/esm/types/data-transformer-types.d.mts +3 -5
  196. package/esm/types/data-transformer-types.d.mts.map +1 -1
  197. package/esm/types/date-types.d.mts +2 -3
  198. package/esm/types/date-types.d.mts.map +1 -1
  199. package/esm/types/file.types.d.mts +1 -2
  200. package/esm/types/file.types.d.mts.map +1 -1
  201. package/esm/types/index.d.mts +11 -0
  202. package/esm/types/inference-types.d.mts +14 -13
  203. package/esm/types/inference-types.d.mts.map +1 -1
  204. package/esm/types/mutator-types.d.mts +9 -7
  205. package/esm/types/mutator-types.d.mts.map +1 -1
  206. package/esm/types/result-types.d.mts +12 -7
  207. package/esm/types/result-types.d.mts.map +1 -1
  208. package/esm/types/rule-types.d.mts +25 -16
  209. package/esm/types/rule-types.d.mts.map +1 -1
  210. package/esm/types/schema-types.d.mts +1 -3
  211. package/esm/types/schema-types.d.mts.map +1 -1
  212. package/esm/validators/any-validator.d.mts +1 -3
  213. package/esm/validators/any-validator.d.mts.map +1 -1
  214. package/esm/validators/array-validator.d.mts +2 -3
  215. package/esm/validators/array-validator.d.mts.map +1 -1
  216. package/esm/validators/base-validator.d.mts +2 -3
  217. package/esm/validators/base-validator.d.mts.map +1 -1
  218. package/esm/validators/base-validator.mjs +2 -1
  219. package/esm/validators/base-validator.mjs.map +1 -1
  220. package/esm/validators/boolean-validator.d.mts +1 -3
  221. package/esm/validators/boolean-validator.d.mts.map +1 -1
  222. package/esm/validators/computed-validator.d.mts +3 -4
  223. package/esm/validators/computed-validator.d.mts.map +1 -1
  224. package/esm/validators/date-validator.d.mts +2 -3
  225. package/esm/validators/date-validator.d.mts.map +1 -1
  226. package/esm/validators/discriminated-union-validator.d.mts +3 -3
  227. package/esm/validators/discriminated-union-validator.d.mts.map +1 -1
  228. package/esm/validators/float-validator.d.mts +1 -3
  229. package/esm/validators/float-validator.d.mts.map +1 -1
  230. package/esm/validators/index.d.mts +2 -1
  231. package/esm/validators/index.mjs +1 -1
  232. package/esm/validators/instanceof-validator.d.mts +1 -3
  233. package/esm/validators/instanceof-validator.d.mts.map +1 -1
  234. package/esm/validators/int-validator.d.mts +1 -3
  235. package/esm/validators/int-validator.d.mts.map +1 -1
  236. package/esm/validators/lazy-validator.d.mts +2 -3
  237. package/esm/validators/lazy-validator.d.mts.map +1 -1
  238. package/esm/validators/literal-validator.d.mts +1 -3
  239. package/esm/validators/literal-validator.d.mts.map +1 -1
  240. package/esm/validators/managed-validator.d.mts +3 -4
  241. package/esm/validators/managed-validator.d.mts.map +1 -1
  242. package/esm/validators/methods/equality-conditional-methods.d.mts +3 -4
  243. package/esm/validators/methods/equality-conditional-methods.d.mts.map +1 -1
  244. package/esm/validators/methods/forbidden-methods.d.mts +2 -3
  245. package/esm/validators/methods/forbidden-methods.d.mts.map +1 -1
  246. package/esm/validators/methods/present-methods.d.mts +2 -3
  247. package/esm/validators/methods/present-methods.d.mts.map +1 -1
  248. package/esm/validators/methods/required-methods.d.mts +3 -4
  249. package/esm/validators/methods/required-methods.d.mts.map +1 -1
  250. package/esm/validators/number-validator.d.mts +1 -3
  251. package/esm/validators/number-validator.d.mts.map +1 -1
  252. package/esm/validators/number-validator.mjs +12 -8
  253. package/esm/validators/number-validator.mjs.map +1 -1
  254. package/esm/validators/numeric-validator.d.mts +1 -3
  255. package/esm/validators/numeric-validator.d.mts.map +1 -1
  256. package/esm/validators/object-validator.d.mts +2 -3
  257. package/esm/validators/object-validator.d.mts.map +1 -1
  258. package/esm/validators/primitive-validator.d.mts +1 -3
  259. package/esm/validators/primitive-validator.d.mts.map +1 -1
  260. package/esm/validators/record-validator.d.mts +2 -3
  261. package/esm/validators/record-validator.d.mts.map +1 -1
  262. package/esm/validators/scalar-validator.d.mts +1 -3
  263. package/esm/validators/scalar-validator.d.mts.map +1 -1
  264. package/esm/validators/string-validator.d.mts +1 -3
  265. package/esm/validators/string-validator.d.mts.map +1 -1
  266. package/esm/validators/tuple-validator.d.mts +2 -3
  267. package/esm/validators/tuple-validator.d.mts.map +1 -1
  268. package/esm/validators/union-validator.d.mts +1 -3
  269. package/esm/validators/union-validator.d.mts.map +1 -1
  270. package/package.json +1 -1
  271. package/cjs/object-VTtA-k1a.cjs.map +0 -1
  272. package/cjs/required-methods-chT0TXQS.cjs.map +0 -1
  273. package/cjs/string-edcPIpcU.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-field-comparison-rules.mjs","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-field-comparison-rules.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\nimport { invalidRule, VALID_RULE } from \"../../helpers\";\nimport { isDateValue } from \"../../helpers/date-helpers\";\nimport type { SchemaRule } from \"../../types\";\n\n/**\n * Before field rule - date must be < given date or field\n * Smart detection: date value or field name\n * Supports both global and sibling scope\n */\nexport const beforeFieldRule: SchemaRule<{\n dateOrField: Date | string | number;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"beforeField\",\n description: \"The date must be before the given date or field\",\n defaultErrorMessage: \"The :input must be before :dateOrField\",\n async validate(value: Date, context) {\n const { dateOrField, scope = \"global\" } = this.context.options;\n let compareDate: Date;\n\n if (isDateValue(dateOrField)) {\n // Value comparison\n compareDate = new Date(dateOrField);\n } else {\n // Field comparison\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dateOrField as string);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n compareDate = new Date(fieldValue);\n }\n\n const inputDate = new Date(value);\n\n if (inputDate < compareDate) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n\n/**\n * After field rule - date must be > given date or field\n * Smart detection: date value or field name\n * Supports both global and sibling scope\n */\nexport const afterFieldRule: SchemaRule<{\n dateOrField: Date | string | number;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"afterField\",\n description: \"The date must be after the given date or field\",\n defaultErrorMessage: \"The :input must be after :dateOrField\",\n async validate(value: Date, context) {\n const { dateOrField, scope = \"global\" } = this.context.options;\n let compareDate: Date;\n\n if (isDateValue(dateOrField)) {\n // Value comparison\n compareDate = new Date(dateOrField);\n this.context.translationParams.dateOrField = compareDate.toISOString();\n } else {\n // Field comparison\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dateOrField as string);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n compareDate = new Date(fieldValue);\n this.context.translatableParams.dateOrField = fieldValue;\n }\n\n const inputDate = new Date(value);\n\n if (inputDate > compareDate) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Same as field rule - date must be the same as another field's date\n * Supports both global and sibling scope\n */\nexport const sameAsFieldDateRule: SchemaRule<{\n field: string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"sameAsFieldDate\",\n description: \"The date must be the same as another field's date\",\n defaultErrorMessage: \"The :input must be the same as :field\",\n async validate(value: Date, context) {\n const { field, scope = \"global\" } = this.context.options;\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, field);\n\n // Both fields must exist to be considered \"the same\"\n if (fieldValue === undefined || value === undefined) {\n this.context.translatableParams.field = fieldValue;\n return invalidRule(this, context);\n }\n\n const inputDate = new Date(value);\n inputDate.setHours(0, 0, 0, 0);\n const compareDate = new Date(fieldValue);\n compareDate.setHours(0, 0, 0, 0);\n\n if (inputDate.getTime() === compareDate.getTime()) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.field = fieldValue;\n return invalidRule(this, context);\n },\n};\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,kBAGR;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,EAAE,aAAa,QAAQ,aAAa,KAAK,QAAQ;EACvD,IAAI;EAEJ,IAAI,YAAY,WAAW,GAEzB,cAAc,IAAI,KAAK,WAAW;OAC7B;GAGL,MAAM,aAAa,IADJ,UAAU,YAAY,QAAQ,SAAS,QAAQ,WAC/B,WAAqB;GAEpD,IAAI,eAAe,QACjB,OAAO;GAGT,cAAc,IAAI,KAAK,UAAU;EACnC;EAIA,IAAI,IAFkB,KAAK,KAEf,IAAI,aACd,OAAO;EAET,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;;AAOA,MAAa,iBAGR;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,EAAE,aAAa,QAAQ,aAAa,KAAK,QAAQ;EACvD,IAAI;EAEJ,IAAI,YAAY,WAAW,GAAG;GAE5B,cAAc,IAAI,KAAK,WAAW;GAClC,KAAK,QAAQ,kBAAkB,cAAc,YAAY,YAAY;EACvE,OAAO;GAGL,MAAM,aAAa,IADJ,UAAU,YAAY,QAAQ,SAAS,QAAQ,WAC/B,WAAqB;GAEpD,IAAI,eAAe,QACjB,OAAO;GAGT,cAAc,IAAI,KAAK,UAAU;GACjC,KAAK,QAAQ,mBAAmB,cAAc;EAChD;EAIA,IAAI,IAFkB,KAAK,KAEf,IAAI,aACd,OAAO;EAGT,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;AAMA,MAAa,sBAGR;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,EAAE,OAAO,QAAQ,aAAa,KAAK,QAAQ;EAEjD,MAAM,aAAa,IADJ,UAAU,YAAY,QAAQ,SAAS,QAAQ,WAC/B,KAAK;EAGpC,IAAI,eAAe,UAAa,UAAU,QAAW;GACnD,KAAK,QAAQ,mBAAmB,QAAQ;GACxC,OAAO,YAAY,MAAM,OAAO;EAClC;EAEA,MAAM,YAAY,IAAI,KAAK,KAAK;EAChC,UAAU,SAAS,GAAG,GAAG,GAAG,CAAC;EAC7B,MAAM,cAAc,IAAI,KAAK,UAAU;EACvC,YAAY,SAAS,GAAG,GAAG,GAAG,CAAC;EAE/B,IAAI,UAAU,QAAQ,MAAM,YAAY,QAAQ,GAC9C,OAAO;EAGT,KAAK,QAAQ,mBAAmB,QAAQ;EACxC,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
1
+ {"version":3,"file":"date-field-comparison-rules.mjs","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-field-comparison-rules.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\nimport { invalidRule, VALID_RULE } from \"../../helpers\";\nimport { isDateValue } from \"../../helpers/date-helpers\";\nimport type { SchemaRule } from \"../../types\";\n\n/**\n * Before field rule - date must be < given date or field\n * Smart detection: date value or field name\n * Supports both global and sibling scope\n */\nexport const beforeFieldRule: SchemaRule<{\n dateOrField: Date | string | number;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"beforeField\",\n description: \"The date must be before the given date or field\",\n defaultErrorMessage: \"The :input must be before :dateOrField\",\n async validate(value: Date, context) {\n const { dateOrField, scope = \"global\" } = this.context.options;\n let compareDate: Date;\n\n if (isDateValue(dateOrField)) {\n // Value comparison\n compareDate = new Date(dateOrField);\n } else {\n // Field comparison\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dateOrField as string);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n compareDate = new Date(fieldValue);\n }\n\n const inputDate = new Date(value);\n\n if (inputDate < compareDate) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n\n/**\n * After field rule - date must be > given date or field\n * Smart detection: date value or field name\n * Supports both global and sibling scope\n */\nexport const afterFieldRule: SchemaRule<{\n dateOrField: Date | string | number;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"afterField\",\n description: \"The date must be after the given date or field\",\n defaultErrorMessage: \"The :input must be after :dateOrField\",\n async validate(value: Date, context) {\n const { dateOrField, scope = \"global\" } = this.context.options;\n let compareDate: Date;\n\n if (isDateValue(dateOrField)) {\n // Value comparison\n compareDate = new Date(dateOrField);\n this.context.translationParams.dateOrField = compareDate.toISOString();\n } else {\n // Field comparison\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dateOrField as string);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n compareDate = new Date(fieldValue);\n this.context.translatableParams.dateOrField = fieldValue;\n }\n\n const inputDate = new Date(value);\n\n if (inputDate > compareDate) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Same as field rule - date must be the same as another field's date\n * Supports both global and sibling scope\n */\nexport const sameAsFieldDateRule: SchemaRule<{\n field: string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"sameAsFieldDate\",\n description: \"The date must be the same as another field's date\",\n defaultErrorMessage: \"The :input must be the same as :field\",\n async validate(value: Date, context) {\n const { field, scope = \"global\" } = this.context.options;\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, field);\n\n // Both fields must exist to be considered \"the same\"\n if (fieldValue === undefined || value === undefined) {\n this.context.translatableParams.field = fieldValue;\n return invalidRule(this, context);\n }\n\n const inputDate = new Date(value);\n inputDate.setHours(0, 0, 0, 0);\n const compareDate = new Date(fieldValue);\n compareDate.setHours(0, 0, 0, 0);\n\n if (inputDate.getTime() === compareDate.getTime()) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.field = fieldValue;\n return invalidRule(this, context);\n },\n};\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,kBAGR;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,EAAE,aAAa,QAAQ,aAAa,KAAK,QAAQ;EACvD,IAAI;EAEJ,IAAI,YAAY,WAAW,GAEzB,cAAc,IAAI,KAAK,WAAW;OAC7B;GAEL,MAAM,SAAS,UAAU,YAAY,QAAQ,SAAS,QAAQ;GAC9D,MAAM,aAAa,IAAI,QAAQ,WAAqB;GAEpD,IAAI,eAAe,QACjB,OAAO;GAGT,cAAc,IAAI,KAAK,UAAU;EACnC;EAIA,IAAI,IAFkB,KAAK,KAEf,IAAI,aACd,OAAO;EAET,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;;AAOA,MAAa,iBAGR;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,EAAE,aAAa,QAAQ,aAAa,KAAK,QAAQ;EACvD,IAAI;EAEJ,IAAI,YAAY,WAAW,GAAG;GAE5B,cAAc,IAAI,KAAK,WAAW;GAClC,KAAK,QAAQ,kBAAkB,cAAc,YAAY,YAAY;EACvE,OAAO;GAEL,MAAM,SAAS,UAAU,YAAY,QAAQ,SAAS,QAAQ;GAC9D,MAAM,aAAa,IAAI,QAAQ,WAAqB;GAEpD,IAAI,eAAe,QACjB,OAAO;GAGT,cAAc,IAAI,KAAK,UAAU;GACjC,KAAK,QAAQ,mBAAmB,cAAc;EAChD;EAIA,IAAI,IAFkB,KAAK,KAEf,IAAI,aACd,OAAO;EAGT,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;;AAMA,MAAa,sBAGR;CACH,MAAM;CACN,aAAa;CACb,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,EAAE,OAAO,QAAQ,aAAa,KAAK,QAAQ;EACjD,MAAM,SAAS,UAAU,YAAY,QAAQ,SAAS,QAAQ;EAC9D,MAAM,aAAa,IAAI,QAAQ,KAAK;EAGpC,IAAI,eAAe,UAAa,UAAU,QAAW;GACnD,KAAK,QAAQ,mBAAmB,QAAQ;GACxC,OAAO,YAAY,MAAM,OAAO;EAClC;EAEA,MAAM,YAAY,IAAI,KAAK,KAAK;EAChC,UAAU,SAAS,GAAG,GAAG,GAAG,CAAC;EAC7B,MAAM,cAAc,IAAI,KAAK,UAAU;EACvC,YAAY,SAAS,GAAG,GAAG,GAAG,CAAC;EAE/B,IAAI,UAAU,QAAQ,MAAM,YAAY,QAAQ,GAC9C,OAAO;EAGT,KAAK,QAAQ,mBAAmB,QAAQ;EACxC,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { SchemaRule } from "../../types/rule-types.mjs";
2
-
2
+ import "../../types/index.mjs";
3
3
  //#region ../../packages/seal/src/rules/date/date-period-rules.d.ts
4
4
  declare const MONTHS: {
5
5
  1: string;
@@ -15,24 +15,24 @@ declare const MONTHS: {
15
15
  11: string;
16
16
  12: string;
17
17
  };
18
- type Month = keyof typeof MONTHS;
18
+ export type Month = keyof typeof MONTHS;
19
19
  /**
20
20
  * Month rule - date must be in specific month (1-12)
21
21
  */
22
- declare const monthRule: SchemaRule<{
22
+ export declare const monthRule: SchemaRule<{
23
23
  month: Month;
24
24
  }>;
25
25
  /**
26
26
  * Year rule - date must be in specific year
27
27
  */
28
- declare const yearRule: SchemaRule<{
28
+ export declare const yearRule: SchemaRule<{
29
29
  year: number;
30
30
  }>;
31
31
  /**
32
32
  * Between years rule - date must be between start and end years
33
33
  * Supports field names with sibling scope
34
34
  */
35
- declare const betweenYearsRule: SchemaRule<{
35
+ export declare const betweenYearsRule: SchemaRule<{
36
36
  startYear: number | string;
37
37
  endYear: number | string;
38
38
  scope?: "global" | "sibling";
@@ -41,7 +41,7 @@ declare const betweenYearsRule: SchemaRule<{
41
41
  * Between months rule - date must be between start and end months (1-12)
42
42
  * Supports field names with sibling scope
43
43
  */
44
- declare const betweenMonthsRule: SchemaRule<{
44
+ export declare const betweenMonthsRule: SchemaRule<{
45
45
  startMonth: Month | string;
46
46
  endMonth: Month | string;
47
47
  scope?: "global" | "sibling";
@@ -50,7 +50,7 @@ declare const betweenMonthsRule: SchemaRule<{
50
50
  * Between days rule - date must be between start and end days (1-31)
51
51
  * Supports field names with sibling scope
52
52
  */
53
- declare const betweenDaysRule: SchemaRule<{
53
+ export declare const betweenDaysRule: SchemaRule<{
54
54
  startDay: number | string;
55
55
  endDay: number | string;
56
56
  scope?: "global" | "sibling";
@@ -58,13 +58,13 @@ declare const betweenDaysRule: SchemaRule<{
58
58
  /**
59
59
  * Quarter rule - date must be in specific quarter (1-4)
60
60
  */
61
- declare const quarterRule: SchemaRule<{
61
+ export declare const quarterRule: SchemaRule<{
62
62
  quarter: 1 | 2 | 3 | 4;
63
63
  }>;
64
64
  /**
65
65
  * Between times rule - time must be between start and end times (HH:MM format)
66
66
  */
67
- declare const betweenTimesRule: SchemaRule<{
67
+ export declare const betweenTimesRule: SchemaRule<{
68
68
  startTime: string;
69
69
  endTime: string;
70
70
  }>;
@@ -73,7 +73,7 @@ declare const betweenTimesRule: SchemaRule<{
73
73
  * Smart detection: number or field name
74
74
  * Supports both global and sibling scope
75
75
  */
76
- declare const minYearRule: SchemaRule<{
76
+ export declare const minYearRule: SchemaRule<{
77
77
  yearOrField: number | string;
78
78
  scope?: "global" | "sibling";
79
79
  }>;
@@ -82,7 +82,7 @@ declare const minYearRule: SchemaRule<{
82
82
  * Smart detection: number or field name
83
83
  * Supports both global and sibling scope
84
84
  */
85
- declare const maxYearRule: SchemaRule<{
85
+ export declare const maxYearRule: SchemaRule<{
86
86
  yearOrField: number | string;
87
87
  scope?: "global" | "sibling";
88
88
  }>;
@@ -91,7 +91,7 @@ declare const maxYearRule: SchemaRule<{
91
91
  * Smart detection: number or field name
92
92
  * Supports both global and sibling scope
93
93
  */
94
- declare const minMonthRule: SchemaRule<{
94
+ export declare const minMonthRule: SchemaRule<{
95
95
  monthOrField: number | string;
96
96
  scope?: "global" | "sibling";
97
97
  }>;
@@ -100,7 +100,7 @@ declare const minMonthRule: SchemaRule<{
100
100
  * Smart detection: number or field name
101
101
  * Supports both global and sibling scope
102
102
  */
103
- declare const maxMonthRule: SchemaRule<{
103
+ export declare const maxMonthRule: SchemaRule<{
104
104
  monthOrField: Month | string;
105
105
  scope?: "global" | "sibling";
106
106
  }>;
@@ -109,7 +109,7 @@ declare const maxMonthRule: SchemaRule<{
109
109
  * Smart detection: number or field name
110
110
  * Supports both global and sibling scope
111
111
  */
112
- declare const minDayRule: SchemaRule<{
112
+ export declare const minDayRule: SchemaRule<{
113
113
  dayOrField: number | string;
114
114
  scope?: "global" | "sibling";
115
115
  }>;
@@ -118,10 +118,10 @@ declare const minDayRule: SchemaRule<{
118
118
  * Smart detection: number or field name
119
119
  * Supports both global and sibling scope
120
120
  */
121
- declare const maxDayRule: SchemaRule<{
121
+ export declare const maxDayRule: SchemaRule<{
122
122
  dayOrField: number | string;
123
123
  scope?: "global" | "sibling";
124
124
  }>;
125
125
  //#endregion
126
- export { Month, betweenDaysRule, betweenMonthsRule, betweenTimesRule, betweenYearsRule, maxDayRule, maxMonthRule, maxYearRule, minDayRule, minMonthRule, minYearRule, monthRule, quarterRule, yearRule };
126
+ export {};
127
127
  //# sourceMappingURL=date-period-rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-period-rules.d.mts","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-period-rules.ts"],"mappings":";;;cAIM,MAAA;;;;;;;;;;;;;;KAeM,KAAA,gBAAqB,MAAM;;;;cAK1B,SAAA,EAAW,UAAU;EAAG,KAAA,EAAO,KAAA;AAAA;;;;cAoB/B,QAAA,EAAU,UAAU;EAAG,IAAI;AAAA;;;;;cAoB3B,gBAAA,EAAkB,UAAU;EACvC,SAAA;EACA,OAAA;EACA,KAAA;AAAA;;;AAvBsC;AAoBxC;cA8Ea,iBAAA,EAAmB,UAAA;EAC9B,UAAA,EAAY,KAAA;EACZ,QAAA,EAAU,KAAA;EACV,KAAA;AAAA;;;;AA9EK;cA6JM,eAAA,EAAiB,UAAU;EACtC,QAAA;EACA,MAAA;EACA,KAAA;AAAA;;;;cA0EW,WAAA,EAAa,UAAU;EAAG,OAAO;AAAA;;;;cAoBjC,gBAAA,EAAkB,UAAU;EACvC,SAAA;EACA,OAAA;AAAA;;;;;;cAyCW,WAAA,EAAa,UAAU;EAClC,WAAA;EACA,KAAA;AAAA;;;;AAjE4C;AAoB9C;cAmGa,WAAA,EAAa,UAAU;EAClC,WAAA;EACA,KAAA;AAAA;;;;AAnGO;AAyCT;cAgHa,YAAA,EAAc,UAAU;EACnC,YAAA;EACA,KAAA;AAAA;;;;AAhHK;AAsDP;cA+Ga,YAAA,EAAc,UAAU;EACnC,YAAA,EAAc,KAAA;EACd,KAAA;AAAA;;;;AA/GK;AAsDP;cA+Ga,UAAA,EAAY,UAAU;EACjC,UAAA;EACA,KAAA;AAAA;;;;AA/GK;AAqDP;cA+Ga,UAAA,EAAY,UAAU;EACjC,UAAA;EACA,KAAA;AAAA"}
1
+ {"version":3,"file":"date-period-rules.d.mts","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-period-rules.ts"],"mappings":";;;cAIM;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;YAGU,qBAAqB;;;;qBAKpB,WAAW;EAAa,OAAO;;;;;qBAoB/B,UAAU;EAAa;;;;;;qBAoBvB,kBAAkB;EAC7B;EACA;EACA;;;;;;qBA2EW,mBAAmB;EAC9B,YAAY;EACZ,UAAU;EACV;;;;;;qBA+EW,iBAAiB;EAC5B;EACA;EACA;;;;;qBA0EW,aAAa;EAAa;;;;;qBAoB1B,kBAAkB;EAC7B;EACA;;;;;;;qBAyCW,aAAa;EACxB;EACA;;;;;;;qBAsDW,aAAa;EACxB;EACA;;;;;;;qBAsDW,cAAc;EACzB;EACA;;;;;;;qBAqDW,cAAc;EACzB,cAAc;EACd;;;;;;;qBAsDW,YAAY;EACvB;EACA;;;;;;;qBAqDW,YAAY;EACvB;EACA"}
@@ -54,7 +54,8 @@ const betweenYearsRule = {
54
54
  let compareStartYear;
55
55
  if (typeof startYear === "number") compareStartYear = startYear;
56
56
  else {
57
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, startYear);
57
+ const source = scope === "sibling" ? context.parent : context.allValues;
58
+ const fieldValue = get(source, startYear);
58
59
  if (fieldValue === void 0) return VALID_RULE;
59
60
  if (fieldValue instanceof Date) compareStartYear = fieldValue.getFullYear();
60
61
  else if (typeof fieldValue === "number") compareStartYear = fieldValue;
@@ -67,7 +68,8 @@ const betweenYearsRule = {
67
68
  let compareEndYear;
68
69
  if (typeof endYear === "number") compareEndYear = endYear;
69
70
  else {
70
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, endYear);
71
+ const source = scope === "sibling" ? context.parent : context.allValues;
72
+ const fieldValue = get(source, endYear);
71
73
  if (fieldValue === void 0) return VALID_RULE;
72
74
  if (fieldValue instanceof Date) compareEndYear = fieldValue.getFullYear();
73
75
  else if (typeof fieldValue === "number") compareEndYear = fieldValue;
@@ -98,7 +100,8 @@ const betweenMonthsRule = {
98
100
  compareStartMonth = startMonth;
99
101
  this.context.translatableParams.startMonth = MONTHS[compareStartMonth];
100
102
  } else {
101
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, startMonth);
103
+ const source = scope === "sibling" ? context.parent : context.allValues;
104
+ const fieldValue = get(source, startMonth);
102
105
  if (fieldValue === void 0) return VALID_RULE;
103
106
  this.context.translatableParams.startMonth = startMonth;
104
107
  if (fieldValue instanceof Date) compareStartMonth = fieldValue.getMonth() + 1;
@@ -114,7 +117,8 @@ const betweenMonthsRule = {
114
117
  compareEndMonth = endMonth;
115
118
  this.context.translatableParams.endMonth = MONTHS[compareEndMonth];
116
119
  } else {
117
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, endMonth);
120
+ const source = scope === "sibling" ? context.parent : context.allValues;
121
+ const fieldValue = get(source, endMonth);
118
122
  if (fieldValue === void 0) return VALID_RULE;
119
123
  this.context.translatableParams.endMonth = endMonth;
120
124
  if (fieldValue instanceof Date) compareEndMonth = fieldValue.getMonth() + 1;
@@ -142,7 +146,8 @@ const betweenDaysRule = {
142
146
  let compareStartDay;
143
147
  if (typeof startDay === "number") compareStartDay = startDay;
144
148
  else {
145
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, startDay);
149
+ const source = scope === "sibling" ? context.parent : context.allValues;
150
+ const fieldValue = get(source, startDay);
146
151
  if (fieldValue === void 0) return VALID_RULE;
147
152
  if (fieldValue instanceof Date) compareStartDay = fieldValue.getDate();
148
153
  else if (typeof fieldValue === "number") compareStartDay = fieldValue;
@@ -155,7 +160,8 @@ const betweenDaysRule = {
155
160
  let compareEndDay;
156
161
  if (typeof endDay === "number") compareEndDay = endDay;
157
162
  else {
158
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, endDay);
163
+ const source = scope === "sibling" ? context.parent : context.allValues;
164
+ const fieldValue = get(source, endDay);
159
165
  if (fieldValue === void 0) return VALID_RULE;
160
166
  if (fieldValue instanceof Date) compareEndDay = fieldValue.getDate();
161
167
  else if (typeof fieldValue === "number") compareEndDay = fieldValue;
@@ -224,7 +230,8 @@ const minYearRule = {
224
230
  compareYear = yearOrField;
225
231
  this.context.translationParams.yearOrField = yearOrField;
226
232
  } else {
227
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, yearOrField);
233
+ const source = scope === "sibling" ? context.parent : context.allValues;
234
+ const fieldValue = get(source, yearOrField);
228
235
  if (fieldValue === void 0) return VALID_RULE;
229
236
  this.context.translatableParams.yearOrField = yearOrField;
230
237
  if (fieldValue instanceof Date) compareYear = fieldValue.getFullYear();
@@ -255,7 +262,8 @@ const maxYearRule = {
255
262
  compareYear = yearOrField;
256
263
  this.context.translationParams.yearOrField = compareYear;
257
264
  } else {
258
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, yearOrField);
265
+ const source = scope === "sibling" ? context.parent : context.allValues;
266
+ const fieldValue = get(source, yearOrField);
259
267
  if (fieldValue === void 0) return VALID_RULE;
260
268
  this.context.translatableParams.yearOrField = yearOrField;
261
269
  if (fieldValue instanceof Date) compareYear = fieldValue.getFullYear();
@@ -286,7 +294,8 @@ const minMonthRule = {
286
294
  compareMonth = monthOrField;
287
295
  this.context.translationParams.monthOrField = compareMonth;
288
296
  } else {
289
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, monthOrField);
297
+ const source = scope === "sibling" ? context.parent : context.allValues;
298
+ const fieldValue = get(source, monthOrField);
290
299
  if (fieldValue === void 0) return VALID_RULE;
291
300
  this.context.translatableParams.monthOrField = monthOrField;
292
301
  if (fieldValue instanceof Date) compareMonth = fieldValue.getMonth() + 1;
@@ -317,7 +326,8 @@ const maxMonthRule = {
317
326
  compareMonth = monthOrField;
318
327
  this.context.translatableParams.monthOrField = MONTHS[monthOrField];
319
328
  } else {
320
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, monthOrField);
329
+ const source = scope === "sibling" ? context.parent : context.allValues;
330
+ const fieldValue = get(source, monthOrField);
321
331
  if (fieldValue === void 0) return VALID_RULE;
322
332
  this.context.translatableParams.monthOrField = monthOrField;
323
333
  if (fieldValue instanceof Date) compareMonth = fieldValue.getMonth() + 1;
@@ -348,7 +358,8 @@ const minDayRule = {
348
358
  compareDay = dayOrField;
349
359
  this.context.translationParams.dayOrField = dayOrField;
350
360
  } else {
351
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, dayOrField);
361
+ const source = scope === "sibling" ? context.parent : context.allValues;
362
+ const fieldValue = get(source, dayOrField);
352
363
  if (fieldValue === void 0) return VALID_RULE;
353
364
  this.context.translatableParams.dayOrField = dayOrField;
354
365
  if (fieldValue instanceof Date) compareDay = fieldValue.getDate();
@@ -379,7 +390,8 @@ const maxDayRule = {
379
390
  compareDay = dayOrField;
380
391
  this.context.translationParams.dayOrField = dayOrField;
381
392
  } else {
382
- const fieldValue = get(scope === "sibling" ? context.parent : context.allValues, dayOrField);
393
+ const source = scope === "sibling" ? context.parent : context.allValues;
394
+ const fieldValue = get(source, dayOrField);
383
395
  if (fieldValue === void 0) return VALID_RULE;
384
396
  this.context.translatableParams.dayOrField = dayOrField;
385
397
  if (fieldValue instanceof Date) compareDay = fieldValue.getDate();
@@ -1 +1 @@
1
- {"version":3,"file":"date-period-rules.mjs","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-period-rules.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\nimport { invalidRule, VALID_RULE } from \"../../helpers\";\nimport type { SchemaRule } from \"../../types\";\n\nconst MONTHS = {\n 1: \"january\",\n 2: \"february\",\n 3: \"march\",\n 4: \"april\",\n 5: \"may\",\n 6: \"june\",\n 7: \"july\",\n 8: \"august\",\n 9: \"september\",\n 10: \"october\",\n 11: \"november\",\n 12: \"december\",\n};\n\nexport type Month = keyof typeof MONTHS;\n\n/**\n * Month rule - date must be in specific month (1-12)\n */\nexport const monthRule: SchemaRule<{ month: Month }> = {\n name: \"month\",\n defaultErrorMessage: \"The :input must be in month :month\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const month = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n if (month === this.context.options.month) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.month =\n MONTHS[this.context.options.month as keyof typeof MONTHS];\n return invalidRule(this, context);\n },\n};\n\n/**\n * Year rule - date must be in specific year\n */\nexport const yearRule: SchemaRule<{ year: number }> = {\n name: \"year\",\n defaultErrorMessage: \"The :input must be in year :year\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const year = inputDate.getFullYear();\n\n if (year === this.context.options.year) {\n return VALID_RULE;\n }\n\n this.context.translationParams.year = this.context.options.year;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between years rule - date must be between start and end years\n * Supports field names with sibling scope\n */\nexport const betweenYearsRule: SchemaRule<{\n startYear: number | string;\n endYear: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"betweenYears\",\n defaultErrorMessage: \"The :input must be between :startYear and :endYear\",\n async validate(value: Date, context) {\n const { startYear, endYear, scope = \"global\" } = this.context.options;\n const inputDate = new Date(value);\n const inputYear = inputDate.getFullYear();\n\n // Extract start year\n let compareStartYear: number;\n if (typeof startYear === \"number\") {\n compareStartYear = startYear;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, startYear);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareStartYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareStartYear = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareStartYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n // Extract end year\n let compareEndYear: number;\n if (typeof endYear === \"number\") {\n compareEndYear = endYear;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, endYear);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareEndYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareEndYear = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareEndYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n if (inputYear >= compareStartYear && inputYear <= compareEndYear) {\n return VALID_RULE;\n }\n\n this.context.translationParams.startYear = compareStartYear;\n this.context.translationParams.endYear = compareEndYear;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between months rule - date must be between start and end months (1-12)\n * Supports field names with sibling scope\n */\nexport const betweenMonthsRule: SchemaRule<{\n startMonth: Month | string;\n endMonth: Month | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"betweenMonths\",\n defaultErrorMessage: \"The :input must be between month :startMonth and :endMonth\",\n async validate(value: Date, context) {\n const { startMonth, endMonth, scope = \"global\" } = this.context.options;\n const inputDate = new Date(value);\n const inputMonth = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n // Extract start month\n let compareStartMonth: number;\n if (typeof startMonth === \"number\") {\n compareStartMonth = startMonth;\n this.context.translatableParams.startMonth = MONTHS[compareStartMonth as keyof typeof MONTHS];\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, startMonth);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.startMonth = startMonth;\n\n if (fieldValue instanceof Date) {\n compareStartMonth = fieldValue.getMonth() + 1;\n } else if (typeof fieldValue === \"number\") {\n compareStartMonth = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareStartMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n // Extract end month\n let compareEndMonth: number;\n if (typeof endMonth === \"number\") {\n compareEndMonth = endMonth;\n this.context.translatableParams.endMonth = MONTHS[compareEndMonth as keyof typeof MONTHS];\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, endMonth);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.endMonth = endMonth;\n\n if (fieldValue instanceof Date) {\n compareEndMonth = fieldValue.getMonth() + 1;\n } else if (typeof fieldValue === \"number\") {\n compareEndMonth = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareEndMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n if (inputMonth >= compareStartMonth && inputMonth <= compareEndMonth) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between days rule - date must be between start and end days (1-31)\n * Supports field names with sibling scope\n */\nexport const betweenDaysRule: SchemaRule<{\n startDay: number | string;\n endDay: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"betweenDays\",\n defaultErrorMessage: \"The :input must be between day :startDay and :endDay\",\n async validate(value: Date, context) {\n const { startDay, endDay, scope = \"global\" } = this.context.options;\n const inputDate = new Date(value);\n const inputDay = inputDate.getDate();\n\n // Extract start day\n let compareStartDay: number;\n if (typeof startDay === \"number\") {\n compareStartDay = startDay;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, startDay);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareStartDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareStartDay = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareStartDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n // Extract end day\n let compareEndDay: number;\n if (typeof endDay === \"number\") {\n compareEndDay = endDay;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, endDay);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareEndDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareEndDay = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareEndDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n if (inputDay >= compareStartDay && inputDay <= compareEndDay) {\n return VALID_RULE;\n }\n\n this.context.translationParams.startDay = compareStartDay;\n this.context.translationParams.endDay = compareEndDay;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Quarter rule - date must be in specific quarter (1-4)\n */\nexport const quarterRule: SchemaRule<{ quarter: 1 | 2 | 3 | 4 }> = {\n name: \"quarter\",\n defaultErrorMessage: \"The :input must be in quarter :quarter\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const month = inputDate.getMonth() + 1;\n const quarter = Math.ceil(month / 3);\n\n if (quarter === this.context.options.quarter) {\n return VALID_RULE;\n }\n\n this.context.translationParams.quarter = this.context.options.quarter;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between times rule - time must be between start and end times (HH:MM format)\n */\nexport const betweenTimesRule: SchemaRule<{\n startTime: string;\n endTime: string;\n}> = {\n name: \"betweenTimes\",\n defaultErrorMessage: \"The :input must be between :startTime and :endTime\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const inputHour = inputDate.getHours();\n const inputMinute = inputDate.getMinutes();\n const inputTimeInMinutes = inputHour * 60 + inputMinute;\n\n const { startTime, endTime } = this.context.options;\n\n // Parse start time\n const [startHour, startMinute] = startTime.split(\":\").map(Number);\n if (startHour === undefined || startMinute === undefined) {\n return invalidRule(this, context);\n }\n const startTimeInMinutes = startHour * 60 + startMinute;\n\n // Parse end time\n const [endHour, endMinute] = endTime.split(\":\").map(Number);\n if (endHour === undefined || endMinute === undefined) {\n return invalidRule(this, context);\n }\n const endTimeInMinutes = endHour * 60 + endMinute;\n\n if (inputTimeInMinutes >= startTimeInMinutes && inputTimeInMinutes <= endTimeInMinutes) {\n return VALID_RULE;\n }\n\n this.context.translationParams.startTime = startTime;\n this.context.translationParams.endTime = endTime;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Min year rule - year must be >= given year or field\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const minYearRule: SchemaRule<{\n yearOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"minYear\",\n description: \"The date year must be at least the given year or field\",\n defaultErrorMessage: \"The :input year must be higher than :yearOrField\",\n async validate(value: Date, context) {\n const { yearOrField, scope = \"global\" } = this.context.options;\n let compareYear: number;\n\n if (typeof yearOrField === \"number\") {\n compareYear = yearOrField;\n this.context.translationParams.yearOrField = yearOrField;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, yearOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.yearOrField = yearOrField;\n\n // If field contains a date, extract the year\n if (fieldValue instanceof Date) {\n compareYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareYear = fieldValue;\n } else {\n // Try to parse as date and extract year\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputYear = inputDate.getFullYear();\n\n if (inputYear >= compareYear) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Max year rule - year must be <= given year or field\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const maxYearRule: SchemaRule<{\n yearOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"maxYear\",\n description: \"The date year must be at most the given year or field\",\n defaultErrorMessage: \"The :input year must be at most :yearOrField\",\n async validate(value: Date, context) {\n const { yearOrField, scope = \"global\" } = this.context.options;\n let compareYear: number;\n\n if (typeof yearOrField === \"number\") {\n compareYear = yearOrField;\n this.context.translationParams.yearOrField = compareYear;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, yearOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.yearOrField = yearOrField;\n\n // If field contains a date, extract the year\n if (fieldValue instanceof Date) {\n compareYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareYear = fieldValue;\n } else {\n // Try to parse as date and extract year\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputYear = inputDate.getFullYear();\n\n if (inputYear <= compareYear) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Min month rule - month must be >= given month or field (1-12)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const minMonthRule: SchemaRule<{\n monthOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"minMonth\",\n description: \"The date month must be at least the given month or field\",\n defaultErrorMessage: \"The :input month must be at least :monthOrField\",\n async validate(value: Date, context) {\n const { monthOrField, scope = \"global\" } = this.context.options;\n let compareMonth: number;\n\n if (typeof monthOrField === \"number\") {\n compareMonth = monthOrField;\n this.context.translationParams.monthOrField = compareMonth;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, monthOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.monthOrField = monthOrField;\n\n // If field contains a date, extract the month\n if (fieldValue instanceof Date) {\n compareMonth = fieldValue.getMonth() + 1; // getMonth() returns 0-11\n } else if (typeof fieldValue === \"number\") {\n compareMonth = fieldValue;\n } else {\n // Try to parse as date and extract month\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputMonth = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n if (inputMonth >= compareMonth) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n\n/**\n * Max month rule - month must be <= given month or field (1-12)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const maxMonthRule: SchemaRule<{\n monthOrField: Month | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"maxMonth\",\n description: \"The date month must be at most the given month or field\",\n defaultErrorMessage: \"The :input month must be at most :monthOrField\",\n async validate(value: Date, context) {\n const { monthOrField, scope = \"global\" } = this.context.options;\n let compareMonth: number;\n\n if (typeof monthOrField === \"number\") {\n compareMonth = monthOrField;\n this.context.translatableParams.monthOrField = MONTHS[monthOrField];\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, monthOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.monthOrField = monthOrField;\n\n // If field contains a date, extract the month\n if (fieldValue instanceof Date) {\n compareMonth = fieldValue.getMonth() + 1; // getMonth() returns 0-11\n } else if (typeof fieldValue === \"number\") {\n compareMonth = fieldValue;\n } else {\n // Try to parse as date and extract month\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputMonth = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n if (inputMonth <= compareMonth) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Min day rule - day must be >= given day or field (1-31)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const minDayRule: SchemaRule<{\n dayOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"minDay\",\n description: \"The date day must be at least the given day or field\",\n defaultErrorMessage: \"The :input day must be higher than :dayOrField\",\n async validate(value: Date, context) {\n const { dayOrField, scope = \"global\" } = this.context.options;\n let compareDay: number;\n\n if (typeof dayOrField === \"number\") {\n compareDay = dayOrField;\n this.context.translationParams.dayOrField = dayOrField;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dayOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.dayOrField = dayOrField;\n\n // If field contains a date, extract the day\n if (fieldValue instanceof Date) {\n compareDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareDay = fieldValue;\n } else {\n // Try to parse as date and extract day\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputDay = inputDate.getDate();\n\n if (inputDay >= compareDay) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n\n/**\n * Max day rule - day must be <= given day or field (1-31)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const maxDayRule: SchemaRule<{\n dayOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"maxDay\",\n description: \"The date day must be at most the given day or field\",\n defaultErrorMessage: \"The :input day must be at most :dayOrField\",\n async validate(value: Date, context) {\n const { dayOrField, scope = \"global\" } = this.context.options;\n let compareDay: number;\n\n if (typeof dayOrField === \"number\") {\n compareDay = dayOrField;\n this.context.translationParams.dayOrField = dayOrField;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dayOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.dayOrField = dayOrField;\n\n // If field contains a date, extract the day\n if (fieldValue instanceof Date) {\n compareDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareDay = fieldValue;\n } else {\n // Try to parse as date and extract day\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputDay = inputDate.getDate();\n\n if (inputDay <= compareDay) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"date-period-rules.mjs","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-period-rules.ts"],"sourcesContent":["import { get } from \"@mongez/reinforcements\";\nimport { invalidRule, VALID_RULE } from \"../../helpers\";\nimport type { SchemaRule } from \"../../types\";\n\nconst MONTHS = {\n 1: \"january\",\n 2: \"february\",\n 3: \"march\",\n 4: \"april\",\n 5: \"may\",\n 6: \"june\",\n 7: \"july\",\n 8: \"august\",\n 9: \"september\",\n 10: \"october\",\n 11: \"november\",\n 12: \"december\",\n};\n\nexport type Month = keyof typeof MONTHS;\n\n/**\n * Month rule - date must be in specific month (1-12)\n */\nexport const monthRule: SchemaRule<{ month: Month }> = {\n name: \"month\",\n defaultErrorMessage: \"The :input must be in month :month\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const month = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n if (month === this.context.options.month) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.month =\n MONTHS[this.context.options.month as keyof typeof MONTHS];\n return invalidRule(this, context);\n },\n};\n\n/**\n * Year rule - date must be in specific year\n */\nexport const yearRule: SchemaRule<{ year: number }> = {\n name: \"year\",\n defaultErrorMessage: \"The :input must be in year :year\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const year = inputDate.getFullYear();\n\n if (year === this.context.options.year) {\n return VALID_RULE;\n }\n\n this.context.translationParams.year = this.context.options.year;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between years rule - date must be between start and end years\n * Supports field names with sibling scope\n */\nexport const betweenYearsRule: SchemaRule<{\n startYear: number | string;\n endYear: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"betweenYears\",\n defaultErrorMessage: \"The :input must be between :startYear and :endYear\",\n async validate(value: Date, context) {\n const { startYear, endYear, scope = \"global\" } = this.context.options;\n const inputDate = new Date(value);\n const inputYear = inputDate.getFullYear();\n\n // Extract start year\n let compareStartYear: number;\n if (typeof startYear === \"number\") {\n compareStartYear = startYear;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, startYear);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareStartYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareStartYear = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareStartYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n // Extract end year\n let compareEndYear: number;\n if (typeof endYear === \"number\") {\n compareEndYear = endYear;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, endYear);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareEndYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareEndYear = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareEndYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n if (inputYear >= compareStartYear && inputYear <= compareEndYear) {\n return VALID_RULE;\n }\n\n this.context.translationParams.startYear = compareStartYear;\n this.context.translationParams.endYear = compareEndYear;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between months rule - date must be between start and end months (1-12)\n * Supports field names with sibling scope\n */\nexport const betweenMonthsRule: SchemaRule<{\n startMonth: Month | string;\n endMonth: Month | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"betweenMonths\",\n defaultErrorMessage: \"The :input must be between month :startMonth and :endMonth\",\n async validate(value: Date, context) {\n const { startMonth, endMonth, scope = \"global\" } = this.context.options;\n const inputDate = new Date(value);\n const inputMonth = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n // Extract start month\n let compareStartMonth: number;\n if (typeof startMonth === \"number\") {\n compareStartMonth = startMonth;\n this.context.translatableParams.startMonth = MONTHS[compareStartMonth as keyof typeof MONTHS];\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, startMonth);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.startMonth = startMonth;\n\n if (fieldValue instanceof Date) {\n compareStartMonth = fieldValue.getMonth() + 1;\n } else if (typeof fieldValue === \"number\") {\n compareStartMonth = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareStartMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n // Extract end month\n let compareEndMonth: number;\n if (typeof endMonth === \"number\") {\n compareEndMonth = endMonth;\n this.context.translatableParams.endMonth = MONTHS[compareEndMonth as keyof typeof MONTHS];\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, endMonth);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.endMonth = endMonth;\n\n if (fieldValue instanceof Date) {\n compareEndMonth = fieldValue.getMonth() + 1;\n } else if (typeof fieldValue === \"number\") {\n compareEndMonth = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareEndMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n if (inputMonth >= compareStartMonth && inputMonth <= compareEndMonth) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between days rule - date must be between start and end days (1-31)\n * Supports field names with sibling scope\n */\nexport const betweenDaysRule: SchemaRule<{\n startDay: number | string;\n endDay: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"betweenDays\",\n defaultErrorMessage: \"The :input must be between day :startDay and :endDay\",\n async validate(value: Date, context) {\n const { startDay, endDay, scope = \"global\" } = this.context.options;\n const inputDate = new Date(value);\n const inputDay = inputDate.getDate();\n\n // Extract start day\n let compareStartDay: number;\n if (typeof startDay === \"number\") {\n compareStartDay = startDay;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, startDay);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareStartDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareStartDay = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareStartDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n // Extract end day\n let compareEndDay: number;\n if (typeof endDay === \"number\") {\n compareEndDay = endDay;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, endDay);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n if (fieldValue instanceof Date) {\n compareEndDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareEndDay = fieldValue;\n } else {\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareEndDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n if (inputDay >= compareStartDay && inputDay <= compareEndDay) {\n return VALID_RULE;\n }\n\n this.context.translationParams.startDay = compareStartDay;\n this.context.translationParams.endDay = compareEndDay;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Quarter rule - date must be in specific quarter (1-4)\n */\nexport const quarterRule: SchemaRule<{ quarter: 1 | 2 | 3 | 4 }> = {\n name: \"quarter\",\n defaultErrorMessage: \"The :input must be in quarter :quarter\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const month = inputDate.getMonth() + 1;\n const quarter = Math.ceil(month / 3);\n\n if (quarter === this.context.options.quarter) {\n return VALID_RULE;\n }\n\n this.context.translationParams.quarter = this.context.options.quarter;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Between times rule - time must be between start and end times (HH:MM format)\n */\nexport const betweenTimesRule: SchemaRule<{\n startTime: string;\n endTime: string;\n}> = {\n name: \"betweenTimes\",\n defaultErrorMessage: \"The :input must be between :startTime and :endTime\",\n async validate(value: Date, context) {\n const inputDate = new Date(value);\n const inputHour = inputDate.getHours();\n const inputMinute = inputDate.getMinutes();\n const inputTimeInMinutes = inputHour * 60 + inputMinute;\n\n const { startTime, endTime } = this.context.options;\n\n // Parse start time\n const [startHour, startMinute] = startTime.split(\":\").map(Number);\n if (startHour === undefined || startMinute === undefined) {\n return invalidRule(this, context);\n }\n const startTimeInMinutes = startHour * 60 + startMinute;\n\n // Parse end time\n const [endHour, endMinute] = endTime.split(\":\").map(Number);\n if (endHour === undefined || endMinute === undefined) {\n return invalidRule(this, context);\n }\n const endTimeInMinutes = endHour * 60 + endMinute;\n\n if (inputTimeInMinutes >= startTimeInMinutes && inputTimeInMinutes <= endTimeInMinutes) {\n return VALID_RULE;\n }\n\n this.context.translationParams.startTime = startTime;\n this.context.translationParams.endTime = endTime;\n return invalidRule(this, context);\n },\n};\n\n/**\n * Min year rule - year must be >= given year or field\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const minYearRule: SchemaRule<{\n yearOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"minYear\",\n description: \"The date year must be at least the given year or field\",\n defaultErrorMessage: \"The :input year must be higher than :yearOrField\",\n async validate(value: Date, context) {\n const { yearOrField, scope = \"global\" } = this.context.options;\n let compareYear: number;\n\n if (typeof yearOrField === \"number\") {\n compareYear = yearOrField;\n this.context.translationParams.yearOrField = yearOrField;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, yearOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.yearOrField = yearOrField;\n\n // If field contains a date, extract the year\n if (fieldValue instanceof Date) {\n compareYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareYear = fieldValue;\n } else {\n // Try to parse as date and extract year\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputYear = inputDate.getFullYear();\n\n if (inputYear >= compareYear) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Max year rule - year must be <= given year or field\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const maxYearRule: SchemaRule<{\n yearOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"maxYear\",\n description: \"The date year must be at most the given year or field\",\n defaultErrorMessage: \"The :input year must be at most :yearOrField\",\n async validate(value: Date, context) {\n const { yearOrField, scope = \"global\" } = this.context.options;\n let compareYear: number;\n\n if (typeof yearOrField === \"number\") {\n compareYear = yearOrField;\n this.context.translationParams.yearOrField = compareYear;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, yearOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.yearOrField = yearOrField;\n\n // If field contains a date, extract the year\n if (fieldValue instanceof Date) {\n compareYear = fieldValue.getFullYear();\n } else if (typeof fieldValue === \"number\") {\n compareYear = fieldValue;\n } else {\n // Try to parse as date and extract year\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareYear = date.getFullYear();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputYear = inputDate.getFullYear();\n\n if (inputYear <= compareYear) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Min month rule - month must be >= given month or field (1-12)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const minMonthRule: SchemaRule<{\n monthOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"minMonth\",\n description: \"The date month must be at least the given month or field\",\n defaultErrorMessage: \"The :input month must be at least :monthOrField\",\n async validate(value: Date, context) {\n const { monthOrField, scope = \"global\" } = this.context.options;\n let compareMonth: number;\n\n if (typeof monthOrField === \"number\") {\n compareMonth = monthOrField;\n this.context.translationParams.monthOrField = compareMonth;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, monthOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.monthOrField = monthOrField;\n\n // If field contains a date, extract the month\n if (fieldValue instanceof Date) {\n compareMonth = fieldValue.getMonth() + 1; // getMonth() returns 0-11\n } else if (typeof fieldValue === \"number\") {\n compareMonth = fieldValue;\n } else {\n // Try to parse as date and extract month\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputMonth = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n if (inputMonth >= compareMonth) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n\n/**\n * Max month rule - month must be <= given month or field (1-12)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const maxMonthRule: SchemaRule<{\n monthOrField: Month | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"maxMonth\",\n description: \"The date month must be at most the given month or field\",\n defaultErrorMessage: \"The :input month must be at most :monthOrField\",\n async validate(value: Date, context) {\n const { monthOrField, scope = \"global\" } = this.context.options;\n let compareMonth: number;\n\n if (typeof monthOrField === \"number\") {\n compareMonth = monthOrField;\n this.context.translatableParams.monthOrField = MONTHS[monthOrField];\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, monthOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.monthOrField = monthOrField;\n\n // If field contains a date, extract the month\n if (fieldValue instanceof Date) {\n compareMonth = fieldValue.getMonth() + 1; // getMonth() returns 0-11\n } else if (typeof fieldValue === \"number\") {\n compareMonth = fieldValue;\n } else {\n // Try to parse as date and extract month\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareMonth = date.getMonth() + 1;\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputMonth = inputDate.getMonth() + 1; // getMonth() returns 0-11\n\n if (inputMonth <= compareMonth) {\n return VALID_RULE;\n }\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Min day rule - day must be >= given day or field (1-31)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const minDayRule: SchemaRule<{\n dayOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"minDay\",\n description: \"The date day must be at least the given day or field\",\n defaultErrorMessage: \"The :input day must be higher than :dayOrField\",\n async validate(value: Date, context) {\n const { dayOrField, scope = \"global\" } = this.context.options;\n let compareDay: number;\n\n if (typeof dayOrField === \"number\") {\n compareDay = dayOrField;\n this.context.translationParams.dayOrField = dayOrField;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dayOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.dayOrField = dayOrField;\n\n // If field contains a date, extract the day\n if (fieldValue instanceof Date) {\n compareDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareDay = fieldValue;\n } else {\n // Try to parse as date and extract day\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputDay = inputDate.getDate();\n\n if (inputDay >= compareDay) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n\n/**\n * Max day rule - day must be <= given day or field (1-31)\n * Smart detection: number or field name\n * Supports both global and sibling scope\n */\nexport const maxDayRule: SchemaRule<{\n dayOrField: number | string;\n scope?: \"global\" | \"sibling\";\n}> = {\n name: \"maxDay\",\n description: \"The date day must be at most the given day or field\",\n defaultErrorMessage: \"The :input day must be at most :dayOrField\",\n async validate(value: Date, context) {\n const { dayOrField, scope = \"global\" } = this.context.options;\n let compareDay: number;\n\n if (typeof dayOrField === \"number\") {\n compareDay = dayOrField;\n this.context.translationParams.dayOrField = dayOrField;\n } else {\n const source = scope === \"sibling\" ? context.parent : context.allValues;\n const fieldValue = get(source, dayOrField);\n\n if (fieldValue === undefined) {\n return VALID_RULE;\n }\n\n this.context.translatableParams.dayOrField = dayOrField;\n\n // If field contains a date, extract the day\n if (fieldValue instanceof Date) {\n compareDay = fieldValue.getDate();\n } else if (typeof fieldValue === \"number\") {\n compareDay = fieldValue;\n } else {\n // Try to parse as date and extract day\n const date = new Date(fieldValue);\n if (!isNaN(date.getTime())) {\n compareDay = date.getDate();\n } else {\n return VALID_RULE;\n }\n }\n }\n\n const inputDate = new Date(value);\n const inputDay = inputDate.getDate();\n\n if (inputDay <= compareDay) {\n return VALID_RULE;\n }\n return invalidRule(this, context);\n },\n};\n"],"mappings":"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"}
@@ -1,24 +1,23 @@
1
1
  import { SchemaRule } from "../../types/rule-types.mjs";
2
-
2
+ import "../../types/index.mjs";
3
3
  //#region ../../packages/seal/src/rules/date/date-relative-rules.d.ts
4
4
  /**
5
5
  * Within days rule - date must be within X days from now (past or future)
6
6
  */
7
- declare const withinDaysRule: SchemaRule<{
7
+ export declare const withinDaysRule: SchemaRule<{
8
8
  days: number;
9
9
  }>;
10
10
  /**
11
11
  * Within past days rule - date must be within X days in the past
12
12
  */
13
- declare const withinPastDaysRule: SchemaRule<{
13
+ export declare const withinPastDaysRule: SchemaRule<{
14
14
  days: number;
15
15
  }>;
16
16
  /**
17
17
  * Within future days rule - date must be within X days in the future
18
18
  */
19
- declare const withinFutureDaysRule: SchemaRule<{
19
+ export declare const withinFutureDaysRule: SchemaRule<{
20
20
  days: number;
21
21
  }>;
22
22
  //#endregion
23
- export { withinDaysRule, withinFutureDaysRule, withinPastDaysRule };
24
23
  //# sourceMappingURL=date-relative-rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-relative-rules.d.mts","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-relative-rules.ts"],"mappings":";;;;;AAMA;cAAa,cAAA,EAAgB,UAAU;EAAG,IAAI;AAAA;AAAA;AAsB9C;;AAtB8C,cAsBjC,kBAAA,EAAoB,UAAU;EAAG,IAAI;AAAA;AA2BlD;;;AAAA,cAAa,oBAAA,EAAsB,UAAU;EAAG,IAAI;AAAA"}
1
+ {"version":3,"file":"date-relative-rules.d.mts","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-relative-rules.ts"],"mappings":";;;;;;qBAMa,gBAAgB;EAAa;;;;;qBAsB7B,oBAAoB;EAAa;;;;;qBA2BjC,sBAAsB;EAAa"}
@@ -12,7 +12,7 @@ const withinDaysRule = {
12
12
  const now = /* @__PURE__ */ new Date();
13
13
  const inputDate = new Date(value);
14
14
  const diffTime = Math.abs(inputDate.getTime() - now.getTime());
15
- if (Math.ceil(diffTime / (1e3 * 60 * 60 * 24)) <= this.context.options.days) return VALID_RULE;
15
+ if (Math.ceil(diffTime / 864e5) <= this.context.options.days) return VALID_RULE;
16
16
  this.context.translationParams.days = this.context.options.days;
17
17
  return invalidRule(this, context);
18
18
  }
@@ -28,7 +28,7 @@ const withinPastDaysRule = {
28
28
  const inputDate = new Date(value);
29
29
  if (inputDate > now) return invalidRule(this, context);
30
30
  const diffTime = now.getTime() - inputDate.getTime();
31
- if (Math.ceil(diffTime / (1e3 * 60 * 60 * 24)) <= this.context.options.days) return VALID_RULE;
31
+ if (Math.ceil(diffTime / 864e5) <= this.context.options.days) return VALID_RULE;
32
32
  this.context.translationParams.days = this.context.options.days;
33
33
  return invalidRule(this, context);
34
34
  }
@@ -44,7 +44,7 @@ const withinFutureDaysRule = {
44
44
  const inputDate = new Date(value);
45
45
  if (inputDate < now) return invalidRule(this, context);
46
46
  const diffTime = inputDate.getTime() - now.getTime();
47
- if (Math.ceil(diffTime / (1e3 * 60 * 60 * 24)) <= this.context.options.days) return VALID_RULE;
47
+ if (Math.ceil(diffTime / 864e5) <= this.context.options.days) return VALID_RULE;
48
48
  this.context.translationParams.days = this.context.options.days;
49
49
  return invalidRule(this, context);
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"date-relative-rules.mjs","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-relative-rules.ts"],"sourcesContent":["import { invalidRule, VALID_RULE } from \"../../helpers\";\nimport type { SchemaRule } from \"../../types\";\n\n/**\n * Within days rule - date must be within X days from now (past or future)\n */\nexport const withinDaysRule: SchemaRule<{ days: number }> = {\n name: \"withinDays\",\n defaultErrorMessage: \"The :input must be within :days days from now\",\n async validate(value: Date, context) {\n const now = new Date();\n const inputDate = new Date(value);\n const diffTime = Math.abs(inputDate.getTime() - now.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays <= this.context.options.days) {\n return VALID_RULE;\n }\n\n this.context.translationParams.days = this.context.options.days;\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Within past days rule - date must be within X days in the past\n */\nexport const withinPastDaysRule: SchemaRule<{ days: number }> = {\n name: \"withinPastDays\",\n defaultErrorMessage: \"The :input must be within the past :days days\",\n async validate(value: Date, context) {\n const now = new Date();\n const inputDate = new Date(value);\n\n if (inputDate > now) {\n return invalidRule(this, context); // Must be in past\n }\n\n const diffTime = now.getTime() - inputDate.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays <= this.context.options.days) {\n return VALID_RULE;\n }\n\n this.context.translationParams.days = this.context.options.days;\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Within future days rule - date must be within X days in the future\n */\nexport const withinFutureDaysRule: SchemaRule<{ days: number }> = {\n name: \"withinFutureDays\",\n defaultErrorMessage: \"The :input must be within the next :days days\",\n async validate(value: Date, context) {\n const now = new Date();\n const inputDate = new Date(value);\n\n if (inputDate < now) {\n return invalidRule(this, context); // Must be in future\n }\n\n const diffTime = inputDate.getTime() - now.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays <= this.context.options.days) {\n return VALID_RULE;\n }\n\n this.context.translationParams.days = this.context.options.days;\n\n return invalidRule(this, context);\n },\n};\n"],"mappings":";;;;;;;AAMA,MAAa,iBAA+C;CAC1D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,sBAAM,IAAI,KAAK;EACrB,MAAM,YAAY,IAAI,KAAK,KAAK;EAChC,MAAM,WAAW,KAAK,IAAI,UAAU,QAAQ,IAAI,IAAI,QAAQ,CAAC;EAG7D,IAFiB,KAAK,KAAK,YAAY,MAAO,KAAK,KAAK,GAE7C,KAAK,KAAK,QAAQ,QAAQ,MACnC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,qBAAmD;CAC9D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,sBAAM,IAAI,KAAK;EACrB,MAAM,YAAY,IAAI,KAAK,KAAK;EAEhC,IAAI,YAAY,KACd,OAAO,YAAY,MAAM,OAAO;EAGlC,MAAM,WAAW,IAAI,QAAQ,IAAI,UAAU,QAAQ;EAGnD,IAFiB,KAAK,KAAK,YAAY,MAAO,KAAK,KAAK,GAE7C,KAAK,KAAK,QAAQ,QAAQ,MACnC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,uBAAqD;CAChE,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,sBAAM,IAAI,KAAK;EACrB,MAAM,YAAY,IAAI,KAAK,KAAK;EAEhC,IAAI,YAAY,KACd,OAAO,YAAY,MAAM,OAAO;EAGlC,MAAM,WAAW,UAAU,QAAQ,IAAI,IAAI,QAAQ;EAGnD,IAFiB,KAAK,KAAK,YAAY,MAAO,KAAK,KAAK,GAE7C,KAAK,KAAK,QAAQ,QAAQ,MACnC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
1
+ {"version":3,"file":"date-relative-rules.mjs","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-relative-rules.ts"],"sourcesContent":["import { invalidRule, VALID_RULE } from \"../../helpers\";\nimport type { SchemaRule } from \"../../types\";\n\n/**\n * Within days rule - date must be within X days from now (past or future)\n */\nexport const withinDaysRule: SchemaRule<{ days: number }> = {\n name: \"withinDays\",\n defaultErrorMessage: \"The :input must be within :days days from now\",\n async validate(value: Date, context) {\n const now = new Date();\n const inputDate = new Date(value);\n const diffTime = Math.abs(inputDate.getTime() - now.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays <= this.context.options.days) {\n return VALID_RULE;\n }\n\n this.context.translationParams.days = this.context.options.days;\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Within past days rule - date must be within X days in the past\n */\nexport const withinPastDaysRule: SchemaRule<{ days: number }> = {\n name: \"withinPastDays\",\n defaultErrorMessage: \"The :input must be within the past :days days\",\n async validate(value: Date, context) {\n const now = new Date();\n const inputDate = new Date(value);\n\n if (inputDate > now) {\n return invalidRule(this, context); // Must be in past\n }\n\n const diffTime = now.getTime() - inputDate.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays <= this.context.options.days) {\n return VALID_RULE;\n }\n\n this.context.translationParams.days = this.context.options.days;\n\n return invalidRule(this, context);\n },\n};\n\n/**\n * Within future days rule - date must be within X days in the future\n */\nexport const withinFutureDaysRule: SchemaRule<{ days: number }> = {\n name: \"withinFutureDays\",\n defaultErrorMessage: \"The :input must be within the next :days days\",\n async validate(value: Date, context) {\n const now = new Date();\n const inputDate = new Date(value);\n\n if (inputDate < now) {\n return invalidRule(this, context); // Must be in future\n }\n\n const diffTime = inputDate.getTime() - now.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n if (diffDays <= this.context.options.days) {\n return VALID_RULE;\n }\n\n this.context.translationParams.days = this.context.options.days;\n\n return invalidRule(this, context);\n },\n};\n"],"mappings":";;;;;;;AAMA,MAAa,iBAA+C;CAC1D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,sBAAM,IAAI,KAAK;EACrB,MAAM,YAAY,IAAI,KAAK,KAAK;EAChC,MAAM,WAAW,KAAK,IAAI,UAAU,QAAQ,IAAI,IAAI,QAAQ,CAAC;EAG7D,IAFiB,KAAK,KAAK,WAAY,KAE5B,KAAK,KAAK,QAAQ,QAAQ,MACnC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,qBAAmD;CAC9D,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,sBAAM,IAAI,KAAK;EACrB,MAAM,YAAY,IAAI,KAAK,KAAK;EAEhC,IAAI,YAAY,KACd,OAAO,YAAY,MAAM,OAAO;EAGlC,MAAM,WAAW,IAAI,QAAQ,IAAI,UAAU,QAAQ;EAGnD,IAFiB,KAAK,KAAK,WAAY,KAE5B,KAAK,KAAK,QAAQ,QAAQ,MACnC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF;;;;AAKA,MAAa,uBAAqD;CAChE,MAAM;CACN,qBAAqB;CACrB,MAAM,SAAS,OAAa,SAAS;EACnC,MAAM,sBAAM,IAAI,KAAK;EACrB,MAAM,YAAY,IAAI,KAAK,KAAK;EAEhC,IAAI,YAAY,KACd,OAAO,YAAY,MAAM,OAAO;EAGlC,MAAM,WAAW,UAAU,QAAQ,IAAI,IAAI,QAAQ;EAGnD,IAFiB,KAAK,KAAK,WAAY,KAE5B,KAAK,KAAK,QAAQ,QAAQ,MACnC,OAAO;EAGT,KAAK,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,QAAQ;EAE3D,OAAO,YAAY,MAAM,OAAO;CAClC;AACF"}
@@ -1,24 +1,23 @@
1
1
  import { SchemaRule } from "../../types/rule-types.mjs";
2
-
2
+ import "../../types/index.mjs";
3
3
  //#region ../../packages/seal/src/rules/date/date-special-rules.d.ts
4
4
  /**
5
5
  * Birthday rule - valid birthday (not in future, reasonable age)
6
6
  */
7
- declare const birthdayRule: SchemaRule<{
7
+ export declare const birthdayRule: SchemaRule<{
8
8
  minAge?: number;
9
9
  maxAge?: number;
10
10
  }>;
11
11
  /**
12
12
  * Between age rule - age must be between min and max years
13
13
  */
14
- declare const betweenAgeRule: SchemaRule<{
14
+ export declare const betweenAgeRule: SchemaRule<{
15
15
  minAge: number;
16
16
  maxAge: number;
17
17
  }>;
18
18
  /**
19
19
  * Leap year rule - date must be in a leap year
20
20
  */
21
- declare const leapYearRule: SchemaRule;
21
+ export declare const leapYearRule: SchemaRule;
22
22
  //#endregion
23
- export { betweenAgeRule, birthdayRule, leapYearRule };
24
23
  //# sourceMappingURL=date-special-rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-special-rules.d.mts","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-special-rules.ts"],"mappings":";;;;;AAMA;cAAa,YAAA,EAAc,UAAU;EAAG,MAAA;EAAiB,MAAA;AAAA;;;;cAsC5C,cAAA,EAAgB,UAAU;EAAG,MAAA;EAAgB,MAAA;AAAA;;;;cA6B7C,YAAA,EAAc,UAgB1B"}
1
+ {"version":3,"file":"date-special-rules.d.mts","names":[],"sources":["../../../../../../../../../packages/seal/src/rules/date/date-special-rules.ts"],"mappings":";;;;;;qBAMa,cAAc;EAAa;EAAiB;;;;;qBAsC5C,gBAAgB;EAAa;EAAgB;;;;;qBA6B7C,cAAc"}