import { ArrayWrapper } from './array'; import { MapWrapper } from './map'; import { ObjectWrapper } from './object'; import { SetWrapper } from './set'; import { Wrapper } from './wrapper'; export declare type Lifted = undefined extends T ? never : null extends T ? never : T extends Wrapper ? LiftedValue : LiftedValue; declare type AtomicObject = Function | Promise | Date | RegExp | Boolean | Number | String; declare type LiftedValue = null extends T ? never : undefined extends T ? never : T extends AtomicObject ? T : T extends ReadonlyArray ? ArrayWrapper : T extends ReadonlyMap ? MapWrapper : T extends ReadonlySet ? SetWrapper : T extends object ? ObjectWrapper : never; interface Lift { (obj: ArrayWrapper>): ArrayWrapper>; (obj: ObjectWrapper): ObjectWrapper; >(obj: MapWrapper): MapWrapper; >(obj: SetWrapper): SetWrapper; /** lift won't wrap primitives and some other non container-like objects */ (obj: T): T; /** Wraps an Array to provide a richer API. Unwrap with .value() **/ (obj: T[]): ArrayWrapper; /** Wraps a readonly Array to provide a richer API. Unwrap with .value() **/ (obj: ReadonlyArray): ArrayWrapper>; /** Wraps a Map to provide a richer API. Unwrap with .value() **/ (obj: Map): MapWrapper>; /** Wraps a readonly Map to provide a richer API. Unwrap with .value() **/ (obj: ReadonlyMap): MapWrapper>; /** Wraps a Set to provide a richer API. Unwrap with .value() **/ (obj: Set): SetWrapper>; /** Wraps a readonly Set to provide a richer API. Unwrap with .value() **/ (obj: ReadonlySet): SetWrapper>; /** Wraps an Object to provide a richer API. Unwrap with .value() **/ (obj: T): ObjectWrapper; } export declare const lift: Lift; export declare type Pipe = typeof pipe; export declare function pipe(this: Wrapper, func: (object: T) => R): Lifted; export {};