/** * @file Curry.Internal.Types.ts * @author Gage Sorrell * @copyright (c) 2026 Gage Sorrell * @license MIT */ import type { FCurriedArgument } from "./Curry.Types.cjs"; export type ReplaceAtIndex, TargetIndexType extends keyof TupleType> = { [Index in keyof TupleType]: Index extends TargetIndexType ? FCurriedArgument : TupleType[Index]; }; type IsEqual = (() => Value extends Left ? 1 : 2) extends (() => Value extends Right ? 1 : 2) ? true : false; export type TCurriedArgumentVectorSourceRecursive, CurriedType extends Array, SourceVectorType extends Array = []> = ArgumentVectorType extends [ infer ArgumentType, ...infer RemainingArgumentVectorType ] ? CurriedType extends [ infer CurriedArgumentType, ...infer RemainingCurriedType ] ? IsEqual extends true ? TCurriedArgumentVectorSourceRecursive : TCurriedArgumentVectorSourceRecursive : SourceVectorType : SourceVectorType; export type TWithCurryRecurrence, HasPipedArgument extends boolean = false, HasOriginalArgument extends boolean = false> = ArgumentVectorType extends [ infer ArgumentType, ...infer RemainingArgumentVectorType ] ? [ FCurriedArgument, ...TWithCurryRecurrence ] | [ ArgumentType, ...TWithCurryRecurrence ] : HasPipedArgument extends true ? HasOriginalArgument extends true ? [] : never : never; export type TCurriedRecurrence, CurriedType extends Array, __Accumulator extends Array = []> = [ ...ArgumentVectorType extends [infer HeadType, ...infer TailType] ? CurriedType extends [infer CurriedHeadType, ...infer CurriedTailType] ? CurriedHeadType extends FCurriedArgument ? TCurriedRecurrence : TCurriedRecurrence : never : ArgumentVectorType extends [infer HeadType] ? CurriedType extends [infer CurriedHeadType] ? CurriedHeadType extends FCurriedArgument ? [...__Accumulator, HeadType] : __Accumulator : __Accumulator : __Accumulator ]; export {}; //# sourceMappingURL=Curry.Internal.Types.d.cts.map