/* eslint-disable eslint-comments/no-unlimited-disable */ /* eslint-disable */ // @ts-nocheck import { constructFrom } from '../../constructFrom/index.ts'; import { transpose } from '../../transpose/index.ts'; import type { ContextFn, DateArg } from '../../types.ts'; import type { ParseFlags, ParserOptions } from './types.ts'; const TIMEZONE_UNIT_PRIORITY = 10; export abstract class Setter { public abstract priority: number; public subPriority = 0; public validate(_utcDate: DateType, _options?: ParserOptions): boolean { return true; } public abstract set( date: DateType, flags: ParseFlags, options: ParserOptions, ): DateType | [DateType, ParseFlags]; } export class ValueSetter extends Setter { private value: Value; private validateValue: (date: DateType, value: Value, options: ParserOptions) => boolean; private setValue: ( date: DateType, flags: ParseFlags, value: Value, options: ParserOptions, ) => DateType | [DateType, ParseFlags]; public priority: number; constructor( value: Value, validateValue: (date: DateType, value: Value, options: ParserOptions) => boolean, setValue: ( date: DateType, flags: ParseFlags, value: Value, options: ParserOptions, ) => DateType | [DateType, ParseFlags], priority: number, subPriority?: number, ) { super(); this.value = value; this.validateValue = validateValue; this.setValue = setValue; this.priority = priority; if (subPriority) { this.subPriority = subPriority; } } validate(date: DateType, options: ParserOptions): boolean { return this.validateValue(date, this.value, options); } set( date: DateType, flags: ParseFlags, options: ParserOptions, ): DateType | [DateType, ParseFlags] { return this.setValue(date, flags, this.value, options); } } export class DateTimezoneSetter extends Setter { priority: number = TIMEZONE_UNIT_PRIORITY; subPriority = -1; context: ContextFn; constructor(context: ContextFn | undefined, reference: DateArg & {}) { super(); this.context = context || ((date) => constructFrom(reference, date)); } set(date: DateType, flags: ParseFlags): DateType { if (flags.timestampIsSet) return date; return constructFrom(date, transpose(date, this.context)); } } /* eslint-enable */