UNPKG

fp-ts-std

Version:

The missing pseudo-standard library for fp-ts.

236 lines 6.21 kB
/** * Various functions to aid in working with JavaScript's `Date` object. * * @since 0.1.0 */ import * as IO from "fp-ts/IO"; import type { Predicate } from "fp-ts/Predicate"; import type { Refinement } from "fp-ts/Refinement"; import { type Newtype } from "newtype-ts"; type IO<A> = IO.IO<A>; import type { Option } from "fp-ts/Option"; /** * Parse a date, leaving open the risk of a failure to parse resulting in an * invalid `Date` being returned. * * @example * import { unsafeParseDate } from 'fp-ts-std/Date' * * const valid = 0 * const invalid = 'this will not parse' * * assert.strictEqual(unsafeParseDate(valid).getTime(), 0) * assert.strictEqual(unsafeParseDate(invalid).getTime(), NaN) * * @category 3 Functions * @since 0.1.0 */ export declare const unsafeParseDate: (x: string | number) => Date; type MillisecondsSymbol = { readonly Milliseconds: unique symbol; }; /** * Newtype representing milliseconds. * * @example * import { Milliseconds, mkMilliseconds } from 'fp-ts-std/Date' * * const second: Milliseconds = mkMilliseconds(1000) * * @category 0 Types * @since 0.7.0 */ export type Milliseconds = Newtype<MillisecondsSymbol, number>; /** * `Ord` instance for `Milliseconds`, enabling comparison between different * instances of the type. * * @example * import { ordMilliseconds, mkMilliseconds } from 'fp-ts-std/Date' * import { LT } from 'fp-ts-std/Ordering' * * assert.strictEqual(ordMilliseconds.compare(mkMilliseconds(0), mkMilliseconds(1)), LT) * * @category 1 Typeclass Instances * @since 0.7.0 */ export declare const ordMilliseconds: import("fp-ts/lib/Ord").Ord<Milliseconds>; /** * `Field` instance for `Milliseconds`, enabling arithmetic over the type. * * @example * import { fieldMilliseconds, mkMilliseconds } from 'fp-ts-std/Date' * * assert.strictEqual( * fieldMilliseconds.add(mkMilliseconds(2), mkMilliseconds(3)), * mkMilliseconds(5), * ) * * @category 1 Typeclass Instances * @since 0.7.0 */ export declare const fieldMilliseconds: import("fp-ts/lib/Field").Field<Milliseconds>; /** * `Iso` instance for `Milliseconds`, enabling the use of lenses over the * newtype pertaining to its isomorphic nature. * * @example * import { isoMilliseconds, mkMilliseconds } from 'fp-ts-std/Date' * import { add } from 'fp-ts-std/Number' * * assert.strictEqual( * isoMilliseconds.modify(add(3))(mkMilliseconds(2)), * mkMilliseconds(5), * ) * * @category 1 Typeclass Instances * @since 0.7.0 */ export declare const isoMilliseconds: import("monocle-ts").Iso<Milliseconds, number>; /** * Lift a number to the `Milliseconds` newtype. * * @example * import { mkMilliseconds } from 'fp-ts-std/Date' * * const second = mkMilliseconds(1000) * * @category 3 Functions * @since 0.7.0 */ export declare const mkMilliseconds: (n: number) => Milliseconds; /** * Unwrap a `Milliseconds` newtype back to its underlying number representation. * * @example * import { flow } from 'fp-ts/function' * import { Endomorphism } from 'fp-ts/Endomorphism' * import { mkMilliseconds, unMilliseconds } from 'fp-ts-std/Date' * * const redundant: Endomorphism<number> = flow(mkMilliseconds, unMilliseconds) * * @category 3 Functions * @since 0.7.0 */ export declare const unMilliseconds: (ms: Milliseconds) => number; /** * Get a `Date` from `Milliseconds`. * * @example * import { fromMilliseconds, mkMilliseconds } from 'fp-ts-std/Date' * * assert.deepStrictEqual( * fromMilliseconds(mkMilliseconds(123)), * new Date(123), * ) * * @category 3 Functions * @since 0.7.0 */ export declare const fromMilliseconds: (x: Milliseconds) => Date; /** * Get the time in milliseconds from a `Date`. * * @example * import { getTime } from 'fp-ts-std/Date' * * const d = new Date() * * assert.strictEqual(getTime(d), d.getTime()) * * @category 3 Functions * @since 0.1.0 */ export declare const getTime: (x: Date) => Milliseconds; /** * Returns a date as a string value in ISO format. * * @example * import { toISOString } from 'fp-ts-std/Date' * * const d = new Date() * * assert.strictEqual(toISOString(d), d.toISOString()) * * @category 3 Functions * @since 0.1.0 */ export declare const toISOString: (x: Date) => string; /** * Returns a date converted to a string using Universal Coordinated Time (UTC). * * @example * import { toUTCString } from 'fp-ts-std/Date' * * const d = new Date() * * assert.strictEqual(toUTCString(d), d.toUTCString()) * * @category 3 Functions * @since 0.14.0 */ export declare const toUTCString: (x: Date) => string; /** * Check if a foreign value is a `Date`. * * @example * import { isDate } from 'fp-ts-std/Date' * * assert.strictEqual(isDate(new Date()), true) * assert.strictEqual(isDate({ not: { a: 'date' } }), false) * * @category 3 Functions * @since 0.1.0 */ export declare const isDate: Refinement<unknown, Date>; /** * Check if a `Date` is actually valid. (We all love JavaScript, don't we?) * * @example * import { isValid } from 'fp-ts-std/Date' * * const valid = new Date() * const invalid = new Date('this will not parse') * * assert.strictEqual(isValid(valid), true) * assert.strictEqual(isValid(invalid), false) * * @category 3 Functions * @since 0.1.0 */ export declare const isValid: Predicate<Date>; /** * Safely parse a date. * * @example * import { parseDate } from 'fp-ts-std/Date' * import * as O from 'fp-ts/Option' * * const valid = 0 * const invalid = 'this will not parse' * * assert.deepStrictEqual(parseDate(valid), O.some(new Date(valid))) * assert.deepStrictEqual(parseDate(invalid), O.none) * * @category 3 Functions * @since 0.1.0 */ export declare const parseDate: (ts: string | number) => Option<Date>; /** * Get the time since the Unix Epoch in `Milliseconds` from a `Date`. * * @example * import { now, mkMilliseconds } from 'fp-ts-std/Date' * * const x1970 = mkMilliseconds(0) * const x2065 = mkMilliseconds(3000000000000) * * assert.strictEqual(now() > x1970, true) * assert.strictEqual(now() < x2065, true) * * @category 3 Functions * @since 0.7.0 */ export declare const now: IO<Milliseconds>; export {}; //# sourceMappingURL=Date.d.ts.map