Current deep-clone implementation
IDeepClone resolves to DefaultDeepClone. It receives IDeepCloneList via multi-inject and tries each clone implementation in injected order until one succeeds.
In the default module configuration, list order is: StructuredDeepClone then LodashDeepClone. If one strategy throws, the next strategy is attempted.
LodashDeepClone unwraps proxy-wrapped values to their original targets using IProxyRegistry. During clone traversal it also calls IDeepCloneExcept (default: DefaultDeepCloneExcept) to substitute special values, such as Promise/Observable with their last resolved/emitted value.