import { DeeplyReadonly } from "./types"; /** * Recursively freezes an object by iterating over all properties and freezing them. * @param obj - The object to freeze. * @returns The frozen object. */ export const deepFreeze = (value: T): DeeplyReadonly => { if ( value !== null && (typeof value === 'object' || typeof value === 'function') ) { for (const key of Reflect.ownKeys(value)) { const descriptor = Reflect.getOwnPropertyDescriptor(value, key); if (descriptor && 'value' in descriptor) { deepFreeze(descriptor.value); } } Object.freeze(value); } return value; }