@decaf-ts/decorator-validation
Version:
simple decorator based validation engine
234 lines • 7.24 kB
JavaScript
"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