| import type * as DateTime from "./DateTime.ts"; | |
| import * as Equal from "./Equal.ts"; | |
| import * as Equ from "./Equivalence.ts"; | |
| import { type Inspectable } from "./Inspectable.ts"; | |
| import * as Option from "./Option.ts"; | |
| import { type Pipeable } from "./Pipeable.ts"; | |
| import * as Result from "./Result.ts"; | |
| declare const TypeId = "~effect/time/Cron"; | |
| /** | |
| * Represents a cron schedule with time constraints and timezone information. | |
| * | |
| * **When to use** | |
| * | |
| * Use to represent a recurring calendar schedule that can be matched against | |
| * dates or used to compute scheduled occurrences. | |
| * | |
| * **Details** | |
| * | |
| * A `Cron` instance defines when a scheduled task should run, supporting | |
| * seconds, minutes, hours, days, months, and weekday constraints. It also | |
| * supports timezone-aware scheduling. | |
| * | |
| * **Example** (Creating a cron schedule) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * // Create a cron that runs at 9 AM on weekdays | |
| * const weekdayMorning = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [ | |
| * 1, | |
| * 2, | |
| * 3, | |
| * 4, | |
| * 5, | |
| * 6, | |
| * 7, | |
| * 8, | |
| * 9, | |
| * 10, | |
| * 11, | |
| * 12, | |
| * 13, | |
| * 14, | |
| * 15, | |
| * 16, | |
| * 17, | |
| * 18, | |
| * 19, | |
| * 20, | |
| * 21, | |
| * 22, | |
| * 23, | |
| * 24, | |
| * 25, | |
| * 26, | |
| * 27, | |
| * 28, | |
| * 29, | |
| * 30, | |
| * 31 | |
| * ], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] // Monday to Friday | |
| * }) | |
| * | |
| * // Check if a date matches the schedule | |
| * const matches = Cron.match(weekdayMorning, new Date("2023-06-05T09:00:00")) | |
| * console.log(matches) // true if it's 9 AM on a weekday | |
| * ``` | |
| * | |
| * @see {@link make} for creating a schedule from explicit field constraints | |
| * @see {@link parse} for creating a schedule from a cron expression string | |
| * @see {@link match} for testing a date against a schedule | |
| * @see {@link next} for finding the next scheduled occurrence | |
| * | |
| * @category models | |
| * @since 2.0.0 | |
| */ | |
| export interface Cron extends Pipeable, Equal.Equal, Inspectable { | |
| readonly [TypeId]: typeof TypeId; | |
| readonly tz: Option.Option<DateTime.TimeZone>; | |
| readonly seconds: ReadonlySet<number>; | |
| readonly minutes: ReadonlySet<number>; | |
| readonly hours: ReadonlySet<number>; | |
| readonly days: ReadonlySet<number>; | |
| readonly months: ReadonlySet<number>; | |
| readonly weekdays: ReadonlySet<number>; | |
| } | |
| /** | |
| * Checks whether a given value is a Cron instance. | |
| * | |
| * **When to use** | |
| * | |
| * Use to narrow an unknown value before treating it as a `Cron` schedule. | |
| * | |
| * **Details** | |
| * | |
| * This function is a type guard that determines whether the provided | |
| * value is a valid Cron instance by checking for the presence of the | |
| * Cron type identifier. | |
| * | |
| * **Example** (Checking cron values) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * const cron = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * console.log(Cron.isCron(cron)) // true | |
| * console.log(Cron.isCron({})) // false | |
| * console.log(Cron.isCron("not a cron")) // false | |
| * ``` | |
| * | |
| * @see {@link make} for constructing a `Cron` value directly | |
| * @see {@link parse} for constructing a `Cron` value from a string | |
| * | |
| * @category guards | |
| * @since 2.0.0 | |
| */ | |
| export declare const isCron: (u: unknown) => u is Cron; | |
| /** | |
| * Creates a Cron instance from time constraints. | |
| * | |
| * **When to use** | |
| * | |
| * Use to build a cron schedule from explicit sets of allowed time-field values. | |
| * | |
| * **Details** | |
| * | |
| * Constructs a cron schedule by specifying which seconds, minutes, hours, | |
| * days, months, and weekdays the schedule should match. Empty arrays mean | |
| * "match all" for that time unit. | |
| * | |
| * **Example** (Creating schedules from constraints) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * // Every day at midnight | |
| * const midnight = Cron.make({ | |
| * minutes: [0], | |
| * hours: [0], | |
| * days: [ | |
| * 1, | |
| * 2, | |
| * 3, | |
| * 4, | |
| * 5, | |
| * 6, | |
| * 7, | |
| * 8, | |
| * 9, | |
| * 10, | |
| * 11, | |
| * 12, | |
| * 13, | |
| * 14, | |
| * 15, | |
| * 16, | |
| * 17, | |
| * 18, | |
| * 19, | |
| * 20, | |
| * 21, | |
| * 22, | |
| * 23, | |
| * 24, | |
| * 25, | |
| * 26, | |
| * 27, | |
| * 28, | |
| * 29, | |
| * 30, | |
| * 31 | |
| * ], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [0, 1, 2, 3, 4, 5, 6] | |
| * }) | |
| * | |
| * // Every 15 minutes during business hours on weekdays | |
| * const businessHours = Cron.make({ | |
| * minutes: [0, 15, 30, 45], | |
| * hours: [9, 10, 11, 12, 13, 14, 15, 16, 17], | |
| * days: [ | |
| * 1, | |
| * 2, | |
| * 3, | |
| * 4, | |
| * 5, | |
| * 6, | |
| * 7, | |
| * 8, | |
| * 9, | |
| * 10, | |
| * 11, | |
| * 12, | |
| * 13, | |
| * 14, | |
| * 15, | |
| * 16, | |
| * 17, | |
| * 18, | |
| * 19, | |
| * 20, | |
| * 21, | |
| * 22, | |
| * 23, | |
| * 24, | |
| * 25, | |
| * 26, | |
| * 27, | |
| * 28, | |
| * 29, | |
| * 30, | |
| * 31 | |
| * ], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] // Monday to Friday | |
| * }) | |
| * ``` | |
| * | |
| * @see {@link parse} for building a schedule from a cron expression string | |
| * | |
| * @category constructors | |
| * @since 2.0.0 | |
| */ | |
| export declare const make: (values: { | |
| readonly seconds?: Iterable<number> | undefined; | |
| readonly minutes: Iterable<number>; | |
| readonly hours: Iterable<number>; | |
| readonly days: Iterable<number>; | |
| readonly months: Iterable<number>; | |
| readonly weekdays: Iterable<number>; | |
| readonly tz?: DateTime.TimeZone | undefined; | |
| }) => Cron; | |
| declare const CronParseErrorTypeId = "~effect/time/Cron/CronParseError"; | |
| declare const CronParseError_base: new <A extends Record<string, any> = {}>(args: import("./Types.ts").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("./Cause.ts").YieldableError & { | |
| readonly _tag: "CronParseError"; | |
| } & Readonly<A>; | |
| /** | |
| * Represents an error that occurs when parsing a cron expression fails. | |
| * | |
| * **When to use** | |
| * | |
| * Use to handle invalid cron expression failures returned by `parse`. | |
| * | |
| * **Details** | |
| * | |
| * This error provides information about what went wrong during parsing, | |
| * including the error message and optionally the input that caused the error. | |
| * | |
| * **Example** (Handling cron parse failures) | |
| * | |
| * ```ts | |
| * import { Cron, Result } from "effect" | |
| * | |
| * const result = Cron.parse("invalid expression") | |
| * if (Result.isFailure(result)) { | |
| * const error: Cron.CronParseError = result.failure | |
| * console.log(error.message) // "Invalid number of segments in cron expression" | |
| * console.log(error.input) // "invalid expression" | |
| * } | |
| * ``` | |
| * | |
| * @see {@link parse} for the parser that returns this error in `Result.fail` | |
| * @see {@link isCronParseError} for narrowing unknown values to this error type | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export declare class CronParseError extends CronParseError_base<{ | |
| readonly message: string; | |
| readonly input?: string; | |
| }> { | |
| readonly [CronParseErrorTypeId]: typeof CronParseErrorTypeId; | |
| } | |
| /** | |
| * Checks whether a given value is a CronParseError instance. | |
| * | |
| * **When to use** | |
| * | |
| * Use to narrow an unknown failure before handling it as a cron parse error. | |
| * | |
| * **Details** | |
| * | |
| * This function is a type guard that determines whether the provided | |
| * value is a CronParseError by checking for the presence of the | |
| * CronParseError type identifier. | |
| * | |
| * **Example** (Checking cron parse errors) | |
| * | |
| * ```ts | |
| * import { Cron, Result } from "effect" | |
| * | |
| * const result = Cron.parse("invalid cron expression") | |
| * if (Result.isFailure(result)) { | |
| * const error = result.failure | |
| * console.log(Cron.isCronParseError(error)) // true | |
| * } | |
| * | |
| * console.log(Cron.isCronParseError(new Error("regular error"))) // false | |
| * console.log(Cron.isCronParseError("not an error")) // false | |
| * ``` | |
| * | |
| * @see {@link CronParseError} for the parse error type | |
| * @see {@link parse} for producing `CronParseError` values on invalid input | |
| * | |
| * @category guards | |
| * @since 4.0.0 | |
| */ | |
| export declare const isCronParseError: (u: unknown) => u is CronParseError; | |
| /** | |
| * Parses a cron expression safely into a `Cron` instance, returning a `Result` | |
| * instead of throwing. | |
| * | |
| * **When to use** | |
| * | |
| * Use to parse cron expressions from configuration or user input while handling | |
| * invalid input as a `Result`. | |
| * | |
| * **Details** | |
| * | |
| * The expression may contain five fields, where seconds default to `0`, or six | |
| * fields including seconds. Fields support `*`, comma-separated values, ranges, | |
| * steps, and month or weekday aliases. Invalid expressions fail with | |
| * `CronParseError`. | |
| * | |
| * **Example** (Parsing cron expressions) | |
| * | |
| * ```ts | |
| * import { Cron, Result } from "effect" | |
| * import * as assert from "node:assert" | |
| * | |
| * // At 04:00 on every day-of-month from 8 through 14. | |
| * assert.deepStrictEqual( | |
| * Cron.parse("0 0 4 8-14 * *"), | |
| * Result.succeed(Cron.make({ | |
| * seconds: [0], | |
| * minutes: [0], | |
| * hours: [4], | |
| * days: [8, 9, 10, 11, 12, 13, 14], | |
| * months: [], | |
| * weekdays: [] | |
| * })) | |
| * ) | |
| * ``` | |
| * | |
| * @see {@link parseUnsafe} for throwing on invalid cron expressions | |
| * @see {@link make} for constructing a schedule from explicit field constraints | |
| * | |
| * @category constructors | |
| * @since 2.0.0 | |
| */ | |
| export declare const parse: (cron: string, tz?: DateTime.TimeZone | string) => Result.Result<Cron, CronParseError>; | |
| /** | |
| * Parses a cron expression into a `Cron` instance, throwing on failure. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you expect the input to be valid and want to avoid handling the | |
| * `Result` type. | |
| * | |
| * **Example** (Parsing cron expressions unsafely) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * // At 04:00 on every day-of-month from 8 through 14 | |
| * const cron = Cron.parseUnsafe("0 0 4 8-14 * *") | |
| * | |
| * // With timezone | |
| * const cronWithTz = Cron.parseUnsafe("0 0 9 * * *", "America/New_York") | |
| * | |
| * // This would throw an error | |
| * // const invalid = Cron.parseUnsafe("invalid expression") | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const parseUnsafe: (cron: string, tz?: DateTime.TimeZone | string) => Cron; | |
| /** | |
| * Returns `true` when a date/time matches a `Cron` schedule. | |
| * | |
| * **When to use** | |
| * | |
| * Use to test whether a specific date/time satisfies a cron schedule. | |
| * | |
| * **Details** | |
| * | |
| * Seconds, minutes, hours, months, and the optional timezone are checked | |
| * directly. For day constraints, an empty `days` or `weekdays` set means that | |
| * field matches every value; when both sets are non-empty, a date matches if | |
| * either the day-of-month or weekday matches. | |
| * | |
| * **Example** (Matching dates against a schedule) | |
| * | |
| * ```ts | |
| * import { Cron, Result } from "effect" | |
| * | |
| * const cron = Result.getOrThrow(Cron.parse("0 0 4 8-14 * *")) | |
| * | |
| * // Check if specific dates match | |
| * const matches1 = Cron.match(cron, new Date("2021-01-08T04:00:00Z")) | |
| * console.log(matches1) // true - 4 AM on the 8th | |
| * | |
| * const matches2 = Cron.match(cron, new Date("2021-01-08T05:00:00Z")) | |
| * console.log(matches2) // false - wrong hour | |
| * | |
| * const matches3 = Cron.match(cron, new Date("2021-01-07T04:00:00Z")) | |
| * console.log(matches3) // false - wrong day | |
| * ``` | |
| * | |
| * @see {@link next} for finding the next matching date/time | |
| * @see {@link prev} for finding the previous matching date/time | |
| * | |
| * @category predicates | |
| * @since 2.0.0 | |
| */ | |
| export declare const match: (cron: Cron, date: DateTime.DateTime.Input) => boolean; | |
| /** | |
| * Returns the next scheduled date/time for the given Cron instance. | |
| * | |
| * **When to use** | |
| * | |
| * Use to find the next occurrence of a cron schedule after a specific date/time | |
| * or after the current time. | |
| * | |
| * **Details** | |
| * | |
| * Searches for the next date and time when the cron schedule should trigger, | |
| * starting after the specified date/time or after the current time when no | |
| * date is provided. | |
| * | |
| * **Example** (Finding the next occurrence) | |
| * | |
| * ```ts | |
| * import { Cron, Result } from "effect" | |
| * | |
| * const cron = Result.getOrThrow(Cron.parse("0 0 4 8-14 * *")) | |
| * | |
| * // Get next run after a specific date | |
| * const after = new Date("2021-01-01T00:00:00Z") | |
| * const nextRun = Cron.next(cron, after) | |
| * console.log(nextRun) // 2021-01-08T04:00:00.000Z | |
| * | |
| * // Get next run from current time | |
| * const nextFromNow = Cron.next(cron) | |
| * console.log(nextFromNow) // Next occurrence from now | |
| * ``` | |
| * | |
| * @see {@link prev} for finding the previous scheduled occurrence | |
| * @see {@link sequence} for iterating future scheduled occurrences | |
| * | |
| * @category getters | |
| * @since 2.0.0 | |
| */ | |
| export declare const next: (cron: Cron, now?: DateTime.DateTime.Input) => Date; | |
| /** | |
| * Returns the previous scheduled date/time for the given Cron instance. | |
| * | |
| * **When to use** | |
| * | |
| * Use to find the most recent occurrence of a cron schedule before a specific | |
| * date/time or before the current time. | |
| * | |
| * **Details** | |
| * | |
| * When no date/time is provided, the search starts from the current time. | |
| * | |
| * **Gotchas** | |
| * | |
| * The search is strict: if the supplied date/time already matches the schedule, | |
| * the result is the earlier occurrence. | |
| * | |
| * @see {@link next} for finding the next scheduled occurrence | |
| * | |
| * @category getters | |
| * @since 3.20.0 | |
| */ | |
| export declare const prev: (cron: Cron, now?: DateTime.DateTime.Input) => Date; | |
| /** | |
| * Returns an infinite iterator that yields dates matching the Cron schedule. | |
| * | |
| * **When to use** | |
| * | |
| * Use to lazily iterate future occurrences of a cron schedule. | |
| * | |
| * **Details** | |
| * | |
| * The iterator generates an infinite sequence of dates when the cron schedule | |
| * should trigger, starting after the specified date/time or after the current | |
| * time when no date is provided. | |
| * | |
| * **Example** (Iterating scheduled occurrences) | |
| * | |
| * ```ts | |
| * import { Cron, Result } from "effect" | |
| * | |
| * const cron = Result.getOrThrow(Cron.parse("0 0 9 * * 1-5")) // 9 AM weekdays | |
| * | |
| * // Get first 5 occurrences | |
| * const iterator = Cron.sequence(cron, new Date("2023-01-01")) | |
| * const next5 = Array.from({ length: 5 }, () => iterator.next().value) | |
| * | |
| * console.log(next5) | |
| * // [Mon Jan 02 2023 09:00:00, Tue Jan 03 2023 09:00:00, ...] | |
| * ``` | |
| * | |
| * @see {@link next} for computing one next occurrence | |
| * | |
| * @category sequencing | |
| * @since 2.0.0 | |
| */ | |
| export declare const sequence: (cron: Cron, now?: DateTime.DateTime.Input) => IterableIterator<Date>; | |
| /** | |
| * Equivalence instance for comparing the field restrictions of two `Cron` | |
| * schedules. | |
| * | |
| * **When to use** | |
| * | |
| * Use to compare cron schedules through APIs that accept an equivalence | |
| * relation. | |
| * | |
| * **Details** | |
| * | |
| * This comparison checks seconds, minutes, hours, days, months, and weekdays. | |
| * It does not compare the optional timezone. | |
| * | |
| * **Example** (Comparing schedules with equivalence) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * const cron1 = Cron.make({ | |
| * minutes: [0, 30], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * const cron2 = Cron.make({ | |
| * minutes: [30, 0], // Different order | |
| * hours: [9], | |
| * days: [15, 1], // Different order | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * console.log(Cron.Equivalence(cron1, cron2)) // true | |
| * ``` | |
| * | |
| * @see {@link equals} for directly comparing two `Cron` values | |
| * | |
| * @category instances | |
| * @since 2.0.0 | |
| */ | |
| export declare const Equivalence: Equ.Equivalence<Cron>; | |
| /** | |
| * Checks whether two `Cron` instances have the same field restrictions. | |
| * | |
| * **When to use** | |
| * | |
| * Use to directly compare whether two cron schedules have the same field | |
| * restrictions. | |
| * | |
| * **Details** | |
| * | |
| * The comparison checks seconds, minutes, hours, days, months, and weekdays. | |
| * It does not compare the optional timezone. | |
| * | |
| * **Example** (Checking schedule equality) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * const cron1 = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * const cron2 = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * console.log(Cron.equals(cron1, cron2)) // true | |
| * console.log(Cron.equals(cron1)(cron2)) // true (curried form) | |
| * ``` | |
| * | |
| * @see {@link Equivalence} for the reusable equivalence instance | |
| * | |
| * @category predicates | |
| * @since 2.0.0 | |
| */ | |
| export declare const equals: { | |
| /** | |
| * Checks whether two `Cron` instances have the same field restrictions. | |
| * | |
| * **When to use** | |
| * | |
| * Use to directly compare whether two cron schedules have the same field | |
| * restrictions. | |
| * | |
| * **Details** | |
| * | |
| * The comparison checks seconds, minutes, hours, days, months, and weekdays. | |
| * It does not compare the optional timezone. | |
| * | |
| * **Example** (Checking schedule equality) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * const cron1 = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * const cron2 = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * console.log(Cron.equals(cron1, cron2)) // true | |
| * console.log(Cron.equals(cron1)(cron2)) // true (curried form) | |
| * ``` | |
| * | |
| * @see {@link Equivalence} for the reusable equivalence instance | |
| * | |
| * @category predicates | |
| * @since 2.0.0 | |
| */ | |
| (that: Cron): (self: Cron) => boolean; | |
| /** | |
| * Checks whether two `Cron` instances have the same field restrictions. | |
| * | |
| * **When to use** | |
| * | |
| * Use to directly compare whether two cron schedules have the same field | |
| * restrictions. | |
| * | |
| * **Details** | |
| * | |
| * The comparison checks seconds, minutes, hours, days, months, and weekdays. | |
| * It does not compare the optional timezone. | |
| * | |
| * **Example** (Checking schedule equality) | |
| * | |
| * ```ts | |
| * import { Cron } from "effect" | |
| * | |
| * const cron1 = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * const cron2 = Cron.make({ | |
| * minutes: [0], | |
| * hours: [9], | |
| * days: [1, 15], | |
| * months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], | |
| * weekdays: [1, 2, 3, 4, 5] | |
| * }) | |
| * | |
| * console.log(Cron.equals(cron1, cron2)) // true | |
| * console.log(Cron.equals(cron1)(cron2)) // true (curried form) | |
| * ``` | |
| * | |
| * @see {@link Equivalence} for the reusable equivalence instance | |
| * | |
| * @category predicates | |
| * @since 2.0.0 | |
| */ | |
| (self: Cron, that: Cron): boolean; | |
| }; | |
| export {}; | |
| //# sourceMappingURL=Cron.d.ts.map |
Xet Storage Details
- Size:
- 18.9 kB
- Xet hash:
- 24dddb54ca316b6d4f8a3359f1966e9920c9a4d7c63d56235726f88067453abf
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.