/* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ // @ts-nocheck import type { Match } from '../../../locale/types.ts'; import { numericPatterns } from '../constants.ts'; import { Parser } from '../Parser.ts'; import type { ParseFlags, ParseResult } from '../types.ts'; import { mapValue, parseNDigits, parseNumericPattern } from '../utils.ts'; export class MonthParser extends Parser { incompatibleTokens: string[] = ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']; priority = 110; parse(dateString: string, token: string, match: Match): ParseResult { const valueCallback = (value: number) => value - 1; switch (token) { // 1, 2, ..., 12 case 'M': return mapValue(parseNumericPattern(numericPatterns.month, dateString), valueCallback); // 01, 02, ..., 12 case 'MM': return mapValue(parseNDigits(2, dateString), valueCallback); // 1st, 2nd, ..., 12th case 'Mo': return mapValue( match.ordinalNumber(dateString, { unit: 'month', }), valueCallback, ); // Jan, Feb, ..., Dec case 'MMM': return ( match.month(dateString, { width: 'abbreviated', context: 'formatting', }) || match.month(dateString, { width: 'narrow', context: 'formatting' }) ); // J, F, ..., D case 'MMMMM': return match.month(dateString, { width: 'narrow', context: 'formatting', }); // January, February, ..., December case 'MMMM': default: return ( match.month(dateString, { width: 'wide', context: 'formatting' }) || match.month(dateString, { width: 'abbreviated', context: 'formatting', }) || match.month(dateString, { width: 'narrow', context: 'formatting' }) ); } } validate(_date: DateType, value: number): boolean { return value >= 0 && value <= 11; } set(date: DateType, _flags: ParseFlags, value: number): DateType { date.setMonth(value, 1); date.setHours(0, 0, 0, 0); return date; } } /* eslint-enable */