satisfies

tcmts.core.semver.satisfies · #26qpmqpu · term · runs anywhere

Whether version is in npm range range (^1.2.0, ~1.2, >=2 <3, 1.x, 1 - 2, a || b, *).

import { meetsComparator, parse } from "#codebase/tcmts/core/semver";

export function satisfies(version: string, range: string): boolean {
  const v = parse(version);
  if (!v) return false;
  return range.split("||").some((set) => {
    const trimmed = set.trim();
    const hyphen = /^(\S+)\s+-\s+(\S+)$/.exec(trimmed);
    const comparators = hyphen ? [`>=${hyphen[1]}`, `<=${hyphen[2]}`] : trimmed.split(/\s+/).filter(Boolean);
    // a prerelease only satisfies a range that names a prerelease of the same version
    if (v.pre && !comparators.some((c) => { const p = parse(c.replace(/^[\^~<>=]+/, "")); return p && p.pre && p.major === v.major && p.minor === v.minor && p.patch === v.patch; })) return false;
    return comparators.every((c) => meetsComparator(version, c));
  });
}

uses

used by