mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
3.9 KiB
172 lines
3.9 KiB
/**
|
|
* @since 2.0.0
|
|
*/
|
|
import type * as Check from "./Chunk.js"
|
|
import * as internal from "./internal/schedule/intervals.js"
|
|
import type * as Interval from "./ScheduleInterval.js"
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const IntervalsTypeId: unique symbol = internal.IntervalsTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type IntervalsTypeId = typeof IntervalsTypeId
|
|
|
|
/**
|
|
* An `Intervals` represents a list of several `Interval`s.
|
|
*
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Intervals {
|
|
readonly [IntervalsTypeId]: IntervalsTypeId
|
|
readonly intervals: Check.Chunk<Interval.Interval>
|
|
}
|
|
|
|
/**
|
|
* Creates a new `Intervals` from a `List` of `Interval`s.
|
|
*
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const make: (intervals: Check.Chunk<Interval.Interval>) => Intervals = internal.make
|
|
|
|
/**
|
|
* Constructs an empty list of `Interval`s.
|
|
*
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const empty: Intervals = internal.empty
|
|
|
|
/**
|
|
* Creates `Intervals` from the specified `Iterable<Interval>`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const fromIterable: (intervals: Iterable<Interval.Interval>) => Intervals = internal.fromIterable
|
|
|
|
/**
|
|
* Computes the union of this `Intervals` and that `Intervals`
|
|
*
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
export const union: {
|
|
/**
|
|
* Computes the union of this `Intervals` and that `Intervals`
|
|
*
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
(that: Intervals): (self: Intervals) => Intervals
|
|
/**
|
|
* Computes the union of this `Intervals` and that `Intervals`
|
|
*
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
(self: Intervals, that: Intervals): Intervals
|
|
} = internal.union
|
|
|
|
/**
|
|
* Produces the intersection of this `Intervals` and that `Intervals`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
export const intersect: {
|
|
/**
|
|
* Produces the intersection of this `Intervals` and that `Intervals`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
(that: Intervals): (self: Intervals) => Intervals
|
|
/**
|
|
* Produces the intersection of this `Intervals` and that `Intervals`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category utils
|
|
*/
|
|
(self: Intervals, that: Intervals): Intervals
|
|
} = internal.intersect
|
|
|
|
/**
|
|
* The start of the earliest interval in the specified `Intervals`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category getters
|
|
*/
|
|
export const start: (self: Intervals) => number = internal.start
|
|
|
|
/**
|
|
* The end of the latest interval in the specified `Intervals`.
|
|
*
|
|
* @since 2.0.0
|
|
* @category getters
|
|
*/
|
|
export const end: (self: Intervals) => number = internal.end
|
|
|
|
/**
|
|
* Returns `true` if the start of this `Intervals` is before the start of that
|
|
* `Intervals`, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category ordering
|
|
*/
|
|
export const lessThan: {
|
|
/**
|
|
* Returns `true` if the start of this `Intervals` is before the start of that
|
|
* `Intervals`, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category ordering
|
|
*/
|
|
(that: Intervals): (self: Intervals) => boolean
|
|
/**
|
|
* Returns `true` if the start of this `Intervals` is before the start of that
|
|
* `Intervals`, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category ordering
|
|
*/
|
|
(self: Intervals, that: Intervals): boolean
|
|
} = internal.lessThan
|
|
|
|
/**
|
|
* Returns `true` if this `Intervals` is non-empty, `false` otherwise.
|
|
*
|
|
* @since 2.0.0
|
|
* @category getters
|
|
*/
|
|
export const isNonEmpty: (self: Intervals) => boolean = internal.isNonEmpty
|
|
|
|
/**
|
|
* Returns the maximum of the two `Intervals` (i.e. which has the latest start).
|
|
*
|
|
* @since 2.0.0
|
|
* @category ordering
|
|
*/
|
|
export const max: {
|
|
/**
|
|
* Returns the maximum of the two `Intervals` (i.e. which has the latest start).
|
|
*
|
|
* @since 2.0.0
|
|
* @category ordering
|
|
*/
|
|
(that: Intervals): (self: Intervals) => Intervals
|
|
/**
|
|
* Returns the maximum of the two `Intervals` (i.e. which has the latest start).
|
|
*
|
|
* @since 2.0.0
|
|
* @category ordering
|
|
*/
|
|
(self: Intervals, that: Intervals): Intervals
|
|
} = internal.max
|
|
|