Port the fabric special sementic version algorithm to typescript.
import { parseVersionRange, FabricSemanticVersion } from "@xmcl/semver";
const versionRangeString = ">=1.0+fabric+minecraft"; // this is invalid as a normal semver but valid here
const versionRange = parseVersionRange(versionRangeString);
const versionString = "1.21"; // a Minecraft version
const semver = parseSemanticVersion(versionString);
const isVersionInRange = versionRange.test(semver); // is version in this version range