/**
* @since 2.0.0
*/
import * as Equal from "./Equal.js";
import type * as equivalence from "./Equivalence.js";
import type { Inspectable } from "./Inspectable.js";
import * as Option from "./Option.js";
import * as order from "./Order.js";
import type { Pipeable } from "./Pipeable.js";
declare const TypeId: unique symbol;
/**
* @since 2.0.0
* @category symbol
*/
export type TypeId = typeof TypeId;
/**
* @since 2.0.0
* @category models
*/
export interface Duration extends Equal.Equal, Pipeable, Inspectable {
readonly [TypeId]: TypeId;
readonly value: DurationValue;
}
/**
* @since 2.0.0
* @category models
*/
export type DurationValue = {
readonly _tag: "Millis";
readonly millis: number;
} | {
readonly _tag: "Nanos";
readonly nanos: bigint;
} | {
readonly _tag: "Infinity";
};
/**
* @since 2.0.0
* @category models
*/
export type Unit = "nano" | "nanos" | "micro" | "micros" | "milli" | "millis" | "second" | "seconds" | "minute" | "minutes" | "hour" | "hours" | "day" | "days" | "week" | "weeks";
/**
* @since 2.0.0
* @category models
*/
export type DurationInput = Duration | number | bigint | readonly [seconds: number, nanos: number] | `${number} ${Unit}`;
/**
* @since 2.0.0
*/
export declare const decode: (input: DurationInput) => Duration;
/**
* @since 2.5.0
*/
export declare const decodeUnknown: (u: unknown) => Option.Option<Duration>;
/**
* @since 2.0.0
* @category guards
*/
export declare const isDuration: (u: unknown) => u is Duration;
/**
* @since 2.0.0
* @category guards
*/
export declare const isFinite: (self: Duration) => boolean;
/**
* @since 3.5.0
* @category guards
*/
export declare const isZero: (self: Duration) => boolean;
/**
* @since 2.0.0
* @category constructors
*/
export declare const zero: Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const infinity: Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const nanos: (nanos: bigint) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const micros: (micros: bigint) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const millis: (millis: number) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const seconds: (seconds: number) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const minutes: (minutes: number) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const hours: (hours: number) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const days: (days: number) => Duration;
/**
* @since 2.0.0
* @category constructors
*/
export declare const weeks: (weeks: number) => Duration;
/**
* @since 2.0.0
* @category getters
*/
export declare const toMillis: (self: DurationInput) => number;
/**
* @since 2.0.0
* @category getters
*/
export declare const toSeconds: (self: DurationInput) => number;
/**
* @since 3.8.0
* @category getters
*/
export declare const toMinutes: (self: DurationInput) => number;
/**
* @since 3.8.0
* @category getters
*/
export declare const toHours: (self: DurationInput) => number;
/**
* @since 3.8.0
* @category getters
*/
export declare const toDays: (self: DurationInput) => number;
/**
* @since 3.8.0
* @category getters
*/
export declare const toWeeks: (self: DurationInput) => number;
/**
* Get the duration in nanoseconds as a bigint.
*
* If the duration is infinite, returns `Option.none()`
*
* @since 2.0.0
* @category getters
*/
export declare const toNanos: (self: DurationInput) => Option.Option<bigint>;
/**
* Get the duration in nanoseconds as a bigint.
*
* If the duration is infinite, it throws an error.
*
* @since 2.0.0
* @category getters
*/
export declare const unsafeToNanos: (self: DurationInput) => bigint;
/**
* @since 2.0.0
* @category getters
*/
export declare const toHrTime: (self: DurationInput) => [seconds: number, nanos: number];
/**
* @since 2.0.0
* @category pattern matching
*/
export declare const match: {
/**
* @since 2.0.0
* @category pattern matching
*/
<A, B>(options: {
readonly onMillis: (millis: number) => A;
readonly onNanos: (nanos: bigint) => B;
}): (self: DurationInput) => A | B;
/**
* @since 2.0.0
* @category pattern matching
*/
<A, B>(self: DurationInput, options: {
readonly onMillis: (millis: number) => A;
readonly onNanos: (nanos: bigint) => B;
}): A | B;
};
/**
* @since 2.0.0
* @category pattern matching
*/
export declare const matchWith: {
/**
* @since 2.0.0
* @category pattern matching
*/
<A, B>(that: DurationInput, options: {
readonly onMillis: (self: number, that: number) => A;
readonly onNanos: (self: bigint, that: bigint) => B;
}): (self: DurationInput) => A | B;
/**
* @since 2.0.0
* @category pattern matching
*/
<A, B>(self: DurationInput, that: DurationInput, options: {
readonly onMillis: (self: number, that: number) => A;
readonly onNanos: (self: bigint, that: bigint) => B;
}): A | B;
};
/**
* @category instances
* @since 2.0.0
*/
export declare const Order: order.Order<Duration>;
/**
* Checks if a `Duration` is between a `minimum` and `maximum` value.
*
* @category predicates
* @since 2.0.0
*/
export declare const between: {
/**
* Checks if a `Duration` is between a `minimum` and `maximum` value.
*
* @category predicates
* @since 2.0.0
*/
(options: {
minimum: DurationInput;
maximum: DurationInput;
}): (self: DurationInput) => boolean;
/**
* Checks if a `Duration` is between a `minimum` and `maximum` value.
*
* @category predicates
* @since 2.0.0
*/
(self: DurationInput, options: {
minimum: DurationInput;
maximum: DurationInput;
}): boolean;
};
/**
* @category instances
* @since 2.0.0
*/
export declare const Equivalence: equivalence.Equivalence<Duration>;
/**
* @since 2.0.0
*/
export declare const min: {
/**
* @since 2.0.0
*/
(that: DurationInput): (self: DurationInput) => Duration;
/**
* @since 2.0.0
*/
(self: DurationInput, that: DurationInput): Duration;
};
/**
* @since 2.0.0
* @category order
*/
export declare const max: {
/**
* @since 2.0.0
* @category order
*/
(that: DurationInput): (self: DurationInput) => Duration;
/**
* @since 2.0.0
* @category order
*/
(self: DurationInput, that: DurationInput): Duration;
};
/**
* @since 2.0.0
* @category order
*/
export declare const clamp: {
/**
* @since 2.0.0
* @category order
*/
(options: {
minimum: DurationInput;
maximum: DurationInput;
}): (self: DurationInput) => Duration;
/**
* @since 2.0.0
* @category order
*/
(self: DurationInput, options: {
minimum: DurationInput;
maximum: DurationInput;
}): Duration;
};
/**
* @since 2.4.19
* @category math
*/
export declare const divide: {
/**
* @since 2.4.19
* @category math
*/
(by: number): (self: DurationInput) => Option.Option<Duration>;
/**
* @since 2.4.19
* @category math
*/
(self: DurationInput, by: number): Option.Option<Duration>;
};
/**
* @since 2.4.19
* @category math
*/
export declare const unsafeDivide: {
/**
* @since 2.4.19
* @category math
*/
(by: number): (self: DurationInput) => Duration;
/**
* @since 2.4.19
* @category math
*/
(self: DurationInput, by: number): Duration;
};
/**
* @since 2.0.0
* @category math
*/
export declare const times: {
/**
* @since 2.0.0
* @category math
*/
(times: number): (self: DurationInput) => Duration;
/**
* @since 2.0.0
* @category math
*/
(self: DurationInput, times: number): Duration;
};
/**
* @since 2.0.0
* @category math
*/
export declare const subtract: {
/**
* @since 2.0.0
* @category math
*/
(that: DurationInput): (self: DurationInput) => Duration;
/**
* @since 2.0.0
* @category math
*/
(self: DurationInput, that: DurationInput): Duration;
};
/**
* @since 2.0.0
* @category math
*/
export declare const sum: {
/**
* @since 2.0.0
* @category math
*/
(that: DurationInput): (self: DurationInput) => Duration;
/**
* @since 2.0.0
* @category math
*/
(self: DurationInput, that: DurationInput): Duration;
};
/**
* @since 2.0.0
* @category predicates
*/
export declare const lessThan: {
/**
* @since 2.0.0
* @category predicates
*/
(that: DurationInput): (self: DurationInput) => boolean;
/**
* @since 2.0.0
* @category predicates
*/
(self: DurationInput, that: DurationInput): boolean;
};
/**
* @since 2.0.0
* @category predicates
*/
export declare const lessThanOrEqualTo: {
/**
* @since 2.0.0
* @category predicates
*/
(that: DurationInput): (self: DurationInput) => boolean;
/**
* @since 2.0.0
* @category predicates
*/
(self: DurationInput, that: DurationInput): boolean;
};
/**
* @since 2.0.0
* @category predicates
*/
export declare const greaterThan: {
/**
* @since 2.0.0
* @category predicates
*/
(that: DurationInput): (self: DurationInput) => boolean;
/**
* @since 2.0.0
* @category predicates
*/
(self: DurationInput, that: DurationInput): boolean;
};
/**
* @since 2.0.0
* @category predicates
*/
export declare const greaterThanOrEqualTo: {
/**
* @since 2.0.0
* @category predicates
*/
(that: DurationInput): (self: DurationInput) => boolean;
/**
* @since 2.0.0
* @category predicates
*/
(self: DurationInput, that: DurationInput): boolean;
};
/**
* @since 2.0.0
* @category predicates
*/
export declare const equals: {
/**
* @since 2.0.0
* @category predicates
*/
(that: DurationInput): (self: DurationInput) => boolean;
/**
* @since 2.0.0
* @category predicates
*/
(self: DurationInput, that: DurationInput): boolean;
};
/**
* Converts a `Duration` to its parts.
*
* @since 3.8.0
* @category conversions
*/
export declare const parts: (self: DurationInput) => {
days: number;
hours: number;
minutes: number;
seconds: number;
millis: number;
nanos: number;
};
/**
* Converts a `Duration` to a human readable string.
*
* @since 2.0.0
* @category conversions
* @example
* ```ts
* import { Duration } from "effect"
*
* Duration.format(Duration.millis(1000)) // "1s"
* Duration.format(Duration.millis(1001)) // "1s 1ms"
* ```
*/
export declare const format: (self: DurationInput) => string;
/**
* Formats a Duration into an ISO8601 duration string.
*
* Months are assumed to be 30 days and years are assumed to be 365 days.
*
* Milliseconds and nanoseconds are expressed as fractional seconds.
*
* @example
* ```ts
* import { Duration } from "effect"
*
* Duration.unsafeFormatIso(Duration.days(1)) // => "P1D"
* Duration.unsafeFormatIso(Duration.minutes(90)) // => "PT1H30M"
* Duration.unsafeFormatIso(Duration.millis(1500)) // => "PT1.5S"
* ```
*
* @throws `RangeError` If the duration is not finite.
*
* @since 3.13.0
* @category conversions
*/
export declare const unsafeFormatIso: (self: DurationInput) => string;
/**
* Formats a Duration into an ISO8601 duration string.
*
* Months are assumed to be 30 days and years are assumed to be 365 days.
*
* Returns `Option.none()` if the duration is infinite.
*
* @example
* ```ts
* import { Duration, Option } from "effect"
*
* Duration.formatIso(Duration.days(1)) // => Option.some("P1D")
* Duration.formatIso(Duration.minutes(90)) // => Option.some("PT1H30M")
* Duration.formatIso(Duration.millis(1500)) // => Option.some("PT1.5S")
* Duration.formatIso(Duration.infinity) // => Option.none()
* ```
*
* @since 3.13.0
* @category conversions
*/
export declare const formatIso: (self: DurationInput) => Option.Option<string>;
/**
* Parses an ISO8601 duration string into a `Duration`.
*
* Months are assumed to be 30 days and years are assumed to be 365 days.
*
* @example
* ```ts
* import { Duration, Option } from "effect"
*
* Duration.fromIso("P1D") // => Option.some(Duration.days(1))
* Duration.fromIso("PT1H") // => Option.some(Duration.hours(1))
* Duration.fromIso("PT1M") // => Option.some(Duration.minutes(1))
* Duration.fromIso("PT1.5S") // => Option.some(Duration.seconds(1.5))
* ```
*
* @since 3.13.0
* @category conversions
*/
export declare const fromIso: (iso: string) => Option.Option<Duration>;
export {};
//# sourceMappingURL=Duration.d.ts.map