import { I as IterableContainer } from './IterableContainer-CtfinwiH.cjs'; import { T as TupleParts } from './TupleParts-CP0H7BrE.cjs'; import { C as CoercedArray } from './CoercedArray-DRz3tqda.cjs'; /** * The union of all possible ways to write a tuple as [...left, ...right]. */ type TupleSplits = Tuple extends infer T ? TupleParts extends { prefix: infer Prefix extends ReadonlyArray; item: infer Item; suffix: infer Suffix extends ReadonlyArray; } ? FixedTupleSplits, ...Suffix]> | { left: [...Prefix, ...CoercedArray]; right: [...CoercedArray, ...Suffix]; } | (FixedTupleSplits extends infer U ? U extends { left: infer L extends ReadonlyArray; right: infer R; } ? { left: [...Prefix, ...CoercedArray, ...L]; right: R; } : never : never) : never : never; /** * Helper type for `TupleSplits`, for tuples without rest params. */ type FixedTupleSplits = { left: L; right: R; } | (L extends readonly [] ? never : L extends readonly [...infer LHead, infer LTail] ? FixedTupleSplits : L extends readonly [...infer LHead, (infer LTail)?] ? FixedTupleSplits : never); export type { TupleSplits as T };