UNPKG

@decaf-ts/decorator-validation

Version:
234 lines 7.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NextSeconds = exports.SecondsAgo = exports.NextMinutes = exports.MinutesAgo = exports.NextHours = exports.HoursAgo = exports.NextMonths = exports.MonthsAgo = exports.NextYears = exports.YearsAgo = exports.NextDays = exports.DaysAgo = exports.Yesterday = exports.Tomorrow = exports.Now = exports.Dates = exports.DateBuilder = void 0; exports.offsetDate = offsetDate; function resolveTarget(target) { if (target instanceof DateBuilder) return target.build(); return new Date(target); } function offsetDate(date, direction, values) { const computed = new Date(date); if (values.years) computed.setFullYear(computed.getFullYear() + direction * values.years); if (values.months) computed.setMonth(computed.getMonth() + direction * values.months); if (values.days) computed.setDate(computed.getDate() + direction * values.days); if (values.hours) computed.setHours(computed.getHours() + direction * values.hours); if (values.minutes) computed.setMinutes(computed.getMinutes() + direction * values.minutes); if (values.seconds) computed.setSeconds(computed.getSeconds() + direction * values.seconds); return computed; } /** * Fluent builder for producing dates relative to a reference point. */ class DateBuilder { constructor() { this.years = 0; this.months = 0; this.days = 0; this.hours = 0; this.minutes = 0; this.seconds = 0; } static Years(value) { return new DateBuilder().Years(value); } static Months(value) { return new DateBuilder().Months(value); } static Days(value) { return new DateBuilder().Days(value); } static Hours(value) { return new DateBuilder().Hours(value); } static Minutes(value) { return new DateBuilder().Minutes(value); } static Seconds(value) { return new DateBuilder().Seconds(value); } static Now() { return new Date(); } static Tomorrow() { return DateBuilder.Days(1).from(DateBuilder.Now()); } static Yesterday() { return DateBuilder.Days(1).until(DateBuilder.Now()); } static DaysAgo(count) { return DateBuilder.Days(count).until(DateBuilder.Now()); } static NextDays(count) { return DateBuilder.Days(count).from(DateBuilder.Now()); } static YearsAgo(count) { return DateBuilder.Years(count).until(DateBuilder.Now()); } static NextYears(count) { return DateBuilder.Years(count).from(DateBuilder.Now()); } static MonthsAgo(count) { return DateBuilder.Months(count).until(DateBuilder.Now()); } static NextMonths(count) { return DateBuilder.Months(count).from(DateBuilder.Now()); } static HoursAgo(count) { return DateBuilder.Hours(count).until(DateBuilder.Now()); } static NextHours(count) { return DateBuilder.Hours(count).from(DateBuilder.Now()); } static MinutesAgo(count) { return DateBuilder.Minutes(count).until(DateBuilder.Now()); } static NextMinutes(count) { return DateBuilder.Minutes(count).from(DateBuilder.Now()); } static SecondsAgo(count) { return DateBuilder.Seconds(count).until(DateBuilder.Now()); } static NextSeconds(count) { return DateBuilder.Seconds(count).from(DateBuilder.Now()); } Years(value) { this.years += value; return this; } Months(value) { this.months += value; return this; } Days(value) { this.days += value; return this; } Hours(value) { this.hours += value; return this; } Minutes(value) { this.minutes += value; return this; } Seconds(value) { this.seconds += value; return this; } build(reference = new Date()) { return this.from(reference); } from(reference) { return offsetDate(resolveTarget(reference), 1, this.offsets()); } past(reference) { return this.from(reference); } after(reference) { return this.from(reference); } until(reference) { return offsetDate(resolveTarget(reference), -1, this.offsets()); } before(reference) { return this.until(reference); } ago(reference = new Date()) { return this.until(reference); } Now() { return DateBuilder.Now(); } Tomorrow() { return DateBuilder.Tomorrow(); } Yesterday() { return DateBuilder.Yesterday(); } DaysAgo(count) { return DateBuilder.DaysAgo(count); } NextDays(count) { return DateBuilder.NextDays(count); } YearsAgo(count) { return DateBuilder.YearsAgo(count); } NextYears(count) { return DateBuilder.NextYears(count); } MonthsAgo(count) { return DateBuilder.MonthsAgo(count); } NextMonths(count) { return DateBuilder.NextMonths(count); } HoursAgo(count) { return DateBuilder.HoursAgo(count); } NextHours(count) { return DateBuilder.NextHours(count); } MinutesAgo(count) { return DateBuilder.MinutesAgo(count); } NextMinutes(count) { return DateBuilder.NextMinutes(count); } SecondsAgo(count) { return DateBuilder.SecondsAgo(count); } NextSeconds(count) { return DateBuilder.NextSeconds(count); } offsets() { return { years: this.years, months: this.months, days: this.days, hours: this.hours, minutes: this.minutes, seconds: this.seconds, }; } } exports.DateBuilder = DateBuilder; exports.Dates = DateBuilder; const Now = () => DateBuilder.Now(); exports.Now = Now; const Tomorrow = () => DateBuilder.Tomorrow(); exports.Tomorrow = Tomorrow; const Yesterday = () => DateBuilder.Yesterday(); exports.Yesterday = Yesterday; const DaysAgo = (count) => DateBuilder.DaysAgo(count); exports.DaysAgo = DaysAgo; const NextDays = (count) => DateBuilder.NextDays(count); exports.NextDays = NextDays; const YearsAgo = (count) => DateBuilder.YearsAgo(count); exports.YearsAgo = YearsAgo; const NextYears = (count) => DateBuilder.NextYears(count); exports.NextYears = NextYears; const MonthsAgo = (count) => DateBuilder.MonthsAgo(count); exports.MonthsAgo = MonthsAgo; const NextMonths = (count) => DateBuilder.NextMonths(count); exports.NextMonths = NextMonths; const HoursAgo = (count) => DateBuilder.HoursAgo(count); exports.HoursAgo = HoursAgo; const NextHours = (count) => DateBuilder.NextHours(count); exports.NextHours = NextHours; const MinutesAgo = (count) => DateBuilder.MinutesAgo(count); exports.MinutesAgo = MinutesAgo; const NextMinutes = (count) => DateBuilder.NextMinutes(count); exports.NextMinutes = NextMinutes; const SecondsAgo = (count) => DateBuilder.SecondsAgo(count); exports.SecondsAgo = SecondsAgo; const NextSeconds = (count) => DateBuilder.NextSeconds(count); exports.NextSeconds = NextSeconds; //# sourceMappingURL=DateBuilder.js.map