crontimex
Version:
None-dependencies Cron Time Expression Generator/Builder written in Typescript
290 lines (289 loc) • 9.19 kB
JavaScript
import Helpers, { Days } from "./helpers.js";
import EveryTime from "./EveryTime.js";
// type MinutesOfTheHour = number | number[];
// type HoursOfTheDay = number | number[];
/**
* Cron Time Object
*/
export const CronTimex = {
/**
* Every nth Time
* @return {EveryTime}
* @param interval
*/
every(interval) {
return new EveryTime(interval);
},
/**
* Every Minute
*/
everyMinute() {
return Helpers.minute();
},
/**
* Every Hour
*/
everyHour() {
return Helpers.hour();
},
/**
* Every Hour At
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
* @returns {string}
*/
everyHourAt(minutesOfTheHour) {
return `${minutesOfTheHour} * * * *`;
},
/**
* Every Day
*/
everyDay() {
return Helpers.day();
},
/**
* Every Day At
* @param {number|number[]} hoursOfTheDay - Hours of the day
* @param {number|number[]} minutesOfTheHour - Minutes of the Hour
*/
everyDayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return Helpers.day(hoursOfTheDay, minutesOfTheHour);
},
/**
* Every Sunday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everySundayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.sunday}`;
},
/**
* Every Sunday
*/
everySunday() {
return this.everySundayAt(0);
},
/**
* Every Monday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everyMondayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.monday}`;
},
/**
* Every Monday
*/
everyMonday() {
return this.everyMondayAt(0);
},
/**
* Every Tuesday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everyTuesdayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.tuesday}`;
},
/**
* Every Tuesday
*/
everyTuesday() {
return this.everyTuesdayAt(0);
},
/**
* Every Wednesday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everyWednesdayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.wednesday}`;
},
/**
* Every Wednesday
*/
everyWednesday() {
return this.everyWednesdayAt(0);
},
/**
* Every Thursday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everyThursdayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.thursday}`;
},
/**
* Every Thursday
*/
everyThursday() {
return this.everyThursdayAt(0);
},
/**
* Every Friday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everyFridayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.friday}`;
},
/**
* Every Friday
*/
everyFriday() {
return this.everyFridayAt(0);
},
/**
* Every Saturday At
* @param {number|number[]} hoursOfTheDay - Hours Of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour.
*/
everySaturdayAt(hoursOfTheDay, minutesOfTheHour = 0) {
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${Days.saturday}`;
},
/**
* Every Saturday
*/
everySaturday() {
return this.everySaturdayAt(0);
},
/**
* On Specific Days
* @param {(string|number)[]} days
*/
onSpecificDays(days) {
if (!Array.isArray(days) || days.length === 0) {
throw new Error("onSpecificDays expects days to be an array of days string.");
}
days = Helpers.daysToIntegers(days);
return `0 0 * * ${days}`;
},
/**
* On Specific Days At
* @param {(string|number)[]} days
* @param {number|number[]} hoursOfTheDay - Hours of the Day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour
*/
onSpecificDaysAt(days, hoursOfTheDay, minutesOfTheHour = 0) {
if (!Array.isArray(days) || days.length === 0) {
throw new Error("onSpecificDaysAt expects days to be an array of days string.");
}
days = Helpers.daysToIntegers(days);
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${days}`;
},
/**
* Every Week
*/
everyWeek() {
return this.everyWeekAt(0);
},
/**
* Every Week At
* @param {number|number[]|string|string[]} daysOfTheWeek - Days of the week
* @param {number|number[]} hoursOfTheDay - Hours of the day.
* @param {number|number[]} minutesOfTheHour - Minutes of the hour
*/
everyWeekAt(daysOfTheWeek, hoursOfTheDay = 0, minutesOfTheHour = 0) {
const days = Helpers.daysToIntegers(daysOfTheWeek);
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${days}`;
},
/**
* Every WeekDay
* @param {number|string} startDay - Starting day (Monday=1, Sunday=0)
* @param {number|string} endDay - Starting day (Monday=1, Sunday=0)
* @returns {string}
*
* @example
* CronTime.everyWeekDay()
* // Monday to Friday
* CronTime.everyWeekDay('sunday', 'thursday')
* // Sunday to Thursday
*/
everyWeekDay(startDay = "monday", endDay = "friday") {
return this.everyWeekDayAt(0, 0, startDay, endDay);
},
/**
* Every WeekDay At
* @param {number|number[]} hoursOfTheDay - Hours of the day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour
* @param {number|string} startDay - Starting day
* @param {number|string} endDay - Ending day
* @returns {string}
*/
everyWeekDayAt(hoursOfTheDay, minutesOfTheHour = 0, startDay = "monday", endDay = "friday") {
startDay = Helpers.dayToInt(startDay);
endDay = Helpers.dayToInt(endDay);
Helpers.validateStartToEndDay(startDay, endDay);
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${startDay}-${endDay}`;
},
/**
* Every Weekend
* @param {number|string} startDay - Starting day (Monday=1, Sunday=0)
* @param {number|string} endDay - Starting day (Monday=1, Sunday=0)
* @returns {string}
*
* @example
* CronTime.everyWeekend()
* // Saturday and Sunday
* CronTime.everyWeekend('friday', 'saturday')
* // Friday and Saturday
*/
everyWeekend(startDay = "saturday", endDay = "sunday") {
return this.everyWeekendAt(0, 0, startDay, endDay);
},
/**
* Every Weekend At
* @param {number|number[]} hoursOfTheDay - Hours of the day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour
* @param {number|string} startDay - Starting day
* @param {number|string} endDay - Ending day
* @returns {string}
*/
everyWeekendAt(hoursOfTheDay, minutesOfTheHour = 0, startDay = "saturday", endDay = "sunday") {
const days = Helpers.daysToIntegers([startDay, endDay]);
return `${minutesOfTheHour} ${hoursOfTheDay} * * ${days}`;
},
/**
* Every Month
*/
everyMonth() {
return this.everyMonthOn(1);
},
/**
* Every Month on
* @param {number|number[]} daysOfTheMonth - Days of the month
* @param {number|number[]} hoursOfTheDay - Hours of the day
* @param {number|number[]} minutesOfTheHour - Minutes of the hour
*/
everyMonthOn(daysOfTheMonth, hoursOfTheDay = 0, minutesOfTheHour = 0) {
const days = Helpers.daysToIntegers(daysOfTheMonth);
return `${minutesOfTheHour} ${hoursOfTheDay} ${days} * *`;
},
/**
* Every Year
*/
everyYear() {
return this.everyYearIn(1);
},
/**
* Every Year In
* @param {number|number[]} monthsOfTheYear - Months of the year
* @param daysOfTheMonth - Days of the month
* @param hoursOfTheDay - Hours of the day
* @param minutesOfTheHour - Minutes of the hour.
*/
everyYearIn(monthsOfTheYear, daysOfTheMonth = 1, hoursOfTheDay = 0, minutesOfTheHour = 0) {
const days = Helpers.daysToIntegers(daysOfTheMonth);
return `${minutesOfTheHour} ${hoursOfTheDay} ${days} ${monthsOfTheYear} *`;
},
/**
* Between Time Frames
* @param {number} start - Start
* @param {number} end - End
*/
between(start, end) {
return new EveryTime([start, end], {
between: true
});
}
};
export default CronTimex;