import { require_compare, require_constants, require_debug, require_identifiers, require_lt, require_parse, require_parse_options, require_re, require_semver, require_valid } from "./chunk-WAJBRAZM.js"; import { require_pluralize } from "./chunk-XNACAI67.js"; import { img, useQuery } from "./chunk-QLEKUQKW.js"; import "./chunk-MBK4V2X7.js"; import { useAppInfo, useTracking } from "./chunk-GSN7U3BK.js"; import "./chunk-T3B5F2LV.js"; import "./chunk-YXDCVYVT.js"; import { ContentBox, useClipboard } from "./chunk-7PUJSL55.js"; import { Pagination } from "./chunk-APGTER6B.js"; import { Layouts } from "./chunk-TIVRAWTC.js"; import { ForwardRef$J, ForwardRef$v, ForwardRef$x, Page } from "./chunk-5CAWUBTQ.js"; import { useQueryParams } from "./chunk-W2TBR6J3.js"; import { useTypedSelector } from "./chunk-QEGMJR7H.js"; import { require_lib } from "./chunk-LCL5TIBZ.js"; import "./chunk-WOQNBAGN.js"; import "./chunk-BHLYCXQ7.js"; import "./chunk-76QM3EFM.js"; import "./chunk-CE4VABH2.js"; import "./chunk-5VODLFKF.js"; import { useNotification } from "./chunk-N55RVBRV.js"; import { Box, Button, Divider, Flex, Grid, LinkButton, Main, MultiSelect, MultiSelectOption, Popover, Searchbar, SingleSelect, SingleSelectOption, Tabs, Tag, TooltipImpl, Typography, useIntl, useNotifyAT } from "./chunk-7XB6XSWQ.js"; import "./chunk-TUXTO2Z5.js"; import "./chunk-FOD4ENRR.js"; import { ForwardRef$3F, ForwardRef$3R, ForwardRef$3V, ForwardRef$3j, ForwardRef$45, ForwardRef$4D, ForwardRef$4F, ForwardRef$D, ForwardRef$d } from "./chunk-WRD5KPDH.js"; import { require_jsx_runtime } from "./chunk-NIAJZ5MX.js"; import { dt } from "./chunk-ACIMPXWY.js"; import { require_react } from "./chunk-MADUDGYZ.js"; import { __commonJS, __toESM } from "./chunk-PLDDJCW6.js"; // node_modules/semver/functions/clean.js var require_clean = __commonJS({ "node_modules/semver/functions/clean.js"(exports, module) { var parse = require_parse(); var clean = (version, options) => { const s = parse(version.trim().replace(/^[=v]+/, ""), options); return s ? s.version : null; }; module.exports = clean; } }); // node_modules/semver/functions/inc.js var require_inc = __commonJS({ "node_modules/semver/functions/inc.js"(exports, module) { var SemVer = require_semver(); var inc = (version, release, options, identifier, identifierBase) => { if (typeof options === "string") { identifierBase = identifier; identifier = options; options = void 0; } try { return new SemVer( version instanceof SemVer ? version.version : version, options ).inc(release, identifier, identifierBase).version; } catch (er) { return null; } }; module.exports = inc; } }); // node_modules/semver/functions/diff.js var require_diff = __commonJS({ "node_modules/semver/functions/diff.js"(exports, module) { var parse = require_parse(); var diff = (version1, version2) => { const v1 = parse(version1, null, true); const v2 = parse(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"; }; module.exports = diff; } }); // node_modules/semver/functions/major.js var require_major = __commonJS({ "node_modules/semver/functions/major.js"(exports, module) { var SemVer = require_semver(); var major = (a, loose) => new SemVer(a, loose).major; module.exports = major; } }); // node_modules/semver/functions/minor.js var require_minor = __commonJS({ "node_modules/semver/functions/minor.js"(exports, module) { var SemVer = require_semver(); var minor = (a, loose) => new SemVer(a, loose).minor; module.exports = minor; } }); // node_modules/semver/functions/patch.js var require_patch = __commonJS({ "node_modules/semver/functions/patch.js"(exports, module) { var SemVer = require_semver(); var patch = (a, loose) => new SemVer(a, loose).patch; module.exports = patch; } }); // node_modules/semver/functions/prerelease.js var require_prerelease = __commonJS({ "node_modules/semver/functions/prerelease.js"(exports, module) { var parse = require_parse(); var prerelease = (version, options) => { const parsed = parse(version, options); return parsed && parsed.prerelease.length ? parsed.prerelease : null; }; module.exports = prerelease; } }); // node_modules/semver/functions/rcompare.js var require_rcompare = __commonJS({ "node_modules/semver/functions/rcompare.js"(exports, module) { var compare = require_compare(); var rcompare = (a, b, loose) => compare(b, a, loose); module.exports = rcompare; } }); // node_modules/semver/functions/compare-loose.js var require_compare_loose = __commonJS({ "node_modules/semver/functions/compare-loose.js"(exports, module) { var compare = require_compare(); var compareLoose = (a, b) => compare(a, b, true); module.exports = compareLoose; } }); // node_modules/semver/functions/compare-build.js var require_compare_build = __commonJS({ "node_modules/semver/functions/compare-build.js"(exports, module) { var SemVer = require_semver(); var compareBuild = (a, b, loose) => { const versionA = new SemVer(a, loose); const versionB = new SemVer(b, loose); return versionA.compare(versionB) || versionA.compareBuild(versionB); }; module.exports = compareBuild; } }); // node_modules/semver/functions/sort.js var require_sort = __commonJS({ "node_modules/semver/functions/sort.js"(exports, module) { var compareBuild = require_compare_build(); var sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)); module.exports = sort; } }); // node_modules/semver/functions/rsort.js var require_rsort = __commonJS({ "node_modules/semver/functions/rsort.js"(exports, module) { var compareBuild = require_compare_build(); var rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)); module.exports = rsort; } }); // node_modules/semver/functions/gt.js var require_gt = __commonJS({ "node_modules/semver/functions/gt.js"(exports, module) { var compare = require_compare(); var gt = (a, b, loose) => compare(a, b, loose) > 0; module.exports = gt; } }); // node_modules/semver/functions/eq.js var require_eq = __commonJS({ "node_modules/semver/functions/eq.js"(exports, module) { var compare = require_compare(); var eq = (a, b, loose) => compare(a, b, loose) === 0; module.exports = eq; } }); // node_modules/semver/functions/neq.js var require_neq = __commonJS({ "node_modules/semver/functions/neq.js"(exports, module) { var compare = require_compare(); var neq = (a, b, loose) => compare(a, b, loose) !== 0; module.exports = neq; } }); // node_modules/semver/functions/gte.js var require_gte = __commonJS({ "node_modules/semver/functions/gte.js"(exports, module) { var compare = require_compare(); var gte = (a, b, loose) => compare(a, b, loose) >= 0; module.exports = gte; } }); // node_modules/semver/functions/lte.js var require_lte = __commonJS({ "node_modules/semver/functions/lte.js"(exports, module) { var compare = require_compare(); var lte = (a, b, loose) => compare(a, b, loose) <= 0; module.exports = lte; } }); // node_modules/semver/functions/cmp.js var require_cmp = __commonJS({ "node_modules/semver/functions/cmp.js"(exports, module) { var eq = require_eq(); var neq = require_neq(); var gt = require_gt(); var gte = require_gte(); var lt = require_lt(); var lte = require_lte(); var cmp = (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(a, b, loose); case "!=": return neq(a, b, loose); case ">": return gt(a, b, loose); case ">=": return gte(a, b, loose); case "<": return lt(a, b, loose); case "<=": return lte(a, b, loose); default: throw new TypeError(`Invalid operator: ${op}`); } }; module.exports = cmp; } }); // node_modules/semver/functions/coerce.js var require_coerce = __commonJS({ "node_modules/semver/functions/coerce.js"(exports, module) { var SemVer = require_semver(); var parse = require_parse(); var { safeRe: re, t } = require_re(); var coerce = (version, options) => { if (version instanceof SemVer) { 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(re[t.COERCE]); } else { let next; while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) { if (!match || next.index + next[0].length !== match.index + match[0].length) { match = next; } re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length; } re[t.COERCERTL].lastIndex = -1; } if (match === null) { return null; } return parse(`${match[2]}.${match[3] || "0"}.${match[4] || "0"}`, options); }; module.exports = coerce; } }); // node_modules/yallist/iterator.js var require_iterator = __commonJS({ "node_modules/yallist/iterator.js"(exports, module) { "use strict"; module.exports = function(Yallist) { Yallist.prototype[Symbol.iterator] = function* () { for (let walker = this.head; walker; walker = walker.next) { yield walker.value; } }; }; } }); // node_modules/yallist/yallist.js var require_yallist = __commonJS({ "node_modules/yallist/yallist.js"(exports, module) { "use strict"; module.exports = Yallist; Yallist.Node = Node; Yallist.create = Yallist; function Yallist(list) { var self = this; if (!(self instanceof Yallist)) { self = new Yallist(); } self.tail = null; self.head = null; self.length = 0; if (list && typeof list.forEach === "function") { list.forEach(function(item) { self.push(item); }); } else if (arguments.length > 0) { for (var i = 0, l = arguments.length; i < l; i++) { self.push(arguments[i]); } } return self; } Yallist.prototype.removeNode = function(node) { if (node.list !== this) { throw new Error("removing node which does not belong to this list"); } var next = node.next; var prev = node.prev; if (next) { next.prev = prev; } if (prev) { prev.next = next; } if (node === this.head) { this.head = next; } if (node === this.tail) { this.tail = prev; } node.list.length--; node.next = null; node.prev = null; node.list = null; return next; }; Yallist.prototype.unshiftNode = function(node) { if (node === this.head) { return; } if (node.list) { node.list.removeNode(node); } var head = this.head; node.list = this; node.next = head; if (head) { head.prev = node; } this.head = node; if (!this.tail) { this.tail = node; } this.length++; }; Yallist.prototype.pushNode = function(node) { if (node === this.tail) { return; } if (node.list) { node.list.removeNode(node); } var tail = this.tail; node.list = this; node.prev = tail; if (tail) { tail.next = node; } this.tail = node; if (!this.head) { this.head = node; } this.length++; }; Yallist.prototype.push = function() { for (var i = 0, l = arguments.length; i < l; i++) { push(this, arguments[i]); } return this.length; }; Yallist.prototype.unshift = function() { for (var i = 0, l = arguments.length; i < l; i++) { unshift(this, arguments[i]); } return this.length; }; Yallist.prototype.pop = function() { if (!this.tail) { return void 0; } var res = this.tail.value; this.tail = this.tail.prev; if (this.tail) { this.tail.next = null; } else { this.head = null; } this.length--; return res; }; Yallist.prototype.shift = function() { if (!this.head) { return void 0; } var res = this.head.value; this.head = this.head.next; if (this.head) { this.head.prev = null; } else { this.tail = null; } this.length--; return res; }; Yallist.prototype.forEach = function(fn, thisp) { thisp = thisp || this; for (var walker = this.head, i = 0; walker !== null; i++) { fn.call(thisp, walker.value, i, this); walker = walker.next; } }; Yallist.prototype.forEachReverse = function(fn, thisp) { thisp = thisp || this; for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { fn.call(thisp, walker.value, i, this); walker = walker.prev; } }; Yallist.prototype.get = function(n) { for (var i = 0, walker = this.head; walker !== null && i < n; i++) { walker = walker.next; } if (i === n && walker !== null) { return walker.value; } }; Yallist.prototype.getReverse = function(n) { for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { walker = walker.prev; } if (i === n && walker !== null) { return walker.value; } }; Yallist.prototype.map = function(fn, thisp) { thisp = thisp || this; var res = new Yallist(); for (var walker = this.head; walker !== null; ) { res.push(fn.call(thisp, walker.value, this)); walker = walker.next; } return res; }; Yallist.prototype.mapReverse = function(fn, thisp) { thisp = thisp || this; var res = new Yallist(); for (var walker = this.tail; walker !== null; ) { res.push(fn.call(thisp, walker.value, this)); walker = walker.prev; } return res; }; Yallist.prototype.reduce = function(fn, initial) { var acc; var walker = this.head; if (arguments.length > 1) { acc = initial; } else if (this.head) { walker = this.head.next; acc = this.head.value; } else { throw new TypeError("Reduce of empty list with no initial value"); } for (var i = 0; walker !== null; i++) { acc = fn(acc, walker.value, i); walker = walker.next; } return acc; }; Yallist.prototype.reduceReverse = function(fn, initial) { var acc; var walker = this.tail; if (arguments.length > 1) { acc = initial; } else if (this.tail) { walker = this.tail.prev; acc = this.tail.value; } else { throw new TypeError("Reduce of empty list with no initial value"); } for (var i = this.length - 1; walker !== null; i--) { acc = fn(acc, walker.value, i); walker = walker.prev; } return acc; }; Yallist.prototype.toArray = function() { var arr = new Array(this.length); for (var i = 0, walker = this.head; walker !== null; i++) { arr[i] = walker.value; walker = walker.next; } return arr; }; Yallist.prototype.toArrayReverse = function() { var arr = new Array(this.length); for (var i = 0, walker = this.tail; walker !== null; i++) { arr[i] = walker.value; walker = walker.prev; } return arr; }; Yallist.prototype.slice = function(from, to) { to = to || this.length; if (to < 0) { to += this.length; } from = from || 0; if (from < 0) { from += this.length; } var ret = new Yallist(); if (to < from || to < 0) { return ret; } if (from < 0) { from = 0; } if (to > this.length) { to = this.length; } for (var i = 0, walker = this.head; walker !== null && i < from; i++) { walker = walker.next; } for (; walker !== null && i < to; i++, walker = walker.next) { ret.push(walker.value); } return ret; }; Yallist.prototype.sliceReverse = function(from, to) { to = to || this.length; if (to < 0) { to += this.length; } from = from || 0; if (from < 0) { from += this.length; } var ret = new Yallist(); if (to < from || to < 0) { return ret; } if (from < 0) { from = 0; } if (to > this.length) { to = this.length; } for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { walker = walker.prev; } for (; walker !== null && i > from; i--, walker = walker.prev) { ret.push(walker.value); } return ret; }; Yallist.prototype.splice = function(start, deleteCount, ...nodes) { if (start > this.length) { start = this.length - 1; } if (start < 0) { start = this.length + start; } for (var i = 0, walker = this.head; walker !== null && i < start; i++) { walker = walker.next; } var ret = []; for (var i = 0; walker && i < deleteCount; i++) { ret.push(walker.value); walker = this.removeNode(walker); } if (walker === null) { walker = this.tail; } if (walker !== this.head && walker !== this.tail) { walker = walker.prev; } for (var i = 0; i < nodes.length; i++) { walker = insert(this, walker, nodes[i]); } return ret; }; Yallist.prototype.reverse = function() { var head = this.head; var tail = this.tail; for (var walker = head; walker !== null; walker = walker.prev) { var p = walker.prev; walker.prev = walker.next; walker.next = p; } this.head = tail; this.tail = head; return this; }; function insert(self, node, value) { var inserted = node === self.head ? new Node(value, null, node, self) : new Node(value, node, node.next, self); if (inserted.next === null) { self.tail = inserted; } if (inserted.prev === null) { self.head = inserted; } self.length++; return inserted; } function push(self, item) { self.tail = new Node(item, self.tail, null, self); if (!self.head) { self.head = self.tail; } self.length++; } function unshift(self, item) { self.head = new Node(item, null, self.head, self); if (!self.tail) { self.tail = self.head; } self.length++; } function Node(value, prev, next, list) { if (!(this instanceof Node)) { return new Node(value, prev, next, list); } this.list = list; this.value = value; if (prev) { prev.next = this; this.prev = prev; } else { this.prev = null; } if (next) { next.prev = this; this.next = next; } else { this.next = null; } } try { require_iterator()(Yallist); } catch (er) { } } }); // node_modules/lru-cache/index.js var require_lru_cache = __commonJS({ "node_modules/lru-cache/index.js"(exports, module) { "use strict"; var Yallist = require_yallist(); var MAX = Symbol("max"); var LENGTH = Symbol("length"); var LENGTH_CALCULATOR = Symbol("lengthCalculator"); var ALLOW_STALE = Symbol("allowStale"); var MAX_AGE = Symbol("maxAge"); var DISPOSE = Symbol("dispose"); var NO_DISPOSE_ON_SET = Symbol("noDisposeOnSet"); var LRU_LIST = Symbol("lruList"); var CACHE = Symbol("cache"); var UPDATE_AGE_ON_GET = Symbol("updateAgeOnGet"); var naiveLength = () => 1; var LRUCache = class { constructor(options) { if (typeof options === "number") options = { max: options }; if (!options) options = {}; if (options.max && (typeof options.max !== "number" || options.max < 0)) throw new TypeError("max must be a non-negative number"); const max = this[MAX] = options.max || Infinity; const lc = options.length || naiveLength; this[LENGTH_CALCULATOR] = typeof lc !== "function" ? naiveLength : lc; this[ALLOW_STALE] = options.stale || false; if (options.maxAge && typeof options.maxAge !== "number") throw new TypeError("maxAge must be a number"); this[MAX_AGE] = options.maxAge || 0; this[DISPOSE] = options.dispose; this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false; this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false; this.reset(); } // resize the cache when the max changes. set max(mL) { if (typeof mL !== "number" || mL < 0) throw new TypeError("max must be a non-negative number"); this[MAX] = mL || Infinity; trim(this); } get max() { return this[MAX]; } set allowStale(allowStale) { this[ALLOW_STALE] = !!allowStale; } get allowStale() { return this[ALLOW_STALE]; } set maxAge(mA) { if (typeof mA !== "number") throw new TypeError("maxAge must be a non-negative number"); this[MAX_AGE] = mA; trim(this); } get maxAge() { return this[MAX_AGE]; } // resize the cache when the lengthCalculator changes. set lengthCalculator(lC) { if (typeof lC !== "function") lC = naiveLength; if (lC !== this[LENGTH_CALCULATOR]) { this[LENGTH_CALCULATOR] = lC; this[LENGTH] = 0; this[LRU_LIST].forEach((hit) => { hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key); this[LENGTH] += hit.length; }); } trim(this); } get lengthCalculator() { return this[LENGTH_CALCULATOR]; } get length() { return this[LENGTH]; } get itemCount() { return this[LRU_LIST].length; } rforEach(fn, thisp) { thisp = thisp || this; for (let walker = this[LRU_LIST].tail; walker !== null; ) { const prev = walker.prev; forEachStep(this, fn, walker, thisp); walker = prev; } } forEach(fn, thisp) { thisp = thisp || this; for (let walker = this[LRU_LIST].head; walker !== null; ) { const next = walker.next; forEachStep(this, fn, walker, thisp); walker = next; } } keys() { return this[LRU_LIST].toArray().map((k) => k.key); } values() { return this[LRU_LIST].toArray().map((k) => k.value); } reset() { if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) { this[LRU_LIST].forEach((hit) => this[DISPOSE](hit.key, hit.value)); } this[CACHE] = /* @__PURE__ */ new Map(); this[LRU_LIST] = new Yallist(); this[LENGTH] = 0; } dump() { return this[LRU_LIST].map((hit) => isStale(this, hit) ? false : { k: hit.key, v: hit.value, e: hit.now + (hit.maxAge || 0) }).toArray().filter((h) => h); } dumpLru() { return this[LRU_LIST]; } set(key, value, maxAge) { maxAge = maxAge || this[MAX_AGE]; if (maxAge && typeof maxAge !== "number") throw new TypeError("maxAge must be a number"); const now = maxAge ? Date.now() : 0; const len = this[LENGTH_CALCULATOR](value, key); if (this[CACHE].has(key)) { if (len > this[MAX]) { del(this, this[CACHE].get(key)); return false; } const node = this[CACHE].get(key); const item = node.value; if (this[DISPOSE]) { if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value); } item.now = now; item.maxAge = maxAge; item.value = value; this[LENGTH] += len - item.length; item.length = len; this.get(key); trim(this); return true; } const hit = new Entry(key, value, len, now, maxAge); if (hit.length > this[MAX]) { if (this[DISPOSE]) this[DISPOSE](key, value); return false; } this[LENGTH] += hit.length; this[LRU_LIST].unshift(hit); this[CACHE].set(key, this[LRU_LIST].head); trim(this); return true; } has(key) { if (!this[CACHE].has(key)) return false; const hit = this[CACHE].get(key).value; return !isStale(this, hit); } get(key) { return get(this, key, true); } peek(key) { return get(this, key, false); } pop() { const node = this[LRU_LIST].tail; if (!node) return null; del(this, node); return node.value; } del(key) { del(this, this[CACHE].get(key)); } load(arr) { this.reset(); const now = Date.now(); for (let l = arr.length - 1; l >= 0; l--) { const hit = arr[l]; const expiresAt = hit.e || 0; if (expiresAt === 0) this.set(hit.k, hit.v); else { const maxAge = expiresAt - now; if (maxAge > 0) { this.set(hit.k, hit.v, maxAge); } } } } prune() { this[CACHE].forEach((value, key) => get(this, key, false)); } }; var get = (self, key, doUse) => { const node = self[CACHE].get(key); if (node) { const hit = node.value; if (isStale(self, hit)) { del(self, node); if (!self[ALLOW_STALE]) return void 0; } else { if (doUse) { if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now(); self[LRU_LIST].unshiftNode(node); } } return hit.value; } }; var isStale = (self, hit) => { if (!hit || !hit.maxAge && !self[MAX_AGE]) return false; const diff = Date.now() - hit.now; return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && diff > self[MAX_AGE]; }; var trim = (self) => { if (self[LENGTH] > self[MAX]) { for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null; ) { const prev = walker.prev; del(self, walker); walker = prev; } } }; var del = (self, node) => { if (node) { const hit = node.value; if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value); self[LENGTH] -= hit.length; self[CACHE].delete(hit.key); self[LRU_LIST].removeNode(node); } }; var Entry = class { constructor(key, value, length, now, maxAge) { this.key = key; this.value = value; this.length = length; this.now = now; this.maxAge = maxAge || 0; } }; var forEachStep = (self, fn, node, thisp) => { let hit = node.value; if (isStale(self, hit)) { del(self, node); if (!self[ALLOW_STALE]) hit = void 0; } if (hit) fn.call(thisp, hit.value, hit.key, self); }; module.exports = LRUCache; } }); // node_modules/semver/classes/range.js var require_range = __commonJS({ "node_modules/semver/classes/range.js"(exports, module) { var Range = class _Range { constructor(range, options) { options = parseOptions(options); if (range instanceof _Range) { if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) { return range; } else { return new _Range(range.raw, options); } } if (range instanceof Comparator) { this.raw = range.value; this.set = [[range]]; this.format(); return this; } this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; this.raw = range.trim().split(/\s+/).join(" "); 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.format(); } format() { this.range = this.set.map((comps) => comps.join(" ").trim()).join("||").trim(); return this.range; } toString() { return this.range; } parseRange(range) { const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE); const memoKey = memoOpts + ":" + range; const cached = cache.get(memoKey); if (cached) { return cached; } const loose = this.options.loose; const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]; range = range.replace(hr, hyphenReplace(this.options.includePrerelease)); debug("hyphen replace", range); range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace); debug("comparator trim", range); range = range.replace(re[t.TILDETRIM], tildeTrimReplace); debug("tilde trim", range); range = range.replace(re[t.CARETTRIM], caretTrimReplace); debug("caret trim", range); let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)); if (loose) { rangeList = rangeList.filter((comp) => { debug("loose invalid filter", comp, this.options); return !!comp.match(re[t.COMPARATORLOOSE]); }); } debug("range list", rangeList); const rangeMap = /* @__PURE__ */ new Map(); const comparators = rangeList.map((comp) => new Comparator(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(range, options) { if (!(range instanceof _Range)) { throw new TypeError("a Range is required"); } return this.set.some((thisComparators) => { return isSatisfiable(thisComparators, options) && range.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 SemVer(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; } }; module.exports = Range; var LRU = require_lru_cache(); var cache = new LRU({ max: 1e3 }); var parseOptions = require_parse_options(); var Comparator = require_comparator(); var debug = require_debug(); var SemVer = require_semver(); var { safeRe: re, t, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = require_re(); var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants(); var isNullSet = (c) => c.value === "<0.0.0-0"; var isAny = (c) => c.value === ""; var 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; }; var parseComparator = (comp, options) => { debug("comp", comp, options); comp = replaceCarets(comp, options); debug("caret", comp); comp = replaceTildes(comp, options); debug("tildes", comp); comp = replaceXRanges(comp, options); debug("xrange", comp); comp = replaceStars(comp, options); debug("stars", comp); return comp; }; var isX = (id) => !id || id.toLowerCase() === "x" || id === "*"; var replaceTildes = (comp, options) => { return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" "); }; var replaceTilde = (comp, options) => { const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; return comp.replace(r, (_, M, m, p, pr) => { debug("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) { debug("replaceTilde pr", pr); ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; } else { ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; } debug("tilde return", ret); return ret; }); }; var replaceCarets = (comp, options) => { return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" "); }; var replaceCaret = (comp, options) => { debug("caret", comp, options); const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]; const z = options.includePrerelease ? "-0" : ""; return comp.replace(r, (_, M, m, p, pr) => { debug("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) { debug("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 { debug("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`; } } debug("caret return", ret); return ret; }); }; var replaceXRanges = (comp, options) => { debug("replaceXRanges", comp, options); return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" "); }; var replaceXRange = (comp, options) => { comp = comp.trim(); const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; return comp.replace(r, (ret, gtlt, M, m, p, pr) => { debug("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`; } debug("xRange return", ret); return ret; }); }; var replaceStars = (comp, options) => { debug("replaceStars", comp, options); return comp.trim().replace(re[t.STAR], ""); }; var replaceGTE0 = (comp, options) => { debug("replaceGTE0", comp, options); return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], ""); }; var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) => { 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(); }; var 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++) { debug(set[i].semver); if (set[i].semver === Comparator.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; }; } }); // node_modules/semver/classes/comparator.js var require_comparator = __commonJS({ "node_modules/semver/classes/comparator.js"(exports, module) { var ANY = Symbol("SemVer ANY"); var Comparator = class _Comparator { static get ANY() { return ANY; } constructor(comp, options) { options = parseOptions(options); if (comp instanceof _Comparator) { if (comp.loose === !!options.loose) { return comp; } else { comp = comp.value; } } comp = comp.trim().split(/\s+/).join(" "); debug("comparator", comp, options); this.options = options; this.loose = !!options.loose; this.parse(comp); if (this.semver === ANY) { this.value = ""; } else { this.value = this.operator + this.semver.version; } debug("comp", this); } parse(comp) { const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.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 = ANY; } else { this.semver = new SemVer(m[2], this.options.loose); } } toString() { return this.value; } test(version) { debug("Comparator.test", version, this.options.loose); if (this.semver === ANY || version === ANY) { return true; } if (typeof version === "string") { try { version = new SemVer(version, this.options); } catch (er) { return false; } } return cmp(version, this.operator, this.semver, this.options); } intersects(comp, options) { if (!(comp instanceof _Comparator)) { throw new TypeError("a Comparator is required"); } if (this.operator === "") { if (this.value === "") { return true; } return new Range(comp.value, options).test(this.value); } else if (comp.operator === "") { if (comp.value === "") { return true; } return new Range(this.value, options).test(comp.semver); } options = parseOptions(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 (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) { return true; } if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) { return true; } return false; } }; module.exports = Comparator; var parseOptions = require_parse_options(); var { safeRe: re, t } = require_re(); var cmp = require_cmp(); var debug = require_debug(); var SemVer = require_semver(); var Range = require_range(); } }); // node_modules/semver/functions/satisfies.js var require_satisfies = __commonJS({ "node_modules/semver/functions/satisfies.js"(exports, module) { var Range = require_range(); var satisfies2 = (version, range, options) => { try { range = new Range(range, options); } catch (er) { return false; } return range.test(version); }; module.exports = satisfies2; } }); // node_modules/semver/ranges/to-comparators.js var require_to_comparators = __commonJS({ "node_modules/semver/ranges/to-comparators.js"(exports, module) { var Range = require_range(); var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" ")); module.exports = toComparators; } }); // node_modules/semver/ranges/max-satisfying.js var require_max_satisfying = __commonJS({ "node_modules/semver/ranges/max-satisfying.js"(exports, module) { var SemVer = require_semver(); var Range = require_range(); var maxSatisfying = (versions, range, options) => { let max = null; let maxSV = null; let rangeObj = null; try { rangeObj = new Range(range, options); } catch (er) { return null; } versions.forEach((v) => { if (rangeObj.test(v)) { if (!max || maxSV.compare(v) === -1) { max = v; maxSV = new SemVer(max, options); } } }); return max; }; module.exports = maxSatisfying; } }); // node_modules/semver/ranges/min-satisfying.js var require_min_satisfying = __commonJS({ "node_modules/semver/ranges/min-satisfying.js"(exports, module) { var SemVer = require_semver(); var Range = require_range(); var minSatisfying = (versions, range, options) => { let min = null; let minSV = null; let rangeObj = null; try { rangeObj = new Range(range, options); } catch (er) { return null; } versions.forEach((v) => { if (rangeObj.test(v)) { if (!min || minSV.compare(v) === 1) { min = v; minSV = new SemVer(min, options); } } }); return min; }; module.exports = minSatisfying; } }); // node_modules/semver/ranges/min-version.js var require_min_version = __commonJS({ "node_modules/semver/ranges/min-version.js"(exports, module) { var SemVer = require_semver(); var Range = require_range(); var gt = require_gt(); var minVersion = (range, loose) => { range = new Range(range, loose); let minver = new SemVer("0.0.0"); if (range.test(minver)) { return minver; } minver = new SemVer("0.0.0-0"); if (range.test(minver)) { return minver; } minver = null; for (let i = 0; i < range.set.length; ++i) { const comparators = range.set[i]; let setMin = null; comparators.forEach((comparator) => { const compver = new SemVer(comparator.semver.version); switch (comparator.operator) { case ">": if (compver.prerelease.length === 0) { compver.patch++; } else { compver.prerelease.push(0); } compver.raw = compver.format(); case "": case ">=": if (!setMin || gt(compver, setMin)) { setMin = compver; } break; case "<": case "<=": break; default: throw new Error(`Unexpected operation: ${comparator.operator}`); } }); if (setMin && (!minver || gt(minver, setMin))) { minver = setMin; } } if (minver && range.test(minver)) { return minver; } return null; }; module.exports = minVersion; } }); // node_modules/semver/ranges/valid.js var require_valid2 = __commonJS({ "node_modules/semver/ranges/valid.js"(exports, module) { var Range = require_range(); var validRange2 = (range, options) => { try { return new Range(range, options).range || "*"; } catch (er) { return null; } }; module.exports = validRange2; } }); // node_modules/semver/ranges/outside.js var require_outside = __commonJS({ "node_modules/semver/ranges/outside.js"(exports, module) { var SemVer = require_semver(); var Comparator = require_comparator(); var { ANY } = Comparator; var Range = require_range(); var satisfies2 = require_satisfies(); var gt = require_gt(); var lt = require_lt(); var lte = require_lte(); var gte = require_gte(); var outside = (version, range, hilo, options) => { version = new SemVer(version, options); range = new Range(range, options); let gtfn, ltefn, ltfn, comp, ecomp; switch (hilo) { case ">": gtfn = gt; ltefn = lte; ltfn = lt; comp = ">"; ecomp = ">="; break; case "<": gtfn = lt; ltefn = gte; ltfn = gt; comp = "<"; ecomp = "<="; break; default: throw new TypeError('Must provide a hilo val of "<" or ">"'); } if (satisfies2(version, range, options)) { return false; } for (let i = 0; i < range.set.length; ++i) { const comparators = range.set[i]; let high = null; let low = null; comparators.forEach((comparator) => { if (comparator.semver === ANY) { comparator = new Comparator(">=0.0.0"); } high = high || comparator; low = low || comparator; if (gtfn(comparator.semver, high.semver, options)) { high = comparator; } else if (ltfn(comparator.semver, low.semver, options)) { low = comparator; } }); 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; }; module.exports = outside; } }); // node_modules/semver/ranges/gtr.js var require_gtr = __commonJS({ "node_modules/semver/ranges/gtr.js"(exports, module) { var outside = require_outside(); var gtr = (version, range, options) => outside(version, range, ">", options); module.exports = gtr; } }); // node_modules/semver/ranges/ltr.js var require_ltr = __commonJS({ "node_modules/semver/ranges/ltr.js"(exports, module) { var outside = require_outside(); var ltr = (version, range, options) => outside(version, range, "<", options); module.exports = ltr; } }); // node_modules/semver/ranges/intersects.js var require_intersects = __commonJS({ "node_modules/semver/ranges/intersects.js"(exports, module) { var Range = require_range(); var intersects = (r1, r2, options) => { r1 = new Range(r1, options); r2 = new Range(r2, options); return r1.intersects(r2, options); }; module.exports = intersects; } }); // node_modules/semver/ranges/simplify.js var require_simplify = __commonJS({ "node_modules/semver/ranges/simplify.js"(exports, module) { var satisfies2 = require_satisfies(); var compare = require_compare(); module.exports = (versions, range, options) => { const set = []; let first = null; let prev = null; const v = versions.sort((a, b) => compare(a, b, options)); for (const version of v) { const included = satisfies2(version, range, 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 range.raw === "string" ? range.raw : String(range); return simplified.length < original.length ? simplified : range; }; } }); // node_modules/semver/ranges/subset.js var require_subset = __commonJS({ "node_modules/semver/ranges/subset.js"(exports, module) { var Range = require_range(); var Comparator = require_comparator(); var { ANY } = Comparator; var satisfies2 = require_satisfies(); var compare = require_compare(); var subset = (sub, dom, options = {}) => { if (sub === dom) { return true; } sub = new Range(sub, options); dom = new Range(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; }; var minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")]; var minimumVersion = [new Comparator(">=0.0.0")]; var 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 gt, lt; for (const c of sub) { if (c.operator === ">" || c.operator === ">=") { gt = higherGT(gt, c, options); } else if (c.operator === "<" || c.operator === "<=") { lt = lowerLT(lt, c, options); } else { eqSet.add(c.semver); } } if (eqSet.size > 1) { return null; } let gtltComp; if (gt && lt) { gtltComp = compare(gt.semver, lt.semver, options); if (gtltComp > 0) { return null; } else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<=")) { return null; } } for (const eq of eqSet) { if (gt && !satisfies2(eq, String(gt), options)) { return null; } if (lt && !satisfies2(eq, String(lt), options)) { return null; } for (const c of dom) { if (!satisfies2(eq, String(c), options)) { return false; } } return true; } let higher, lower; let hasDomLT, hasDomGT; let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false; let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false; if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.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 (gt) { 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(gt, c, options); if (higher === c && higher !== gt) { return false; } } else if (gt.operator === ">=" && !satisfies2(gt.semver, String(c), options)) { return false; } } if (lt) { 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(lt, c, options); if (lower === c && lower !== lt) { return false; } } else if (lt.operator === "<=" && !satisfies2(lt.semver, String(c), options)) { return false; } } if (!c.operator && (lt || gt) && gtltComp !== 0) { return false; } } if (gt && hasDomLT && !lt && gtltComp !== 0) { return false; } if (lt && hasDomGT && !gt && gtltComp !== 0) { return false; } if (needDomGTPre || needDomLTPre) { return false; } return true; }; var higherGT = (a, b, options) => { if (!a) { return b; } const comp = compare(a.semver, b.semver, options); return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a; }; var lowerLT = (a, b, options) => { if (!a) { return b; } const comp = compare(a.semver, b.semver, options); return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a; }; module.exports = subset; } }); // node_modules/semver/index.js var require_semver2 = __commonJS({ "node_modules/semver/index.js"(exports, module) { var internalRe = require_re(); var constants = require_constants(); var SemVer = require_semver(); var identifiers = require_identifiers(); var parse = require_parse(); var valid = require_valid(); var clean = require_clean(); var inc = require_inc(); var diff = require_diff(); var major = require_major(); var minor = require_minor(); var patch = require_patch(); var prerelease = require_prerelease(); var compare = require_compare(); var rcompare = require_rcompare(); var compareLoose = require_compare_loose(); var compareBuild = require_compare_build(); var sort = require_sort(); var rsort = require_rsort(); var gt = require_gt(); var lt = require_lt(); var eq = require_eq(); var neq = require_neq(); var gte = require_gte(); var lte = require_lte(); var cmp = require_cmp(); var coerce = require_coerce(); var Comparator = require_comparator(); var Range = require_range(); var satisfies2 = require_satisfies(); var toComparators = require_to_comparators(); var maxSatisfying = require_max_satisfying(); var minSatisfying = require_min_satisfying(); var minVersion = require_min_version(); var validRange2 = require_valid2(); var outside = require_outside(); var gtr = require_gtr(); var ltr = require_ltr(); var intersects = require_intersects(); var simplifyRange = require_simplify(); var subset = require_subset(); module.exports = { 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: satisfies2, toComparators, maxSatisfying, minSatisfying, minVersion, validRange: validRange2, outside, gtr, ltr, intersects, simplifyRange, subset, SemVer, 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 }; } }); // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); var React3 = __toESM(require_react(), 1); // node_modules/@strapi/admin/dist/admin/admin/src/hooks/useDebounce.mjs var React = __toESM(require_react(), 1); function useDebounce(value, delay) { const [debouncedValue, setDebouncedValue] = React.useState(value); React.useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(value); }, delay); return () => { clearTimeout(handler); }; }, [ value, delay ]); return debouncedValue; } // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); var import_react = __toESM(require_react(), 1); var NpmPackagesFilters = ({ handleSelectClear, handleSelectChange, npmPackageType, possibleCategories, possibleCollections, query }) => { var _a, _b; const { formatMessage } = useIntl(); const handleTagRemove = (tagToRemove, filterType) => { const update = { [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove) }; handleSelectChange(update); }; return (0, import_jsx_runtime.jsxs)(Popover.Root, { children: [ (0, import_jsx_runtime.jsx)(Popover.Trigger, { children: (0, import_jsx_runtime.jsx)(Button, { variant: "tertiary", startIcon: (0, import_jsx_runtime.jsx)(ForwardRef$3j, {}), children: formatMessage({ id: "app.utils.filters", defaultMessage: "Filters" }) }) }), (0, import_jsx_runtime.jsx)(Popover.Content, { sideOffset: 4, children: (0, import_jsx_runtime.jsxs)(Flex, { padding: 3, direction: "column", alignItems: "stretch", gap: 1, children: [ (0, import_jsx_runtime.jsx)(FilterSelect, { message: formatMessage({ id: "admin.pages.MarketPlacePage.filters.collections", defaultMessage: "Collections" }), value: (query == null ? void 0 : query.collections) || [], onChange: (newCollections) => { const update = { collections: newCollections }; handleSelectChange(update); }, onClear: () => handleSelectClear("collections"), possibleFilters: possibleCollections, customizeContent: (values) => formatMessage({ id: "admin.pages.MarketPlacePage.filters.collectionsSelected", defaultMessage: "{count, plural, =0 {No collections} one {# collection} other {# collections}} selected" }, { count: (values == null ? void 0 : values.length) ?? 0 }) }), npmPackageType === "plugin" && (0, import_jsx_runtime.jsx)(FilterSelect, { message: formatMessage({ id: "admin.pages.MarketPlacePage.filters.categories", defaultMessage: "Categories" }), value: (query == null ? void 0 : query.categories) || [], onChange: (newCategories) => { const update = { categories: newCategories }; handleSelectChange(update); }, onClear: () => handleSelectClear("categories"), possibleFilters: possibleCategories, customizeContent: (values) => formatMessage({ id: "admin.pages.MarketPlacePage.filters.categoriesSelected", defaultMessage: "{count, plural, =0 {No categories} one {# category} other {# categories}} selected" }, { count: (values == null ? void 0 : values.length) ?? 0 }) }) ] }) }), (_a = query.collections) == null ? void 0 : _a.map((collection) => (0, import_jsx_runtime.jsx)(Box, { padding: 1, children: (0, import_jsx_runtime.jsx)(Tag, { icon: (0, import_jsx_runtime.jsx)(ForwardRef$45, {}), onClick: () => handleTagRemove(collection, "collections"), children: collection }) }, collection)), npmPackageType === "plugin" && ((_b = query.categories) == null ? void 0 : _b.map((category) => (0, import_jsx_runtime.jsx)(Box, { padding: 1, children: (0, import_jsx_runtime.jsx)(Tag, { icon: (0, import_jsx_runtime.jsx)(ForwardRef$45, {}), onClick: () => handleTagRemove(category, "categories"), children: category }) }, category))) ] }); }; var FilterSelect = ({ message, value, onChange, possibleFilters, onClear, customizeContent }) => { return (0, import_jsx_runtime.jsx)(MultiSelect, { "data-testid": `${message}-button`, "aria-label": message, placeholder: message, onChange, onClear, value, customizeContent, children: Object.entries(possibleFilters).map(([filterName, count]) => { return (0, import_jsx_runtime.jsx)(MultiSelectOption, { "data-testid": `${filterName}-${count}`, value: filterName, children: `${filterName} (${count})` }, filterName); }) }); }; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var import_pluralize = __toESM(require_pluralize(), 1); var semver = __toESM(require_semver2(), 1); var EllipsisText = dt(Typography)` display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; `; var NpmPackageCard = ({ npmPackage, isInstalled, useYarn, isInDevelopmentMode, npmPackageType, strapiAppVersion }) => { const { attributes } = npmPackage; const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const commandToCopy = useYarn ? `yarn add ${attributes.npmPackageName}` : `npm install ${attributes.npmPackageName}`; const madeByStrapiMessage = formatMessage({ id: "admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi", defaultMessage: "Made by Strapi" }); const npmPackageHref = `https://market.strapi.io/${import_pluralize.default.plural(npmPackageType)}/${attributes.slug}`; const versionRange = semver.validRange(attributes.strapiVersion); const isCompatible = versionRange ? semver.satisfies(strapiAppVersion ?? "", versionRange) : false; return (0, import_jsx_runtime2.jsxs)(Flex, { direction: "column", justifyContent: "space-between", paddingTop: 4, paddingRight: 4, paddingBottom: 4, paddingLeft: 4, hasRadius: true, background: "neutral0", shadow: "tableShadow", height: "100%", alignItems: "normal", "data-testid": "npm-package-card", children: [ (0, import_jsx_runtime2.jsxs)(Box, { children: [ (0, import_jsx_runtime2.jsxs)(Flex, { direction: "row", justifyContent: "space-between", alignItems: "flex-start", children: [ (0, import_jsx_runtime2.jsx)(Box, { tag: "img", src: attributes.logo.url, alt: `${attributes.name} logo`, hasRadius: true, width: 11, height: 11 }), (0, import_jsx_runtime2.jsx)(PackageStats, { githubStars: attributes.githubStars, npmDownloads: attributes.npmDownloads, npmPackageType }) ] }), (0, import_jsx_runtime2.jsx)(Box, { paddingTop: 4, children: (0, import_jsx_runtime2.jsx)(Typography, { tag: "h3", variant: "delta", children: (0, import_jsx_runtime2.jsxs)(Flex, { alignItems: "center", gap: attributes.validated && !attributes.madeByStrapi ? 2 : 1, children: [ attributes.name, attributes.validated && !attributes.madeByStrapi && (0, import_jsx_runtime2.jsx)(TooltipImpl, { description: formatMessage({ id: "admin.pages.MarketPlacePage.plugin.tooltip.verified", defaultMessage: "Plugin verified by Strapi" }), children: (0, import_jsx_runtime2.jsx)(ForwardRef$4D, { fill: "success600" }) }), attributes.madeByStrapi && (0, import_jsx_runtime2.jsx)(TooltipImpl, { description: madeByStrapiMessage, children: (0, import_jsx_runtime2.jsx)(Box, { tag: "img", src: img, alt: madeByStrapiMessage, width: 6, height: "auto" }) }) ] }) }) }), (0, import_jsx_runtime2.jsx)(Box, { paddingTop: 2, children: (0, import_jsx_runtime2.jsx)(EllipsisText, { tag: "p", variant: "omega", textColor: "neutral600", children: attributes.description }) }) ] }), (0, import_jsx_runtime2.jsxs)(Flex, { gap: 2, style: { alignSelf: "flex-end" }, paddingTop: 6, children: [ (0, import_jsx_runtime2.jsx)(LinkButton, { size: "S", href: npmPackageHref, isExternal: true, endIcon: (0, import_jsx_runtime2.jsx)(ForwardRef$3F, {}), "aria-label": formatMessage({ id: "admin.pages.MarketPlacePage.plugin.info.label", defaultMessage: "Learn more about {pluginName}" }, { pluginName: attributes.name }), variant: "tertiary", onClick: () => trackUsage("didPluginLearnMore"), children: formatMessage({ id: "admin.pages.MarketPlacePage.plugin.info.text", defaultMessage: "More" }) }), (0, import_jsx_runtime2.jsx)(InstallPluginButton, { isInstalled, isInDevelopmentMode, isCompatible, commandToCopy, strapiAppVersion, strapiPeerDepVersion: attributes.strapiVersion, pluginName: attributes.name }) ] }) ] }); }; var InstallPluginButton = ({ isInstalled, isInDevelopmentMode, isCompatible, commandToCopy, strapiAppVersion, strapiPeerDepVersion, pluginName }) => { const { toggleNotification } = useNotification(); const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const { copy } = useClipboard(); const handleCopy = async () => { const didCopy = await copy(commandToCopy); if (didCopy) { trackUsage("willInstallPlugin"); toggleNotification({ type: "success", message: formatMessage({ id: "admin.pages.MarketPlacePage.plugin.copy.success" }) }); } }; if (isInstalled) { return (0, import_jsx_runtime2.jsxs)(Flex, { gap: 2, paddingLeft: 4, children: [ (0, import_jsx_runtime2.jsx)(ForwardRef$4F, { width: "1.2rem", height: "1.2rem", color: "success600" }), (0, import_jsx_runtime2.jsx)(Typography, { variant: "omega", textColor: "success600", fontWeight: "bold", children: formatMessage({ id: "admin.pages.MarketPlacePage.plugin.installed", defaultMessage: "Installed" }) }) ] }); } if (isInDevelopmentMode && isCompatible !== false) { return (0, import_jsx_runtime2.jsx)(CardButton, { strapiAppVersion, strapiPeerDepVersion, handleCopy, pluginName }); } return null; }; var CardButton = ({ strapiPeerDepVersion, strapiAppVersion, handleCopy, pluginName }) => { const { formatMessage } = useIntl(); const versionRange = semver.validRange(strapiPeerDepVersion); const isCompatible = semver.satisfies(strapiAppVersion ?? "", versionRange ?? ""); const installMessage = formatMessage({ id: "admin.pages.MarketPlacePage.plugin.copy", defaultMessage: "Copy install command" }); if (strapiAppVersion) { if (!versionRange || !isCompatible) { return (0, import_jsx_runtime2.jsx)(TooltipImpl, { "data-testid": `tooltip-${pluginName}`, label: formatMessage({ id: "admin.pages.MarketPlacePage.plugin.version", defaultMessage: 'Update your Strapi version: "{strapiAppVersion}" to: "{versionRange}"' }, { strapiAppVersion, versionRange }), children: (0, import_jsx_runtime2.jsx)("span", { children: (0, import_jsx_runtime2.jsx)(Button, { size: "S", startIcon: (0, import_jsx_runtime2.jsx)(ForwardRef$3R, {}), variant: "secondary", onClick: handleCopy, disabled: !isCompatible, children: installMessage }) }) }); } } return (0, import_jsx_runtime2.jsx)(Button, { size: "S", startIcon: (0, import_jsx_runtime2.jsx)(ForwardRef$3R, {}), variant: "secondary", onClick: handleCopy, children: installMessage }); }; var PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }) => { const { formatMessage } = useIntl(); return (0, import_jsx_runtime2.jsxs)(Flex, { gap: 1, children: [ !!githubStars && (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [ (0, import_jsx_runtime2.jsx)(ForwardRef$x, { height: "1.2rem", width: "1.2rem", "aria-hidden": true }), (0, import_jsx_runtime2.jsx)(ForwardRef$D, { height: "1.2rem", width: "1.2rem", fill: "warning500", "aria-hidden": true }), (0, import_jsx_runtime2.jsx)("p", { "aria-label": formatMessage({ id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`, defaultMessage: `This {package} was starred {starsCount} on GitHub` }, { starsCount: githubStars, package: npmPackageType }), children: (0, import_jsx_runtime2.jsx)(Typography, { variant: "pi", textColor: "neutral800", children: githubStars }) }), (0, import_jsx_runtime2.jsx)(VerticalDivider, {}) ] }), (0, import_jsx_runtime2.jsx)(ForwardRef$3V, { height: "1.2rem", width: "1.2rem", "aria-hidden": true }), (0, import_jsx_runtime2.jsx)("p", { "aria-label": formatMessage({ id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`, defaultMessage: `This {package} has {downloadsCount} weekly downloads` }, { downloadsCount: npmDownloads, package: npmPackageType }), children: (0, import_jsx_runtime2.jsx)(Typography, { variant: "pi", textColor: "neutral800", children: npmDownloads }) }) ] }); }; var VerticalDivider = dt(Divider)` width: 1.2rem; transform: rotate(90deg); `; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesGrid.mjs var NpmPackagesGrid = ({ status, npmPackages = [], installedPackageNames = [], useYarn, isInDevelopmentMode, npmPackageType, strapiAppVersion, debouncedSearch }) => { const { formatMessage } = useIntl(); if (status === "error") { return (0, import_jsx_runtime3.jsx)(Page.Error, {}); } if (status === "loading") { return (0, import_jsx_runtime3.jsx)(Page.Loading, {}); } const emptySearchMessage = formatMessage({ id: "admin.pages.MarketPlacePage.search.empty", defaultMessage: 'No result for "{target}"' }, { target: debouncedSearch }); if (npmPackages.length === 0) { return (0, import_jsx_runtime3.jsxs)(Box, { position: "relative", children: [ (0, import_jsx_runtime3.jsx)(Layouts.Grid, { size: "M", children: Array(12).fill(null).map((_, idx) => (0, import_jsx_runtime3.jsx)(EmptyPluginCard, { height: "234px", hasRadius: true }, idx)) }), (0, import_jsx_runtime3.jsx)(Box, { position: "absolute", top: 11, width: "100%", children: (0, import_jsx_runtime3.jsxs)(Flex, { alignItems: "center", justifyContent: "center", direction: "column", children: [ (0, import_jsx_runtime3.jsx)(ForwardRef$J, { width: "160px", height: "88px" }), (0, import_jsx_runtime3.jsx)(Box, { paddingTop: 6, children: (0, import_jsx_runtime3.jsx)(Typography, { variant: "delta", tag: "p", textColor: "neutral600", children: emptySearchMessage }) }) ] }) }) ] }); } return (0, import_jsx_runtime3.jsx)(Grid.Root, { gap: 4, children: npmPackages.map((npmPackage) => (0, import_jsx_runtime3.jsx)(Grid.Item, { col: 4, s: 6, xs: 12, style: { height: "100%" }, direction: "column", alignItems: "stretch", children: (0, import_jsx_runtime3.jsx)(NpmPackageCard, { npmPackage, isInstalled: installedPackageNames.includes(npmPackage.attributes.npmPackageName), useYarn, isInDevelopmentMode, npmPackageType, strapiAppVersion }) }, npmPackage.id)) }); }; var EmptyPluginCard = dt(Box)` background: ${({ theme }) => `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`}; opacity: 0.33; `; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); var PageHeader = ({ isOnline, npmPackageType = "plugin" }) => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const tracking = npmPackageType === "provider" ? "didSubmitProvider" : "didSubmitPlugin"; return (0, import_jsx_runtime4.jsx)(Layouts.Header, { title: formatMessage({ id: "global.marketplace", defaultMessage: "Marketplace" }), subtitle: formatMessage({ id: "admin.pages.MarketPlacePage.subtitle", defaultMessage: "Get more out of Strapi" }), primaryAction: isOnline && (0, import_jsx_runtime4.jsx)(LinkButton, { startIcon: (0, import_jsx_runtime4.jsx)(ForwardRef$d, {}), variant: "tertiary", href: `https://market.strapi.io/submit-${npmPackageType}`, onClick: () => trackUsage(tracking), isExternal: true, children: formatMessage({ id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`, defaultMessage: `Submit ${npmPackageType}` }) }) }); }; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/OfflineLayout.mjs var OfflineLayout = () => { const { formatMessage } = useIntl(); return (0, import_jsx_runtime5.jsx)(Layouts.Root, { children: (0, import_jsx_runtime5.jsxs)(Main, { children: [ (0, import_jsx_runtime5.jsx)(PageHeader, {}), (0, import_jsx_runtime5.jsxs)(Flex, { width: "100%", direction: "column", alignItems: "center", justifyContent: "center", paddingTop: `12rem`, children: [ (0, import_jsx_runtime5.jsx)(Box, { paddingBottom: 2, children: (0, import_jsx_runtime5.jsx)(Typography, { textColor: "neutral700", variant: "alpha", children: formatMessage({ id: "admin.pages.MarketPlacePage.offline.title", defaultMessage: "You are offline" }) }) }), (0, import_jsx_runtime5.jsx)(Box, { paddingBottom: 6, children: (0, import_jsx_runtime5.jsx)(Typography, { textColor: "neutral700", variant: "epsilon", children: formatMessage({ id: "admin.pages.MarketPlacePage.offline.subtitle", defaultMessage: "You need to be connected to the Internet to access Strapi Market." }) }) }), (0, import_jsx_runtime5.jsxs)("svg", { width: "88", height: "88", viewBox: "0 0 88 88", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [ (0, import_jsx_runtime5.jsx)("rect", { x: ".5", y: ".5", width: "87", height: "87", rx: "43.5", fill: "#F0F0FF" }), (0, import_jsx_runtime5.jsx)("path", { d: "M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z", fill: "#4945FF" }), (0, import_jsx_runtime5.jsx)("rect", { x: ".5", y: ".5", width: "87", height: "87", rx: "43.5", stroke: "#D9D8FF" }) ] }) ] }) ] }) }); }; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/components/SortSelect.mjs var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); var SORT_TYPES = { "name:asc": { selected: { id: "admin.pages.MarketPlacePage.sort.alphabetical.selected", defaultMessage: "Sort by alphabetical order" }, option: { id: "admin.pages.MarketPlacePage.sort.alphabetical", defaultMessage: "Alphabetical order" } }, "submissionDate:desc": { selected: { id: "admin.pages.MarketPlacePage.sort.newest.selected", defaultMessage: "Sort by newest" }, option: { id: "admin.pages.MarketPlacePage.sort.newest", defaultMessage: "Newest" } }, "githubStars:desc": { selected: { id: "admin.pages.MarketPlacePage.sort.githubStars.selected", defaultMessage: "Sort by GitHub stars" }, option: { id: "admin.pages.MarketPlacePage.sort.githubStars", defaultMessage: "Number of GitHub stars" } }, "npmDownloads:desc": { selected: { id: "admin.pages.MarketPlacePage.sort.npmDownloads.selected", defaultMessage: "Sort by npm downloads" }, option: { id: "admin.pages.MarketPlacePage.sort.npmDownloads", defaultMessage: "Number of downloads" } } }; var SortSelect = ({ sortQuery, handleSelectChange }) => { const { formatMessage } = useIntl(); return (0, import_jsx_runtime6.jsx)(SelectWrapper, { children: (0, import_jsx_runtime6.jsx)(SingleSelect, { value: sortQuery, customizeContent: () => formatMessage(SORT_TYPES[sortQuery].selected), onChange: (sortName) => { handleSelectChange({ sort: sortName }); }, "aria-label": formatMessage({ id: "admin.pages.MarketPlacePage.sort.label", defaultMessage: "Sort by" }), size: "S", children: Object.entries(SORT_TYPES).map(([sortName, messages]) => { return (0, import_jsx_runtime6.jsx)(SingleSelectOption, { value: sortName, children: formatMessage(messages.option) }, sortName); }) }) }); }; var SelectWrapper = dt(Box)` font-weight: ${({ theme }) => theme.fontWeights.semiBold}; span { font-size: ${({ theme }) => theme.fontSizes[1]}; } `; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs var qs = __toESM(require_lib(), 1); var MARKETPLACE_API_URL = "https://market-api.strapi.io"; function useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion }) { const { notifyStatus } = useNotifyAT(); const { formatMessage } = useIntl(); const { toggleNotification } = useNotification(); const marketplaceTitle = formatMessage({ id: "global.marketplace", defaultMessage: "Marketplace" }); const notifyMarketplaceLoad = () => { notifyStatus(formatMessage({ id: "app.utils.notify.data-loaded", defaultMessage: "The {target} has loaded" }, { target: marketplaceTitle })); }; const paginationParams = { page: (query == null ? void 0 : query.page) || 1, pageSize: (query == null ? void 0 : query.pageSize) || 24 }; const pluginParams = { ...tabQuery.plugin, pagination: paginationParams, search: debouncedSearch, version: strapiVersion }; const { data: pluginsResponse, status: pluginsStatus } = useQuery([ "marketplace", "plugins", pluginParams ], async () => { try { const queryString = qs.stringify(pluginParams); const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`); if (!res.ok) { throw new Error("Failed to fetch marketplace plugins."); } const data = await res.json(); return data; } catch (error) { } return null; }, { onSuccess() { notifyMarketplaceLoad(); }, onError() { toggleNotification({ type: "danger", message: formatMessage({ id: "notification.error", defaultMessage: "An error occured" }) }); } }); const providerParams = { ...tabQuery.provider, pagination: paginationParams, search: debouncedSearch, version: strapiVersion }; const { data: providersResponse, status: providersStatus } = useQuery([ "marketplace", "providers", providerParams ], async () => { const queryString = qs.stringify(providerParams); const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`); if (!res.ok) { throw new Error("Failed to fetch marketplace providers."); } const data = await res.json(); return data; }, { onSuccess() { notifyMarketplaceLoad(); }, onError() { toggleNotification({ type: "danger", message: formatMessage({ id: "notification.error", defaultMessage: "An error occured" }) }); } }); const npmPackageTypeResponse = npmPackageType === "plugin" ? pluginsResponse : providersResponse; const possibleCollections = (npmPackageTypeResponse == null ? void 0 : npmPackageTypeResponse.meta.collections) ?? {}; const possibleCategories = (pluginsResponse == null ? void 0 : pluginsResponse.meta.categories) ?? {}; const { pagination } = (npmPackageTypeResponse == null ? void 0 : npmPackageTypeResponse.meta) ?? {}; return { pluginsResponse, providersResponse, pluginsStatus, providersStatus, possibleCollections, possibleCategories, pagination }; } // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/hooks/useNavigatorOnline.mjs var React2 = __toESM(require_react(), 1); var useNavigatorOnline = () => { const onlineStatus = typeof navigator !== "undefined" && typeof navigator.onLine === "boolean" ? navigator.onLine : true; const [isOnline, setIsOnline] = React2.useState(onlineStatus); const setOnline = () => setIsOnline(true); const setOffline = () => setIsOnline(false); React2.useEffect(() => { window.addEventListener("online", setOnline); window.addEventListener("offline", setOffline); return () => { window.removeEventListener("online", setOnline); window.removeEventListener("offline", setOffline); }; }, []); return isOnline; }; // node_modules/@strapi/admin/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs var PLUGIN = "plugin"; var PROVIDER = "provider"; var MarketplacePage = () => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const { toggleNotification } = useNotification(); const [{ query }, setQuery] = useQueryParams(); const debouncedSearch = useDebounce(query == null ? void 0 : query.search, 500) || ""; const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = useAppInfo("MarketplacePage", (state) => state); const isOnline = useNavigatorOnline(); const npmPackageType = (query == null ? void 0 : query.npmPackageType) || PLUGIN; const [tabQuery, setTabQuery] = React3.useState({ plugin: npmPackageType === PLUGIN ? { ...query } : {}, provider: npmPackageType === PROVIDER ? { ...query } : {} }); React3.useEffect(() => { trackUsage("didGoToMarketplace"); }, [ trackUsage ]); React3.useEffect(() => { if (!isInDevelopmentMode) { toggleNotification({ type: "info", message: formatMessage({ id: "admin.pages.MarketPlacePage.production", defaultMessage: "Manage plugins from the development environment" }) }); } }, [ toggleNotification, isInDevelopmentMode, formatMessage ]); const { pluginsResponse, providersResponse, pluginsStatus, providersStatus, possibleCollections, possibleCategories, pagination } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery, strapiVersion }); if (!isOnline) { return (0, import_jsx_runtime7.jsx)(OfflineLayout, {}); } const handleTabChange = (tab) => { const selectedTab = tab === PLUGIN || tab === PROVIDER ? tab : PLUGIN; const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length; if (hasTabQuery) { setQuery({ // Keep filters and search ...tabQuery[selectedTab], search: (query == null ? void 0 : query.search) || "", // Set tab and reset page npmPackageType: selectedTab, page: 1 }); } else { setQuery({ // Set tab npmPackageType: selectedTab, // Clear filters collections: [], categories: [], sort: "name:asc", page: 1, // Keep search search: (query == null ? void 0 : query.search) || "" }); } }; const handleSelectChange = (update) => { setQuery({ ...update, page: 1 }); setTabQuery((prev) => ({ ...prev, [npmPackageType]: { ...prev[npmPackageType], ...update } })); }; const handleSelectClear = (filterType) => { setQuery({ [filterType]: [], page: void 0 }, "remove"); setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} })); }; const handleSortSelectChange = ({ sort }) => ( // @ts-expect-error - this is a narrowing issue. handleSelectChange({ sort }) ); const installedPackageNames = Object.keys(dependencies ?? {}); return (0, import_jsx_runtime7.jsx)(Layouts.Root, { children: (0, import_jsx_runtime7.jsxs)(Page.Main, { children: [ (0, import_jsx_runtime7.jsx)(Page.Title, { children: formatMessage({ id: "admin.pages.MarketPlacePage.head", defaultMessage: "Marketplace - Plugins" }) }), (0, import_jsx_runtime7.jsx)(PageHeader, { isOnline, npmPackageType }), (0, import_jsx_runtime7.jsx)(Layouts.Content, { children: (0, import_jsx_runtime7.jsxs)(Tabs.Root, { variant: "simple", onValueChange: handleTabChange, value: npmPackageType, children: [ (0, import_jsx_runtime7.jsxs)(Flex, { justifyContent: "space-between", paddingBottom: 4, children: [ (0, import_jsx_runtime7.jsxs)(Tabs.List, { "aria-label": formatMessage({ id: "admin.pages.MarketPlacePage.tab-group.label", defaultMessage: "Plugins and Providers for Strapi" }), children: [ (0, import_jsx_runtime7.jsxs)(Tabs.Trigger, { value: PLUGIN, children: [ formatMessage({ id: "admin.pages.MarketPlacePage.plugins", defaultMessage: "Plugins" }), " ", pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : "..." ] }), (0, import_jsx_runtime7.jsxs)(Tabs.Trigger, { value: PROVIDER, children: [ formatMessage({ id: "admin.pages.MarketPlacePage.providers", defaultMessage: "Providers" }), " ", providersResponse ? `(${providersResponse.meta.pagination.total})` : "..." ] }) ] }), (0, import_jsx_runtime7.jsx)(Box, { width: "25%", children: (0, import_jsx_runtime7.jsx)(Searchbar, { name: "searchbar", onClear: () => setQuery({ search: "", page: 1 }), value: query == null ? void 0 : query.search, onChange: (e) => setQuery({ search: e.target.value, page: 1 }), clearLabel: formatMessage({ id: "admin.pages.MarketPlacePage.search.clear", defaultMessage: "Clear the search" }), placeholder: formatMessage({ id: "admin.pages.MarketPlacePage.search.placeholder", defaultMessage: "Search" }), children: formatMessage({ id: "admin.pages.MarketPlacePage.search.placeholder", defaultMessage: "Search" }) }) }) ] }), (0, import_jsx_runtime7.jsxs)(Flex, { paddingBottom: 4, gap: 2, children: [ (0, import_jsx_runtime7.jsx)(SortSelect, { sortQuery: (query == null ? void 0 : query.sort) || "name:asc", handleSelectChange: handleSortSelectChange }), (0, import_jsx_runtime7.jsx)(NpmPackagesFilters, { npmPackageType, possibleCollections, possibleCategories, query: query || {}, handleSelectChange, handleSelectClear }) ] }), (0, import_jsx_runtime7.jsx)(Tabs.Content, { value: PLUGIN, children: (0, import_jsx_runtime7.jsx)(NpmPackagesGrid, { npmPackages: pluginsResponse == null ? void 0 : pluginsResponse.data, status: pluginsStatus, installedPackageNames, useYarn, isInDevelopmentMode, npmPackageType: "plugin", strapiAppVersion: strapiVersion, debouncedSearch }) }), (0, import_jsx_runtime7.jsx)(Tabs.Content, { value: PROVIDER, children: (0, import_jsx_runtime7.jsx)(NpmPackagesGrid, { npmPackages: providersResponse == null ? void 0 : providersResponse.data, status: providersStatus, installedPackageNames, useYarn, isInDevelopmentMode, npmPackageType: "provider", debouncedSearch }) }), (0, import_jsx_runtime7.jsxs)(Pagination.Root, { ...pagination, defaultPageSize: 24, children: [ (0, import_jsx_runtime7.jsx)(Pagination.PageSize, { options: [ "12", "24", "50", "100" ] }), (0, import_jsx_runtime7.jsx)(Pagination.Links, {}) ] }), (0, import_jsx_runtime7.jsx)(Box, { paddingTop: 8, children: (0, import_jsx_runtime7.jsx)("a", { href: "https://strapi.canny.io/plugin-requests", target: "_blank", rel: "noopener noreferrer nofollow", style: { textDecoration: "none" }, onClick: () => trackUsage("didMissMarketplacePlugin"), children: (0, import_jsx_runtime7.jsx)(ContentBox, { title: formatMessage({ id: "admin.pages.MarketPlacePage.missingPlugin.title", defaultMessage: "Documentation" }), subtitle: formatMessage({ id: "admin.pages.MarketPlacePage.missingPlugin.description", defaultMessage: "Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!" }), icon: (0, import_jsx_runtime7.jsx)(ForwardRef$v, {}), iconBackground: "alternative100", endAction: (0, import_jsx_runtime7.jsx)(ForwardRef$3F, { fill: "neutral600", width: "1.2rem", height: "1.2rem", style: { marginLeft: "0.8rem" } }) }) }) }) ] }) }) ] }) }); }; var ProtectedMarketplacePage = () => { const permissions = useTypedSelector((state) => { var _a; return (_a = state.admin_app.permissions.marketplace) == null ? void 0 : _a.main; }); return (0, import_jsx_runtime7.jsx)(Page.Protect, { permissions, children: (0, import_jsx_runtime7.jsx)(MarketplacePage, {}) }); }; export { MarketplacePage, ProtectedMarketplacePage }; //# sourceMappingURL=MarketplacePage-PFTPY4TP.js.map