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 : /^(неділ[яі]|понеділ[ок][ка]|вівтор[ок][ка]|серед[аи]|четвер(га)?|п\W*?ятниц[яі]|субот[аи])/i , } ; const parseDayPatterns = { narrow : [ /^н/i , /^п/i , /^в/i , /^с/i , /^ч/i , /^п/i , /^с/i ] as const , any : [ /^н/i , /^п[он]/i , /^в/i , /^с[ер]/i , /^ч/i , /^п\W*?[ят]/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 ;