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 : /^((до )?н\.?\s?э\.?)/i , abbreviated : /^((до )?н\.?\s?э\.?)/i , wide : /^(до нашей эры|нашей эры|наша эра)/i , } ; const parseEraPatterns = { any : [ /^д/i , /^н/i ] as const , } ; const matchQuarterPatterns = { narrow : /^[1234]/i , abbreviated : /^[1234](-?[ыои]?й?)? кв.?/i , wide : /^[1234](-?[ыои]?й?)? квартал/i , } ; const parseQuarterPatterns = { any : [ /1/i , /2/i , /3/i , /4/i ] as const , } ; const matchMonthPatterns = { narrow : /^[яфмаисонд]/i , abbreviated : /^(янв|фев|март?|апр|ма[йя]|июн[ья]?|июл[ья]?|авг|сент?|окт|нояб?|дек)\.?/i , wide : /^(январ[ья]|феврал[ья]|марта?|апрел[ья]|ма[йя]|июн[ья]|июл[ья]|августа?|сентябр[ья]|октябр[ья]|октябр[ья]|ноябр[ья]|декабр[ья])/i , } ; const parseMonthPatterns = { narrow : [ /^я/i , /^ф/i , /^м/i , /^а/i , /^м/i , /^и/i , /^и/i , /^а/i , /^с/i , /^о/i , /^н/i , /^я/i , ] as const , any : [ /^я/i , /^ф/i , /^мар/i , /^ап/i , /^ма[йя]/i , /^июн/i , /^июл/i , /^ав/i , /^с/i , /^о/i , /^н/i , /^д/i , ] as const , } ; const matchDayPatterns = { narrow : /^[впсч]/i , short : /^(вс|во|пн|по|вт|ср|чт|че|пт|пя|сб|су)\.?/i , abbreviated : /^(вск|вос|пнд|пон|втр|вто|срд|сре|чтв|чет|птн|пят|суб).?/i , wide : /^(воскресень[ея]|понедельника?|вторника?|сред[аы]|четверга?|пятниц[аы]|суббот[аы])/i , } ; const parseDayPatterns = { narrow : [ /^в/i , /^п/i , /^в/i , /^с/i , /^ч/i , /^п/i , /^с/i ] as const , any : [ /^в[ос]/i , /^п[он]/i , /^в/i , /^ср/i , /^ч/i , /^п[ят]/i , /^с[уб]/i , ] as const , } ; const matchDayPeriodPatterns = { narrow : /^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i , abbreviated : /^([дп]п|полн\.?|полд\.?|утр[оа]|день|дня|веч\.?|ноч[ьи])/i , wide : /^([дп]п|полночь|полдень|утр[оа]|день|дня|вечера?|ноч[ьи])/i , } ; const parseDayPeriodPatterns = { any : { am : /^дп/i , pm : /^пп/i , midnight : /^полн/i , noon : /^полд/i , morning : /^у/i , afternoon : /^д[ен]/i , evening : /^в/i , night : /^н/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 : 'any' , } ) , day : buildMatchFn ( { matchPatterns : matchDayPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseDayPatterns , defaultParseWidth : 'any' , } ) , dayPeriod : buildMatchFn ( { matchPatterns : matchDayPeriodPatterns , defaultMatchWidth : 'wide' , parsePatterns : parseDayPeriodPatterns , defaultParseWidth : 'any' , } ) , } ; export default match ;