registration

This commit is contained in:
User
2025-02-02 16:08:03 +03:00
parent 7f6495eb4d
commit 78afbaed71
6334 changed files with 196774 additions and 165754 deletions

View File

@@ -1,11 +1,31 @@
import type { NormalizedInterval } from "./types.js";
import type { ContextOptions, DateArg, NormalizedInterval } from "./types.js";
/**
* The {@link interval} function options.
*/
export interface IntervalOptions {
export interface IntervalOptions<ContextDate extends Date = Date>
extends ContextOptions<ContextDate> {
/** Asserts that the interval is positive (start is after the end). */
assertPositive?: boolean;
}
/**
* The {@link interval} function result type. It resolves the proper data type.
* It uses the first argument date object type, starting from the start argument,
* then the end interval date. If a context function is passed, it uses the context
* function return type.
*/
export type IntervalResult<
StartDate extends DateArg<Date>,
EndDate extends DateArg<Date>,
Options extends IntervalOptions | undefined = undefined,
> = NormalizedInterval<
Options extends IntervalOptions<infer DateType extends Date>
? DateType
: StartDate extends Date
? StartDate
: EndDate extends Date
? EndDate
: Date
>;
/**
* @name interval
* @category Interval Helpers
@@ -14,7 +34,9 @@ export interface IntervalOptions {
* @description
* Creates a normalized interval object and validates its values. If the interval is invalid, an exception is thrown.
*
* @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
* @typeParam StartDate - Start date type.
* @typeParam EndDate - End date type.
* @typeParam Options - Options type.
*
* @param start - The start of the interval.
* @param end - The end of the interval.
@@ -26,8 +48,12 @@ export interface IntervalOptions {
*
* @returns The normalized and validated interval object.
*/
export declare function interval<DateType extends Date>(
start: DateType | number | string,
end: DateType | number | string,
options?: IntervalOptions,
): NormalizedInterval<DateType>;
export declare function interval<
StartDate extends DateArg<Date>,
EndDate extends DateArg<Date>,
Options extends IntervalOptions | undefined = undefined,
>(
start: StartDate,
end: EndDate,
options?: Options,
): IntervalResult<StartDate, EndDate, Options>;