I often forget how ^(caret) and ~(tilde) work in semver range syntax. Here's a quick reminder:
^(caret)
Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple.
For example, ^1.2.3 allows 1.x.x but not 2.x.x.
~(tilde)
Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.
For example, ~1.2.3 allows 1.2.x but not 1.3.x.