import { IsTupleList, List } from "../list"; import { Builtin, NonNull, NonNullish, NonUndefined, Nullable, Nullishable, Undefinable } from "../primitive"; import { IsUnknown } from "../type"; /** * makes (nested) values of an object nullishable (i.e. possibly null or undefined) * * @since 0.0.2 */ export type DeepNullishable = T extends Builtin ? Nullishable : T extends Promise ? Promise> : IsTupleList extends true ? { [K in keyof T]?: Nullishable>; } : T extends List ? List> : T extends Map ? Map, DeepNullishable> : T extends Set ? Set> : T extends ReadonlyMap ? ReadonlyMap, DeepNullishable> : T extends ReadonlySet ? ReadonlySet> : T extends WeakMap ? WeakMap> : T extends WeakSet ? WeakSet : T extends {} ? { [K in keyof T]?: DeepNullishable; } : IsUnknown extends true ? unknown : Nullishable; /** * makes (nested) values of an object nullable * * @since 0.0.2 */ export type DeepNullable = T extends Builtin ? Nullable : T extends Promise ? Promise> : IsTupleList extends true ? { [K in keyof T]?: Nullable>; } : T extends List ? List> : T extends Map ? Map, DeepNullable> : T extends Set ? Set> : T extends ReadonlyMap ? ReadonlyMap, DeepNullable> : T extends ReadonlySet ? ReadonlySet> : T extends WeakMap ? WeakMap> : T extends WeakSet ? WeakSet : T extends {} ? { [K in keyof T]?: DeepNullable; } : IsUnknown extends true ? unknown : Nullable; /** * makes (nested) values of an object undefinable * * @since 0.0.2 */ export type DeepUndefinable = T extends Builtin ? Undefinable : T extends Promise ? Promise> : IsTupleList extends true ? { [K in keyof T]?: Undefinable>; } : T extends List ? List> : T extends Map ? Map, DeepUndefinable> : T extends Set ? Set> : T extends ReadonlyMap ? ReadonlyMap, DeepUndefinable> : T extends ReadonlySet ? ReadonlySet> : T extends WeakMap ? WeakMap> : T extends WeakSet ? WeakSet : T extends {} ? { [K in keyof T]?: DeepUndefinable; } : IsUnknown extends true ? unknown : Undefinable; /** * makes (nested) values of an object nonnullishable (i.e. cannot be null or undefined) * * @since 0.0.2 */ export type DeepNonNullish = T extends Builtin ? NonNullish : T extends Promise ? Promise> : IsTupleList extends true ? { [K in keyof T]?: NonNullish>; } : T extends List ? List> : T extends Map ? Map, DeepNonNullish> : T extends Set ? Set> : T extends ReadonlyMap ? ReadonlyMap, DeepNonNullish> : T extends ReadonlySet ? ReadonlySet> : T extends WeakMap ? WeakMap, DeepNonNullish> : T extends WeakSet ? WeakSet> : T extends {} ? { [K in keyof T]?: DeepNonNullish; } : IsUnknown extends true ? unknown : NonNullish; /** * makes (nested) values of an object nonnullable * * @since 0.0.2 */ export type DeepNonNull = T extends Builtin ? NonNull : T extends Promise ? Promise> : IsTupleList extends true ? { [K in keyof T]?: NonNull>; } : T extends List ? List> : T extends Map ? Map, DeepNonNull> : T extends Set ? Set> : T extends ReadonlyMap ? ReadonlyMap, DeepNonNull> : T extends ReadonlySet ? ReadonlySet> : T extends WeakMap ? WeakMap, DeepNonNull> : T extends WeakSet ? WeakSet> : T extends {} ? { [K in keyof T]?: DeepNonNull; } : IsUnknown extends true ? unknown : NonNull; /** * makes (nested) values of an object nonundefinable * * @since 0.0.2 */ export type DeepNonUndefined = T extends Builtin ? NonUndefined : T extends Promise ? Promise> : IsTupleList extends true ? { [K in keyof T]?: NonUndefined>; } : T extends List ? List> : T extends Map ? Map, DeepNonUndefined> : T extends Set ? Set> : T extends ReadonlyMap ? ReadonlyMap, DeepNonUndefined> : T extends ReadonlySet ? ReadonlySet> : T extends WeakMap ? WeakMap, DeepNonUndefined> : T extends WeakSet ? WeakSet> : T extends {} ? { [K in keyof T]?: DeepNonUndefined; } : IsUnknown extends true ? unknown : NonUndefined; //# sourceMappingURL=deep-nullish.d.ts.map