type Without = { [P in Exclude]?: never; }; export type XOR = T | U extends object ? (Without & U) | (Without & T) : T | U; export interface MatcherContext { segment: string; regexMatch?: RegExpMatchArray | null; } export type TagMatcherFn = (placeholders: Record, context: MatcherContext) => ReturnType; export interface SingleTag { tag?: string | TagMatcherFn; } export interface MultiTags { tags?: string[] | TagMatcherFn; } export type TagConfigValue = string | string[] | TagMatcherFn; export interface ModuleConfig { [pathMatcher: string]: TagConfigValue | ModuleConfig; } export {};