UNPKG

timed-silky

Version:

Timed-Silky 是基于一款基于 TypeScript 的定时任务调度器。得益于 TypeScript,Timed-Silky 可以用符合特定句式的自然语言描述任务的调度规则,提供丝滑的链式调用接口。

134 lines (133 loc) 5.16 kB
import { DayOfWeekNum, TimePoint } from "./time-type"; declare abstract class Head { nextRule?: Tail; /** * 设置 Head 对象连接的 Tail * @param rule 可以连接到 Head 对象后面的 Tail 对象 */ setNextRule(rule: Tail): void; /** * 生成下一个时间,用 Date 对象表示,保证返回的 Date 对象表示的时间点在当前时间之后,在 leftBoudar 之后 * @param leftBoundary 上一个时间点,或时间左界,如果类型为 number,则为毫秒表示的时间戳 */ abstract generateNextTime(leftBoundary: number | Date): Date; } interface Tail { /** * 调整 Date 对象表示的时间,使其落在合适的范围内 * @param dt 被调整的 Date 对象 * @param keepPoint 是否保持时间点(时分秒)不变 */ adjustTime(dt: Date, keepPoint: boolean): Date; } /** * 固定时间点规则,例如每天的 21:30,周六的 22:00 */ declare class TimePointRule extends Head { private points; constructor(points: TimePoint | TimePoint[]); addPoint(point: TimePoint): this; addPoints(points: TimePoint[]): this; /** * 根据上一个时间点计算出下一个合法的时间点 * @param leftBoundary 上一个时间点 * @returns 下一个合法的时间点,下一个时间点和上一个时间点可能时分秒相同但个属于不同的天,也可能属于同一天,但是时分秒不同 */ generateNextTime(leftBoundary: number | Date): Date; } /** * 天级时间范围规则,例如周一至周五,周六,周天 */ declare class DayRangeRule implements Tail { /** * 包含 7 个 boolean 值的数组,包含某天则对应的列表元素为 true,不包括则为 false */ private days; /** * @param _default 一周7天,每天是否默认,true 表示包括,false 表示不包括 */ constructor(_default: boolean); addDays(...days: DayOfWeekNum[]): void; excludeDays(...days: DayOfWeekNum[]): void; /** * 如果需要,调整时间对象 dt,使其落在本规则规定的天内 * @param dt 需要被调整的时间 * @param keepPoint 是否保持之前的时分秒,如果 true,则调整过程不会改变时分秒,只会改变天 * @returns 被调整后的时间,可能等于被调整的时间 */ adjustTime(dt: Date, keepPoint?: boolean): Date; } /** * 小时级时间范围规则,分为所在范围,和排除范围 */ declare class HourRangeRule implements Tail { private includeOrExclude; private rangeArrays; constructor(includeOrExclude: boolean); /** * 添加时间段 * @param range 时间段,由两个 TimePoint 组成 * @param daysOfWeek 时间段所在天 */ addRange(range: [TimePoint, TimePoint], ...daysOfWeek: DayOfWeekNum[]): void; /** * 将时间段添加到同属于某天(DayOfWeekNum)的列表 * @param range 时间段,由两个 TimePoint 组成 * @param day 时间段所在的天 */ private _addRangeToOneDay; /** * 调整时间 dt,使其落在本规则规定的时间范围内 * @param dt 被调整的时间 * @returns 调整后的时间 */ adjustTime(dt: Date): Date; } /** * 频率规则,例如没多少天,多少小时,多少分钟,多少秒 */ declare class Frequency extends Head { count: number; unitDuration: number; /** * * @param count 多少个时间单位 * @param unitDuration 每个时间单位的时长(秒数) */ constructor(count: number, unitDuration: number); /** * 根据上一个时间、本规则规定频率以及当前时间产生下一个时间,但是保证产生的时间为未来时间 * @param lastTime 上一个时间 * @returns 根据上一个时间和本频率规则计算出的下一个时间 */ generateNextTime(lastTime: number | Date): Date; } declare class SecondFrequency extends Frequency { constructor(count: number); } declare class MinuteFrequency extends Frequency { constructor(count?: number); } declare class HourFrequency extends Frequency { constructor(count?: number); } declare class DayFrequency extends Frequency { constructor(count?: number); } /** * 规则链 * 内部至少包含一个 HeadRule 对象,该 HeadRule 可选的连接一个 TailRule 对象。 * 未来随着规则越来越复杂,一个规则链内部可以包含三个及以上规则对象。 */ declare class RuleChain { private headRule; constructor(headRule: Head, tailRule?: Tail); setTailRule(rule: Tail): void; /** * * @param previousTime 上个时间,毫秒表示的时间戳 * @returns 下一个合法时间点,毫秒表示的时间戳 */ generateNextTime(previousTime: number): number; } export { Head, Tail, RuleChain, TimePointRule, Frequency, SecondFrequency, MinuteFrequency, HourFrequency, DayFrequency, HourRangeRule, DayRangeRule, };