import type { Quarter } from '../../../../types' ; import type { Match } from '../../../types' ; import buildMatchFn from '../../../_lib/buildMatchFn/index' ; import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index' ; const matchOrdinalNumberPattern = /^(第\s*)?\d+(日|時|分|秒)?/i ; const parseOrdinalNumberPattern = /\d+/i ; const matchEraPatterns = { narrow : /^(前)/i , abbreviated : /^(前)/i , wide : /^(公元前|公元)/i , } ; const parseEraPatterns = { any : [ /^(前)/i , /^(公元)/i ] as const , } ; const matchQuarterPatterns = { narrow : /^[1234]/i , abbreviated : /^第[一二三四]季/i , wide : /^第[一二三四]季度/i , } ; const parseQuarterPatterns = { any : [ /(1|一)/i , /(2|二)/i , /(3|三)/i , /(4|四)/i ] as const , } ; const matchMonthPatterns = { narrow : /^(一|二|三|四|五|六|七|八|九|十[二一])/i , abbreviated : /^(一|二|三|四|五|六|七|八|九|十[二一]|\d|1[12])月/i , wide : /^(一|二|三|四|五|六|七|八|九|十[二一])月/i , } ; const parseMonthPatterns = { narrow : [ /^一/i , /^二/i , /^三/i , /^四/i , /^五/i , /^六/i , /^七/i , /^八/i , /^九/i , /^十(?!(一|二))/i , /^十一/i , /^十二/i , ] as const , any : [ /^一|1/i , /^二|2/i , /^三|3/i , /^四|4/i , /^五|5/i , /^六|6/i , /^七|7/i , /^八|8/i , /^九|9/i , /^十(?!(一|二))|10/i , /^十一|11/i , /^十二|12/i , ] as const , } ; const matchDayPatterns = { narrow : /^[一二三四五六日]/i , short : /^[一二三四五六日]/i , abbreviated : /^週[一二三四五六日]/i , wide : /^星期[一二三四五六日]/i , } ; const parseDayPatterns = { any : [ /日/i , /一/i , /二/i , /三/i , /四/i , /五/i , /六/i ] as const , } ; const matchDayPeriodPatterns = { any : /^(上午?|下午?|午夜|[中正]午|早上?|下午|晚上?|凌晨)/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 : 'any' , parsePatterns : parseDayPeriodPatterns , defaultParseWidth : 'any' , } ) , } ; export default match ;