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