UNPKG

chrono-node

Version:

A natural language date parser in Javascript

64 lines 2.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../constants"); const pattern_1 = require("../../../utils/pattern"); const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); const weekdays_1 = require("../../../calculation/weekdays"); const types_1 = require("../../../types"); const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + "(?:on\\s*?)?" + "(?:(this|last|past|next)\\s*)?" + `(${(0, pattern_1.matchAnyPattern)(constants_1.WEEKDAY_DICTIONARY)}|weekend|weekday)` + "(?:\\s*(?:\\,|\\)|\\)))?" + "(?:\\s*(this|last|past|next)\\s*week)?" + "(?=\\W|$)", "i"); const PREFIX_GROUP = 1; const WEEKDAY_GROUP = 2; const POSTFIX_GROUP = 3; class ENWeekdayParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking { innerPattern() { return PATTERN; } innerExtract(context, match) { const prefix = match[PREFIX_GROUP]; const postfix = match[POSTFIX_GROUP]; let modifierWord = prefix || postfix; modifierWord = modifierWord || ""; modifierWord = modifierWord.toLowerCase(); let modifier = null; if (modifierWord == "last" || modifierWord == "past") { modifier = "last"; } else if (modifierWord == "next") { modifier = "next"; } else if (modifierWord == "this") { modifier = "this"; } const weekday_word = match[WEEKDAY_GROUP].toLowerCase(); let weekday; if (constants_1.WEEKDAY_DICTIONARY[weekday_word] !== undefined) { weekday = constants_1.WEEKDAY_DICTIONARY[weekday_word]; } else if (weekday_word == "weekend") { weekday = modifier == "last" ? types_1.Weekday.SUNDAY : types_1.Weekday.SATURDAY; } else if (weekday_word == "weekday") { const refWeekday = context.reference.getDateWithAdjustedTimezone().getDay(); if (refWeekday == types_1.Weekday.SUNDAY || refWeekday == types_1.Weekday.SATURDAY) { weekday = modifier == "last" ? types_1.Weekday.FRIDAY : types_1.Weekday.MONDAY; } else { weekday = refWeekday - 1; weekday = modifier == "last" ? weekday - 1 : weekday + 1; weekday = (weekday % 5) + 1; } } else { return null; } return (0, weekdays_1.createParsingComponentsAtWeekday)(context.reference, weekday, modifier); } } exports.default = ENWeekdayParser; //# sourceMappingURL=ENWeekdayParser.js.map