import { ANY, INVALID } from "./constants.ts";import type { SemVer } from "./types.ts";import { isValidNumber, isValidString } from "./_shared.ts";
export function isSemVer(value: unknown): value is SemVer { if (value === null || value === undefined) return false; if (Array.isArray(value)) return false; if (typeof value !== "object") return false; if (value === INVALID) return true; if (value === ANY) return true;
const { major, minor, patch, build = [], prerelease = [], } = value as Record<string, unknown>; return ( isValidNumber(major) && isValidNumber(minor) && isValidNumber(patch) && Array.isArray(prerelease) && prerelease.every((v) => isValidString(v) || isValidNumber(v)) && Array.isArray(build) && build.every(isValidString) );}