@decaf-ts/decorator-validation
Version:
simple decorator based validation engine
122 lines (121 loc) • 5.3 kB
TypeScript
type DateBuilderField = "Years" | "Months" | "Days" | "Hours" | "Minutes" | "Seconds";
export type DateBuilderInstance = DateBuilder<DateBuilderField>;
export type DateTarget = Date | DateBuilderInstance;
export type OffsetValues = {
years: number;
months: number;
days: number;
hours: number;
minutes: number;
seconds: number;
};
export declare function offsetDate(date: Date, direction: 1 | -1, values: OffsetValues): Date;
type RemoveField<Input extends DateBuilderField, Field extends DateBuilderField> = Input extends Field ? never : Input;
interface DateBuilderUtilityMethods {
Now(): Date;
Tomorrow(): Date;
Yesterday(): Date;
DaysAgo(count: number): Date;
NextDays(count: number): Date;
YearsAgo(count: number): Date;
NextYears(count: number): Date;
MonthsAgo(count: number): Date;
NextMonths(count: number): Date;
HoursAgo(count: number): Date;
NextHours(count: number): Date;
MinutesAgo(count: number): Date;
NextMinutes(count: number): Date;
SecondsAgo(count: number): Date;
NextSeconds(count: number): Date;
}
interface DateBuilderCoreMethods extends DateBuilderUtilityMethods {
build(reference?: DateTarget): Date;
from(reference: DateTarget): Date;
past(reference: DateTarget): Date;
after(reference: DateTarget): Date;
until(reference: DateTarget): Date;
before(reference: DateTarget): Date;
ago(reference?: DateTarget): Date;
}
export type DateBuilderChain<Remaining extends DateBuilderField = DateBuilderField> = DateBuilderCoreMethods & {
[Field in Remaining]: (value: number) => DateBuilderChain<RemoveField<Remaining, Field>>;
};
/**
* Fluent builder for producing dates relative to a reference point.
*/
export declare class DateBuilder<Remaining extends DateBuilderField = DateBuilderField> implements DateBuilderCoreMethods {
private years;
private months;
private days;
private hours;
private minutes;
private seconds;
private constructor();
static Years(value: number): DateBuilderChain<RemoveField<DateBuilderField, "Years">>;
static Months(value: number): DateBuilderChain<RemoveField<DateBuilderField, "Months">>;
static Days(value: number): DateBuilderChain<RemoveField<DateBuilderField, "Days">>;
static Hours(value: number): DateBuilderChain<RemoveField<DateBuilderField, "Hours">>;
static Minutes(value: number): DateBuilderChain<RemoveField<DateBuilderField, "Minutes">>;
static Seconds(value: number): DateBuilderChain<RemoveField<DateBuilderField, "Seconds">>;
static Now(): Date;
static Tomorrow(): Date;
static Yesterday(): Date;
static DaysAgo(count: number): Date;
static NextDays(count: number): Date;
static YearsAgo(count: number): Date;
static NextYears(count: number): Date;
static MonthsAgo(count: number): Date;
static NextMonths(count: number): Date;
static HoursAgo(count: number): Date;
static NextHours(count: number): Date;
static MinutesAgo(count: number): Date;
static NextMinutes(count: number): Date;
static SecondsAgo(count: number): Date;
static NextSeconds(count: number): Date;
Years(value: number): DateBuilderChain<RemoveField<Remaining, "Years">>;
Months(value: number): DateBuilderChain<RemoveField<Remaining, "Months">>;
Days(value: number): DateBuilderChain<RemoveField<Remaining, "Days">>;
Hours(value: number): DateBuilderChain<RemoveField<Remaining, "Hours">>;
Minutes(value: number): DateBuilderChain<RemoveField<Remaining, "Minutes">>;
Seconds(value: number): DateBuilderChain<RemoveField<Remaining, "Seconds">>;
build(reference?: DateTarget): Date;
from(reference: DateTarget): Date;
past(reference: DateTarget): Date;
after(reference: DateTarget): Date;
until(reference: DateTarget): Date;
before(reference: DateTarget): Date;
ago(reference?: DateTarget): Date;
Now(): Date;
Tomorrow(): Date;
Yesterday(): Date;
DaysAgo(count: number): Date;
NextDays(count: number): Date;
YearsAgo(count: number): Date;
NextYears(count: number): Date;
MonthsAgo(count: number): Date;
NextMonths(count: number): Date;
HoursAgo(count: number): Date;
NextHours(count: number): Date;
MinutesAgo(count: number): Date;
NextMinutes(count: number): Date;
SecondsAgo(count: number): Date;
NextSeconds(count: number): Date;
private offsets;
}
export declare const Dates: typeof DateBuilder;
export declare const Now: () => Date;
export declare const Tomorrow: () => Date;
export declare const Yesterday: () => Date;
export declare const DaysAgo: (count: number) => Date;
export declare const NextDays: (count: number) => Date;
export declare const YearsAgo: (count: number) => Date;
export declare const NextYears: (count: number) => Date;
export declare const MonthsAgo: (count: number) => Date;
export declare const NextMonths: (count: number) => Date;
export declare const HoursAgo: (count: number) => Date;
export declare const NextHours: (count: number) => Date;
export declare const MinutesAgo: (count: number) => Date;
export declare const NextMinutes: (count: number) => Date;
export declare const SecondsAgo: (count: number) => Date;
export declare const NextSeconds: (count: number) => Date;
export {};