Releases: CSBiology/DynamicObj
7.0.0
What's Changed
Breaking changes.
Improve DynamicObj
GetHashCode
and by extension Equals
methods with recursive deephash function.
DeepHash covers the following types:
- Primitive types
DynamicObj
- IDictionary
- Other IEnumerables (List, Array, Seq, ResizeArray...)
- Option
Full Changelog: 6.0.0...7.0.0
6.0.0
6.0.0
Breaking changes.
Closed issues:
- Deep copy: add native fallbacks for objects in js/py
- Expand DeepCopy logic to mutable collections that contain primitives
- Add a flag for DeepCopyPropertiesTo that enabled to omit static props
Improve DynamicObj
deep copy methods and refactor into a separate CopyUtils
class for reuse:
The following types/classes can be (recursively) deep copied now:
-
Basic F# types (
bool
,byte
,sbyte
,int16
,uint16
,int
,uint
,int64
,uint64
,nativeint
,unativeint
,float
,float32
,char
,string
,unit
,decimal
) -
ResizeArrays
andDictionaries
containing any combination of basic F# types -
Dictionaries
containingDynamicObj
as keys or values in any combination withDynamicObj
or basic F# types as keys or values -
array<DynamicObj>
,list<DynamicObj>
,ResizeArray<DynamicObj>
: These collections of DynamicObj are copied as a new collection with recursively deep copied elements. -
System.ICloneable
: If the property implementsICloneable
, theClone()
method is called on the property. -
DynamicObj
(and derived classes): properties that are themselvesDynamicObj
instances are deep copied recursively.
if a derived class has static properties (e.g. instance properties), these can be copied as dynamic properties on the new instance or ignored.
Note on Classes that inherit from DynamicObj
:
Classes that inherit from DynamicObj will match the DynamicObj
typecheck if they do not implement ICloneable
.
The deep copied instances will be cast to DynamicObj
with deep copied dynamic properties. Staic/instance properties can be copied as dynamic properties on the new instance or be ignored.
It should be possible to 'recover' the original type by checking if the needed properties exist as dynamic properties,
and then passing them to the class constructor if needed.
Full release notes: https://github.com/CSBiology/DynamicObj/blob/main/RELEASE_NOTES.md
Full Changelog: 5.0.0...6.0.0
5.0.0
Breaking changes.
- Refactor and improve
Copy
methods onDynamicObj
:ShallowCopyDynamicProperties
: Copies all dynamic properties to a newDynamicObj
instance without trying to prevent reference equality.ShallowCopyDynamicPropertiesTo
: Copies all dynamic properties to a targetDynamicObj
instance without trying to prevent reference equality.DeepCopyProperties
: Recursively deep copy aDynamicObj
instance (or derived class) with all (static and dynamic) properties. Reinstantiation - and therefore prevention of reference equality - is possible forDynamicObj
,array|list|ResizeArray<DynamicObj>
, and classes implementingSystem.Icloneable
DeepCopyPropertiesTo
: Recursively deep copies all (static and dynamic) properties to a targetDynamicObj
instance (or derived class). Reinstantiation - and therefore prevention of reference equality - is possible forDynamicObj
,array|list|ResizeArray<DynamicObj>
, and classes implementingSystem.Icloneable
Copy
method was therefore removed- Expose
CopyUtils
class that contains our generic deep copy attempt
Full release notes: https://github.com/CSBiology/DynamicObj/blob/main/RELEASE_NOTES.md
Full Changelog: 4.0.3...5.0.0
4.0.3
What's Changed
Full release notes: https://github.com/CSBiology/DynamicObj/blob/main/RELEASE_NOTES.md
Full Changelog: 4.0.2...4.0.3
4.0.2
- Undo
DynObj.combine
working with#DynamicObj
as input - this caused issues with ncombining nested DOs of types that inherited from DynamicObj. The type signature has been fixed toDynamicObj
(without the flexible#
)
Full release notes: https://github.com/CSBiology/DynamicObj/blob/main/RELEASE_NOTES.md
Full Changelog: 4.0.1...4.0.2
4.0.1
- Fix DynObj functions not being inlined (#39)
Full release notes: https://github.com/CSBiology/DynamicObj/blob/main/RELEASE_NOTES.md
Full Changelog: 4.0.0...4.0.1
DynamicObj v4.0.0
What's Changed
- Fable compatability by @HLWeil in #23
- Fixes and copyDynamicProperties by @HLWeil in #27
- Add typed property retrieval function by @HLWeil in #28
- Add tests and a fix by @HLWeil in #29
- DynObj rework and various tests by @kMutagene in #32
- rename some tests by @kMutagene in #34
- Api renaming by @kMutagene in #36
- Add conditional compilation rules to transpilation-specific sections by @HLWeil in #38
- Fix System.Dynamic.DynamicObject based Serialization via Newtonsoft.Json by @kMutagene in #37
Manual changelog
See RELEASE_NOTES.md
New Contributors
Full Changelog: 2.0.0...4.0.0