@lionad/safe-npx 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -35
- package/dist/index.js +1899 -0
- package/package.json +14 -4
- package/snpx.js +0 -427
package/dist/index.js
ADDED
|
@@ -0,0 +1,1899 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from "child_process";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "fs";
|
|
4
|
+
import { dirname, join } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
import { homedir } from "os";
|
|
7
|
+
//#region \0rolldown/runtime.js
|
|
8
|
+
var __create = Object.create;
|
|
9
|
+
var __defProp = Object.defineProperty;
|
|
10
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
12
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
15
|
+
var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
16
|
+
var __exportAll = (all, no_symbols) => {
|
|
17
|
+
let target = {};
|
|
18
|
+
for (var name in all) __defProp(target, name, {
|
|
19
|
+
get: all[name],
|
|
20
|
+
enumerable: true
|
|
21
|
+
});
|
|
22
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
23
|
+
return target;
|
|
24
|
+
};
|
|
25
|
+
var __copyProps = (to, from, except, desc) => {
|
|
26
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
27
|
+
key = keys[i];
|
|
28
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
29
|
+
get: ((k) => from[k]).bind(null, key),
|
|
30
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return to;
|
|
34
|
+
};
|
|
35
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
36
|
+
value: mod,
|
|
37
|
+
enumerable: true
|
|
38
|
+
}) : target, mod));
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/constants.ts
|
|
41
|
+
var constants_exports = /* @__PURE__ */ __exportAll({
|
|
42
|
+
CACHE_DIR: () => CACHE_DIR,
|
|
43
|
+
DEFAULT_FALLBACK_STRATEGY: () => DEFAULT_FALLBACK_STRATEGY,
|
|
44
|
+
DEFAULT_TIME_HOURS: () => 24,
|
|
45
|
+
HELP_TEXT: () => HELP_TEXT,
|
|
46
|
+
MS_PER_HOUR: () => MS_PER_HOUR,
|
|
47
|
+
NPX_PREFIX_FLAGS: () => NPX_PREFIX_FLAGS,
|
|
48
|
+
NPX_PREFIX_FLAGS_WITH_VALUE: () => NPX_PREFIX_FLAGS_WITH_VALUE,
|
|
49
|
+
PKG_NAME: () => PKG_NAME,
|
|
50
|
+
REGISTRY: () => REGISTRY,
|
|
51
|
+
VERSION: () => VERSION,
|
|
52
|
+
colors: () => colors,
|
|
53
|
+
isTty: () => isTty
|
|
54
|
+
});
|
|
55
|
+
var __dirname, VERSION, CACHE_DIR, REGISTRY, PKG_NAME, DEFAULT_TIME_HOURS, DEFAULT_FALLBACK_STRATEGY, MS_PER_HOUR, isTty, colors, HELP_TEXT, NPX_PREFIX_FLAGS, NPX_PREFIX_FLAGS_WITH_VALUE;
|
|
56
|
+
var init_constants = __esmMin((() => {
|
|
57
|
+
__dirname = dirname(fileURLToPath(import.meta.url));
|
|
58
|
+
try {
|
|
59
|
+
VERSION = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf8")).version;
|
|
60
|
+
} catch {
|
|
61
|
+
VERSION = "0.2.3";
|
|
62
|
+
}
|
|
63
|
+
CACHE_DIR = join(homedir(), ".cache", "snpx");
|
|
64
|
+
REGISTRY = "https://registry.npmjs.org";
|
|
65
|
+
PKG_NAME = "@lionad/safe-npx";
|
|
66
|
+
DEFAULT_TIME_HOURS = 24;
|
|
67
|
+
DEFAULT_FALLBACK_STRATEGY = "patch,minor,major";
|
|
68
|
+
MS_PER_HOUR = 3600 * 1e3;
|
|
69
|
+
isTty = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
70
|
+
colors = {
|
|
71
|
+
bold: (s) => isTty ? `\x1b[1m${s}\x1b[22m` : s,
|
|
72
|
+
dim: (s) => isTty ? `\x1b[2m${s}\x1b[22m` : s,
|
|
73
|
+
green: (s) => isTty ? `\x1b[32m${s}\x1b[39m` : s,
|
|
74
|
+
cyan: (s) => isTty ? `\x1b[36m${s}\x1b[39m` : s,
|
|
75
|
+
yellow: (s) => isTty ? `\x1b[33m${s}\x1b[39m` : s
|
|
76
|
+
};
|
|
77
|
+
HELP_TEXT = `
|
|
78
|
+
${colors.bold(colors.cyan("safe-npx (snpx)"))} — Safe npx wrapper with configurable fallback strategy
|
|
79
|
+
|
|
80
|
+
${colors.bold("Usage:")}
|
|
81
|
+
${colors.green("snpx")} [options] <package>@latest [args...]
|
|
82
|
+
${colors.green("snpx")} [options] <package> [args...]
|
|
83
|
+
${colors.green("snpx")} [options] <command>
|
|
84
|
+
|
|
85
|
+
${colors.bold("Options:")}
|
|
86
|
+
${colors.yellow("-h, --help")} Show this help message
|
|
87
|
+
${colors.yellow("--time")} ${colors.dim("<hours>")} Safety window in hours (default: 24)
|
|
88
|
+
${colors.yellow("--fallback-strategy")} ${colors.dim("<str>")} Comma-separated fallback order.
|
|
89
|
+
Default: patch,minor,major
|
|
90
|
+
Left-to-right: first matching safe version wins.
|
|
91
|
+
${colors.dim("patch")} = version immediately before latest
|
|
92
|
+
${colors.dim("minor")} = most recently published version of previous minor line
|
|
93
|
+
${colors.dim("major")} = most recently published version of previous major line
|
|
94
|
+
${colors.yellow("--show-version")} Print resolved version and exit (no execution)
|
|
95
|
+
${colors.yellow("--version")} Print snpx version and exit
|
|
96
|
+
${colors.yellow("--self-update")} Check for snpx updates (safe mode, default 24h)
|
|
97
|
+
${colors.yellow("--unsafe-self-update")} Allow immediate snpx updates without safety window
|
|
98
|
+
|
|
99
|
+
${colors.bold("Environment Variables:")}
|
|
100
|
+
${colors.green("SNPX_TIME")} Default for --time
|
|
101
|
+
${colors.green("SNPX_FALLBACK_STRATEGY")} Default for --fallback-strategy
|
|
102
|
+
|
|
103
|
+
${colors.bold("Examples:")}
|
|
104
|
+
${colors.green("snpx")} -y cowsay@latest "Hello World"
|
|
105
|
+
${colors.green("snpx")} --time 48 --fallback-strategy patch,minor cowsay@latest
|
|
106
|
+
${colors.green("snpx")} --show-version cowsay@latest
|
|
107
|
+
${colors.green("snpx")} cowsay@latest --version ${colors.dim("# passes --version to cowsay")}
|
|
108
|
+
`.trim();
|
|
109
|
+
NPX_PREFIX_FLAGS = new Set([
|
|
110
|
+
"-y",
|
|
111
|
+
"--yes",
|
|
112
|
+
"--no",
|
|
113
|
+
"--no-save",
|
|
114
|
+
"--legacy-peer-deps",
|
|
115
|
+
"--force",
|
|
116
|
+
"--call",
|
|
117
|
+
"-c",
|
|
118
|
+
"--offline",
|
|
119
|
+
"--prefer-offline",
|
|
120
|
+
"--prefer-online",
|
|
121
|
+
"--workspaces",
|
|
122
|
+
"--ws",
|
|
123
|
+
"--include-workspace-root",
|
|
124
|
+
"--silent",
|
|
125
|
+
"--quiet",
|
|
126
|
+
"-q"
|
|
127
|
+
]);
|
|
128
|
+
NPX_PREFIX_FLAGS_WITH_VALUE = new Set([
|
|
129
|
+
"-p",
|
|
130
|
+
"--package",
|
|
131
|
+
"-w",
|
|
132
|
+
"--workspace",
|
|
133
|
+
"--script-shell",
|
|
134
|
+
"--loglevel",
|
|
135
|
+
"--registry"
|
|
136
|
+
]);
|
|
137
|
+
}));
|
|
138
|
+
//#endregion
|
|
139
|
+
//#region src/cli.ts
|
|
140
|
+
init_constants();
|
|
141
|
+
/**
|
|
142
|
+
* Extract package name from spec.
|
|
143
|
+
* @example 'cowsay@1.5.0' → 'cowsay'
|
|
144
|
+
* @example '@vue/cli@latest' → '@vue/cli'
|
|
145
|
+
*/
|
|
146
|
+
function extractPackageName(pkgSpec) {
|
|
147
|
+
if (!pkgSpec) return null;
|
|
148
|
+
if (pkgSpec.startsWith("@")) {
|
|
149
|
+
const secondAt = pkgSpec.indexOf("@", 1);
|
|
150
|
+
return secondAt === -1 ? pkgSpec : pkgSpec.slice(0, secondAt);
|
|
151
|
+
}
|
|
152
|
+
const atIndex = pkgSpec.indexOf("@");
|
|
153
|
+
return atIndex === -1 ? pkgSpec : pkgSpec.slice(0, atIndex);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Parse CLI arguments using two-phase parsing:
|
|
157
|
+
*
|
|
158
|
+
* Phase 1 (before package): Only snpx flags accepted.
|
|
159
|
+
* Unknown --flags → error. Single-dash flags (-y) → npx passthrough.
|
|
160
|
+
* Phase 2 (after package): Everything is passthrough to the executed tool.
|
|
161
|
+
*
|
|
162
|
+
* snpx [snpx-flags] [--] <package> [tool-args...]
|
|
163
|
+
* snpx [snpx-flags] (--help, --self-update, etc.)
|
|
164
|
+
*/
|
|
165
|
+
function parseArgs(argv) {
|
|
166
|
+
const args = argv.slice(2);
|
|
167
|
+
const snpxFlags = {
|
|
168
|
+
help: false,
|
|
169
|
+
version: false,
|
|
170
|
+
showVersion: false,
|
|
171
|
+
selfUpdate: false,
|
|
172
|
+
unsafeSelfUpdate: false,
|
|
173
|
+
time: null,
|
|
174
|
+
fallbackStrategy: null
|
|
175
|
+
};
|
|
176
|
+
let pkgSpec = null;
|
|
177
|
+
let pkgName = null;
|
|
178
|
+
const npxPrefixArgs = [];
|
|
179
|
+
const restArgs = [];
|
|
180
|
+
let foundPackage = false;
|
|
181
|
+
let endOfOptions = false;
|
|
182
|
+
for (let i = 0; i < args.length; i++) {
|
|
183
|
+
const arg = args[i];
|
|
184
|
+
if (foundPackage) {
|
|
185
|
+
restArgs.push(arg);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (arg === "--" && !endOfOptions) {
|
|
189
|
+
endOfOptions = true;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (endOfOptions) {
|
|
193
|
+
pkgSpec = arg;
|
|
194
|
+
pkgName = extractPackageName(arg);
|
|
195
|
+
foundPackage = true;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (arg === "-h" || arg === "--help") snpxFlags.help = true;
|
|
199
|
+
else if (arg === "--version") snpxFlags.version = true;
|
|
200
|
+
else if (arg === "--show-version") snpxFlags.showVersion = true;
|
|
201
|
+
else if (arg === "--self-update") snpxFlags.selfUpdate = true;
|
|
202
|
+
else if (arg === "--unsafe-self-update") snpxFlags.unsafeSelfUpdate = true;
|
|
203
|
+
else if (arg === "--time") {
|
|
204
|
+
if (i + 1 >= args.length) throw new Error("Missing value for --time");
|
|
205
|
+
snpxFlags.time = args[++i];
|
|
206
|
+
} else if (arg.startsWith("--time=")) snpxFlags.time = arg.slice(7);
|
|
207
|
+
else if (arg === "--fallback-strategy") {
|
|
208
|
+
if (i + 1 >= args.length) throw new Error("Missing value for --fallback-strategy");
|
|
209
|
+
snpxFlags.fallbackStrategy = args[++i];
|
|
210
|
+
} else if (arg.startsWith("--fallback-strategy=")) snpxFlags.fallbackStrategy = arg.slice(20);
|
|
211
|
+
else if (NPX_PREFIX_FLAGS.has(arg)) npxPrefixArgs.push(arg);
|
|
212
|
+
else if (NPX_PREFIX_FLAGS_WITH_VALUE.has(arg)) {
|
|
213
|
+
if (i + 1 >= args.length) throw new Error(`Missing value for ${arg}`);
|
|
214
|
+
npxPrefixArgs.push(arg, args[++i]);
|
|
215
|
+
} else if (arg.startsWith("--package=") || arg.startsWith("--workspace=") || arg.startsWith("--loglevel=") || arg.startsWith("--registry=") || arg.startsWith("--script-shell=")) npxPrefixArgs.push(arg);
|
|
216
|
+
else if (arg.startsWith("--")) throw new Error(`Unknown flag: ${arg}. Run 'snpx --help' for available options.`);
|
|
217
|
+
else if (arg.startsWith("-")) if (NPX_PREFIX_FLAGS.has(arg)) npxPrefixArgs.push(arg);
|
|
218
|
+
else if (NPX_PREFIX_FLAGS_WITH_VALUE.has(arg)) {
|
|
219
|
+
if (i + 1 >= args.length) throw new Error(`Missing value for ${arg}`);
|
|
220
|
+
npxPrefixArgs.push(arg, args[++i]);
|
|
221
|
+
} else restArgs.push(arg);
|
|
222
|
+
else {
|
|
223
|
+
pkgSpec = arg;
|
|
224
|
+
pkgName = extractPackageName(arg);
|
|
225
|
+
foundPackage = true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
snpxFlags,
|
|
230
|
+
pkgSpec,
|
|
231
|
+
pkgName,
|
|
232
|
+
npxPrefixArgs,
|
|
233
|
+
restArgs,
|
|
234
|
+
isLatest: !!(pkgSpec && pkgSpec.includes("@latest"))
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Build effective execution options from CLI flags and environment variables.
|
|
239
|
+
*/
|
|
240
|
+
function buildOptions(snpxFlags) {
|
|
241
|
+
const envTime = process.env.SNPX_TIME;
|
|
242
|
+
const envStrategy = process.env.SNPX_FALLBACK_STRATEGY;
|
|
243
|
+
const timeHours = snpxFlags.time ?? envTime ?? 24;
|
|
244
|
+
const parsedHours = parseFloat(timeHours);
|
|
245
|
+
if (!Number.isFinite(parsedHours) || parsedHours < 0) {
|
|
246
|
+
console.error(`[snpx] Invalid --time value: ${timeHours}`);
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
timeHours,
|
|
251
|
+
timeMs: parsedHours * MS_PER_HOUR,
|
|
252
|
+
strategy: (snpxFlags.fallbackStrategy ?? envStrategy ?? "patch,minor,major").split(",").map((s) => s.trim()).filter(Boolean)
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//#endregion
|
|
256
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js
|
|
257
|
+
var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
258
|
+
var SEMVER_SPEC_VERSION = "2.0.0";
|
|
259
|
+
var MAX_LENGTH = 256;
|
|
260
|
+
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
261
|
+
module.exports = {
|
|
262
|
+
MAX_LENGTH,
|
|
263
|
+
MAX_SAFE_COMPONENT_LENGTH: 16,
|
|
264
|
+
MAX_SAFE_BUILD_LENGTH: MAX_LENGTH - 6,
|
|
265
|
+
MAX_SAFE_INTEGER,
|
|
266
|
+
RELEASE_TYPES: [
|
|
267
|
+
"major",
|
|
268
|
+
"premajor",
|
|
269
|
+
"minor",
|
|
270
|
+
"preminor",
|
|
271
|
+
"patch",
|
|
272
|
+
"prepatch",
|
|
273
|
+
"prerelease"
|
|
274
|
+
],
|
|
275
|
+
SEMVER_SPEC_VERSION,
|
|
276
|
+
FLAG_INCLUDE_PRERELEASE: 1,
|
|
277
|
+
FLAG_LOOSE: 2
|
|
278
|
+
};
|
|
279
|
+
}));
|
|
280
|
+
//#endregion
|
|
281
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js
|
|
282
|
+
var require_debug = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
283
|
+
module.exports = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {};
|
|
284
|
+
}));
|
|
285
|
+
//#endregion
|
|
286
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js
|
|
287
|
+
var require_re = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
288
|
+
var { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants();
|
|
289
|
+
var debug = require_debug();
|
|
290
|
+
exports = module.exports = {};
|
|
291
|
+
var re = exports.re = [];
|
|
292
|
+
var safeRe = exports.safeRe = [];
|
|
293
|
+
var src = exports.src = [];
|
|
294
|
+
var safeSrc = exports.safeSrc = [];
|
|
295
|
+
var t = exports.t = {};
|
|
296
|
+
var R = 0;
|
|
297
|
+
var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
|
|
298
|
+
var safeRegexReplacements = [
|
|
299
|
+
["\\s", 1],
|
|
300
|
+
["\\d", MAX_LENGTH],
|
|
301
|
+
[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
|
|
302
|
+
];
|
|
303
|
+
var makeSafeRegex = (value) => {
|
|
304
|
+
for (const [token, max] of safeRegexReplacements) value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
|
|
305
|
+
return value;
|
|
306
|
+
};
|
|
307
|
+
var createToken = (name, value, isGlobal) => {
|
|
308
|
+
const safe = makeSafeRegex(value);
|
|
309
|
+
const index = R++;
|
|
310
|
+
debug(name, index, value);
|
|
311
|
+
t[name] = index;
|
|
312
|
+
src[index] = value;
|
|
313
|
+
safeSrc[index] = safe;
|
|
314
|
+
re[index] = new RegExp(value, isGlobal ? "g" : void 0);
|
|
315
|
+
safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
|
|
316
|
+
};
|
|
317
|
+
createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
|
|
318
|
+
createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
|
|
319
|
+
createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
|
|
320
|
+
createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
|
|
321
|
+
createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
|
|
322
|
+
createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);
|
|
323
|
+
createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
|
|
324
|
+
createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
|
|
325
|
+
createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
|
|
326
|
+
createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
|
|
327
|
+
createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
|
|
328
|
+
createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
|
|
329
|
+
createToken("FULL", `^${src[t.FULLPLAIN]}$`);
|
|
330
|
+
createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
|
|
331
|
+
createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
|
|
332
|
+
createToken("GTLT", "((?:<|>)?=?)");
|
|
333
|
+
createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
|
|
334
|
+
createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
|
|
335
|
+
createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
|
|
336
|
+
createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
|
|
337
|
+
createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
|
|
338
|
+
createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
|
|
339
|
+
createToken("COERCEPLAIN", `(^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
|
|
340
|
+
createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
|
|
341
|
+
createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);
|
|
342
|
+
createToken("COERCERTL", src[t.COERCE], true);
|
|
343
|
+
createToken("COERCERTLFULL", src[t.COERCEFULL], true);
|
|
344
|
+
createToken("LONETILDE", "(?:~>?)");
|
|
345
|
+
createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
|
|
346
|
+
exports.tildeTrimReplace = "$1~";
|
|
347
|
+
createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
|
|
348
|
+
createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
|
|
349
|
+
createToken("LONECARET", "(?:\\^)");
|
|
350
|
+
createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
|
|
351
|
+
exports.caretTrimReplace = "$1^";
|
|
352
|
+
createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
|
|
353
|
+
createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
|
|
354
|
+
createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
|
|
355
|
+
createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
|
|
356
|
+
createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
|
|
357
|
+
exports.comparatorTrimReplace = "$1$2$3";
|
|
358
|
+
createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
|
|
359
|
+
createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
|
|
360
|
+
createToken("STAR", "(<|>)?=?\\s*\\*");
|
|
361
|
+
createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
|
|
362
|
+
createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
|
|
363
|
+
}));
|
|
364
|
+
//#endregion
|
|
365
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js
|
|
366
|
+
var require_parse_options = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
367
|
+
var looseOption = Object.freeze({ loose: true });
|
|
368
|
+
var emptyOpts = Object.freeze({});
|
|
369
|
+
var parseOptions = (options) => {
|
|
370
|
+
if (!options) return emptyOpts;
|
|
371
|
+
if (typeof options !== "object") return looseOption;
|
|
372
|
+
return options;
|
|
373
|
+
};
|
|
374
|
+
module.exports = parseOptions;
|
|
375
|
+
}));
|
|
376
|
+
//#endregion
|
|
377
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js
|
|
378
|
+
var require_identifiers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
379
|
+
var numeric = /^[0-9]+$/;
|
|
380
|
+
var compareIdentifiers = (a, b) => {
|
|
381
|
+
if (typeof a === "number" && typeof b === "number") return a === b ? 0 : a < b ? -1 : 1;
|
|
382
|
+
const anum = numeric.test(a);
|
|
383
|
+
const bnum = numeric.test(b);
|
|
384
|
+
if (anum && bnum) {
|
|
385
|
+
a = +a;
|
|
386
|
+
b = +b;
|
|
387
|
+
}
|
|
388
|
+
return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
|
|
389
|
+
};
|
|
390
|
+
var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
|
|
391
|
+
module.exports = {
|
|
392
|
+
compareIdentifiers,
|
|
393
|
+
rcompareIdentifiers
|
|
394
|
+
};
|
|
395
|
+
}));
|
|
396
|
+
//#endregion
|
|
397
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js
|
|
398
|
+
var require_semver$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
399
|
+
var debug = require_debug();
|
|
400
|
+
var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
|
|
401
|
+
var { safeRe: re, t } = require_re();
|
|
402
|
+
var parseOptions = require_parse_options();
|
|
403
|
+
var { compareIdentifiers } = require_identifiers();
|
|
404
|
+
module.exports = class SemVer {
|
|
405
|
+
constructor(version, options) {
|
|
406
|
+
options = parseOptions(options);
|
|
407
|
+
if (version instanceof SemVer) if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) return version;
|
|
408
|
+
else version = version.version;
|
|
409
|
+
else if (typeof version !== "string") throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
|
|
410
|
+
if (version.length > MAX_LENGTH) throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);
|
|
411
|
+
debug("SemVer", version, options);
|
|
412
|
+
this.options = options;
|
|
413
|
+
this.loose = !!options.loose;
|
|
414
|
+
this.includePrerelease = !!options.includePrerelease;
|
|
415
|
+
const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
|
|
416
|
+
if (!m) throw new TypeError(`Invalid Version: ${version}`);
|
|
417
|
+
this.raw = version;
|
|
418
|
+
this.major = +m[1];
|
|
419
|
+
this.minor = +m[2];
|
|
420
|
+
this.patch = +m[3];
|
|
421
|
+
if (this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError("Invalid major version");
|
|
422
|
+
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError("Invalid minor version");
|
|
423
|
+
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError("Invalid patch version");
|
|
424
|
+
if (!m[4]) this.prerelease = [];
|
|
425
|
+
else this.prerelease = m[4].split(".").map((id) => {
|
|
426
|
+
if (/^[0-9]+$/.test(id)) {
|
|
427
|
+
const num = +id;
|
|
428
|
+
if (num >= 0 && num < MAX_SAFE_INTEGER) return num;
|
|
429
|
+
}
|
|
430
|
+
return id;
|
|
431
|
+
});
|
|
432
|
+
this.build = m[5] ? m[5].split(".") : [];
|
|
433
|
+
this.format();
|
|
434
|
+
}
|
|
435
|
+
format() {
|
|
436
|
+
this.version = `${this.major}.${this.minor}.${this.patch}`;
|
|
437
|
+
if (this.prerelease.length) this.version += `-${this.prerelease.join(".")}`;
|
|
438
|
+
return this.version;
|
|
439
|
+
}
|
|
440
|
+
toString() {
|
|
441
|
+
return this.version;
|
|
442
|
+
}
|
|
443
|
+
compare(other) {
|
|
444
|
+
debug("SemVer.compare", this.version, this.options, other);
|
|
445
|
+
if (!(other instanceof SemVer)) {
|
|
446
|
+
if (typeof other === "string" && other === this.version) return 0;
|
|
447
|
+
other = new SemVer(other, this.options);
|
|
448
|
+
}
|
|
449
|
+
if (other.version === this.version) return 0;
|
|
450
|
+
return this.compareMain(other) || this.comparePre(other);
|
|
451
|
+
}
|
|
452
|
+
compareMain(other) {
|
|
453
|
+
if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
|
|
454
|
+
if (this.major < other.major) return -1;
|
|
455
|
+
if (this.major > other.major) return 1;
|
|
456
|
+
if (this.minor < other.minor) return -1;
|
|
457
|
+
if (this.minor > other.minor) return 1;
|
|
458
|
+
if (this.patch < other.patch) return -1;
|
|
459
|
+
if (this.patch > other.patch) return 1;
|
|
460
|
+
return 0;
|
|
461
|
+
}
|
|
462
|
+
comparePre(other) {
|
|
463
|
+
if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
|
|
464
|
+
if (this.prerelease.length && !other.prerelease.length) return -1;
|
|
465
|
+
else if (!this.prerelease.length && other.prerelease.length) return 1;
|
|
466
|
+
else if (!this.prerelease.length && !other.prerelease.length) return 0;
|
|
467
|
+
let i = 0;
|
|
468
|
+
do {
|
|
469
|
+
const a = this.prerelease[i];
|
|
470
|
+
const b = other.prerelease[i];
|
|
471
|
+
debug("prerelease compare", i, a, b);
|
|
472
|
+
if (a === void 0 && b === void 0) return 0;
|
|
473
|
+
else if (b === void 0) return 1;
|
|
474
|
+
else if (a === void 0) return -1;
|
|
475
|
+
else if (a === b) continue;
|
|
476
|
+
else return compareIdentifiers(a, b);
|
|
477
|
+
} while (++i);
|
|
478
|
+
}
|
|
479
|
+
compareBuild(other) {
|
|
480
|
+
if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
|
|
481
|
+
let i = 0;
|
|
482
|
+
do {
|
|
483
|
+
const a = this.build[i];
|
|
484
|
+
const b = other.build[i];
|
|
485
|
+
debug("build compare", i, a, b);
|
|
486
|
+
if (a === void 0 && b === void 0) return 0;
|
|
487
|
+
else if (b === void 0) return 1;
|
|
488
|
+
else if (a === void 0) return -1;
|
|
489
|
+
else if (a === b) continue;
|
|
490
|
+
else return compareIdentifiers(a, b);
|
|
491
|
+
} while (++i);
|
|
492
|
+
}
|
|
493
|
+
inc(release, identifier, identifierBase) {
|
|
494
|
+
if (release.startsWith("pre")) {
|
|
495
|
+
if (!identifier && identifierBase === false) throw new Error("invalid increment argument: identifier is empty");
|
|
496
|
+
if (identifier) {
|
|
497
|
+
const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
|
|
498
|
+
if (!match || match[1] !== identifier) throw new Error(`invalid identifier: ${identifier}`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
switch (release) {
|
|
502
|
+
case "premajor":
|
|
503
|
+
this.prerelease.length = 0;
|
|
504
|
+
this.patch = 0;
|
|
505
|
+
this.minor = 0;
|
|
506
|
+
this.major++;
|
|
507
|
+
this.inc("pre", identifier, identifierBase);
|
|
508
|
+
break;
|
|
509
|
+
case "preminor":
|
|
510
|
+
this.prerelease.length = 0;
|
|
511
|
+
this.patch = 0;
|
|
512
|
+
this.minor++;
|
|
513
|
+
this.inc("pre", identifier, identifierBase);
|
|
514
|
+
break;
|
|
515
|
+
case "prepatch":
|
|
516
|
+
this.prerelease.length = 0;
|
|
517
|
+
this.inc("patch", identifier, identifierBase);
|
|
518
|
+
this.inc("pre", identifier, identifierBase);
|
|
519
|
+
break;
|
|
520
|
+
case "prerelease":
|
|
521
|
+
if (this.prerelease.length === 0) this.inc("patch", identifier, identifierBase);
|
|
522
|
+
this.inc("pre", identifier, identifierBase);
|
|
523
|
+
break;
|
|
524
|
+
case "release":
|
|
525
|
+
if (this.prerelease.length === 0) throw new Error(`version ${this.raw} is not a prerelease`);
|
|
526
|
+
this.prerelease.length = 0;
|
|
527
|
+
break;
|
|
528
|
+
case "major":
|
|
529
|
+
if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) this.major++;
|
|
530
|
+
this.minor = 0;
|
|
531
|
+
this.patch = 0;
|
|
532
|
+
this.prerelease = [];
|
|
533
|
+
break;
|
|
534
|
+
case "minor":
|
|
535
|
+
if (this.patch !== 0 || this.prerelease.length === 0) this.minor++;
|
|
536
|
+
this.patch = 0;
|
|
537
|
+
this.prerelease = [];
|
|
538
|
+
break;
|
|
539
|
+
case "patch":
|
|
540
|
+
if (this.prerelease.length === 0) this.patch++;
|
|
541
|
+
this.prerelease = [];
|
|
542
|
+
break;
|
|
543
|
+
case "pre": {
|
|
544
|
+
const base = Number(identifierBase) ? 1 : 0;
|
|
545
|
+
if (this.prerelease.length === 0) this.prerelease = [base];
|
|
546
|
+
else {
|
|
547
|
+
let i = this.prerelease.length;
|
|
548
|
+
while (--i >= 0) if (typeof this.prerelease[i] === "number") {
|
|
549
|
+
this.prerelease[i]++;
|
|
550
|
+
i = -2;
|
|
551
|
+
}
|
|
552
|
+
if (i === -1) {
|
|
553
|
+
if (identifier === this.prerelease.join(".") && identifierBase === false) throw new Error("invalid increment argument: identifier already exists");
|
|
554
|
+
this.prerelease.push(base);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
if (identifier) {
|
|
558
|
+
let prerelease = [identifier, base];
|
|
559
|
+
if (identifierBase === false) prerelease = [identifier];
|
|
560
|
+
if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
|
|
561
|
+
if (isNaN(this.prerelease[1])) this.prerelease = prerelease;
|
|
562
|
+
} else this.prerelease = prerelease;
|
|
563
|
+
}
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
default: throw new Error(`invalid increment argument: ${release}`);
|
|
567
|
+
}
|
|
568
|
+
this.raw = this.format();
|
|
569
|
+
if (this.build.length) this.raw += `+${this.build.join(".")}`;
|
|
570
|
+
return this;
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
}));
|
|
574
|
+
//#endregion
|
|
575
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js
|
|
576
|
+
var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
577
|
+
var SemVer = require_semver$1();
|
|
578
|
+
var parse = (version, options, throwErrors = false) => {
|
|
579
|
+
if (version instanceof SemVer) return version;
|
|
580
|
+
try {
|
|
581
|
+
return new SemVer(version, options);
|
|
582
|
+
} catch (er) {
|
|
583
|
+
if (!throwErrors) return null;
|
|
584
|
+
throw er;
|
|
585
|
+
}
|
|
586
|
+
};
|
|
587
|
+
module.exports = parse;
|
|
588
|
+
}));
|
|
589
|
+
//#endregion
|
|
590
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/valid.js
|
|
591
|
+
var require_valid$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
592
|
+
var parse = require_parse();
|
|
593
|
+
var valid = (version, options) => {
|
|
594
|
+
const v = parse(version, options);
|
|
595
|
+
return v ? v.version : null;
|
|
596
|
+
};
|
|
597
|
+
module.exports = valid;
|
|
598
|
+
}));
|
|
599
|
+
//#endregion
|
|
600
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/clean.js
|
|
601
|
+
var require_clean = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
602
|
+
var parse = require_parse();
|
|
603
|
+
var clean = (version, options) => {
|
|
604
|
+
const s = parse(version.trim().replace(/^[=v]+/, ""), options);
|
|
605
|
+
return s ? s.version : null;
|
|
606
|
+
};
|
|
607
|
+
module.exports = clean;
|
|
608
|
+
}));
|
|
609
|
+
//#endregion
|
|
610
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/inc.js
|
|
611
|
+
var require_inc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
612
|
+
var SemVer = require_semver$1();
|
|
613
|
+
var inc = (version, release, options, identifier, identifierBase) => {
|
|
614
|
+
if (typeof options === "string") {
|
|
615
|
+
identifierBase = identifier;
|
|
616
|
+
identifier = options;
|
|
617
|
+
options = void 0;
|
|
618
|
+
}
|
|
619
|
+
try {
|
|
620
|
+
return new SemVer(version instanceof SemVer ? version.version : version, options).inc(release, identifier, identifierBase).version;
|
|
621
|
+
} catch (er) {
|
|
622
|
+
return null;
|
|
623
|
+
}
|
|
624
|
+
};
|
|
625
|
+
module.exports = inc;
|
|
626
|
+
}));
|
|
627
|
+
//#endregion
|
|
628
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/diff.js
|
|
629
|
+
var require_diff = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
630
|
+
var parse = require_parse();
|
|
631
|
+
var diff = (version1, version2) => {
|
|
632
|
+
const v1 = parse(version1, null, true);
|
|
633
|
+
const v2 = parse(version2, null, true);
|
|
634
|
+
const comparison = v1.compare(v2);
|
|
635
|
+
if (comparison === 0) return null;
|
|
636
|
+
const v1Higher = comparison > 0;
|
|
637
|
+
const highVersion = v1Higher ? v1 : v2;
|
|
638
|
+
const lowVersion = v1Higher ? v2 : v1;
|
|
639
|
+
const highHasPre = !!highVersion.prerelease.length;
|
|
640
|
+
if (!!lowVersion.prerelease.length && !highHasPre) {
|
|
641
|
+
if (!lowVersion.patch && !lowVersion.minor) return "major";
|
|
642
|
+
if (lowVersion.compareMain(highVersion) === 0) {
|
|
643
|
+
if (lowVersion.minor && !lowVersion.patch) return "minor";
|
|
644
|
+
return "patch";
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
const prefix = highHasPre ? "pre" : "";
|
|
648
|
+
if (v1.major !== v2.major) return prefix + "major";
|
|
649
|
+
if (v1.minor !== v2.minor) return prefix + "minor";
|
|
650
|
+
if (v1.patch !== v2.patch) return prefix + "patch";
|
|
651
|
+
return "prerelease";
|
|
652
|
+
};
|
|
653
|
+
module.exports = diff;
|
|
654
|
+
}));
|
|
655
|
+
//#endregion
|
|
656
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/major.js
|
|
657
|
+
var require_major = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
658
|
+
var SemVer = require_semver$1();
|
|
659
|
+
var major = (a, loose) => new SemVer(a, loose).major;
|
|
660
|
+
module.exports = major;
|
|
661
|
+
}));
|
|
662
|
+
//#endregion
|
|
663
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/minor.js
|
|
664
|
+
var require_minor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
665
|
+
var SemVer = require_semver$1();
|
|
666
|
+
var minor = (a, loose) => new SemVer(a, loose).minor;
|
|
667
|
+
module.exports = minor;
|
|
668
|
+
}));
|
|
669
|
+
//#endregion
|
|
670
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/patch.js
|
|
671
|
+
var require_patch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
672
|
+
var SemVer = require_semver$1();
|
|
673
|
+
var patch = (a, loose) => new SemVer(a, loose).patch;
|
|
674
|
+
module.exports = patch;
|
|
675
|
+
}));
|
|
676
|
+
//#endregion
|
|
677
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/prerelease.js
|
|
678
|
+
var require_prerelease = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
679
|
+
var parse = require_parse();
|
|
680
|
+
var prerelease = (version, options) => {
|
|
681
|
+
const parsed = parse(version, options);
|
|
682
|
+
return parsed && parsed.prerelease.length ? parsed.prerelease : null;
|
|
683
|
+
};
|
|
684
|
+
module.exports = prerelease;
|
|
685
|
+
}));
|
|
686
|
+
//#endregion
|
|
687
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js
|
|
688
|
+
var require_compare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
689
|
+
var SemVer = require_semver$1();
|
|
690
|
+
var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
|
|
691
|
+
module.exports = compare;
|
|
692
|
+
}));
|
|
693
|
+
//#endregion
|
|
694
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/rcompare.js
|
|
695
|
+
var require_rcompare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
696
|
+
var compare = require_compare();
|
|
697
|
+
var rcompare = (a, b, loose) => compare(b, a, loose);
|
|
698
|
+
module.exports = rcompare;
|
|
699
|
+
}));
|
|
700
|
+
//#endregion
|
|
701
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare-loose.js
|
|
702
|
+
var require_compare_loose = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
703
|
+
var compare = require_compare();
|
|
704
|
+
var compareLoose = (a, b) => compare(a, b, true);
|
|
705
|
+
module.exports = compareLoose;
|
|
706
|
+
}));
|
|
707
|
+
//#endregion
|
|
708
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare-build.js
|
|
709
|
+
var require_compare_build = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
710
|
+
var SemVer = require_semver$1();
|
|
711
|
+
var compareBuild = (a, b, loose) => {
|
|
712
|
+
const versionA = new SemVer(a, loose);
|
|
713
|
+
const versionB = new SemVer(b, loose);
|
|
714
|
+
return versionA.compare(versionB) || versionA.compareBuild(versionB);
|
|
715
|
+
};
|
|
716
|
+
module.exports = compareBuild;
|
|
717
|
+
}));
|
|
718
|
+
//#endregion
|
|
719
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/sort.js
|
|
720
|
+
var require_sort = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
721
|
+
var compareBuild = require_compare_build();
|
|
722
|
+
var sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));
|
|
723
|
+
module.exports = sort;
|
|
724
|
+
}));
|
|
725
|
+
//#endregion
|
|
726
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/rsort.js
|
|
727
|
+
var require_rsort = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
728
|
+
var compareBuild = require_compare_build();
|
|
729
|
+
var rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
|
|
730
|
+
module.exports = rsort;
|
|
731
|
+
}));
|
|
732
|
+
//#endregion
|
|
733
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js
|
|
734
|
+
var require_gt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
735
|
+
var compare = require_compare();
|
|
736
|
+
var gt = (a, b, loose) => compare(a, b, loose) > 0;
|
|
737
|
+
module.exports = gt;
|
|
738
|
+
}));
|
|
739
|
+
//#endregion
|
|
740
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js
|
|
741
|
+
var require_lt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
742
|
+
var compare = require_compare();
|
|
743
|
+
var lt = (a, b, loose) => compare(a, b, loose) < 0;
|
|
744
|
+
module.exports = lt;
|
|
745
|
+
}));
|
|
746
|
+
//#endregion
|
|
747
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js
|
|
748
|
+
var require_eq = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
749
|
+
var compare = require_compare();
|
|
750
|
+
var eq = (a, b, loose) => compare(a, b, loose) === 0;
|
|
751
|
+
module.exports = eq;
|
|
752
|
+
}));
|
|
753
|
+
//#endregion
|
|
754
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js
|
|
755
|
+
var require_neq = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
756
|
+
var compare = require_compare();
|
|
757
|
+
var neq = (a, b, loose) => compare(a, b, loose) !== 0;
|
|
758
|
+
module.exports = neq;
|
|
759
|
+
}));
|
|
760
|
+
//#endregion
|
|
761
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js
|
|
762
|
+
var require_gte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
763
|
+
var compare = require_compare();
|
|
764
|
+
var gte = (a, b, loose) => compare(a, b, loose) >= 0;
|
|
765
|
+
module.exports = gte;
|
|
766
|
+
}));
|
|
767
|
+
//#endregion
|
|
768
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js
|
|
769
|
+
var require_lte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
770
|
+
var compare = require_compare();
|
|
771
|
+
var lte = (a, b, loose) => compare(a, b, loose) <= 0;
|
|
772
|
+
module.exports = lte;
|
|
773
|
+
}));
|
|
774
|
+
//#endregion
|
|
775
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js
|
|
776
|
+
var require_cmp = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
777
|
+
var eq = require_eq();
|
|
778
|
+
var neq = require_neq();
|
|
779
|
+
var gt = require_gt();
|
|
780
|
+
var gte = require_gte();
|
|
781
|
+
var lt = require_lt();
|
|
782
|
+
var lte = require_lte();
|
|
783
|
+
var cmp = (a, op, b, loose) => {
|
|
784
|
+
switch (op) {
|
|
785
|
+
case "===":
|
|
786
|
+
if (typeof a === "object") a = a.version;
|
|
787
|
+
if (typeof b === "object") b = b.version;
|
|
788
|
+
return a === b;
|
|
789
|
+
case "!==":
|
|
790
|
+
if (typeof a === "object") a = a.version;
|
|
791
|
+
if (typeof b === "object") b = b.version;
|
|
792
|
+
return a !== b;
|
|
793
|
+
case "":
|
|
794
|
+
case "=":
|
|
795
|
+
case "==": return eq(a, b, loose);
|
|
796
|
+
case "!=": return neq(a, b, loose);
|
|
797
|
+
case ">": return gt(a, b, loose);
|
|
798
|
+
case ">=": return gte(a, b, loose);
|
|
799
|
+
case "<": return lt(a, b, loose);
|
|
800
|
+
case "<=": return lte(a, b, loose);
|
|
801
|
+
default: throw new TypeError(`Invalid operator: ${op}`);
|
|
802
|
+
}
|
|
803
|
+
};
|
|
804
|
+
module.exports = cmp;
|
|
805
|
+
}));
|
|
806
|
+
//#endregion
|
|
807
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/coerce.js
|
|
808
|
+
var require_coerce = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
809
|
+
var SemVer = require_semver$1();
|
|
810
|
+
var parse = require_parse();
|
|
811
|
+
var { safeRe: re, t } = require_re();
|
|
812
|
+
var coerce = (version, options) => {
|
|
813
|
+
if (version instanceof SemVer) return version;
|
|
814
|
+
if (typeof version === "number") version = String(version);
|
|
815
|
+
if (typeof version !== "string") return null;
|
|
816
|
+
options = options || {};
|
|
817
|
+
let match = null;
|
|
818
|
+
if (!options.rtl) match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
|
|
819
|
+
else {
|
|
820
|
+
const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
|
|
821
|
+
let next;
|
|
822
|
+
while ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) {
|
|
823
|
+
if (!match || next.index + next[0].length !== match.index + match[0].length) match = next;
|
|
824
|
+
coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
|
|
825
|
+
}
|
|
826
|
+
coerceRtlRegex.lastIndex = -1;
|
|
827
|
+
}
|
|
828
|
+
if (match === null) return null;
|
|
829
|
+
const major = match[2];
|
|
830
|
+
return parse(`${major}.${match[3] || "0"}.${match[4] || "0"}${options.includePrerelease && match[5] ? `-${match[5]}` : ""}${options.includePrerelease && match[6] ? `+${match[6]}` : ""}`, options);
|
|
831
|
+
};
|
|
832
|
+
module.exports = coerce;
|
|
833
|
+
}));
|
|
834
|
+
//#endregion
|
|
835
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js
|
|
836
|
+
var require_lrucache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
837
|
+
var LRUCache = class {
|
|
838
|
+
constructor() {
|
|
839
|
+
this.max = 1e3;
|
|
840
|
+
this.map = /* @__PURE__ */ new Map();
|
|
841
|
+
}
|
|
842
|
+
get(key) {
|
|
843
|
+
const value = this.map.get(key);
|
|
844
|
+
if (value === void 0) return;
|
|
845
|
+
else {
|
|
846
|
+
this.map.delete(key);
|
|
847
|
+
this.map.set(key, value);
|
|
848
|
+
return value;
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
delete(key) {
|
|
852
|
+
return this.map.delete(key);
|
|
853
|
+
}
|
|
854
|
+
set(key, value) {
|
|
855
|
+
if (!this.delete(key) && value !== void 0) {
|
|
856
|
+
if (this.map.size >= this.max) {
|
|
857
|
+
const firstKey = this.map.keys().next().value;
|
|
858
|
+
this.delete(firstKey);
|
|
859
|
+
}
|
|
860
|
+
this.map.set(key, value);
|
|
861
|
+
}
|
|
862
|
+
return this;
|
|
863
|
+
}
|
|
864
|
+
};
|
|
865
|
+
module.exports = LRUCache;
|
|
866
|
+
}));
|
|
867
|
+
//#endregion
|
|
868
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js
|
|
869
|
+
var require_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
870
|
+
var SPACE_CHARACTERS = /\s+/g;
|
|
871
|
+
module.exports = class Range {
|
|
872
|
+
constructor(range, options) {
|
|
873
|
+
options = parseOptions(options);
|
|
874
|
+
if (range instanceof Range) if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) return range;
|
|
875
|
+
else return new Range(range.raw, options);
|
|
876
|
+
if (range instanceof Comparator) {
|
|
877
|
+
this.raw = range.value;
|
|
878
|
+
this.set = [[range]];
|
|
879
|
+
this.formatted = void 0;
|
|
880
|
+
return this;
|
|
881
|
+
}
|
|
882
|
+
this.options = options;
|
|
883
|
+
this.loose = !!options.loose;
|
|
884
|
+
this.includePrerelease = !!options.includePrerelease;
|
|
885
|
+
this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
|
|
886
|
+
this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
|
|
887
|
+
if (!this.set.length) throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
|
|
888
|
+
if (this.set.length > 1) {
|
|
889
|
+
const first = this.set[0];
|
|
890
|
+
this.set = this.set.filter((c) => !isNullSet(c[0]));
|
|
891
|
+
if (this.set.length === 0) this.set = [first];
|
|
892
|
+
else if (this.set.length > 1) {
|
|
893
|
+
for (const c of this.set) if (c.length === 1 && isAny(c[0])) {
|
|
894
|
+
this.set = [c];
|
|
895
|
+
break;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
this.formatted = void 0;
|
|
900
|
+
}
|
|
901
|
+
get range() {
|
|
902
|
+
if (this.formatted === void 0) {
|
|
903
|
+
this.formatted = "";
|
|
904
|
+
for (let i = 0; i < this.set.length; i++) {
|
|
905
|
+
if (i > 0) this.formatted += "||";
|
|
906
|
+
const comps = this.set[i];
|
|
907
|
+
for (let k = 0; k < comps.length; k++) {
|
|
908
|
+
if (k > 0) this.formatted += " ";
|
|
909
|
+
this.formatted += comps[k].toString().trim();
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
return this.formatted;
|
|
914
|
+
}
|
|
915
|
+
format() {
|
|
916
|
+
return this.range;
|
|
917
|
+
}
|
|
918
|
+
toString() {
|
|
919
|
+
return this.range;
|
|
920
|
+
}
|
|
921
|
+
parseRange(range) {
|
|
922
|
+
const memoKey = ((this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE)) + ":" + range;
|
|
923
|
+
const cached = cache.get(memoKey);
|
|
924
|
+
if (cached) return cached;
|
|
925
|
+
const loose = this.options.loose;
|
|
926
|
+
const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
|
|
927
|
+
range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
|
|
928
|
+
debug("hyphen replace", range);
|
|
929
|
+
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
|
|
930
|
+
debug("comparator trim", range);
|
|
931
|
+
range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
|
|
932
|
+
debug("tilde trim", range);
|
|
933
|
+
range = range.replace(re[t.CARETTRIM], caretTrimReplace);
|
|
934
|
+
debug("caret trim", range);
|
|
935
|
+
let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
|
|
936
|
+
if (loose) rangeList = rangeList.filter((comp) => {
|
|
937
|
+
debug("loose invalid filter", comp, this.options);
|
|
938
|
+
return !!comp.match(re[t.COMPARATORLOOSE]);
|
|
939
|
+
});
|
|
940
|
+
debug("range list", rangeList);
|
|
941
|
+
const rangeMap = /* @__PURE__ */ new Map();
|
|
942
|
+
const comparators = rangeList.map((comp) => new Comparator(comp, this.options));
|
|
943
|
+
for (const comp of comparators) {
|
|
944
|
+
if (isNullSet(comp)) return [comp];
|
|
945
|
+
rangeMap.set(comp.value, comp);
|
|
946
|
+
}
|
|
947
|
+
if (rangeMap.size > 1 && rangeMap.has("")) rangeMap.delete("");
|
|
948
|
+
const result = [...rangeMap.values()];
|
|
949
|
+
cache.set(memoKey, result);
|
|
950
|
+
return result;
|
|
951
|
+
}
|
|
952
|
+
intersects(range, options) {
|
|
953
|
+
if (!(range instanceof Range)) throw new TypeError("a Range is required");
|
|
954
|
+
return this.set.some((thisComparators) => {
|
|
955
|
+
return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
|
|
956
|
+
return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
|
|
957
|
+
return rangeComparators.every((rangeComparator) => {
|
|
958
|
+
return thisComparator.intersects(rangeComparator, options);
|
|
959
|
+
});
|
|
960
|
+
});
|
|
961
|
+
});
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
test(version) {
|
|
965
|
+
if (!version) return false;
|
|
966
|
+
if (typeof version === "string") try {
|
|
967
|
+
version = new SemVer(version, this.options);
|
|
968
|
+
} catch (er) {
|
|
969
|
+
return false;
|
|
970
|
+
}
|
|
971
|
+
for (let i = 0; i < this.set.length; i++) if (testSet(this.set[i], version, this.options)) return true;
|
|
972
|
+
return false;
|
|
973
|
+
}
|
|
974
|
+
};
|
|
975
|
+
var cache = new (require_lrucache())();
|
|
976
|
+
var parseOptions = require_parse_options();
|
|
977
|
+
var Comparator = require_comparator();
|
|
978
|
+
var debug = require_debug();
|
|
979
|
+
var SemVer = require_semver$1();
|
|
980
|
+
var { safeRe: re, t, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = require_re();
|
|
981
|
+
var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();
|
|
982
|
+
var isNullSet = (c) => c.value === "<0.0.0-0";
|
|
983
|
+
var isAny = (c) => c.value === "";
|
|
984
|
+
var isSatisfiable = (comparators, options) => {
|
|
985
|
+
let result = true;
|
|
986
|
+
const remainingComparators = comparators.slice();
|
|
987
|
+
let testComparator = remainingComparators.pop();
|
|
988
|
+
while (result && remainingComparators.length) {
|
|
989
|
+
result = remainingComparators.every((otherComparator) => {
|
|
990
|
+
return testComparator.intersects(otherComparator, options);
|
|
991
|
+
});
|
|
992
|
+
testComparator = remainingComparators.pop();
|
|
993
|
+
}
|
|
994
|
+
return result;
|
|
995
|
+
};
|
|
996
|
+
var parseComparator = (comp, options) => {
|
|
997
|
+
comp = comp.replace(re[t.BUILD], "");
|
|
998
|
+
debug("comp", comp, options);
|
|
999
|
+
comp = replaceCarets(comp, options);
|
|
1000
|
+
debug("caret", comp);
|
|
1001
|
+
comp = replaceTildes(comp, options);
|
|
1002
|
+
debug("tildes", comp);
|
|
1003
|
+
comp = replaceXRanges(comp, options);
|
|
1004
|
+
debug("xrange", comp);
|
|
1005
|
+
comp = replaceStars(comp, options);
|
|
1006
|
+
debug("stars", comp);
|
|
1007
|
+
return comp;
|
|
1008
|
+
};
|
|
1009
|
+
var isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
|
|
1010
|
+
var replaceTildes = (comp, options) => {
|
|
1011
|
+
return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
|
|
1012
|
+
};
|
|
1013
|
+
var replaceTilde = (comp, options) => {
|
|
1014
|
+
const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
|
|
1015
|
+
return comp.replace(r, (_, M, m, p, pr) => {
|
|
1016
|
+
debug("tilde", comp, _, M, m, p, pr);
|
|
1017
|
+
let ret;
|
|
1018
|
+
if (isX(M)) ret = "";
|
|
1019
|
+
else if (isX(m)) ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
|
|
1020
|
+
else if (isX(p)) ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
|
|
1021
|
+
else if (pr) {
|
|
1022
|
+
debug("replaceTilde pr", pr);
|
|
1023
|
+
ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
|
|
1024
|
+
} else ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
|
|
1025
|
+
debug("tilde return", ret);
|
|
1026
|
+
return ret;
|
|
1027
|
+
});
|
|
1028
|
+
};
|
|
1029
|
+
var replaceCarets = (comp, options) => {
|
|
1030
|
+
return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
|
|
1031
|
+
};
|
|
1032
|
+
var replaceCaret = (comp, options) => {
|
|
1033
|
+
debug("caret", comp, options);
|
|
1034
|
+
const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
|
|
1035
|
+
const z = options.includePrerelease ? "-0" : "";
|
|
1036
|
+
return comp.replace(r, (_, M, m, p, pr) => {
|
|
1037
|
+
debug("caret", comp, _, M, m, p, pr);
|
|
1038
|
+
let ret;
|
|
1039
|
+
if (isX(M)) ret = "";
|
|
1040
|
+
else if (isX(m)) ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
|
|
1041
|
+
else if (isX(p)) if (M === "0") ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
|
|
1042
|
+
else ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
|
|
1043
|
+
else if (pr) {
|
|
1044
|
+
debug("replaceCaret pr", pr);
|
|
1045
|
+
if (M === "0") if (m === "0") ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
|
|
1046
|
+
else ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
|
|
1047
|
+
else ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
|
|
1048
|
+
} else {
|
|
1049
|
+
debug("no pr");
|
|
1050
|
+
if (M === "0") if (m === "0") ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
|
|
1051
|
+
else ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
|
|
1052
|
+
else ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
|
|
1053
|
+
}
|
|
1054
|
+
debug("caret return", ret);
|
|
1055
|
+
return ret;
|
|
1056
|
+
});
|
|
1057
|
+
};
|
|
1058
|
+
var replaceXRanges = (comp, options) => {
|
|
1059
|
+
debug("replaceXRanges", comp, options);
|
|
1060
|
+
return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
|
|
1061
|
+
};
|
|
1062
|
+
var replaceXRange = (comp, options) => {
|
|
1063
|
+
comp = comp.trim();
|
|
1064
|
+
const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
|
|
1065
|
+
return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
|
|
1066
|
+
debug("xRange", comp, ret, gtlt, M, m, p, pr);
|
|
1067
|
+
const xM = isX(M);
|
|
1068
|
+
const xm = xM || isX(m);
|
|
1069
|
+
const xp = xm || isX(p);
|
|
1070
|
+
const anyX = xp;
|
|
1071
|
+
if (gtlt === "=" && anyX) gtlt = "";
|
|
1072
|
+
pr = options.includePrerelease ? "-0" : "";
|
|
1073
|
+
if (xM) if (gtlt === ">" || gtlt === "<") ret = "<0.0.0-0";
|
|
1074
|
+
else ret = "*";
|
|
1075
|
+
else if (gtlt && anyX) {
|
|
1076
|
+
if (xm) m = 0;
|
|
1077
|
+
p = 0;
|
|
1078
|
+
if (gtlt === ">") {
|
|
1079
|
+
gtlt = ">=";
|
|
1080
|
+
if (xm) {
|
|
1081
|
+
M = +M + 1;
|
|
1082
|
+
m = 0;
|
|
1083
|
+
p = 0;
|
|
1084
|
+
} else {
|
|
1085
|
+
m = +m + 1;
|
|
1086
|
+
p = 0;
|
|
1087
|
+
}
|
|
1088
|
+
} else if (gtlt === "<=") {
|
|
1089
|
+
gtlt = "<";
|
|
1090
|
+
if (xm) M = +M + 1;
|
|
1091
|
+
else m = +m + 1;
|
|
1092
|
+
}
|
|
1093
|
+
if (gtlt === "<") pr = "-0";
|
|
1094
|
+
ret = `${gtlt + M}.${m}.${p}${pr}`;
|
|
1095
|
+
} else if (xm) ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
|
|
1096
|
+
else if (xp) ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
|
|
1097
|
+
debug("xRange return", ret);
|
|
1098
|
+
return ret;
|
|
1099
|
+
});
|
|
1100
|
+
};
|
|
1101
|
+
var replaceStars = (comp, options) => {
|
|
1102
|
+
debug("replaceStars", comp, options);
|
|
1103
|
+
return comp.trim().replace(re[t.STAR], "");
|
|
1104
|
+
};
|
|
1105
|
+
var replaceGTE0 = (comp, options) => {
|
|
1106
|
+
debug("replaceGTE0", comp, options);
|
|
1107
|
+
return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
|
|
1108
|
+
};
|
|
1109
|
+
var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
|
|
1110
|
+
if (isX(fM)) from = "";
|
|
1111
|
+
else if (isX(fm)) from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
|
|
1112
|
+
else if (isX(fp)) from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
|
|
1113
|
+
else if (fpr) from = `>=${from}`;
|
|
1114
|
+
else from = `>=${from}${incPr ? "-0" : ""}`;
|
|
1115
|
+
if (isX(tM)) to = "";
|
|
1116
|
+
else if (isX(tm)) to = `<${+tM + 1}.0.0-0`;
|
|
1117
|
+
else if (isX(tp)) to = `<${tM}.${+tm + 1}.0-0`;
|
|
1118
|
+
else if (tpr) to = `<=${tM}.${tm}.${tp}-${tpr}`;
|
|
1119
|
+
else if (incPr) to = `<${tM}.${tm}.${+tp + 1}-0`;
|
|
1120
|
+
else to = `<=${to}`;
|
|
1121
|
+
return `${from} ${to}`.trim();
|
|
1122
|
+
};
|
|
1123
|
+
var testSet = (set, version, options) => {
|
|
1124
|
+
for (let i = 0; i < set.length; i++) if (!set[i].test(version)) return false;
|
|
1125
|
+
if (version.prerelease.length && !options.includePrerelease) {
|
|
1126
|
+
for (let i = 0; i < set.length; i++) {
|
|
1127
|
+
debug(set[i].semver);
|
|
1128
|
+
if (set[i].semver === Comparator.ANY) continue;
|
|
1129
|
+
if (set[i].semver.prerelease.length > 0) {
|
|
1130
|
+
const allowed = set[i].semver;
|
|
1131
|
+
if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) return true;
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
return false;
|
|
1135
|
+
}
|
|
1136
|
+
return true;
|
|
1137
|
+
};
|
|
1138
|
+
}));
|
|
1139
|
+
//#endregion
|
|
1140
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js
|
|
1141
|
+
var require_comparator = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1142
|
+
var ANY = Symbol("SemVer ANY");
|
|
1143
|
+
module.exports = class Comparator {
|
|
1144
|
+
static get ANY() {
|
|
1145
|
+
return ANY;
|
|
1146
|
+
}
|
|
1147
|
+
constructor(comp, options) {
|
|
1148
|
+
options = parseOptions(options);
|
|
1149
|
+
if (comp instanceof Comparator) if (comp.loose === !!options.loose) return comp;
|
|
1150
|
+
else comp = comp.value;
|
|
1151
|
+
comp = comp.trim().split(/\s+/).join(" ");
|
|
1152
|
+
debug("comparator", comp, options);
|
|
1153
|
+
this.options = options;
|
|
1154
|
+
this.loose = !!options.loose;
|
|
1155
|
+
this.parse(comp);
|
|
1156
|
+
if (this.semver === ANY) this.value = "";
|
|
1157
|
+
else this.value = this.operator + this.semver.version;
|
|
1158
|
+
debug("comp", this);
|
|
1159
|
+
}
|
|
1160
|
+
parse(comp) {
|
|
1161
|
+
const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
|
|
1162
|
+
const m = comp.match(r);
|
|
1163
|
+
if (!m) throw new TypeError(`Invalid comparator: ${comp}`);
|
|
1164
|
+
this.operator = m[1] !== void 0 ? m[1] : "";
|
|
1165
|
+
if (this.operator === "=") this.operator = "";
|
|
1166
|
+
if (!m[2]) this.semver = ANY;
|
|
1167
|
+
else this.semver = new SemVer(m[2], this.options.loose);
|
|
1168
|
+
}
|
|
1169
|
+
toString() {
|
|
1170
|
+
return this.value;
|
|
1171
|
+
}
|
|
1172
|
+
test(version) {
|
|
1173
|
+
debug("Comparator.test", version, this.options.loose);
|
|
1174
|
+
if (this.semver === ANY || version === ANY) return true;
|
|
1175
|
+
if (typeof version === "string") try {
|
|
1176
|
+
version = new SemVer(version, this.options);
|
|
1177
|
+
} catch (er) {
|
|
1178
|
+
return false;
|
|
1179
|
+
}
|
|
1180
|
+
return cmp(version, this.operator, this.semver, this.options);
|
|
1181
|
+
}
|
|
1182
|
+
intersects(comp, options) {
|
|
1183
|
+
if (!(comp instanceof Comparator)) throw new TypeError("a Comparator is required");
|
|
1184
|
+
if (this.operator === "") {
|
|
1185
|
+
if (this.value === "") return true;
|
|
1186
|
+
return new Range(comp.value, options).test(this.value);
|
|
1187
|
+
} else if (comp.operator === "") {
|
|
1188
|
+
if (comp.value === "") return true;
|
|
1189
|
+
return new Range(this.value, options).test(comp.semver);
|
|
1190
|
+
}
|
|
1191
|
+
options = parseOptions(options);
|
|
1192
|
+
if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) return false;
|
|
1193
|
+
if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) return false;
|
|
1194
|
+
if (this.operator.startsWith(">") && comp.operator.startsWith(">")) return true;
|
|
1195
|
+
if (this.operator.startsWith("<") && comp.operator.startsWith("<")) return true;
|
|
1196
|
+
if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) return true;
|
|
1197
|
+
if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) return true;
|
|
1198
|
+
if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) return true;
|
|
1199
|
+
return false;
|
|
1200
|
+
}
|
|
1201
|
+
};
|
|
1202
|
+
var parseOptions = require_parse_options();
|
|
1203
|
+
var { safeRe: re, t } = require_re();
|
|
1204
|
+
var cmp = require_cmp();
|
|
1205
|
+
var debug = require_debug();
|
|
1206
|
+
var SemVer = require_semver$1();
|
|
1207
|
+
var Range = require_range();
|
|
1208
|
+
}));
|
|
1209
|
+
//#endregion
|
|
1210
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js
|
|
1211
|
+
var require_satisfies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1212
|
+
var Range = require_range();
|
|
1213
|
+
var satisfies = (version, range, options) => {
|
|
1214
|
+
try {
|
|
1215
|
+
range = new Range(range, options);
|
|
1216
|
+
} catch (er) {
|
|
1217
|
+
return false;
|
|
1218
|
+
}
|
|
1219
|
+
return range.test(version);
|
|
1220
|
+
};
|
|
1221
|
+
module.exports = satisfies;
|
|
1222
|
+
}));
|
|
1223
|
+
//#endregion
|
|
1224
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/to-comparators.js
|
|
1225
|
+
var require_to_comparators = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1226
|
+
var Range = require_range();
|
|
1227
|
+
var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" "));
|
|
1228
|
+
module.exports = toComparators;
|
|
1229
|
+
}));
|
|
1230
|
+
//#endregion
|
|
1231
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/max-satisfying.js
|
|
1232
|
+
var require_max_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1233
|
+
var SemVer = require_semver$1();
|
|
1234
|
+
var Range = require_range();
|
|
1235
|
+
var maxSatisfying = (versions, range, options) => {
|
|
1236
|
+
let max = null;
|
|
1237
|
+
let maxSV = null;
|
|
1238
|
+
let rangeObj = null;
|
|
1239
|
+
try {
|
|
1240
|
+
rangeObj = new Range(range, options);
|
|
1241
|
+
} catch (er) {
|
|
1242
|
+
return null;
|
|
1243
|
+
}
|
|
1244
|
+
versions.forEach((v) => {
|
|
1245
|
+
if (rangeObj.test(v)) {
|
|
1246
|
+
if (!max || maxSV.compare(v) === -1) {
|
|
1247
|
+
max = v;
|
|
1248
|
+
maxSV = new SemVer(max, options);
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
});
|
|
1252
|
+
return max;
|
|
1253
|
+
};
|
|
1254
|
+
module.exports = maxSatisfying;
|
|
1255
|
+
}));
|
|
1256
|
+
//#endregion
|
|
1257
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-satisfying.js
|
|
1258
|
+
var require_min_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1259
|
+
var SemVer = require_semver$1();
|
|
1260
|
+
var Range = require_range();
|
|
1261
|
+
var minSatisfying = (versions, range, options) => {
|
|
1262
|
+
let min = null;
|
|
1263
|
+
let minSV = null;
|
|
1264
|
+
let rangeObj = null;
|
|
1265
|
+
try {
|
|
1266
|
+
rangeObj = new Range(range, options);
|
|
1267
|
+
} catch (er) {
|
|
1268
|
+
return null;
|
|
1269
|
+
}
|
|
1270
|
+
versions.forEach((v) => {
|
|
1271
|
+
if (rangeObj.test(v)) {
|
|
1272
|
+
if (!min || minSV.compare(v) === 1) {
|
|
1273
|
+
min = v;
|
|
1274
|
+
minSV = new SemVer(min, options);
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
});
|
|
1278
|
+
return min;
|
|
1279
|
+
};
|
|
1280
|
+
module.exports = minSatisfying;
|
|
1281
|
+
}));
|
|
1282
|
+
//#endregion
|
|
1283
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/min-version.js
|
|
1284
|
+
var require_min_version = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1285
|
+
var SemVer = require_semver$1();
|
|
1286
|
+
var Range = require_range();
|
|
1287
|
+
var gt = require_gt();
|
|
1288
|
+
var minVersion = (range, loose) => {
|
|
1289
|
+
range = new Range(range, loose);
|
|
1290
|
+
let minver = new SemVer("0.0.0");
|
|
1291
|
+
if (range.test(minver)) return minver;
|
|
1292
|
+
minver = new SemVer("0.0.0-0");
|
|
1293
|
+
if (range.test(minver)) return minver;
|
|
1294
|
+
minver = null;
|
|
1295
|
+
for (let i = 0; i < range.set.length; ++i) {
|
|
1296
|
+
const comparators = range.set[i];
|
|
1297
|
+
let setMin = null;
|
|
1298
|
+
comparators.forEach((comparator) => {
|
|
1299
|
+
const compver = new SemVer(comparator.semver.version);
|
|
1300
|
+
switch (comparator.operator) {
|
|
1301
|
+
case ">":
|
|
1302
|
+
if (compver.prerelease.length === 0) compver.patch++;
|
|
1303
|
+
else compver.prerelease.push(0);
|
|
1304
|
+
compver.raw = compver.format();
|
|
1305
|
+
case "":
|
|
1306
|
+
case ">=":
|
|
1307
|
+
if (!setMin || gt(compver, setMin)) setMin = compver;
|
|
1308
|
+
break;
|
|
1309
|
+
case "<":
|
|
1310
|
+
case "<=": break;
|
|
1311
|
+
default: throw new Error(`Unexpected operation: ${comparator.operator}`);
|
|
1312
|
+
}
|
|
1313
|
+
});
|
|
1314
|
+
if (setMin && (!minver || gt(minver, setMin))) minver = setMin;
|
|
1315
|
+
}
|
|
1316
|
+
if (minver && range.test(minver)) return minver;
|
|
1317
|
+
return null;
|
|
1318
|
+
};
|
|
1319
|
+
module.exports = minVersion;
|
|
1320
|
+
}));
|
|
1321
|
+
//#endregion
|
|
1322
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/valid.js
|
|
1323
|
+
var require_valid = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1324
|
+
var Range = require_range();
|
|
1325
|
+
var validRange = (range, options) => {
|
|
1326
|
+
try {
|
|
1327
|
+
return new Range(range, options).range || "*";
|
|
1328
|
+
} catch (er) {
|
|
1329
|
+
return null;
|
|
1330
|
+
}
|
|
1331
|
+
};
|
|
1332
|
+
module.exports = validRange;
|
|
1333
|
+
}));
|
|
1334
|
+
//#endregion
|
|
1335
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/outside.js
|
|
1336
|
+
var require_outside = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1337
|
+
var SemVer = require_semver$1();
|
|
1338
|
+
var Comparator = require_comparator();
|
|
1339
|
+
var { ANY } = Comparator;
|
|
1340
|
+
var Range = require_range();
|
|
1341
|
+
var satisfies = require_satisfies();
|
|
1342
|
+
var gt = require_gt();
|
|
1343
|
+
var lt = require_lt();
|
|
1344
|
+
var lte = require_lte();
|
|
1345
|
+
var gte = require_gte();
|
|
1346
|
+
var outside = (version, range, hilo, options) => {
|
|
1347
|
+
version = new SemVer(version, options);
|
|
1348
|
+
range = new Range(range, options);
|
|
1349
|
+
let gtfn, ltefn, ltfn, comp, ecomp;
|
|
1350
|
+
switch (hilo) {
|
|
1351
|
+
case ">":
|
|
1352
|
+
gtfn = gt;
|
|
1353
|
+
ltefn = lte;
|
|
1354
|
+
ltfn = lt;
|
|
1355
|
+
comp = ">";
|
|
1356
|
+
ecomp = ">=";
|
|
1357
|
+
break;
|
|
1358
|
+
case "<":
|
|
1359
|
+
gtfn = lt;
|
|
1360
|
+
ltefn = gte;
|
|
1361
|
+
ltfn = gt;
|
|
1362
|
+
comp = "<";
|
|
1363
|
+
ecomp = "<=";
|
|
1364
|
+
break;
|
|
1365
|
+
default: throw new TypeError("Must provide a hilo val of \"<\" or \">\"");
|
|
1366
|
+
}
|
|
1367
|
+
if (satisfies(version, range, options)) return false;
|
|
1368
|
+
for (let i = 0; i < range.set.length; ++i) {
|
|
1369
|
+
const comparators = range.set[i];
|
|
1370
|
+
let high = null;
|
|
1371
|
+
let low = null;
|
|
1372
|
+
comparators.forEach((comparator) => {
|
|
1373
|
+
if (comparator.semver === ANY) comparator = new Comparator(">=0.0.0");
|
|
1374
|
+
high = high || comparator;
|
|
1375
|
+
low = low || comparator;
|
|
1376
|
+
if (gtfn(comparator.semver, high.semver, options)) high = comparator;
|
|
1377
|
+
else if (ltfn(comparator.semver, low.semver, options)) low = comparator;
|
|
1378
|
+
});
|
|
1379
|
+
if (high.operator === comp || high.operator === ecomp) return false;
|
|
1380
|
+
if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) return false;
|
|
1381
|
+
else if (low.operator === ecomp && ltfn(version, low.semver)) return false;
|
|
1382
|
+
}
|
|
1383
|
+
return true;
|
|
1384
|
+
};
|
|
1385
|
+
module.exports = outside;
|
|
1386
|
+
}));
|
|
1387
|
+
//#endregion
|
|
1388
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/gtr.js
|
|
1389
|
+
var require_gtr = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1390
|
+
var outside = require_outside();
|
|
1391
|
+
var gtr = (version, range, options) => outside(version, range, ">", options);
|
|
1392
|
+
module.exports = gtr;
|
|
1393
|
+
}));
|
|
1394
|
+
//#endregion
|
|
1395
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/ltr.js
|
|
1396
|
+
var require_ltr = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1397
|
+
var outside = require_outside();
|
|
1398
|
+
var ltr = (version, range, options) => outside(version, range, "<", options);
|
|
1399
|
+
module.exports = ltr;
|
|
1400
|
+
}));
|
|
1401
|
+
//#endregion
|
|
1402
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/intersects.js
|
|
1403
|
+
var require_intersects = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1404
|
+
var Range = require_range();
|
|
1405
|
+
var intersects = (r1, r2, options) => {
|
|
1406
|
+
r1 = new Range(r1, options);
|
|
1407
|
+
r2 = new Range(r2, options);
|
|
1408
|
+
return r1.intersects(r2, options);
|
|
1409
|
+
};
|
|
1410
|
+
module.exports = intersects;
|
|
1411
|
+
}));
|
|
1412
|
+
//#endregion
|
|
1413
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/simplify.js
|
|
1414
|
+
var require_simplify = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1415
|
+
var satisfies = require_satisfies();
|
|
1416
|
+
var compare = require_compare();
|
|
1417
|
+
module.exports = (versions, range, options) => {
|
|
1418
|
+
const set = [];
|
|
1419
|
+
let first = null;
|
|
1420
|
+
let prev = null;
|
|
1421
|
+
const v = versions.sort((a, b) => compare(a, b, options));
|
|
1422
|
+
for (const version of v) if (satisfies(version, range, options)) {
|
|
1423
|
+
prev = version;
|
|
1424
|
+
if (!first) first = version;
|
|
1425
|
+
} else {
|
|
1426
|
+
if (prev) set.push([first, prev]);
|
|
1427
|
+
prev = null;
|
|
1428
|
+
first = null;
|
|
1429
|
+
}
|
|
1430
|
+
if (first) set.push([first, null]);
|
|
1431
|
+
const ranges = [];
|
|
1432
|
+
for (const [min, max] of set) if (min === max) ranges.push(min);
|
|
1433
|
+
else if (!max && min === v[0]) ranges.push("*");
|
|
1434
|
+
else if (!max) ranges.push(`>=${min}`);
|
|
1435
|
+
else if (min === v[0]) ranges.push(`<=${max}`);
|
|
1436
|
+
else ranges.push(`${min} - ${max}`);
|
|
1437
|
+
const simplified = ranges.join(" || ");
|
|
1438
|
+
const original = typeof range.raw === "string" ? range.raw : String(range);
|
|
1439
|
+
return simplified.length < original.length ? simplified : range;
|
|
1440
|
+
};
|
|
1441
|
+
}));
|
|
1442
|
+
//#endregion
|
|
1443
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/ranges/subset.js
|
|
1444
|
+
var require_subset = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1445
|
+
var Range = require_range();
|
|
1446
|
+
var Comparator = require_comparator();
|
|
1447
|
+
var { ANY } = Comparator;
|
|
1448
|
+
var satisfies = require_satisfies();
|
|
1449
|
+
var compare = require_compare();
|
|
1450
|
+
var subset = (sub, dom, options = {}) => {
|
|
1451
|
+
if (sub === dom) return true;
|
|
1452
|
+
sub = new Range(sub, options);
|
|
1453
|
+
dom = new Range(dom, options);
|
|
1454
|
+
let sawNonNull = false;
|
|
1455
|
+
OUTER: for (const simpleSub of sub.set) {
|
|
1456
|
+
for (const simpleDom of dom.set) {
|
|
1457
|
+
const isSub = simpleSubset(simpleSub, simpleDom, options);
|
|
1458
|
+
sawNonNull = sawNonNull || isSub !== null;
|
|
1459
|
+
if (isSub) continue OUTER;
|
|
1460
|
+
}
|
|
1461
|
+
if (sawNonNull) return false;
|
|
1462
|
+
}
|
|
1463
|
+
return true;
|
|
1464
|
+
};
|
|
1465
|
+
var minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")];
|
|
1466
|
+
var minimumVersion = [new Comparator(">=0.0.0")];
|
|
1467
|
+
var simpleSubset = (sub, dom, options) => {
|
|
1468
|
+
if (sub === dom) return true;
|
|
1469
|
+
if (sub.length === 1 && sub[0].semver === ANY) if (dom.length === 1 && dom[0].semver === ANY) return true;
|
|
1470
|
+
else if (options.includePrerelease) sub = minimumVersionWithPreRelease;
|
|
1471
|
+
else sub = minimumVersion;
|
|
1472
|
+
if (dom.length === 1 && dom[0].semver === ANY) if (options.includePrerelease) return true;
|
|
1473
|
+
else dom = minimumVersion;
|
|
1474
|
+
const eqSet = /* @__PURE__ */ new Set();
|
|
1475
|
+
let gt, lt;
|
|
1476
|
+
for (const c of sub) if (c.operator === ">" || c.operator === ">=") gt = higherGT(gt, c, options);
|
|
1477
|
+
else if (c.operator === "<" || c.operator === "<=") lt = lowerLT(lt, c, options);
|
|
1478
|
+
else eqSet.add(c.semver);
|
|
1479
|
+
if (eqSet.size > 1) return null;
|
|
1480
|
+
let gtltComp;
|
|
1481
|
+
if (gt && lt) {
|
|
1482
|
+
gtltComp = compare(gt.semver, lt.semver, options);
|
|
1483
|
+
if (gtltComp > 0) return null;
|
|
1484
|
+
else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<=")) return null;
|
|
1485
|
+
}
|
|
1486
|
+
for (const eq of eqSet) {
|
|
1487
|
+
if (gt && !satisfies(eq, String(gt), options)) return null;
|
|
1488
|
+
if (lt && !satisfies(eq, String(lt), options)) return null;
|
|
1489
|
+
for (const c of dom) if (!satisfies(eq, String(c), options)) return false;
|
|
1490
|
+
return true;
|
|
1491
|
+
}
|
|
1492
|
+
let higher, lower;
|
|
1493
|
+
let hasDomLT, hasDomGT;
|
|
1494
|
+
let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;
|
|
1495
|
+
let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;
|
|
1496
|
+
if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) needDomLTPre = false;
|
|
1497
|
+
for (const c of dom) {
|
|
1498
|
+
hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
|
|
1499
|
+
hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
|
|
1500
|
+
if (gt) {
|
|
1501
|
+
if (needDomGTPre) {
|
|
1502
|
+
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;
|
|
1503
|
+
}
|
|
1504
|
+
if (c.operator === ">" || c.operator === ">=") {
|
|
1505
|
+
higher = higherGT(gt, c, options);
|
|
1506
|
+
if (higher === c && higher !== gt) return false;
|
|
1507
|
+
} else if (gt.operator === ">=" && !satisfies(gt.semver, String(c), options)) return false;
|
|
1508
|
+
}
|
|
1509
|
+
if (lt) {
|
|
1510
|
+
if (needDomLTPre) {
|
|
1511
|
+
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;
|
|
1512
|
+
}
|
|
1513
|
+
if (c.operator === "<" || c.operator === "<=") {
|
|
1514
|
+
lower = lowerLT(lt, c, options);
|
|
1515
|
+
if (lower === c && lower !== lt) return false;
|
|
1516
|
+
} else if (lt.operator === "<=" && !satisfies(lt.semver, String(c), options)) return false;
|
|
1517
|
+
}
|
|
1518
|
+
if (!c.operator && (lt || gt) && gtltComp !== 0) return false;
|
|
1519
|
+
}
|
|
1520
|
+
if (gt && hasDomLT && !lt && gtltComp !== 0) return false;
|
|
1521
|
+
if (lt && hasDomGT && !gt && gtltComp !== 0) return false;
|
|
1522
|
+
if (needDomGTPre || needDomLTPre) return false;
|
|
1523
|
+
return true;
|
|
1524
|
+
};
|
|
1525
|
+
var higherGT = (a, b, options) => {
|
|
1526
|
+
if (!a) return b;
|
|
1527
|
+
const comp = compare(a.semver, b.semver, options);
|
|
1528
|
+
return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a;
|
|
1529
|
+
};
|
|
1530
|
+
var lowerLT = (a, b, options) => {
|
|
1531
|
+
if (!a) return b;
|
|
1532
|
+
const comp = compare(a.semver, b.semver, options);
|
|
1533
|
+
return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a;
|
|
1534
|
+
};
|
|
1535
|
+
module.exports = subset;
|
|
1536
|
+
}));
|
|
1537
|
+
//#endregion
|
|
1538
|
+
//#region node_modules/.pnpm/semver@7.7.4/node_modules/semver/index.js
|
|
1539
|
+
var require_semver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
1540
|
+
var internalRe = require_re();
|
|
1541
|
+
var constants = require_constants();
|
|
1542
|
+
var SemVer = require_semver$1();
|
|
1543
|
+
var identifiers = require_identifiers();
|
|
1544
|
+
module.exports = {
|
|
1545
|
+
parse: require_parse(),
|
|
1546
|
+
valid: require_valid$1(),
|
|
1547
|
+
clean: require_clean(),
|
|
1548
|
+
inc: require_inc(),
|
|
1549
|
+
diff: require_diff(),
|
|
1550
|
+
major: require_major(),
|
|
1551
|
+
minor: require_minor(),
|
|
1552
|
+
patch: require_patch(),
|
|
1553
|
+
prerelease: require_prerelease(),
|
|
1554
|
+
compare: require_compare(),
|
|
1555
|
+
rcompare: require_rcompare(),
|
|
1556
|
+
compareLoose: require_compare_loose(),
|
|
1557
|
+
compareBuild: require_compare_build(),
|
|
1558
|
+
sort: require_sort(),
|
|
1559
|
+
rsort: require_rsort(),
|
|
1560
|
+
gt: require_gt(),
|
|
1561
|
+
lt: require_lt(),
|
|
1562
|
+
eq: require_eq(),
|
|
1563
|
+
neq: require_neq(),
|
|
1564
|
+
gte: require_gte(),
|
|
1565
|
+
lte: require_lte(),
|
|
1566
|
+
cmp: require_cmp(),
|
|
1567
|
+
coerce: require_coerce(),
|
|
1568
|
+
Comparator: require_comparator(),
|
|
1569
|
+
Range: require_range(),
|
|
1570
|
+
satisfies: require_satisfies(),
|
|
1571
|
+
toComparators: require_to_comparators(),
|
|
1572
|
+
maxSatisfying: require_max_satisfying(),
|
|
1573
|
+
minSatisfying: require_min_satisfying(),
|
|
1574
|
+
minVersion: require_min_version(),
|
|
1575
|
+
validRange: require_valid(),
|
|
1576
|
+
outside: require_outside(),
|
|
1577
|
+
gtr: require_gtr(),
|
|
1578
|
+
ltr: require_ltr(),
|
|
1579
|
+
intersects: require_intersects(),
|
|
1580
|
+
simplifyRange: require_simplify(),
|
|
1581
|
+
subset: require_subset(),
|
|
1582
|
+
SemVer,
|
|
1583
|
+
re: internalRe.re,
|
|
1584
|
+
src: internalRe.src,
|
|
1585
|
+
tokens: internalRe.t,
|
|
1586
|
+
SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
|
|
1587
|
+
RELEASE_TYPES: constants.RELEASE_TYPES,
|
|
1588
|
+
compareIdentifiers: identifiers.compareIdentifiers,
|
|
1589
|
+
rcompareIdentifiers: identifiers.rcompareIdentifiers
|
|
1590
|
+
};
|
|
1591
|
+
}));
|
|
1592
|
+
//#endregion
|
|
1593
|
+
//#region src/registry.ts
|
|
1594
|
+
var registry_exports = /* @__PURE__ */ __exportAll({
|
|
1595
|
+
buildVersionList: () => buildVersionList,
|
|
1596
|
+
fetchPackageMetadata: () => fetchPackageMetadata
|
|
1597
|
+
});
|
|
1598
|
+
/**
|
|
1599
|
+
* Fetch package metadata from registry with retry logic.
|
|
1600
|
+
*/
|
|
1601
|
+
async function fetchPackageMetadata(pkgName, options = {}) {
|
|
1602
|
+
const maxRetries = options.maxRetries ?? 3;
|
|
1603
|
+
const baseDelay = options.baseDelay ?? 1e3;
|
|
1604
|
+
const maxDelay = options.maxDelay ?? 1e4;
|
|
1605
|
+
const timeout = options.timeout ?? 1e4;
|
|
1606
|
+
let lastError;
|
|
1607
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) try {
|
|
1608
|
+
const url = `${REGISTRY}/${encodeURIComponent(pkgName)}`;
|
|
1609
|
+
const res = await fetch(url, {
|
|
1610
|
+
headers: { accept: "application/json" },
|
|
1611
|
+
signal: AbortSignal.timeout(timeout)
|
|
1612
|
+
});
|
|
1613
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
1614
|
+
return res.json();
|
|
1615
|
+
} catch (err) {
|
|
1616
|
+
lastError = err;
|
|
1617
|
+
if (attempt < maxRetries - 1) {
|
|
1618
|
+
const delay = Math.min(baseDelay * Math.pow(2, attempt), maxDelay);
|
|
1619
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
1620
|
+
}
|
|
1621
|
+
}
|
|
1622
|
+
throw new Error(`Failed after ${maxRetries} attempts: ${lastError?.message}`);
|
|
1623
|
+
}
|
|
1624
|
+
/**
|
|
1625
|
+
* Build version list from registry data.
|
|
1626
|
+
*/
|
|
1627
|
+
function buildVersionList(data) {
|
|
1628
|
+
return Object.entries(data.time || {}).filter(([v]) => v !== "created" && v !== "modified").map(([v, t]) => ({
|
|
1629
|
+
version: v,
|
|
1630
|
+
time: new Date(t).getTime()
|
|
1631
|
+
})).filter((v) => !Number.isNaN(v.time)).sort((a, b) => b.time - a.time);
|
|
1632
|
+
}
|
|
1633
|
+
var init_registry = __esmMin((() => {
|
|
1634
|
+
init_constants();
|
|
1635
|
+
}));
|
|
1636
|
+
//#endregion
|
|
1637
|
+
//#region src/version.ts
|
|
1638
|
+
var import_semver = /* @__PURE__ */ __toESM(require_semver(), 1);
|
|
1639
|
+
init_registry();
|
|
1640
|
+
init_constants();
|
|
1641
|
+
/**
|
|
1642
|
+
* Parse a simple semver string into components.
|
|
1643
|
+
* Returns null for invalid or complex prerelease strings.
|
|
1644
|
+
*/
|
|
1645
|
+
function parseSemver(version) {
|
|
1646
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/);
|
|
1647
|
+
if (!match) return null;
|
|
1648
|
+
return {
|
|
1649
|
+
major: parseInt(match[1], 10),
|
|
1650
|
+
minor: parseInt(match[2], 10),
|
|
1651
|
+
patch: parseInt(match[3], 10),
|
|
1652
|
+
prerelease: match[4] || null,
|
|
1653
|
+
build: match[5] || null,
|
|
1654
|
+
raw: version
|
|
1655
|
+
};
|
|
1656
|
+
}
|
|
1657
|
+
/**
|
|
1658
|
+
* Determine if snpx should intercept version resolution based on package spec.
|
|
1659
|
+
* - Exact version (1.5.0) → do not intercept (user knows what they're doing)
|
|
1660
|
+
* - Range (^1.0.0, >=1.5) → intercept (uncertainty needs protection)
|
|
1661
|
+
* - latest → intercept
|
|
1662
|
+
* - No version → intercept
|
|
1663
|
+
*/
|
|
1664
|
+
function shouldIntercept(pkgSpec) {
|
|
1665
|
+
if (!pkgSpec) return false;
|
|
1666
|
+
let versionPart;
|
|
1667
|
+
if (pkgSpec.startsWith("@")) {
|
|
1668
|
+
const secondAt = pkgSpec.indexOf("@", 1);
|
|
1669
|
+
versionPart = secondAt === -1 ? null : pkgSpec.slice(secondAt + 1);
|
|
1670
|
+
} else {
|
|
1671
|
+
const atIndex = pkgSpec.indexOf("@");
|
|
1672
|
+
versionPart = atIndex === -1 ? null : pkgSpec.slice(atIndex + 1);
|
|
1673
|
+
}
|
|
1674
|
+
if (!versionPart) return true;
|
|
1675
|
+
if (versionPart === "latest") return true;
|
|
1676
|
+
if (import_semver.default.valid(versionPart)) return false;
|
|
1677
|
+
if (import_semver.default.validRange(versionPart)) return true;
|
|
1678
|
+
return true;
|
|
1679
|
+
}
|
|
1680
|
+
/**
|
|
1681
|
+
* Find patch fallback version (immediately before latest).
|
|
1682
|
+
*/
|
|
1683
|
+
function findPatchFallback(versions, latestVersion) {
|
|
1684
|
+
const idx = versions.findIndex((v) => v.version === latestVersion);
|
|
1685
|
+
if (idx === -1 || idx + 1 >= versions.length) return null;
|
|
1686
|
+
return versions[idx + 1];
|
|
1687
|
+
}
|
|
1688
|
+
/**
|
|
1689
|
+
* Find minor fallback version (previous minor line).
|
|
1690
|
+
*/
|
|
1691
|
+
function findMinorFallback(versions, latestParsed) {
|
|
1692
|
+
for (const v of versions) {
|
|
1693
|
+
const p = parseSemver(v.version);
|
|
1694
|
+
if (p && p.major === latestParsed.major && p.minor < latestParsed.minor) return v;
|
|
1695
|
+
}
|
|
1696
|
+
return null;
|
|
1697
|
+
}
|
|
1698
|
+
/**
|
|
1699
|
+
* Find major fallback version (previous major line).
|
|
1700
|
+
*/
|
|
1701
|
+
function findMajorFallback(versions, latestParsed) {
|
|
1702
|
+
for (const v of versions) {
|
|
1703
|
+
const p = parseSemver(v.version);
|
|
1704
|
+
if (p && p.major < latestParsed.major) return v;
|
|
1705
|
+
}
|
|
1706
|
+
return null;
|
|
1707
|
+
}
|
|
1708
|
+
/**
|
|
1709
|
+
* Resolve a safe version for the package.
|
|
1710
|
+
*
|
|
1711
|
+
* @param pkgName - Package name
|
|
1712
|
+
* @param options - Resolution options
|
|
1713
|
+
* @param options.timeMs - Safety window in milliseconds (default: 24h)
|
|
1714
|
+
* @param options.strategy - Fallback order, e.g. ['patch','minor','major']
|
|
1715
|
+
*/
|
|
1716
|
+
async function resolveSafeVersion(pkgName, options = {}) {
|
|
1717
|
+
const timeMs = options.timeMs ?? 24 * 36e5;
|
|
1718
|
+
const strategy = options.strategy ?? "patch,minor,major".split(",").map((s) => s.trim());
|
|
1719
|
+
const data = await fetchPackageMetadata(pkgName);
|
|
1720
|
+
const latestVersion = data["dist-tags"]?.latest;
|
|
1721
|
+
if (!latestVersion) throw new Error("No latest tag found");
|
|
1722
|
+
const latestTimeStr = data.time?.[latestVersion];
|
|
1723
|
+
const latestTime = latestTimeStr ? new Date(latestTimeStr).getTime() : null;
|
|
1724
|
+
if (!latestTime) throw new Error(`Registry did not provide a publish time for ${pkgName}@${latestVersion}. Cannot verify safety window.`);
|
|
1725
|
+
if (Date.now() - latestTime >= timeMs) return latestVersion;
|
|
1726
|
+
const versions = buildVersionList(data);
|
|
1727
|
+
const latestParsed = parseSemver(latestVersion);
|
|
1728
|
+
if (!latestParsed) throw new Error(`Unable to parse latest version ${latestVersion}`);
|
|
1729
|
+
for (const strat of strategy) {
|
|
1730
|
+
let candidate = null;
|
|
1731
|
+
if (strat === "patch") candidate = findPatchFallback(versions, latestVersion);
|
|
1732
|
+
else if (strat === "minor") candidate = findMinorFallback(versions, latestParsed);
|
|
1733
|
+
else if (strat === "major") candidate = findMajorFallback(versions, latestParsed);
|
|
1734
|
+
if (candidate && Date.now() - candidate.time >= timeMs) return candidate.version;
|
|
1735
|
+
}
|
|
1736
|
+
throw new Error(`Could not find a safe version for ${pkgName} within strategy [${strategy.join(",")}] and time window ${Math.floor(timeMs / MS_PER_HOUR)}h`);
|
|
1737
|
+
}
|
|
1738
|
+
/**
|
|
1739
|
+
* Check if snpx itself has an update available.
|
|
1740
|
+
* Returns { hasUpdate: boolean, currentVersion: string, latestVersion: string|null }
|
|
1741
|
+
*/
|
|
1742
|
+
async function checkSelfUpdate() {
|
|
1743
|
+
try {
|
|
1744
|
+
const latest = (await fetchPackageMetadata(PKG_NAME))["dist-tags"]?.latest;
|
|
1745
|
+
if (!latest) return {
|
|
1746
|
+
hasUpdate: false,
|
|
1747
|
+
currentVersion: VERSION,
|
|
1748
|
+
latestVersion: null
|
|
1749
|
+
};
|
|
1750
|
+
return {
|
|
1751
|
+
hasUpdate: latest !== VERSION,
|
|
1752
|
+
currentVersion: VERSION,
|
|
1753
|
+
latestVersion: latest
|
|
1754
|
+
};
|
|
1755
|
+
} catch {
|
|
1756
|
+
return {
|
|
1757
|
+
hasUpdate: false,
|
|
1758
|
+
currentVersion: VERSION,
|
|
1759
|
+
latestVersion: null
|
|
1760
|
+
};
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
//#endregion
|
|
1764
|
+
//#region src/cache.ts
|
|
1765
|
+
init_constants();
|
|
1766
|
+
/**
|
|
1767
|
+
* Read cached version if valid.
|
|
1768
|
+
* Cache TTL now follows the safety window (timeMs).
|
|
1769
|
+
*/
|
|
1770
|
+
function getCachedVersion(pkgName, ttlMs = 24 * MS_PER_HOUR) {
|
|
1771
|
+
const cacheFile = join(CACHE_DIR, `${pkgName.replaceAll("/", "--")}.json`);
|
|
1772
|
+
if (!existsSync(cacheFile)) return null;
|
|
1773
|
+
try {
|
|
1774
|
+
const data = JSON.parse(readFileSync(cacheFile, "utf8"));
|
|
1775
|
+
if (Date.now() - (data.resolvedAt || 0) > ttlMs) return null;
|
|
1776
|
+
return data.version;
|
|
1777
|
+
} catch {
|
|
1778
|
+
return null;
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
/**
|
|
1782
|
+
* Write version to cache atomically to prevent corruption during concurrent writes.
|
|
1783
|
+
*/
|
|
1784
|
+
function setCachedVersion(pkgName, version) {
|
|
1785
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
1786
|
+
const cacheFile = join(CACHE_DIR, `${pkgName.replaceAll("/", "--")}.json`);
|
|
1787
|
+
const tmpFile = `${cacheFile}.${process.pid}.${Date.now()}.tmp`;
|
|
1788
|
+
writeFileSync(tmpFile, JSON.stringify({
|
|
1789
|
+
version,
|
|
1790
|
+
resolvedAt: Date.now()
|
|
1791
|
+
}));
|
|
1792
|
+
renameSync(tmpFile, cacheFile);
|
|
1793
|
+
}
|
|
1794
|
+
//#endregion
|
|
1795
|
+
//#region src/index.ts
|
|
1796
|
+
/**
|
|
1797
|
+
* safe-npx (snpx) - Safe npx wrapper with configurable fallback strategy
|
|
1798
|
+
*/
|
|
1799
|
+
init_constants();
|
|
1800
|
+
init_registry();
|
|
1801
|
+
/**
|
|
1802
|
+
* Run npx with proper exit code handling.
|
|
1803
|
+
*/
|
|
1804
|
+
function runNpx(args) {
|
|
1805
|
+
return new Promise((resolve, reject) => {
|
|
1806
|
+
const child = spawn("npx", args, { stdio: "inherit" });
|
|
1807
|
+
child.on("close", (code) => {
|
|
1808
|
+
process.exitCode = code ?? 0;
|
|
1809
|
+
resolve();
|
|
1810
|
+
});
|
|
1811
|
+
child.on("error", reject);
|
|
1812
|
+
});
|
|
1813
|
+
}
|
|
1814
|
+
/**
|
|
1815
|
+
* Main entry
|
|
1816
|
+
*/
|
|
1817
|
+
async function main() {
|
|
1818
|
+
const { snpxFlags, pkgSpec, pkgName, npxPrefixArgs, restArgs } = parseArgs(process.argv);
|
|
1819
|
+
if (snpxFlags.help) {
|
|
1820
|
+
console.log(HELP_TEXT);
|
|
1821
|
+
return;
|
|
1822
|
+
}
|
|
1823
|
+
if (snpxFlags.version) {
|
|
1824
|
+
console.log(VERSION);
|
|
1825
|
+
return;
|
|
1826
|
+
}
|
|
1827
|
+
const { timeHours, timeMs, strategy } = buildOptions(snpxFlags);
|
|
1828
|
+
const selfUpdate = snpxFlags.selfUpdate;
|
|
1829
|
+
const unsafeSelfUpdate = snpxFlags.unsafeSelfUpdate;
|
|
1830
|
+
if (selfUpdate || unsafeSelfUpdate) {
|
|
1831
|
+
const unsafe = unsafeSelfUpdate;
|
|
1832
|
+
console.error(`[snpx] Checking for updates${unsafe ? " (unsafe mode)" : ""}...`);
|
|
1833
|
+
try {
|
|
1834
|
+
const { hasUpdate, currentVersion, latestVersion } = await checkSelfUpdate();
|
|
1835
|
+
if (!latestVersion) {
|
|
1836
|
+
console.error("[snpx] Could not check for updates. Try again later.");
|
|
1837
|
+
process.exit(1);
|
|
1838
|
+
}
|
|
1839
|
+
if (hasUpdate) {
|
|
1840
|
+
console.error(`[snpx] Update available: ${currentVersion} → ${latestVersion}`);
|
|
1841
|
+
console.error("[snpx] Run: npm update -g @lionad/safe-npx");
|
|
1842
|
+
if (!unsafe) {
|
|
1843
|
+
const { fetchPackageMetadata } = await Promise.resolve().then(() => (init_registry(), registry_exports));
|
|
1844
|
+
const { REGISTRY } = await Promise.resolve().then(() => (init_constants(), constants_exports));
|
|
1845
|
+
const latestTime = ((await fetchPackageMetadata("@lionad/safe-npx")).time || {})[latestVersion];
|
|
1846
|
+
if (latestTime) {
|
|
1847
|
+
const age = Date.now() - new Date(latestTime).getTime();
|
|
1848
|
+
if (age < timeMs) {
|
|
1849
|
+
console.error(`[snpx] Warning: Latest version is only ${Math.floor(age / MS_PER_HOUR)}h old. Waiting for ${timeHours}h safety window.`);
|
|
1850
|
+
console.error("[snpx] Use --unsafe-self-update to bypass (not recommended)");
|
|
1851
|
+
}
|
|
1852
|
+
}
|
|
1853
|
+
}
|
|
1854
|
+
} else console.error(`[snpx] Already up to date (${currentVersion})`);
|
|
1855
|
+
} catch (err) {
|
|
1856
|
+
console.error(`[snpx] Error checking for updates: ${err.message}`);
|
|
1857
|
+
process.exit(1);
|
|
1858
|
+
}
|
|
1859
|
+
return;
|
|
1860
|
+
}
|
|
1861
|
+
if (!pkgSpec || !pkgName) {
|
|
1862
|
+
await runNpx([...npxPrefixArgs, ...restArgs]);
|
|
1863
|
+
return;
|
|
1864
|
+
}
|
|
1865
|
+
if (!shouldIntercept(pkgSpec)) {
|
|
1866
|
+
await runNpx([
|
|
1867
|
+
...npxPrefixArgs,
|
|
1868
|
+
pkgSpec,
|
|
1869
|
+
...restArgs
|
|
1870
|
+
]);
|
|
1871
|
+
return;
|
|
1872
|
+
}
|
|
1873
|
+
let version = getCachedVersion(pkgName, timeMs);
|
|
1874
|
+
if (!version) {
|
|
1875
|
+
console.error(`[snpx] Resolving safe version for ${pkgName}...`);
|
|
1876
|
+
try {
|
|
1877
|
+
version = await resolveSafeVersion(pkgName, {
|
|
1878
|
+
timeMs,
|
|
1879
|
+
strategy
|
|
1880
|
+
});
|
|
1881
|
+
setCachedVersion(pkgName, version);
|
|
1882
|
+
console.error(`[snpx] Using ${pkgName}@${version} (strategy: ${strategy.join(",")}, window: ${timeHours}h)`);
|
|
1883
|
+
} catch (err) {
|
|
1884
|
+
console.error(`[snpx] Error: ${err.message}`);
|
|
1885
|
+
process.exit(1);
|
|
1886
|
+
}
|
|
1887
|
+
} else console.error(`[snpx] Using cached ${pkgName}@${version}`);
|
|
1888
|
+
if (snpxFlags.showVersion) {
|
|
1889
|
+
console.log(version);
|
|
1890
|
+
return;
|
|
1891
|
+
}
|
|
1892
|
+
await runNpx([`${pkgName}@${version}`, ...restArgs]);
|
|
1893
|
+
}
|
|
1894
|
+
main().catch((err) => {
|
|
1895
|
+
console.error(`[snpx] Fatal: ${err.message}`);
|
|
1896
|
+
process.exit(1);
|
|
1897
|
+
});
|
|
1898
|
+
//#endregion
|
|
1899
|
+
export { CACHE_DIR, DEFAULT_FALLBACK_STRATEGY, DEFAULT_TIME_HOURS, HELP_TEXT, MS_PER_HOUR, PKG_NAME, REGISTRY, VERSION, buildOptions, buildVersionList, checkSelfUpdate, fetchPackageMetadata, findMajorFallback, findMinorFallback, findPatchFallback, getCachedVersion, parseArgs, parseSemver, resolveSafeVersion, setCachedVersion, shouldIntercept };
|