import { UNSET } from '../../_/symbols/unset.js'; import type { $Decrement, DecrementArgument, IsCompatible } from '../../type/index.js'; /** @inline */ export type DeepReadonly_ = T extends object ? { readonly [k in keyof T]: DeepReadonly_; } : T; /** @inline */ export type DeepReadonly = DeepReadonly_; /** @inline */ export type $DeepReadonly_ = T extends any ? DeepReadonly_ : never; /** @inline */ export type $DeepReadonly = $DeepReadonly_; /** * Deep-readonly with depth-limit * * - Useful, because TS does not expand infinite recursive types in VSCode * - Non-distributive version */ export type DeepReadonlyN = TLength extends 0 ? T : $Decrement extends DecrementArgument ? DeepReadonlyN._ShouldSkip extends true ? T : T extends object ? { readonly [k in keyof T]: DeepReadonlyN<$Decrement, T[k], Options>; } : T : T; /** * Deep-readonly with depth-limit * * - Useful, because TS does not expand infinite recursive types in VSCode * - Shallow-distributive version `$` */ export type $DeepReadonlyN = T extends any ? DeepReadonlyN : never; /** * Deep-readonly with depth-limit * * - Useful, because TS does not expand infinite recursive types in VSCode * - Deeply-distributive version `$$` */ export type $$DeepReadonlyN = TLength extends 0 ? T : $Decrement extends DecrementArgument ? DeepReadonlyN._ShouldSkip extends true ? T : { readonly [k in keyof T]: $$DeepReadonlyN<$Decrement, T[k], Options>; } : T; export declare namespace DeepReadonlyN { /** @internal */ type _ShouldSkip = IsCompatible extends true ? false : [T] extends [skipOption] ? true : false; } //# sourceMappingURL=DeepReadonly.d.ts.map