Skip to main content
Go to Latest
File
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.import type { Comparator, Operator } from "./types.ts";import { COMPARATOR_REGEXP, parseBuild, parseNumber, parsePrerelease,} from "./_shared.ts";import { ANY, NONE } from "./constants.ts";
type REGEXP_GROUPS = { operator: Operator; major: string; minor: string; patch: string; prerelease: string; buildmetadata: string;};
/** * Parses a comparator string into a valid Comparator. * @param comparator * @returns A valid Comparator */export function parseComparator(comparator: string): Comparator { const match = comparator.match(COMPARATOR_REGEXP); const groups = match?.groups;
if (!groups) return NONE;
const { operator, prerelease, buildmetadata } = groups as REGEXP_GROUPS;
const semver = groups.major ? { major: parseNumber(groups.major, "Invalid major version"), minor: parseNumber( groups.minor!, "Invalid minor version", ), patch: parseNumber( groups.patch!, "Invalid patch version", ), prerelease: prerelease ? parsePrerelease(prerelease) : [], build: buildmetadata ? parseBuild(buildmetadata) : [], } : ANY;
return { operator: operator || undefined, ...semver, semver };}