UNPKG

chrono-node

Version:

A natural language date parser in Javascript

33 lines 1.66 kB
import { MergingRefiner } from "../../../common/abstractRefiners.js"; import { ParsingComponents, ParsingResult, ReferenceWithTimezone } from "../../../results.js"; import { parseTimeUnits } from "../constants.js"; import { reverseTimeUnits } from "../../../utils/timeunits.js"; function hasImpliedEarlierReferenceDate(result) { return result.text.match(/\s+(before|from)$/i) != null; } function hasImpliedLaterReferenceDate(result) { return result.text.match(/\s+(after|since)$/i) != null; } export default class ENMergeRelativeFollowByDateRefiner extends MergingRefiner { patternBetween() { return /^\s*$/i; } shouldMergeResults(textBetween, currentResult, nextResult) { if (!textBetween.match(this.patternBetween())) { return false; } if (!hasImpliedEarlierReferenceDate(currentResult) && !hasImpliedLaterReferenceDate(currentResult)) { return false; } return !!nextResult.start.get("day") && !!nextResult.start.get("month") && !!nextResult.start.get("year"); } mergeResults(textBetween, currentResult, nextResult) { let timeUnits = parseTimeUnits(currentResult.text); if (hasImpliedEarlierReferenceDate(currentResult)) { timeUnits = reverseTimeUnits(timeUnits); } const components = ParsingComponents.createRelativeFromReference(new ReferenceWithTimezone(nextResult.start.date()), timeUnits); return new ParsingResult(nextResult.reference, currentResult.index, `${currentResult.text}${textBetween}${nextResult.text}`, components); } } //# sourceMappingURL=ENMergeRelativeFollowByDateRefiner.js.map