| | import { type DateLib, defaultDateLib } from "../classes/DateLib.js"; |
| | import type { Matcher } from "../types/index.js"; |
| |
|
| | import { rangeIncludesDate } from "./rangeIncludesDate.js"; |
| | import { |
| | isDateAfterType, |
| | isDateBeforeType, |
| | isDateInterval, |
| | isDateRange, |
| | isDatesArray, |
| | isDayOfWeekType, |
| | } from "./typeguards.js"; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | export function dateMatchModifiers( |
| | date: Date, |
| | matchers: Matcher | Matcher[], |
| | dateLib: DateLib = defaultDateLib, |
| | ): boolean { |
| | const matchersArr = !Array.isArray(matchers) ? [matchers] : matchers; |
| | const { isSameDay, differenceInCalendarDays, isAfter } = dateLib; |
| | return matchersArr.some((matcher: Matcher) => { |
| | if (typeof matcher === "boolean") { |
| | return matcher; |
| | } |
| | if (dateLib.isDate(matcher)) { |
| | return isSameDay(date, matcher); |
| | } |
| | if (isDatesArray(matcher, dateLib)) { |
| | return matcher.some((matcherDate) => isSameDay(date, matcherDate)); |
| | } |
| | if (isDateRange(matcher)) { |
| | return rangeIncludesDate(matcher, date, false, dateLib); |
| | } |
| | if (isDayOfWeekType(matcher)) { |
| | if (!Array.isArray(matcher.dayOfWeek)) { |
| | return matcher.dayOfWeek === date.getDay(); |
| | } |
| | return matcher.dayOfWeek.includes(date.getDay()); |
| | } |
| | if (isDateInterval(matcher)) { |
| | const diffBefore = differenceInCalendarDays(matcher.before, date); |
| | const diffAfter = differenceInCalendarDays(matcher.after, date); |
| | const isDayBefore = diffBefore > 0; |
| | const isDayAfter = diffAfter < 0; |
| | const isClosedInterval = isAfter(matcher.before, matcher.after); |
| | if (isClosedInterval) { |
| | return isDayAfter && isDayBefore; |
| | } else { |
| | return isDayBefore || isDayAfter; |
| | } |
| | } |
| | if (isDateAfterType(matcher)) { |
| | return differenceInCalendarDays(date, matcher.after) > 0; |
| | } |
| | if (isDateBeforeType(matcher)) { |
| | return differenceInCalendarDays(matcher.before, date) > 0; |
| | } |
| | if (typeof matcher === "function") { |
| | return matcher(date); |
| | } |
| | return false; |
| | }); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | export const isMatch = dateMatchModifiers; |
| |
|