import { Base } from "./base"; import { OptionName, Option, ExclusiveGroupIndex, ExclusiveGroups, Options, OptionType, OptionRawType } from "./getters"; type UnconstrainedOptions = Omit, ExclusiveGroupOptionName>; type UnconstrainedOptionName = string & keyof UnconstrainedOptions; type UnconstrainedOptionsByType = { [N in UnconstrainedOptionName]: T extends "type" ? OptionType : OptionRawType; }; type ExclusiveGroupOptionPairs = G extends [] ? [] : G extends [infer N, ...infer R] ? [ [ N, ExclusiveGroupOptionNameOption ], ...ExclusiveGroupOptionPairs ] : never; type ExclusiveGroupOptionNameOption = N extends OptionName ? Option : never; type PairsToMapping = T extends [] ? {} : T extends [[infer N, infer O], ...infer R] ? { [N_ in string & N]: O; } & PairsToMapping : never; type RequireOnly = Pick & Partial>; type ExclusiveGroupOptionalUnionByName, M extends OptionName, T extends "rawType" | "type"> = { [K in keyof RequireOnly, M>]: K extends M ? T extends "type" ? OptionType : OptionRawType : never; }; type Combine, T extends "rawType" | "type"> = { [N in keyof GRP]: GRP[N] extends OptionName ? { [Key in keyof (ExclusiveGroupOptionalUnionByName & UnconstrainedOptionsByType & O)]: Key extends keyof ExclusiveGroupOptionalUnionByName ? ExclusiveGroupOptionalUnionByName[Key] : Key extends keyof UnconstrainedOptionsByType ? UnconstrainedOptionsByType[Key] : Key extends keyof O ? O[Key] : never; } : never; } extends { [n: number]: infer I; } ? I : never; export type ExclusiveGroupsByName, GRPS extends ExclusiveGroups = ExclusiveGroups> = GRPS extends [infer GRP, ...infer Rest] ? GRP extends unknown[] ? N extends DeepTupleToUnion ? Exclude, N> : Rest extends any[] ? ExclusiveGroupsByName : never : never : never; type IsNeverType = [T] extends [never] ? true : never; export type ExclusiveGroupUnionAndUnconstrainedPlus = ExclusiveGroups, O extends unknown[] = []> = GRPS extends [infer GRP, ...infer Rest] ? GRP extends ExclusiveGroup ? Rest extends any[] ? O extends [] ? ExclusiveGroupUnionAndUnconstrainedPlus>> : ExclusiveGroupUnionAndUnconstrainedPlus]: Combine; } extends { [n: number]: infer I; } ? I : never>> : never : never : O extends { [n: number]: infer I; } ? true extends IsNeverType ? { [Key in keyof UnconstrainedOptionsByType]: UnconstrainedOptionsByType[Key]; } : I : never; export type UnionToTuple = ((T extends any ? (t: T) => T : never) extends infer U ? (U extends any ? (u: U) => any : never) extends (v: infer V) => any ? V : never : never) extends (_: any) => infer W ? [...UnionToTuple>, W] : []; type ExclusiveGroup = ExclusiveGroupIndex> = ExclusiveGroups[K]; type ExclusiveGroupOptionName = ExclusiveGroupIndex> = Extract, DeepTupleToUnion>>; type DeepTupleToUnion = T extends [] ? never : T extends [infer N, ...infer R] ? N extends unknown[] ? DeepTupleToUnion | DeepTupleToUnion : N | DeepTupleToUnion : never; type ExclusiveGroupOptionsByGroup> = PairsToMapping>; export {}; //# sourceMappingURL=exclusive.d.ts.map