import type { Quarter } from '../../../../types' ; import type { Match } from '../../../types' ; import buildMatchFn from '../../../_lib/buildMatchFn/index' ; import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index' ; const matchOrdinalNumberPattern = /^(\d+)/i ; const parseOrdinalNumberPattern = /\d+/i ; const matchEraPatterns = { narrow : /^(tcn|scn)/i , abbreviated : /^(trước CN|sau CN)/i , wide : /^(trước Công Nguyên|sau Công Nguyên)/i , } ; const parseEraPatterns = { any : [ /^t/i , /^s/i ] as const , } ; const matchQuarterPatterns = { narrow : /^([1234]|i{1,3}v?)/i , abbreviated : /^q([1234]|i{1,3}v?)/i , wide : /^quý ([1234]|i{1,3}v?)/i , } ; const parseQuarterPatterns = { any : [ /(1|i)$/i , /(2|ii)$/i , /(3|iii)$/i , /(4|iv)$/i ] as const , } ; const matchMonthPatterns = { narrow : /^(0?[2-9]|10|11|12|0?1)/i , abbreviated : /^thg[ _]?(0?[1-9](?!\d)|10|11|12)/i , wide : /^tháng ?(Một|Hai|Ba|Tư|Năm|Sáu|Bảy|Tám|Chín|Mười|Mười ?Một|Mười ?Hai|0?[1-9](?!\d)|10|11|12)/i , } ; const parseMonthPatterns = { narrow : [ /0?1$/i , /0?2/i , /3/ , /4/ , /5/ , /6/ , /7/ , /8/ , /9/ , /10/ , /11/ , /12/ , ] as const , abbreviated : [ /^thg[ _]?0?1(?!\d)/i , /^thg[ _]?0?2/i , /^thg[ _]?0?3/i , /^thg[ _]?0?4/i , /^thg[ _]?0?5/i , /^thg[ _]?0?6/i , /^thg[ _]?0?7/i , /^thg[ _]?0?8/i , /^thg[ _]?0?9/i , /^thg[ _]?10/i , /^thg[ _]?11/i , /^thg[ _]?12/i , ] as const , wide : [ /^tháng ?(Một|0?1(?!\d))/i , /^tháng ?(Hai|0?2)/i , /^tháng ?(Ba|0?3)/i , /^tháng ?(Tư|0?4)/i , /^tháng ?(Năm|0?5)/i , /^tháng ?(Sáu|0?6)/i , /^tháng ?(Bảy|0?7)/i , /^tháng ?(Tám|0?8)/i , /^tháng ?(Chín|0?9)/i , /^tháng ?(Mười|10)/i , /^tháng ?(Mười ?Một|11)/i , /^tháng ?(Mười ?Hai|12)/i , ] as const , } ; const matchDayPatterns = { narrow : /^(CN|T2|T3|T4|T5|T6|T7)/i , short : /^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i , abbreviated : /^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i , wide : /^(Chủ ?Nhật|Chúa ?Nhật|thứ ?Hai|thứ ?Ba|thứ ?Tư|thứ ?Năm|thứ ?Sáu|thứ ?Bảy)/i , } ; const parseDayPatterns = { narrow : [ /CN/i , /2/i , /3/i , /4/i , /5/i , /6/i , /7/i ] as const , short : [ /CN/i , /2/i , /3/i , /4/i , /5/i , /6/i , /7/i ] as const , abbreviated : [ /CN/i , /2/i , /3/i , /4/i , /5/i , /6/i , /7/i ] as const , wide : [ /(Chủ|Chúa) ?Nhật/i , /Hai/i , /Ba/i , /Tư/i , /Năm/i , /Sáu/i , /Bảy/i , ] as const , } ; const matchDayPeriodPatterns = { narrow : /^(a|p|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i , abbreviated : /^(am|pm|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i , wide : /^(ch[^i]*|sa|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i , } ; const parseDayPeriodPatterns = { any : { am : /^(a|sa)/i , pm : /^(p|ch[^i]*)/i , midnight : /nửa đêm/i , noon : /trưa/i , morning : /sáng/i , afternoon : /chiều/i , evening : /tối/i , night : /^đêm/i , } , } ; const match = { ordinalNumber : buildMatchPatternFn ( { matchPattern : matchOrdinalNumberPattern , parsePattern : parseOrdinalNumberPattern , valueCallback : ( value ) => parseInt ( value , 10 ) , } ) , era : buildMatchFn ( { matchPatterns : matchEraPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseEraPatterns , defaultParseWidth : 'any' , } ) , quarter : buildMatchFn ( { matchPatterns : matchQuarterPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseQuarterPatterns , defaultParseWidth : 'any' , valueCallback : ( index ) => ( index + 1 ) as Quarter , } ) , month : buildMatchFn ( { matchPatterns : matchMonthPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseMonthPatterns , defaultParseWidth : 'wide' , } ) , day : buildMatchFn ( { matchPatterns : matchDayPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseDayPatterns , defaultParseWidth : 'wide' , } ) , dayPeriod : buildMatchFn ( { matchPatterns : matchDayPeriodPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseDayPeriodPatterns , defaultParseWidth : 'any' , } ) , } ; export default match ;