diff --git a/examples/is_crontime_valid.js b/examples/is_crontime_valid.js index 915f9b1d..8e04f635 100644 --- a/examples/is_crontime_valid.js +++ b/examples/is_crontime_valid.js @@ -1,9 +1,3 @@ -import { CronJob } from '../src'; +import { isCronTimeValid } from '../src'; -try { - new CronJob('NOT VALID', () => { - console.log("shouldn't get printed"); - }); -} catch (e) { - console.log('omg err', e); -} +console.log('is valid? ', isCronTimeValid('NOT VALID')); diff --git a/src/index.ts b/src/index.ts index 779f1a45..f56b714c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,3 +20,14 @@ export const sendAt = (cronTime: string | Date | DateTime): DateTime => export const timeout = (cronTime: string | Date | DateTime): number => new CronTime(cronTime).getTimeout(); + +export const isCronTimeValid = ( + cronTime: string | Date | DateTime +): boolean => { + try { + new CronTime(cronTime); + return true; + } catch (_) { + return false; + } +}; diff --git a/tests/crontime.test.ts b/tests/crontime.test.ts index 8d9d2426..da25710e 100644 --- a/tests/crontime.test.ts +++ b/tests/crontime.test.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon'; import sinon from 'sinon'; -import { CronTime } from '../src'; +import { CronTime, isCronTimeValid } from '../src'; describe('crontime', () => { // eslint-disable-next-line jest/no-standalone-expect @@ -778,3 +778,19 @@ describe('crontime', () => { }).toThrow(); }); }); + +describe('isCronTimeValid', () => { + it('should return true for valid cron expressions', () => { + expect(isCronTimeValid('* * * * *')).toBe(true); + expect(isCronTimeValid('0 0 * * *')).toBe(true); + expect(isCronTimeValid('0 0 1 1 *')).toBe(true); + expect(isCronTimeValid('*/5 * * * *')).toBe(true); + }); + + it('should return false for invalid cron expressions', () => { + expect(isCronTimeValid('* * * *')).toBe(false); + expect(isCronTimeValid('60 * * * *')).toBe(false); + expect(isCronTimeValid('* * * * * * *')).toBe(false); + expect(isCronTimeValid('invalid cron')).toBe(false); + }); +});