chrono-node 2.9.0 → 2.9.1
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 +2 -2
- package/dist/cjs/calculation/mergingCalculation.js +4 -1
- package/dist/cjs/calculation/mergingCalculation.js.map +1 -1
- package/dist/cjs/common/refiners/ForwardDateRefiner.js +8 -13
- package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/locales/de/parsers/DETimeUnitRelativeFormatParser.js +1 -1
- package/dist/cjs/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -1
- package/dist/cjs/locales/en/constants.d.ts +1 -1
- package/dist/cjs/locales/en/constants.js +1 -1
- package/dist/cjs/locales/en/parsers/ENWeekdayParser.js +1 -1
- package/dist/cjs/locales/en/parsers/ENWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/es/parsers/ESCasualTimeParser.js +5 -0
- package/dist/cjs/locales/es/parsers/ESCasualTimeParser.js.map +1 -1
- package/dist/cjs/locales/fi/constants.d.ts +24 -0
- package/dist/cjs/locales/fi/constants.js +197 -0
- package/dist/cjs/locales/fi/constants.js.map +1 -0
- package/dist/cjs/locales/fi/index.d.ts +11 -0
- package/dist/cjs/locales/fi/index.js +62 -0
- package/dist/cjs/locales/fi/index.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FICasualDateParser.d.ts +7 -0
- package/dist/cjs/locales/fi/parsers/FICasualDateParser.js +102 -0
- package/dist/cjs/locales/fi/parsers/FICasualDateParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FICasualTimeParser.d.ts +8 -0
- package/dist/cjs/locales/fi/parsers/FICasualTimeParser.js +70 -0
- package/dist/cjs/locales/fi/parsers/FICasualTimeParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FIMonthNameLittleEndianParser.d.ts +7 -0
- package/dist/cjs/locales/fi/parsers/FIMonthNameLittleEndianParser.js +48 -0
- package/dist/cjs/locales/fi/parsers/FIMonthNameLittleEndianParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FITimeExpressionParser.d.ts +8 -0
- package/dist/cjs/locales/fi/parsers/FITimeExpressionParser.js +19 -0
- package/dist/cjs/locales/fi/parsers/FITimeExpressionParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitAgoFormatParser.d.ts +7 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitAgoFormatParser.js +18 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitAgoFormatParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.d.ts +9 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js +39 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitWithinFormatParser.d.ts +7 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitWithinFormatParser.js +16 -0
- package/dist/cjs/locales/fi/parsers/FITimeUnitWithinFormatParser.js.map +1 -0
- package/dist/cjs/locales/fi/parsers/FIWeekdayParser.d.ts +7 -0
- package/dist/cjs/locales/fi/parsers/FIWeekdayParser.js +39 -0
- package/dist/cjs/locales/fi/parsers/FIWeekdayParser.js.map +1 -0
- package/dist/cjs/locales/fi/refiners/FIMergeDateRangeRefiner.d.ts +4 -0
- package/dist/cjs/locales/fi/refiners/FIMergeDateRangeRefiner.js +13 -0
- package/dist/cjs/locales/fi/refiners/FIMergeDateRangeRefiner.js.map +1 -0
- package/dist/cjs/locales/fi/refiners/FIMergeDateTimeRefiner.d.ts +4 -0
- package/dist/cjs/locales/fi/refiners/FIMergeDateTimeRefiner.js +13 -0
- package/dist/cjs/locales/fi/refiners/FIMergeDateTimeRefiner.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js +1 -1
- package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js.map +1 -1
- package/dist/cjs/locales/nl/parsers/NLCasualTimeParser.js +5 -0
- package/dist/cjs/locales/nl/parsers/NLCasualTimeParser.js.map +1 -1
- package/dist/cjs/locales/pt/parsers/PTCasualTimeParser.js +5 -0
- package/dist/cjs/locales/pt/parsers/PTCasualTimeParser.js.map +1 -1
- package/dist/cjs/locales/vi/constants.d.ts +20 -0
- package/dist/cjs/locales/vi/constants.js +107 -0
- package/dist/cjs/locales/vi/constants.js.map +1 -0
- package/dist/cjs/locales/vi/index.d.ts +11 -0
- package/dist/cjs/locales/vi/index.js +73 -0
- package/dist/cjs/locales/vi/index.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VICasualDateParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VICasualDateParser.js +63 -0
- package/dist/cjs/locales/vi/parsers/VICasualDateParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VICasualTimeParser.d.ts +8 -0
- package/dist/cjs/locales/vi/parsers/VICasualTimeParser.js +59 -0
- package/dist/cjs/locales/vi/parsers/VICasualTimeParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VIMonthYearParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VIMonthYearParser.js +30 -0
- package/dist/cjs/locales/vi/parsers/VIMonthYearParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VIStandardParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VIStandardParser.js +39 -0
- package/dist/cjs/locales/vi/parsers/VIStandardParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VITimeExpressionParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VITimeExpressionParser.js +60 -0
- package/dist/cjs/locales/vi/parsers/VITimeExpressionParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitAgoFormatParser.d.ts +9 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitAgoFormatParser.js +24 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitAgoFormatParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js +37 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitLaterFormatParser.d.ts +9 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitLaterFormatParser.js +23 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitLaterFormatParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitWithinFormatParser.d.ts +9 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitWithinFormatParser.js +23 -0
- package/dist/cjs/locales/vi/parsers/VITimeUnitWithinFormatParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VIWeekdayParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VIWeekdayParser.js +36 -0
- package/dist/cjs/locales/vi/parsers/VIWeekdayParser.js.map +1 -0
- package/dist/cjs/locales/vi/parsers/VIYearParser.d.ts +7 -0
- package/dist/cjs/locales/vi/parsers/VIYearParser.js +29 -0
- package/dist/cjs/locales/vi/parsers/VIYearParser.js.map +1 -0
- package/dist/cjs/locales/vi/refiners/VIMergeDateRangeRefiner.d.ts +4 -0
- package/dist/cjs/locales/vi/refiners/VIMergeDateRangeRefiner.js +13 -0
- package/dist/cjs/locales/vi/refiners/VIMergeDateRangeRefiner.js.map +1 -0
- package/dist/cjs/locales/vi/refiners/VIMergeDateTimeRefiner.d.ts +4 -0
- package/dist/cjs/locales/vi/refiners/VIMergeDateTimeRefiner.js +13 -0
- package/dist/cjs/locales/vi/refiners/VIMergeDateTimeRefiner.js.map +1 -0
- package/dist/cjs/locales/vi/refiners/VIMergeWeekdayComponentRefiner.d.ts +3 -0
- package/dist/cjs/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js +10 -0
- package/dist/cjs/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js.map +1 -0
- package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +1 -0
- package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +10 -4
- package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -1
- package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +1 -0
- package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +8 -2
- package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -1
- package/dist/cjs/results.js +1 -1
- package/dist/cjs/results.js.map +1 -1
- package/dist/esm/calculation/mergingCalculation.js +4 -1
- package/dist/esm/calculation/mergingCalculation.js.map +1 -1
- package/dist/esm/common/refiners/ForwardDateRefiner.js +8 -13
- package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/locales/de/parsers/DETimeUnitRelativeFormatParser.js +1 -1
- package/dist/esm/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -1
- package/dist/esm/locales/en/constants.d.ts +1 -1
- package/dist/esm/locales/en/constants.js +1 -1
- package/dist/esm/locales/en/parsers/ENWeekdayParser.js +1 -1
- package/dist/esm/locales/en/parsers/ENWeekdayParser.js.map +1 -1
- package/dist/esm/locales/es/parsers/ESCasualTimeParser.js +5 -0
- package/dist/esm/locales/es/parsers/ESCasualTimeParser.js.map +1 -1
- package/dist/esm/locales/fi/constants.d.ts +24 -0
- package/dist/esm/locales/fi/constants.js +191 -0
- package/dist/esm/locales/fi/constants.js.map +1 -0
- package/dist/esm/locales/fi/index.d.ts +11 -0
- package/dist/esm/locales/fi/index.js +48 -0
- package/dist/esm/locales/fi/index.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FICasualDateParser.d.ts +7 -0
- package/dist/esm/locales/fi/parsers/FICasualDateParser.js +63 -0
- package/dist/esm/locales/fi/parsers/FICasualDateParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FICasualTimeParser.d.ts +8 -0
- package/dist/esm/locales/fi/parsers/FICasualTimeParser.js +67 -0
- package/dist/esm/locales/fi/parsers/FICasualTimeParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FIMonthNameLittleEndianParser.d.ts +7 -0
- package/dist/esm/locales/fi/parsers/FIMonthNameLittleEndianParser.js +45 -0
- package/dist/esm/locales/fi/parsers/FIMonthNameLittleEndianParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FITimeExpressionParser.d.ts +8 -0
- package/dist/esm/locales/fi/parsers/FITimeExpressionParser.js +16 -0
- package/dist/esm/locales/fi/parsers/FITimeExpressionParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitAgoFormatParser.d.ts +7 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitAgoFormatParser.js +15 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitAgoFormatParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.d.ts +9 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js +37 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitWithinFormatParser.d.ts +7 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitWithinFormatParser.js +13 -0
- package/dist/esm/locales/fi/parsers/FITimeUnitWithinFormatParser.js.map +1 -0
- package/dist/esm/locales/fi/parsers/FIWeekdayParser.d.ts +7 -0
- package/dist/esm/locales/fi/parsers/FIWeekdayParser.js +36 -0
- package/dist/esm/locales/fi/parsers/FIWeekdayParser.js.map +1 -0
- package/dist/esm/locales/fi/refiners/FIMergeDateRangeRefiner.d.ts +4 -0
- package/dist/esm/locales/fi/refiners/FIMergeDateRangeRefiner.js +7 -0
- package/dist/esm/locales/fi/refiners/FIMergeDateRangeRefiner.js.map +1 -0
- package/dist/esm/locales/fi/refiners/FIMergeDateTimeRefiner.d.ts +4 -0
- package/dist/esm/locales/fi/refiners/FIMergeDateTimeRefiner.js +7 -0
- package/dist/esm/locales/fi/refiners/FIMergeDateTimeRefiner.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js +1 -1
- package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js.map +1 -1
- package/dist/esm/locales/nl/parsers/NLCasualTimeParser.js +5 -0
- package/dist/esm/locales/nl/parsers/NLCasualTimeParser.js.map +1 -1
- package/dist/esm/locales/pt/parsers/PTCasualTimeParser.js +5 -0
- package/dist/esm/locales/pt/parsers/PTCasualTimeParser.js.map +1 -1
- package/dist/esm/locales/vi/constants.d.ts +20 -0
- package/dist/esm/locales/vi/constants.js +101 -0
- package/dist/esm/locales/vi/constants.js.map +1 -0
- package/dist/esm/locales/vi/index.d.ts +11 -0
- package/dist/esm/locales/vi/index.js +59 -0
- package/dist/esm/locales/vi/index.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VICasualDateParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VICasualDateParser.js +27 -0
- package/dist/esm/locales/vi/parsers/VICasualDateParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VICasualTimeParser.d.ts +8 -0
- package/dist/esm/locales/vi/parsers/VICasualTimeParser.js +56 -0
- package/dist/esm/locales/vi/parsers/VICasualTimeParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VIMonthYearParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VIMonthYearParser.js +27 -0
- package/dist/esm/locales/vi/parsers/VIMonthYearParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VIStandardParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VIStandardParser.js +36 -0
- package/dist/esm/locales/vi/parsers/VIStandardParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VITimeExpressionParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VITimeExpressionParser.js +56 -0
- package/dist/esm/locales/vi/parsers/VITimeExpressionParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitAgoFormatParser.d.ts +9 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitAgoFormatParser.js +22 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitAgoFormatParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js +34 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitLaterFormatParser.d.ts +9 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitLaterFormatParser.js +21 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitLaterFormatParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitWithinFormatParser.d.ts +9 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitWithinFormatParser.js +21 -0
- package/dist/esm/locales/vi/parsers/VITimeUnitWithinFormatParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VIWeekdayParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VIWeekdayParser.js +33 -0
- package/dist/esm/locales/vi/parsers/VIWeekdayParser.js.map +1 -0
- package/dist/esm/locales/vi/parsers/VIYearParser.d.ts +7 -0
- package/dist/esm/locales/vi/parsers/VIYearParser.js +26 -0
- package/dist/esm/locales/vi/parsers/VIYearParser.js.map +1 -0
- package/dist/esm/locales/vi/refiners/VIMergeDateRangeRefiner.d.ts +4 -0
- package/dist/esm/locales/vi/refiners/VIMergeDateRangeRefiner.js +7 -0
- package/dist/esm/locales/vi/refiners/VIMergeDateRangeRefiner.js.map +1 -0
- package/dist/esm/locales/vi/refiners/VIMergeDateTimeRefiner.d.ts +4 -0
- package/dist/esm/locales/vi/refiners/VIMergeDateTimeRefiner.js +7 -0
- package/dist/esm/locales/vi/refiners/VIMergeDateTimeRefiner.js.map +1 -0
- package/dist/esm/locales/vi/refiners/VIMergeWeekdayComponentRefiner.d.ts +3 -0
- package/dist/esm/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js +4 -0
- package/dist/esm/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js.map +1 -0
- package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +1 -0
- package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +10 -4
- package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -1
- package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +1 -0
- package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +8 -2
- package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -1
- package/dist/esm/results.js +1 -1
- package/dist/esm/results.js.map +1 -1
- package/package.json +2 -2
- package/src/calculation/mergingCalculation.ts +7 -1
- package/src/common/refiners/ForwardDateRefiner.ts +8 -14
- package/src/index.ts +3 -1
- package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +1 -1
- package/src/locales/en/constants.ts +1 -1
- package/src/locales/en/parsers/ENWeekdayParser.ts +1 -1
- package/src/locales/es/parsers/ESCasualTimeParser.ts +5 -0
- package/src/locales/fi/constants.ts +209 -0
- package/src/locales/fi/index.ts +57 -0
- package/src/locales/fi/parsers/FICasualDateParser.ts +82 -0
- package/src/locales/fi/parsers/FICasualTimeParser.ts +78 -0
- package/src/locales/fi/parsers/FIMonthNameLittleEndianParser.ts +57 -0
- package/src/locales/fi/parsers/FITimeExpressionParser.ts +22 -0
- package/src/locales/fi/parsers/FITimeUnitAgoFormatParser.ts +18 -0
- package/src/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.ts +47 -0
- package/src/locales/fi/parsers/FITimeUnitWithinFormatParser.ts +15 -0
- package/src/locales/fi/parsers/FIWeekdayParser.ts +46 -0
- package/src/locales/fi/refiners/FIMergeDateRangeRefiner.ts +7 -0
- package/src/locales/fi/refiners/FIMergeDateTimeRefiner.ts +7 -0
- package/src/locales/it/parsers/ITTimeExpressionParser.ts +1 -1
- package/src/locales/nl/parsers/NLCasualTimeParser.ts +5 -0
- package/src/locales/pt/parsers/PTCasualTimeParser.ts +5 -0
- package/src/locales/vi/constants.ts +113 -0
- package/src/locales/vi/index.ts +73 -0
- package/src/locales/vi/parsers/VICasualDateParser.ts +31 -0
- package/src/locales/vi/parsers/VICasualTimeParser.ts +62 -0
- package/src/locales/vi/parsers/VIMonthYearParser.ts +35 -0
- package/src/locales/vi/parsers/VIStandardParser.ts +45 -0
- package/src/locales/vi/parsers/VITimeExpressionParser.ts +66 -0
- package/src/locales/vi/parsers/VITimeUnitAgoFormatParser.ts +23 -0
- package/src/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.ts +46 -0
- package/src/locales/vi/parsers/VITimeUnitLaterFormatParser.ts +25 -0
- package/src/locales/vi/parsers/VITimeUnitWithinFormatParser.ts +22 -0
- package/src/locales/vi/parsers/VIWeekdayParser.ts +41 -0
- package/src/locales/vi/parsers/VIYearParser.ts +31 -0
- package/src/locales/vi/refiners/VIMergeDateRangeRefiner.ts +7 -0
- package/src/locales/vi/refiners/VIMergeDateTimeRefiner.ts +7 -0
- package/src/locales/vi/refiners/VIMergeWeekdayComponentRefiner.ts +7 -0
- package/src/locales/zh/hans/parsers/ZHHansTimeExpressionParser.ts +15 -4
- package/src/locales/zh/hant/parsers/ZHHantTimeExpressionParser.ts +14 -2
- package/src/results.ts +1 -3
- package/test/de/de_time_units_casual_relative.test.ts +12 -0
- package/test/en/en_month_name_little_endian.test.ts +30 -0
- package/test/en/en_time_units_casual_relative.test.ts +11 -0
- package/test/en/en_weekday.test.ts +123 -0
- package/test/fi/fi_casual.test.ts +85 -0
- package/test/fi/fi_casual_time.test.ts +56 -0
- package/test/fi/fi_month_name_little_endian.test.ts +50 -0
- package/test/fi/fi_time_exp.test.ts +39 -0
- package/test/fi/fi_time_units_ago.test.ts +93 -0
- package/test/fi/fi_time_units_casual_relative.test.ts +117 -0
- package/test/fi/fi_time_units_within.test.ts +74 -0
- package/test/fi/fi_weekday.test.ts +90 -0
- package/test/it/it_month_name_middle_endian.test.ts +39 -0
- package/test/it/it_time_exp.test.ts +84 -0
- package/test/it/it_year_month_day.test.ts +41 -0
- package/test/result.test.ts +8 -0
- package/test/system.test.ts +4 -3
- package/test/system_timezone.test.ts +99 -0
- package/test/vi/vi_casual.test.ts +84 -0
- package/test/vi/vi_casual_time.test.ts +77 -0
- package/test/vi/vi_date_range.test.ts +61 -0
- package/test/vi/vi_forward_date.test.ts +45 -0
- package/test/vi/vi_month_year.test.ts +40 -0
- package/test/vi/vi_negative_cases.test.ts +60 -0
- package/test/vi/vi_slash.test.ts +36 -0
- package/test/vi/vi_standard.test.ts +86 -0
- package/test/vi/vi_strict.test.ts +67 -0
- package/test/vi/vi_time_exp.test.ts +99 -0
- package/test/vi/vi_time_units_ago.test.ts +56 -0
- package/test/vi/vi_time_units_casual_relative.test.ts +56 -0
- package/test/vi/vi_time_units_later.test.ts +43 -0
- package/test/vi/vi_time_units_within.test.ts +24 -0
- package/test/vi/vi_weekday.test.ts +77 -0
- package/test/vi/vi_year.test.ts +42 -0
- package/test/zh/hans/zh_hans_time_exp.test.ts +252 -6
- package/test/zh/hant/zh_hant_time_exp.test.ts +30 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - h\u00f4m nay (today)", () => {
|
|
5
|
+
testSingleCase(chrono.vi, "Cu\u1ed9c h\u1ecdn h\u00f4m nay.", new Date(2012, 7, 10, 12), (r) => {
|
|
6
|
+
expect(r.index).toBe(9);
|
|
7
|
+
expect(r.text).toBe("h\u00f4m nay");
|
|
8
|
+
expect(r.start.get("year")).toBe(2012);
|
|
9
|
+
expect(r.start.get("month")).toBe(8);
|
|
10
|
+
expect(r.start.get("day")).toBe(10);
|
|
11
|
+
expect(r.start).toBeDate(new Date(2012, 7, 10, 12));
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test("Test - h\u00f4m qua (yesterday)", () => {
|
|
16
|
+
testSingleCase(chrono.vi, "H\u1ed9i ngh\u1ecb h\u00f4m qua.", new Date(2012, 7, 10, 12), (r) => {
|
|
17
|
+
expect(r.index).toBe(9);
|
|
18
|
+
expect(r.text).toBe("h\u00f4m qua");
|
|
19
|
+
expect(r.start.get("year")).toBe(2012);
|
|
20
|
+
expect(r.start.get("month")).toBe(8);
|
|
21
|
+
expect(r.start.get("day")).toBe(9);
|
|
22
|
+
expect(r.start).toBeDate(new Date(2012, 7, 9, 12));
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
testSingleCase(chrono.vi, "h\u00f4m qua", new Date(2012, 7, 1, 12), (r) => {
|
|
26
|
+
expect(r.start.get("month")).toBe(7); // July — crosses month boundary
|
|
27
|
+
expect(r.start.get("day")).toBe(31);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("Test - ng\u00e0y mai (tomorrow)", () => {
|
|
32
|
+
testSingleCase(chrono.vi, "L\u1ecbch ng\u00e0y mai.", new Date(2012, 7, 10, 12), (r) => {
|
|
33
|
+
expect(r.index).toBe(5);
|
|
34
|
+
expect(r.text).toBe("ng\u00e0y mai");
|
|
35
|
+
expect(r.start.get("day")).toBe(11);
|
|
36
|
+
expect(r.start.get("month")).toBe(8);
|
|
37
|
+
expect(r.start).toBeDate(new Date(2012, 7, 11, 12));
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
testSingleCase(chrono.vi, "ng\u00e0y mai", new Date(2012, 7, 31, 12), (r) => {
|
|
41
|
+
expect(r.start.get("month")).toBe(9); // Sept — crosses month boundary
|
|
42
|
+
expect(r.start.get("day")).toBe(1);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("Test - ng\u00e0y kia (day after tomorrow)", () => {
|
|
47
|
+
testSingleCase(chrono.vi, "ng\u00e0y kia", new Date(2012, 7, 10, 12), (r) => {
|
|
48
|
+
expect(r.text).toBe("ng\u00e0y kia");
|
|
49
|
+
expect(r.start.get("day")).toBe(12);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("Test - b\u00e2y gi\u1edd / l\u00fac n\u00e0y (now)", () => {
|
|
54
|
+
testSingleCase(chrono.vi, "b\u00e2y gi\u1edd", new Date(2012, 7, 10, 8, 9, 10, 11), (r) => {
|
|
55
|
+
expect(r.start.get("year")).toBe(2012);
|
|
56
|
+
expect(r.start.get("month")).toBe(8);
|
|
57
|
+
expect(r.start.get("day")).toBe(10);
|
|
58
|
+
expect(r.start.get("hour")).toBe(8);
|
|
59
|
+
expect(r.start.get("minute")).toBe(9);
|
|
60
|
+
expect(r.start.get("second")).toBe(10);
|
|
61
|
+
expect(r.start).toBeDate(new Date(2012, 7, 10, 8, 9, 10, 11));
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
testSingleCase(chrono.vi, "l\u00fac n\u00e0y", new Date(2012, 7, 10, 8, 9, 10, 11), (r) => {
|
|
65
|
+
expect(r.start.get("hour")).toBe(8);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("Test - hôm kia (day before yesterday, -2)", () => {
|
|
70
|
+
testSingleCase(chrono.vi, "hôm kia", new Date(2012, 7, 10, 12), (r) => {
|
|
71
|
+
expect(r.start.get("year")).toBe(2012);
|
|
72
|
+
expect(r.start.get("month")).toBe(8);
|
|
73
|
+
expect(r.start.get("day")).toBe(8); // 10 - 2
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("Test - isCertain: casual date sets day/month/year certain, hour not", () => {
|
|
78
|
+
testSingleCase(chrono.vi, "hôm nay", new Date(2012, 7, 10, 12), (r) => {
|
|
79
|
+
expect(r.start.isCertain("day")).toBe(true);
|
|
80
|
+
expect(r.start.isCertain("month")).toBe(true);
|
|
81
|
+
expect(r.start.isCertain("year")).toBe(true);
|
|
82
|
+
expect(r.start.isCertain("hour")).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12); // 2012-08-10 noon
|
|
5
|
+
|
|
6
|
+
test("Test - sáng (morning, AM)", () => {
|
|
7
|
+
// "buổi sáng" is a time-of-day modifier; test it with an explicit time expression
|
|
8
|
+
testSingleCase(chrono.vi, "7 giờ sáng", REF, (r) => {
|
|
9
|
+
expect(r.start.get("hour")).toBe(7);
|
|
10
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
11
|
+
});
|
|
12
|
+
// standalone "sáng" sets implied hour=9, AM
|
|
13
|
+
testSingleCase(chrono.vi, "hôm nay buổi sáng", new Date(2012, 7, 10, 6), (r) => {
|
|
14
|
+
expect(r.start.get("hour")).toBe(9);
|
|
15
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("Test - trưa (noon, PM)", () => {
|
|
20
|
+
testSingleCase(chrono.vi, "buổi trưa", REF, (r) => {
|
|
21
|
+
expect(r.start.get("hour")).toBe(12);
|
|
22
|
+
expect(r.start.get("meridiem")).toBe(1); // PM — noon is 12:00 PM
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("Test - chiều (afternoon, PM)", () => {
|
|
27
|
+
testSingleCase(chrono.vi, "buổi chiều", REF, (r) => {
|
|
28
|
+
expect(r.start.get("hour")).toBe(15);
|
|
29
|
+
expect(r.start.get("meridiem")).toBe(1); // PM
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("Test - tối (evening, PM)", () => {
|
|
34
|
+
testSingleCase(chrono.vi, "buổi tối", REF, (r) => {
|
|
35
|
+
expect(r.start.get("hour")).toBe(19);
|
|
36
|
+
expect(r.start.get("meridiem")).toBe(1); // PM
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("Test - đêm (late night, PM)", () => {
|
|
41
|
+
testSingleCase(chrono.vi, "buổi đêm", REF, (r) => {
|
|
42
|
+
expect(r.start.get("hour")).toBe(22);
|
|
43
|
+
expect(r.start.get("meridiem")).toBe(1); // PM
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Standalone "đêm" without "buổi" prefix — works after removing \b from pattern
|
|
47
|
+
testSingleCase(chrono.vi, "đêm", REF, (r) => {
|
|
48
|
+
expect(r.start.get("hour")).toBe(22);
|
|
49
|
+
expect(r.start.get("meridiem")).toBe(1); // PM
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("Test - nửa đêm (midnight, AM)", () => {
|
|
54
|
+
testSingleCase(chrono.vi, "nửa đêm", REF, (r) => {
|
|
55
|
+
expect(r.start.get("hour")).toBe(0);
|
|
56
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("Test - bình minh / sáng sớm (dawn)", () => {
|
|
61
|
+
testSingleCase(chrono.vi, "bình minh", REF, (r) => {
|
|
62
|
+
expect(r.start.get("hour")).toBe(6);
|
|
63
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
testSingleCase(chrono.vi, "sáng sớm", REF, (r) => {
|
|
67
|
+
expect(r.start.get("hour")).toBe(6);
|
|
68
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("Test - time keyword merges with date", () => {
|
|
73
|
+
testSingleCase(chrono.vi, "hôm nay buổi chiều", REF, (r) => {
|
|
74
|
+
expect(r.start.get("day")).toBe(10);
|
|
75
|
+
expect(r.start.get("hour")).toBe(15);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12); // 2012-08-10 noon
|
|
5
|
+
|
|
6
|
+
test("Test - từ ngày X đến ngày Y (đến connector)", () => {
|
|
7
|
+
testSingleCase(chrono.vi, "từ ngày 5 tháng 8 đến ngày 10 tháng 8 năm 2012", REF, (r) => {
|
|
8
|
+
expect(r.start.get("day")).toBe(5);
|
|
9
|
+
expect(r.start.get("month")).toBe(8);
|
|
10
|
+
expect(r.start.get("year")).toBe(2012);
|
|
11
|
+
|
|
12
|
+
expect(r.end).not.toBeNull();
|
|
13
|
+
expect(r.end.get("day")).toBe(10);
|
|
14
|
+
expect(r.end.get("month")).toBe(8);
|
|
15
|
+
expect(r.end.get("year")).toBe(2012);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("Test - em dash separator (–)", () => {
|
|
20
|
+
testSingleCase(chrono.vi, "ngày 1 tháng 4 – ngày 30 tháng 4 năm 2000", REF, (r) => {
|
|
21
|
+
expect(r.start.get("day")).toBe(1);
|
|
22
|
+
expect(r.start.get("month")).toBe(4);
|
|
23
|
+
|
|
24
|
+
expect(r.end).not.toBeNull();
|
|
25
|
+
expect(r.end.get("day")).toBe(30);
|
|
26
|
+
expect(r.end.get("month")).toBe(4);
|
|
27
|
+
expect(r.end.get("year")).toBe(2000);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("Test - hyphen separator (-)", () => {
|
|
32
|
+
testSingleCase(chrono.vi, "ngày 3 tháng 9 - ngày 5 tháng 9 năm 1945", REF, (r) => {
|
|
33
|
+
expect(r.start.get("day")).toBe(3);
|
|
34
|
+
expect(r.start.get("month")).toBe(9);
|
|
35
|
+
expect(r.start.get("year")).toBe(1945);
|
|
36
|
+
|
|
37
|
+
expect(r.end).not.toBeNull();
|
|
38
|
+
expect(r.end.get("day")).toBe(5);
|
|
39
|
+
expect(r.end.get("month")).toBe(9);
|
|
40
|
+
expect(r.end.get("year")).toBe(1945);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("Test - tới connector", () => {
|
|
45
|
+
testSingleCase(chrono.vi, "tháng 3 tới tháng 5 năm 1975", REF, (r) => {
|
|
46
|
+
expect(r.start.get("month")).toBe(3);
|
|
47
|
+
|
|
48
|
+
expect(r.end).not.toBeNull();
|
|
49
|
+
expect(r.end.get("month")).toBe(5);
|
|
50
|
+
expect(r.end.get("year")).toBe(1975);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("Test - start is before end", () => {
|
|
55
|
+
testSingleCase(chrono.vi, "ngày 1 tháng 1 đến ngày 31 tháng 12 năm 2020", REF, (r) => {
|
|
56
|
+
expect(r.end).not.toBeNull();
|
|
57
|
+
const startDate = r.start.date();
|
|
58
|
+
const endDate = r.end.date();
|
|
59
|
+
expect(startDate.getTime()).toBeLessThan(endDate.getTime());
|
|
60
|
+
});
|
|
61
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
test("Test - forwardDate: time-only rolls to next day when ref is past", () => {
|
|
5
|
+
// "7 gi\u1edd s\u00e1ng" = 7:00 AM; ref is 8:00 AM same day \u2192 next day
|
|
6
|
+
testSingleCase(chrono.vi, "7 gi\u1edd s\u00e1ng", new Date(2012, 7, 10, 8, 0), { forwardDate: true }, (r) => {
|
|
7
|
+
expect(r.start.get("day")).toBe(11);
|
|
8
|
+
expect(r.start.get("hour")).toBe(7);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("Test - forwardDate: weekday rolls to next occurrence", () => {
|
|
13
|
+
// REF = Tuesday Aug 14, 2012; "th\u1ee9 hai" (Monday) last was Aug 13 \u2192 next Monday = Aug 20
|
|
14
|
+
testSingleCase(chrono.vi, "th\u1ee9 hai", new Date(2012, 7, 14, 12), { forwardDate: true }, (r) => {
|
|
15
|
+
expect(r.start.get("weekday")).toBe(1);
|
|
16
|
+
expect(r.start.get("day")).toBe(20);
|
|
17
|
+
expect(r.start.get("month")).toBe(8);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test("Test - forwardDate: slash date without year rolls to next year", () => {
|
|
22
|
+
// "15/3" = March 15; ref is Aug 10 (past March) \u2192 year 2013
|
|
23
|
+
testSingleCase(chrono.vi, "15/3", new Date(2012, 7, 10, 12), { forwardDate: true }, (r) => {
|
|
24
|
+
expect(r.start.get("day")).toBe(15);
|
|
25
|
+
expect(r.start.get("month")).toBe(3);
|
|
26
|
+
expect(r.start.get("year")).toBe(2013);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("Test - forwardDate: same weekday as ref stays on same day", () => {
|
|
31
|
+
// REF = Thursday Aug 9, 2012; "thứ năm" (Thursday) = same day → stays on Aug 9 (not past)
|
|
32
|
+
testSingleCase(chrono.vi, "th\u1ee9 n\u0103m", new Date(2012, 7, 9, 12), { forwardDate: true }, (r) => {
|
|
33
|
+
expect(r.start.get("weekday")).toBe(4);
|
|
34
|
+
expect(r.start.get("day")).toBe(9);
|
|
35
|
+
expect(r.start.get("month")).toBe(8);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("Test - forwardDate: month without year rolls to next year", () => {
|
|
40
|
+
// "th\u00e1ng 3" = March; ref is Aug 10 \u2192 next March = 2013
|
|
41
|
+
testSingleCase(chrono.vi, "th\u00e1ng 3", new Date(2012, 7, 10, 12), { forwardDate: true }, (r) => {
|
|
42
|
+
expect(r.start.get("month")).toBe(3);
|
|
43
|
+
expect(r.start.get("year")).toBe(2013);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase, testUnexpectedResult } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12); // 2012-08-10
|
|
5
|
+
|
|
6
|
+
test("Test - tháng M năm YYYY", () => {
|
|
7
|
+
testSingleCase(chrono.vi, "tháng 4 năm 1975", REF, (r) => {
|
|
8
|
+
expect(r.text).toBe("tháng 4 năm 1975");
|
|
9
|
+
expect(r.start.get("month")).toBe(4);
|
|
10
|
+
expect(r.start.get("year")).toBe(1975);
|
|
11
|
+
expect(r.start.isCertain("month")).toBe(true);
|
|
12
|
+
expect(r.start.isCertain("year")).toBe(true);
|
|
13
|
+
expect(r.start.isCertain("day")).toBe(false); // day is implied
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
testSingleCase(chrono.vi, "tháng 1 năm 1863", REF, (r) => {
|
|
17
|
+
expect(r.start.get("month")).toBe(1);
|
|
18
|
+
expect(r.start.get("year")).toBe(1863);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("Test - tháng M/YYYY (slash separator)", () => {
|
|
23
|
+
testSingleCase(chrono.vi, "tháng 3/1975", REF, (r) => {
|
|
24
|
+
expect(r.start.get("month")).toBe(3);
|
|
25
|
+
expect(r.start.get("year")).toBe(1975);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("Test - tháng M only (implies current year)", () => {
|
|
30
|
+
testSingleCase(chrono.vi, "tháng 3", REF, (r) => {
|
|
31
|
+
expect(r.start.get("month")).toBe(3);
|
|
32
|
+
expect(r.start.isCertain("year")).toBe(false); // year implied from reference
|
|
33
|
+
expect(r.start.get("year")).toBe(2012);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("Test - negative: month > 12 rejected", () => {
|
|
38
|
+
testUnexpectedResult(chrono.vi, "tháng 13", REF);
|
|
39
|
+
testUnexpectedResult(chrono.vi, "tháng 0", REF);
|
|
40
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testUnexpectedResult } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12); // 2012-08-10
|
|
5
|
+
|
|
6
|
+
test("Test - invalid day rejected", () => {
|
|
7
|
+
testUnexpectedResult(chrono.vi, "ngày 0 tháng 4 năm 2000", REF);
|
|
8
|
+
// "ngày 32 tháng 4" — VIStandardParser skips "ngày 3" and sub-matches "2 tháng 4"
|
|
9
|
+
// (day bounds are not pre-validated in the regex). This is known parser behaviour.
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("Test - invalid month rejected", () => {
|
|
13
|
+
testUnexpectedResult(chrono.vi, "tháng 0", REF);
|
|
14
|
+
testUnexpectedResult(chrono.vi, "tháng 13", REF);
|
|
15
|
+
testUnexpectedResult(chrono.vi, "ngày 1 tháng 13", REF);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test("Test - invalid slash date rejected", () => {
|
|
19
|
+
testUnexpectedResult(chrono.vi, "32/13/2020", REF);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("Test - bare 4-digit number without năm prefix is not a year", () => {
|
|
23
|
+
testUnexpectedResult(chrono.vi, "Có 1975 người tham gia.", REF);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("Test - phone number not parsed as date", () => {
|
|
27
|
+
testUnexpectedResult(chrono.vi, "0912345678", REF);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("Test - bare numbers not parsed as dates", () => {
|
|
31
|
+
testUnexpectedResult(chrono.vi, "3", REF);
|
|
32
|
+
testUnexpectedResult(chrono.vi, "11", REF);
|
|
33
|
+
testUnexpectedResult(chrono.vi, "0.5", REF);
|
|
34
|
+
testUnexpectedResult(chrono.vi, "35.49", REF);
|
|
35
|
+
testUnexpectedResult(chrono.vi, "12.53%", REF);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("Test - currency and measurement not parsed as dates", () => {
|
|
39
|
+
testUnexpectedResult(chrono.vi, "$1,194.09", REF);
|
|
40
|
+
testUnexpectedResult(chrono.vi, "at 6.5 kilograms", REF);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("Test - version numbers not parsed as dates", () => {
|
|
44
|
+
testUnexpectedResult(chrono.vi, "1.1.3", REF);
|
|
45
|
+
testUnexpectedResult(chrono.vi, "1.10.30", REF);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("Test - hyphenated number ranges not parsed as dates", () => {
|
|
49
|
+
testUnexpectedResult(chrono.vi, "1-2", REF);
|
|
50
|
+
testUnexpectedResult(chrono.vi, "1-2-3", REF);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("Test - URL-encoded strings not parsed as dates", () => {
|
|
54
|
+
testUnexpectedResult(chrono.vi, "%e7%b7%8a", REF);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("Test - impossible minute rejected", () => {
|
|
58
|
+
testUnexpectedResult(chrono.vi, "7 giờ 61 phút", REF);
|
|
59
|
+
testUnexpectedResult(chrono.vi, "7 giờ 99 phút", REF);
|
|
60
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12);
|
|
5
|
+
|
|
6
|
+
test("Test - DD/MM/YYYY (little-endian)", () => {
|
|
7
|
+
testSingleCase(chrono.vi, "Ng\u00e0y 30/04/1975.", REF, (r) => {
|
|
8
|
+
expect(r.index).toBe(5);
|
|
9
|
+
expect(r.start.get("day")).toBe(30);
|
|
10
|
+
expect(r.start.get("month")).toBe(4);
|
|
11
|
+
expect(r.start.get("year")).toBe(1975);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
testSingleCase(chrono.vi, "H\u1ed9i ngh\u1ecb 01/01/1954", REF, (r) => {
|
|
15
|
+
expect(r.index).toBe(9);
|
|
16
|
+
expect(r.start.get("day")).toBe(1);
|
|
17
|
+
expect(r.start.get("month")).toBe(1);
|
|
18
|
+
expect(r.start.get("year")).toBe(1954);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("Test - D/M/YYYY (no zero padding)", () => {
|
|
23
|
+
testSingleCase(chrono.vi, "3/5/1968", REF, (r) => {
|
|
24
|
+
expect(r.start.get("day")).toBe(3);
|
|
25
|
+
expect(r.start.get("month")).toBe(5);
|
|
26
|
+
expect(r.start.get("year")).toBe(1968);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("Test - ISO 2024-03-15 also parses", () => {
|
|
31
|
+
testSingleCase(chrono.vi, "Ng\u00e0y 2024-03-15 l\u00e0 quan tr\u1ecdng.", REF, (r) => {
|
|
32
|
+
expect(r.start.get("year")).toBe(2024);
|
|
33
|
+
expect(r.start.get("month")).toBe(3);
|
|
34
|
+
expect(r.start.get("day")).toBe(15);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase, testUnexpectedResult } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12, 0, 0); // 2012-08-10
|
|
5
|
+
|
|
6
|
+
test("Test - ng\u00e0y D th\u00e1ng M n\u0103m YYYY (full with ng\u00e0y prefix)", () => {
|
|
7
|
+
testSingleCase(
|
|
8
|
+
chrono.vi,
|
|
9
|
+
"Ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975 l\u00e0 ng\u00e0y gi\u1ea3i ph\u00f3ng.",
|
|
10
|
+
REF,
|
|
11
|
+
(r) => {
|
|
12
|
+
expect(r.start.get("year")).toBe(1975);
|
|
13
|
+
expect(r.start.get("month")).toBe(4);
|
|
14
|
+
expect(r.start.get("day")).toBe(30);
|
|
15
|
+
expect(r.start.isCertain("year")).toBe(true);
|
|
16
|
+
expect(r.start.isCertain("month")).toBe(true);
|
|
17
|
+
expect(r.start.isCertain("day")).toBe(true);
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
testSingleCase(
|
|
22
|
+
chrono.vi,
|
|
23
|
+
"Hi\u1ec7p \u0111\u1ecbnh \u0111\u01b0\u1ee3c k\u00fd ng\u00e0y 27 th\u00e1ng 1 n\u0103m 1973.",
|
|
24
|
+
REF,
|
|
25
|
+
(r) => {
|
|
26
|
+
expect(r.text).toBe("ng\u00e0y 27 th\u00e1ng 1 n\u0103m 1973");
|
|
27
|
+
expect(r.start.get("year")).toBe(1973);
|
|
28
|
+
expect(r.start.get("month")).toBe(1);
|
|
29
|
+
expect(r.start.get("day")).toBe(27);
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
testSingleCase(chrono.vi, "ng\u00e0y 2 th\u00e1ng 9 n\u0103m 1945", REF, (r) => {
|
|
34
|
+
expect(r.start.get("year")).toBe(1945);
|
|
35
|
+
expect(r.start.get("month")).toBe(9);
|
|
36
|
+
expect(r.start.get("day")).toBe(2);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("Test - D th\u00e1ng M n\u0103m YYYY (no ng\u00e0y prefix)", () => {
|
|
41
|
+
testSingleCase(
|
|
42
|
+
chrono.vi,
|
|
43
|
+
"7 th\u00e1ng 5 n\u0103m 1954 l\u00e0 ng\u00e0y ch\u1ea5m d\u1ee9t tr\u1eadn \u0110i\u1ec7n Bi\u00ean Ph\u1ee7.",
|
|
44
|
+
REF,
|
|
45
|
+
(r) => {
|
|
46
|
+
expect(r.start.get("day")).toBe(7);
|
|
47
|
+
expect(r.start.get("month")).toBe(5);
|
|
48
|
+
expect(r.start.get("year")).toBe(1954);
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
testSingleCase(chrono.vi, "1 th\u00e1ng 1 n\u0103m 1863", REF, (r) => {
|
|
53
|
+
expect(r.start.get("day")).toBe(1);
|
|
54
|
+
expect(r.start.get("month")).toBe(1);
|
|
55
|
+
expect(r.start.get("year")).toBe(1863);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("Test - Date without year implies closest year", () => {
|
|
60
|
+
testSingleCase(chrono.vi, "ng\u00e0y 15 th\u00e1ng 3", REF, (r) => {
|
|
61
|
+
expect(r.start.get("day")).toBe(15);
|
|
62
|
+
expect(r.start.get("month")).toBe(3);
|
|
63
|
+
expect(r.start.isCertain("year")).toBe(false);
|
|
64
|
+
expect(r.start.isCertain("day")).toBe(true);
|
|
65
|
+
expect(r.start.isCertain("month")).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("Test - index position is correct", () => {
|
|
70
|
+
testSingleCase(
|
|
71
|
+
chrono.vi,
|
|
72
|
+
"S\u1ef1 ki\u1ec7n ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975 quan tr\u1ecdng.",
|
|
73
|
+
REF,
|
|
74
|
+
(r) => {
|
|
75
|
+
expect(r.index).toBe(8);
|
|
76
|
+
expect(r.text).toBe("ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975");
|
|
77
|
+
expect(r.start.get("year")).toBe(1975);
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test("Test - negative: invalid month rejected", () => {
|
|
83
|
+
// tháng 13 is rejected; without a year, no other parser fires
|
|
84
|
+
testUnexpectedResult(chrono.vi, "ngày 1 tháng 13", REF);
|
|
85
|
+
// "ngày 32 tháng 4" partially matches as "2 tháng 4" — day bounds enforced by VIStandardParser (day > 31)
|
|
86
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase, testUnexpectedResult } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12); // 2012-08-10
|
|
5
|
+
|
|
6
|
+
test("Test - Strict rejects casual date expressions", () => {
|
|
7
|
+
testUnexpectedResult(chrono.vi.strict, "h\u00f4m nay", REF);
|
|
8
|
+
testUnexpectedResult(chrono.vi.strict, "h\u00f4m qua", REF);
|
|
9
|
+
testUnexpectedResult(chrono.vi.strict, "ng\u00e0y mai", REF);
|
|
10
|
+
testUnexpectedResult(chrono.vi.strict, "ng\u00e0y kia", REF);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test("Test - Strict rejects casual time-of-day expressions", () => {
|
|
14
|
+
testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i s\u00e1ng", REF);
|
|
15
|
+
testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i tr\u01b0a", REF);
|
|
16
|
+
testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i chi\u1ec1u", REF);
|
|
17
|
+
testUnexpectedResult(chrono.vi.strict, "bu\u1ed5i t\u1ed1i", REF);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("Test - Strict rejects casual relative expressions", () => {
|
|
21
|
+
testUnexpectedResult(chrono.vi.strict, "tu\u1ea7n n\u00e0y", REF);
|
|
22
|
+
testUnexpectedResult(chrono.vi.strict, "th\u00e1ng tr\u01b0\u1edbc", REF);
|
|
23
|
+
testUnexpectedResult(chrono.vi.strict, "n\u0103m sau", REF);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test("Test - Strict rejects weekday-only expressions", () => {
|
|
27
|
+
testUnexpectedResult(chrono.vi.strict, "th\u1ee9 hai", REF);
|
|
28
|
+
testUnexpectedResult(chrono.vi.strict, "ch\u1ee7 nh\u1eadt", REF);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("Test - Strict accepts standard full dates and times", () => {
|
|
32
|
+
testSingleCase(chrono.vi.strict, "ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975", REF, (r) => {
|
|
33
|
+
expect(r.start.get("year")).toBe(1975);
|
|
34
|
+
expect(r.start.get("month")).toBe(4);
|
|
35
|
+
expect(r.start.get("day")).toBe(30);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
testSingleCase(chrono.vi.strict, "l\u00fac 7 gi\u1edd 30 ph\u00fat", REF, (r) => {
|
|
39
|
+
expect(r.start.get("hour")).toBe(7);
|
|
40
|
+
expect(r.start.get("minute")).toBe(30);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("Test - Strict accepts slash dates", () => {
|
|
45
|
+
testSingleCase(chrono.vi.strict, "30/4/1975", REF, (r) => {
|
|
46
|
+
expect(r.start.get("day")).toBe(30);
|
|
47
|
+
expect(r.start.get("month")).toBe(4);
|
|
48
|
+
expect(r.start.get("year")).toBe(1975);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
testSingleCase(chrono.vi.strict, "15/3", REF, (r) => {
|
|
52
|
+
expect(r.start.get("day")).toBe(15);
|
|
53
|
+
expect(r.start.get("month")).toBe(3);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("Test - Strict accepts explicit time unit expressions", () => {
|
|
58
|
+
testSingleCase(chrono.vi.strict, "3 ng\u00e0y tr\u01b0\u1edbc", REF, (r) => {
|
|
59
|
+
expect(r.start.get("day")).toBe(7);
|
|
60
|
+
expect(r.start.get("month")).toBe(8);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
testSingleCase(chrono.vi.strict, "2 tu\u1ea7n sau", REF, (r) => {
|
|
64
|
+
expect(r.start.get("day")).toBe(24);
|
|
65
|
+
expect(r.start.get("month")).toBe(8);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as chrono from "../../src/";
|
|
2
|
+
import { testSingleCase } from "../test_util";
|
|
3
|
+
|
|
4
|
+
const REF = new Date(2012, 7, 10, 12);
|
|
5
|
+
|
|
6
|
+
test("Test - X gi\u1edd", () => {
|
|
7
|
+
testSingleCase(chrono.vi, "Cu\u1ed9c h\u1ecdn l\u00fac 7 gi\u1edd.", REF, (r) => {
|
|
8
|
+
expect(r.index).toBe(9);
|
|
9
|
+
expect(r.text).toBe("l\u00fac 7 gi\u1edd");
|
|
10
|
+
expect(r.start.get("hour")).toBe(7);
|
|
11
|
+
expect(r.start.get("minute")).toBe(0);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
testSingleCase(chrono.vi, "7 gi\u1edd s\u00e1ng", REF, (r) => {
|
|
15
|
+
expect(r.start.get("hour")).toBe(7);
|
|
16
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
testSingleCase(chrono.vi, "7 gi\u1edd t\u1ed1i", REF, (r) => {
|
|
20
|
+
expect(r.start.get("hour")).toBe(19);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test("Test - X gi\u1edd Y ph\u00fat", () => {
|
|
25
|
+
testSingleCase(chrono.vi, "l\u00fac 7 gi\u1edd 30 ph\u00fat", REF, (r) => {
|
|
26
|
+
expect(r.start.get("hour")).toBe(7);
|
|
27
|
+
expect(r.start.get("minute")).toBe(30);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
testSingleCase(chrono.vi, "v\u00e0o 15 gi\u1edd 45 ph\u00fat", REF, (r) => {
|
|
31
|
+
expect(r.start.get("hour")).toBe(15);
|
|
32
|
+
expect(r.start.get("minute")).toBe(45);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("Test - colon format HH:MM", () => {
|
|
37
|
+
testSingleCase(chrono.vi, "H\u1ecdn l\u00fac 15:30.", REF, (r) => {
|
|
38
|
+
expect(r.start.get("hour")).toBe(15);
|
|
39
|
+
expect(r.start.get("minute")).toBe(30);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("Test - date + time combined", () => {
|
|
44
|
+
testSingleCase(chrono.vi, "ng\u00e0y 30 th\u00e1ng 4 n\u0103m 1975 l\u00fac 11 gi\u1edd", REF, (r) => {
|
|
45
|
+
expect(r.start.get("day")).toBe(30);
|
|
46
|
+
expect(r.start.get("month")).toBe(4);
|
|
47
|
+
expect(r.start.get("year")).toBe(1975);
|
|
48
|
+
expect(r.start.get("hour")).toBe(11);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("Test - meridiem: s\u00e1ng/chi\u1ec1u/t\u1ed1i/\u0111\u00eam", () => {
|
|
53
|
+
testSingleCase(chrono.vi, "9 gi\u1edd s\u00e1ng", REF, (r) => {
|
|
54
|
+
expect(r.start.get("hour")).toBe(9);
|
|
55
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
56
|
+
});
|
|
57
|
+
testSingleCase(chrono.vi, "3 gi\u1edd chi\u1ec1u", REF, (r) => {
|
|
58
|
+
expect(r.start.get("hour")).toBe(15);
|
|
59
|
+
});
|
|
60
|
+
testSingleCase(chrono.vi, "10 gi\u1edd \u0111\u00eam", REF, (r) => {
|
|
61
|
+
expect(r.start.get("hour")).toBe(22);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test("Test - trưa meridiem: X giờ trưa → PM (hour + 12)", () => {
|
|
66
|
+
// trưa = noon/midday — times expressed with trưa are PM
|
|
67
|
+
testSingleCase(chrono.vi, "1 giờ trưa", REF, (r) => {
|
|
68
|
+
expect(r.start.get("hour")).toBe(13);
|
|
69
|
+
expect(r.start.get("meridiem")).toBe(1); // PM
|
|
70
|
+
});
|
|
71
|
+
testSingleCase(chrono.vi, "11 giờ trưa", REF, (r) => {
|
|
72
|
+
expect(r.start.get("hour")).toBe(11);
|
|
73
|
+
expect(r.start.get("meridiem")).toBe(0); // AM — 11 giờ trưa = approaching noon
|
|
74
|
+
});
|
|
75
|
+
// 12 giờ trưa = noon, no offset applied (12 < 12 is false)
|
|
76
|
+
testSingleCase(chrono.vi, "12 giờ trưa", REF, (r) => {
|
|
77
|
+
expect(r.start.get("hour")).toBe(12);
|
|
78
|
+
expect(r.start.get("meridiem")).toBe(1); // PM
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test("Test - 12 giờ sáng = midnight (00:00)", () => {
|
|
83
|
+
testSingleCase(chrono.vi, "12 giờ sáng", REF, (r) => {
|
|
84
|
+
expect(r.start.get("hour")).toBe(0);
|
|
85
|
+
expect(r.start.get("meridiem")).toBe(0); // AM
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("Test - isCertain: hour and meridiem certainty", () => {
|
|
90
|
+
testSingleCase(chrono.vi, "lúc 7 giờ", REF, (r) => {
|
|
91
|
+
expect(r.start.isCertain("hour")).toBe(true);
|
|
92
|
+
expect(r.start.isCertain("meridiem")).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
testSingleCase(chrono.vi, "7 giờ sáng", REF, (r) => {
|
|
96
|
+
expect(r.start.isCertain("hour")).toBe(true);
|
|
97
|
+
expect(r.start.isCertain("meridiem")).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
});
|