const namedBranches = ["release", "master", "test", "stage", "prod"] as const type NamedBranch = (typeof namedBranches)[number] | (string & {}) export function getSemver( packageName: string, version: string | undefined, branch: NamedBranch ): string | undefined { if (!version || typeof version !== "string") { return undefined } if (version.startsWith("v")) { version = version.substring(1) } if (!/^\d+\.\d+\.\d+/.test(version)) { return undefined } if (!namedBranches.includes(branch as any)) { let cleanedBranch = branch .substring(0, 20) .trim() .replace(/[^a-zA-Z0-9]/g, "-") .toLowerCase() return `${packageName}@${version}+${cleanedBranch}` } return `${packageName}@${version}` }