The repo is versioned based on SemVer 2.0 using the tiny-but-mighty MinVer from @adamralph. See here for more information on how it works.
All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
The Unreleased
section name is replaced by the expected version of next release. A stable version's log contains all changes between that version and the previous stable version (can duplicate the prereleases logs).
3.0.3 - 2024-10-14
TimelineEvent.ToString
: Render Unfold/Event state, EventType, Index #123
SystemTextJson
: Dropped minimumSystem.Text.Json
version to6.0.10
per CVE-2024-43485 #125
3.0.2 - 2024-7-11
SystemTextJson
: Relax dependency toFsCodec.Box
v3.0.0
3.0.1 - 2024-7-11 (Unlisted)
SystemTextJson
: Upped minimumSystem.Text.Json
version to8.0.4
per CVE-2024-30105 #122
3.0.0 - 2024-3-18
- Updated internal dependencies (MinVer, Test libraries)
3.0.0-rc.18 - 2024-3-4
StringId, Comparable
: Base types for Strongly Typed Ids with string renditions #119NewtonsoftJson.StringIdConverter
: Converter forStringId
#119SystemTextJson.StringIdConverter
: Converter forStringId
#119SystemTextJson.StringIdOrDictionaryKeyConverter
: Converter forStringId
that enablesDictionary
values using aStringId
-derived type as a key to be used as a JSON Object Key #116
3.0.0-rc.17 - 2024-2-26
TypeSafeEnum.caseValues<'t>
: Yields all values of a union (that is aTypeSafeEnum
) #115
NewtonsoftJson
: UppedRecyclableMemoryStream
to>= 3.0.0
to handle breaking change inGetStream
return type #118
3.0.0-rc.16 - 2024-1-27
- Exposed low level Codec.Create overload for infrastructure use
BREAKING: JsonPickler/JsonIsomorphism/UnionConverter
: Reduced greediness ofType
matching (only honors tags placed on the type being serialized, not parents) #113
3.0.0-rc.15 - 2023-12-15
NewtonsoftJson.StringEnumConverter.Create
: Small wrapper to smooth construction syntax #111NewtonsoftJson.Serdes.Deserialize<'T>(Newtonsoft.Json.Linq.JObject)
: One liner #111
NewtonsoftJson
: Upped minimumNewtonsoft.Json
version to13.0.3
per GitHub advisory database #109NewtonsoftJson.Options
: Change all settings (incCreateDefault
) to setDateParseHandling = DateParseHandling.None
in order to work around the hare-brained default #110SystemTextJson.Options
: Move custom converters after specified options #111
3.0.0-rc.14 - 2023-11-17
IEventCodec.TryDecode
: Rename toDecode
(to align with the primary assumption of aTry
prefix per BCL conventions: It won't throw, no matter what!) #107 🙏 @nordfjord
3.0.0-rc.13 - 2023-9-11
- Rename
Deflate.EncodeTryDeflate
->Compression.EncodeTryCompress
#105 🙏 @nordfjord Compression
: Switched encoding to use Brotli Compression (Deflate compressed content can still be inflated, but will no longer be generated) #105
3.0.0-rc.12 - 2023-9-4
Union
: Exposed internal type, featuringisUnion
,isNullary
, andcaseName
(that's not tied toTypeSafeEnum
), #102
TypeSafeEnum
: Merged two impls fromSystemTextJson
andNewtonsoftJson
#102StreamId.dec*
: Changed to takestruct
tuples #103
(NewtonsoftJson|SystemTextJson).TypeSafeEnum
: Merged/moved toFsCodec.TypeSafeEnum
#102
Core.Codec
: Changed default timestamp toDateTime.UtcNow
as per docs (was:DateTime.Now
) #104
3.0.0-rc.11 - 2023-8-25
StreamId
: type-tagged wrapper for the streamId portion of aStreamName
#100StreamName.Split
: Splits a StreamName into its{category}
and{streamId}
portions, usingStreamId
for the latter. ReplacesCategoryAndId
#100StreamName.tryFind
: Helper to implementStream.tryDecode
/Reactions.For
pattern (to implement validation of StreamId format when parsingStreamName
s). (See README) #100StreamName.Category
: covers aspects ofStreamName
pertaining to the{category}
portion (mainly moved fromStreamName
.* equivalents; see Changed) #100TypeSafeEnum.tryParseF/parseF
: parameterizes matching of the Union Case name (to enable e.g. case insensitive matching) #101
StreamName
: breaking changes to reflect introduction of strongly typedStreamId
#100StreamName
: renames:trySplitCategoryAndStreamId
->Internal.tryParse
;splitCategoryAndStreamId
->split
;CategoryAndId
->Split
;Categorized|NotCategorized
->Internal
.*;category
->Category.ofStreamName
,IdElements
->StreamId.Parse
#100SystemTextJson.UnionOrTypeSafeEnumConverterFactory
: Allow specific converters to override global policy #101
StreamName.CategoryAndIds
: See newStreamId
,StreamId.Elements
#100
3.0.0-rc.10 - 2023-6-05
NewtonsoftJson.TypeSafeEnum
: Sync withSystemTextJson.TypeSafeEnum
#91- replace all
FSharpFunc
usage withFunc
#92 #105
3.0.0-rc.9 - 2022-11-30
SystemTextJson.Options.Create
: AddrejectNullStrings
option, which wires in aRejectNullStringConverter
#87 🙏 @nordfjordFsCodec.Core.TimelineEvent.Create
: Add overload to create anITimelineEvent
given the additional properties to go with a set of baseline data from anIEventData
3.0.0-rc.8 - 2022-11-16
StreamName.Category
+category
: Extracts the category portion of a streamName #85
StreamName.createStreamId
: Equinox4.0.0-rc.3
provides aStreamId
for this purpose #86
3.0.0-rc.7 - 2022-09-06
Core.EventData/TimelineEvent
: Exposed default ctors #83
Codec.Create
: Made timestamp mandatory in low levelup
/down
signature #83
3.0.0-rc.6 - 2022-09-02
StreamName.createStreamId
: Helper to compose a streamId (for use with Equinox V4 categoryName/streamId representation) #82Serdes
: AddSerializeToStream
andDeserializeFromStream
#83 🙏 @deviousasti
StreamName.trySplitCategoryAndId
: renamed totrySplitCategoryAndStreamId
to align withcreateStreamId
#82
3.0.0-rc.5 - 2022-09-01
TimelineEvent.Size
: Enables stores to surface the stored size at the point of loading #82
Option/Tuple
: Replace withValueOption
/ValueTuple
#82Codec 'Context
: replace'Context option
withContext
#82
3.0.0-rc.4 - 2022-07-05
TryDeflate
:ToByteArrayCodec
/ToUtf8ArrayCodec
: Mapsint * ReadOnlyMemory<byte>
encodings to (uncompressed)byte[]
/ReadOnlyMemory<byte>
#81
3.0.0-rc.3 - 2022-07-04
EncodeTryDeflate/EncodeUncompressed
: MapsReadOnlyMemory<byte>
bodies toint * ReadOnlyMemory<byte>
(with a non-zero value indicating compression was applied) #80
- Replaced
SourceLink
withDotNet.ReproducibleBuilds
wrapper
3.0.0-rc.2 - 2022-05-07
Core.EventData/TimelineEvent/EventCodec.Map
: Exposed building blocks for mapping event envelopes and/or codecs over Body Format types #77
3.0.0-rc.1 - 2022-05-05
SystemTextJson.CodecJsonElement
: Maps Unions to/from Events withJsonElement
Bodies asSystemTextJson.Codec
did in in2.x
#75SystemTextJson.ToUtf8Codec
: Adapter to map fromJsonElement
toReadOnlyMemory<byte>
Event Bodies (for interop scenarios; ideally one usesSystemTextJson.Codec
directly in the first instance) #75
NewtonsoftJson
: RenameSettings
toOptions
#60 #76- Updated build and tests to use
net6.0
, all test package dependencies - Updated
TypeShape
reference to v10
, triggering minFSharp.Core
target moving to4.5.4
SystemTextJson.Codec
: Switched Event body type fromJsonElement
toReadOnlyMemory<byte>
#75NewtonsoftJson.Codec
: Switched Event body type frombyte[]
toReadOnlyMemory<byte>
#75ToByteArrayCodec
: now adapts aReadOnlyMemory<byte>
encoder (was fromJsonElement
) (tobyte[]
bodies); Moved fromFsCodec.SystemTextJson
toFsCodec.Box
#75
2.3.2 - 2022-03-10
SystemTextJson
: AddOptions.Default
to matchJsonSerializerSettings.Default
#73
SystemTextJson
: ReplaceautoUnion=true
with individually controllableautoTypeSafeEnumToJsonString
andautoUnionToJsonObject
settings re #71 #73
2.3.1 - 2022-03-02 Unlisted in favor of changed API in 2.3.2
SystemTextJson
: PreventUnionConverter
being applied tooption
andlist
types when usingUnionOrTypeSafeEnumConverterFactory
/SystemTextJson.Options(autoUnion = true)
#72
2.3.0 - 2022-01-14 Unlisted due to bug fixed in 2.3.1
SystemTextJson
: TargetTypeShape
v9.0.0
in order to reinstate support forFSharp.Core
v4.3.4
2.3.0-rc.2 - 2022-01-05
SystemTextJson.UnionOrTypeSafeEnumConverterFactory
: Global converter that automatically applies aTypeSafeEnumConverter
to all Discriminated Unions that support it, andUnionConverter
to all others #69SystemTextJson.Options(autoUnion = true)
: Automated wireup ofUnionOrTypeSafeEnumConverterFactory
#69
Serdes
: ChangedSerdes
to be stateful, requiring a specific set ofOptions
/Settings
that are always applied consistently #70Serdes.DefaultSettings
: Updated README.md ASP.NET integration advice to reflect minor knock-on effect #70
2.3.0-rc.1 - 2022-01-04
SystemTextJson.UnionConverter
: Port ofNewtonsoftJson
equivalent started in #43 #59 🙏 @NickDarvey
SystemTextJson
: TargetSystem.Text.Json
v6.0.1
,TypeShape
v10.0.0
#68
2.2.2 - 2021-09-12
- Fix CI to stop emitting builds with incorrect
AssemblyVersion 1.0.0.0
(updated MinVer to2.5.0
) - Update global.json to use SDK version
5.0.200
2.2.1 - 2021-09-09
NOTE erroneously tagged with AssemblyVersion
/FileVersion
1.0.0; unpublished
FsCodec.SystemTextJson
- updated to target releasedSystem.Text.Json
v5.0.0
binaries #66
2.2.0 - 2021-05-05
NOTE erroneously tagged with AssemblyVersion
/FileVersion
1.0.0, which causes runtime errors when used by callers built against 2.x versions (i.e. Equinox, Propulsion etc); 🙏 @mousake unlisted
NewtonsoftJson.Serdes.DefaultSettings
: Exposes default settings (for use with ASP.NET Core.AddNewtonsoftJson
) #63SystemTextJson.Serdes.DefaultOptions
: Exposes default options (for use with ASP.NET Core.AddJsonOptions
) #63
- Clarify
StreamName.parse
exception message #58 🙏 @dharmaturtle - Remove erroneous
Converters
fromFsCodec.SystemTextJson.Converters.JsonOptionConverter
namespacing
2.1.1 - 2020-05-25
UnionConverter
: Handle nested unions #52UnionConverter
: Support overriding discriminator without needing to nominate acatchAllCase
#51
2.1.0 - 2020-05-10
FsCodec.SystemTextJson
- Feature-compatible port ofFsCodec.NewtonsoftJson
based onSystem.Text.Json
v>= 5.0.0-preview.3
#38 🙏 @ylibrach
FsCodec.Box
- new Package (existing Impl moved fromFsCodec.NewtonsoftJson
) #38
2.0.1 - 2020-02-26
- Disabled tests for net461 on non-Windows to silence CI
- Target SDK ver
3.1.101
, target latest images in CI - Remove
null
constraint from the'Format
type arg #37
2.0.0 - 2020-02-19
- Add
EventId
toIEventData
#36
- Permit embedded dashes in
FsCodec.StreamName
's{aggregateId}
segment #34
- Reorder to fix consistency of type args in
FsCodec.Code.Create<'Event, 'Format, 'Context>
2.0.0-rc3 - 2020-01-31
ITimelineEvent.Context
extension field #30
2.0.0-rc2 - 2020-01-30
StreamName
, with associated helper module #31
2.0.0-rc1 - 2020-01-14
- Tutorial and Documentation re
IEventCodec
#29
- renamed
IUnionEncoder
toIEventCodec
#29 - adjusted return types for
FsCodec.Core.EventData.Create
and.TimelineEvent.Create
to relevant interfaces #29 - Update
Microsoft.SourceLink.GitHub
,Microsoft.Framework.ReferenceAssemblies
to1.0.0
1.2.1 - 2019-11-08
- Flipped misaligned argument order in
FsCode.Codec.Create(tryDecode,encode,mapCausation)
#28
1.2.0 - 2019-09-26
FsCodec.Box.Codec.Create
: an API equivalent substitute forFsCodec.NewtonsoftJson.Codec.Create
for use in unit and integration tests #25
- Generalized
Codec.Create
to no longer presumeData
andMetadata
should always bebyte[]
#24
- Removed accidentally pasted
setting
andallowNullaryCases
inCodec.Create
#23
1.1.0 - 2019-09-19
- Polished overloads of
Codec.Create
andNewtonsoftJson.Codec.Create
to be more navigable, and usable from C# #23
1.0.0 - 2019-09-17
- Defined
CorrelationId
andCausationId
properties forIEventData
#21 - Added
context : 'Context option
param toIUnionEncoder.Encode
, enablingdown
to enrich events withcorrelationId
andcausationId
values without reference to external state #21
- Removed comparison support from
EventData
#19 - Changed
IndexedEventData
ctor to.Create
and aligned withEventData
#19 - Renamed
IEvent
toIEventData
(to avoid clashes withFSharp.Control.IEvent
) #20 - Renamed
IIndexedEvent
toITimelineEvent
(to avoid clashes withFSharp.Control.IEvent
) #20 - Renamed
IndexedEventData
toTimelineEvent
#20 - Updated
TypeShape
dependency to8.0.0
- Updated
MinVer
internal dependency to2.0.0
1.0.0-rc2 - 2019-09-07
tests/FsCodec.NewtonsoftJson.Tests/examples.fsx
counterpart to theREADME.md
- Exposed
TypeSafeEnum
IndexedEventData
type to replace usage of impromptu objects- overload with
up
/down
arguments onFsCodec.NewtonsoftJson.Codec.Create
facilitating surfacing index, metadata, and other such information in the event as surfaced to the programming model functions #17
IUnionEncoder.TryDecode
now operates onIIndexedEvent
(which moves toFsCodec
fromFsCodec.Core
) instead ofIEvent
FsCodec.NewtonsoftJson.Codec.Create
overload withgenMetadata
andgenTimestamp
arguments (equivalent functionality can be achieved viaup
/down
arguments) #17
- Pushed
TypeShape
'sPackageReference
down intoFsCodec.NewtonsoftJson
1.0.0-rc1 - 2019-08-30
Initial release based on merge of Jet.JsonNet.Converters v0 and the codecs formerly known as Equinox.Codec
from Equinox #15
Jet.JsonNet.Converters 0.2.2
Final release of Jet.JsonNet.Converters archived on v0 branch