chrono-node 2.3.6 → 2.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/calculation/mergingCalculation.js +1 -0
- package/dist/calculation/mergingCalculation.js.map +1 -0
- package/dist/calculation/weeks.js +1 -0
- package/dist/calculation/weeks.js.map +1 -0
- package/dist/calculation/years.js +1 -0
- package/dist/calculation/years.js.map +1 -0
- package/dist/chrono.js +1 -0
- package/dist/chrono.js.map +1 -0
- package/dist/common/abstractRefiners.js +1 -0
- package/dist/common/abstractRefiners.js.map +1 -0
- package/dist/common/casualReferences.d.ts +8 -0
- package/dist/common/casualReferences.js +65 -9
- package/dist/common/casualReferences.js.map +1 -0
- package/dist/common/parsers/AbstractParserWithWordBoundary.d.ts +1 -0
- package/dist/common/parsers/AbstractParserWithWordBoundary.js +5 -1
- package/dist/common/parsers/AbstractParserWithWordBoundary.js.map +1 -0
- package/dist/common/parsers/AbstractTimeExpressionParser.d.ts +2 -0
- package/dist/common/parsers/AbstractTimeExpressionParser.js +40 -27
- package/dist/common/parsers/AbstractTimeExpressionParser.js.map +1 -0
- package/dist/common/parsers/ISOFormatParser.js +1 -0
- package/dist/common/parsers/ISOFormatParser.js.map +1 -0
- package/dist/common/parsers/SlashDateFormatParser.js +1 -0
- package/dist/common/parsers/SlashDateFormatParser.js.map +1 -0
- package/dist/common/refiners/AbstractMergeDateRangeRefiner.js +1 -0
- package/dist/common/refiners/AbstractMergeDateRangeRefiner.js.map +1 -0
- package/dist/common/refiners/AbstractMergeDateTimeRefiner.js +1 -0
- package/dist/common/refiners/AbstractMergeDateTimeRefiner.js.map +1 -0
- package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js +2 -1
- package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js.map +1 -0
- package/dist/common/refiners/ExtractTimezoneOffsetRefiner.js +5 -1
- package/dist/common/refiners/ExtractTimezoneOffsetRefiner.js.map +1 -0
- package/dist/common/refiners/ForwardDateRefiner.js +1 -0
- package/dist/common/refiners/ForwardDateRefiner.js.map +1 -0
- package/dist/common/refiners/MergeWeekdayComponentRefiner.js +1 -0
- package/dist/common/refiners/MergeWeekdayComponentRefiner.js.map +1 -0
- package/dist/common/refiners/OverlapRemovalRefiner.js +1 -0
- package/dist/common/refiners/OverlapRemovalRefiner.js.map +1 -0
- package/dist/common/refiners/UnlikelyFormatFilter.js +1 -0
- package/dist/common/refiners/UnlikelyFormatFilter.js.map +1 -0
- package/dist/configurations.js +1 -0
- package/dist/configurations.js.map +1 -0
- package/dist/debugging.js +1 -0
- package/dist/debugging.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -0
- package/dist/locales/de/constants.d.ts +3 -3
- package/dist/locales/de/constants.js +39 -20
- package/dist/locales/de/constants.js.map +1 -0
- package/dist/locales/de/index.js +5 -0
- package/dist/locales/de/index.js.map +1 -0
- package/dist/locales/de/parsers/DECasualDateParser.js +1 -0
- package/dist/locales/de/parsers/DECasualDateParser.js.map +1 -0
- package/dist/locales/de/parsers/DECasualTimeParser.js +1 -0
- package/dist/locales/de/parsers/DECasualTimeParser.js.map +1 -0
- package/dist/locales/de/parsers/DEMonthNameLittleEndianParser.js +1 -0
- package/dist/locales/de/parsers/DEMonthNameLittleEndianParser.js.map +1 -0
- package/dist/locales/de/parsers/DESpecificTimeExpressionParser.d.ts +7 -0
- package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js +115 -0
- package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js.map +1 -0
- package/dist/locales/de/parsers/DETimeExpressionParser.d.ts +0 -1
- package/dist/locales/de/parsers/DETimeExpressionParser.js +4 -21
- package/dist/locales/de/parsers/DETimeExpressionParser.js.map +1 -0
- package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.d.ts +8 -0
- package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js +35 -0
- package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -0
- package/dist/locales/de/parsers/DEWeekdayParser.js +1 -0
- package/dist/locales/de/parsers/DEWeekdayParser.js.map +1 -0
- package/dist/locales/de/refiners/DEMergeDateRangeRefiner.js +1 -0
- package/dist/locales/de/refiners/DEMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/de/refiners/DEMergeDateTimeRefiner.js +1 -0
- package/dist/locales/de/refiners/DEMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/en/constants.d.ts +2 -2
- package/dist/locales/en/constants.js +4 -0
- package/dist/locales/en/constants.js.map +1 -0
- package/dist/locales/en/index.js +3 -1
- package/dist/locales/en/index.js.map +1 -0
- package/dist/locales/en/parsers/ENCasualDateParser.js +1 -0
- package/dist/locales/en/parsers/ENCasualDateParser.js.map +1 -0
- package/dist/locales/en/parsers/ENCasualTimeParser.js +1 -0
- package/dist/locales/en/parsers/ENCasualTimeParser.js.map +1 -0
- package/dist/locales/en/parsers/ENCasualYearMonthDayParser.js +1 -0
- package/dist/locales/en/parsers/ENCasualYearMonthDayParser.js.map +1 -0
- package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -0
- package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -0
- package/dist/locales/en/parsers/ENMonthNameMiddleEndianParser.js +1 -0
- package/dist/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -0
- package/dist/locales/en/parsers/ENMonthNameParser.js +1 -0
- package/dist/locales/en/parsers/ENMonthNameParser.js.map +1 -0
- package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +3 -2
- package/dist/locales/en/parsers/ENRelativeDateFormatParser.js.map +1 -0
- package/dist/locales/en/parsers/ENSlashMonthFormatParser.js +1 -0
- package/dist/locales/en/parsers/ENSlashMonthFormatParser.js.map +1 -0
- package/dist/locales/en/parsers/ENTimeExpressionParser.js +1 -0
- package/dist/locales/en/parsers/ENTimeExpressionParser.js.map +1 -0
- package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js +1 -0
- package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -0
- package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +2 -1
- package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js +1 -0
- package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -0
- package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js +1 -0
- package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -0
- package/dist/locales/en/parsers/ENWeekdayParser.js +1 -0
- package/dist/locales/en/parsers/ENWeekdayParser.js.map +1 -0
- package/dist/locales/en/refiners/ENMergeDateRangeRefiner.js +1 -0
- package/dist/locales/en/refiners/ENMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -0
- package/dist/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.d.ts +7 -0
- package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js +36 -0
- package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js.map +1 -0
- package/dist/locales/fr/constants.js +1 -0
- package/dist/locales/fr/constants.js.map +1 -0
- package/dist/locales/fr/index.js +1 -0
- package/dist/locales/fr/index.js.map +1 -0
- package/dist/locales/fr/parsers/FRCasualDateParser.js +1 -0
- package/dist/locales/fr/parsers/FRCasualDateParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRCasualTimeParser.js +1 -0
- package/dist/locales/fr/parsers/FRCasualTimeParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRMonthNameLittleEndianParser.js +1 -0
- package/dist/locales/fr/parsers/FRMonthNameLittleEndianParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRSpecificTimeExpressionParser.js +1 -0
- package/dist/locales/fr/parsers/FRSpecificTimeExpressionParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRTimeExpressionParser.js +1 -0
- package/dist/locales/fr/parsers/FRTimeExpressionParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js +1 -0
- package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js +1 -0
- package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js +2 -1
- package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js.map +1 -0
- package/dist/locales/fr/parsers/FRWeekdayParser.js +1 -0
- package/dist/locales/fr/parsers/FRWeekdayParser.js.map +1 -0
- package/dist/locales/fr/refiners/FRMergeDateRangeRefiner.js +1 -0
- package/dist/locales/fr/refiners/FRMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/fr/refiners/FRMergeDateTimeRefiner.js +1 -0
- package/dist/locales/fr/refiners/FRMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/ja/constants.js +1 -0
- package/dist/locales/ja/constants.js.map +1 -0
- package/dist/locales/ja/index.js +1 -0
- package/dist/locales/ja/index.js.map +1 -0
- package/dist/locales/ja/parsers/JPCasualDateParser.js +1 -0
- package/dist/locales/ja/parsers/JPCasualDateParser.js.map +1 -0
- package/dist/locales/ja/parsers/JPStandardParser.js +1 -0
- package/dist/locales/ja/parsers/JPStandardParser.js.map +1 -0
- package/dist/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -0
- package/dist/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/nl/constants.js +1 -0
- package/dist/locales/nl/constants.js.map +1 -0
- package/dist/locales/nl/index.js +1 -0
- package/dist/locales/nl/index.js.map +1 -0
- package/dist/locales/nl/parsers/NLCasualDateParser.js +1 -0
- package/dist/locales/nl/parsers/NLCasualDateParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLCasualDateTimeParser.js +1 -0
- package/dist/locales/nl/parsers/NLCasualDateTimeParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLCasualTimeParser.js +1 -0
- package/dist/locales/nl/parsers/NLCasualTimeParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLCasualYearMonthDayParser.js +1 -0
- package/dist/locales/nl/parsers/NLCasualYearMonthDayParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLMonthNameMiddleEndianParser.js +1 -0
- package/dist/locales/nl/parsers/NLMonthNameMiddleEndianParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLMonthNameParser.js +1 -0
- package/dist/locales/nl/parsers/NLMonthNameParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js +1 -0
- package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLSlashMonthFormatParser.js +1 -0
- package/dist/locales/nl/parsers/NLSlashMonthFormatParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLTimeExpressionParser.js +1 -0
- package/dist/locales/nl/parsers/NLTimeExpressionParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js +1 -0
- package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js.map +1 -0
- package/dist/locales/nl/parsers/NLWeekdayParser.js +1 -0
- package/dist/locales/nl/parsers/NLWeekdayParser.js.map +1 -0
- package/dist/locales/nl/refiners/NLMergeDateRangeRefiner.js +1 -0
- package/dist/locales/nl/refiners/NLMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/nl/refiners/NLMergeDateTimeRefiner.js +1 -0
- package/dist/locales/nl/refiners/NLMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/pt/constants.js +1 -0
- package/dist/locales/pt/constants.js.map +1 -0
- package/dist/locales/pt/index.js +1 -0
- package/dist/locales/pt/index.js.map +1 -0
- package/dist/locales/pt/parsers/PTCasualDateParser.js +1 -0
- package/dist/locales/pt/parsers/PTCasualDateParser.js.map +1 -0
- package/dist/locales/pt/parsers/PTCasualTimeParser.js +1 -0
- package/dist/locales/pt/parsers/PTCasualTimeParser.js.map +1 -0
- package/dist/locales/pt/parsers/PTMonthNameLittleEndianParser.js +1 -0
- package/dist/locales/pt/parsers/PTMonthNameLittleEndianParser.js.map +1 -0
- package/dist/locales/pt/parsers/PTTimeExpressionParser.js +1 -0
- package/dist/locales/pt/parsers/PTTimeExpressionParser.js.map +1 -0
- package/dist/locales/pt/parsers/PTWeekdayParser.js +1 -0
- package/dist/locales/pt/parsers/PTWeekdayParser.js.map +1 -0
- package/dist/locales/pt/refiners/PTMergeDateRangeRefiner.js +1 -0
- package/dist/locales/pt/refiners/PTMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/pt/refiners/PTMergeDateTimeRefiner.js +1 -0
- package/dist/locales/pt/refiners/PTMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/ru/constants.d.ts +33 -0
- package/dist/locales/ru/constants.js +302 -0
- package/dist/locales/ru/constants.js.map +1 -0
- package/dist/locales/ru/index.d.ts +8 -0
- package/dist/locales/ru/index.js +56 -0
- package/dist/locales/ru/index.js.map +1 -0
- package/dist/locales/ru/parsers/RUCasualDateParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RUCasualDateParser.js +52 -0
- package/dist/locales/ru/parsers/RUCasualDateParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUCasualTimeParser.d.ts +7 -0
- package/dist/locales/ru/parsers/RUCasualTimeParser.js +74 -0
- package/dist/locales/ru/parsers/RUCasualTimeParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.js +59 -0
- package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUMonthNameParser.d.ts +7 -0
- package/dist/locales/ru/parsers/RUMonthNameParser.js +45 -0
- package/dist/locales/ru/parsers/RUMonthNameParser.js.map +1 -0
- package/dist/locales/ru/parsers/RURelativeDateFormatParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RURelativeDateFormatParser.js +60 -0
- package/dist/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUTimeExpressionParser.d.ts +12 -0
- package/dist/locales/ru/parsers/RUTimeExpressionParser.js +57 -0
- package/dist/locales/ru/parsers/RUTimeExpressionParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +22 -0
- package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +29 -0
- package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +22 -0
- package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -0
- package/dist/locales/ru/parsers/RUWeekdayParser.d.ts +8 -0
- package/dist/locales/ru/parsers/RUWeekdayParser.js +55 -0
- package/dist/locales/ru/parsers/RUWeekdayParser.js.map +1 -0
- package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.d.ts +4 -0
- package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.js +13 -0
- package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.d.ts +4 -0
- package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.js +13 -0
- package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/zh/hans/constants.js +1 -0
- package/dist/locales/zh/hans/constants.js.map +1 -0
- package/dist/locales/zh/hans/index.js +1 -0
- package/dist/locales/zh/hans/index.js.map +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js.map +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansDateParser.js +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansDateParser.js.map +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js.map +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js.map +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js +1 -0
- package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js.map +1 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js +1 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js +1 -0
- package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/zh/hant/constants.js +1 -0
- package/dist/locales/zh/hant/constants.js.map +1 -0
- package/dist/locales/zh/hant/index.js +1 -0
- package/dist/locales/zh/hant/index.js.map +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js.map +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantDateParser.js +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantDateParser.js.map +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js.map +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js.map +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js +1 -0
- package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js.map +1 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js +1 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js.map +1 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js +1 -0
- package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js.map +1 -0
- package/dist/locales/zh/index.d.ts +1 -1
- package/dist/locales/zh/index.js +14 -2
- package/dist/locales/zh/index.js.map +1 -0
- package/dist/results.d.ts +3 -3
- package/dist/results.js +2 -2
- package/dist/results.js.map +1 -0
- package/dist/timezone.d.ts +1 -1
- package/dist/timezone.js +4 -3
- package/dist/timezone.js.map +1 -0
- package/dist/utils/dayjs.js +1 -0
- package/dist/utils/dayjs.js.map +1 -0
- package/dist/utils/pattern.js +1 -0
- package/dist/utils/pattern.js.map +1 -0
- package/dist/utils/timeunits.js +1 -0
- package/dist/utils/timeunits.js.map +1 -0
- package/package.json +1 -1
- package/src/common/casualReferences.ts +64 -9
- package/src/common/parsers/AbstractParserWithWordBoundary.ts +5 -1
- package/src/common/parsers/AbstractTimeExpressionParser.ts +52 -28
- package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +3 -1
- package/src/common/refiners/ExtractTimezoneOffsetRefiner.ts +5 -1
- package/src/index.ts +2 -1
- package/src/locales/de/constants.ts +42 -22
- package/src/locales/de/index.ts +4 -0
- package/src/locales/de/parsers/DESpecificTimeExpressionParser.ts +150 -0
- package/src/locales/de/parsers/DETimeExpressionParser.ts +4 -23
- package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +42 -0
- package/src/locales/en/constants.ts +5 -2
- package/src/locales/en/index.ts +2 -1
- package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +2 -2
- package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
- package/src/locales/en/refiners/ENMergeRelativeDateRefiner.ts +58 -0
- package/src/locales/fr/parsers/FRTimeUnitWithinFormatParser.ts +1 -1
- package/src/locales/ru/constants.ts +344 -0
- package/src/locales/ru/index.ts +84 -0
- package/src/locales/ru/parsers/RUCasualDateParser.ts +44 -0
- package/src/locales/ru/parsers/RUCasualTimeParser.ts +56 -0
- package/src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts +72 -0
- package/src/locales/ru/parsers/RUMonthNameParser.ts +61 -0
- package/src/locales/ru/parsers/RURelativeDateFormatParser.ts +75 -0
- package/src/locales/ru/parsers/RUTimeExpressionParser.ts +64 -0
- package/src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts +24 -0
- package/src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.ts +34 -0
- package/src/locales/ru/parsers/RUTimeUnitWithinFormatParser.ts +24 -0
- package/src/locales/ru/parsers/RUWeekdayParser.ts +63 -0
- package/src/locales/ru/refiners/RUMergeDateRangeRefiner.ts +13 -0
- package/src/locales/ru/refiners/RUMergeDateTimeRefiner.ts +13 -0
- package/src/locales/zh/index.ts +1 -1
- package/src/results.ts +5 -6
- package/src/timezone.ts +4 -4
- package/src/utils/timeunits.ts +2 -2
- package/test/de/de_month_name_little_endian.test.ts +12 -0
- package/test/de/de_time_exp.test.ts +59 -0
- package/test/de/de_time_units_casual_relative.test.ts +108 -0
- package/test/de/de_year.test.ts +147 -0
- package/test/en/en_merging_relative_dates.test.ts +51 -0
- package/test/en/en_relative.test.ts +67 -2
- package/test/en/en_time_units_ago.test.ts +3 -3
- package/test/en/en_time_units_casual_relative.test.ts +16 -0
- package/test/en/en_time_units_within.test.ts +2 -2
- package/test/en/en_timezone_exp.test.ts +30 -3
- package/test/en/negative_cases.test.ts +8 -0
- package/test/fr/fr_time_units_ago.test.ts +3 -3
- package/test/fr/fr_time_units_within.test.ts +9 -2
- package/test/nl/nl_relative.test.ts +2 -2
- package/test/nl/nl_time_units_ago.test.ts +3 -3
- package/test/ru/ru_casual.test.ts +147 -0
- package/test/ru/ru_month.test.ts +70 -0
- package/test/ru/ru_month_name_little_endian.test.ts +145 -0
- package/test/ru/ru_relative.test.ts +74 -0
- package/test/ru/ru_time_exp.test.ts +111 -0
- package/test/ru/ru_time_units_ago.test.ts +48 -0
- package/test/ru/ru_time_units_casual_relative.test.ts +112 -0
- package/test/ru/ru_time_units_within.test.ts +16 -0
- package/test/ru/ru_weekday.test.ts +52 -0
- package/test/system_timezone.test.ts +22 -0
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../chrono";
|
|
2
|
+
import { NUMBER_PATTERN, parseNumberPattern, TIME_UNIT_DICTIONARY } from "../constants";
|
|
3
|
+
import { ParsingComponents } from "../../../results";
|
|
4
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
5
|
+
import { reverseTimeUnits } from "../../../utils/timeunits";
|
|
6
|
+
import { matchAnyPattern } from "../../../utils/pattern";
|
|
7
|
+
|
|
8
|
+
export default class DETimeUnitAgoFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
innerPattern(): RegExp {
|
|
14
|
+
return new RegExp(
|
|
15
|
+
`(?:\\s*((?:nächste|kommende|folgende|letzte|vergangene|vorige|vor(?:her|an)gegangene)(?:s|n|m|r)?|vor|in)\\s*)?` +
|
|
16
|
+
`(${NUMBER_PATTERN})?` +
|
|
17
|
+
`(?:\\s*(nächste|kommende|folgende|letzte|vergangene|vorige|vor(?:her|an)gegangene)(?:s|n|m|r)?)?` +
|
|
18
|
+
`\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})`,
|
|
19
|
+
"i"
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray) {
|
|
24
|
+
const num = match[2] ? parseNumberPattern(match[2]) : 1;
|
|
25
|
+
const unit = TIME_UNIT_DICTIONARY[match[4].toLowerCase()];
|
|
26
|
+
let timeUnits = {};
|
|
27
|
+
timeUnits[unit] = num;
|
|
28
|
+
|
|
29
|
+
// Modifier
|
|
30
|
+
let modifier = match[1] || match[3] || "";
|
|
31
|
+
modifier = modifier.toLowerCase();
|
|
32
|
+
if (!modifier) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (/vor/.test(modifier) || /letzte/.test(modifier) || /vergangen/.test(modifier)) {
|
|
37
|
+
timeUnits = reverseTimeUnits(timeUnits);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OpUnitType } from "dayjs";
|
|
1
|
+
import { OpUnitType, QUnitType } from "dayjs";
|
|
2
2
|
import { matchAnyPattern, repeatedTimeunitPattern } from "../../utils/pattern";
|
|
3
3
|
import { findMostLikelyADYear } from "../../calculation/years";
|
|
4
4
|
import { TimeUnits } from "../../utils/timeunits";
|
|
@@ -133,7 +133,7 @@ export const ORDINAL_WORD_DICTIONARY: { [word: string]: number } = {
|
|
|
133
133
|
"thirty-first": 31,
|
|
134
134
|
};
|
|
135
135
|
|
|
136
|
-
export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType } = {
|
|
136
|
+
export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType | QUnitType } = {
|
|
137
137
|
sec: "second",
|
|
138
138
|
second: "second",
|
|
139
139
|
seconds: "second",
|
|
@@ -152,6 +152,9 @@ export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType } = {
|
|
|
152
152
|
weeks: "week",
|
|
153
153
|
month: "month",
|
|
154
154
|
months: "month",
|
|
155
|
+
qtr: "quarter",
|
|
156
|
+
quarter: "quarter",
|
|
157
|
+
quarters: "quarter",
|
|
155
158
|
y: "year",
|
|
156
159
|
yr: "year",
|
|
157
160
|
year: "year",
|
package/src/locales/en/index.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { ParsedResult, ParsingOption } from "../../index";
|
|
|
26
26
|
import { Chrono, Configuration } from "../../chrono";
|
|
27
27
|
import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
|
|
28
28
|
import ENTimeUnitCasualRelativeFormatParser from "./parsers/ENTimeUnitCasualRelativeFormatParser";
|
|
29
|
+
import ENMergeRelativeDateRefiner from "./refiners/ENMergeRelativeDateRefiner";
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* Chrono object configured for parsing *casual* English
|
|
@@ -91,7 +92,7 @@ export function createConfiguration(strictMode = true, littleEndian = false): Co
|
|
|
91
92
|
new ENTimeUnitAgoFormatParser(strictMode),
|
|
92
93
|
new ENTimeUnitLaterFormatParser(strictMode),
|
|
93
94
|
],
|
|
94
|
-
refiners: [new ENMergeDateTimeRefiner(), new ENMergeDateRangeRefiner()],
|
|
95
|
+
refiners: [new ENMergeRelativeDateRefiner(), new ENMergeDateTimeRefiner(), new ENMergeDateRangeRefiner()],
|
|
95
96
|
},
|
|
96
97
|
strictMode
|
|
97
98
|
);
|
|
@@ -6,7 +6,7 @@ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/
|
|
|
6
6
|
import { matchAnyPattern } from "../../../utils/pattern";
|
|
7
7
|
|
|
8
8
|
const PATTERN = new RegExp(
|
|
9
|
-
`(this|
|
|
9
|
+
`(this|last|past|next|after\\s*this)\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})(?=\\s*)` + "(?=\\W|$)",
|
|
10
10
|
"i"
|
|
11
11
|
);
|
|
12
12
|
|
|
@@ -23,7 +23,7 @@ export default class ENRelativeDateFormatParser extends AbstractParserWithWordBo
|
|
|
23
23
|
const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase();
|
|
24
24
|
const timeunit = TIME_UNIT_DICTIONARY[unitWord];
|
|
25
25
|
|
|
26
|
-
if (modifier == "next") {
|
|
26
|
+
if (modifier == "next" || modifier.startsWith("after")) {
|
|
27
27
|
const timeUnits = {};
|
|
28
28
|
timeUnits[timeunit] = 1;
|
|
29
29
|
return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
|
|
@@ -4,7 +4,7 @@ import { ParsingComponents } from "../../../results";
|
|
|
4
4
|
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
5
5
|
import { reverseTimeUnits } from "../../../utils/timeunits";
|
|
6
6
|
|
|
7
|
-
const PATTERN = new RegExp(`(this|last|past|next|\\+|-)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
|
|
7
|
+
const PATTERN = new RegExp(`(this|last|past|next|after|\\+|-)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
|
|
8
8
|
|
|
9
9
|
export default class ENTimeUnitCasualRelativeFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
10
10
|
innerPattern(): RegExp {
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { MergingRefiner } from "../../../common/abstractRefiners";
|
|
2
|
+
import { ParsingComponents, ParsingResult, ReferenceWithTimezone } from "../../../results";
|
|
3
|
+
import { parseTimeUnits } from "../constants";
|
|
4
|
+
import { reverseTimeUnits } from "../../../utils/timeunits";
|
|
5
|
+
|
|
6
|
+
function hasImpliedEarlierReferenceDate(result: ParsingResult): boolean {
|
|
7
|
+
return result.text.match(/\s+(before|from)$/i) != null;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function hasImpliedLaterReferenceDate(result: ParsingResult): boolean {
|
|
11
|
+
return result.text.match(/\s+(after|since)$/i) != null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Merges an absolute date with a relative date.
|
|
16
|
+
* - 2 weeks before 2020-02-13
|
|
17
|
+
* - 2 days after next Friday
|
|
18
|
+
*/
|
|
19
|
+
export default class ENMergeRelativeDateRefiner extends MergingRefiner {
|
|
20
|
+
patternBetween(): RegExp {
|
|
21
|
+
return /^\s*$/i;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): boolean {
|
|
25
|
+
// Dates need to be next to each other to get merged
|
|
26
|
+
if (!textBetween.match(this.patternBetween())) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Check if any relative tokens were swallowed by the first date.
|
|
31
|
+
// E.g. [<relative_date1> from] [<date2>]
|
|
32
|
+
if (!hasImpliedEarlierReferenceDate(currentResult) && !hasImpliedLaterReferenceDate(currentResult)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// make sure that <date2> implies an absolute date
|
|
37
|
+
return !!nextResult.start.get("day") && !!nextResult.start.get("month") && !!nextResult.start.get("year");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): ParsingResult {
|
|
41
|
+
let timeUnits = parseTimeUnits(currentResult.text);
|
|
42
|
+
if (hasImpliedEarlierReferenceDate(currentResult)) {
|
|
43
|
+
timeUnits = reverseTimeUnits(timeUnits);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const components = ParsingComponents.createRelativeFromReference(
|
|
47
|
+
new ReferenceWithTimezone(nextResult.start.date()),
|
|
48
|
+
timeUnits
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
return new ParsingResult(
|
|
52
|
+
nextResult.reference,
|
|
53
|
+
currentResult.index,
|
|
54
|
+
`${currentResult.text}${textBetween}${nextResult.text}`,
|
|
55
|
+
components
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -5,7 +5,7 @@ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/
|
|
|
5
5
|
|
|
6
6
|
export default class FRTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
7
7
|
innerPattern(): RegExp {
|
|
8
|
-
return new RegExp(`(?:dans|en|pour|pendant)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
|
|
8
|
+
return new RegExp(`(?:dans|en|pour|pendant|de)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import { OpUnitType, QUnitType } from "dayjs";
|
|
2
|
+
import { matchAnyPattern, repeatedTimeunitPattern } from "../../utils/pattern";
|
|
3
|
+
import { findMostLikelyADYear } from "../../calculation/years";
|
|
4
|
+
import { TimeUnits } from "../../utils/timeunits";
|
|
5
|
+
|
|
6
|
+
export const REGEX_PARTS = {
|
|
7
|
+
leftBoundary: "([^\\p{L}\\p{N}_]|^)",
|
|
8
|
+
rightBoundary: "(?=[^\\p{L}\\p{N}_]|$)",
|
|
9
|
+
flags: "iu",
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const WEEKDAY_DICTIONARY: { [word: string]: number } = {
|
|
13
|
+
воскресенье: 0,
|
|
14
|
+
воскресенья: 0,
|
|
15
|
+
вск: 0,
|
|
16
|
+
"вск.": 0,
|
|
17
|
+
понедельник: 1,
|
|
18
|
+
понедельника: 1,
|
|
19
|
+
пн: 1,
|
|
20
|
+
"пн.": 1,
|
|
21
|
+
вторник: 2,
|
|
22
|
+
вторника: 2,
|
|
23
|
+
вт: 2,
|
|
24
|
+
"вт.": 2,
|
|
25
|
+
среда: 3,
|
|
26
|
+
среды: 3,
|
|
27
|
+
среду: 3,
|
|
28
|
+
ср: 3,
|
|
29
|
+
"ср.": 3,
|
|
30
|
+
четверг: 4,
|
|
31
|
+
четверга: 4,
|
|
32
|
+
чт: 4,
|
|
33
|
+
"чт.": 4,
|
|
34
|
+
пятница: 5,
|
|
35
|
+
пятницу: 5,
|
|
36
|
+
пятницы: 5,
|
|
37
|
+
пт: 5,
|
|
38
|
+
"пт.": 5,
|
|
39
|
+
суббота: 6,
|
|
40
|
+
субботу: 6,
|
|
41
|
+
субботы: 6,
|
|
42
|
+
сб: 6,
|
|
43
|
+
"сб.": 6,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const FULL_MONTH_NAME_DICTIONARY: { [word: string]: number } = {
|
|
47
|
+
январь: 1,
|
|
48
|
+
января: 1,
|
|
49
|
+
январе: 1,
|
|
50
|
+
февряль: 2,
|
|
51
|
+
февряля: 2,
|
|
52
|
+
февряле: 2,
|
|
53
|
+
март: 3,
|
|
54
|
+
марта: 3,
|
|
55
|
+
марте: 3,
|
|
56
|
+
апрель: 4,
|
|
57
|
+
апреля: 4,
|
|
58
|
+
апреле: 4,
|
|
59
|
+
май: 5,
|
|
60
|
+
мая: 5,
|
|
61
|
+
мае: 5,
|
|
62
|
+
июнь: 6,
|
|
63
|
+
июня: 6,
|
|
64
|
+
июне: 6,
|
|
65
|
+
июль: 7,
|
|
66
|
+
июля: 7,
|
|
67
|
+
июле: 7,
|
|
68
|
+
август: 8,
|
|
69
|
+
августа: 8,
|
|
70
|
+
августе: 8,
|
|
71
|
+
сентябрь: 9,
|
|
72
|
+
сентября: 9,
|
|
73
|
+
сентябре: 9,
|
|
74
|
+
октябрь: 10,
|
|
75
|
+
октября: 10,
|
|
76
|
+
октябре: 10,
|
|
77
|
+
ноябрь: 11,
|
|
78
|
+
ноября: 11,
|
|
79
|
+
ноябре: 11,
|
|
80
|
+
декабрь: 12,
|
|
81
|
+
декабря: 12,
|
|
82
|
+
декабре: 12,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const MONTH_DICTIONARY: { [word: string]: number } = {
|
|
86
|
+
...FULL_MONTH_NAME_DICTIONARY,
|
|
87
|
+
янв: 1,
|
|
88
|
+
"янв.": 1,
|
|
89
|
+
фев: 2,
|
|
90
|
+
"фев.": 2,
|
|
91
|
+
мар: 3,
|
|
92
|
+
"мар.": 3,
|
|
93
|
+
апр: 4,
|
|
94
|
+
"апр.": 4,
|
|
95
|
+
авг: 8,
|
|
96
|
+
"авг.": 8,
|
|
97
|
+
сен: 9,
|
|
98
|
+
"сен.": 9,
|
|
99
|
+
окт: 10,
|
|
100
|
+
"окт.": 10,
|
|
101
|
+
ноя: 11,
|
|
102
|
+
"ноя.": 11,
|
|
103
|
+
дек: 12,
|
|
104
|
+
"дек.": 12,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
|
|
108
|
+
один: 1,
|
|
109
|
+
одна: 1,
|
|
110
|
+
одной: 1,
|
|
111
|
+
одну: 1,
|
|
112
|
+
две: 2,
|
|
113
|
+
два: 2,
|
|
114
|
+
двух: 2,
|
|
115
|
+
три: 3,
|
|
116
|
+
трех: 3,
|
|
117
|
+
трёх: 3,
|
|
118
|
+
четыре: 4,
|
|
119
|
+
четырех: 4,
|
|
120
|
+
четырёх: 4,
|
|
121
|
+
пять: 5,
|
|
122
|
+
пяти: 5,
|
|
123
|
+
шесть: 6,
|
|
124
|
+
шести: 6,
|
|
125
|
+
семь: 7,
|
|
126
|
+
семи: 7,
|
|
127
|
+
восемь: 8,
|
|
128
|
+
восемьми: 8,
|
|
129
|
+
девять: 9,
|
|
130
|
+
девяти: 9,
|
|
131
|
+
десять: 10,
|
|
132
|
+
десяти: 10,
|
|
133
|
+
одиннадцать: 11,
|
|
134
|
+
одиннадцати: 11,
|
|
135
|
+
двенадцать: 12,
|
|
136
|
+
двенадцати: 12,
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export const ORDINAL_WORD_DICTIONARY: { [word: string]: number } = {
|
|
140
|
+
первое: 1,
|
|
141
|
+
первого: 1,
|
|
142
|
+
второе: 2,
|
|
143
|
+
второго: 2,
|
|
144
|
+
третье: 3,
|
|
145
|
+
третьего: 3,
|
|
146
|
+
четвертое: 4,
|
|
147
|
+
четвертого: 4,
|
|
148
|
+
пятое: 5,
|
|
149
|
+
пятого: 5,
|
|
150
|
+
шестое: 6,
|
|
151
|
+
шестого: 6,
|
|
152
|
+
седьмое: 7,
|
|
153
|
+
седьмого: 7,
|
|
154
|
+
восьмое: 8,
|
|
155
|
+
восьмого: 8,
|
|
156
|
+
девятое: 9,
|
|
157
|
+
девятого: 9,
|
|
158
|
+
десятое: 10,
|
|
159
|
+
десятого: 10,
|
|
160
|
+
одиннадцатое: 11,
|
|
161
|
+
одиннадцатого: 11,
|
|
162
|
+
двенадцатое: 12,
|
|
163
|
+
двенадцатого: 12,
|
|
164
|
+
тринадцатое: 13,
|
|
165
|
+
тринадцатого: 13,
|
|
166
|
+
четырнадцатое: 14,
|
|
167
|
+
четырнадцатого: 14,
|
|
168
|
+
пятнадцатое: 15,
|
|
169
|
+
пятнадцатого: 15,
|
|
170
|
+
шестнадцатое: 16,
|
|
171
|
+
шестнадцатого: 16,
|
|
172
|
+
семнадцатое: 17,
|
|
173
|
+
семнадцатого: 17,
|
|
174
|
+
восемнадцатое: 18,
|
|
175
|
+
восемнадцатого: 18,
|
|
176
|
+
девятнадцатое: 19,
|
|
177
|
+
девятнадцатого: 19,
|
|
178
|
+
двадцатое: 20,
|
|
179
|
+
двадцатого: 20,
|
|
180
|
+
"двадцать первое": 21,
|
|
181
|
+
"двадцать первого": 21,
|
|
182
|
+
"двадцать второе": 22,
|
|
183
|
+
"двадцать второго": 22,
|
|
184
|
+
"двадцать третье": 23,
|
|
185
|
+
"двадцать третьего": 23,
|
|
186
|
+
"двадцать четвертое": 24,
|
|
187
|
+
"двадцать четвертого": 24,
|
|
188
|
+
"двадцать пятое": 25,
|
|
189
|
+
"двадцать пятого": 25,
|
|
190
|
+
"двадцать шестое": 26,
|
|
191
|
+
"двадцать шестого": 26,
|
|
192
|
+
"двадцать седьмое": 27,
|
|
193
|
+
"двадцать седьмого": 27,
|
|
194
|
+
"двадцать восьмое": 28,
|
|
195
|
+
"двадцать восьмого": 28,
|
|
196
|
+
"двадцать девятое": 29,
|
|
197
|
+
"двадцать девятого": 29,
|
|
198
|
+
"тридцатое": 30,
|
|
199
|
+
"тридцатого": 30,
|
|
200
|
+
"тридцать первое": 31,
|
|
201
|
+
"тридцать первого": 31,
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType | QUnitType } = {
|
|
205
|
+
сек: "second",
|
|
206
|
+
секунда: "second",
|
|
207
|
+
секунд: "second",
|
|
208
|
+
секунды: "second",
|
|
209
|
+
секунду: "second",
|
|
210
|
+
секундочка: "second",
|
|
211
|
+
секундочки: "second",
|
|
212
|
+
секундочек: "second",
|
|
213
|
+
секундочку: "second",
|
|
214
|
+
мин: "minute",
|
|
215
|
+
минута: "minute",
|
|
216
|
+
минут: "minute",
|
|
217
|
+
минуты: "minute",
|
|
218
|
+
минуту: "minute",
|
|
219
|
+
минуток: "minute",
|
|
220
|
+
минутки: "minute",
|
|
221
|
+
минутку: "minute",
|
|
222
|
+
час: "hour",
|
|
223
|
+
часов: "hour",
|
|
224
|
+
часа: "hour",
|
|
225
|
+
часу: "hour",
|
|
226
|
+
часиков: "hour",
|
|
227
|
+
часика: "hour",
|
|
228
|
+
часике: "hour",
|
|
229
|
+
часик: "hour",
|
|
230
|
+
день: "d",
|
|
231
|
+
дня: "d",
|
|
232
|
+
дней: "d",
|
|
233
|
+
суток: "d",
|
|
234
|
+
сутки: "d",
|
|
235
|
+
неделя: "week",
|
|
236
|
+
неделе: "week",
|
|
237
|
+
недели: "week",
|
|
238
|
+
неделю: "week",
|
|
239
|
+
недель: "week",
|
|
240
|
+
недельке: "week",
|
|
241
|
+
недельки: "week",
|
|
242
|
+
неделек: "week",
|
|
243
|
+
месяц: "month",
|
|
244
|
+
месяце: "month",
|
|
245
|
+
месяцев: "month",
|
|
246
|
+
месяца: "month",
|
|
247
|
+
квартал: "quarter",
|
|
248
|
+
квартале: "quarter",
|
|
249
|
+
кварталов: "quarter",
|
|
250
|
+
год: "year",
|
|
251
|
+
года: "year",
|
|
252
|
+
году: "year",
|
|
253
|
+
годов: "year",
|
|
254
|
+
лет: "year",
|
|
255
|
+
годик: "year",
|
|
256
|
+
годика: "year",
|
|
257
|
+
годиков: "year",
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
//-----------------------------
|
|
261
|
+
|
|
262
|
+
export const NUMBER_PATTERN = `(?:${matchAnyPattern(
|
|
263
|
+
INTEGER_WORD_DICTIONARY
|
|
264
|
+
)}|[0-9]+|[0-9]+\\.[0-9]+|пол|несколько|пар(?:ы|у)|\\s{0,3})`;
|
|
265
|
+
|
|
266
|
+
export function parseNumberPattern(match: string): number {
|
|
267
|
+
const num = match.toLowerCase();
|
|
268
|
+
if (INTEGER_WORD_DICTIONARY[num] !== undefined) {
|
|
269
|
+
return INTEGER_WORD_DICTIONARY[num];
|
|
270
|
+
}
|
|
271
|
+
if (num.match(/несколько/)) {
|
|
272
|
+
return 3;
|
|
273
|
+
} else if (num.match(/пол/)) {
|
|
274
|
+
return 0.5;
|
|
275
|
+
} else if (num.match(/пар/)) {
|
|
276
|
+
return 2;
|
|
277
|
+
} else if (num === "") {
|
|
278
|
+
return 1;
|
|
279
|
+
}
|
|
280
|
+
return parseFloat(num);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
//-----------------------------
|
|
284
|
+
|
|
285
|
+
export const ORDINAL_NUMBER_PATTERN = `(?:${matchAnyPattern(ORDINAL_WORD_DICTIONARY)}|[0-9]{1,2}(?:го|ого|е|ое)?)`;
|
|
286
|
+
export function parseOrdinalNumberPattern(match: string): number {
|
|
287
|
+
let num = match.toLowerCase();
|
|
288
|
+
if (ORDINAL_WORD_DICTIONARY[num] !== undefined) {
|
|
289
|
+
return ORDINAL_WORD_DICTIONARY[num];
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
num = num.replace(/(?:st|nd|rd|th)$/i, "");
|
|
293
|
+
return parseInt(num);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
//-----------------------------
|
|
297
|
+
|
|
298
|
+
const year = "(?:\\s+(?:году|года|год|г|г.))?";
|
|
299
|
+
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}${year}\\s*(?:н.э.|до н.э.|н. э.|до н. э.)|[1-2][0-9]{3}${year}|[5-9][0-9]${year})`;
|
|
300
|
+
export function parseYear(match: string): number {
|
|
301
|
+
if (/(год|года|г|г.)/i.test(match)) {
|
|
302
|
+
match = match.replace(/(год|года|г|г.)/i, "");
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (/(до н.э.|до н. э.)/i.test(match)) {
|
|
306
|
+
//Before Common Era
|
|
307
|
+
match = match.replace(/(до н.э.|до н. э.)/i, "");
|
|
308
|
+
return -parseInt(match);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if (/(н. э.|н.э.)/i.test(match)) {
|
|
312
|
+
//Common Era
|
|
313
|
+
match = match.replace(/(н. э.|н.э.)/i, "");
|
|
314
|
+
return parseInt(match);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const rawYearNumber = parseInt(match);
|
|
318
|
+
return findMostLikelyADYear(rawYearNumber);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
//-----------------------------
|
|
322
|
+
|
|
323
|
+
const SINGLE_TIME_UNIT_PATTERN = `(${NUMBER_PATTERN})\\s{0,3}(${matchAnyPattern(TIME_UNIT_DICTIONARY)})`;
|
|
324
|
+
const SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, "i");
|
|
325
|
+
|
|
326
|
+
export const TIME_UNITS_PATTERN = repeatedTimeunitPattern(`(?:(?:около|примерно)\\s{0,3})?`, SINGLE_TIME_UNIT_PATTERN);
|
|
327
|
+
|
|
328
|
+
export function parseTimeUnits(timeunitText): TimeUnits {
|
|
329
|
+
const fragments = {};
|
|
330
|
+
let remainingText = timeunitText;
|
|
331
|
+
let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
|
|
332
|
+
while (match) {
|
|
333
|
+
collectDateTimeFragment(fragments, match);
|
|
334
|
+
remainingText = remainingText.substring(match[0].length).trim();
|
|
335
|
+
match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
|
|
336
|
+
}
|
|
337
|
+
return fragments;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function collectDateTimeFragment(fragments, match) {
|
|
341
|
+
const num = parseNumberPattern(match[1]);
|
|
342
|
+
const unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()];
|
|
343
|
+
fragments[unit] = num;
|
|
344
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chrono components for Russian support (*parsers*, *refiners*, and *configuration*)
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import RUTimeUnitWithinFormatParser from "./parsers/RUTimeUnitWithinFormatParser";
|
|
8
|
+
import RUMonthNameLittleEndianParser from "./parsers/RUMonthNameLittleEndianParser";
|
|
9
|
+
import RUMonthNameParser from "./parsers/RUMonthNameParser";
|
|
10
|
+
import RUTimeExpressionParser from "./parsers/RUTimeExpressionParser";
|
|
11
|
+
import RUTimeUnitAgoFormatParser from "./parsers/RUTimeUnitAgoFormatParser";
|
|
12
|
+
import RUMergeDateRangeRefiner from "./refiners/RUMergeDateRangeRefiner";
|
|
13
|
+
import RUMergeDateTimeRefiner from "./refiners/RUMergeDateTimeRefiner";
|
|
14
|
+
|
|
15
|
+
import { includeCommonConfiguration } from "../../configurations";
|
|
16
|
+
import RUCasualDateParser from "./parsers/RUCasualDateParser";
|
|
17
|
+
import RUCasualTimeParser from "./parsers/RUCasualTimeParser";
|
|
18
|
+
import RUWeekdayParser from "./parsers/RUWeekdayParser";
|
|
19
|
+
import RURelativeDateFormatParser from "./parsers/RURelativeDateFormatParser";
|
|
20
|
+
|
|
21
|
+
import { ParsedResult, ParsingOption } from "../../index";
|
|
22
|
+
import { Chrono, Configuration } from "../../chrono";
|
|
23
|
+
import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
|
|
24
|
+
import RUTimeUnitCasualRelativeFormatParser from "./parsers/RUTimeUnitCasualRelativeFormatParser";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Chrono object configured for parsing *casual* Russian
|
|
28
|
+
*/
|
|
29
|
+
export const casual = new Chrono(createCasualConfiguration());
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Chrono object configured for parsing *strict* Russian
|
|
33
|
+
*/
|
|
34
|
+
export const strict = new Chrono(createConfiguration(true));
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A shortcut for ru.casual.parse()
|
|
38
|
+
*/
|
|
39
|
+
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
40
|
+
return casual.parse(text, ref, option);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A shortcut for ru.casual.parseDate()
|
|
45
|
+
*/
|
|
46
|
+
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
47
|
+
return casual.parseDate(text, ref, option);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Create a default *casual* {@Link Configuration} for Russian chrono.
|
|
52
|
+
* It calls {@Link createConfiguration} and includes additional parsers.
|
|
53
|
+
*/
|
|
54
|
+
export function createCasualConfiguration(): Configuration {
|
|
55
|
+
const option = createConfiguration(false);
|
|
56
|
+
option.parsers.unshift(new RUCasualDateParser());
|
|
57
|
+
option.parsers.unshift(new RUCasualTimeParser());
|
|
58
|
+
option.parsers.unshift(new RUMonthNameParser());
|
|
59
|
+
option.parsers.unshift(new RURelativeDateFormatParser());
|
|
60
|
+
option.parsers.unshift(new RUTimeUnitCasualRelativeFormatParser());
|
|
61
|
+
return option;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Create a default {@Link Configuration} for Russian chrono
|
|
66
|
+
*
|
|
67
|
+
* @param strictMode If the timeunit mentioning should be strict, not casual
|
|
68
|
+
*/
|
|
69
|
+
export function createConfiguration(strictMode = true): Configuration {
|
|
70
|
+
return includeCommonConfiguration(
|
|
71
|
+
{
|
|
72
|
+
parsers: [
|
|
73
|
+
new SlashDateFormatParser(true),
|
|
74
|
+
new RUTimeUnitWithinFormatParser(),
|
|
75
|
+
new RUMonthNameLittleEndianParser(),
|
|
76
|
+
new RUWeekdayParser(),
|
|
77
|
+
new RUTimeExpressionParser(strictMode),
|
|
78
|
+
new RUTimeUnitAgoFormatParser(),
|
|
79
|
+
],
|
|
80
|
+
refiners: [new RUMergeDateTimeRefiner(), new RUMergeDateRangeRefiner()],
|
|
81
|
+
},
|
|
82
|
+
strictMode
|
|
83
|
+
);
|
|
84
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ParsingContext } from "../../../chrono";
|
|
2
|
+
import { ParsingComponents, ParsingResult } from "../../../results";
|
|
3
|
+
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
4
|
+
import * as references from "../../../common/casualReferences";
|
|
5
|
+
import { REGEX_PARTS } from "../constants";
|
|
6
|
+
|
|
7
|
+
const PATTERN = new RegExp(
|
|
8
|
+
`(?:с|со)?\\s*(сегодня|вчера|завтра|послезавтра|позавчера)${REGEX_PARTS.rightBoundary}`,
|
|
9
|
+
REGEX_PARTS.flags
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
export default class RUCasualDateParser extends AbstractParserWithWordBoundaryChecking {
|
|
13
|
+
patternLeftBoundary(): string {
|
|
14
|
+
return REGEX_PARTS.leftBoundary;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
innerPattern(context: ParsingContext): RegExp {
|
|
18
|
+
return PATTERN;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult {
|
|
22
|
+
const lowerText = match[1].toLowerCase();
|
|
23
|
+
const component = context.createParsingComponents();
|
|
24
|
+
|
|
25
|
+
switch (lowerText) {
|
|
26
|
+
case "сегодня":
|
|
27
|
+
return references.today(context.reference);
|
|
28
|
+
|
|
29
|
+
case "вчера":
|
|
30
|
+
return references.yesterday(context.reference);
|
|
31
|
+
|
|
32
|
+
case "завтра":
|
|
33
|
+
return references.tomorrow(context.reference);
|
|
34
|
+
|
|
35
|
+
case "послезавтра":
|
|
36
|
+
return references.theDayAfter(context.reference, 2);
|
|
37
|
+
|
|
38
|
+
case "позавчера":
|
|
39
|
+
return references.theDayBefore(context.reference, 2);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return component;
|
|
43
|
+
}
|
|
44
|
+
}
|