# HISTORY

- v1.3.60
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.55
  - fix compatibilities for new golang toolchain (1.24.x)
  - UPGRADE GO TOOLCHAIN TO 1.24.x (1.24.5)
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.53
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.51
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.50
  - upgrade hedzr/logg to newest PATCH version

- v1.3.48
  - upgrade hedzr/logg to newest PATCH version

- v1.3.47
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.46
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.45
  - upgrade deps - hedzr/is & hedzr/logg
  - security patches

- v1.3.43
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.39
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.38
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.37
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.35
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.31
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.27
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.26
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.25
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.23
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.22
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.21
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.20
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.19
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.16
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.15
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.13
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.11
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.3.9
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.7
  - downgrade toolchain to go1.23.0
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.6
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.5
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.1
  - improved `MakeClone()`
  - feat: implementing shallow
  - feat: `shallow` flag for struct field tag
  - fix a crash when svind is nil
  - improve log (non-verbose)
  - upgrade deps - hedzr/is & hedzr/logg

- v1.3.0
  - upgrade toolchain to go1.23.7
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.15
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.13
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.12
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.11
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.10
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.9
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.8
  - upgrade deps - hedzr/is & hedzr/logg
  - security patch

- v1.2.7
  - upgrade deps - hedzr/is & hedzr/logg

- v1.2.5
  - security patch

- v1.2.3
  - fix processing the struct tag name CopyTagName
  - improved toExportedName and trySolveTargetName
  - upgrade deps

- v1.2.1
  - upgrade deps - hedzr/is & hedzr/logg

- v1.2.0
  - security patch

- v1.1.18
  - security patch

- v1.1.17
  - security patch
  - move to go toolchain 1.22.7

- v1.1.15
  - security patch

- v1.1.13
  - security patch

- v1.1.11
  - security patch

- v1.1.10
  - upgraded deps
  - fix go toolchain versions

- v1.1.9
  - security patch

- v1.1.8
  - improved errors.v3 - prevent attach itself into nested container
  - upgraded deps

- v1.1.7
  - improved map -> struct, the lower-case map key names will be mapping to camel-case to match the corresponding export field names.
  - upgraded deps

- v1.1.6
  - upgraded deps

- v1.1.5
  - upgraded deps
  - more tests

- v1.1.3
  - fixed any->int/uint
  - upgraded deps
  - more tests

- v1.1.1
  - improved any <-> any converters
  - updated internal times subpackage
  - more tests, docs

- v1.1.0
  - improved any -> string/bool/int/uint/float/complex/duration
  - fixed toBool
  - BREAK: toBool(3) => true. In old versions, only convert number `1` to `true`. Since v1.1.0, any non-Zero number will be converted to `true`.

- v1.0.2
  - improved bool/duration/time[Slice/Map] <-> any converters
  - added TrimQuotes, StripQuotes
  - improved times subpackage
  - fixed simple-release section inside gh actions script

- v1.0.1
  - improved numeric <-> any converters

- v1.0.0
  - upgrade to v1
    - changed log to our logg/slog
    - fixed bugs found and improved performances

- v0.4.19
  - upgrade deps

- v0.4.17
  - upgrade deps

- v0.4.13
  - fixed test on strconv.NumError
    - and errors.Is(err, strconv.SyntaxError) is invalid now
    - use errors.Is(err, strconv.NumError{Err:strconv.SyntaxError}) as a workaround
  - upgrade deps

- v0.4.8
  - fixed: check unexported field recursively now
  - improved some lines for better context logging in debugging
  - little changes

- v0.4.7
  - upgrade deps

- v0.4.3
  - fixed sometimes a ptr to new slice has not been cleaned in time

- v0.4.1
  - public `dbglog` subpackage, added Err/Wrn/Colored
  - added ability to disable dbglog.Log at runtime
  - improved internal functions (tool.Valfmt, cl.SetUnexportedFieldIfMap, ...)
  - improved dbglog.Log outputting
  - fixed bugs

- v0.4.0
  - fixed autonew when copying to nil member
  - improved diff on chan
  - better logging (verbose) with colors

- v0.3.1
  - changed: `dbglog.LogValid` is constant now
  - improved code style
  - DeepCopy:
    - passing nil parameters can return safely without panic any more
  - DeepDiff:
    - imp/fea: `diff.WithStripPointerAtFirst` - locate the final objects and compare them
    - imp/fea: `diff.WithTreatEmptyStructPtrAsNilPtr` - when comparing two pointers in struct field loop, assume nil and pointer to an empty struct is identical
    - imp/fea: `diff.WithCompareDifferentTypeStructs` - you can compare two struct with different type, their fields could be `diff` by its name
    - imp/fea: `diff.WithIgnoreUnmatchedFields` - this is default option for `diff.WithCompareDifferentTypeStructs(true)` mode, the field names unmatched couldn't take effects to comparing result
    - imp/fea: `diff.WithCompareDifferentSizeArrays` - `[2]string{"1","2"}` and `[3]string{"1","2",<empty>}` can be assumed as identity
    - By default,
      - they're assumed as identity: nil and zero array/map.
      - they're not identical: nil ptr to struct, and ptr to empty struct (can be overridden by `WithTreatEmptyStructPtrAsNilPtr`).
      - the slice elements' order is sensitive, except you're `diff` with `WithSliceOrderedComparison(true)`.

- v0.2.56
  - changed: `InvalidStrategy` is -1 now since we got untyped int overflow error in auto-gen code by stringer

- v0.2.53
  - improved code style, format, ...
  - to fore-prevent low-performance and large-memory usage when retrieve expanded fields from a very large struct, use `cms.ByOrdinal` instead default `cms.ByName`
  - added new strategy `cms.Flat` and field tag to identify a pointer should be shallow copy to target field,

    ```go
    package main
    type A struct {
        field1 *ComplexStruct `copy:",flat"`
    }
    ```

  - `evendeep` supports to go1.11 currently

### v0.2.51

- temporary build: fixing array/slice copying logic

### v0.2.50

- first public release

I had this plan many years, but the recent fresh work is started from 2022-02-17, it's called as `evendeep` and get its first release finally.
