import { BridgeHandler } from '../Handler';
export declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
export declare type KeysWithValNotNever<T> = keyof {
    [P in keyof T as T[P] extends never ? never : P]: P;
};
export declare type ExcludeNeverKeys<T> = {
    [key in KeysWithValNotNever<T> & keyof T]: T[key];
};
declare type Values<T> = T[keyof T];
declare type Unfoo<T> = T extends {
    foo: any;
} ? T['foo'] : never;
declare type RemoveError<T> = T extends {
    error: any;
} ? never : T;
declare type NFooWithoutError<T extends Readonly<BridgeHandler[]>> = {
    [K in keyof T]: T[K] extends BridgeHandler<(arg: any) => infer Output, any> ? {
        foo: RemoveError<Output>;
    } : never;
};
declare type NFooWithoutErrorParams<T extends Readonly<BridgeHandler[]>> = {
    [K in keyof T]: T[K] extends BridgeHandler<(arg: infer Input) => any, any> ? {
        foo: RemoveError<Input>;
    } : never;
};
export declare type MidsReturnsIntersection<T extends Readonly<any[]>> = Unfoo<UnionToIntersection<Values<NFooWithoutError<T>>>>;
export declare type MidsParams<T extends Readonly<any[]>> = Unfoo<UnionToIntersection<Values<NFooWithoutErrorParams<T>>>>;
declare type UnionToOvlds<U> = UnionToIntersection<U extends any ? (f: U) => void : never>;
declare type PopUnion<U> = UnionToOvlds<U> extends (a: infer A) => void ? A : never;
declare type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true;
export declare type UnionToArray<T, A extends unknown[] = []> = IsUnion<T> extends true ? UnionToArray<Exclude<T, PopUnion<T>>, [PopUnion<T>, ...A]> : [T, ...A];
declare type Indexify<T> = T & {
    [str: string]: undefined;
};
declare type UndefinedVals<T> = {
    [K in keyof T]: undefined;
};
declare type AllUnionKeys<T> = keyof UnionToIntersection<UndefinedVals<T>>;
export declare type AllFields<T> = {
    [K in AllUnionKeys<T> & string]: Indexify<T>[K];
};
export {};
//# sourceMappingURL=types.d.ts.map