add semver ~ and ^ handling