UNPKG

@tanzanite/deep-lock

Version:

Deep freeze, seal or preventExtensions typescript helper function

33 lines 2.09 kB
declare type Primitive = string | number | boolean | bigint | symbol | undefined | null; declare type Builtin = Primitive | Function | Date | Error | RegExp; declare type IsAny<T> = 0 extends 1 & T ? true : false; declare type IsUnknown<T> = IsAny<T> extends true ? false : unknown extends T ? true : false; declare type DeepReadonly<T> = T extends Builtin ? T : T extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends WeakMap<infer K, infer V> ? WeakMap<DeepReadonly<K>, DeepReadonly<V>> : T extends Set<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>> : T extends Promise<infer U> ? Promise<DeepReadonly<U>> : T extends {} ? { readonly [K in keyof T]: DeepReadonly<T[K]>; } : IsUnknown<T> extends true ? unknown : Readonly<T>; declare type Actions = 'freeze' | 'seal' | 'preventExtensions'; /** * Recursively apply provided options operations on object * and all of the object properties that are either object or function. * * By default freezes object. * * @param obj - The object to which will be applied `freeze`, `seal` or `preventExtensions` * @param options default `{ action: 'freeze' }` * @param options.action * ``` * | action | Add | Modify | Delete | Reconfigure | * | ----------------- | --- | ------ | ------ | ----------- | * | preventExtensions | - | + | + | + | * | seal | - | + | - | - | * | freeze | - | - | - | - | * ``` * * @returns {Object} Initial object with applied options action */ export declare function deepLock<T extends Record<any, any>>(obj: T): DeepReadonly<T>; export declare function deepLock<T extends Record<any, any>, Action extends Actions>(obj: T, options: { action?: Action; }): 'freeze' extends Action ? DeepReadonly<T> : T; export default deepLock; //# sourceMappingURL=index.d.ts.map