import type { Internal } from '../internal/types.js'; import type { Composable, PipeReturn as BasePipeReturn, SequenceReturn as BaseSequenceReturn, UnpackData } from '../types.js'; type CommonContext = Fns extends [] ? Ctx : Fns extends [ Composable<(...args: infer CParameters) => any>, ...infer RestFns ] ? GetContext extends [unknown?] ? Internal.IsIncompatible> extends true ? Internal.FailToCompose> : CommonContext, Extract>, [ unknown? ]>> : never : never; type SequenceReturn = BaseSequenceReturn> extends Composable<(...args: any[]) => infer CReturn> ? CommonContext extends Internal.IncompatibleArguments ? CommonContext : Composable<(...args: SetContext, CommonContext>) => CReturn> : CanComposeInSequence; type PipeReturn = BasePipeReturn> extends Composable<(...args: any[]) => infer CReturn> ? CommonContext extends Internal.IncompatibleArguments ? CommonContext : Composable<(...args: SetContext, CommonContext>) => CReturn> : CanComposeInSequence; type CanComposeInSequence = Fns extends [Composable<(...a: infer PA) => infer OA>, ...infer restA] ? restA extends [ Composable<(firstParameter: infer FirstBParameter, secondParameter: any, ...b: infer PB) => any>, ...unknown[] ] ? Internal.IsNever> extends true ? Internal.FailToCompose : Awaited extends FirstBParameter ? Internal.EveryElementTakes extends true ? CanComposeInSequence OA> ]> : Internal.EveryElementTakes : Internal.FailToCompose, FirstBParameter> : [...Arguments, Composable<(...a: PA) => OA>] : never; type GetContext = Params extends [ unknown, infer ctxMandatory ] ? [ctxMandatory] : Params extends Partial<[unknown, infer ctxOptional]> ? [ctxOptional?] : Params extends [...Partial<[unknown]>] ? [unknown?] : Params extends [...infer AnyArg] ? [AnyArg[1]] : never; type SetContext = Params extends [infer firstMandatory, ...any] ? [firstMandatory, ...Ctx] : Params extends [...Partial<[infer firstOptional, ...any]>] ? [firstOptional?, ...Ctx] : never; type BranchContext Internal.AnyFn | null | Promise> = Awaited> extends Internal.AnyFn ? CommonContext<[ SourceComposable, Composable>>> ]> : GetContext>; type BranchReturn Internal.AnyFn | null | Promise> = CanComposeInSequence<[ SourceComposable, Composable ]> extends Composable[] ? Awaited> extends null ? SourceComposable : CanComposeInSequence<[ SourceComposable, Awaited> ]> extends [Composable, ...any] ? Composable<(...args: SetContext> ]>[0]>, BranchContext>) => null extends Awaited> ? UnpackData | UnpackData>>>> : UnpackData>>>>> : CanComposeInSequence<[SourceComposable, Awaited>]> : CanComposeInSequence<[SourceComposable, Composable]>; export type { BranchReturn, CommonContext, GetContext, PipeReturn, SequenceReturn, SetContext, }; //# sourceMappingURL=types.d.ts.map