{"version":3,"file":"versionCheck.mjs","names":[],"sources":["../../src/versionCheck.ts"],"sourcesContent":["// Version bounds format: [major, minMinor, maxMinor, minPatch]\n// - maxMinor === -1 means \"any minor\" (caret range, e.g., ^18.0.0)\n// - maxMinor === minMinor means \"same minor only\" (tilde range, e.g., ~19.0.3)\nexport type VersionBounds = [major: number, minMinor: number, maxMinor: number, minPatch: number];\n\n/**\n * Parses a version string into major, minor, and patch numbers.\n * Returns null if the version string cannot be parsed.\n *\n * @example\n * parseVersion(\"18.3.1\") // { major: 18, minor: 3, patch: 1 }\n * parseVersion(\"19.0.0-rc.1\") // { major: 19, minor: 0, patch: 0 }\n * parseVersion(\"invalid\") // null\n */\nexport function parseVersion(version: string): { major: number; minor: number; patch: number } | null {\n  const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n  if (!match) {\n    return null;\n  }\n\n  const [, majorStr, minorStr, patchStr] = match;\n  return {\n    major: parseInt(majorStr, 10),\n    minor: parseInt(minorStr, 10),\n    patch: parseInt(patchStr, 10),\n  };\n}\n\n/**\n * Checks if a parsed version satisfies the given version bounds.\n *\n * @param version - The parsed version to check\n * @param version.major\n * @param bounds - Array of version bounds to check against\n * @param version.minor\n * @param version.patch\n * @returns true if the version satisfies any of the bounds\n */\nexport function checkVersionAgainstBounds(\n  version: { major: number; minor: number; patch: number },\n  bounds: VersionBounds[],\n): boolean {\n  const { major, minor, patch } = version;\n\n  return bounds.some(([bMajor, minMinor, maxMinor, minPatch]) => {\n    if (major !== bMajor) {\n      return false;\n    }\n\n    if (maxMinor === -1) {\n      // Caret range: any minor >= minMinor, with patch check for minMinor\n      return minor > minMinor || (minor === minMinor && patch >= minPatch);\n    }\n\n    // Tilde range: specific minor only\n    return minor === maxMinor && patch >= minPatch;\n  });\n}\n\n/**\n * Checks if a version string is compatible with the given bounds.\n * This is a convenience function that combines parsing and checking.\n *\n * @param version - The version string to check (e.g., \"18.3.1\")\n * @param bounds - Array of version bounds to check against\n * @returns true if the version is compatible, false otherwise\n */\nexport function isVersionCompatible(version: string, bounds: VersionBounds[]): boolean {\n  const parsed = parseVersion(version);\n  if (!parsed) {\n    return false;\n  }\n  return checkVersionAgainstBounds(parsed, bounds);\n}\n\n/**\n * Returns true if the given version is at least the minimum version.\n * Both versions are compared by their major.minor.patch components only.\n * Pre-release suffixes are ignored (e.g., \"5.114.0-canary.123\" is treated as \"5.114.0\").\n *\n * @param version - The version string to check (e.g., \"5.114.0\")\n * @param minVersion - The minimum required version (e.g., \"5.100.0\")\n * @returns true if version >= minVersion, false otherwise (including if either cannot be parsed)\n *\n * @example\n * isVersionAtLeast(\"5.114.0\", \"5.100.0\") // true\n * isVersionAtLeast(\"5.99.0\", \"5.100.0\") // false\n * isVersionAtLeast(\"5.100.0-canary.123\", \"5.100.0\") // true\n */\nexport function isVersionAtLeast(version: string | undefined | null, minVersion: string): boolean {\n  if (!version) {\n    return false;\n  }\n\n  const parsed = parseVersion(version);\n  const minParsed = parseVersion(minVersion);\n\n  if (!parsed || !minParsed) {\n    return false;\n  }\n\n  if (parsed.major !== minParsed.major) {\n    return parsed.major > minParsed.major;\n  }\n  if (parsed.minor !== minParsed.minor) {\n    return parsed.minor > minParsed.minor;\n  }\n  return parsed.patch >= minParsed.patch;\n}\n"],"mappings":";;;;;;;;;;AAcA,SAAgB,aAAa,SAAyE;CACpG,MAAM,QAAQ,QAAQ,MAAM,uBAAuB;AACnD,KAAI,CAAC,MACH,QAAO;CAGT,MAAM,GAAG,UAAU,UAAU,YAAY;AACzC,QAAO;EACL,OAAO,SAAS,UAAU,GAAG;EAC7B,OAAO,SAAS,UAAU,GAAG;EAC7B,OAAO,SAAS,UAAU,GAAG;EAC9B;;;;;;;;;;;;AAaH,SAAgB,0BACd,SACA,QACS;CACT,MAAM,EAAE,OAAO,OAAO,UAAU;AAEhC,QAAO,OAAO,MAAM,CAAC,QAAQ,UAAU,UAAU,cAAc;AAC7D,MAAI,UAAU,OACZ,QAAO;AAGT,MAAI,aAAa,GAEf,QAAO,QAAQ,YAAa,UAAU,YAAY,SAAS;AAI7D,SAAO,UAAU,YAAY,SAAS;GACtC;;;;;;;;;;AAWJ,SAAgB,oBAAoB,SAAiB,QAAkC;CACrF,MAAM,SAAS,aAAa,QAAQ;AACpC,KAAI,CAAC,OACH,QAAO;AAET,QAAO,0BAA0B,QAAQ,OAAO;;;;;;;;;;;;;;;;AAiBlD,SAAgB,iBAAiB,SAAoC,YAA6B;AAChG,KAAI,CAAC,QACH,QAAO;CAGT,MAAM,SAAS,aAAa,QAAQ;CACpC,MAAM,YAAY,aAAa,WAAW;AAE1C,KAAI,CAAC,UAAU,CAAC,UACd,QAAO;AAGT,KAAI,OAAO,UAAU,UAAU,MAC7B,QAAO,OAAO,QAAQ,UAAU;AAElC,KAAI,OAAO,UAAU,UAAU,MAC7B,QAAO,OAAO,QAAQ,UAAU;AAElC,QAAO,OAAO,SAAS,UAAU"}