{"version":3,"file":"index.cjs","names":["pipe","parseCarets","parseTildes","parseXRanges","parseStar","parseHyphen","parseComparatorTrim","parseTildeTrim","parseCaretTrim","extractComparator","combineVersion","parseGTE0","compare"],"sources":["../../../src/utils/semver/index.ts"],"sourcesContent":["// fork from https://github.com/originjs/vite-plugin-federation/blob/v1.1.12/packages/lib/src/utils/semver/index.ts\n// Copyright (c)\n// vite-plugin-federation is licensed under Mulan PSL v2.\n// You can use this software according to the terms and conditions of the Mulan PSL v2.\n// You may obtain a copy of Mulan PSL v2 at:\n//      http://license.coscl.org.cn/MulanPSL2\n// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n// See the Mulan PSL v2 for more details.\n\nimport { combineVersion, extractComparator, pipe } from './utils';\nimport {\n  parseHyphen,\n  parseComparatorTrim,\n  parseTildeTrim,\n  parseCaretTrim,\n  parseCarets,\n  parseTildes,\n  parseXRanges,\n  parseStar,\n  parseGTE0,\n} from './parser';\nimport { compare } from './compare';\nimport type { CompareAtom } from './compare';\n\nfunction parseComparatorString(range: string): string {\n  return pipe(\n    // handle caret\n    // ^ --> * (any, kinda silly)\n    // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n    // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n    // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n    // ^1.2.3 --> >=1.2.3 <2.0.0-0\n    // ^1.2.0 --> >=1.2.0 <2.0.0-0\n    parseCarets,\n    // handle tilde\n    // ~, ~> --> * (any, kinda silly)\n    // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n    // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n    // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n    // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n    // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n    parseTildes,\n    parseXRanges,\n    parseStar,\n  )(range);\n}\n\nfunction parseRange(range: string) {\n  return pipe(\n    // handle hyphenRange\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    parseHyphen,\n    // handle trim comparator\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    parseComparatorTrim,\n    // handle trim tilde\n    // `~ 1.2.3` => `~1.2.3`\n    parseTildeTrim,\n    // handle trim caret\n    // `^ 1.2.3` => `^1.2.3`\n    parseCaretTrim,\n  )(range.trim())\n    .split(/\\s+/)\n    .join(' ');\n}\n\nexport function satisfy(version: string, range: string): boolean {\n  if (!version) {\n    return false;\n  }\n\n  // Extract version details once\n  const extractedVersion = extractComparator(version);\n  if (!extractedVersion) {\n    // If the version string is invalid, it can't satisfy any range\n    return false;\n  }\n  const [\n    ,\n    versionOperator,\n    ,\n    versionMajor,\n    versionMinor,\n    versionPatch,\n    versionPreRelease,\n  ] = extractedVersion;\n  const versionAtom: CompareAtom = {\n    operator: versionOperator,\n    version: combineVersion(\n      versionMajor,\n      versionMinor,\n      versionPatch,\n      versionPreRelease,\n    ), // exclude build atom\n    major: versionMajor,\n    minor: versionMinor,\n    patch: versionPatch,\n    preRelease: versionPreRelease?.split('.'),\n  };\n\n  // Split the range by || to handle OR conditions\n  const orRanges = range.split('||');\n\n  for (const orRange of orRanges) {\n    const trimmedOrRange = orRange.trim();\n    if (!trimmedOrRange) {\n      // An empty range string signifies wildcard *, satisfy any valid version\n      // (We already checked if the version itself is valid)\n      return true;\n    }\n\n    // Handle simple wildcards explicitly before complex parsing\n    if (trimmedOrRange === '*' || trimmedOrRange === 'x') {\n      return true;\n    }\n\n    try {\n      // Apply existing parsing logic to the current OR sub-range\n      const parsedSubRange = parseRange(trimmedOrRange); // Handles hyphens, trims etc.\n\n      // Check if the result of initial parsing is empty, which can happen\n      // for some wildcard cases handled by parseRange/parseComparatorString.\n      // E.g. `parseStar` used in `parseComparatorString` returns ''.\n      if (!parsedSubRange.trim()) {\n        // If parsing results in empty string, treat as wildcard match\n        return true;\n      }\n\n      const parsedComparatorString = parsedSubRange\n        .split(' ')\n        .map((rangeVersion) => parseComparatorString(rangeVersion)) // Expands ^, ~\n        .join(' ');\n\n      // Check again if the comparator string became empty after specific parsing like ^ or ~\n      if (!parsedComparatorString.trim()) {\n        return true;\n      }\n\n      // Split the sub-range by space for implicit AND conditions\n      const comparators = parsedComparatorString\n        .split(/\\s+/)\n        .map((comparator) => parseGTE0(comparator))\n        // Filter out empty strings that might result from multiple spaces\n        .filter(Boolean);\n\n      // If a sub-range becomes empty after parsing (e.g., invalid characters),\n      // it cannot be satisfied. This check might be redundant now but kept for safety.\n      if (comparators.length === 0) {\n        continue;\n      }\n\n      let subRangeSatisfied = true;\n      for (const comparator of comparators) {\n        const extractedComparator = extractComparator(comparator);\n\n        // If any part of the AND sub-range is invalid, the sub-range is not satisfied\n        if (!extractedComparator) {\n          subRangeSatisfied = false;\n          break;\n        }\n\n        const [\n          ,\n          rangeOperator,\n          ,\n          rangeMajor,\n          rangeMinor,\n          rangePatch,\n          rangePreRelease,\n        ] = extractedComparator;\n        const rangeAtom: CompareAtom = {\n          operator: rangeOperator,\n          version: combineVersion(\n            rangeMajor,\n            rangeMinor,\n            rangePatch,\n            rangePreRelease,\n          ),\n          major: rangeMajor,\n          minor: rangeMinor,\n          patch: rangePatch,\n          preRelease: rangePreRelease?.split('.'),\n        };\n\n        // Check if the version satisfies this specific comparator in the AND chain\n        if (!compare(rangeAtom, versionAtom)) {\n          subRangeSatisfied = false; // This part of the AND condition failed\n          break; // No need to check further comparators in this sub-range\n        }\n      }\n\n      // If all AND conditions within this OR sub-range were met, the overall range is satisfied\n      if (subRangeSatisfied) {\n        return true;\n      }\n    } catch (e) {\n      // Log error and treat this sub-range as unsatisfied\n      console.error(\n        `[semver] Error processing range part \"${trimmedOrRange}\":`,\n        e,\n      );\n      continue;\n    }\n  }\n\n  // If none of the OR sub-ranges were satisfied\n  return false;\n}\n\nexport function isLegallyVersion(version: string): boolean {\n  const semverRegex =\n    /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$/;\n  return semverRegex.test(version);\n}\n"],"mappings":";;;;;AAwBA,SAAS,sBAAsB,OAAuB;AACpD,QAAOA,mBAQLC,4BAQAC,4BACAC,6BACAC,yBACD,CAAC,MAAM;;AAGV,SAAS,WAAW,OAAe;AACjC,QAAOJ,mBAGLK,4BAGAC,oCAGAC,+BAGAC,8BACD,CAAC,MAAM,MAAM,CAAC,CACZ,MAAM,MAAM,CACZ,KAAK,IAAI;;AAGd,SAAgB,QAAQ,SAAiB,OAAwB;AAC/D,KAAI,CAAC,QACH,QAAO;CAIT,MAAM,mBAAmBC,gCAAkB,QAAQ;AACnD,KAAI,CAAC,iBAEH,QAAO;CAET,MAAM,GAEJ,mBAEA,cACA,cACA,cACA,qBACE;CACJ,MAAM,cAA2B;EAC/B,UAAU;EACV,SAASC,6BACP,cACA,cACA,cACA,kBACD;EACD,OAAO;EACP,OAAO;EACP,OAAO;EACP,YAAY,mBAAmB,MAAM,IAAI;EAC1C;CAGD,MAAM,WAAW,MAAM,MAAM,KAAK;AAElC,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,iBAAiB,QAAQ,MAAM;AACrC,MAAI,CAAC,eAGH,QAAO;AAIT,MAAI,mBAAmB,OAAO,mBAAmB,IAC/C,QAAO;AAGT,MAAI;GAEF,MAAM,iBAAiB,WAAW,eAAe;AAKjD,OAAI,CAAC,eAAe,MAAM,CAExB,QAAO;GAGT,MAAM,yBAAyB,eAC5B,MAAM,IAAI,CACV,KAAK,iBAAiB,sBAAsB,aAAa,CAAC,CAC1D,KAAK,IAAI;AAGZ,OAAI,CAAC,uBAAuB,MAAM,CAChC,QAAO;GAIT,MAAM,cAAc,uBACjB,MAAM,MAAM,CACZ,KAAK,eAAeC,yBAAU,WAAW,CAAC,CAE1C,OAAO,QAAQ;AAIlB,OAAI,YAAY,WAAW,EACzB;GAGF,IAAI,oBAAoB;AACxB,QAAK,MAAM,cAAc,aAAa;IACpC,MAAM,sBAAsBF,gCAAkB,WAAW;AAGzD,QAAI,CAAC,qBAAqB;AACxB,yBAAoB;AACpB;;IAGF,MAAM,GAEJ,iBAEA,YACA,YACA,YACA,mBACE;AAgBJ,QAAI,CAACG,wBAf0B;KAC7B,UAAU;KACV,SAASF,6BACP,YACA,YACA,YACA,gBACD;KACD,OAAO;KACP,OAAO;KACP,OAAO;KACP,YAAY,iBAAiB,MAAM,IAAI;KACxC,EAGuB,YAAY,EAAE;AACpC,yBAAoB;AACpB;;;AAKJ,OAAI,kBACF,QAAO;WAEF,GAAG;AAEV,WAAQ,MACN,yCAAyC,eAAe,KACxD,EACD;AACD;;;AAKJ,QAAO"}