import type { BaseTransferInterface, BridgeInterface, DisposableInterface, GateInterface, GateTransferInterface, TriggerableInterface, PushableInterface, PullableInterface, SubscribableInterface, PollingProxyInterface, PollingProxyTransferInterface, PullableTransferInterface, PushableTransferInterface, SubscribableTransferInterface, TickerInterface, AsyncPushableInterface, AsyncPullableInterface, AsyncTriggerableInterface, AsyncPollingProxyInterface, AsyncPushableTransferInterface, AsyncPullableTransferInterface, AsyncPollingProxyTransferInterface } from "./interfaces"; import type { TickerConfig } from "./configs"; /** * Extracts the first element type from a readonly tuple. * @category Types */ export type First = T extends readonly [infer Head, ...unknown[]] ? Head : never; /** * Extracts the last element type from a readonly tuple. * @category Types */ export type Last = T extends readonly [...unknown[], infer Tail] ? Tail : never; /** * Synchronous data handler — called with a value of type T. * @category Types */ export type DataHandler = (data: T) => void; /** * Synchronous data fetcher — returns a value of type T or undefined. * @category Types */ export type DataFetcher = () => T | undefined; /** * Asynchronous data handler — may return a Promise or void. * @category Types */ export type AsyncDataHandler = (data: T) => Promise | void; /** * Asynchronous data fetcher — returns a Promise of T or undefined. * @category Types */ export type AsyncDataFetcher = () => Promise; /** * Error handler — receives an Error and returns void. * @category Types */ export type ErrorHandler = (e: Error, source: TSource) => void; /** * Callback invoked by a Ticker on each tick. * @category Types */ export type TickerCallback = () => void; /** * Factory function that creates a TickerInterface from a TickerConfig. * @category Types */ export type TickerFactory = (config: TickerConfig) => TickerInterface; /** * Branded type: PushableInterface with the `isPushable` flag set to true. * @category Types */ export type Pushable = PushableInterface & { readonly isPushable: true; }; /** * Branded type: PollingProxyInterface with the `isPollingProxy` flag set to true. * @category Types */ export type PollingProxy = PollingProxyInterface & { readonly isPollingProxy: true; }; /** * Branded type: PullableInterface with the `isPullable` flag set to true. * @category Types */ export type Pullable = PullableInterface & { readonly isPullable: true; }; /** * Branded type: SubscribableInterface with the `isSubscribable` flag set to true. * @category Types */ export type Subscribable = SubscribableInterface & { readonly isSubscribable: true; }; /** * Branded type: TriggerableInterface with the `isTriggerable` flag set to true. * @category Types */ export type Triggerable = TriggerableInterface & { readonly isTriggerable: true; }; /** * Branded type: GateInterface with the `isGate` flag set to true. * @category Types */ export type Gate = GateInterface & { readonly isGate: true; }; /** * Branded type: AsyncPushableInterface with the `isAsyncPushable` flag set to true. * @category Types */ export type AsyncPushable = AsyncPushableInterface & { readonly isAsyncPushable: true; }; /** * Branded type: AsyncPollingProxyInterface with the `isAsyncPollingProxy` flag set to true. * @category Types */ export type AsyncPollingProxy = AsyncPollingProxyInterface & { readonly isAsyncPollingProxy: true; }; /** * Branded type: AsyncPullableInterface with the `isAsyncPullable` flag set to true. * @category Types */ export type AsyncPullable = AsyncPullableInterface & { readonly isAsyncPullable: true; }; /** * Branded type: AsyncTriggerableInterface with the `isAsyncTriggerable` flag set to true. * @category Types */ export type AsyncTriggerable = AsyncTriggerableInterface & { readonly isAsyncTriggerable: true; }; /** * Maps a single feature flag to its corresponding branded interface and direction flags. */ type FeatureMap = F extends { readonly isPushable: true; } ? Pushable & { readonly isInput: true; } : F extends { readonly isPollingProxy: true; } ? PollingProxy & { readonly isInput: true; readonly isOutput: true; } : F extends { readonly isPullable: true; } ? Pullable & { readonly isOutput: true; } : F extends { readonly isSubscribable: true; } ? Subscribable & { readonly isOutput: true; } : F extends { readonly isTriggerable: true; } ? Triggerable : F extends { readonly isGate: true; } ? Gate : F extends { readonly isAsyncPushable: true; } ? AsyncPushable & { readonly isInput: true; } : F extends { readonly isAsyncPollingProxy: true; } ? AsyncPollingProxy & { readonly isInput: true; readonly isOutput: true; } : F extends { readonly isAsyncPullable: true; } ? AsyncPullable & { readonly isOutput: true; } : F extends { readonly isAsyncTriggerable: true; } ? AsyncTriggerable : unknown; /** * Converts a union type into an intersection type via contravariant function parameter inference. */ type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never; /** * Resolves an array of feature flags into a single intersection of all corresponding branded interfaces. */ type ResolveFeatures = UnionToIntersection<{ [K in keyof Features]: FeatureMap; }[number]>; /** * Adds `isDuplex: true` when the resolved features include both input and output direction. */ type IsDuplexFeatures = ResolveFeatures extends { readonly isInput: true; readonly isOutput: true; } ? { readonly isDuplex: true; } : unknown; /** * Resolves a transfer with explicit feature flags into a concrete intersection type with BaseTransferInterface and duplex flag. */ type ExplicitTransfer = BaseTransferInterface & ResolveFeatures & IsDuplexFeatures; /** * Generic transfer type that resolves to an ExplicitTransfer with the correct * feature set based on the number of type arguments provided. * * - Two arguments (T, T, Features[]): single-type duplex transfer. * - Three arguments (TIn, TOut, Features[]): dual-type transfer. * * @category Types */ export type Transfer = TFeaturesOrUndefined extends any[] ? ExplicitTransfer : TOutOrFeatures extends any[] ? ExplicitTransfer : never; /** * Union of all transfer interfaces that can act as a pipeline input (push/poll/gate/async variants). * @category Types */ export type InputTransfer = PushableTransferInterface | PollingProxyTransferInterface | AsyncPushableTransferInterface | AsyncPollingProxyTransferInterface | GateTransferInterface; /** * Union of all transfer interfaces that can act as a pipeline output (pull/subscribe/gate/async variants). * @category Types */ export type OutputTransfer = PullableTransferInterface | SubscribableTransferInterface | AsyncPullableTransferInterface | GateTransferInterface; /** * A transfer that is both an input and an output (duplex). * @category Types */ export type DuplexTransfer = InputTransfer & OutputTransfer & { isDuplex: true; }; /** * Extracts the input data type from an InputTransfer. * @category Types */ export type InputTransferDataType = T extends PushableInterface ? U : T extends PollingProxyInterface ? U : T extends AsyncPushableInterface ? U : T extends AsyncPollingProxyInterface ? U : T extends GateTransferInterface ? U : never; /** * Extracts the output data type from an OutputTransfer. * @category Types */ export type OutputTransferDataType = T extends PullableTransferInterface ? U : T extends SubscribableInterface ? U : T extends PullableInterface ? U : T extends AsyncPullableTransferInterface ? U : T extends GateTransferInterface ? U : never; /** * Base type for selector keys — string, number, or symbol. * @category Types */ export type BaseSelectorKey = string | number | symbol; /** * Extracts the key type from a bridge map. * @category Types */ export type SelectorKey> = keyof TMap; /** Filters `never` elements out of a tuple type, preserving order of the remaining elements. */ type FilterNever = T extends [infer Head, ...infer Rest] ? [Head] extends [never] ? FilterNever : FilterNever : Acc; /** * Unified composite transfer type produced by CompositeTransferBuilder. * * Input capability flags (Pushable, PollingProxy, AsyncPushable, AsyncPollingProxy) * are extracted from the start transfer. Output capability flags (Pullable, Subscribable, * AsyncPullable) are extracted from the finish transfer. Triggerable, AsyncTriggerable, * and Gate are extracted from options or the start/finish transfers (same priority logic * as UniversalCompositeTransfer). * * The result is a `Transfer` — the same computed type used * by all transfer factories, with compile-time literal flags guaranteeing method existence. * * @category Types */ export type CompositeTransfer = Transfer : never, TStartTransfer extends { readonly isPollingProxy: true; } ? PollingProxy : never, TStartTransfer extends { readonly isAsyncPushable: true; } ? AsyncPushable : never, TStartTransfer extends { readonly isAsyncPollingProxy: true; } ? AsyncPollingProxy : never, TFinishTransfer extends { readonly isPullable: true; } ? Pullable : never, TFinishTransfer extends { readonly isSubscribable: true; } ? Subscribable : never, TFinishTransfer extends { readonly isAsyncPullable: true; } ? AsyncPullable : never, TTriggerable extends TriggerableInterface ? Triggerable : never, TAsyncTriggerable extends AsyncTriggerableInterface ? AsyncTriggerable : never, TGate extends GateInterface ? Gate : never ]>>; /** * @deprecated Use `CompositeTransfer` instead. Will be removed in the next major release. * * Composite transfer type produced by InputPipelineBuilder — exposes input capabilities plus optional trigger/gate. * * @category Types */ export type CompositeInputTransfer, TTriggerable extends TriggerableInterface | undefined, TAsyncTriggerable extends AsyncTriggerableInterface | undefined, TGate extends GateInterface | undefined> = BaseTransferInterface & DisposableInterface & InputTransfer & Omit | keyof PullableInterface> & (TTriggerable extends TriggerableInterface ? TriggerableInterface : {}) & (TAsyncTriggerable extends AsyncTriggerableInterface ? AsyncTriggerableInterface : {}) & (TGate extends GateInterface ? GateInterface : {}); /** * @deprecated Use `CompositeTransfer` instead. Will be removed in the next major release. * * Composite transfer type produced by OutputPipelineBuilder — exposes output capabilities plus optional trigger/gate. * * @category Types */ export type CompositeOutputTransfer, TTriggerable extends TriggerableInterface | undefined, TAsyncTriggerable extends AsyncTriggerableInterface | undefined, TGate extends GateInterface | undefined> = BaseTransferInterface & DisposableInterface & OutputTransfer & Omit | keyof AsyncPushableInterface> & (TTriggerable extends TriggerableInterface ? TriggerableInterface : {}) & (TAsyncTriggerable extends AsyncTriggerableInterface ? AsyncTriggerableInterface : {}) & (TGate extends GateInterface ? GateInterface : {}); /** * @deprecated Use `CompositeTransfer` instead. Will be removed in the next major release. * * Composite transfer type produced by DuplexPipelineBuilder — exposes both input and output capabilities plus optional trigger/gate. * * @category Types */ export type CompositeDuplexTransfer, TFinishTransfer extends OutputTransfer, TTriggerable extends TriggerableInterface | undefined, TAsyncTriggerable extends AsyncTriggerableInterface | undefined, TGate extends GateInterface | undefined> = BaseTransferInterface & DisposableInterface & InputTransfer & OutputTransfer & Omit | keyof PullableInterface> & Omit | keyof AsyncPushableInterface> & { isDuplex: true; } & (TTriggerable extends TriggerableInterface ? TriggerableInterface : {}) & (TAsyncTriggerable extends AsyncTriggerableInterface ? AsyncTriggerableInterface : {}) & (TGate extends GateInterface ? GateInterface : {}); export {}; //# sourceMappingURL=types.d.ts.map