Recursively freezes an object and all its properties to make it immutable.
This function also handles circular references by using a WeakSet to track visited objects.
Parameters
obj: any
The object to freeze.
visitedObjects: WeakSet<object> = ...
A WeakSet to track objects that have already been visited (used internally).
Recursively freezes an object and all its properties to make it immutable. This function also handles circular references by using a
WeakSet
to track visited objects.