import type { Quarter, Era, Day, Month } from "../../types.js"; import type { LocaleUnitValue, LocaleWidth, LocaleDayPeriod, MatchFn, MatchValueCallback, } from "../types.js"; export interface BuildMatchFnArgs< Result extends LocaleUnitValue, DefaultMatchWidth extends LocaleWidth, DefaultParseWidth extends LocaleWidth, > { matchPatterns: BuildMatchFnMatchPatterns; defaultMatchWidth: DefaultMatchWidth; parsePatterns: BuildMatchFnParsePatterns; defaultParseWidth: DefaultParseWidth; valueCallback?: MatchValueCallback< Result extends LocaleDayPeriod ? string : number, Result >; } export type BuildMatchFnMatchPatterns = { [Width in LocaleWidth]?: RegExp; } & { [Width in DefaultWidth]: RegExp; }; export type BuildMatchFnParsePatterns< Value extends LocaleUnitValue, DefaultWidth extends LocaleWidth, > = { [Width in LocaleWidth]?: ParsePattern; } & { [Width in DefaultWidth]: ParsePattern; }; export type ParsePattern = Value extends LocaleDayPeriod ? Record : Value extends Quarter ? readonly [RegExp, RegExp, RegExp, RegExp] : Value extends Era ? readonly [RegExp, RegExp] : Value extends Day ? readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp] : Value extends Month ? readonly [ RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, ] : never; export declare function buildMatchFn< Value extends LocaleUnitValue, DefaultMatchWidth extends LocaleWidth, DefaultParseWidth extends LocaleWidth, >( args: BuildMatchFnArgs, ): MatchFn;