Strict semver string (no v prefix): major.minor.patch[-pre][+build].
The template literal type is intentionally wider than the runtime check
in semVerString because TypeScript cannot express the full regex.
type SemVerString = `${number}.${number}.${number}${string}`
Strict semver string (no
vprefix):major.minor.patch[-pre][+build]. The template literal type is intentionally wider than the runtime check in semVerString because TypeScript cannot express the full regex.