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 @@
|
|
|
1
|
+
{"version":3,"file":"dayjs.js","sourceRoot":"","sources":["../../src/utils/dayjs.ts"],"names":[],"mappings":";;;AAEA,oCAAoC;AAEpC,SAAgB,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1C,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAJD,4CAIC;AAED,SAAgB,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAJD,8CAIC;AAED,SAAgB,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE;QAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;SAAM;QACH,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;AACL,CAAC;AAVD,8CAUC;AAED,SAAgB,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC;AALD,4CAKC"}
|
package/dist/utils/pattern.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/utils/pattern.ts"],"names":[],"mappings":";;;AAEA,SAAgB,uBAAuB,CAAC,MAAc,EAAE,qBAA6B;IACjF,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzF,OAAO,GAAG,MAAM,GAAG,8BAA8B,wBAAwB,8BAA8B,SAAS,CAAC;AACrH,CAAC;AAHD,0DAGC;AAED,SAAgB,YAAY,CAAC,UAA0B;IACnD,IAAI,IAAc,CAAC;IACnB,IAAI,UAAU,YAAY,KAAK,EAAE;QAC7B,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;KAC1B;SAAM,IAAI,UAAU,YAAY,GAAG,EAAE;QAClC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAE,UAAmC,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;SAAM;QACH,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAXD,oCAWC;AAED,SAAgB,eAAe,CAAC,UAA0B;IAGtD,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC;SACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnC,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE3B,OAAO,MAAM,WAAW,GAAG,CAAC;AAChC,CAAC;AATD,0CASC"}
|
package/dist/utils/timeunits.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeunits.js","sourceRoot":"","sources":["../../src/utils/timeunits.ts"],"names":[],"mappings":";;;AAKA,SAAgB,gBAAgB,CAAC,SAAoB;IACjD,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;QAEzB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACnC;IAED,OAAO,QAAqB,CAAC;AACjC,CAAC;AARD,4CAQC;AAED,SAAgB,mBAAmB,CAAC,UAA6B,EAAE,SAAoB;IACnF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAElC,IAAI,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;QAEzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAgB,CAAC,CAAC;KACrD;IAED,IAAI,KAAK,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,EAAE;QAC9G,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACrC;IAED,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,EAAE;QACvE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACrC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAtBD,kDAsBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ParsingComponents, ReferenceWithTimezone } from "../results";
|
|
2
2
|
import dayjs from "dayjs";
|
|
3
|
-
import { assignSimilarDate, assignSimilarTime,
|
|
3
|
+
import { assignSimilarDate, assignSimilarTime, implySimilarTime } from "../utils/dayjs";
|
|
4
4
|
import { Meridiem } from "../index";
|
|
5
5
|
|
|
6
6
|
export function now(reference: ReferenceWithTimezone): ParsingComponents {
|
|
@@ -26,21 +26,26 @@ export function today(reference: ReferenceWithTimezone): ParsingComponents {
|
|
|
26
26
|
* The previous day. Imply the same time.
|
|
27
27
|
*/
|
|
28
28
|
export function yesterday(reference: ReferenceWithTimezone): ParsingComponents {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return component;
|
|
29
|
+
return theDayBefore(reference, 1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function theDayBefore(reference: ReferenceWithTimezone, numDay: number): ParsingComponents {
|
|
33
|
+
return theDayAfter(reference, -numDay);
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
/**
|
|
38
37
|
* The following day with dayjs.assignTheNextDay()
|
|
39
38
|
*/
|
|
40
39
|
export function tomorrow(reference: ReferenceWithTimezone): ParsingComponents {
|
|
41
|
-
|
|
40
|
+
return theDayAfter(reference, 1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function theDayAfter(reference: ReferenceWithTimezone, nDays: number): ParsingComponents {
|
|
44
|
+
let targetDate = dayjs(reference.instant);
|
|
42
45
|
const component = new ParsingComponents(reference, {});
|
|
43
|
-
|
|
46
|
+
targetDate = targetDate.add(nDays, "day");
|
|
47
|
+
assignSimilarDate(component, targetDate);
|
|
48
|
+
implySimilarTime(component, targetDate);
|
|
44
49
|
return component;
|
|
45
50
|
}
|
|
46
51
|
|
|
@@ -52,3 +57,53 @@ export function tonight(reference: ReferenceWithTimezone, implyHour = 22): Parsi
|
|
|
52
57
|
assignSimilarDate(component, targetDate);
|
|
53
58
|
return component;
|
|
54
59
|
}
|
|
60
|
+
|
|
61
|
+
export function lastNight(reference: ReferenceWithTimezone, implyHour = 0): ParsingComponents {
|
|
62
|
+
let targetDate = dayjs(reference.instant);
|
|
63
|
+
const component = new ParsingComponents(reference, {});
|
|
64
|
+
if (targetDate.hour() < 6) {
|
|
65
|
+
targetDate = targetDate.add(-1, "day");
|
|
66
|
+
}
|
|
67
|
+
assignSimilarDate(component, targetDate);
|
|
68
|
+
component.imply("hour", implyHour);
|
|
69
|
+
return component;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function evening(reference: ReferenceWithTimezone, implyHour = 20): ParsingComponents {
|
|
73
|
+
const component = new ParsingComponents(reference, {});
|
|
74
|
+
component.imply("meridiem", Meridiem.PM);
|
|
75
|
+
component.imply("hour", implyHour);
|
|
76
|
+
return component;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function yesterdayEvening(reference: ReferenceWithTimezone, implyHour = 20): ParsingComponents {
|
|
80
|
+
let targetDate = dayjs(reference.instant);
|
|
81
|
+
const component = new ParsingComponents(reference, {});
|
|
82
|
+
targetDate = targetDate.add(-1, "day");
|
|
83
|
+
assignSimilarDate(component, targetDate);
|
|
84
|
+
component.imply("hour", implyHour);
|
|
85
|
+
component.imply("meridiem", Meridiem.PM);
|
|
86
|
+
return component;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function midnight(reference: ReferenceWithTimezone): ParsingComponents {
|
|
90
|
+
const component = new ParsingComponents(reference, {});
|
|
91
|
+
component.imply("hour", 0);
|
|
92
|
+
component.imply("minute", 0);
|
|
93
|
+
component.imply("second", 0);
|
|
94
|
+
return component;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function morning(reference: ReferenceWithTimezone, implyHour = 6): ParsingComponents {
|
|
98
|
+
const component = new ParsingComponents(reference, {});
|
|
99
|
+
component.imply("meridiem", Meridiem.AM);
|
|
100
|
+
component.imply("hour", implyHour);
|
|
101
|
+
return component;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function noon(reference: ReferenceWithTimezone): ParsingComponents {
|
|
105
|
+
const component = new ParsingComponents(reference, {});
|
|
106
|
+
component.imply("meridiem", Meridiem.AM);
|
|
107
|
+
component.imply("hour", 12);
|
|
108
|
+
return component;
|
|
109
|
+
}
|
|
@@ -15,13 +15,17 @@ export abstract class AbstractParserWithWordBoundaryChecking implements Parser {
|
|
|
15
15
|
private cachedInnerPattern?: RegExp = null;
|
|
16
16
|
private cachedPattern?: RegExp = null;
|
|
17
17
|
|
|
18
|
+
patternLeftBoundary(): string {
|
|
19
|
+
return `(\\W|^)`;
|
|
20
|
+
}
|
|
21
|
+
|
|
18
22
|
pattern(context: ParsingContext): RegExp {
|
|
19
23
|
const innerPattern = this.innerPattern(context);
|
|
20
24
|
if (innerPattern == this.cachedInnerPattern) {
|
|
21
25
|
return this.cachedPattern;
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
this.cachedPattern = new RegExp(
|
|
28
|
+
this.cachedPattern = new RegExp(`${this.patternLeftBoundary()}${innerPattern.source}`, innerPattern.flags);
|
|
25
29
|
this.cachedInnerPattern = innerPattern;
|
|
26
30
|
return this.cachedPattern;
|
|
27
31
|
}
|
|
@@ -3,23 +3,23 @@ import { ParsingComponents, ParsingResult } from "../../results";
|
|
|
3
3
|
import { Meridiem } from "../../index";
|
|
4
4
|
|
|
5
5
|
// prettier-ignore
|
|
6
|
-
function primaryTimePattern(primaryPrefix: string, primarySuffix: string) {
|
|
6
|
+
function primaryTimePattern(leftBoundary: string, primaryPrefix: string, primarySuffix: string, flags: string) {
|
|
7
7
|
return new RegExp(
|
|
8
|
-
|
|
8
|
+
`${leftBoundary}` +
|
|
9
9
|
`${primaryPrefix}` +
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
`(\\d{1,4})` +
|
|
11
|
+
`(?:` +
|
|
12
|
+
`(?:\\.|:|:)` +
|
|
13
|
+
`(\\d{1,2})` +
|
|
14
|
+
`(?:` +
|
|
15
|
+
`(?::|:)` +
|
|
16
|
+
`(\\d{2})` +
|
|
17
|
+
`(?:\\.(\\d{1,6}))?` +
|
|
18
|
+
`)?` +
|
|
19
|
+
`)?` +
|
|
20
|
+
`(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?` +
|
|
21
21
|
`${primarySuffix}`,
|
|
22
|
-
|
|
22
|
+
flags
|
|
23
23
|
);
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -27,16 +27,16 @@ function primaryTimePattern(primaryPrefix: string, primarySuffix: string) {
|
|
|
27
27
|
function followingTimePatten(followingPhase: string, followingSuffix: string) {
|
|
28
28
|
return new RegExp(
|
|
29
29
|
`^(${followingPhase})` +
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
`(\\d{1,4})` +
|
|
31
|
+
`(?:` +
|
|
32
|
+
`(?:\\.|\\:|\\:)` +
|
|
33
|
+
`(\\d{1,2})` +
|
|
34
|
+
`(?:` +
|
|
35
|
+
`(?:\\.|\\:|\\:)` +
|
|
36
|
+
`(\\d{1,2})(?:\\.(\\d{1,6}))?` +
|
|
37
|
+
`)?` +
|
|
38
|
+
`)?` +
|
|
39
|
+
`(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?` +
|
|
40
40
|
`${followingSuffix}`,
|
|
41
41
|
"i"
|
|
42
42
|
);
|
|
@@ -57,12 +57,20 @@ export abstract class AbstractTimeExpressionParser implements Parser {
|
|
|
57
57
|
this.strictMode = strictMode;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
patternFlags(): string {
|
|
61
|
+
return "i";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
primaryPatternLeftBoundary(): string {
|
|
65
|
+
return `(^|\\s|T|\\b)`;
|
|
66
|
+
}
|
|
67
|
+
|
|
60
68
|
primarySuffix(): string {
|
|
61
|
-
return
|
|
69
|
+
return `(?=\\W|$)`;
|
|
62
70
|
}
|
|
63
71
|
|
|
64
72
|
followingSuffix(): string {
|
|
65
|
-
return
|
|
73
|
+
return `(?=\\W|$)`;
|
|
66
74
|
}
|
|
67
75
|
|
|
68
76
|
pattern(context: ParsingContext): RegExp {
|
|
@@ -84,6 +92,12 @@ export abstract class AbstractTimeExpressionParser implements Parser {
|
|
|
84
92
|
const remainingText = context.text.substring(match.index);
|
|
85
93
|
const followingPattern = this.getFollowingTimePatternThroughCache();
|
|
86
94
|
const followingMatch = followingPattern.exec(remainingText);
|
|
95
|
+
|
|
96
|
+
// Pattern "456-12", "2022-12" should not be time without proper context
|
|
97
|
+
if (text.match(/^\d{3,4}/) && followingMatch && followingMatch[0].match(/^\s*([+-])\s*\d{2,4}$/)) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
87
101
|
if (
|
|
88
102
|
!followingMatch ||
|
|
89
103
|
// Pattern "YY.YY -XXXX" is more like timezone offset
|
|
@@ -305,11 +319,16 @@ export abstract class AbstractTimeExpressionParser implements Parser {
|
|
|
305
319
|
}
|
|
306
320
|
|
|
307
321
|
private checkAndReturnWithoutFollowingPattern(result) {
|
|
308
|
-
// Single digit (e.g "1") should not be counted as time expression
|
|
322
|
+
// Single digit (e.g "1") should not be counted as time expression (without proper context)
|
|
309
323
|
if (result.text.match(/^\d$/)) {
|
|
310
324
|
return null;
|
|
311
325
|
}
|
|
312
326
|
|
|
327
|
+
// Three or more digit (e.g. "203", "2014") should not be counted as time expression (without proper context)
|
|
328
|
+
if (result.text.match(/^\d\d\d+$/)) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
|
|
313
332
|
// Instead of "am/pm", it ends with "a" or "p" (e.g "1a", "123p"), this seems unlikely
|
|
314
333
|
if (result.text.match(/\d[apAP]$/)) {
|
|
315
334
|
return null;
|
|
@@ -383,7 +402,12 @@ export abstract class AbstractTimeExpressionParser implements Parser {
|
|
|
383
402
|
return this.cachedPrimaryTimePattern;
|
|
384
403
|
}
|
|
385
404
|
|
|
386
|
-
this.cachedPrimaryTimePattern = primaryTimePattern(
|
|
405
|
+
this.cachedPrimaryTimePattern = primaryTimePattern(
|
|
406
|
+
this.primaryPatternLeftBoundary(),
|
|
407
|
+
primaryPrefix,
|
|
408
|
+
primarySuffix,
|
|
409
|
+
this.patternFlags()
|
|
410
|
+
);
|
|
387
411
|
this.cachedPrimaryPrefix = primaryPrefix;
|
|
388
412
|
this.cachedPrimarySuffix = primarySuffix;
|
|
389
413
|
return this.cachedPrimaryTimePattern;
|
|
@@ -221,7 +221,9 @@ export default class ExtractTimezoneAbbrRefiner implements Refiner {
|
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
context.debug(() => {
|
|
224
|
-
console.log(
|
|
224
|
+
console.log(
|
|
225
|
+
`Extracting timezone: '${timezoneAbbr}' into: ${extractedTimezoneOffset} for: ${result.start}`
|
|
226
|
+
);
|
|
225
227
|
});
|
|
226
228
|
|
|
227
229
|
const currentTimezoneOffset = result.start.get("timezoneOffset");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParsingContext, Refiner } from "../../chrono";
|
|
2
2
|
import { ParsingResult } from "../../results";
|
|
3
3
|
|
|
4
|
-
const TIMEZONE_OFFSET_PATTERN = new RegExp("^\\s*(
|
|
4
|
+
const TIMEZONE_OFFSET_PATTERN = new RegExp("^\\s*(?:\\(?(?:GMT|UTC)\\s?)?([+-])(\\d{1,2})(?::?(\\d{2}))?\\)?", "i");
|
|
5
5
|
const TIMEZONE_OFFSET_SIGN_GROUP = 1;
|
|
6
6
|
const TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 2;
|
|
7
7
|
const TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 3;
|
|
@@ -26,6 +26,10 @@ export default class ExtractTimezoneOffsetRefiner implements Refiner {
|
|
|
26
26
|
const hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]);
|
|
27
27
|
const minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP] || "0");
|
|
28
28
|
let timezoneOffset = hourOffset * 60 + minuteOffset;
|
|
29
|
+
// No timezones have offsets greater than 14 hours, so disregard this match
|
|
30
|
+
if (timezoneOffset > 14 * 60) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
29
33
|
if (match[TIMEZONE_OFFSET_SIGN_GROUP] === "-") {
|
|
30
34
|
timezoneOffset = -timezoneOffset;
|
|
31
35
|
}
|
package/src/index.ts
CHANGED
|
@@ -106,7 +106,8 @@ import * as ja from "./locales/ja";
|
|
|
106
106
|
import * as pt from "./locales/pt";
|
|
107
107
|
import * as nl from "./locales/nl";
|
|
108
108
|
import * as zh from "./locales/zh";
|
|
109
|
-
|
|
109
|
+
import * as ru from "./locales/ru";
|
|
110
|
+
export { de, fr, ja, pt, nl, zh, ru };
|
|
110
111
|
|
|
111
112
|
/**
|
|
112
113
|
* A shortcut for {@link en | chrono.en.strict}
|
|
@@ -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";
|
|
@@ -22,9 +22,12 @@ export const WEEKDAY_DICTIONARY: { [word: string]: number } = {
|
|
|
22
22
|
|
|
23
23
|
export const MONTH_DICTIONARY: { [word: string]: number } = {
|
|
24
24
|
"januar": 1,
|
|
25
|
+
"jänner": 1,
|
|
26
|
+
"janner": 1,
|
|
25
27
|
"jan": 1,
|
|
26
28
|
"jan.": 1,
|
|
27
29
|
"februar": 2,
|
|
30
|
+
"feber": 2,
|
|
28
31
|
"feb": 2,
|
|
29
32
|
"feb.": 2,
|
|
30
33
|
"märz": 3,
|
|
@@ -64,6 +67,10 @@ export const MONTH_DICTIONARY: { [word: string]: number } = {
|
|
|
64
67
|
|
|
65
68
|
export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
|
|
66
69
|
"eins": 1,
|
|
70
|
+
"eine": 1,
|
|
71
|
+
"einem": 1,
|
|
72
|
+
"einen": 1,
|
|
73
|
+
"einer": 1,
|
|
67
74
|
"zwei": 2,
|
|
68
75
|
"drei": 3,
|
|
69
76
|
"vier": 4,
|
|
@@ -79,29 +86,37 @@ export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
|
|
|
79
86
|
"zwoelf": 12,
|
|
80
87
|
};
|
|
81
88
|
|
|
82
|
-
export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType } = {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType | QUnitType } = {
|
|
90
|
+
sek: "second",
|
|
91
|
+
sekunde: "second",
|
|
92
|
+
sekunden: "second",
|
|
86
93
|
min: "minute",
|
|
87
|
-
mins: "minute",
|
|
88
94
|
minute: "minute",
|
|
89
|
-
|
|
95
|
+
minuten: "minute",
|
|
90
96
|
h: "hour",
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
std: "hour",
|
|
98
|
+
stunde: "hour",
|
|
99
|
+
stunden: "hour",
|
|
100
|
+
tag: "d",
|
|
101
|
+
tage: "d",
|
|
102
|
+
tagen: "d",
|
|
103
|
+
woche: "week",
|
|
104
|
+
wochen: "week",
|
|
105
|
+
monat: "month",
|
|
106
|
+
monate: "month",
|
|
107
|
+
monaten: "month",
|
|
108
|
+
monats: "month",
|
|
109
|
+
quartal: "quarter",
|
|
110
|
+
quartals: "quarter",
|
|
111
|
+
quartale: "quarter",
|
|
112
|
+
quartalen: "quarter",
|
|
113
|
+
a: "year",
|
|
114
|
+
j: "year",
|
|
115
|
+
jr: "year",
|
|
116
|
+
jahr: "year",
|
|
117
|
+
jahre: "year",
|
|
118
|
+
jahren: "year",
|
|
119
|
+
jahres: "year",
|
|
105
120
|
};
|
|
106
121
|
|
|
107
122
|
//-----------------------------
|
|
@@ -131,7 +146,7 @@ export function parseNumberPattern(match: string): number {
|
|
|
131
146
|
|
|
132
147
|
//-----------------------------
|
|
133
148
|
|
|
134
|
-
export const YEAR_PATTERN = `(?:[0-9]{1,4}(?:\\s*[vn]\\.?\\s*C(?:hr)
|
|
149
|
+
export const YEAR_PATTERN = `(?:[0-9]{1,4}(?:\\s*[vn]\\.?\\s*(?:C(?:hr)?|(?:u\\.?|d\\.?(?:\\s*g\\.?)?)?\\s*Z)\\.?|\\s*(?:u\\.?|d\\.?(?:\\s*g\\.)?)\\s*Z\\.?)?)`;
|
|
135
150
|
export function parseYear(match: string): number {
|
|
136
151
|
if (/v/i.test(match)) {
|
|
137
152
|
// v.Chr.
|
|
@@ -143,6 +158,11 @@ export function parseYear(match: string): number {
|
|
|
143
158
|
return parseInt(match.replace(/[^0-9]+/gi, ""));
|
|
144
159
|
}
|
|
145
160
|
|
|
161
|
+
if (/z/i.test(match)) {
|
|
162
|
+
// n.Chr. as "uZ" or "dgZ"
|
|
163
|
+
return parseInt(match.replace(/[^0-9]+/gi, ""));
|
|
164
|
+
}
|
|
165
|
+
|
|
146
166
|
const rawYearNumber = parseInt(match);
|
|
147
167
|
return findMostLikelyADYear(rawYearNumber);
|
|
148
168
|
}
|
package/src/locales/de/index.ts
CHANGED
|
@@ -5,11 +5,13 @@ import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
|
|
|
5
5
|
import ISOFormatParser from "../../common/parsers/ISOFormatParser";
|
|
6
6
|
import DETimeExpressionParser from "./parsers/DETimeExpressionParser";
|
|
7
7
|
import DEWeekdayParser from "./parsers/DEWeekdayParser";
|
|
8
|
+
import DESpecificTimeExpressionParser from "./parsers/DESpecificTimeExpressionParser";
|
|
8
9
|
import DEMergeDateRangeRefiner from "./refiners/DEMergeDateRangeRefiner";
|
|
9
10
|
import DEMergeDateTimeRefiner from "./refiners/DEMergeDateTimeRefiner";
|
|
10
11
|
import DECasualDateParser from "./parsers/DECasualDateParser";
|
|
11
12
|
import DECasualTimeParser from "./parsers/DECasualTimeParser";
|
|
12
13
|
import DEMonthNameLittleEndianParser from "./parsers/DEMonthNameLittleEndianParser";
|
|
14
|
+
import DETimeUnitRelativeFormatParser from "./parsers/DETimeUnitRelativeFormatParser";
|
|
13
15
|
|
|
14
16
|
// Shortcuts
|
|
15
17
|
export const casual = new Chrono(createCasualConfiguration());
|
|
@@ -27,6 +29,7 @@ export function createCasualConfiguration(littleEndian = true): Configuration {
|
|
|
27
29
|
const option = createConfiguration(false, littleEndian);
|
|
28
30
|
option.parsers.unshift(new DECasualTimeParser());
|
|
29
31
|
option.parsers.unshift(new DECasualDateParser());
|
|
32
|
+
option.parsers.unshift(new DETimeUnitRelativeFormatParser());
|
|
30
33
|
return option;
|
|
31
34
|
}
|
|
32
35
|
|
|
@@ -37,6 +40,7 @@ export function createConfiguration(strictMode = true, littleEndian = true): Con
|
|
|
37
40
|
new ISOFormatParser(),
|
|
38
41
|
new SlashDateFormatParser(littleEndian),
|
|
39
42
|
new DETimeExpressionParser(),
|
|
43
|
+
new DESpecificTimeExpressionParser(),
|
|
40
44
|
new DEMonthNameLittleEndianParser(),
|
|
41
45
|
new DEWeekdayParser(),
|
|
42
46
|
],
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Parser, ParsingContext } from "../../../chrono";
|
|
2
|
+
import { ParsingComponents, ParsingResult } from "../../../results";
|
|
3
|
+
import { Meridiem } from "../../../index";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 8h10m00s
|
|
7
|
+
* 8h10m00
|
|
8
|
+
* 8h10
|
|
9
|
+
* 8 Uhr
|
|
10
|
+
* 8h10m00s Uhr
|
|
11
|
+
* 8:10 Uhr
|
|
12
|
+
*/
|
|
13
|
+
const FIRST_REG_PATTERN = new RegExp(
|
|
14
|
+
"(^|\\s|T)" +
|
|
15
|
+
"(?:(?:um|von)\\s*)?" +
|
|
16
|
+
"(\\d{1,2})(?:h|:)?" +
|
|
17
|
+
"(?:(\\d{1,2})(?:m|:)?)?" +
|
|
18
|
+
"(?:(\\d{1,2})(?:s)?)?" +
|
|
19
|
+
"(?:\\s*Uhr)?" +
|
|
20
|
+
"(?:\\s*(morgens|vormittags|nachmittags|abends|nachts|am\\s+(?:Morgen|Vormittag|Nachmittag|Abend)|in\\s+der\\s+Nacht))?" +
|
|
21
|
+
"(?=\\W|$)",
|
|
22
|
+
"i"
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const SECOND_REG_PATTERN = new RegExp(
|
|
26
|
+
"^\\s*(\\-|\\–|\\~|\\〜|bis(?:\\s+um)?|\\?)\\s*" +
|
|
27
|
+
"(\\d{1,2})(?:h|:)?" +
|
|
28
|
+
"(?:(\\d{1,2})(?:m|:)?)?" +
|
|
29
|
+
"(?:(\\d{1,2})(?:s)?)?" +
|
|
30
|
+
"(?:\\s*Uhr)?" +
|
|
31
|
+
"(?:\\s*(morgens|vormittags|nachmittags|abends|nachts|am\\s+(?:Morgen|Vormittag|Nachmittag|Abend)|in\\s+der\\s+Nacht))?" +
|
|
32
|
+
"(?=\\W|$)",
|
|
33
|
+
"i"
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const HOUR_GROUP = 2;
|
|
37
|
+
const MINUTE_GROUP = 3;
|
|
38
|
+
const SECOND_GROUP = 4;
|
|
39
|
+
const AM_PM_HOUR_GROUP = 5;
|
|
40
|
+
|
|
41
|
+
export default class DESpecificTimeExpressionParser implements Parser {
|
|
42
|
+
pattern(context): RegExp {
|
|
43
|
+
return FIRST_REG_PATTERN;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult | null {
|
|
47
|
+
const result = context.createParsingResult(match.index + match[1].length, match[0].substring(match[1].length));
|
|
48
|
+
|
|
49
|
+
// This looks more like a year e.g. 2020
|
|
50
|
+
if (result.text.match(/^\d{4}$/)) {
|
|
51
|
+
match.index += match[0].length;
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
result.start = DESpecificTimeExpressionParser.extractTimeComponent(result.start.clone(), match);
|
|
56
|
+
if (!result.start) {
|
|
57
|
+
match.index += match[0].length;
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const remainingText = context.text.substring(match.index + match[0].length);
|
|
62
|
+
const secondMatch = SECOND_REG_PATTERN.exec(remainingText);
|
|
63
|
+
if (secondMatch) {
|
|
64
|
+
result.end = DESpecificTimeExpressionParser.extractTimeComponent(result.start.clone(), secondMatch);
|
|
65
|
+
if (result.end) {
|
|
66
|
+
result.text += secondMatch[0];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private static extractTimeComponent(
|
|
74
|
+
extractingComponents: ParsingComponents,
|
|
75
|
+
match: RegExpMatchArray
|
|
76
|
+
): ParsingComponents | null {
|
|
77
|
+
let hour = 0;
|
|
78
|
+
let minute = 0;
|
|
79
|
+
let meridiem = null;
|
|
80
|
+
|
|
81
|
+
// ----- Hours
|
|
82
|
+
hour = parseInt(match[HOUR_GROUP]);
|
|
83
|
+
|
|
84
|
+
// ----- Minutes
|
|
85
|
+
if (match[MINUTE_GROUP] != null) {
|
|
86
|
+
minute = parseInt(match[MINUTE_GROUP]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (minute >= 60 || hour > 24) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (hour >= 12) {
|
|
94
|
+
meridiem = Meridiem.PM;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ----- AM & PM
|
|
98
|
+
if (match[AM_PM_HOUR_GROUP] != null) {
|
|
99
|
+
if (hour > 12) return null;
|
|
100
|
+
const ampm = match[AM_PM_HOUR_GROUP].toLowerCase();
|
|
101
|
+
if (ampm.match(/morgen|vormittag/)) {
|
|
102
|
+
meridiem = Meridiem.AM;
|
|
103
|
+
if (hour == 12) {
|
|
104
|
+
hour = 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (ampm.match(/nachmittag|abend/)) {
|
|
109
|
+
meridiem = Meridiem.PM;
|
|
110
|
+
if (hour != 12) {
|
|
111
|
+
hour += 12;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (ampm.match(/nacht/)) {
|
|
116
|
+
if (hour == 12) {
|
|
117
|
+
meridiem = Meridiem.AM;
|
|
118
|
+
hour = 0;
|
|
119
|
+
} else if (hour < 6) {
|
|
120
|
+
meridiem = Meridiem.AM;
|
|
121
|
+
} else {
|
|
122
|
+
meridiem = Meridiem.PM;
|
|
123
|
+
hour += 12;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
extractingComponents.assign("hour", hour);
|
|
129
|
+
extractingComponents.assign("minute", minute);
|
|
130
|
+
if (meridiem !== null) {
|
|
131
|
+
extractingComponents.assign("meridiem", meridiem);
|
|
132
|
+
} else {
|
|
133
|
+
if (hour < 12) {
|
|
134
|
+
extractingComponents.imply("meridiem", Meridiem.AM);
|
|
135
|
+
} else {
|
|
136
|
+
extractingComponents.imply("meridiem", Meridiem.PM);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// ----- Second
|
|
141
|
+
if (match[SECOND_GROUP] != null) {
|
|
142
|
+
const second = parseInt(match[SECOND_GROUP]);
|
|
143
|
+
if (second >= 60) return null;
|
|
144
|
+
|
|
145
|
+
extractingComponents.assign("second", second);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return extractingComponents;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";
|
|
2
2
|
import { ParsingComponents } from "../../../results";
|
|
3
3
|
import { ParsingContext } from "../../../chrono";
|
|
4
|
-
import { Meridiem } from "../../../index";
|
|
5
4
|
|
|
6
5
|
export default class DETimeExpressionParser extends AbstractTimeExpressionParser {
|
|
7
6
|
primaryPrefix(): string {
|
|
@@ -12,30 +11,12 @@ export default class DETimeExpressionParser extends AbstractTimeExpressionParser
|
|
|
12
11
|
return "\\s*(?:\\-|\\–|\\~|\\〜|bis)\\s*";
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
primarySuffix(): string {
|
|
16
|
-
return "(?:\\s*uhr)?(?:\\s*(?:morgens|vormittags|nachmittags|abends|nachts))?(?=\\W|$)";
|
|
17
|
-
}
|
|
18
|
-
|
|
19
14
|
extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | null {
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
components.assign("meridiem", Meridiem.AM);
|
|
24
|
-
const hour = components.get("hour");
|
|
25
|
-
if (hour < 12) {
|
|
26
|
-
components.assign("hour", components.get("hour"));
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (match[0].endsWith("nachmittags") || match[0].endsWith("abends") || match[0].endsWith("nachts")) {
|
|
31
|
-
components.assign("meridiem", Meridiem.PM);
|
|
32
|
-
const hour = components.get("hour");
|
|
33
|
-
if (hour < 12) {
|
|
34
|
-
components.assign("hour", components.get("hour") + 12);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
15
|
+
// This looks more like a year e.g. 2020
|
|
16
|
+
if (match[0].match(/^\s*\d{4}\s*$/)) {
|
|
17
|
+
return null;
|
|
37
18
|
}
|
|
38
19
|
|
|
39
|
-
return
|
|
20
|
+
return super.extractPrimaryTimeComponents(context, match);
|
|
40
21
|
}
|
|
41
22
|
}
|