From 62e7320a35195b2eef6bbec75887e8ec209b20ed Mon Sep 17 00:00:00 2001 From: Aviad Pineles Date: Fri, 10 Nov 2023 19:10:18 +0200 Subject: [PATCH] feat(nlp): support weekly by hour texts (#590) * feat(nlp): support weekly by hour texts e.g. 'every week on Sunday at 10, 12 and 17' would serialize to 'RRULE:FREQ=WEEKLY;BYDAY=SU;BYHOUR=10,12,17' * after prettier * forgot to add a case --- src/nlp/parsetext.ts | 3 +++ src/nlp/totext.ts | 4 ++++ test/nlp.test.ts | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/src/nlp/parsetext.ts b/src/nlp/parsetext.ts index e3495650..fbaeccf9 100644 --- a/src/nlp/parsetext.ts +++ b/src/nlp/parsetext.ts @@ -126,6 +126,7 @@ export default function parseText(text: string, language: Language = ENGLISH) { options.freq = RRule.WEEKLY options.byweekday = [RRule.MO, RRule.TU, RRule.WE, RRule.TH, RRule.FR] ttr.nextSymbol() + AT() F() break @@ -133,6 +134,7 @@ export default function parseText(text: string, language: Language = ENGLISH) { options.freq = RRule.WEEKLY if (ttr.nextSymbol()) { ON() + AT() F() } break @@ -198,6 +200,7 @@ export default function parseText(text: string, language: Language = ENGLISH) { options.byweekday.push(RRule[wkd] as ByWeekday) ttr.nextSymbol() } + AT() MDAYs() F() break diff --git a/src/nlp/totext.ts b/src/nlp/totext.ts index cbb614a1..0a2859cd 100644 --- a/src/nlp/totext.ts +++ b/src/nlp/totext.ts @@ -281,6 +281,10 @@ export default class ToText { } else if (this.byweekday) { this._byweekday() } + + if (this.origOptions.byhour) { + this._byhour() + } } } diff --git a/test/nlp.test.ts b/test/nlp.test.ts index c64e7b44..dc64c41c 100644 --- a/test/nlp.test.ts +++ b/test/nlp.test.ts @@ -7,6 +7,10 @@ import { datetime } from './lib/utils' const texts = [ ['Every day', 'RRULE:FREQ=DAILY'], ['Every day at 10, 12 and 17', 'RRULE:FREQ=DAILY;BYHOUR=10,12,17'], + [ + 'Every week on Sunday at 10, 12 and 17', + 'RRULE:FREQ=WEEKLY;BYDAY=SU;BYHOUR=10,12,17', + ], ['Every week', 'RRULE:FREQ=WEEKLY'], ['Every hour', 'RRULE:FREQ=HOURLY'], ['Every 4 hours', 'RRULE:INTERVAL=4;FREQ=HOURLY'],