/** * Transforms an object or array type to make it deeply immutable. */ type DeepFrozen = T extends Record | any[] ? { readonly [P in keyof T]: DeepFrozen; } : T; /** * Freezes an object or array deeply. * The given obj is frozen deeply, no changes can be made after that on the obj nor its children after that. * * @param obj Object to freeze. Should be an object or an array, otherwise has on effect. * @returns Always returns `obj`. * @example * ```ts * import freeze from "apprt-core/freeze"; * let src = {x: 1, y: { a: 2 } }; * let srcFrozen = freeze(src); * src === srcFrozen // -> true * src.x = 3 // still 1, change not possible * src.y.a = 3 // still 2, change not possible * ``` */ declare function freeze(obj: T): DeepFrozen; export { freeze as default, freeze }; export type { DeepFrozen };