mirror of
https://github.com/denoland/deno
synced 2024-08-25 02:57:22 +00:00
fix(ext/cron): automatically override unspecified values (#22042)
Fixes #22041
This commit is contained in:
parent
47620641e7
commit
46b91eceb1
|
@ -391,3 +391,70 @@ Deno.test("error on two handlers", () => {
|
|||
"Deno.cron requires a single handler",
|
||||
);
|
||||
});
|
||||
|
||||
Deno.test("Parse test", () => {
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
minute: 3,
|
||||
}),
|
||||
"3 * * * *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
hour: { every: 2 },
|
||||
}),
|
||||
"0 */2 * * *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
dayOfMonth: { every: 10 },
|
||||
}),
|
||||
"0 0 */10 * *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
month: { every: 3 },
|
||||
}),
|
||||
"0 0 1 */3 *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
dayOfWeek: { every: 2 },
|
||||
}),
|
||||
"0 0 * * */2",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
minute: 3,
|
||||
hour: { every: 2 },
|
||||
}),
|
||||
"3 */2 * * *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
dayOfMonth: { start: 1, end: 10 },
|
||||
}),
|
||||
"0 0 1-10 * *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
minute: { every: 10 },
|
||||
dayOfMonth: { every: 5 },
|
||||
}),
|
||||
"*/10 * */5 * *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
hour: { every: 3 },
|
||||
month: { every: 2 },
|
||||
}),
|
||||
"0 */3 * */2 *",
|
||||
);
|
||||
assertEquals(
|
||||
parseScheduleToString({
|
||||
minute: { every: 5 },
|
||||
month: { every: 2 },
|
||||
}),
|
||||
"*/5 * * */2 *",
|
||||
);
|
||||
});
|
||||
|
|
|
@ -62,7 +62,7 @@ export function parseScheduleToString(
|
|||
if (typeof schedule === "string") {
|
||||
return schedule;
|
||||
} else {
|
||||
const {
|
||||
let {
|
||||
minute,
|
||||
hour,
|
||||
dayOfMonth,
|
||||
|
@ -70,6 +70,25 @@ export function parseScheduleToString(
|
|||
dayOfWeek,
|
||||
} = schedule;
|
||||
|
||||
// Automatically override unspecified values for convenience. For example,
|
||||
// to run every 2 hours, `{ hour: { every: 2 } }` can be specified without
|
||||
// explicitely specifying `minute`.
|
||||
if (minute !== undefined) {
|
||||
// Nothing to override.
|
||||
} else if (hour !== undefined) {
|
||||
// Override minute to 0 since it's not specified.
|
||||
minute = 0;
|
||||
} else if (dayOfMonth !== undefined || dayOfWeek !== undefined) {
|
||||
// Override minute and hour to 0 since they're not specified.
|
||||
minute = 0;
|
||||
hour = 0;
|
||||
} else if (month !== undefined) {
|
||||
// Override minute and hour to 0, and dayOfMonth to 1 since they're not specified.
|
||||
minute = 0;
|
||||
hour = 0;
|
||||
dayOfMonth = 1;
|
||||
}
|
||||
|
||||
return formatToCronSchedule(minute) +
|
||||
" " + formatToCronSchedule(hour) +
|
||||
" " + formatToCronSchedule(dayOfMonth) +
|
||||
|
|
Loading…
Reference in a new issue