Yarhl 3.0
This release focuses in API user-experience enhancements. The transform and format API methods and base classes are now easier to understand and use. New convenience methods introduced and factories. Extensibilities in the IO namespace to support advance use cases as we have more applications using Yarhl.
Special thanks to all the contributors: @Kaplas80, @pleonex and @priverop and to all our users providing great feedback. Especially the guys from TraduSquare.
Features
- New API to pass parameters to converters:
IInitializer<T>
(#93 by @pleonex) - New API
DataStreamFactory
to createDataStream
(#111 by @pleonex) - New API to keep ownership of underlying streams (#118 by @pleonex)
- New API to create nodes from a part of a stream:
NodeFactory.FromSubstream
(673ad2d by @pleonex) - New API to create
DataStream
from a byte array (9158dea by @pleonex) - Thread-safe DataStream for sharing an
IStream
(#129 by @Kaplas80) - Add extensibility to streams with new interface
IStream
(#109 by @pleonex) - Lazy open files to avoid hitting maximum file handlers opening a folder (#111 by @pleonex)
- Improve memory and performance by using
RecyclableMemoryStream
for memoryDataStream
(#111 by @pleonex) - New interface
IBinary
to mark binary types (other thanBinaryFormat
) (0450b98 by @pleonex) - Improve performance of
DataStream.Compare
(#110 by @pleonex) - New API
DataReader.ReadStringToToken()
(#137 by @pleonex) - New constructor in
TextReader
andTextWriter
with the encoding name (#114 by @pleonex) - Auto-register additional encodings of .NET Core (#114 by @pleonex)
- New API to sort children (#131 by @Kaplas80)
- New node tags
FileInfo
andDirectoryInfo
in nodes from theNodeFactory
(#128 by @Kaplas80) - Optional dispose of nodes when removing children (#130 by @Kaplas80)
- Enhancements to
NodeFileContainer.MoveChildrenTo
for merging nodes instead of replacing (#130 by @Kaplas80) - Support relative path searches (#99 by @pleonex)
- New API to remove nodes (#100 by @pleonex)
- Prevent adding as a child a parent node (#115 #133 by @pleonex and @Kaplas80)
- New cookbook with small code snippets (#108 by @priverop)
- New CII Best Practices badge (6e06654 by @pleonex)
Breaking changes
- Change license from GPL v3 to MIT which is more permissive (#121 by @pleonex)
- Split PO converters. Binary format into PO is a new converter:
Binary2Po
(#120 by @pleonex) - Change
Node.Transform
methods intoNode.TransformTo
andNode.TransformWith
(#93 by @pleonex) - Move static converter methods from
Format
to new static classConvertFormat
(#92 by @pleonex) - Convert
Format
into an empty interfaceIFormat
(#92 by @pleonex) Node.Format
property is now getter-only. New method addedNode.ChangeFormat
(#92 by @pleonex)- Move
DataStream
andBinaryFormat
constructors toDataStreamFactory
(#111 by @pleonex) BinaryFormat
does not create its ownDataStream
, it will dispose the stream passed in the constructor (#111 by @pleonex)- Move
BinaryFormat
class to theYarhl.IO
namespace (0450b98 by @pleonex) - Rename
DataReader.ReadPadding
toSkipPadding
(#109 by @pleonex) - Prevent changing length of a substream (#97 by @pleonex)
- Rename
Replacer.Transform
intoTransformForward
andTransformBackward
(#101 by @pleonex)
Bugs
- Fix decoding issues in
DataReader.ReadString
(#137 by @pleonex) - Fix writing large files (> 2GB) (#113 by @pleonex)
- Missing extensions defined by an executable (eed98a7 by @pleonex)
- Skip assemblies throwing
BadImageFormatException
(#125 by @Kaplas80) - Changing substream length may be overwriting other stream sections (#97 by @pleonex)
- Fix converting from base types (#102 by @pleonex)
- Check if the return type after transforming implements
IFormat
(#103 by @pleonex) - Do not dispose when changing to the same format instance (#119 by @pleonex)
- Documentation link and version improvements (#106 and #107 by @priverop)
Other changes
- Build and ship for .NET Framework 4.6.1 (TFM
net461
) for applications running in .NET Framework below 4.7.2 (d1588b9 by @pleonex) - Run tests in latest frameworks: .NET Core 3.1, .NET Framework 4.8 and Mono 6 (#116 #137 by @pleonex)
- Consolidate CI in Azure DevOps and create test feed (#94 by @pleonex)
- Improvements in build system and project handling (#117 by @pleonex)
- Move SonarQube to SonarLint to get feedback while coding (#117 by @pleonex)
- Warnings cleanup (team work accross PR like #98 and #122)
- Change default branch to
develop
(b0ca82e by @pleonex)