UNPKG

1.93 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const constants_1 = require("../constants");
4const pattern_1 = require("../../../utils/pattern");
5const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
6const weeks_1 = require("../../../calculation/weeks");
7const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" +
8 "(?:a[mn]\\s*?)?" +
9 "(?:(diese[mn]|letzte[mn]|n(?:ä|ae)chste[mn])\\s*)?" +
10 `(${pattern_1.matchAnyPattern(constants_1.WEEKDAY_DICTIONARY)})` +
11 "(?:\\s*(?:\\,|\\)|\\)))?" +
12 "(?:\\s*(diese|letzte|n(?:ä|ae)chste)\\s*woche)?" +
13 "(?=\\W|$)", "i");
14const PREFIX_GROUP = 1;
15const SUFFIX_GROUP = 3;
16const WEEKDAY_GROUP = 2;
17class DEWeekdayParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
18 innerPattern() {
19 return PATTERN;
20 }
21 innerExtract(context, match) {
22 const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();
23 const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek];
24 const prefix = match[PREFIX_GROUP];
25 const postfix = match[SUFFIX_GROUP];
26 let modifierWord = prefix || postfix;
27 modifierWord = modifierWord || "";
28 modifierWord = modifierWord.toLowerCase();
29 let modifier = null;
30 if (modifierWord.match(/letzte/)) {
31 modifier = "last";
32 }
33 else if (modifierWord.match(/chste/)) {
34 modifier = "next";
35 }
36 else if (modifierWord.match(/diese/)) {
37 modifier = "this";
38 }
39 const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier);
40 return context
41 .createParsingComponents()
42 .assign("weekday", offset)
43 .imply("day", date.date())
44 .imply("month", date.month() + 1)
45 .imply("year", date.year());
46 }
47}
48exports.default = DEWeekdayParser;