Recursively merge properties from source objects into the target object, mutating it.
Nested plain objects are merged recursively, arrays are merged by index (e.g., [1, 2] + [3] → [3, 2]),
and class instances (Date, RegExp, custom classes) are assigned by reference. Circular references are
detected via ancestor-chain tracking and safely skipped, while shared (non-circular) object references
are merged correctly. Prototype pollution attempts (__proto__, constructor) are also skipped.
Recursively merge properties from source objects into the target object, mutating it.
Nested plain objects are merged recursively, arrays are merged by index (e.g.,
[1, 2]+[3]→[3, 2]), and class instances (Date, RegExp, custom classes) are assigned by reference. Circular references are detected via ancestor-chain tracking and safely skipped, while shared (non-circular) object references are merged correctly. Prototype pollution attempts (__proto__,constructor) are also skipped.