import { AnyArray } from "../any-array"; import { Builtin } from "../built-in"; import { IsNever } from "../is-never"; import { IsTuple } from "../is-tuple"; import { IsUnknown } from "../is-unknown"; export type DeepReadonly = Type extends Exclude ? Type : Type extends Map ? ReadonlyMap, DeepReadonly> : Type extends ReadonlyMap ? ReadonlyMap, DeepReadonly> : Type extends WeakMap ? WeakMap, DeepReadonly> : Type extends Set ? ReadonlySet> : Type extends ReadonlySet ? ReadonlySet> : Type extends WeakSet ? WeakSet> : Type extends Promise ? Promise> : Type extends AnyArray ? IsNever> extends false ? { readonly [Key in keyof Type]: DeepReadonly; } : ReadonlyArray> : Type extends {} ? { readonly [Key in keyof Type]: DeepReadonly; } : IsUnknown extends true ? unknown : Readonly;