-
Notifications
You must be signed in to change notification settings - Fork 9
/
repeat-every.ts
37 lines (34 loc) · 1.22 KB
/
repeat-every.ts
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
32
33
34
35
36
37
import { Job } from '.';
export interface JobOptions {
timezone?: string;
startDate?: Date | number;
endDate?: Date | number;
skipDays?: string;
skipImmediate?: boolean;
}
export type RepeatEveryMethod = (interval: string, options?: JobOptions) => Job;
/**
* Sets a job to repeat every X amount of time
* @name Job#repeatEvery
* @function
* @param interval repeat every X
* @param options options to use for job
*/
export const repeatEvery: RepeatEveryMethod = function (this: Job, interval, options = {}) {
this.attrs.repeatInterval = interval;
this.attrs.repeatTimezone = options.timezone ? options.timezone : null;
// Following options are added to handle start day
// and cases like run job every x days (skip some days)
this.attrs.startDate = options.startDate ?? null;
this.attrs.endDate = options.endDate ?? null;
this.attrs.skipDays = options.skipDays ?? null;
if (options.skipImmediate) {
// Set the lastRunAt time to the nextRunAt so that the new nextRunAt will be computed in reference to the current value.
this.attrs.lastRunAt = this.attrs.nextRunAt || new Date();
this.computeNextRunAt();
this.attrs.lastRunAt = undefined;
} else {
this.computeNextRunAt();
}
return this;
};