import type { Matcher } from './Matcher'; export declare type PromiseLikeOrValue = T | PromiseLike; export declare type MatchResultNested = { actualKey: string | number; expectedKey?: string | number; result: MatchResult; }; export declare type MatchResult = { actual: T; expected: Expected; result: boolean | null; cause: string | null; nested: MatchResultNested[] | null; error: Error | null; }; export interface MatchResult2 { result: boolean; cause?: string; nested?: MatchResultNested[]; } export declare type MatchResult3 = boolean | string | MatchResult2; export declare type Match = Async extends false ? MatchSync : MatchAsync; export declare type MatchSync = (value: T) => MatchResult3; export declare type MatchAsync = (value: T) => PromiseLikeOrValue; export declare type MatcherSync = Matcher; export declare type MatcherAsync = Matcher; export declare type Expected = T | Matcher; export declare type ExpectedSync = Expected; export declare type ExpectedAsync = Expected; export declare type ToExpectedObject = { [key in keyof T]: Expected; }; export declare type TIterator = Async extends true ? Iterator | AsyncIterator : Iterator; export declare type TIterable = Async extends true ? Iterable | AsyncIterable : Iterable; export declare type ToExpectedIterator, Async extends boolean = boolean> = T extends TIterator ? TIterator, Async> : never; export declare type ToExpectedIterable, Async extends boolean = boolean> = T extends TIterable ? TIterable, Async> : never; export declare type ToExpectedArray = T extends [infer A, ...infer B] ? [Expected, ...(B extends never[] ? [] : ToExpectedArray)] : T extends Array ? Expected[] : never; declare type ToExpectedObjectDeep = { [key in keyof T]: ToExpectedDeep; }; declare type ToExpectedArrayDeep = T extends [infer A, ...infer B] ? [ToExpectedDeep, ...(B extends never[] ? [] : ToExpectedArrayDeep)] : T extends Array ? ToExpectedDeep[] : never; export declare type ToExpectedDeep = T extends any[] ? ToExpectedArrayDeep : T extends object ? ToExpectedObjectDeep : Expected; export declare const ANY: any; export declare const UNSET: any; export {};