"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; const fs = require("node:fs"); const path = require("node:path"); function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var re$2 = { exports: {} }; const SEMVER_SPEC_VERSION = "2.0.0"; const MAX_LENGTH$1 = 256; const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */ 9007199254740991; const MAX_SAFE_COMPONENT_LENGTH = 16; const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6; const RELEASE_TYPES = [ "major", "premajor", "minor", "preminor", "patch", "prepatch", "prerelease" ]; var constants$1 = { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, RELEASE_TYPES, SEMVER_SPEC_VERSION, FLAG_INCLUDE_PRERELEASE: 1, FLAG_LOOSE: 2 }; const debug$1 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => { }; var debug_1 = debug$1; (function(module2, exports2) { const { MAX_SAFE_COMPONENT_LENGTH: MAX_SAFE_COMPONENT_LENGTH2, MAX_SAFE_BUILD_LENGTH: MAX_SAFE_BUILD_LENGTH2, MAX_LENGTH: MAX_LENGTH2 } = constants$1; const debug2 = debug_1; exports2 = module2.exports = {}; const re2 = exports2.re = []; const safeRe = exports2.safeRe = []; const src = exports2.src = []; const t2 = exports2.t = {}; let R = 0; const LETTERDASHNUMBER = "[a-zA-Z0-9-]"; const safeRegexReplacements = [ ["\\s", 1], ["\\d", MAX_LENGTH2], [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH2] ]; const makeSafeRegex = (value) => { for (const [token, max] of safeRegexReplacements) { value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`); } return value; }; const createToken = (name, value, isGlobal) => { const safe = makeSafeRegex(value); const index = R++; debug2(name, index, value); t2[name] = index; src[index] = value; re2[index] = new RegExp(value, isGlobal ? "g" : void 0); safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0); }; createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*"); createToken("NUMERICIDENTIFIERLOOSE", "\\d+"); createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`); createToken("MAINVERSION", `(${src[t2.NUMERICIDENTIFIER]})\\.(${src[t2.NUMERICIDENTIFIER]})\\.(${src[t2.NUMERICIDENTIFIER]})`); createToken("MAINVERSIONLOOSE", `(${src[t2.NUMERICIDENTIFIERLOOSE]})\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})\\.(${src[t2.NUMERICIDENTIFIERLOOSE]})`); createToken("PRERELEASEIDENTIFIER", `(?:${src[t2.NUMERICIDENTIFIER]}|${src[t2.NONNUMERICIDENTIFIER]})`); createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t2.NUMERICIDENTIFIERLOOSE]}|${src[t2.NONNUMERICIDENTIFIER]})`); createToken("PRERELEASE", `(?:-(${src[t2.PRERELEASEIDENTIFIER]}(?:\\.${src[t2.PRERELEASEIDENTIFIER]})*))`); createToken("PRERELEASELOOSE", `(?:-?(${src[t2.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t2.PRERELEASEIDENTIFIERLOOSE]})*))`); createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`); createToken("BUILD", `(?:\\+(${src[t2.BUILDIDENTIFIER]}(?:\\.${src[t2.BUILDIDENTIFIER]})*))`); createToken("FULLPLAIN", `v?${src[t2.MAINVERSION]}${src[t2.PRERELEASE]}?${src[t2.BUILD]}?`); createToken("FULL", `^${src[t2.FULLPLAIN]}$`); createToken("LOOSEPLAIN", `[v=\\s]*${src[t2.MAINVERSIONLOOSE]}${src[t2.PRERELEASELOOSE]}?${src[t2.BUILD]}?`); createToken("LOOSE", `^${src[t2.LOOSEPLAIN]}$`); createToken("GTLT", "((?:<|>)?=?)"); createToken("XRANGEIDENTIFIERLOOSE", `${src[t2.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`); createToken("XRANGEIDENTIFIER", `${src[t2.NUMERICIDENTIFIER]}|x|X|\\*`); createToken("XRANGEPLAIN", `[v=\\s]*(${src[t2.XRANGEIDENTIFIER]})(?:\\.(${src[t2.XRANGEIDENTIFIER]})(?:\\.(${src[t2.XRANGEIDENTIFIER]})(?:${src[t2.PRERELEASE]})?${src[t2.BUILD]}?)?)?`); createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t2.XRANGEIDENTIFIERLOOSE]})(?:${src[t2.PRERELEASELOOSE]})?${src[t2.BUILD]}?)?)?`); createToken("XRANGE", `^${src[t2.GTLT]}\\s*${src[t2.XRANGEPLAIN]}$`); createToken("XRANGELOOSE", `^${src[t2.GTLT]}\\s*${src[t2.XRANGEPLAINLOOSE]}$`); createToken("COERCEPLAIN", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH2}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH2}}))?`); createToken("COERCE", `${src[t2.COERCEPLAIN]}(?:$|[^\\d])`); createToken("COERCEFULL", src[t2.COERCEPLAIN] + `(?:${src[t2.PRERELEASE]})?(?:${src[t2.BUILD]})?(?:$|[^\\d])`); createToken("COERCERTL", src[t2.COERCE], true); createToken("COERCERTLFULL", src[t2.COERCEFULL], true); createToken("LONETILDE", "(?:~>?)"); createToken("TILDETRIM", `(\\s*)${src[t2.LONETILDE]}\\s+`, true); exports2.tildeTrimReplace = "$1~"; createToken("TILDE", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAIN]}$`); createToken("TILDELOOSE", `^${src[t2.LONETILDE]}${src[t2.XRANGEPLAINLOOSE]}$`); createToken("LONECARET", "(?:\\^)"); createToken("CARETTRIM", `(\\s*)${src[t2.LONECARET]}\\s+`, true); exports2.caretTrimReplace = "$1^"; createToken("CARET", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAIN]}$`); createToken("CARETLOOSE", `^${src[t2.LONECARET]}${src[t2.XRANGEPLAINLOOSE]}$`); createToken("COMPARATORLOOSE", `^${src[t2.GTLT]}\\s*(${src[t2.LOOSEPLAIN]})$|^$`); createToken("COMPARATOR", `^${src[t2.GTLT]}\\s*(${src[t2.FULLPLAIN]})$|^$`); createToken("COMPARATORTRIM", `(\\s*)${src[t2.GTLT]}\\s*(${src[t2.LOOSEPLAIN]}|${src[t2.XRANGEPLAIN]})`, true); exports2.comparatorTrimReplace = "$1$2$3"; createToken("HYPHENRANGE", `^\\s*(${src[t2.XRANGEPLAIN]})\\s+-\\s+(${src[t2.XRANGEPLAIN]})\\s*$`); createToken("HYPHENRANGELOOSE", `^\\s*(${src[t2.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t2.XRANGEPLAINLOOSE]})\\s*$`); createToken("STAR", "(<|>)?=?\\s*\\*"); createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$"); createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$"); })(re$2, re$2.exports); var reExports = re$2.exports; const looseOption = Object.freeze({ loose: true }); const emptyOpts = Object.freeze({}); const parseOptions$1 = (options) => { if (!options) { return emptyOpts; } if (typeof options !== "object") { return looseOption; } return options; }; var parseOptions_1 = parseOptions$1; const numeric = /^[0-9]+$/; const compareIdentifiers$1 = (a, b) => { const anum = numeric.test(a); const bnum = numeric.test(b); if (anum && bnum) { a = +a; b = +b; } return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1; }; const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a); var identifiers$1 = { compareIdentifiers: compareIdentifiers$1, rcompareIdentifiers }; const debug = debug_1; const { MAX_LENGTH, MAX_SAFE_INTEGER } = constants$1; const { safeRe: re$1, t: t$1 } = reExports; const parseOptions = parseOptions_1; const { compareIdentifiers } = identifiers$1; let SemVer$d = class SemVer { constructor(version, options) { options = parseOptions(options); if (version instanceof SemVer) { if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) { return version; } else { version = version.version; } } else if (typeof version !== "string") { throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`); } if (version.length > MAX_LENGTH) { throw new TypeError( `version is longer than ${MAX_LENGTH} characters` ); } debug("SemVer", version, options); this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; const m = version.trim().match(options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]); if (!m) { throw new TypeError(`Invalid Version: ${version}`); } this.raw = version; this.major = +m[1]; this.minor = +m[2]; this.patch = +m[3]; if (this.major > MAX_SAFE_INTEGER || this.major < 0) { throw new TypeError("Invalid major version"); } if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { throw new TypeError("Invalid minor version"); } if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { throw new TypeError("Invalid patch version"); } if (!m[4]) { this.prerelease = []; } else { this.prerelease = m[4].split(".").map((id) => { if (/^[0-9]+$/.test(id)) { const num = +id; if (num >= 0 && num < MAX_SAFE_INTEGER) { return num; } } return id; }); } this.build = m[5] ? m[5].split(".") : []; this.format(); } format() { this.version = `${this.major}.${this.minor}.${this.patch}`; if (this.prerelease.length) { this.version += `-${this.prerelease.join(".")}`; } return this.version; } toString() { return this.version; } compare(other) { debug("SemVer.compare", this.version, this.options, other); if (!(other instanceof SemVer)) { if (typeof other === "string" && other === this.version) { return 0; } other = new SemVer(other, this.options); } if (other.version === this.version) { return 0; } return this.compareMain(other) || this.comparePre(other); } compareMain(other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options); } return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch); } comparePre(other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options); } if (this.prerelease.length && !other.prerelease.length) { return -1; } else if (!this.prerelease.length && other.prerelease.length) { return 1; } else if (!this.prerelease.length && !other.prerelease.length) { return 0; } let i = 0; do { const a = this.prerelease[i]; const b = other.prerelease[i]; debug("prerelease compare", i, a, b); if (a === void 0 && b === void 0) { return 0; } else if (b === void 0) { return 1; } else if (a === void 0) { return -1; } else if (a === b) { continue; } else { return compareIdentifiers(a, b); } } while (++i); } compareBuild(other) { if (!(other instanceof SemVer)) { other = new SemVer(other, this.options); } let i = 0; do { const a = this.build[i]; const b = other.build[i]; debug("build compare", i, a, b); if (a === void 0 && b === void 0) { return 0; } else if (b === void 0) { return 1; } else if (a === void 0) { return -1; } else if (a === b) { continue; } else { return compareIdentifiers(a, b); } } while (++i); } // preminor will bump the version up to the next minor release, and immediately // down to pre-release. premajor and prepatch work the same way. inc(release, identifier, identifierBase) { switch (release) { case "premajor": this.prerelease.length = 0; this.patch = 0; this.minor = 0; this.major++; this.inc("pre", identifier, identifierBase); break; case "preminor": this.prerelease.length = 0; this.patch = 0; this.minor++; this.inc("pre", identifier, identifierBase); break; case "prepatch": this.prerelease.length = 0; this.inc("patch", identifier, identifierBase); this.inc("pre", identifier, identifierBase); break; case "prerelease": if (this.prerelease.length === 0) { this.inc("patch", identifier, identifierBase); } this.inc("pre", identifier, identifierBase); break; case "major": if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) { this.major++; } this.minor = 0; this.patch = 0; this.prerelease = []; break; case "minor": if (this.patch !== 0 || this.prerelease.length === 0) { this.minor++; } this.patch = 0; this.prerelease = []; break; case "patch": if (this.prerelease.length === 0) { this.patch++; } this.prerelease = []; break; case "pre": { const base = Number(identifierBase) ? 1 : 0; if (!identifier && identifierBase === false) { throw new Error("invalid increment argument: identifier is empty"); } if (this.prerelease.length === 0) { this.prerelease = [base]; } else { let i = this.prerelease.length; while (--i >= 0) { if (typeof this.prerelease[i] === "number") { this.prerelease[i]++; i = -2; } } if (i === -1) { if (identifier === this.prerelease.join(".") && identifierBase === false) { throw new Error("invalid increment argument: identifier already exists"); } this.prerelease.push(base); } } if (identifier) { let prerelease2 = [identifier, base]; if (identifierBase === false) { prerelease2 = [identifier]; } if (compareIdentifiers(this.prerelease[0], identifier) === 0) { if (isNaN(this.prerelease[1])) { this.prerelease = prerelease2; } } else { this.prerelease = prerelease2; } } break; } default: throw new Error(`invalid increment argument: ${release}`); } this.raw = this.format(); if (this.build.length) { this.raw += `+${this.build.join(".")}`; } return this; } }; var semver$2 = SemVer$d; const SemVer$c = semver$2; const parse$6 = (version, options, throwErrors = false) => { if (version instanceof SemVer$c) { return version; } try { return new SemVer$c(version, options); } catch (er) { if (!throwErrors) { return null; } throw er; } }; var parse_1 = parse$6; const parse$5 = parse_1; const valid$2 = (version, options) => { const v = parse$5(version, options); return v ? v.version : null; }; var valid_1 = valid$2; const parse$4 = parse_1; const clean$1 = (version, options) => { const s = parse$4(version.trim().replace(/^[=v]+/, ""), options); return s ? s.version : null; }; var clean_1 = clean$1; const SemVer$b = semver$2; const inc$1 = (version, release, options, identifier, identifierBase) => { if (typeof options === "string") { identifierBase = identifier; identifier = options; options = void 0; } try { return new SemVer$b( version instanceof SemVer$b ? version.version : version, options ).inc(release, identifier, identifierBase).version; } catch (er) { return null; } }; var inc_1 = inc$1; const parse$3 = parse_1; const diff$1 = (version1, version2) => { const v1 = parse$3(version1, null, true); const v2 = parse$3(version2, null, true); const comparison = v1.compare(v2); if (comparison === 0) { return null; } const v1Higher = comparison > 0; const highVersion = v1Higher ? v1 : v2; const lowVersion = v1Higher ? v2 : v1; const highHasPre = !!highVersion.prerelease.length; const lowHasPre = !!lowVersion.prerelease.length; if (lowHasPre && !highHasPre) { if (!lowVersion.patch && !lowVersion.minor) { return "major"; } if (highVersion.patch) { return "patch"; } if (highVersion.minor) { return "minor"; } return "major"; } const prefix = highHasPre ? "pre" : ""; if (v1.major !== v2.major) { return prefix + "major"; } if (v1.minor !== v2.minor) { return prefix + "minor"; } if (v1.patch !== v2.patch) { return prefix + "patch"; } return "prerelease"; }; var diff_1 = diff$1; const SemVer$a = semver$2; const major$1 = (a, loose) => new SemVer$a(a, loose).major; var major_1 = major$1; const SemVer$9 = semver$2; const minor$1 = (a, loose) => new SemVer$9(a, loose).minor; var minor_1 = minor$1; const SemVer$8 = semver$2; const patch$1 = (a, loose) => new SemVer$8(a, loose).patch; var patch_1 = patch$1; const parse$2 = parse_1; const prerelease$1 = (version, options) => { const parsed = parse$2(version, options); return parsed && parsed.prerelease.length ? parsed.prerelease : null; }; var prerelease_1 = prerelease$1; const SemVer$7 = semver$2; const compare$b = (a, b, loose) => new SemVer$7(a, loose).compare(new SemVer$7(b, loose)); var compare_1 = compare$b; const compare$a = compare_1; const rcompare$1 = (a, b, loose) => compare$a(b, a, loose); var rcompare_1 = rcompare$1; const compare$9 = compare_1; const compareLoose$1 = (a, b) => compare$9(a, b, true); var compareLoose_1 = compareLoose$1; const SemVer$6 = semver$2; const compareBuild$3 = (a, b, loose) => { const versionA = new SemVer$6(a, loose); const versionB = new SemVer$6(b, loose); return versionA.compare(versionB) || versionA.compareBuild(versionB); }; var compareBuild_1 = compareBuild$3; const compareBuild$2 = compareBuild_1; const sort$1 = (list, loose) => list.sort((a, b) => compareBuild$2(a, b, loose)); var sort_1 = sort$1; const compareBuild$1 = compareBuild_1; const rsort$1 = (list, loose) => list.sort((a, b) => compareBuild$1(b, a, loose)); var rsort_1 = rsort$1; const compare$8 = compare_1; const gt$4 = (a, b, loose) => compare$8(a, b, loose) > 0; var gt_1 = gt$4; const compare$7 = compare_1; const lt$3 = (a, b, loose) => compare$7(a, b, loose) < 0; var lt_1 = lt$3; const compare$6 = compare_1; const eq$2 = (a, b, loose) => compare$6(a, b, loose) === 0; var eq_1 = eq$2; const compare$5 = compare_1; const neq$2 = (a, b, loose) => compare$5(a, b, loose) !== 0; var neq_1 = neq$2; const compare$4 = compare_1; const gte$3 = (a, b, loose) => compare$4(a, b, loose) >= 0; var gte_1 = gte$3; const compare$3 = compare_1; const lte$3 = (a, b, loose) => compare$3(a, b, loose) <= 0; var lte_1 = lte$3; const eq$1 = eq_1; const neq$1 = neq_1; const gt$3 = gt_1; const gte$2 = gte_1; const lt$2 = lt_1; const lte$2 = lte_1; const cmp$1 = (a, op, b, loose) => { switch (op) { case "===": if (typeof a === "object") { a = a.version; } if (typeof b === "object") { b = b.version; } return a === b; case "!==": if (typeof a === "object") { a = a.version; } if (typeof b === "object") { b = b.version; } return a !== b; case "": case "=": case "==": return eq$1(a, b, loose); case "!=": return neq$1(a, b, loose); case ">": return gt$3(a, b, loose); case ">=": return gte$2(a, b, loose); case "<": return lt$2(a, b, loose); case "<=": return lte$2(a, b, loose); default: throw new TypeError(`Invalid operator: ${op}`); } }; var cmp_1 = cmp$1; const SemVer$5 = semver$2; const parse$1 = parse_1; const { safeRe: re, t } = reExports; const coerce$1 = (version, options) => { if (version instanceof SemVer$5) { return version; } if (typeof version === "number") { version = String(version); } if (typeof version !== "string") { return null; } options = options || {}; let match = null; if (!options.rtl) { match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]); } else { const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]; let next; while ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) { if (!match || next.index + next[0].length !== match.index + match[0].length) { match = next; } coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length; } coerceRtlRegex.lastIndex = -1; } if (match === null) { return null; } const major2 = match[2]; const minor2 = match[3] || "0"; const patch2 = match[4] || "0"; const prerelease2 = options.includePrerelease && match[5] ? `-${match[5]}` : ""; const build = options.includePrerelease && match[6] ? `+${match[6]}` : ""; return parse$1(`${major2}.${minor2}.${patch2}${prerelease2}${build}`, options); }; var coerce_1 = coerce$1; class LRUCache { constructor() { this.max = 1e3; this.map = /* @__PURE__ */ new Map(); } get(key) { const value = this.map.get(key); if (value === void 0) { return void 0; } else { this.map.delete(key); this.map.set(key, value); return value; } } delete(key) { return this.map.delete(key); } set(key, value) { const deleted = this.delete(key); if (!deleted && value !== void 0) { if (this.map.size >= this.max) { const firstKey = this.map.keys().next().value; this.delete(firstKey); } this.map.set(key, value); } return this; } } var lrucache = LRUCache; var range; var hasRequiredRange; function requireRange() { if (hasRequiredRange) return range; hasRequiredRange = 1; const SPACE_CHARACTERS = /\s+/g; class Range2 { constructor(range2, options) { options = parseOptions2(options); if (range2 instanceof Range2) { if (range2.loose === !!options.loose && range2.includePrerelease === !!options.includePrerelease) { return range2; } else { return new Range2(range2.raw, options); } } if (range2 instanceof Comparator2) { this.raw = range2.value; this.set = [[range2]]; this.formatted = void 0; return this; } this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; this.raw = range2.trim().replace(SPACE_CHARACTERS, " "); this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length); if (!this.set.length) { throw new TypeError(`Invalid SemVer Range: ${this.raw}`); } if (this.set.length > 1) { const first = this.set[0]; this.set = this.set.filter((c) => !isNullSet(c[0])); if (this.set.length === 0) { this.set = [first]; } else if (this.set.length > 1) { for (const c of this.set) { if (c.length === 1 && isAny(c[0])) { this.set = [c]; break; } } } } this.formatted = void 0; } get range() { if (this.formatted === void 0) { this.formatted = ""; for (let i = 0; i < this.set.length; i++) { if (i > 0) { this.formatted += "||"; } const comps = this.set[i]; for (let k = 0; k < comps.length; k++) { if (k > 0) { this.formatted += " "; } this.formatted += comps[k].toString().trim(); } } } return this.formatted; } format() { return this.range; } toString() { return this.range; } parseRange(range2) { const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE); const memoKey = memoOpts + ":" + range2; const cached = cache.get(memoKey); if (cached) { return cached; } const loose = this.options.loose; const hr = loose ? re2[t2.HYPHENRANGELOOSE] : re2[t2.HYPHENRANGE]; range2 = range2.replace(hr, hyphenReplace(this.options.includePrerelease)); debug2("hyphen replace", range2); range2 = range2.replace(re2[t2.COMPARATORTRIM], comparatorTrimReplace); debug2("comparator trim", range2); range2 = range2.replace(re2[t2.TILDETRIM], tildeTrimReplace); debug2("tilde trim", range2); range2 = range2.replace(re2[t2.CARETTRIM], caretTrimReplace); debug2("caret trim", range2); let rangeList = range2.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)); if (loose) { rangeList = rangeList.filter((comp) => { debug2("loose invalid filter", comp, this.options); return !!comp.match(re2[t2.COMPARATORLOOSE]); }); } debug2("range list", rangeList); const rangeMap = /* @__PURE__ */ new Map(); const comparators = rangeList.map((comp) => new Comparator2(comp, this.options)); for (const comp of comparators) { if (isNullSet(comp)) { return [comp]; } rangeMap.set(comp.value, comp); } if (rangeMap.size > 1 && rangeMap.has("")) { rangeMap.delete(""); } const result = [...rangeMap.values()]; cache.set(memoKey, result); return result; } intersects(range2, options) { if (!(range2 instanceof Range2)) { throw new TypeError("a Range is required"); } return this.set.some((thisComparators) => { return isSatisfiable(thisComparators, options) && range2.set.some((rangeComparators) => { return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => { return rangeComparators.every((rangeComparator) => { return thisComparator.intersects(rangeComparator, options); }); }); }); }); } // if ANY of the sets match ALL of its comparators, then pass test(version) { if (!version) { return false; } if (typeof version === "string") { try { version = new SemVer3(version, this.options); } catch (er) { return false; } } for (let i = 0; i < this.set.length; i++) { if (testSet(this.set[i], version, this.options)) { return true; } } return false; } } range = Range2; const LRU = lrucache; const cache = new LRU(); const parseOptions2 = parseOptions_1; const Comparator2 = requireComparator(); const debug2 = debug_1; const SemVer3 = semver$2; const { safeRe: re2, t: t2, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = reExports; const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = constants$1; const isNullSet = (c) => c.value === "<0.0.0-0"; const isAny = (c) => c.value === ""; const isSatisfiable = (comparators, options) => { let result = true; const remainingComparators = comparators.slice(); let testComparator = remainingComparators.pop(); while (result && remainingComparators.length) { result = remainingComparators.every((otherComparator) => { return testComparator.intersects(otherComparator, options); }); testComparator = remainingComparators.pop(); } return result; }; const parseComparator = (comp, options) => { debug2("comp", comp, options); comp = replaceCarets(comp, options); debug2("caret", comp); comp = replaceTildes(comp, options); debug2("tildes", comp); comp = replaceXRanges(comp, options); debug2("xrange", comp); comp = replaceStars(comp, options); debug2("stars", comp); return comp; }; const isX = (id) => !id || id.toLowerCase() === "x" || id === "*"; const replaceTildes = (comp, options) => { return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" "); }; const replaceTilde = (comp, options) => { const r = options.loose ? re2[t2.TILDELOOSE] : re2[t2.TILDE]; return comp.replace(r, (_, M, m, p, pr) => { debug2("tilde", comp, _, M, m, p, pr); let ret; if (isX(M)) { ret = ""; } else if (isX(m)) { ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; } else if (isX(p)) { ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; } else if (pr) { debug2("replaceTilde pr", pr); ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; } else { ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; } debug2("tilde return", ret); return ret; }); }; const replaceCarets = (comp, options) => { return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" "); }; const replaceCaret = (comp, options) => { debug2("caret", comp, options); const r = options.loose ? re2[t2.CARETLOOSE] : re2[t2.CARET]; const z = options.includePrerelease ? "-0" : ""; return comp.replace(r, (_, M, m, p, pr) => { debug2("caret", comp, _, M, m, p, pr); let ret; if (isX(M)) { ret = ""; } else if (isX(m)) { ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; } else if (isX(p)) { if (M === "0") { ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; } else { ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`; } } else if (pr) { debug2("replaceCaret pr", pr); if (M === "0") { if (m === "0") { ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; } else { ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; } } else { ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; } } else { debug2("no pr"); if (M === "0") { if (m === "0") { ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`; } else { ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`; } } else { ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; } } debug2("caret return", ret); return ret; }); }; const replaceXRanges = (comp, options) => { debug2("replaceXRanges", comp, options); return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" "); }; const replaceXRange = (comp, options) => { comp = comp.trim(); const r = options.loose ? re2[t2.XRANGELOOSE] : re2[t2.XRANGE]; return comp.replace(r, (ret, gtlt, M, m, p, pr) => { debug2("xRange", comp, ret, gtlt, M, m, p, pr); const xM = isX(M); const xm = xM || isX(m); const xp = xm || isX(p); const anyX = xp; if (gtlt === "=" && anyX) { gtlt = ""; } pr = options.includePrerelease ? "-0" : ""; if (xM) { if (gtlt === ">" || gtlt === "<") { ret = "<0.0.0-0"; } else { ret = "*"; } } else if (gtlt && anyX) { if (xm) { m = 0; } p = 0; if (gtlt === ">") { gtlt = ">="; if (xm) { M = +M + 1; m = 0; p = 0; } else { m = +m + 1; p = 0; } } else if (gtlt === "<=") { gtlt = "<"; if (xm) { M = +M + 1; } else { m = +m + 1; } } if (gtlt === "<") { pr = "-0"; } ret = `${gtlt + M}.${m}.${p}${pr}`; } else if (xm) { ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`; } else if (xp) { ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; } debug2("xRange return", ret); return ret; }); }; const replaceStars = (comp, options) => { debug2("replaceStars", comp, options); return comp.trim().replace(re2[t2.STAR], ""); }; const replaceGTE0 = (comp, options) => { debug2("replaceGTE0", comp, options); return comp.trim().replace(re2[options.includePrerelease ? t2.GTE0PRE : t2.GTE0], ""); }; const hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { if (isX(fM)) { from = ""; } else if (isX(fm)) { from = `>=${fM}.0.0${incPr ? "-0" : ""}`; } else if (isX(fp)) { from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`; } else if (fpr) { from = `>=${from}`; } else { from = `>=${from}${incPr ? "-0" : ""}`; } if (isX(tM)) { to = ""; } else if (isX(tm)) { to = `<${+tM + 1}.0.0-0`; } else if (isX(tp)) { to = `<${tM}.${+tm + 1}.0-0`; } else if (tpr) { to = `<=${tM}.${tm}.${tp}-${tpr}`; } else if (incPr) { to = `<${tM}.${tm}.${+tp + 1}-0`; } else { to = `<=${to}`; } return `${from} ${to}`.trim(); }; const testSet = (set, version, options) => { for (let i = 0; i < set.length; i++) { if (!set[i].test(version)) { return false; } } if (version.prerelease.length && !options.includePrerelease) { for (let i = 0; i < set.length; i++) { debug2(set[i].semver); if (set[i].semver === Comparator2.ANY) { continue; } if (set[i].semver.prerelease.length > 0) { const allowed = set[i].semver; if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) { return true; } } } return false; } return true; }; return range; } var comparator; var hasRequiredComparator; function requireComparator() { if (hasRequiredComparator) return comparator; hasRequiredComparator = 1; const ANY2 = Symbol("SemVer ANY"); class Comparator2 { static get ANY() { return ANY2; } constructor(comp, options) { options = parseOptions2(options); if (comp instanceof Comparator2) { if (comp.loose === !!options.loose) { return comp; } else { comp = comp.value; } } comp = comp.trim().split(/\s+/).join(" "); debug2("comparator", comp, options); this.options = options; this.loose = !!options.loose; this.parse(comp); if (this.semver === ANY2) { this.value = ""; } else { this.value = this.operator + this.semver.version; } debug2("comp", this); } parse(comp) { const r = this.options.loose ? re2[t2.COMPARATORLOOSE] : re2[t2.COMPARATOR]; const m = comp.match(r); if (!m) { throw new TypeError(`Invalid comparator: ${comp}`); } this.operator = m[1] !== void 0 ? m[1] : ""; if (this.operator === "=") { this.operator = ""; } if (!m[2]) { this.semver = ANY2; } else { this.semver = new SemVer3(m[2], this.options.loose); } } toString() { return this.value; } test(version) { debug2("Comparator.test", version, this.options.loose); if (this.semver === ANY2 || version === ANY2) { return true; } if (typeof version === "string") { try { version = new SemVer3(version, this.options); } catch (er) { return false; } } return cmp2(version, this.operator, this.semver, this.options); } intersects(comp, options) { if (!(comp instanceof Comparator2)) { throw new TypeError("a Comparator is required"); } if (this.operator === "") { if (this.value === "") { return true; } return new Range2(comp.value, options).test(this.value); } else if (comp.operator === "") { if (comp.value === "") { return true; } return new Range2(this.value, options).test(comp.semver); } options = parseOptions2(options); if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) { return false; } if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) { return false; } if (this.operator.startsWith(">") && comp.operator.startsWith(">")) { return true; } if (this.operator.startsWith("<") && comp.operator.startsWith("<")) { return true; } if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) { return true; } if (cmp2(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) { return true; } if (cmp2(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) { return true; } return false; } } comparator = Comparator2; const parseOptions2 = parseOptions_1; const { safeRe: re2, t: t2 } = reExports; const cmp2 = cmp_1; const debug2 = debug_1; const SemVer3 = semver$2; const Range2 = requireRange(); return comparator; } const Range$9 = requireRange(); const satisfies$4 = (version, range2, options) => { try { range2 = new Range$9(range2, options); } catch (er) { return false; } return range2.test(version); }; var satisfies_1 = satisfies$4; const Range$8 = requireRange(); const toComparators$1 = (range2, options) => new Range$8(range2, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" ")); var toComparators_1 = toComparators$1; const SemVer$4 = semver$2; const Range$7 = requireRange(); const maxSatisfying$1 = (versions, range2, options) => { let max = null; let maxSV = null; let rangeObj = null; try { rangeObj = new Range$7(range2, options); } catch (er) { return null; } versions.forEach((v) => { if (rangeObj.test(v)) { if (!max || maxSV.compare(v) === -1) { max = v; maxSV = new SemVer$4(max, options); } } }); return max; }; var maxSatisfying_1 = maxSatisfying$1; const SemVer$3 = semver$2; const Range$6 = requireRange(); const minSatisfying$1 = (versions, range2, options) => { let min = null; let minSV = null; let rangeObj = null; try { rangeObj = new Range$6(range2, options); } catch (er) { return null; } versions.forEach((v) => { if (rangeObj.test(v)) { if (!min || minSV.compare(v) === 1) { min = v; minSV = new SemVer$3(min, options); } } }); return min; }; var minSatisfying_1 = minSatisfying$1; const SemVer$2 = semver$2; const Range$5 = requireRange(); const gt$2 = gt_1; const minVersion$1 = (range2, loose) => { range2 = new Range$5(range2, loose); let minver = new SemVer$2("0.0.0"); if (range2.test(minver)) { return minver; } minver = new SemVer$2("0.0.0-0"); if (range2.test(minver)) { return minver; } minver = null; for (let i = 0; i < range2.set.length; ++i) { const comparators = range2.set[i]; let setMin = null; comparators.forEach((comparator2) => { const compver = new SemVer$2(comparator2.semver.version); switch (comparator2.operator) { case ">": if (compver.prerelease.length === 0) { compver.patch++; } else { compver.prerelease.push(0); } compver.raw = compver.format(); case "": case ">=": if (!setMin || gt$2(compver, setMin)) { setMin = compver; } break; case "<": case "<=": break; default: throw new Error(`Unexpected operation: ${comparator2.operator}`); } }); if (setMin && (!minver || gt$2(minver, setMin))) { minver = setMin; } } if (minver && range2.test(minver)) { return minver; } return null; }; var minVersion_1 = minVersion$1; const Range$4 = requireRange(); const validRange$1 = (range2, options) => { try { return new Range$4(range2, options).range || "*"; } catch (er) { return null; } }; var valid$1 = validRange$1; const SemVer$1 = semver$2; const Comparator$2 = requireComparator(); const { ANY: ANY$1 } = Comparator$2; const Range$3 = requireRange(); const satisfies$3 = satisfies_1; const gt$1 = gt_1; const lt$1 = lt_1; const lte$1 = lte_1; const gte$1 = gte_1; const outside$3 = (version, range2, hilo, options) => { version = new SemVer$1(version, options); range2 = new Range$3(range2, options); let gtfn, ltefn, ltfn, comp, ecomp; switch (hilo) { case ">": gtfn = gt$1; ltefn = lte$1; ltfn = lt$1; comp = ">"; ecomp = ">="; break; case "<": gtfn = lt$1; ltefn = gte$1; ltfn = gt$1; comp = "<"; ecomp = "<="; break; default: throw new TypeError('Must provide a hilo val of "<" or ">"'); } if (satisfies$3(version, range2, options)) { return false; } for (let i = 0; i < range2.set.length; ++i) { const comparators = range2.set[i]; let high = null; let low = null; comparators.forEach((comparator2) => { if (comparator2.semver === ANY$1) { comparator2 = new Comparator$2(">=0.0.0"); } high = high || comparator2; low = low || comparator2; if (gtfn(comparator2.semver, high.semver, options)) { high = comparator2; } else if (ltfn(comparator2.semver, low.semver, options)) { low = comparator2; } }); if (high.operator === comp || high.operator === ecomp) { return false; } if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) { return false; } else if (low.operator === ecomp && ltfn(version, low.semver)) { return false; } } return true; }; var outside_1 = outside$3; const outside$2 = outside_1; const gtr$1 = (version, range2, options) => outside$2(version, range2, ">", options); var gtr_1 = gtr$1; const outside$1 = outside_1; const ltr$1 = (version, range2, options) => outside$1(version, range2, "<", options); var ltr_1 = ltr$1; const Range$2 = requireRange(); const intersects$1 = (r1, r2, options) => { r1 = new Range$2(r1, options); r2 = new Range$2(r2, options); return r1.intersects(r2, options); }; var intersects_1 = intersects$1; const satisfies$2 = satisfies_1; const compare$2 = compare_1; var simplify = (versions, range2, options) => { const set = []; let first = null; let prev = null; const v = versions.sort((a, b) => compare$2(a, b, options)); for (const version of v) { const included = satisfies$2(version, range2, options); if (included) { prev = version; if (!first) { first = version; } } else { if (prev) { set.push([first, prev]); } prev = null; first = null; } } if (first) { set.push([first, null]); } const ranges = []; for (const [min, max] of set) { if (min === max) { ranges.push(min); } else if (!max && min === v[0]) { ranges.push("*"); } else if (!max) { ranges.push(`>=${min}`); } else if (min === v[0]) { ranges.push(`<=${max}`); } else { ranges.push(`${min} - ${max}`); } } const simplified = ranges.join(" || "); const original = typeof range2.raw === "string" ? range2.raw : String(range2); return simplified.length < original.length ? simplified : range2; }; const Range$1 = requireRange(); const Comparator$1 = requireComparator(); const { ANY } = Comparator$1; const satisfies$1 = satisfies_1; const compare$1 = compare_1; const subset$1 = (sub, dom, options = {}) => { if (sub === dom) { return true; } sub = new Range$1(sub, options); dom = new Range$1(dom, options); let sawNonNull = false; OUTER: for (const simpleSub of sub.set) { for (const simpleDom of dom.set) { const isSub = simpleSubset(simpleSub, simpleDom, options); sawNonNull = sawNonNull || isSub !== null; if (isSub) { continue OUTER; } } if (sawNonNull) { return false; } } return true; }; const minimumVersionWithPreRelease = [new Comparator$1(">=0.0.0-0")]; const minimumVersion = [new Comparator$1(">=0.0.0")]; const simpleSubset = (sub, dom, options) => { if (sub === dom) { return true; } if (sub.length === 1 && sub[0].semver === ANY) { if (dom.length === 1 && dom[0].semver === ANY) { return true; } else if (options.includePrerelease) { sub = minimumVersionWithPreRelease; } else { sub = minimumVersion; } } if (dom.length === 1 && dom[0].semver === ANY) { if (options.includePrerelease) { return true; } else { dom = minimumVersion; } } const eqSet = /* @__PURE__ */ new Set(); let gt2, lt2; for (const c of sub) { if (c.operator === ">" || c.operator === ">=") { gt2 = higherGT(gt2, c, options); } else if (c.operator === "<" || c.operator === "<=") { lt2 = lowerLT(lt2, c, options); } else { eqSet.add(c.semver); } } if (eqSet.size > 1) { return null; } let gtltComp; if (gt2 && lt2) { gtltComp = compare$1(gt2.semver, lt2.semver, options); if (gtltComp > 0) { return null; } else if (gtltComp === 0 && (gt2.operator !== ">=" || lt2.operator !== "<=")) { return null; } } for (const eq2 of eqSet) { if (gt2 && !satisfies$1(eq2, String(gt2), options)) { return null; } if (lt2 && !satisfies$1(eq2, String(lt2), options)) { return null; } for (const c of dom) { if (!satisfies$1(eq2, String(c), options)) { return false; } } return true; } let higher, lower; let hasDomLT, hasDomGT; let needDomLTPre = lt2 && !options.includePrerelease && lt2.semver.prerelease.length ? lt2.semver : false; let needDomGTPre = gt2 && !options.includePrerelease && gt2.semver.prerelease.length ? gt2.semver : false; if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt2.operator === "<" && needDomLTPre.prerelease[0] === 0) { needDomLTPre = false; } for (const c of dom) { hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">="; hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<="; if (gt2) { if (needDomGTPre) { if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) { needDomGTPre = false; } } if (c.operator === ">" || c.operator === ">=") { higher = higherGT(gt2, c, options); if (higher === c && higher !== gt2) { return false; } } else if (gt2.operator === ">=" && !satisfies$1(gt2.semver, String(c), options)) { return false; } } if (lt2) { if (needDomLTPre) { if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) { needDomLTPre = false; } } if (c.operator === "<" || c.operator === "<=") { lower = lowerLT(lt2, c, options); if (lower === c && lower !== lt2) { return false; } } else if (lt2.operator === "<=" && !satisfies$1(lt2.semver, String(c), options)) { return false; } } if (!c.operator && (lt2 || gt2) && gtltComp !== 0) { return false; } } if (gt2 && hasDomLT && !lt2 && gtltComp !== 0) { return false; } if (lt2 && hasDomGT && !gt2 && gtltComp !== 0) { return false; } if (needDomGTPre || needDomLTPre) { return false; } return true; }; const higherGT = (a, b, options) => { if (!a) { return b; } const comp = compare$1(a.semver, b.semver, options); return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a; }; const lowerLT = (a, b, options) => { if (!a) { return b; } const comp = compare$1(a.semver, b.semver, options); return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a; }; var subset_1 = subset$1; const internalRe = reExports; const constants = constants$1; const SemVer2 = semver$2; const identifiers = identifiers$1; const parse = parse_1; const valid = valid_1; const clean = clean_1; const inc = inc_1; const diff = diff_1; const major = major_1; const minor = minor_1; const patch = patch_1; const prerelease = prerelease_1; const compare = compare_1; const rcompare = rcompare_1; const compareLoose = compareLoose_1; const compareBuild = compareBuild_1; const sort = sort_1; const rsort = rsort_1; const gt = gt_1; const lt = lt_1; const eq = eq_1; const neq = neq_1; const gte = gte_1; const lte = lte_1; const cmp = cmp_1; const coerce = coerce_1; const Comparator = requireComparator(); const Range = requireRange(); const satisfies = satisfies_1; const toComparators = toComparators_1; const maxSatisfying = maxSatisfying_1; const minSatisfying = minSatisfying_1; const minVersion = minVersion_1; const validRange = valid$1; const outside = outside_1; const gtr = gtr_1; const ltr = ltr_1; const intersects = intersects_1; const simplifyRange = simplify; const subset = subset_1; var semver = { parse, valid, clean, inc, diff, major, minor, patch, prerelease, compare, rcompare, compareLoose, compareBuild, sort, rsort, gt, lt, eq, neq, gte, lte, cmp, coerce, Comparator, Range, satisfies, toComparators, maxSatisfying, minSatisfying, minVersion, validRange, outside, gtr, ltr, intersects, simplifyRange, subset, SemVer: SemVer2, re: internalRe.re, src: internalRe.src, tokens: internalRe.t, SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, RELEASE_TYPES: constants.RELEASE_TYPES, compareIdentifiers: identifiers.compareIdentifiers, rcompareIdentifiers: identifiers.rcompareIdentifiers }; const semver$1 = /* @__PURE__ */ getDefaultExportFromCjs(semver); const checkVersion = (version) => { const versionMatch = version.match(/\d.*/); if (!versionMatch) return 0; const cleanVersion = versionMatch[0]; if (semver$1.gte(cleanVersion, "5.0.0") && semver$1.lt(cleanVersion, "6.0.0")) { return 5; } else if (semver$1.gte(cleanVersion, "6.0.0")) { return 6; } return 0; }; const findPackageJson = (startPath) => { let currentPath = startPath; while (currentPath !== path.parse(currentPath).root) { const packageJsonPath = path.join(currentPath, "package.json"); if (fs.existsSync(packageJsonPath)) { return packageJsonPath; } currentPath = path.dirname(currentPath); } return null; }; const getDependencies = () => { const userPackageJsonPath = path.resolve(process.cwd(), "package.json"); let userDependencies = {}; if (fs.existsSync(userPackageJsonPath)) { const userPackageJson = JSON.parse( fs.readFileSync(userPackageJsonPath, "utf-8") ); userDependencies = { ...userPackageJson.dependencies, ...userPackageJson.devDependencies }; } return userDependencies; }; const reactRouterDomV5AliasPath = "@module-federation/bridge-react/dist/router-v5.es.js"; const reactRouterDomV6AliasPath = "@module-federation/bridge-react/dist/router-v6.es.js"; const setRouterAlias = (majorVersion, reactRouterDomPath) => { let bridgeRouterAlias = {}; if (majorVersion === 5) { bridgeRouterAlias = { "react-router-dom$": reactRouterDomV5AliasPath }; try { require.resolve("react-router-dom/index.js"); } catch (error) { bridgeRouterAlias = { ...bridgeRouterAlias, "react-router-dom/index.js": reactRouterDomPath }; } } else if (majorVersion === 6) { bridgeRouterAlias = { "react-router-dom$": reactRouterDomV6AliasPath }; try { require.resolve("react-router-dom/dist/index.js"); } catch (error) { bridgeRouterAlias = { ...bridgeRouterAlias, "react-router-dom/dist/index.js": reactRouterDomPath }; } } return bridgeRouterAlias; }; const getBridgeRouterAlias = (originalAlias) => { const userDependencies = getDependencies(); let reactRouterDomPath = ""; if (originalAlias) { reactRouterDomPath = originalAlias; } else if (userDependencies["react-router-dom"]) { try { reactRouterDomPath = path.resolve( process.cwd(), "node_modules/react-router-dom" ); } catch (error) { console.log(error); } } if (reactRouterDomPath) { const packageJsonPath = findPackageJson(reactRouterDomPath) || ""; const packageJsonContent = JSON.parse( fs.readFileSync(packageJsonPath, "utf-8") ); const majorVersion = checkVersion(packageJsonContent.version); const bridgeRouterAlias = setRouterAlias(majorVersion, reactRouterDomPath); console.log( "<<<<<<<<<<<<< bridgeRouterAlias >>>>>>>>>>>>>", bridgeRouterAlias ); return bridgeRouterAlias; } else { const bridgeRouterAlias = { "react-router-dom$": reactRouterDomV6AliasPath }; console.log( "<<<<<<<<<<<<< default bridgeRouterAlias >>>>>>>>>>>>>", bridgeRouterAlias ); return bridgeRouterAlias; } }; class ReactBridgeAliasChangerPlugin { constructor(info) { __publicField(this, "alias"); __publicField(this, "targetFile"); __publicField(this, "moduleFederationOptions"); this.moduleFederationOptions = info.moduleFederationOptions; this.alias = "react-router-dom$"; this.targetFile = "@module-federation/bridge-react/dist/router.es.js"; if (this.moduleFederationOptions.shared) { if (Array.isArray(this.moduleFederationOptions.shared)) { if (this.moduleFederationOptions.shared.includes("react-router-dom")) { throw Error( "React-router-dom cannot be set to shared after react bridge is used" ); } } else { if (this.moduleFederationOptions.shared["react-router-dom"]) { throw Error( "React-router-dom cannot be set to shared after react bridge is used" ); } } } } apply(compiler) { compiler.hooks.afterEnvironment.tap("ReactBridgeAliasPlugin", () => { const nodeModulesPath = path.resolve(compiler.context, "node_modules"); const targetFilePath = path.join(nodeModulesPath, this.targetFile); if (fs.existsSync(targetFilePath)) { const originalResolve = compiler.options.resolve || {}; const originalAlias = originalResolve.alias || {}; const updatedAlias = { // allow `alias` can be override // [this.alias]: targetFilePath, ...getBridgeRouterAlias(originalAlias["react-router-dom"]), ...originalAlias }; compiler.options.resolve = { ...originalResolve, alias: updatedAlias }; } }); } } module.exports = ReactBridgeAliasChangerPlugin;