/* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ // @ts-nocheck import { getWeekYear } from '../../../getWeekYear/index.ts'; import type { Match } from '../../../locale/types.ts'; import { startOfWeek } from '../../../startOfWeek/index.ts'; import { Parser } from '../Parser.ts'; import type { ParseFlags, ParseResult, ParserOptions } from '../types.ts'; import { mapValue, normalizeTwoDigitYear, parseNDigits } from '../utils.ts'; import type { YearParserValue } from './YearParser.ts'; // Local week-numbering year export class LocalWeekYearParser extends Parser { priority = 130; parse(dateString: string, token: string, match: Match): ParseResult { const valueCallback = (year: number) => ({ year, isTwoDigitYear: token === 'YY', }); switch (token) { case 'Y': return mapValue(parseNDigits(4, dateString), valueCallback); case 'Yo': return mapValue( match.ordinalNumber(dateString, { unit: 'year', }), valueCallback, ); default: return mapValue(parseNDigits(token.length, dateString), valueCallback); } } validate(_date: DateType, value: YearParserValue): boolean { return value.isTwoDigitYear || value.year > 0; } set( date: DateType, flags: ParseFlags, value: YearParserValue, options: ParserOptions, ): DateType { const currentYear = getWeekYear(date, options); if (value.isTwoDigitYear) { const normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); date.setFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate); date.setHours(0, 0, 0, 0); return startOfWeek(date, options); } const year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; date.setFullYear(year, 0, options.firstWeekContainsDate); date.setHours(0, 0, 0, 0); return startOfWeek(date, options); } incompatibleTokens: string[] = ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']; } /* eslint-enable */