From 3512702bb5252ba2987ddafbe18e9b273f85f91a Mon Sep 17 00:00:00 2001 From: kbariotis Date: Wed, 5 Jan 2022 20:47:54 +0200 Subject: [PATCH] feat: day of the week literals --- src/lib/on.spec.ts | 4 ++++ src/lib/on.ts | 56 ++++++++++++++++++++++++++++++++++++++++++---- src/lib/types.ts | 11 ++++++++- 3 files changed, 66 insertions(+), 5 deletions(-) diff --git a/src/lib/on.spec.ts b/src/lib/on.spec.ts index f72bb63..855b070 100644 --- a/src/lib/on.spec.ts +++ b/src/lib/on.spec.ts @@ -8,4 +8,8 @@ describe('on', () => { it('should provide on 3rd day of the month', () => { expect(onDayOfTheMonth(3).toString()).toBe('0 0 3 * *'); }); + + it('should provide day of the week using literals', () => { + expect(onDayOfTheWeek('Sunday').toString()).toBe('0 0 * * 0'); + }); }); diff --git a/src/lib/on.ts b/src/lib/on.ts index 6d49c80..8920a31 100644 --- a/src/lib/on.ts +++ b/src/lib/on.ts @@ -1,5 +1,14 @@ import { DayOfTheMonthExpression, DayOfTheWeekExpression } from './expression'; +/** + * In specific day of the month + * + * ``` + * onDayOfTheMonth(3); // * * 3 * * + * onDayOfTheMonth([3,5]); // * * 3,5 * * + * ``` + * + */ export const onDayOfTheMonth = ( dayOfTheMonth: DayOfTheMonth | DayOfTheMonth[] ) => { @@ -12,12 +21,51 @@ export const onDayOfTheMonth = ( }); }; -export const onDayOfTheWeek = (dayOfTheWeek: DayOfTheWeek | DayOfTheWeek[]) => { +const map = { + Monday: 1, + Tuesday: 2, + Wednesday: 3, + Thursday: 4, + Friday: 5, + Saturday: 6, + Sunday: 0, +}; + +/** + * In specific day of the week + * + * ``` + * onDayOfTheWeek(3); // 0 0 * * 3 + * onDayOfTheWeek([3,5]); // 0 0 * * 3,5 + * + * onDayOfTheWeek('Monday'); // 0 0 * * 1 + * onDayOfTheWeek(['Sunday', 'Thursday']); // 0 0 * * 0,4 + * ``` + */ +export const onDayOfTheWeek = ( + dayOfTheWeek: + | DayOfTheWeek + | DayOfTheWeek[] + | DayOfTheWeekLiteral + | DayOfTheWeekLiteral[] +) => { + const arrayInput = Array.isArray(dayOfTheWeek) + ? dayOfTheWeek + : [dayOfTheWeek]; + + if (typeof arrayInput[0] === 'string') { + return new DayOfTheWeekExpression({ + minute: '0', + hour: '0', + dayOfTheWeek: (arrayInput as DayOfTheWeekLiteral[]) + .map((day) => map[day]) + .join(','), + }); + } + return new DayOfTheWeekExpression({ minute: '0', hour: '0', - dayOfTheWeek: `${ - Array.isArray(dayOfTheWeek) ? dayOfTheWeek.join(',') : dayOfTheWeek - }`, + dayOfTheWeek: arrayInput.join(','), }); }; diff --git a/src/lib/types.ts b/src/lib/types.ts index 7830d78..183c4c9 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -140,4 +140,13 @@ type DayOfTheMonth = | 31; // eslint-disable-next-line @typescript-eslint/no-unused-vars -type DayOfTheWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7; +type DayOfTheWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +type DayOfTheWeekLiteral = + | 'Monday' + | 'Tuesday' + | 'Wednesday' + | 'Thursday' + | 'Friday' + | 'Saturday' + | 'Sunday';