mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-28 09:02:12 +08:00
28 lines
908 B
TypeScript
28 lines
908 B
TypeScript
import cronParser from 'cron-parser-v4';
|
|
import { ScheduleType } from '../interface/schedule';
|
|
|
|
// Keep validation aligned with node-schedule's locked cron-parser version.
|
|
// cron-parser 5 accepts syntax (e.g. H) that the scheduler cannot execute.
|
|
export function isValidCronSchedule(schedule: unknown): schedule is string {
|
|
if (typeof schedule !== 'string' || !schedule.trim()) return false;
|
|
try {
|
|
return cronParser.parseExpression(schedule).hasNext();
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function getInvalidCronSchedules(cron: {
|
|
schedule?: string;
|
|
extra_schedules?: Array<{ schedule: string }>;
|
|
}): unknown[] {
|
|
if (
|
|
cron.schedule?.startsWith(ScheduleType.ONCE) ||
|
|
cron.schedule?.startsWith(ScheduleType.BOOT)
|
|
) {
|
|
return [];
|
|
}
|
|
return [cron.schedule, ...(cron.extra_schedules || []).map((x) => x.schedule)]
|
|
.filter((schedule) => !isValidCronSchedule(schedule));
|
|
}
|