import { PlainObject } from "../models.mjs"; //#region src/value/freeze.d.ts /** * A frozen value with readonly properties _(going as deep as possible)_ */ type Frozen = Value extends unknown[] ? Readonly : Value extends PlainObject ? { readonly [Key in keyof Value]: Frozen } : Value extends Map ? ReadonlyMap> : Value extends Set ? ReadonlySet> : Readonly; /** * Freeze an array and its indiced values, but not any nested values * * _Available as `flatFreeze` and `freeze.flat`_ * * @param array Array to freeze * @returns Frozen array */ declare function flatFreeze(array: Item[]): ReadonlyArray; /** * Freeze a map and its values, but not any nested values * * _Available as `flatFreeze` and `freeze.flat`_ * * @param map Map to freeze * @returns Frozen map */ declare function flatFreeze(map: Map): ReadonlyMap; /** * Freeze an object and its properties, but not any nested values * * _Available as `flatFreeze` and `freeze.flat`_ * * @param object Object to freeze * @returns Frozen object */ declare function flatFreeze(object: Value): Readonly; /** * Freeze a set and its values, but not any nested values * * _Available as `flatFreeze` and `freeze.flat`_ * * @param set Set to freeze * @returns Frozen set */ declare function flatFreeze(set: Set): ReadonlySet; /** * Freeze any value, if possible * * _(Only arrays, maps, plain objects, and sets are freezable)_ * * _Available as `flatFreeze` and `freeze.flat`_ * * @param value Value to freeze * @returns Frozen value */ declare function flatFreeze(value: Value): Value; /** * Freeze an array and its values _(but not any nested values)_, preventing modifications * * @param array Array to freeze * @param flat Freeze _only_ the array, not any nested values * @returns Frozen array */ declare function freeze(array: Item[], flat: true): ReadonlyArray; /** * Freeze a map and its values _(but not any nested values)_, preventing modifications * * @param map Map to freeze * @param flat Freeze _only_ the map, not any nested values * @returns Frozen map */ declare function freeze(map: Map, flat: true): ReadonlyMap; /** * Freeze an object and its properties _(but not any nested values)_, preventing modifications * * @param object Object to freeze * @param flat Freeze _only_ the object, not any nested values * @returns Frozen object */ declare function freeze(object: Value, flat: true): Readonly; /** * Freeze a set and its values _(but not any nested values)_, preventing modifications * * @param set Set to freeze * @param flat Freeze _only_ the set, not any nested values * @returns Frozen set */ declare function freeze(set: Set, flat: true): ReadonlySet; /** * Freeze an array and its values recursively, preventing modifications * * _(If you only want to freeze the array itself, but not any nested values, use `freeze(array, true)`, `freeze.flat(array)`, or `flatFreeze(array)` instead)_ * * @param array Array to freeze * @returns Frozen array */ declare function freeze(array: Item[]): Frozen; /** * Freeze a map and its values recursively, preventing modifications * * _(If you only want to freeze the map itself, but not any nested values, use `freeze(map, true)`, `freeze.flat(map)`, or `flatFreeze(map)` instead)_ * * @param map Map to freeze * @returns Frozen map */ declare function freeze(map: Map): Frozen>; /** * Freeze an object and all its properties recursively * * _(If you only want to freeze the object itself, but not any nested values, use `freeze(object, true)`, `freeze.flat(object)`, or `flatFreeze(object)` instead)_ * * @param object Object to freeze * @returns Frozen object */ declare function freeze(object: Value): Frozen; /** * Freeze a set and its values recursively * * _(If you only want to freeze the set itself, but not any nested values, use `freeze(set, true)`, `freeze.flat(set)`, or `flatFreeze(set)` instead)_ * * @param set Set to freeze * @returns Frozen set */ declare function freeze(set: Set): Frozen>; /** * Freeze any value, if possible * * _(Only arrays, maps, plain objects, and sets are freezable)_ * * @param value Value to freeze * @returns Frozen value */ declare function freeze(value: Value): Value; declare namespace freeze { var flat: typeof flatFreeze; var is: typeof isFrozen; } /** * Is the value frozen? * * @param value Value to check * @returns `true` if the value is frozen, otherwise `false` */ declare function isFrozen(value: unknown): boolean; //#endregion export { Frozen, flatFreeze, freeze, isFrozen };