mirror of
https://github.com/astral-sh/setup-uv.git
synced 2026-04-21 09:46:11 +00:00
Compare commits
1 Commits
v8.1.0
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
acf0f2500e |
4
.github/workflows/release-drafter.yml
vendored
4
.github/workflows/release-drafter.yml
vendored
@@ -19,8 +19,6 @@ jobs:
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: 🚀 Run Release Drafter
|
||||
uses: release-drafter/release-drafter@5de93583980a40bd78603b6dfdcda5b4df377b32 # v7.2.0
|
||||
with:
|
||||
commitish: ${{ github.sha }}
|
||||
uses: release-drafter/release-drafter@139054aeaa9adc52ab36ddf67437541f039b88e2 # v7.1.1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
113
.github/workflows/release.yml
vendored
113
.github/workflows/release.yml
vendored
@@ -1,113 +0,0 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: "Release version (e.g., 8.1.0)"
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
validate-release:
|
||||
name: Validate release
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Validate version and draft release
|
||||
env:
|
||||
GH_REPO: ${{ github.repository }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
VERSION: ${{ inputs.version }}
|
||||
TAG: v${{ inputs.version }}
|
||||
run: |
|
||||
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
||||
echo "::error::Version must match MAJOR.MINOR.PATCH (e.g., 8.1.0)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RELEASE_JSON=$(gh release view "$TAG" --json isDraft,targetCommitish 2>&1) || {
|
||||
echo "::error::No release found for $TAG"
|
||||
exit 1
|
||||
}
|
||||
|
||||
IS_DRAFT=$(echo "$RELEASE_JSON" | jq -r '.isDraft')
|
||||
TARGET=$(echo "$RELEASE_JSON" | jq -r '.targetCommitish')
|
||||
|
||||
if [[ "$IS_DRAFT" != "true" ]]; then
|
||||
echo "::error::Release $TAG already exists and is not a draft"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$TARGET" != "$GITHUB_SHA" ]]; then
|
||||
echo "::error::Draft release target ($TARGET) does not match current commit ($GITHUB_SHA)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
release-gate:
|
||||
# N.B. This name should not change, it is used for downstream checks.
|
||||
name: release-gate
|
||||
needs:
|
||||
- validate-release
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: release-gate
|
||||
steps:
|
||||
- run: echo "Release approved"
|
||||
|
||||
create-deployment:
|
||||
name: create-deployment
|
||||
needs:
|
||||
- validate-release
|
||||
- release-gate
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: release
|
||||
steps:
|
||||
- run: echo "Release deployment created"
|
||||
|
||||
release:
|
||||
name: Release
|
||||
needs:
|
||||
- validate-release
|
||||
- release-gate
|
||||
- create-deployment
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Publish release
|
||||
env:
|
||||
GH_REPO: ${{ github.repository }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
VERSION: ${{ inputs.version }}
|
||||
TAG: v${{ inputs.version }}
|
||||
run: |
|
||||
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
||||
echo "::error::Version must match MAJOR.MINOR.PATCH (e.g., 8.1.0)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RELEASE_JSON=$(gh release view "$TAG" --json isDraft,targetCommitish 2>&1) || {
|
||||
echo "::error::No release found for $TAG"
|
||||
exit 1
|
||||
}
|
||||
|
||||
IS_DRAFT=$(echo "$RELEASE_JSON" | jq -r '.isDraft')
|
||||
TARGET=$(echo "$RELEASE_JSON" | jq -r '.targetCommitish')
|
||||
|
||||
if [[ "$IS_DRAFT" != "true" ]]; then
|
||||
echo "::error::Release $TAG already exists and is not a draft"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$TARGET" != "$GITHUB_SHA" ]]; then
|
||||
echo "::error::Draft release target ($TARGET) does not match current commit ($GITHUB_SHA)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Publishing draft release $TAG"
|
||||
gh release edit "$TAG" --draft=false
|
||||
44
.github/workflows/test.yml
vendored
44
.github/workflows/test.yml
vendored
@@ -430,49 +430,6 @@ jobs:
|
||||
PY
|
||||
shell: bash
|
||||
|
||||
test-activate-environment-no-project:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Create incompatible pyproject.toml
|
||||
run: |
|
||||
cat > pyproject.toml <<'EOF'
|
||||
[project]
|
||||
name = "test-no-project"
|
||||
version = "0.1.0"
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"-e file:///${PROJECT_ROOT}/projects/pkg",
|
||||
]
|
||||
EOF
|
||||
shell: bash
|
||||
- name: Install latest version with no-project
|
||||
id: setup-uv
|
||||
uses: ./
|
||||
with:
|
||||
python-version: 3.13.1t
|
||||
activate-environment: true
|
||||
no-project: true
|
||||
- name: Verify packages can be installed
|
||||
run: uv pip install pip
|
||||
shell: bash
|
||||
- name: Verify output venv is set
|
||||
run: |
|
||||
if [ -z "$UV_VENV" ]; then
|
||||
echo "output venv is not set"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -d "$UV_VENV" ]; then
|
||||
echo "output venv not point to a directory: $UV_VENV"
|
||||
exit 1
|
||||
fi
|
||||
shell: bash
|
||||
env:
|
||||
UV_VENV: ${{ steps.setup-uv.outputs.venv }}
|
||||
|
||||
test-debian-unstable:
|
||||
runs-on: ubuntu-latest
|
||||
container: debian:unstable
|
||||
@@ -1100,7 +1057,6 @@ jobs:
|
||||
- test-python-version
|
||||
- test-activate-environment
|
||||
- test-activate-environment-custom-path
|
||||
- test-activate-environment-no-project
|
||||
- test-debian-unstable
|
||||
- test-musl
|
||||
- test-cache-key-os-version
|
||||
|
||||
@@ -7,7 +7,7 @@ This repository is a TypeScript-based GitHub Action for installing `uv` in GitHu
|
||||
1. `npm ci --ignore-scripts`
|
||||
2. `npm run all`
|
||||
- `npm run check` uses Biome (not ESLint/Prettier) and rewrites files in place.
|
||||
- User-facing changes are usually multi-file changes. If you add or change inputs, outputs, or behavior, update `action.yml`, `action-types.yml`, the implementation in `src/`, tests in `__tests__/`, relevant docs/README, and then re-package.
|
||||
- User-facing changes are usually multi-file changes. If you add or change inputs, outputs, or behavior, update `action.yml`, the implementation in `src/`, tests in `__tests__/`, relevant docs/README, and then re-package.
|
||||
- The easiest areas to regress are version resolution and caching. When touching them, add or update tests for precedence, cache invalidation, and cross-platform path behavior.
|
||||
- Workflow edits have extra CI-only checks (`actionlint` and `zizmor`); `npm run all` does not cover them.
|
||||
- Source is authored with bundler-friendly TypeScript, but published action artifacts in `dist/` are bundled as CommonJS for maximum GitHub Actions runtime compatibility with `@actions/*` dependencies.
|
||||
|
||||
@@ -62,9 +62,6 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
||||
# Custom path for the virtual environment when using activate-environment (default: .venv in the working directory)
|
||||
venv-path: ""
|
||||
|
||||
# Pass --no-project when creating the venv with activate-environment.
|
||||
no-project: "false"
|
||||
|
||||
# The directory to execute all commands in and look for files such as pyproject.toml
|
||||
working-directory: ""
|
||||
|
||||
|
||||
@@ -95,35 +95,6 @@ describe("download-version", () => {
|
||||
expect(mockGetAllVersions).toHaveBeenCalledWith(undefined);
|
||||
});
|
||||
|
||||
it("treats == exact pins as explicit versions", async () => {
|
||||
const version = await resolveVersion("==0.9.26", undefined);
|
||||
|
||||
expect(version).toBe("0.9.26");
|
||||
expect(mockGetAllVersions).not.toHaveBeenCalled();
|
||||
expect(mockGetLatestVersion).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("uses latest for minimum-only ranges when using the highest strategy", async () => {
|
||||
mockGetLatestVersion.mockResolvedValue("0.9.26");
|
||||
|
||||
const version = await resolveVersion(">=0.9.0", undefined, "highest");
|
||||
|
||||
expect(version).toBe("0.9.26");
|
||||
expect(mockGetLatestVersion).toHaveBeenCalledTimes(1);
|
||||
expect(mockGetLatestVersion).toHaveBeenCalledWith(undefined);
|
||||
expect(mockGetAllVersions).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("uses the lowest compatible version when requested", async () => {
|
||||
mockGetAllVersions.mockResolvedValue(["0.9.26", "0.9.25"]);
|
||||
|
||||
const version = await resolveVersion("^0.9.0", undefined, "lowest");
|
||||
|
||||
expect(version).toBe("0.9.25");
|
||||
expect(mockGetAllVersions).toHaveBeenCalledTimes(1);
|
||||
expect(mockGetAllVersions).toHaveBeenCalledWith(undefined);
|
||||
});
|
||||
|
||||
it("uses manifest-file when provided", async () => {
|
||||
mockGetAllVersions.mockResolvedValue(["0.9.26", "0.9.25"]);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { expect, test } from "@jest/globals";
|
||||
import { getUvVersionFromFile } from "../../src/version/file-parser";
|
||||
import { getUvVersionFromFile } from "../../src/version/resolve";
|
||||
|
||||
test("ignores dependencies starting with uv", async () => {
|
||||
const parsedVersion = getUvVersionFromFile(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { expect, test } from "@jest/globals";
|
||||
import { getUvVersionFromFile } from "../../src/version/file-parser";
|
||||
import { getUvVersionFromFile } from "../../src/version/resolve";
|
||||
|
||||
test("ignores dependencies starting with uv", async () => {
|
||||
const parsedVersion = getUvVersionFromFile(
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterEach, describe, expect, it } from "@jest/globals";
|
||||
import { resolveVersionRequest } from "../../src/version/version-request-resolver";
|
||||
|
||||
const tempDirs: string[] = [];
|
||||
|
||||
function createTempProject(files: Record<string, string> = {}): string {
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "setup-uv-version-test-"));
|
||||
tempDirs.push(dir);
|
||||
|
||||
for (const [relativePath, content] of Object.entries(files)) {
|
||||
const filePath = path.join(dir, relativePath);
|
||||
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
||||
fs.writeFileSync(filePath, content);
|
||||
}
|
||||
|
||||
return dir;
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
for (const dir of tempDirs.splice(0)) {
|
||||
fs.rmSync(dir, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
describe("resolveVersionRequest", () => {
|
||||
it("prefers explicit input over version-file and workspace config", () => {
|
||||
const workingDirectory = createTempProject({
|
||||
".tool-versions": "uv 0.4.0\n",
|
||||
"pyproject.toml": `[tool.uv]\nrequired-version = "==0.5.14"\n`,
|
||||
"uv.toml": `required-version = "==0.5.15"\n`,
|
||||
});
|
||||
|
||||
const request = resolveVersionRequest({
|
||||
version: "==0.6.0",
|
||||
versionFile: path.join(workingDirectory, ".tool-versions"),
|
||||
workingDirectory,
|
||||
});
|
||||
|
||||
expect(request).toEqual({
|
||||
source: "input",
|
||||
specifier: "0.6.0",
|
||||
});
|
||||
});
|
||||
|
||||
it("uses .tool-versions when it is passed via version-file", () => {
|
||||
const workingDirectory = createTempProject({
|
||||
".tool-versions": "uv 0.5.15\n",
|
||||
});
|
||||
|
||||
const request = resolveVersionRequest({
|
||||
versionFile: path.join(workingDirectory, ".tool-versions"),
|
||||
workingDirectory,
|
||||
});
|
||||
|
||||
expect(request).toEqual({
|
||||
format: ".tool-versions",
|
||||
source: "version-file",
|
||||
sourcePath: path.join(workingDirectory, ".tool-versions"),
|
||||
specifier: "0.5.15",
|
||||
});
|
||||
});
|
||||
|
||||
it("uses requirements.txt when it is passed via version-file", () => {
|
||||
const workingDirectory = createTempProject({
|
||||
"requirements.txt": "uv==0.6.17\nuvicorn==0.35.0\n",
|
||||
});
|
||||
|
||||
const request = resolveVersionRequest({
|
||||
versionFile: path.join(workingDirectory, "requirements.txt"),
|
||||
workingDirectory,
|
||||
});
|
||||
|
||||
expect(request).toEqual({
|
||||
format: "requirements",
|
||||
source: "version-file",
|
||||
sourcePath: path.join(workingDirectory, "requirements.txt"),
|
||||
specifier: "0.6.17",
|
||||
});
|
||||
});
|
||||
|
||||
it("prefers uv.toml over pyproject.toml during workspace discovery", () => {
|
||||
const workingDirectory = createTempProject({
|
||||
"pyproject.toml": `[tool.uv]\nrequired-version = "==0.5.14"\n`,
|
||||
"uv.toml": `required-version = "==0.5.15"\n`,
|
||||
});
|
||||
|
||||
const request = resolveVersionRequest({ workingDirectory });
|
||||
|
||||
expect(request).toEqual({
|
||||
format: "uv.toml",
|
||||
source: "uv.toml",
|
||||
sourcePath: path.join(workingDirectory, "uv.toml"),
|
||||
specifier: "0.5.15",
|
||||
});
|
||||
});
|
||||
|
||||
it("falls back to latest when no version source is found", () => {
|
||||
const workingDirectory = createTempProject({});
|
||||
|
||||
const request = resolveVersionRequest({ workingDirectory });
|
||||
|
||||
expect(request).toEqual({
|
||||
source: "default",
|
||||
specifier: "latest",
|
||||
});
|
||||
});
|
||||
|
||||
it("throws when version-file does not resolve a version", () => {
|
||||
const workingDirectory = createTempProject({
|
||||
"requirements.txt": "uvicorn==0.35.0\n",
|
||||
});
|
||||
|
||||
expect(() =>
|
||||
resolveVersionRequest({
|
||||
versionFile: path.join(workingDirectory, "requirements.txt"),
|
||||
workingDirectory,
|
||||
}),
|
||||
).toThrow(
|
||||
`Could not determine uv version from file: ${path.join(workingDirectory, "requirements.txt")}`,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -11,8 +11,6 @@ inputs:
|
||||
type: boolean
|
||||
venv-path:
|
||||
type: string
|
||||
no-project:
|
||||
type: boolean
|
||||
working-directory:
|
||||
type: string
|
||||
checksum:
|
||||
|
||||
@@ -18,9 +18,6 @@ inputs:
|
||||
venv-path:
|
||||
description: "Custom path for the virtual environment when using activate-environment. Defaults to '.venv' in the working directory."
|
||||
default: ""
|
||||
no-project:
|
||||
description: "Pass --no-project when creating the venv with activate-environment."
|
||||
default: "false"
|
||||
working-directory:
|
||||
description: "The directory to execute all commands in and look for files such as pyproject.toml"
|
||||
default: ${{ github.workspace }}
|
||||
|
||||
8
dist/save-cache/index.cjs
generated
vendored
8
dist/save-cache/index.cjs
generated
vendored
@@ -62947,12 +62947,6 @@ function getConfigValueFromTomlFile(filePath, key) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContent = import_node_fs2.default.readFileSync(filePath, "utf-8");
|
||||
return getConfigValueFromTomlContent(filePath, fileContent, key);
|
||||
}
|
||||
function getConfigValueFromTomlContent(filePath, fileContent, key) {
|
||||
if (!filePath.endsWith(".toml")) {
|
||||
return void 0;
|
||||
}
|
||||
if (filePath.endsWith("pyproject.toml")) {
|
||||
const tomlContent2 = parse2(fileContent);
|
||||
return tomlContent2?.tool?.uv?.[key];
|
||||
@@ -62968,7 +62962,6 @@ function loadInputs() {
|
||||
const versionFile = getVersionFile(workingDirectory);
|
||||
const pythonVersion = getInput("python-version");
|
||||
const activateEnvironment = getBooleanInput("activate-environment");
|
||||
const noProject = getBooleanInput("no-project");
|
||||
const venvPath = getVenvPath(workingDirectory, activateEnvironment);
|
||||
const checksum = getInput("checksum");
|
||||
const enableCache = getEnableCache();
|
||||
@@ -63005,7 +62998,6 @@ function loadInputs() {
|
||||
ignoreEmptyWorkdir,
|
||||
ignoreNothingToCache,
|
||||
manifestFile,
|
||||
noProject,
|
||||
pruneCache: pruneCache2,
|
||||
pythonDir,
|
||||
pythonVersion,
|
||||
|
||||
4776
dist/setup/index.cjs
generated
vendored
4776
dist/setup/index.cjs
generated
vendored
@@ -1068,14 +1068,14 @@ var require_util = __commonJS({
|
||||
}
|
||||
const port = url2.port != null ? url2.port : url2.protocol === "https:" ? 443 : 80;
|
||||
let origin = url2.origin != null ? url2.origin : `${url2.protocol || ""}//${url2.hostname || ""}:${port}`;
|
||||
let path17 = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
|
||||
let path16 = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
|
||||
if (origin[origin.length - 1] === "/") {
|
||||
origin = origin.slice(0, origin.length - 1);
|
||||
}
|
||||
if (path17 && path17[0] !== "/") {
|
||||
path17 = `/${path17}`;
|
||||
if (path16 && path16[0] !== "/") {
|
||||
path16 = `/${path16}`;
|
||||
}
|
||||
return new URL(`${origin}${path17}`);
|
||||
return new URL(`${origin}${path16}`);
|
||||
}
|
||||
if (!isHttpOrHttpsPrefixed(url2.origin || url2.protocol)) {
|
||||
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
|
||||
@@ -1526,39 +1526,39 @@ var require_diagnostics = __commonJS({
|
||||
});
|
||||
diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin }
|
||||
request: { method, path: path16, origin }
|
||||
} = evt;
|
||||
debuglog("sending request to %s %s/%s", method, origin, path17);
|
||||
debuglog("sending request to %s %s/%s", method, origin, path16);
|
||||
});
|
||||
diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin },
|
||||
request: { method, path: path16, origin },
|
||||
response: { statusCode }
|
||||
} = evt;
|
||||
debuglog(
|
||||
"received response to %s %s/%s - HTTP %d",
|
||||
method,
|
||||
origin,
|
||||
path17,
|
||||
path16,
|
||||
statusCode
|
||||
);
|
||||
});
|
||||
diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin }
|
||||
request: { method, path: path16, origin }
|
||||
} = evt;
|
||||
debuglog("trailers received from %s %s/%s", method, origin, path17);
|
||||
debuglog("trailers received from %s %s/%s", method, origin, path16);
|
||||
});
|
||||
diagnosticsChannel.channel("undici:request:error").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin },
|
||||
request: { method, path: path16, origin },
|
||||
error: error2
|
||||
} = evt;
|
||||
debuglog(
|
||||
"request to %s %s/%s errored - %s",
|
||||
method,
|
||||
origin,
|
||||
path17,
|
||||
path16,
|
||||
error2.message
|
||||
);
|
||||
});
|
||||
@@ -1607,9 +1607,9 @@ var require_diagnostics = __commonJS({
|
||||
});
|
||||
diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin }
|
||||
request: { method, path: path16, origin }
|
||||
} = evt;
|
||||
debuglog("sending request to %s %s/%s", method, origin, path17);
|
||||
debuglog("sending request to %s %s/%s", method, origin, path16);
|
||||
});
|
||||
}
|
||||
diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => {
|
||||
@@ -1672,7 +1672,7 @@ var require_request = __commonJS({
|
||||
var kHandler = /* @__PURE__ */ Symbol("handler");
|
||||
var Request = class {
|
||||
constructor(origin, {
|
||||
path: path17,
|
||||
path: path16,
|
||||
method,
|
||||
body: body2,
|
||||
headers,
|
||||
@@ -1687,11 +1687,11 @@ var require_request = __commonJS({
|
||||
expectContinue,
|
||||
servername
|
||||
}, handler) {
|
||||
if (typeof path17 !== "string") {
|
||||
if (typeof path16 !== "string") {
|
||||
throw new InvalidArgumentError("path must be a string");
|
||||
} else if (path17[0] !== "/" && !(path17.startsWith("http://") || path17.startsWith("https://")) && method !== "CONNECT") {
|
||||
} else if (path16[0] !== "/" && !(path16.startsWith("http://") || path16.startsWith("https://")) && method !== "CONNECT") {
|
||||
throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
|
||||
} else if (invalidPathRegex.test(path17)) {
|
||||
} else if (invalidPathRegex.test(path16)) {
|
||||
throw new InvalidArgumentError("invalid request path");
|
||||
}
|
||||
if (typeof method !== "string") {
|
||||
@@ -1757,7 +1757,7 @@ var require_request = __commonJS({
|
||||
this.completed = false;
|
||||
this.aborted = false;
|
||||
this.upgrade = upgrade || null;
|
||||
this.path = query ? buildURL(path17, query) : path17;
|
||||
this.path = query ? buildURL(path16, query) : path16;
|
||||
this.origin = origin;
|
||||
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
|
||||
this.blocking = blocking == null ? false : blocking;
|
||||
@@ -6276,7 +6276,7 @@ var require_client_h1 = __commonJS({
|
||||
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
||||
}
|
||||
function writeH1(client, request) {
|
||||
const { method, path: path17, host, upgrade, blocking, reset } = request;
|
||||
const { method, path: path16, host, upgrade, blocking, reset } = request;
|
||||
let { body: body2, headers, contentLength: contentLength2 } = request;
|
||||
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
|
||||
if (util7.isFormDataLike(body2)) {
|
||||
@@ -6342,7 +6342,7 @@ var require_client_h1 = __commonJS({
|
||||
if (blocking) {
|
||||
socket[kBlocking] = true;
|
||||
}
|
||||
let header = `${method} ${path17} HTTP/1.1\r
|
||||
let header = `${method} ${path16} HTTP/1.1\r
|
||||
`;
|
||||
if (typeof host === "string") {
|
||||
header += `host: ${host}\r
|
||||
@@ -6868,7 +6868,7 @@ var require_client_h2 = __commonJS({
|
||||
}
|
||||
function writeH2(client, request) {
|
||||
const session = client[kHTTP2Session];
|
||||
const { method, path: path17, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
||||
const { method, path: path16, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
||||
let { body: body2 } = request;
|
||||
if (upgrade) {
|
||||
util7.errorRequest(client, request, new Error("Upgrade not supported for H2"));
|
||||
@@ -6935,7 +6935,7 @@ var require_client_h2 = __commonJS({
|
||||
});
|
||||
return true;
|
||||
}
|
||||
headers[HTTP2_HEADER_PATH] = path17;
|
||||
headers[HTTP2_HEADER_PATH] = path16;
|
||||
headers[HTTP2_HEADER_SCHEME] = "https";
|
||||
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
|
||||
if (body2 && typeof body2.read === "function") {
|
||||
@@ -7288,9 +7288,9 @@ var require_redirect_handler = __commonJS({
|
||||
return this.handler.onHeaders(statusCode, headers, resume, statusText);
|
||||
}
|
||||
const { origin, pathname, search } = util7.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
|
||||
const path17 = search ? `${pathname}${search}` : pathname;
|
||||
const path16 = search ? `${pathname}${search}` : pathname;
|
||||
this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
|
||||
this.opts.path = path17;
|
||||
this.opts.path = path16;
|
||||
this.opts.origin = origin;
|
||||
this.opts.maxRedirections = 0;
|
||||
this.opts.query = null;
|
||||
@@ -8524,10 +8524,10 @@ var require_proxy_agent = __commonJS({
|
||||
};
|
||||
const {
|
||||
origin,
|
||||
path: path17 = "/",
|
||||
path: path16 = "/",
|
||||
headers = {}
|
||||
} = opts;
|
||||
opts.path = origin + path17;
|
||||
opts.path = origin + path16;
|
||||
if (!("host" in headers) && !("Host" in headers)) {
|
||||
const { host } = new URL3(origin);
|
||||
headers.host = host;
|
||||
@@ -10448,20 +10448,20 @@ var require_mock_utils = __commonJS({
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function safeUrl(path17) {
|
||||
if (typeof path17 !== "string") {
|
||||
return path17;
|
||||
function safeUrl(path16) {
|
||||
if (typeof path16 !== "string") {
|
||||
return path16;
|
||||
}
|
||||
const pathSegments = path17.split("?");
|
||||
const pathSegments = path16.split("?");
|
||||
if (pathSegments.length !== 2) {
|
||||
return path17;
|
||||
return path16;
|
||||
}
|
||||
const qp = new URLSearchParams(pathSegments.pop());
|
||||
qp.sort();
|
||||
return [...pathSegments, qp.toString()].join("?");
|
||||
}
|
||||
function matchKey(mockDispatch2, { path: path17, method, body: body2, headers }) {
|
||||
const pathMatch = matchValue(mockDispatch2.path, path17);
|
||||
function matchKey(mockDispatch2, { path: path16, method, body: body2, headers }) {
|
||||
const pathMatch = matchValue(mockDispatch2.path, path16);
|
||||
const methodMatch = matchValue(mockDispatch2.method, method);
|
||||
const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body2) : true;
|
||||
const headersMatch = matchHeaders(mockDispatch2, headers);
|
||||
@@ -10483,7 +10483,7 @@ var require_mock_utils = __commonJS({
|
||||
function getMockDispatch(mockDispatches, key) {
|
||||
const basePath = key.query ? buildURL(key.path, key.query) : key.path;
|
||||
const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath;
|
||||
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path17 }) => matchValue(safeUrl(path17), resolvedPath));
|
||||
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path16 }) => matchValue(safeUrl(path16), resolvedPath));
|
||||
if (matchedMockDispatches.length === 0) {
|
||||
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`);
|
||||
}
|
||||
@@ -10521,9 +10521,9 @@ var require_mock_utils = __commonJS({
|
||||
}
|
||||
}
|
||||
function buildKey(opts) {
|
||||
const { path: path17, method, body: body2, headers, query } = opts;
|
||||
const { path: path16, method, body: body2, headers, query } = opts;
|
||||
return {
|
||||
path: path17,
|
||||
path: path16,
|
||||
method,
|
||||
body: body2,
|
||||
headers,
|
||||
@@ -10986,10 +10986,10 @@ var require_pending_interceptors_formatter = __commonJS({
|
||||
}
|
||||
format(pendingInterceptors) {
|
||||
const withPrettyHeaders = pendingInterceptors.map(
|
||||
({ method, path: path17, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
||||
({ method, path: path16, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
||||
Method: method,
|
||||
Origin: origin,
|
||||
Path: path17,
|
||||
Path: path16,
|
||||
"Status code": statusCode,
|
||||
Persistent: persist ? PERSISTENT : NOT_PERSISTENT,
|
||||
Invocations: timesInvoked,
|
||||
@@ -15870,9 +15870,9 @@ var require_util6 = __commonJS({
|
||||
}
|
||||
}
|
||||
}
|
||||
function validateCookiePath(path17) {
|
||||
for (let i = 0; i < path17.length; ++i) {
|
||||
const code = path17.charCodeAt(i);
|
||||
function validateCookiePath(path16) {
|
||||
for (let i = 0; i < path16.length; ++i) {
|
||||
const code = path16.charCodeAt(i);
|
||||
if (code < 32 || // exclude CTLs (0-31)
|
||||
code === 127 || // DEL
|
||||
code === 59) {
|
||||
@@ -18512,11 +18512,11 @@ var require_undici = __commonJS({
|
||||
if (typeof opts.path !== "string") {
|
||||
throw new InvalidArgumentError("invalid opts.path");
|
||||
}
|
||||
let path17 = opts.path;
|
||||
let path16 = opts.path;
|
||||
if (!opts.path.startsWith("/")) {
|
||||
path17 = `/${path17}`;
|
||||
path16 = `/${path16}`;
|
||||
}
|
||||
url2 = new URL(util7.parseOrigin(url2).origin + path17);
|
||||
url2 = new URL(util7.parseOrigin(url2).origin + path16);
|
||||
} else {
|
||||
if (!opts) {
|
||||
opts = typeof url2 === "object" ? url2 : {};
|
||||
@@ -18809,7 +18809,7 @@ var require_minimatch = __commonJS({
|
||||
"node_modules/minimatch/minimatch.js"(exports2, module2) {
|
||||
module2.exports = minimatch2;
|
||||
minimatch2.Minimatch = Minimatch2;
|
||||
var path17 = (function() {
|
||||
var path16 = (function() {
|
||||
try {
|
||||
return require("path");
|
||||
} catch (e) {
|
||||
@@ -18817,7 +18817,7 @@ var require_minimatch = __commonJS({
|
||||
})() || {
|
||||
sep: "/"
|
||||
};
|
||||
minimatch2.sep = path17.sep;
|
||||
minimatch2.sep = path16.sep;
|
||||
var GLOBSTAR = minimatch2.GLOBSTAR = Minimatch2.GLOBSTAR = {};
|
||||
var expand = require_brace_expansion();
|
||||
var plTypes = {
|
||||
@@ -18906,8 +18906,8 @@ var require_minimatch = __commonJS({
|
||||
assertValidPattern(pattern);
|
||||
if (!options) options = {};
|
||||
pattern = pattern.trim();
|
||||
if (!options.allowWindowsEscape && path17.sep !== "/") {
|
||||
pattern = pattern.split(path17.sep).join("/");
|
||||
if (!options.allowWindowsEscape && path16.sep !== "/") {
|
||||
pattern = pattern.split(path16.sep).join("/");
|
||||
}
|
||||
this.options = options;
|
||||
this.set = [];
|
||||
@@ -19276,8 +19276,8 @@ var require_minimatch = __commonJS({
|
||||
if (this.empty) return f === "";
|
||||
if (f === "/" && partial) return true;
|
||||
var options = this.options;
|
||||
if (path17.sep !== "/") {
|
||||
f = f.split(path17.sep).join("/");
|
||||
if (path16.sep !== "/") {
|
||||
f = f.split(path16.sep).join("/");
|
||||
}
|
||||
f = f.split(slashSplit);
|
||||
this.debug(this.pattern, "split", f);
|
||||
@@ -28917,6 +28917,1810 @@ var require_semver4 = __commonJS({
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/version.js
|
||||
var require_version = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/version.js"(exports2, module2) {
|
||||
var VERSION_PATTERN = [
|
||||
"v?",
|
||||
"(?:",
|
||||
/* */
|
||||
"(?:(?<epoch>[0-9]+)!)?",
|
||||
// epoch
|
||||
/* */
|
||||
"(?<release>[0-9]+(?:\\.[0-9]+)*)",
|
||||
// release segment
|
||||
/* */
|
||||
"(?<pre>",
|
||||
// pre-release
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<pre_l>(a|b|c|rc|alpha|beta|pre|preview))",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<pre_n>[0-9]+)?",
|
||||
/* */
|
||||
")?",
|
||||
/* */
|
||||
"(?<post>",
|
||||
// post release
|
||||
/* */
|
||||
"(?:-(?<post_n1>[0-9]+))",
|
||||
/* */
|
||||
"|",
|
||||
/* */
|
||||
"(?:",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<post_l>post|rev|r)",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<post_n2>[0-9]+)?",
|
||||
/* */
|
||||
")",
|
||||
/* */
|
||||
")?",
|
||||
/* */
|
||||
"(?<dev>",
|
||||
// dev release
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<dev_l>dev)",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<dev_n>[0-9]+)?",
|
||||
/* */
|
||||
")?",
|
||||
")",
|
||||
"(?:\\+(?<local>[a-z0-9]+(?:[-_\\.][a-z0-9]+)*))?"
|
||||
// local version
|
||||
].join("");
|
||||
module2.exports = {
|
||||
VERSION_PATTERN,
|
||||
valid: valid2,
|
||||
clean: clean3,
|
||||
explain,
|
||||
parse: parse3,
|
||||
stringify: stringify2
|
||||
};
|
||||
var validRegex = new RegExp("^" + VERSION_PATTERN + "$", "i");
|
||||
function valid2(version3) {
|
||||
return validRegex.test(version3) ? version3 : null;
|
||||
}
|
||||
var cleanRegex = new RegExp("^\\s*" + VERSION_PATTERN + "\\s*$", "i");
|
||||
function clean3(version3) {
|
||||
return stringify2(parse3(version3, cleanRegex));
|
||||
}
|
||||
function parse3(version3, regex) {
|
||||
const { groups } = (regex || validRegex).exec(version3) || {};
|
||||
if (!groups) {
|
||||
return null;
|
||||
}
|
||||
const parsed = {
|
||||
epoch: Number(groups.epoch ? groups.epoch : 0),
|
||||
release: groups.release.split(".").map(Number),
|
||||
pre: normalize_letter_version(groups.pre_l, groups.pre_n),
|
||||
post: normalize_letter_version(
|
||||
groups.post_l,
|
||||
groups.post_n1 || groups.post_n2
|
||||
),
|
||||
dev: normalize_letter_version(groups.dev_l, groups.dev_n),
|
||||
local: parse_local_version(groups.local)
|
||||
};
|
||||
return parsed;
|
||||
}
|
||||
function stringify2(parsed) {
|
||||
if (!parsed) {
|
||||
return null;
|
||||
}
|
||||
const { epoch, release, pre, post, dev, local } = parsed;
|
||||
const parts = [];
|
||||
if (epoch !== 0) {
|
||||
parts.push(`${epoch}!`);
|
||||
}
|
||||
parts.push(release.join("."));
|
||||
if (pre) {
|
||||
parts.push(pre.join(""));
|
||||
}
|
||||
if (post) {
|
||||
parts.push("." + post.join(""));
|
||||
}
|
||||
if (dev) {
|
||||
parts.push("." + dev.join(""));
|
||||
}
|
||||
if (local) {
|
||||
parts.push(`+${local}`);
|
||||
}
|
||||
return parts.join("");
|
||||
}
|
||||
function normalize_letter_version(letterIn, numberIn) {
|
||||
let letter = letterIn;
|
||||
let number = numberIn;
|
||||
if (letter) {
|
||||
if (!number) {
|
||||
number = 0;
|
||||
}
|
||||
letter = letter.toLowerCase();
|
||||
if (letter === "alpha") {
|
||||
letter = "a";
|
||||
} else if (letter === "beta") {
|
||||
letter = "b";
|
||||
} else if (["c", "pre", "preview"].includes(letter)) {
|
||||
letter = "rc";
|
||||
} else if (["rev", "r"].includes(letter)) {
|
||||
letter = "post";
|
||||
}
|
||||
return [letter, Number(number)];
|
||||
}
|
||||
if (!letter && number) {
|
||||
letter = "post";
|
||||
return [letter, Number(number)];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function parse_local_version(local) {
|
||||
if (local) {
|
||||
return local.split(/[._-]/).map(
|
||||
(part) => Number.isNaN(Number(part)) ? part.toLowerCase() : Number(part)
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function explain(version3) {
|
||||
const parsed = parse3(version3);
|
||||
if (!parsed) {
|
||||
return parsed;
|
||||
}
|
||||
const { epoch, release, pre, post, dev, local } = parsed;
|
||||
let base_version = "";
|
||||
if (epoch !== 0) {
|
||||
base_version += epoch + "!";
|
||||
}
|
||||
base_version += release.join(".");
|
||||
const is_prerelease = Boolean(dev || pre);
|
||||
const is_devrelease = Boolean(dev);
|
||||
const is_postrelease = Boolean(post);
|
||||
return {
|
||||
epoch,
|
||||
release,
|
||||
pre,
|
||||
post: post ? post[1] : post,
|
||||
dev: dev ? dev[1] : dev,
|
||||
local: local ? local.join(".") : local,
|
||||
public: stringify2(parsed).split("+", 1)[0],
|
||||
base_version,
|
||||
is_prerelease,
|
||||
is_devrelease,
|
||||
is_postrelease
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/operator.js
|
||||
var require_operator = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/operator.js"(exports2, module2) {
|
||||
var { parse: parse3 } = require_version();
|
||||
module2.exports = {
|
||||
compare,
|
||||
rcompare,
|
||||
lt,
|
||||
le,
|
||||
eq,
|
||||
ne,
|
||||
ge,
|
||||
gt: gt2,
|
||||
"<": lt,
|
||||
"<=": le,
|
||||
"==": eq,
|
||||
"!=": ne,
|
||||
">=": ge,
|
||||
">": gt2,
|
||||
"===": arbitrary
|
||||
};
|
||||
function lt(version3, other) {
|
||||
return compare(version3, other) < 0;
|
||||
}
|
||||
function le(version3, other) {
|
||||
return compare(version3, other) <= 0;
|
||||
}
|
||||
function eq(version3, other) {
|
||||
return compare(version3, other) === 0;
|
||||
}
|
||||
function ne(version3, other) {
|
||||
return compare(version3, other) !== 0;
|
||||
}
|
||||
function ge(version3, other) {
|
||||
return compare(version3, other) >= 0;
|
||||
}
|
||||
function gt2(version3, other) {
|
||||
return compare(version3, other) > 0;
|
||||
}
|
||||
function arbitrary(version3, other) {
|
||||
return version3.toLowerCase() === other.toLowerCase();
|
||||
}
|
||||
function compare(version3, other) {
|
||||
const parsedVersion = parse3(version3);
|
||||
const parsedOther = parse3(other);
|
||||
const keyVersion = calculateKey(parsedVersion);
|
||||
const keyOther = calculateKey(parsedOther);
|
||||
return pyCompare(keyVersion, keyOther);
|
||||
}
|
||||
function rcompare(version3, other) {
|
||||
return -compare(version3, other);
|
||||
}
|
||||
function pyCompare(elemIn, otherIn) {
|
||||
let elem = elemIn;
|
||||
let other = otherIn;
|
||||
if (elem === other) {
|
||||
return 0;
|
||||
}
|
||||
if (Array.isArray(elem) !== Array.isArray(other)) {
|
||||
elem = Array.isArray(elem) ? elem : [elem];
|
||||
other = Array.isArray(other) ? other : [other];
|
||||
}
|
||||
if (Array.isArray(elem)) {
|
||||
const len = Math.min(elem.length, other.length);
|
||||
for (let i = 0; i < len; i += 1) {
|
||||
const res = pyCompare(elem[i], other[i]);
|
||||
if (res !== 0) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
return elem.length - other.length;
|
||||
}
|
||||
if (elem === -Infinity || other === Infinity) {
|
||||
return -1;
|
||||
}
|
||||
if (elem === Infinity || other === -Infinity) {
|
||||
return 1;
|
||||
}
|
||||
return elem < other ? -1 : 1;
|
||||
}
|
||||
function calculateKey(input) {
|
||||
const { epoch } = input;
|
||||
let { release, pre, post, local, dev } = input;
|
||||
release = release.concat();
|
||||
release.reverse();
|
||||
while (release.length && release[0] === 0) {
|
||||
release.shift();
|
||||
}
|
||||
release.reverse();
|
||||
if (!pre && !post && dev) pre = -Infinity;
|
||||
else if (!pre) pre = Infinity;
|
||||
if (!post) post = -Infinity;
|
||||
if (!dev) dev = Infinity;
|
||||
if (!local) {
|
||||
local = -Infinity;
|
||||
} else {
|
||||
local = local.map(
|
||||
(i) => Number.isNaN(Number(i)) ? [-Infinity, i] : [Number(i), ""]
|
||||
);
|
||||
}
|
||||
return [epoch, release, pre, post, dev, local];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/specifier.js
|
||||
var require_specifier = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/specifier.js"(exports2, module2) {
|
||||
var { VERSION_PATTERN, explain: explainVersion } = require_version();
|
||||
var Operator = require_operator();
|
||||
var RANGE_PATTERN = [
|
||||
"(?<operator>(===|~=|==|!=|<=|>=|<|>))",
|
||||
"\\s*",
|
||||
"(",
|
||||
/* */
|
||||
"(?<version>(?:" + VERSION_PATTERN.replace(/\?<\w+>/g, "?:") + "))",
|
||||
/* */
|
||||
"(?<prefix>\\.\\*)?",
|
||||
/* */
|
||||
"|",
|
||||
/* */
|
||||
"(?<legacy>[^,;\\s)]+)",
|
||||
")"
|
||||
].join("");
|
||||
module2.exports = {
|
||||
RANGE_PATTERN,
|
||||
parse: parse3,
|
||||
satisfies: satisfies4,
|
||||
filter,
|
||||
validRange,
|
||||
maxSatisfying: maxSatisfying3,
|
||||
minSatisfying: minSatisfying4
|
||||
};
|
||||
var isEqualityOperator = (op) => ["==", "!=", "==="].includes(op);
|
||||
var rangeRegex = new RegExp("^" + RANGE_PATTERN + "$", "i");
|
||||
function parse3(ranges) {
|
||||
if (!ranges.trim()) {
|
||||
return [];
|
||||
}
|
||||
const specifiers = ranges.split(",").map((range2) => rangeRegex.exec(range2.trim()) || {}).map(({ groups }) => {
|
||||
if (!groups) {
|
||||
return null;
|
||||
}
|
||||
let { ...spec } = groups;
|
||||
const { operator, version: version3, prefix: prefix2, legacy } = groups;
|
||||
if (version3) {
|
||||
spec = { ...spec, ...explainVersion(version3) };
|
||||
if (operator === "~=") {
|
||||
if (spec.release.length < 2) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (!isEqualityOperator(operator) && spec.local) {
|
||||
return null;
|
||||
}
|
||||
if (prefix2) {
|
||||
if (!isEqualityOperator(operator) || spec.dev || spec.local) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (legacy && operator !== "===") {
|
||||
return null;
|
||||
}
|
||||
return spec;
|
||||
});
|
||||
if (specifiers.filter(Boolean).length !== specifiers.length) {
|
||||
return null;
|
||||
}
|
||||
return specifiers;
|
||||
}
|
||||
function filter(versions, specifier, options = {}) {
|
||||
const filtered = pick(versions, specifier, options);
|
||||
if (filtered.length === 0 && options.prereleases === void 0) {
|
||||
return pick(versions, specifier, { prereleases: true });
|
||||
}
|
||||
return filtered;
|
||||
}
|
||||
function maxSatisfying3(versions, range2, options) {
|
||||
const found = filter(versions, range2, options).sort(Operator.compare);
|
||||
return found.length === 0 ? null : found[found.length - 1];
|
||||
}
|
||||
function minSatisfying4(versions, range2, options) {
|
||||
const found = filter(versions, range2, options).sort(Operator.compare);
|
||||
return found.length === 0 ? null : found[0];
|
||||
}
|
||||
function pick(versions, specifier, options) {
|
||||
const parsed = parse3(specifier);
|
||||
if (!parsed) {
|
||||
return [];
|
||||
}
|
||||
return versions.filter((version3) => {
|
||||
const explained = explainVersion(version3);
|
||||
if (!parsed.length) {
|
||||
return explained && !(explained.is_prerelease && !options.prereleases);
|
||||
}
|
||||
return parsed.reduce((pass, spec) => {
|
||||
if (!pass) {
|
||||
return false;
|
||||
}
|
||||
return contains({ ...spec, ...options }, { version: version3, explained });
|
||||
}, true);
|
||||
});
|
||||
}
|
||||
function satisfies4(version3, specifier, options = {}) {
|
||||
const filtered = pick([version3], specifier, options);
|
||||
return filtered.length === 1;
|
||||
}
|
||||
function arrayStartsWith(array, prefix2) {
|
||||
if (prefix2.length > array.length) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < prefix2.length; i += 1) {
|
||||
if (prefix2[i] !== array[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function contains(specifier, input) {
|
||||
const { explained } = input;
|
||||
let { version: version3 } = input;
|
||||
const { ...spec } = specifier;
|
||||
if (spec.prereleases === void 0) {
|
||||
spec.prereleases = spec.is_prerelease;
|
||||
}
|
||||
if (explained && explained.is_prerelease && !spec.prereleases) {
|
||||
return false;
|
||||
}
|
||||
if (spec.operator === "~=") {
|
||||
let compatiblePrefix = spec.release.slice(0, -1).concat("*").join(".");
|
||||
if (spec.epoch) {
|
||||
compatiblePrefix = spec.epoch + "!" + compatiblePrefix;
|
||||
}
|
||||
return satisfies4(version3, `>=${spec.version}, ==${compatiblePrefix}`, {
|
||||
prereleases: spec.prereleases
|
||||
});
|
||||
}
|
||||
if (spec.prefix) {
|
||||
const isMatching = explained.epoch === spec.epoch && arrayStartsWith(explained.release, spec.release);
|
||||
const isEquality = spec.operator !== "!=";
|
||||
return isEquality ? isMatching : !isMatching;
|
||||
}
|
||||
if (explained) {
|
||||
if (explained.local && spec.version) {
|
||||
version3 = explained.public;
|
||||
spec.version = explainVersion(spec.version).public;
|
||||
}
|
||||
}
|
||||
if (spec.operator === "<" || spec.operator === ">") {
|
||||
if (Operator.eq(spec.release.join("."), explained.release.join("."))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const op = Operator[spec.operator];
|
||||
return op(version3, spec.version || spec.legacy);
|
||||
}
|
||||
function validRange(specifier) {
|
||||
return Boolean(parse3(specifier));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/semantic.js
|
||||
var require_semantic = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/semantic.js"(exports2, module2) {
|
||||
var { explain, parse: parse3, stringify: stringify2 } = require_version();
|
||||
module2.exports = {
|
||||
major,
|
||||
minor,
|
||||
patch,
|
||||
inc
|
||||
};
|
||||
function major(input) {
|
||||
const version3 = explain(input);
|
||||
if (!version3) {
|
||||
throw new TypeError("Invalid Version: " + input);
|
||||
}
|
||||
return version3.release[0];
|
||||
}
|
||||
function minor(input) {
|
||||
const version3 = explain(input);
|
||||
if (!version3) {
|
||||
throw new TypeError("Invalid Version: " + input);
|
||||
}
|
||||
if (version3.release.length < 2) {
|
||||
return 0;
|
||||
}
|
||||
return version3.release[1];
|
||||
}
|
||||
function patch(input) {
|
||||
const version3 = explain(input);
|
||||
if (!version3) {
|
||||
throw new TypeError("Invalid Version: " + input);
|
||||
}
|
||||
if (version3.release.length < 3) {
|
||||
return 0;
|
||||
}
|
||||
return version3.release[2];
|
||||
}
|
||||
function inc(input, release, preReleaseIdentifier) {
|
||||
let identifier = preReleaseIdentifier || `a`;
|
||||
const version3 = parse3(input);
|
||||
if (!version3) {
|
||||
return null;
|
||||
}
|
||||
if (!["a", "b", "c", "rc", "alpha", "beta", "pre", "preview"].includes(
|
||||
identifier
|
||||
)) {
|
||||
return null;
|
||||
}
|
||||
switch (release) {
|
||||
case "premajor":
|
||||
{
|
||||
const [majorVersion] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion + 1;
|
||||
}
|
||||
version3.pre = [identifier, 0];
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "preminor":
|
||||
{
|
||||
const [majorVersion, minorVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion + 1;
|
||||
}
|
||||
version3.pre = [identifier, 0];
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "prepatch":
|
||||
{
|
||||
const [majorVersion, minorVersion = 0, patchVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion;
|
||||
version3.release[2] = patchVersion + 1;
|
||||
}
|
||||
version3.pre = [identifier, 0];
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "prerelease":
|
||||
if (version3.pre === null) {
|
||||
const [majorVersion, minorVersion = 0, patchVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion;
|
||||
version3.release[2] = patchVersion + 1;
|
||||
version3.pre = [identifier, 0];
|
||||
} else {
|
||||
if (preReleaseIdentifier === void 0 && version3.pre !== null) {
|
||||
[identifier] = version3.pre;
|
||||
}
|
||||
const [letter, number] = version3.pre;
|
||||
if (letter === identifier) {
|
||||
version3.pre = [letter, number + 1];
|
||||
} else {
|
||||
version3.pre = [identifier, 0];
|
||||
}
|
||||
}
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "major":
|
||||
if (version3.release.slice(1).some((value) => value !== 0) || version3.pre === null) {
|
||||
const [majorVersion] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion + 1;
|
||||
}
|
||||
delete version3.pre;
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "minor":
|
||||
if (version3.release.slice(2).some((value) => value !== 0) || version3.pre === null) {
|
||||
const [majorVersion, minorVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion + 1;
|
||||
}
|
||||
delete version3.pre;
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "patch":
|
||||
if (version3.release.slice(3).some((value) => value !== 0) || version3.pre === null) {
|
||||
const [majorVersion, minorVersion = 0, patchVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion;
|
||||
version3.release[2] = patchVersion + 1;
|
||||
}
|
||||
delete version3.pre;
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return stringify2(version3);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/index.js
|
||||
var require_pep440 = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/index.js"(exports2, module2) {
|
||||
var { valid: valid2, clean: clean3, explain, parse: parse3 } = require_version();
|
||||
var { lt, le, eq, ne, ge, gt: gt2, compare, rcompare } = require_operator();
|
||||
var {
|
||||
filter,
|
||||
maxSatisfying: maxSatisfying3,
|
||||
minSatisfying: minSatisfying4,
|
||||
RANGE_PATTERN,
|
||||
satisfies: satisfies4,
|
||||
validRange
|
||||
} = require_specifier();
|
||||
var { major, minor, patch, inc } = require_semantic();
|
||||
module2.exports = {
|
||||
// version
|
||||
valid: valid2,
|
||||
clean: clean3,
|
||||
explain,
|
||||
parse: parse3,
|
||||
// operator
|
||||
lt,
|
||||
le,
|
||||
lte: le,
|
||||
eq,
|
||||
ne,
|
||||
neq: ne,
|
||||
ge,
|
||||
gte: ge,
|
||||
gt: gt2,
|
||||
compare,
|
||||
rcompare,
|
||||
// range
|
||||
filter,
|
||||
maxSatisfying: maxSatisfying3,
|
||||
minSatisfying: minSatisfying4,
|
||||
RANGE_PATTERN,
|
||||
satisfies: satisfies4,
|
||||
validRange,
|
||||
// semantic
|
||||
major,
|
||||
minor,
|
||||
patch,
|
||||
inc
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/semver/semver.js
|
||||
var require_semver5 = __commonJS({
|
||||
"node_modules/semver/semver.js"(exports2, module2) {
|
||||
exports2 = module2.exports = SemVer;
|
||||
var debug2;
|
||||
if (typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
|
||||
debug2 = function() {
|
||||
var args = Array.prototype.slice.call(arguments, 0);
|
||||
args.unshift("SEMVER");
|
||||
console.log.apply(console, args);
|
||||
};
|
||||
} else {
|
||||
debug2 = function() {
|
||||
};
|
||||
}
|
||||
exports2.SEMVER_SPEC_VERSION = "2.0.0";
|
||||
var MAX_LENGTH = 256;
|
||||
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
|
||||
9007199254740991;
|
||||
var MAX_SAFE_COMPONENT_LENGTH = 16;
|
||||
var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;
|
||||
var re = exports2.re = [];
|
||||
var safeRe = exports2.safeRe = [];
|
||||
var src = exports2.src = [];
|
||||
var t = exports2.tokens = {};
|
||||
var R = 0;
|
||||
function tok(n) {
|
||||
t[n] = R++;
|
||||
}
|
||||
var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
|
||||
var safeRegexReplacements = [
|
||||
["\\s", 1],
|
||||
["\\d", MAX_LENGTH],
|
||||
[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
|
||||
];
|
||||
function makeSafeRe(value) {
|
||||
for (var i2 = 0; i2 < safeRegexReplacements.length; i2++) {
|
||||
var token = safeRegexReplacements[i2][0];
|
||||
var max = safeRegexReplacements[i2][1];
|
||||
value = value.split(token + "*").join(token + "{0," + max + "}").split(token + "+").join(token + "{1," + max + "}");
|
||||
}
|
||||
return value;
|
||||
}
|
||||
tok("NUMERICIDENTIFIER");
|
||||
src[t.NUMERICIDENTIFIER] = "0|[1-9]\\d*";
|
||||
tok("NUMERICIDENTIFIERLOOSE");
|
||||
src[t.NUMERICIDENTIFIERLOOSE] = "\\d+";
|
||||
tok("NONNUMERICIDENTIFIER");
|
||||
src[t.NONNUMERICIDENTIFIER] = "\\d*[a-zA-Z-]" + LETTERDASHNUMBER + "*";
|
||||
tok("MAINVERSION");
|
||||
src[t.MAINVERSION] = "(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")";
|
||||
tok("MAINVERSIONLOOSE");
|
||||
src[t.MAINVERSIONLOOSE] = "(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")";
|
||||
tok("PRERELEASEIDENTIFIER");
|
||||
src[t.PRERELEASEIDENTIFIER] = "(?:" + src[t.NUMERICIDENTIFIER] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
|
||||
tok("PRERELEASEIDENTIFIERLOOSE");
|
||||
src[t.PRERELEASEIDENTIFIERLOOSE] = "(?:" + src[t.NUMERICIDENTIFIERLOOSE] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
|
||||
tok("PRERELEASE");
|
||||
src[t.PRERELEASE] = "(?:-(" + src[t.PRERELEASEIDENTIFIER] + "(?:\\." + src[t.PRERELEASEIDENTIFIER] + ")*))";
|
||||
tok("PRERELEASELOOSE");
|
||||
src[t.PRERELEASELOOSE] = "(?:-?(" + src[t.PRERELEASEIDENTIFIERLOOSE] + "(?:\\." + src[t.PRERELEASEIDENTIFIERLOOSE] + ")*))";
|
||||
tok("BUILDIDENTIFIER");
|
||||
src[t.BUILDIDENTIFIER] = LETTERDASHNUMBER + "+";
|
||||
tok("BUILD");
|
||||
src[t.BUILD] = "(?:\\+(" + src[t.BUILDIDENTIFIER] + "(?:\\." + src[t.BUILDIDENTIFIER] + ")*))";
|
||||
tok("FULL");
|
||||
tok("FULLPLAIN");
|
||||
src[t.FULLPLAIN] = "v?" + src[t.MAINVERSION] + src[t.PRERELEASE] + "?" + src[t.BUILD] + "?";
|
||||
src[t.FULL] = "^" + src[t.FULLPLAIN] + "$";
|
||||
tok("LOOSEPLAIN");
|
||||
src[t.LOOSEPLAIN] = "[v=\\s]*" + src[t.MAINVERSIONLOOSE] + src[t.PRERELEASELOOSE] + "?" + src[t.BUILD] + "?";
|
||||
tok("LOOSE");
|
||||
src[t.LOOSE] = "^" + src[t.LOOSEPLAIN] + "$";
|
||||
tok("GTLT");
|
||||
src[t.GTLT] = "((?:<|>)?=?)";
|
||||
tok("XRANGEIDENTIFIERLOOSE");
|
||||
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + "|x|X|\\*";
|
||||
tok("XRANGEIDENTIFIER");
|
||||
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + "|x|X|\\*";
|
||||
tok("XRANGEPLAIN");
|
||||
src[t.XRANGEPLAIN] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:" + src[t.PRERELEASE] + ")?" + src[t.BUILD] + "?)?)?";
|
||||
tok("XRANGEPLAINLOOSE");
|
||||
src[t.XRANGEPLAINLOOSE] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:" + src[t.PRERELEASELOOSE] + ")?" + src[t.BUILD] + "?)?)?";
|
||||
tok("XRANGE");
|
||||
src[t.XRANGE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAIN] + "$";
|
||||
tok("XRANGELOOSE");
|
||||
src[t.XRANGELOOSE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAINLOOSE] + "$";
|
||||
tok("COERCE");
|
||||
src[t.COERCE] = "(^|[^\\d])(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "})(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:$|[^\\d])";
|
||||
tok("COERCERTL");
|
||||
re[t.COERCERTL] = new RegExp(src[t.COERCE], "g");
|
||||
safeRe[t.COERCERTL] = new RegExp(makeSafeRe(src[t.COERCE]), "g");
|
||||
tok("LONETILDE");
|
||||
src[t.LONETILDE] = "(?:~>?)";
|
||||
tok("TILDETRIM");
|
||||
src[t.TILDETRIM] = "(\\s*)" + src[t.LONETILDE] + "\\s+";
|
||||
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], "g");
|
||||
safeRe[t.TILDETRIM] = new RegExp(makeSafeRe(src[t.TILDETRIM]), "g");
|
||||
var tildeTrimReplace = "$1~";
|
||||
tok("TILDE");
|
||||
src[t.TILDE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAIN] + "$";
|
||||
tok("TILDELOOSE");
|
||||
src[t.TILDELOOSE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + "$";
|
||||
tok("LONECARET");
|
||||
src[t.LONECARET] = "(?:\\^)";
|
||||
tok("CARETTRIM");
|
||||
src[t.CARETTRIM] = "(\\s*)" + src[t.LONECARET] + "\\s+";
|
||||
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], "g");
|
||||
safeRe[t.CARETTRIM] = new RegExp(makeSafeRe(src[t.CARETTRIM]), "g");
|
||||
var caretTrimReplace = "$1^";
|
||||
tok("CARET");
|
||||
src[t.CARET] = "^" + src[t.LONECARET] + src[t.XRANGEPLAIN] + "$";
|
||||
tok("CARETLOOSE");
|
||||
src[t.CARETLOOSE] = "^" + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + "$";
|
||||
tok("COMPARATORLOOSE");
|
||||
src[t.COMPARATORLOOSE] = "^" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + ")$|^$";
|
||||
tok("COMPARATOR");
|
||||
src[t.COMPARATOR] = "^" + src[t.GTLT] + "\\s*(" + src[t.FULLPLAIN] + ")$|^$";
|
||||
tok("COMPARATORTRIM");
|
||||
src[t.COMPARATORTRIM] = "(\\s*)" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + "|" + src[t.XRANGEPLAIN] + ")";
|
||||
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], "g");
|
||||
safeRe[t.COMPARATORTRIM] = new RegExp(makeSafeRe(src[t.COMPARATORTRIM]), "g");
|
||||
var comparatorTrimReplace = "$1$2$3";
|
||||
tok("HYPHENRANGE");
|
||||
src[t.HYPHENRANGE] = "^\\s*(" + src[t.XRANGEPLAIN] + ")\\s+-\\s+(" + src[t.XRANGEPLAIN] + ")\\s*$";
|
||||
tok("HYPHENRANGELOOSE");
|
||||
src[t.HYPHENRANGELOOSE] = "^\\s*(" + src[t.XRANGEPLAINLOOSE] + ")\\s+-\\s+(" + src[t.XRANGEPLAINLOOSE] + ")\\s*$";
|
||||
tok("STAR");
|
||||
src[t.STAR] = "(<|>)?=?\\s*\\*";
|
||||
for (i = 0; i < R; i++) {
|
||||
debug2(i, src[i]);
|
||||
if (!re[i]) {
|
||||
re[i] = new RegExp(src[i]);
|
||||
safeRe[i] = new RegExp(makeSafeRe(src[i]));
|
||||
}
|
||||
}
|
||||
var i;
|
||||
exports2.parse = parse3;
|
||||
function parse3(version3, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (version3 instanceof SemVer) {
|
||||
return version3;
|
||||
}
|
||||
if (typeof version3 !== "string") {
|
||||
return null;
|
||||
}
|
||||
if (version3.length > MAX_LENGTH) {
|
||||
return null;
|
||||
}
|
||||
var r = options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL];
|
||||
if (!r.test(version3)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return new SemVer(version3, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports2.valid = valid2;
|
||||
function valid2(version3, options) {
|
||||
var v = parse3(version3, options);
|
||||
return v ? v.version : null;
|
||||
}
|
||||
exports2.clean = clean3;
|
||||
function clean3(version3, options) {
|
||||
var s = parse3(version3.trim().replace(/^[=v]+/, ""), options);
|
||||
return s ? s.version : null;
|
||||
}
|
||||
exports2.SemVer = SemVer;
|
||||
function SemVer(version3, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (version3 instanceof SemVer) {
|
||||
if (version3.loose === options.loose) {
|
||||
return version3;
|
||||
} else {
|
||||
version3 = version3.version;
|
||||
}
|
||||
} else if (typeof version3 !== "string") {
|
||||
throw new TypeError("Invalid Version: " + version3);
|
||||
}
|
||||
if (version3.length > MAX_LENGTH) {
|
||||
throw new TypeError("version is longer than " + MAX_LENGTH + " characters");
|
||||
}
|
||||
if (!(this instanceof SemVer)) {
|
||||
return new SemVer(version3, options);
|
||||
}
|
||||
debug2("SemVer", version3, options);
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
var m = version3.trim().match(options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL]);
|
||||
if (!m) {
|
||||
throw new TypeError("Invalid Version: " + version3);
|
||||
}
|
||||
this.raw = version3;
|
||||
this.major = +m[1];
|
||||
this.minor = +m[2];
|
||||
this.patch = +m[3];
|
||||
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
||||
throw new TypeError("Invalid major version");
|
||||
}
|
||||
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
||||
throw new TypeError("Invalid minor version");
|
||||
}
|
||||
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
||||
throw new TypeError("Invalid patch version");
|
||||
}
|
||||
if (!m[4]) {
|
||||
this.prerelease = [];
|
||||
} else {
|
||||
this.prerelease = m[4].split(".").map(function(id) {
|
||||
if (/^[0-9]+$/.test(id)) {
|
||||
var num = +id;
|
||||
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
||||
return num;
|
||||
}
|
||||
}
|
||||
return id;
|
||||
});
|
||||
}
|
||||
this.build = m[5] ? m[5].split(".") : [];
|
||||
this.format();
|
||||
}
|
||||
SemVer.prototype.format = function() {
|
||||
this.version = this.major + "." + this.minor + "." + this.patch;
|
||||
if (this.prerelease.length) {
|
||||
this.version += "-" + this.prerelease.join(".");
|
||||
}
|
||||
return this.version;
|
||||
};
|
||||
SemVer.prototype.toString = function() {
|
||||
return this.version;
|
||||
};
|
||||
SemVer.prototype.compare = function(other) {
|
||||
debug2("SemVer.compare", this.version, this.options, other);
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
return this.compareMain(other) || this.comparePre(other);
|
||||
};
|
||||
SemVer.prototype.compareMain = function(other) {
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
|
||||
};
|
||||
SemVer.prototype.comparePre = function(other) {
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
if (this.prerelease.length && !other.prerelease.length) {
|
||||
return -1;
|
||||
} else if (!this.prerelease.length && other.prerelease.length) {
|
||||
return 1;
|
||||
} else if (!this.prerelease.length && !other.prerelease.length) {
|
||||
return 0;
|
||||
}
|
||||
var i2 = 0;
|
||||
do {
|
||||
var a = this.prerelease[i2];
|
||||
var b = other.prerelease[i2];
|
||||
debug2("prerelease compare", i2, a, b);
|
||||
if (a === void 0 && b === void 0) {
|
||||
return 0;
|
||||
} else if (b === void 0) {
|
||||
return 1;
|
||||
} else if (a === void 0) {
|
||||
return -1;
|
||||
} else if (a === b) {
|
||||
continue;
|
||||
} else {
|
||||
return compareIdentifiers(a, b);
|
||||
}
|
||||
} while (++i2);
|
||||
};
|
||||
SemVer.prototype.compareBuild = function(other) {
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
var i2 = 0;
|
||||
do {
|
||||
var a = this.build[i2];
|
||||
var b = other.build[i2];
|
||||
debug2("prerelease compare", i2, a, b);
|
||||
if (a === void 0 && b === void 0) {
|
||||
return 0;
|
||||
} else if (b === void 0) {
|
||||
return 1;
|
||||
} else if (a === void 0) {
|
||||
return -1;
|
||||
} else if (a === b) {
|
||||
continue;
|
||||
} else {
|
||||
return compareIdentifiers(a, b);
|
||||
}
|
||||
} while (++i2);
|
||||
};
|
||||
SemVer.prototype.inc = function(release, identifier) {
|
||||
switch (release) {
|
||||
case "premajor":
|
||||
this.prerelease.length = 0;
|
||||
this.patch = 0;
|
||||
this.minor = 0;
|
||||
this.major++;
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
case "preminor":
|
||||
this.prerelease.length = 0;
|
||||
this.patch = 0;
|
||||
this.minor++;
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
case "prepatch":
|
||||
this.prerelease.length = 0;
|
||||
this.inc("patch", identifier);
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
// If the input is a non-prerelease version, this acts the same as
|
||||
// prepatch.
|
||||
case "prerelease":
|
||||
if (this.prerelease.length === 0) {
|
||||
this.inc("patch", identifier);
|
||||
}
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
case "major":
|
||||
if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
|
||||
this.major++;
|
||||
}
|
||||
this.minor = 0;
|
||||
this.patch = 0;
|
||||
this.prerelease = [];
|
||||
break;
|
||||
case "minor":
|
||||
if (this.patch !== 0 || this.prerelease.length === 0) {
|
||||
this.minor++;
|
||||
}
|
||||
this.patch = 0;
|
||||
this.prerelease = [];
|
||||
break;
|
||||
case "patch":
|
||||
if (this.prerelease.length === 0) {
|
||||
this.patch++;
|
||||
}
|
||||
this.prerelease = [];
|
||||
break;
|
||||
// This probably shouldn't be used publicly.
|
||||
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
|
||||
case "pre":
|
||||
if (this.prerelease.length === 0) {
|
||||
this.prerelease = [0];
|
||||
} else {
|
||||
var i2 = this.prerelease.length;
|
||||
while (--i2 >= 0) {
|
||||
if (typeof this.prerelease[i2] === "number") {
|
||||
this.prerelease[i2]++;
|
||||
i2 = -2;
|
||||
}
|
||||
}
|
||||
if (i2 === -1) {
|
||||
this.prerelease.push(0);
|
||||
}
|
||||
}
|
||||
if (identifier) {
|
||||
if (this.prerelease[0] === identifier) {
|
||||
if (isNaN(this.prerelease[1])) {
|
||||
this.prerelease = [identifier, 0];
|
||||
}
|
||||
} else {
|
||||
this.prerelease = [identifier, 0];
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new Error("invalid increment argument: " + release);
|
||||
}
|
||||
this.format();
|
||||
this.raw = this.version;
|
||||
return this;
|
||||
};
|
||||
exports2.inc = inc;
|
||||
function inc(version3, release, loose, identifier) {
|
||||
if (typeof loose === "string") {
|
||||
identifier = loose;
|
||||
loose = void 0;
|
||||
}
|
||||
try {
|
||||
return new SemVer(version3, loose).inc(release, identifier).version;
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports2.diff = diff;
|
||||
function diff(version1, version22) {
|
||||
if (eq(version1, version22)) {
|
||||
return null;
|
||||
} else {
|
||||
var v1 = parse3(version1);
|
||||
var v2 = parse3(version22);
|
||||
var prefix2 = "";
|
||||
if (v1.prerelease.length || v2.prerelease.length) {
|
||||
prefix2 = "pre";
|
||||
var defaultResult = "prerelease";
|
||||
}
|
||||
for (var key in v1) {
|
||||
if (key === "major" || key === "minor" || key === "patch") {
|
||||
if (v1[key] !== v2[key]) {
|
||||
return prefix2 + key;
|
||||
}
|
||||
}
|
||||
}
|
||||
return defaultResult;
|
||||
}
|
||||
}
|
||||
exports2.compareIdentifiers = compareIdentifiers;
|
||||
var numeric = /^[0-9]+$/;
|
||||
function compareIdentifiers(a, b) {
|
||||
var anum = numeric.test(a);
|
||||
var bnum = numeric.test(b);
|
||||
if (anum && bnum) {
|
||||
a = +a;
|
||||
b = +b;
|
||||
}
|
||||
return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
|
||||
}
|
||||
exports2.rcompareIdentifiers = rcompareIdentifiers;
|
||||
function rcompareIdentifiers(a, b) {
|
||||
return compareIdentifiers(b, a);
|
||||
}
|
||||
exports2.major = major;
|
||||
function major(a, loose) {
|
||||
return new SemVer(a, loose).major;
|
||||
}
|
||||
exports2.minor = minor;
|
||||
function minor(a, loose) {
|
||||
return new SemVer(a, loose).minor;
|
||||
}
|
||||
exports2.patch = patch;
|
||||
function patch(a, loose) {
|
||||
return new SemVer(a, loose).patch;
|
||||
}
|
||||
exports2.compare = compare;
|
||||
function compare(a, b, loose) {
|
||||
return new SemVer(a, loose).compare(new SemVer(b, loose));
|
||||
}
|
||||
exports2.compareLoose = compareLoose;
|
||||
function compareLoose(a, b) {
|
||||
return compare(a, b, true);
|
||||
}
|
||||
exports2.compareBuild = compareBuild;
|
||||
function compareBuild(a, b, loose) {
|
||||
var versionA = new SemVer(a, loose);
|
||||
var versionB = new SemVer(b, loose);
|
||||
return versionA.compare(versionB) || versionA.compareBuild(versionB);
|
||||
}
|
||||
exports2.rcompare = rcompare;
|
||||
function rcompare(a, b, loose) {
|
||||
return compare(b, a, loose);
|
||||
}
|
||||
exports2.sort = sort;
|
||||
function sort(list, loose) {
|
||||
return list.sort(function(a, b) {
|
||||
return exports2.compareBuild(a, b, loose);
|
||||
});
|
||||
}
|
||||
exports2.rsort = rsort;
|
||||
function rsort(list, loose) {
|
||||
return list.sort(function(a, b) {
|
||||
return exports2.compareBuild(b, a, loose);
|
||||
});
|
||||
}
|
||||
exports2.gt = gt2;
|
||||
function gt2(a, b, loose) {
|
||||
return compare(a, b, loose) > 0;
|
||||
}
|
||||
exports2.lt = lt;
|
||||
function lt(a, b, loose) {
|
||||
return compare(a, b, loose) < 0;
|
||||
}
|
||||
exports2.eq = eq;
|
||||
function eq(a, b, loose) {
|
||||
return compare(a, b, loose) === 0;
|
||||
}
|
||||
exports2.neq = neq;
|
||||
function neq(a, b, loose) {
|
||||
return compare(a, b, loose) !== 0;
|
||||
}
|
||||
exports2.gte = gte;
|
||||
function gte(a, b, loose) {
|
||||
return compare(a, b, loose) >= 0;
|
||||
}
|
||||
exports2.lte = lte;
|
||||
function lte(a, b, loose) {
|
||||
return compare(a, b, loose) <= 0;
|
||||
}
|
||||
exports2.cmp = cmp;
|
||||
function 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 gt2(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);
|
||||
}
|
||||
}
|
||||
exports2.Comparator = Comparator;
|
||||
function Comparator(comp26, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (comp26 instanceof Comparator) {
|
||||
if (comp26.loose === !!options.loose) {
|
||||
return comp26;
|
||||
} else {
|
||||
comp26 = comp26.value;
|
||||
}
|
||||
}
|
||||
if (!(this instanceof Comparator)) {
|
||||
return new Comparator(comp26, options);
|
||||
}
|
||||
comp26 = comp26.trim().split(/\s+/).join(" ");
|
||||
debug2("comparator", comp26, options);
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
this.parse(comp26);
|
||||
if (this.semver === ANY) {
|
||||
this.value = "";
|
||||
} else {
|
||||
this.value = this.operator + this.semver.version;
|
||||
}
|
||||
debug2("comp", this);
|
||||
}
|
||||
var ANY = {};
|
||||
Comparator.prototype.parse = function(comp26) {
|
||||
var r = this.options.loose ? safeRe[t.COMPARATORLOOSE] : safeRe[t.COMPARATOR];
|
||||
var m = comp26.match(r);
|
||||
if (!m) {
|
||||
throw new TypeError("Invalid comparator: " + comp26);
|
||||
}
|
||||
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);
|
||||
}
|
||||
};
|
||||
Comparator.prototype.toString = function() {
|
||||
return this.value;
|
||||
};
|
||||
Comparator.prototype.test = function(version3) {
|
||||
debug2("Comparator.test", version3, this.options.loose);
|
||||
if (this.semver === ANY || version3 === ANY) {
|
||||
return true;
|
||||
}
|
||||
if (typeof version3 === "string") {
|
||||
try {
|
||||
version3 = new SemVer(version3, this.options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return cmp(version3, this.operator, this.semver, this.options);
|
||||
};
|
||||
Comparator.prototype.intersects = function(comp26, options) {
|
||||
if (!(comp26 instanceof Comparator)) {
|
||||
throw new TypeError("a Comparator is required");
|
||||
}
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
var rangeTmp;
|
||||
if (this.operator === "") {
|
||||
if (this.value === "") {
|
||||
return true;
|
||||
}
|
||||
rangeTmp = new Range(comp26.value, options);
|
||||
return satisfies4(this.value, rangeTmp, options);
|
||||
} else if (comp26.operator === "") {
|
||||
if (comp26.value === "") {
|
||||
return true;
|
||||
}
|
||||
rangeTmp = new Range(this.value, options);
|
||||
return satisfies4(comp26.semver, rangeTmp, options);
|
||||
}
|
||||
var sameDirectionIncreasing = (this.operator === ">=" || this.operator === ">") && (comp26.operator === ">=" || comp26.operator === ">");
|
||||
var sameDirectionDecreasing = (this.operator === "<=" || this.operator === "<") && (comp26.operator === "<=" || comp26.operator === "<");
|
||||
var sameSemVer = this.semver.version === comp26.semver.version;
|
||||
var differentDirectionsInclusive = (this.operator === ">=" || this.operator === "<=") && (comp26.operator === ">=" || comp26.operator === "<=");
|
||||
var oppositeDirectionsLessThan = cmp(this.semver, "<", comp26.semver, options) && ((this.operator === ">=" || this.operator === ">") && (comp26.operator === "<=" || comp26.operator === "<"));
|
||||
var oppositeDirectionsGreaterThan = cmp(this.semver, ">", comp26.semver, options) && ((this.operator === "<=" || this.operator === "<") && (comp26.operator === ">=" || comp26.operator === ">"));
|
||||
return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
|
||||
};
|
||||
exports2.Range = Range;
|
||||
function Range(range2, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (range2 instanceof Range) {
|
||||
if (range2.loose === !!options.loose && range2.includePrerelease === !!options.includePrerelease) {
|
||||
return range2;
|
||||
} else {
|
||||
return new Range(range2.raw, options);
|
||||
}
|
||||
}
|
||||
if (range2 instanceof Comparator) {
|
||||
return new Range(range2.value, options);
|
||||
}
|
||||
if (!(this instanceof Range)) {
|
||||
return new Range(range2, options);
|
||||
}
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
this.includePrerelease = !!options.includePrerelease;
|
||||
this.raw = range2.trim().split(/\s+/).join(" ");
|
||||
this.set = this.raw.split("||").map(function(range3) {
|
||||
return this.parseRange(range3.trim());
|
||||
}, this).filter(function(c) {
|
||||
return c.length;
|
||||
});
|
||||
if (!this.set.length) {
|
||||
throw new TypeError("Invalid SemVer Range: " + this.raw);
|
||||
}
|
||||
this.format();
|
||||
}
|
||||
Range.prototype.format = function() {
|
||||
this.range = this.set.map(function(comps) {
|
||||
return comps.join(" ").trim();
|
||||
}).join("||").trim();
|
||||
return this.range;
|
||||
};
|
||||
Range.prototype.toString = function() {
|
||||
return this.range;
|
||||
};
|
||||
Range.prototype.parseRange = function(range2) {
|
||||
var loose = this.options.loose;
|
||||
var hr = loose ? safeRe[t.HYPHENRANGELOOSE] : safeRe[t.HYPHENRANGE];
|
||||
range2 = range2.replace(hr, hyphenReplace);
|
||||
debug2("hyphen replace", range2);
|
||||
range2 = range2.replace(safeRe[t.COMPARATORTRIM], comparatorTrimReplace);
|
||||
debug2("comparator trim", range2, safeRe[t.COMPARATORTRIM]);
|
||||
range2 = range2.replace(safeRe[t.TILDETRIM], tildeTrimReplace);
|
||||
range2 = range2.replace(safeRe[t.CARETTRIM], caretTrimReplace);
|
||||
range2 = range2.split(/\s+/).join(" ");
|
||||
var compRe = loose ? safeRe[t.COMPARATORLOOSE] : safeRe[t.COMPARATOR];
|
||||
var set = range2.split(" ").map(function(comp26) {
|
||||
return parseComparator(comp26, this.options);
|
||||
}, this).join(" ").split(/\s+/);
|
||||
if (this.options.loose) {
|
||||
set = set.filter(function(comp26) {
|
||||
return !!comp26.match(compRe);
|
||||
});
|
||||
}
|
||||
set = set.map(function(comp26) {
|
||||
return new Comparator(comp26, this.options);
|
||||
}, this);
|
||||
return set;
|
||||
};
|
||||
Range.prototype.intersects = function(range2, options) {
|
||||
if (!(range2 instanceof Range)) {
|
||||
throw new TypeError("a Range is required");
|
||||
}
|
||||
return this.set.some(function(thisComparators) {
|
||||
return isSatisfiable(thisComparators, options) && range2.set.some(function(rangeComparators) {
|
||||
return isSatisfiable(rangeComparators, options) && thisComparators.every(function(thisComparator) {
|
||||
return rangeComparators.every(function(rangeComparator) {
|
||||
return thisComparator.intersects(rangeComparator, options);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
function isSatisfiable(comparators, options) {
|
||||
var result = true;
|
||||
var remainingComparators = comparators.slice();
|
||||
var testComparator = remainingComparators.pop();
|
||||
while (result && remainingComparators.length) {
|
||||
result = remainingComparators.every(function(otherComparator) {
|
||||
return testComparator.intersects(otherComparator, options);
|
||||
});
|
||||
testComparator = remainingComparators.pop();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
exports2.toComparators = toComparators;
|
||||
function toComparators(range2, options) {
|
||||
return new Range(range2, options).set.map(function(comp26) {
|
||||
return comp26.map(function(c) {
|
||||
return c.value;
|
||||
}).join(" ").trim().split(" ");
|
||||
});
|
||||
}
|
||||
function parseComparator(comp26, options) {
|
||||
debug2("comp", comp26, options);
|
||||
comp26 = replaceCarets(comp26, options);
|
||||
debug2("caret", comp26);
|
||||
comp26 = replaceTildes(comp26, options);
|
||||
debug2("tildes", comp26);
|
||||
comp26 = replaceXRanges(comp26, options);
|
||||
debug2("xrange", comp26);
|
||||
comp26 = replaceStars(comp26, options);
|
||||
debug2("stars", comp26);
|
||||
return comp26;
|
||||
}
|
||||
function isX(id) {
|
||||
return !id || id.toLowerCase() === "x" || id === "*";
|
||||
}
|
||||
function replaceTildes(comp26, options) {
|
||||
return comp26.trim().split(/\s+/).map(function(comp27) {
|
||||
return replaceTilde(comp27, options);
|
||||
}).join(" ");
|
||||
}
|
||||
function replaceTilde(comp26, options) {
|
||||
var r = options.loose ? safeRe[t.TILDELOOSE] : safeRe[t.TILDE];
|
||||
return comp26.replace(r, function(_, M, m, p, pr) {
|
||||
debug2("tilde", comp26, _, M, m, p, pr);
|
||||
var ret;
|
||||
if (isX(M)) {
|
||||
ret = "";
|
||||
} else if (isX(m)) {
|
||||
ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
|
||||
} else if (isX(p)) {
|
||||
ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
|
||||
} else if (pr) {
|
||||
debug2("replaceTilde pr", pr);
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
|
||||
}
|
||||
debug2("tilde return", ret);
|
||||
return ret;
|
||||
});
|
||||
}
|
||||
function replaceCarets(comp26, options) {
|
||||
return comp26.trim().split(/\s+/).map(function(comp27) {
|
||||
return replaceCaret(comp27, options);
|
||||
}).join(" ");
|
||||
}
|
||||
function replaceCaret(comp26, options) {
|
||||
debug2("caret", comp26, options);
|
||||
var r = options.loose ? safeRe[t.CARETLOOSE] : safeRe[t.CARET];
|
||||
return comp26.replace(r, function(_, M, m, p, pr) {
|
||||
debug2("caret", comp26, _, M, m, p, pr);
|
||||
var ret;
|
||||
if (isX(M)) {
|
||||
ret = "";
|
||||
} else if (isX(m)) {
|
||||
ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
|
||||
} else if (isX(p)) {
|
||||
if (M === "0") {
|
||||
ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + ".0 <" + (+M + 1) + ".0.0";
|
||||
}
|
||||
} else if (pr) {
|
||||
debug2("replaceCaret pr", pr);
|
||||
if (M === "0") {
|
||||
if (m === "0") {
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + m + "." + (+p + 1);
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
|
||||
}
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + (+M + 1) + ".0.0";
|
||||
}
|
||||
} else {
|
||||
debug2("no pr");
|
||||
if (M === "0") {
|
||||
if (m === "0") {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + M + "." + m + "." + (+p + 1);
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
|
||||
}
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + (+M + 1) + ".0.0";
|
||||
}
|
||||
}
|
||||
debug2("caret return", ret);
|
||||
return ret;
|
||||
});
|
||||
}
|
||||
function replaceXRanges(comp26, options) {
|
||||
debug2("replaceXRanges", comp26, options);
|
||||
return comp26.split(/\s+/).map(function(comp27) {
|
||||
return replaceXRange(comp27, options);
|
||||
}).join(" ");
|
||||
}
|
||||
function replaceXRange(comp26, options) {
|
||||
comp26 = comp26.trim();
|
||||
var r = options.loose ? safeRe[t.XRANGELOOSE] : safeRe[t.XRANGE];
|
||||
return comp26.replace(r, function(ret, gtlt, M, m, p, pr) {
|
||||
debug2("xRange", comp26, ret, gtlt, M, m, p, pr);
|
||||
var xM = isX(M);
|
||||
var xm = xM || isX(m);
|
||||
var xp = xm || isX(p);
|
||||
var 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;
|
||||
}
|
||||
}
|
||||
ret = gtlt + M + "." + m + "." + p + pr;
|
||||
} else if (xm) {
|
||||
ret = ">=" + M + ".0.0" + pr + " <" + (+M + 1) + ".0.0" + pr;
|
||||
} else if (xp) {
|
||||
ret = ">=" + M + "." + m + ".0" + pr + " <" + M + "." + (+m + 1) + ".0" + pr;
|
||||
}
|
||||
debug2("xRange return", ret);
|
||||
return ret;
|
||||
});
|
||||
}
|
||||
function replaceStars(comp26, options) {
|
||||
debug2("replaceStars", comp26, options);
|
||||
return comp26.trim().replace(safeRe[t.STAR], "");
|
||||
}
|
||||
function hyphenReplace($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";
|
||||
} else if (isX(fp)) {
|
||||
from = ">=" + fM + "." + fm + ".0";
|
||||
} else {
|
||||
from = ">=" + from;
|
||||
}
|
||||
if (isX(tM)) {
|
||||
to = "";
|
||||
} else if (isX(tm)) {
|
||||
to = "<" + (+tM + 1) + ".0.0";
|
||||
} else if (isX(tp)) {
|
||||
to = "<" + tM + "." + (+tm + 1) + ".0";
|
||||
} else if (tpr) {
|
||||
to = "<=" + tM + "." + tm + "." + tp + "-" + tpr;
|
||||
} else {
|
||||
to = "<=" + to;
|
||||
}
|
||||
return (from + " " + to).trim();
|
||||
}
|
||||
Range.prototype.test = function(version3) {
|
||||
if (!version3) {
|
||||
return false;
|
||||
}
|
||||
if (typeof version3 === "string") {
|
||||
try {
|
||||
version3 = new SemVer(version3, this.options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (var i2 = 0; i2 < this.set.length; i2++) {
|
||||
if (testSet(this.set[i2], version3, this.options)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
function testSet(set, version3, options) {
|
||||
for (var i2 = 0; i2 < set.length; i2++) {
|
||||
if (!set[i2].test(version3)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (version3.prerelease.length && !options.includePrerelease) {
|
||||
for (i2 = 0; i2 < set.length; i2++) {
|
||||
debug2(set[i2].semver);
|
||||
if (set[i2].semver === ANY) {
|
||||
continue;
|
||||
}
|
||||
if (set[i2].semver.prerelease.length > 0) {
|
||||
var allowed = set[i2].semver;
|
||||
if (allowed.major === version3.major && allowed.minor === version3.minor && allowed.patch === version3.patch) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exports2.satisfies = satisfies4;
|
||||
function satisfies4(version3, range2, options) {
|
||||
try {
|
||||
range2 = new Range(range2, options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
return range2.test(version3);
|
||||
}
|
||||
exports2.maxSatisfying = maxSatisfying3;
|
||||
function maxSatisfying3(versions, range2, options) {
|
||||
var max = null;
|
||||
var maxSV = null;
|
||||
try {
|
||||
var rangeObj = new Range(range2, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
versions.forEach(function(v) {
|
||||
if (rangeObj.test(v)) {
|
||||
if (!max || maxSV.compare(v) === -1) {
|
||||
max = v;
|
||||
maxSV = new SemVer(max, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
return max;
|
||||
}
|
||||
exports2.minSatisfying = minSatisfying4;
|
||||
function minSatisfying4(versions, range2, options) {
|
||||
var min = null;
|
||||
var minSV = null;
|
||||
try {
|
||||
var rangeObj = new Range(range2, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
versions.forEach(function(v) {
|
||||
if (rangeObj.test(v)) {
|
||||
if (!min || minSV.compare(v) === 1) {
|
||||
min = v;
|
||||
minSV = new SemVer(min, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
return min;
|
||||
}
|
||||
exports2.minVersion = minVersion;
|
||||
function minVersion(range2, loose) {
|
||||
range2 = new Range(range2, loose);
|
||||
var minver = new SemVer("0.0.0");
|
||||
if (range2.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
minver = new SemVer("0.0.0-0");
|
||||
if (range2.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
minver = null;
|
||||
for (var i2 = 0; i2 < range2.set.length; ++i2) {
|
||||
var comparators = range2.set[i2];
|
||||
comparators.forEach(function(comparator) {
|
||||
var 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();
|
||||
/* fallthrough */
|
||||
case "":
|
||||
case ">=":
|
||||
if (!minver || gt2(minver, compver)) {
|
||||
minver = compver;
|
||||
}
|
||||
break;
|
||||
case "<":
|
||||
case "<=":
|
||||
break;
|
||||
/* istanbul ignore next */
|
||||
default:
|
||||
throw new Error("Unexpected operation: " + comparator.operator);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (minver && range2.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
exports2.validRange = validRange;
|
||||
function validRange(range2, options) {
|
||||
try {
|
||||
return new Range(range2, options).range || "*";
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports2.ltr = ltr;
|
||||
function ltr(version3, range2, options) {
|
||||
return outside(version3, range2, "<", options);
|
||||
}
|
||||
exports2.gtr = gtr;
|
||||
function gtr(version3, range2, options) {
|
||||
return outside(version3, range2, ">", options);
|
||||
}
|
||||
exports2.outside = outside;
|
||||
function outside(version3, range2, hilo, options) {
|
||||
version3 = new SemVer(version3, options);
|
||||
range2 = new Range(range2, options);
|
||||
var gtfn, ltefn, ltfn, comp26, ecomp;
|
||||
switch (hilo) {
|
||||
case ">":
|
||||
gtfn = gt2;
|
||||
ltefn = lte;
|
||||
ltfn = lt;
|
||||
comp26 = ">";
|
||||
ecomp = ">=";
|
||||
break;
|
||||
case "<":
|
||||
gtfn = lt;
|
||||
ltefn = gte;
|
||||
ltfn = gt2;
|
||||
comp26 = "<";
|
||||
ecomp = "<=";
|
||||
break;
|
||||
default:
|
||||
throw new TypeError('Must provide a hilo val of "<" or ">"');
|
||||
}
|
||||
if (satisfies4(version3, range2, options)) {
|
||||
return false;
|
||||
}
|
||||
for (var i2 = 0; i2 < range2.set.length; ++i2) {
|
||||
var comparators = range2.set[i2];
|
||||
var high = null;
|
||||
var low = null;
|
||||
comparators.forEach(function(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 === comp26 || high.operator === ecomp) {
|
||||
return false;
|
||||
}
|
||||
if ((!low.operator || low.operator === comp26) && ltefn(version3, low.semver)) {
|
||||
return false;
|
||||
} else if (low.operator === ecomp && ltfn(version3, low.semver)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exports2.prerelease = prerelease;
|
||||
function prerelease(version3, options) {
|
||||
var parsed = parse3(version3, options);
|
||||
return parsed && parsed.prerelease.length ? parsed.prerelease : null;
|
||||
}
|
||||
exports2.intersects = intersects;
|
||||
function intersects(r1, r2, options) {
|
||||
r1 = new Range(r1, options);
|
||||
r2 = new Range(r2, options);
|
||||
return r1.intersects(r2);
|
||||
}
|
||||
exports2.coerce = coerce;
|
||||
function coerce(version3, options) {
|
||||
if (version3 instanceof SemVer) {
|
||||
return version3;
|
||||
}
|
||||
if (typeof version3 === "number") {
|
||||
version3 = String(version3);
|
||||
}
|
||||
if (typeof version3 !== "string") {
|
||||
return null;
|
||||
}
|
||||
options = options || {};
|
||||
var match2 = null;
|
||||
if (!options.rtl) {
|
||||
match2 = version3.match(safeRe[t.COERCE]);
|
||||
} else {
|
||||
var next;
|
||||
while ((next = safeRe[t.COERCERTL].exec(version3)) && (!match2 || match2.index + match2[0].length !== version3.length)) {
|
||||
if (!match2 || next.index + next[0].length !== match2.index + match2[0].length) {
|
||||
match2 = next;
|
||||
}
|
||||
safeRe[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
|
||||
}
|
||||
safeRe[t.COERCERTL].lastIndex = -1;
|
||||
}
|
||||
if (match2 === null) {
|
||||
return null;
|
||||
}
|
||||
return parse3(match2[2] + "." + (match2[3] || "0") + "." + (match2[4] || "0"), options);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/undici/lib/core/symbols.js
|
||||
var require_symbols6 = __commonJS({
|
||||
"node_modules/undici/lib/core/symbols.js"(exports2, module2) {
|
||||
@@ -30025,14 +31829,14 @@ var require_util9 = __commonJS({
|
||||
}
|
||||
const port = url2.port != null ? url2.port : url2.protocol === "https:" ? 443 : 80;
|
||||
let origin = url2.origin != null ? url2.origin : `${url2.protocol || ""}//${url2.hostname || ""}:${port}`;
|
||||
let path17 = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
|
||||
let path16 = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
|
||||
if (origin[origin.length - 1] === "/") {
|
||||
origin = origin.slice(0, origin.length - 1);
|
||||
}
|
||||
if (path17 && path17[0] !== "/") {
|
||||
path17 = `/${path17}`;
|
||||
if (path16 && path16[0] !== "/") {
|
||||
path16 = `/${path16}`;
|
||||
}
|
||||
return new URL(`${origin}${path17}`);
|
||||
return new URL(`${origin}${path16}`);
|
||||
}
|
||||
if (!isHttpOrHttpsPrefixed(url2.origin || url2.protocol)) {
|
||||
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
|
||||
@@ -30843,9 +32647,9 @@ var require_diagnostics2 = __commonJS({
|
||||
"undici:client:sendHeaders",
|
||||
(evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin }
|
||||
request: { method, path: path16, origin }
|
||||
} = evt;
|
||||
debugLog("sending request to %s %s%s", method, origin, path17);
|
||||
debugLog("sending request to %s %s%s", method, origin, path16);
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -30863,14 +32667,14 @@ var require_diagnostics2 = __commonJS({
|
||||
"undici:request:headers",
|
||||
(evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin },
|
||||
request: { method, path: path16, origin },
|
||||
response: { statusCode }
|
||||
} = evt;
|
||||
debugLog(
|
||||
"received response to %s %s%s - HTTP %d",
|
||||
method,
|
||||
origin,
|
||||
path17,
|
||||
path16,
|
||||
statusCode
|
||||
);
|
||||
}
|
||||
@@ -30879,23 +32683,23 @@ var require_diagnostics2 = __commonJS({
|
||||
"undici:request:trailers",
|
||||
(evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin }
|
||||
request: { method, path: path16, origin }
|
||||
} = evt;
|
||||
debugLog("trailers received from %s %s%s", method, origin, path17);
|
||||
debugLog("trailers received from %s %s%s", method, origin, path16);
|
||||
}
|
||||
);
|
||||
diagnosticsChannel.subscribe(
|
||||
"undici:request:error",
|
||||
(evt) => {
|
||||
const {
|
||||
request: { method, path: path17, origin },
|
||||
request: { method, path: path16, origin },
|
||||
error: error2
|
||||
} = evt;
|
||||
debugLog(
|
||||
"request to %s %s%s errored - %s",
|
||||
method,
|
||||
origin,
|
||||
path17,
|
||||
path16,
|
||||
error2.message
|
||||
);
|
||||
}
|
||||
@@ -30996,7 +32800,7 @@ var require_request3 = __commonJS({
|
||||
var kHandler = /* @__PURE__ */ Symbol("handler");
|
||||
var Request = class {
|
||||
constructor(origin, {
|
||||
path: path17,
|
||||
path: path16,
|
||||
method,
|
||||
body: body2,
|
||||
headers,
|
||||
@@ -31013,11 +32817,11 @@ var require_request3 = __commonJS({
|
||||
maxRedirections,
|
||||
typeOfService
|
||||
}, handler) {
|
||||
if (typeof path17 !== "string") {
|
||||
if (typeof path16 !== "string") {
|
||||
throw new InvalidArgumentError("path must be a string");
|
||||
} else if (path17[0] !== "/" && !(path17.startsWith("http://") || path17.startsWith("https://")) && method !== "CONNECT") {
|
||||
} else if (path16[0] !== "/" && !(path16.startsWith("http://") || path16.startsWith("https://")) && method !== "CONNECT") {
|
||||
throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
|
||||
} else if (invalidPathRegex.test(path17)) {
|
||||
} else if (invalidPathRegex.test(path16)) {
|
||||
throw new InvalidArgumentError("invalid request path");
|
||||
}
|
||||
if (typeof method !== "string") {
|
||||
@@ -31092,7 +32896,7 @@ var require_request3 = __commonJS({
|
||||
this.completed = false;
|
||||
this.aborted = false;
|
||||
this.upgrade = upgrade || null;
|
||||
this.path = query ? serializePathWithQuery(path17, query) : path17;
|
||||
this.path = query ? serializePathWithQuery(path16, query) : path16;
|
||||
this.origin = origin;
|
||||
this.protocol = getProtocolFromUrlString(origin);
|
||||
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
|
||||
@@ -36125,7 +37929,7 @@ var require_client_h12 = __commonJS({
|
||||
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
||||
}
|
||||
function writeH1(client, request) {
|
||||
const { method, path: path17, host, upgrade, blocking, reset } = request;
|
||||
const { method, path: path16, host, upgrade, blocking, reset } = request;
|
||||
let { body: body2, headers, contentLength: contentLength2 } = request;
|
||||
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
|
||||
if (util7.isFormDataLike(body2)) {
|
||||
@@ -36194,7 +37998,7 @@ var require_client_h12 = __commonJS({
|
||||
if (socket.setTypeOfService) {
|
||||
socket.setTypeOfService(request.typeOfService);
|
||||
}
|
||||
let header = `${method} ${path17} HTTP/1.1\r
|
||||
let header = `${method} ${path16} HTTP/1.1\r
|
||||
`;
|
||||
if (typeof host === "string") {
|
||||
header += `host: ${host}\r
|
||||
@@ -36847,7 +38651,7 @@ var require_client_h22 = __commonJS({
|
||||
function writeH2(client, request) {
|
||||
const requestTimeout = request.bodyTimeout ?? client[kBodyTimeout];
|
||||
const session = client[kHTTP2Session];
|
||||
const { method, path: path17, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request;
|
||||
const { method, path: path16, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request;
|
||||
let { body: body2 } = request;
|
||||
if (upgrade != null && upgrade !== "websocket") {
|
||||
util7.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade "${upgrade}" not supported over HTTP/2`));
|
||||
@@ -36915,7 +38719,7 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
headers[HTTP2_HEADER_METHOD] = "CONNECT";
|
||||
headers[HTTP2_HEADER_PROTOCOL] = "websocket";
|
||||
headers[HTTP2_HEADER_PATH] = path17;
|
||||
headers[HTTP2_HEADER_PATH] = path16;
|
||||
if (protocol === "ws:" || protocol === "wss:") {
|
||||
headers[HTTP2_HEADER_SCHEME] = protocol === "ws:" ? "http" : "https";
|
||||
} else {
|
||||
@@ -36956,7 +38760,7 @@ var require_client_h22 = __commonJS({
|
||||
stream4.setTimeout(requestTimeout);
|
||||
return true;
|
||||
}
|
||||
headers[HTTP2_HEADER_PATH] = path17;
|
||||
headers[HTTP2_HEADER_PATH] = path16;
|
||||
headers[HTTP2_HEADER_SCHEME] = protocol === "http:" ? "http" : "https";
|
||||
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
|
||||
if (body2 && typeof body2.read === "function") {
|
||||
@@ -39253,10 +41057,10 @@ var require_proxy_agent2 = __commonJS({
|
||||
};
|
||||
const {
|
||||
origin,
|
||||
path: path17 = "/",
|
||||
path: path16 = "/",
|
||||
headers = {}
|
||||
} = opts;
|
||||
opts.path = origin + path17;
|
||||
opts.path = origin + path16;
|
||||
if (!("host" in headers) && !("Host" in headers)) {
|
||||
const { host } = new URL(origin);
|
||||
headers.host = host;
|
||||
@@ -41317,20 +43121,20 @@ var require_mock_utils2 = __commonJS({
|
||||
}
|
||||
return normalizedQp;
|
||||
}
|
||||
function safeUrl(path17) {
|
||||
if (typeof path17 !== "string") {
|
||||
return path17;
|
||||
function safeUrl(path16) {
|
||||
if (typeof path16 !== "string") {
|
||||
return path16;
|
||||
}
|
||||
const pathSegments = path17.split("?", 3);
|
||||
const pathSegments = path16.split("?", 3);
|
||||
if (pathSegments.length !== 2) {
|
||||
return path17;
|
||||
return path16;
|
||||
}
|
||||
const qp = new URLSearchParams(pathSegments.pop());
|
||||
qp.sort();
|
||||
return [...pathSegments, qp.toString()].join("?");
|
||||
}
|
||||
function matchKey(mockDispatch2, { path: path17, method, body: body2, headers }) {
|
||||
const pathMatch = matchValue(mockDispatch2.path, path17);
|
||||
function matchKey(mockDispatch2, { path: path16, method, body: body2, headers }) {
|
||||
const pathMatch = matchValue(mockDispatch2.path, path16);
|
||||
const methodMatch = matchValue(mockDispatch2.method, method);
|
||||
const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body2) : true;
|
||||
const headersMatch = matchHeaders(mockDispatch2, headers);
|
||||
@@ -41355,8 +43159,8 @@ var require_mock_utils2 = __commonJS({
|
||||
const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path;
|
||||
const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath;
|
||||
const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath);
|
||||
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path17, ignoreTrailingSlash }) => {
|
||||
return ignoreTrailingSlash ? matchValue(removeTrailingSlash(safeUrl(path17)), resolvedPathWithoutTrailingSlash) : matchValue(safeUrl(path17), resolvedPath);
|
||||
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path16, ignoreTrailingSlash }) => {
|
||||
return ignoreTrailingSlash ? matchValue(removeTrailingSlash(safeUrl(path16)), resolvedPathWithoutTrailingSlash) : matchValue(safeUrl(path16), resolvedPath);
|
||||
});
|
||||
if (matchedMockDispatches.length === 0) {
|
||||
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`);
|
||||
@@ -41394,19 +43198,19 @@ var require_mock_utils2 = __commonJS({
|
||||
mockDispatches.splice(index, 1);
|
||||
}
|
||||
}
|
||||
function removeTrailingSlash(path17) {
|
||||
while (path17.endsWith("/")) {
|
||||
path17 = path17.slice(0, -1);
|
||||
function removeTrailingSlash(path16) {
|
||||
while (path16.endsWith("/")) {
|
||||
path16 = path16.slice(0, -1);
|
||||
}
|
||||
if (path17.length === 0) {
|
||||
path17 = "/";
|
||||
if (path16.length === 0) {
|
||||
path16 = "/";
|
||||
}
|
||||
return path17;
|
||||
return path16;
|
||||
}
|
||||
function buildKey(opts) {
|
||||
const { path: path17, method, body: body2, headers, query } = opts;
|
||||
const { path: path16, method, body: body2, headers, query } = opts;
|
||||
return {
|
||||
path: path17,
|
||||
path: path16,
|
||||
method,
|
||||
body: body2,
|
||||
headers,
|
||||
@@ -42093,10 +43897,10 @@ var require_pending_interceptors_formatter2 = __commonJS({
|
||||
}
|
||||
format(pendingInterceptors) {
|
||||
const withPrettyHeaders = pendingInterceptors.map(
|
||||
({ method, path: path17, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
||||
({ method, path: path16, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
||||
Method: method,
|
||||
Origin: origin,
|
||||
Path: path17,
|
||||
Path: path16,
|
||||
"Status code": statusCode,
|
||||
Persistent: persist ? PERSISTENT : NOT_PERSISTENT,
|
||||
Invocations: timesInvoked,
|
||||
@@ -42178,9 +43982,9 @@ var require_mock_agent2 = __commonJS({
|
||||
const acceptNonStandardSearchParameters = this[kMockAgentAcceptsNonStandardSearchParameters];
|
||||
const dispatchOpts = { ...opts };
|
||||
if (acceptNonStandardSearchParameters && dispatchOpts.path) {
|
||||
const [path17, searchParams] = dispatchOpts.path.split("?");
|
||||
const [path16, searchParams] = dispatchOpts.path.split("?");
|
||||
const normalizedSearchParams = normalizeSearchParams(searchParams, acceptNonStandardSearchParameters);
|
||||
dispatchOpts.path = `${path17}?${normalizedSearchParams}`;
|
||||
dispatchOpts.path = `${path16}?${normalizedSearchParams}`;
|
||||
}
|
||||
return this[kAgent].dispatch(dispatchOpts, handler);
|
||||
}
|
||||
@@ -42581,12 +44385,12 @@ var require_snapshot_recorder = __commonJS({
|
||||
* @return {Promise<void>} - Resolves when snapshots are loaded
|
||||
*/
|
||||
async loadSnapshots(filePath) {
|
||||
const path17 = filePath || this.#snapshotPath;
|
||||
if (!path17) {
|
||||
const path16 = filePath || this.#snapshotPath;
|
||||
if (!path16) {
|
||||
throw new InvalidArgumentError("Snapshot path is required");
|
||||
}
|
||||
try {
|
||||
const data = await readFile(resolve3(path17), "utf8");
|
||||
const data = await readFile(resolve3(path16), "utf8");
|
||||
const parsed = JSON.parse(data);
|
||||
if (Array.isArray(parsed)) {
|
||||
this.#snapshots.clear();
|
||||
@@ -42600,7 +44404,7 @@ var require_snapshot_recorder = __commonJS({
|
||||
if (error2.code === "ENOENT") {
|
||||
this.#snapshots.clear();
|
||||
} else {
|
||||
throw new UndiciError(`Failed to load snapshots from ${path17}`, { cause: error2 });
|
||||
throw new UndiciError(`Failed to load snapshots from ${path16}`, { cause: error2 });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42611,11 +44415,11 @@ var require_snapshot_recorder = __commonJS({
|
||||
* @returns {Promise<void>} - Resolves when snapshots are saved
|
||||
*/
|
||||
async saveSnapshots(filePath) {
|
||||
const path17 = filePath || this.#snapshotPath;
|
||||
if (!path17) {
|
||||
const path16 = filePath || this.#snapshotPath;
|
||||
if (!path16) {
|
||||
throw new InvalidArgumentError("Snapshot path is required");
|
||||
}
|
||||
const resolvedPath = resolve3(path17);
|
||||
const resolvedPath = resolve3(path16);
|
||||
await mkdir2(dirname6(resolvedPath), { recursive: true });
|
||||
const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot2]) => ({
|
||||
hash,
|
||||
@@ -43240,15 +45044,15 @@ var require_redirect_handler2 = __commonJS({
|
||||
return;
|
||||
}
|
||||
const { origin, pathname, search } = util7.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
|
||||
const path17 = search ? `${pathname}${search}` : pathname;
|
||||
const redirectUrlString = `${origin}${path17}`;
|
||||
const path16 = search ? `${pathname}${search}` : pathname;
|
||||
const redirectUrlString = `${origin}${path16}`;
|
||||
for (const historyUrl of this.history) {
|
||||
if (historyUrl.toString() === redirectUrlString) {
|
||||
throw new InvalidArgumentError(`Redirect loop detected. Cannot redirect to ${origin}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`);
|
||||
}
|
||||
}
|
||||
this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
|
||||
this.opts.path = path17;
|
||||
this.opts.path = path16;
|
||||
this.opts.origin = origin;
|
||||
this.opts.query = null;
|
||||
}
|
||||
@@ -50381,9 +52185,9 @@ var require_util12 = __commonJS({
|
||||
}
|
||||
}
|
||||
}
|
||||
function validateCookiePath(path17) {
|
||||
for (let i = 0; i < path17.length; ++i) {
|
||||
const code = path17.charCodeAt(i);
|
||||
function validateCookiePath(path16) {
|
||||
for (let i = 0; i < path16.length; ++i) {
|
||||
const code = path16.charCodeAt(i);
|
||||
if (code < 32 || // exclude CTLs (0-31)
|
||||
code === 127 || // DEL
|
||||
code === 59) {
|
||||
@@ -53544,11 +55348,11 @@ var require_undici2 = __commonJS({
|
||||
if (typeof opts.path !== "string") {
|
||||
throw new InvalidArgumentError("invalid opts.path");
|
||||
}
|
||||
let path17 = opts.path;
|
||||
let path16 = opts.path;
|
||||
if (!opts.path.startsWith("/")) {
|
||||
path17 = `/${path17}`;
|
||||
path16 = `/${path16}`;
|
||||
}
|
||||
url2 = new URL(util7.parseOrigin(url2).origin + path17);
|
||||
url2 = new URL(util7.parseOrigin(url2).origin + path16);
|
||||
} else {
|
||||
if (!opts) {
|
||||
opts = typeof url2 === "object" ? url2 : {};
|
||||
@@ -53657,1813 +55461,9 @@ ${captureLines}` : capture.stack;
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/version.js
|
||||
var require_version = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/version.js"(exports2, module2) {
|
||||
var VERSION_PATTERN = [
|
||||
"v?",
|
||||
"(?:",
|
||||
/* */
|
||||
"(?:(?<epoch>[0-9]+)!)?",
|
||||
// epoch
|
||||
/* */
|
||||
"(?<release>[0-9]+(?:\\.[0-9]+)*)",
|
||||
// release segment
|
||||
/* */
|
||||
"(?<pre>",
|
||||
// pre-release
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<pre_l>(a|b|c|rc|alpha|beta|pre|preview))",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<pre_n>[0-9]+)?",
|
||||
/* */
|
||||
")?",
|
||||
/* */
|
||||
"(?<post>",
|
||||
// post release
|
||||
/* */
|
||||
"(?:-(?<post_n1>[0-9]+))",
|
||||
/* */
|
||||
"|",
|
||||
/* */
|
||||
"(?:",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<post_l>post|rev|r)",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<post_n2>[0-9]+)?",
|
||||
/* */
|
||||
")",
|
||||
/* */
|
||||
")?",
|
||||
/* */
|
||||
"(?<dev>",
|
||||
// dev release
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<dev_l>dev)",
|
||||
/* */
|
||||
"[-_\\.]?",
|
||||
/* */
|
||||
"(?<dev_n>[0-9]+)?",
|
||||
/* */
|
||||
")?",
|
||||
")",
|
||||
"(?:\\+(?<local>[a-z0-9]+(?:[-_\\.][a-z0-9]+)*))?"
|
||||
// local version
|
||||
].join("");
|
||||
module2.exports = {
|
||||
VERSION_PATTERN,
|
||||
valid: valid2,
|
||||
clean: clean3,
|
||||
explain,
|
||||
parse: parse3,
|
||||
stringify: stringify2
|
||||
};
|
||||
var validRegex = new RegExp("^" + VERSION_PATTERN + "$", "i");
|
||||
function valid2(version3) {
|
||||
return validRegex.test(version3) ? version3 : null;
|
||||
}
|
||||
var cleanRegex = new RegExp("^\\s*" + VERSION_PATTERN + "\\s*$", "i");
|
||||
function clean3(version3) {
|
||||
return stringify2(parse3(version3, cleanRegex));
|
||||
}
|
||||
function parse3(version3, regex) {
|
||||
const { groups } = (regex || validRegex).exec(version3) || {};
|
||||
if (!groups) {
|
||||
return null;
|
||||
}
|
||||
const parsed = {
|
||||
epoch: Number(groups.epoch ? groups.epoch : 0),
|
||||
release: groups.release.split(".").map(Number),
|
||||
pre: normalize_letter_version(groups.pre_l, groups.pre_n),
|
||||
post: normalize_letter_version(
|
||||
groups.post_l,
|
||||
groups.post_n1 || groups.post_n2
|
||||
),
|
||||
dev: normalize_letter_version(groups.dev_l, groups.dev_n),
|
||||
local: parse_local_version(groups.local)
|
||||
};
|
||||
return parsed;
|
||||
}
|
||||
function stringify2(parsed) {
|
||||
if (!parsed) {
|
||||
return null;
|
||||
}
|
||||
const { epoch, release, pre, post, dev, local } = parsed;
|
||||
const parts = [];
|
||||
if (epoch !== 0) {
|
||||
parts.push(`${epoch}!`);
|
||||
}
|
||||
parts.push(release.join("."));
|
||||
if (pre) {
|
||||
parts.push(pre.join(""));
|
||||
}
|
||||
if (post) {
|
||||
parts.push("." + post.join(""));
|
||||
}
|
||||
if (dev) {
|
||||
parts.push("." + dev.join(""));
|
||||
}
|
||||
if (local) {
|
||||
parts.push(`+${local}`);
|
||||
}
|
||||
return parts.join("");
|
||||
}
|
||||
function normalize_letter_version(letterIn, numberIn) {
|
||||
let letter = letterIn;
|
||||
let number = numberIn;
|
||||
if (letter) {
|
||||
if (!number) {
|
||||
number = 0;
|
||||
}
|
||||
letter = letter.toLowerCase();
|
||||
if (letter === "alpha") {
|
||||
letter = "a";
|
||||
} else if (letter === "beta") {
|
||||
letter = "b";
|
||||
} else if (["c", "pre", "preview"].includes(letter)) {
|
||||
letter = "rc";
|
||||
} else if (["rev", "r"].includes(letter)) {
|
||||
letter = "post";
|
||||
}
|
||||
return [letter, Number(number)];
|
||||
}
|
||||
if (!letter && number) {
|
||||
letter = "post";
|
||||
return [letter, Number(number)];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function parse_local_version(local) {
|
||||
if (local) {
|
||||
return local.split(/[._-]/).map(
|
||||
(part) => Number.isNaN(Number(part)) ? part.toLowerCase() : Number(part)
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function explain(version3) {
|
||||
const parsed = parse3(version3);
|
||||
if (!parsed) {
|
||||
return parsed;
|
||||
}
|
||||
const { epoch, release, pre, post, dev, local } = parsed;
|
||||
let base_version = "";
|
||||
if (epoch !== 0) {
|
||||
base_version += epoch + "!";
|
||||
}
|
||||
base_version += release.join(".");
|
||||
const is_prerelease = Boolean(dev || pre);
|
||||
const is_devrelease = Boolean(dev);
|
||||
const is_postrelease = Boolean(post);
|
||||
return {
|
||||
epoch,
|
||||
release,
|
||||
pre,
|
||||
post: post ? post[1] : post,
|
||||
dev: dev ? dev[1] : dev,
|
||||
local: local ? local.join(".") : local,
|
||||
public: stringify2(parsed).split("+", 1)[0],
|
||||
base_version,
|
||||
is_prerelease,
|
||||
is_devrelease,
|
||||
is_postrelease
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/operator.js
|
||||
var require_operator = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/operator.js"(exports2, module2) {
|
||||
var { parse: parse3 } = require_version();
|
||||
module2.exports = {
|
||||
compare,
|
||||
rcompare,
|
||||
lt,
|
||||
le,
|
||||
eq,
|
||||
ne,
|
||||
ge,
|
||||
gt: gt2,
|
||||
"<": lt,
|
||||
"<=": le,
|
||||
"==": eq,
|
||||
"!=": ne,
|
||||
">=": ge,
|
||||
">": gt2,
|
||||
"===": arbitrary
|
||||
};
|
||||
function lt(version3, other) {
|
||||
return compare(version3, other) < 0;
|
||||
}
|
||||
function le(version3, other) {
|
||||
return compare(version3, other) <= 0;
|
||||
}
|
||||
function eq(version3, other) {
|
||||
return compare(version3, other) === 0;
|
||||
}
|
||||
function ne(version3, other) {
|
||||
return compare(version3, other) !== 0;
|
||||
}
|
||||
function ge(version3, other) {
|
||||
return compare(version3, other) >= 0;
|
||||
}
|
||||
function gt2(version3, other) {
|
||||
return compare(version3, other) > 0;
|
||||
}
|
||||
function arbitrary(version3, other) {
|
||||
return version3.toLowerCase() === other.toLowerCase();
|
||||
}
|
||||
function compare(version3, other) {
|
||||
const parsedVersion = parse3(version3);
|
||||
const parsedOther = parse3(other);
|
||||
const keyVersion = calculateKey(parsedVersion);
|
||||
const keyOther = calculateKey(parsedOther);
|
||||
return pyCompare(keyVersion, keyOther);
|
||||
}
|
||||
function rcompare(version3, other) {
|
||||
return -compare(version3, other);
|
||||
}
|
||||
function pyCompare(elemIn, otherIn) {
|
||||
let elem = elemIn;
|
||||
let other = otherIn;
|
||||
if (elem === other) {
|
||||
return 0;
|
||||
}
|
||||
if (Array.isArray(elem) !== Array.isArray(other)) {
|
||||
elem = Array.isArray(elem) ? elem : [elem];
|
||||
other = Array.isArray(other) ? other : [other];
|
||||
}
|
||||
if (Array.isArray(elem)) {
|
||||
const len = Math.min(elem.length, other.length);
|
||||
for (let i = 0; i < len; i += 1) {
|
||||
const res = pyCompare(elem[i], other[i]);
|
||||
if (res !== 0) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
return elem.length - other.length;
|
||||
}
|
||||
if (elem === -Infinity || other === Infinity) {
|
||||
return -1;
|
||||
}
|
||||
if (elem === Infinity || other === -Infinity) {
|
||||
return 1;
|
||||
}
|
||||
return elem < other ? -1 : 1;
|
||||
}
|
||||
function calculateKey(input) {
|
||||
const { epoch } = input;
|
||||
let { release, pre, post, local, dev } = input;
|
||||
release = release.concat();
|
||||
release.reverse();
|
||||
while (release.length && release[0] === 0) {
|
||||
release.shift();
|
||||
}
|
||||
release.reverse();
|
||||
if (!pre && !post && dev) pre = -Infinity;
|
||||
else if (!pre) pre = Infinity;
|
||||
if (!post) post = -Infinity;
|
||||
if (!dev) dev = Infinity;
|
||||
if (!local) {
|
||||
local = -Infinity;
|
||||
} else {
|
||||
local = local.map(
|
||||
(i) => Number.isNaN(Number(i)) ? [-Infinity, i] : [Number(i), ""]
|
||||
);
|
||||
}
|
||||
return [epoch, release, pre, post, dev, local];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/specifier.js
|
||||
var require_specifier = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/specifier.js"(exports2, module2) {
|
||||
var { VERSION_PATTERN, explain: explainVersion } = require_version();
|
||||
var Operator = require_operator();
|
||||
var RANGE_PATTERN = [
|
||||
"(?<operator>(===|~=|==|!=|<=|>=|<|>))",
|
||||
"\\s*",
|
||||
"(",
|
||||
/* */
|
||||
"(?<version>(?:" + VERSION_PATTERN.replace(/\?<\w+>/g, "?:") + "))",
|
||||
/* */
|
||||
"(?<prefix>\\.\\*)?",
|
||||
/* */
|
||||
"|",
|
||||
/* */
|
||||
"(?<legacy>[^,;\\s)]+)",
|
||||
")"
|
||||
].join("");
|
||||
module2.exports = {
|
||||
RANGE_PATTERN,
|
||||
parse: parse3,
|
||||
satisfies: satisfies4,
|
||||
filter,
|
||||
validRange,
|
||||
maxSatisfying: maxSatisfying3,
|
||||
minSatisfying: minSatisfying4
|
||||
};
|
||||
var isEqualityOperator = (op) => ["==", "!=", "==="].includes(op);
|
||||
var rangeRegex = new RegExp("^" + RANGE_PATTERN + "$", "i");
|
||||
function parse3(ranges) {
|
||||
if (!ranges.trim()) {
|
||||
return [];
|
||||
}
|
||||
const specifiers = ranges.split(",").map((range2) => rangeRegex.exec(range2.trim()) || {}).map(({ groups }) => {
|
||||
if (!groups) {
|
||||
return null;
|
||||
}
|
||||
let { ...spec } = groups;
|
||||
const { operator, version: version3, prefix: prefix2, legacy } = groups;
|
||||
if (version3) {
|
||||
spec = { ...spec, ...explainVersion(version3) };
|
||||
if (operator === "~=") {
|
||||
if (spec.release.length < 2) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (!isEqualityOperator(operator) && spec.local) {
|
||||
return null;
|
||||
}
|
||||
if (prefix2) {
|
||||
if (!isEqualityOperator(operator) || spec.dev || spec.local) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (legacy && operator !== "===") {
|
||||
return null;
|
||||
}
|
||||
return spec;
|
||||
});
|
||||
if (specifiers.filter(Boolean).length !== specifiers.length) {
|
||||
return null;
|
||||
}
|
||||
return specifiers;
|
||||
}
|
||||
function filter(versions, specifier, options = {}) {
|
||||
const filtered = pick(versions, specifier, options);
|
||||
if (filtered.length === 0 && options.prereleases === void 0) {
|
||||
return pick(versions, specifier, { prereleases: true });
|
||||
}
|
||||
return filtered;
|
||||
}
|
||||
function maxSatisfying3(versions, range2, options) {
|
||||
const found = filter(versions, range2, options).sort(Operator.compare);
|
||||
return found.length === 0 ? null : found[found.length - 1];
|
||||
}
|
||||
function minSatisfying4(versions, range2, options) {
|
||||
const found = filter(versions, range2, options).sort(Operator.compare);
|
||||
return found.length === 0 ? null : found[0];
|
||||
}
|
||||
function pick(versions, specifier, options) {
|
||||
const parsed = parse3(specifier);
|
||||
if (!parsed) {
|
||||
return [];
|
||||
}
|
||||
return versions.filter((version3) => {
|
||||
const explained = explainVersion(version3);
|
||||
if (!parsed.length) {
|
||||
return explained && !(explained.is_prerelease && !options.prereleases);
|
||||
}
|
||||
return parsed.reduce((pass, spec) => {
|
||||
if (!pass) {
|
||||
return false;
|
||||
}
|
||||
return contains({ ...spec, ...options }, { version: version3, explained });
|
||||
}, true);
|
||||
});
|
||||
}
|
||||
function satisfies4(version3, specifier, options = {}) {
|
||||
const filtered = pick([version3], specifier, options);
|
||||
return filtered.length === 1;
|
||||
}
|
||||
function arrayStartsWith(array, prefix2) {
|
||||
if (prefix2.length > array.length) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < prefix2.length; i += 1) {
|
||||
if (prefix2[i] !== array[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function contains(specifier, input) {
|
||||
const { explained } = input;
|
||||
let { version: version3 } = input;
|
||||
const { ...spec } = specifier;
|
||||
if (spec.prereleases === void 0) {
|
||||
spec.prereleases = spec.is_prerelease;
|
||||
}
|
||||
if (explained && explained.is_prerelease && !spec.prereleases) {
|
||||
return false;
|
||||
}
|
||||
if (spec.operator === "~=") {
|
||||
let compatiblePrefix = spec.release.slice(0, -1).concat("*").join(".");
|
||||
if (spec.epoch) {
|
||||
compatiblePrefix = spec.epoch + "!" + compatiblePrefix;
|
||||
}
|
||||
return satisfies4(version3, `>=${spec.version}, ==${compatiblePrefix}`, {
|
||||
prereleases: spec.prereleases
|
||||
});
|
||||
}
|
||||
if (spec.prefix) {
|
||||
const isMatching = explained.epoch === spec.epoch && arrayStartsWith(explained.release, spec.release);
|
||||
const isEquality = spec.operator !== "!=";
|
||||
return isEquality ? isMatching : !isMatching;
|
||||
}
|
||||
if (explained) {
|
||||
if (explained.local && spec.version) {
|
||||
version3 = explained.public;
|
||||
spec.version = explainVersion(spec.version).public;
|
||||
}
|
||||
}
|
||||
if (spec.operator === "<" || spec.operator === ">") {
|
||||
if (Operator.eq(spec.release.join("."), explained.release.join("."))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const op = Operator[spec.operator];
|
||||
return op(version3, spec.version || spec.legacy);
|
||||
}
|
||||
function validRange(specifier) {
|
||||
return Boolean(parse3(specifier));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/lib/semantic.js
|
||||
var require_semantic = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/lib/semantic.js"(exports2, module2) {
|
||||
var { explain, parse: parse3, stringify: stringify2 } = require_version();
|
||||
module2.exports = {
|
||||
major,
|
||||
minor,
|
||||
patch,
|
||||
inc
|
||||
};
|
||||
function major(input) {
|
||||
const version3 = explain(input);
|
||||
if (!version3) {
|
||||
throw new TypeError("Invalid Version: " + input);
|
||||
}
|
||||
return version3.release[0];
|
||||
}
|
||||
function minor(input) {
|
||||
const version3 = explain(input);
|
||||
if (!version3) {
|
||||
throw new TypeError("Invalid Version: " + input);
|
||||
}
|
||||
if (version3.release.length < 2) {
|
||||
return 0;
|
||||
}
|
||||
return version3.release[1];
|
||||
}
|
||||
function patch(input) {
|
||||
const version3 = explain(input);
|
||||
if (!version3) {
|
||||
throw new TypeError("Invalid Version: " + input);
|
||||
}
|
||||
if (version3.release.length < 3) {
|
||||
return 0;
|
||||
}
|
||||
return version3.release[2];
|
||||
}
|
||||
function inc(input, release, preReleaseIdentifier) {
|
||||
let identifier = preReleaseIdentifier || `a`;
|
||||
const version3 = parse3(input);
|
||||
if (!version3) {
|
||||
return null;
|
||||
}
|
||||
if (!["a", "b", "c", "rc", "alpha", "beta", "pre", "preview"].includes(
|
||||
identifier
|
||||
)) {
|
||||
return null;
|
||||
}
|
||||
switch (release) {
|
||||
case "premajor":
|
||||
{
|
||||
const [majorVersion] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion + 1;
|
||||
}
|
||||
version3.pre = [identifier, 0];
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "preminor":
|
||||
{
|
||||
const [majorVersion, minorVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion + 1;
|
||||
}
|
||||
version3.pre = [identifier, 0];
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "prepatch":
|
||||
{
|
||||
const [majorVersion, minorVersion = 0, patchVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion;
|
||||
version3.release[2] = patchVersion + 1;
|
||||
}
|
||||
version3.pre = [identifier, 0];
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "prerelease":
|
||||
if (version3.pre === null) {
|
||||
const [majorVersion, minorVersion = 0, patchVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion;
|
||||
version3.release[2] = patchVersion + 1;
|
||||
version3.pre = [identifier, 0];
|
||||
} else {
|
||||
if (preReleaseIdentifier === void 0 && version3.pre !== null) {
|
||||
[identifier] = version3.pre;
|
||||
}
|
||||
const [letter, number] = version3.pre;
|
||||
if (letter === identifier) {
|
||||
version3.pre = [letter, number + 1];
|
||||
} else {
|
||||
version3.pre = [identifier, 0];
|
||||
}
|
||||
}
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "major":
|
||||
if (version3.release.slice(1).some((value) => value !== 0) || version3.pre === null) {
|
||||
const [majorVersion] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion + 1;
|
||||
}
|
||||
delete version3.pre;
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "minor":
|
||||
if (version3.release.slice(2).some((value) => value !== 0) || version3.pre === null) {
|
||||
const [majorVersion, minorVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion + 1;
|
||||
}
|
||||
delete version3.pre;
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
case "patch":
|
||||
if (version3.release.slice(3).some((value) => value !== 0) || version3.pre === null) {
|
||||
const [majorVersion, minorVersion = 0, patchVersion = 0] = version3.release;
|
||||
version3.release.fill(0);
|
||||
version3.release[0] = majorVersion;
|
||||
version3.release[1] = minorVersion;
|
||||
version3.release[2] = patchVersion + 1;
|
||||
}
|
||||
delete version3.pre;
|
||||
delete version3.post;
|
||||
delete version3.dev;
|
||||
delete version3.local;
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
return stringify2(version3);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/@renovatebot/pep440/index.js
|
||||
var require_pep440 = __commonJS({
|
||||
"node_modules/@renovatebot/pep440/index.js"(exports2, module2) {
|
||||
var { valid: valid2, clean: clean3, explain, parse: parse3 } = require_version();
|
||||
var { lt, le, eq, ne, ge, gt: gt2, compare, rcompare } = require_operator();
|
||||
var {
|
||||
filter,
|
||||
maxSatisfying: maxSatisfying3,
|
||||
minSatisfying: minSatisfying4,
|
||||
RANGE_PATTERN,
|
||||
satisfies: satisfies4,
|
||||
validRange
|
||||
} = require_specifier();
|
||||
var { major, minor, patch, inc } = require_semantic();
|
||||
module2.exports = {
|
||||
// version
|
||||
valid: valid2,
|
||||
clean: clean3,
|
||||
explain,
|
||||
parse: parse3,
|
||||
// operator
|
||||
lt,
|
||||
le,
|
||||
lte: le,
|
||||
eq,
|
||||
ne,
|
||||
neq: ne,
|
||||
ge,
|
||||
gte: ge,
|
||||
gt: gt2,
|
||||
compare,
|
||||
rcompare,
|
||||
// range
|
||||
filter,
|
||||
maxSatisfying: maxSatisfying3,
|
||||
minSatisfying: minSatisfying4,
|
||||
RANGE_PATTERN,
|
||||
satisfies: satisfies4,
|
||||
validRange,
|
||||
// semantic
|
||||
major,
|
||||
minor,
|
||||
patch,
|
||||
inc
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// node_modules/semver/semver.js
|
||||
var require_semver5 = __commonJS({
|
||||
"node_modules/semver/semver.js"(exports2, module2) {
|
||||
exports2 = module2.exports = SemVer;
|
||||
var debug2;
|
||||
if (typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
|
||||
debug2 = function() {
|
||||
var args = Array.prototype.slice.call(arguments, 0);
|
||||
args.unshift("SEMVER");
|
||||
console.log.apply(console, args);
|
||||
};
|
||||
} else {
|
||||
debug2 = function() {
|
||||
};
|
||||
}
|
||||
exports2.SEMVER_SPEC_VERSION = "2.0.0";
|
||||
var MAX_LENGTH = 256;
|
||||
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || /* istanbul ignore next */
|
||||
9007199254740991;
|
||||
var MAX_SAFE_COMPONENT_LENGTH = 16;
|
||||
var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;
|
||||
var re = exports2.re = [];
|
||||
var safeRe = exports2.safeRe = [];
|
||||
var src = exports2.src = [];
|
||||
var t = exports2.tokens = {};
|
||||
var R = 0;
|
||||
function tok(n) {
|
||||
t[n] = R++;
|
||||
}
|
||||
var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
|
||||
var safeRegexReplacements = [
|
||||
["\\s", 1],
|
||||
["\\d", MAX_LENGTH],
|
||||
[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
|
||||
];
|
||||
function makeSafeRe(value) {
|
||||
for (var i2 = 0; i2 < safeRegexReplacements.length; i2++) {
|
||||
var token = safeRegexReplacements[i2][0];
|
||||
var max = safeRegexReplacements[i2][1];
|
||||
value = value.split(token + "*").join(token + "{0," + max + "}").split(token + "+").join(token + "{1," + max + "}");
|
||||
}
|
||||
return value;
|
||||
}
|
||||
tok("NUMERICIDENTIFIER");
|
||||
src[t.NUMERICIDENTIFIER] = "0|[1-9]\\d*";
|
||||
tok("NUMERICIDENTIFIERLOOSE");
|
||||
src[t.NUMERICIDENTIFIERLOOSE] = "\\d+";
|
||||
tok("NONNUMERICIDENTIFIER");
|
||||
src[t.NONNUMERICIDENTIFIER] = "\\d*[a-zA-Z-]" + LETTERDASHNUMBER + "*";
|
||||
tok("MAINVERSION");
|
||||
src[t.MAINVERSION] = "(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")";
|
||||
tok("MAINVERSIONLOOSE");
|
||||
src[t.MAINVERSIONLOOSE] = "(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")";
|
||||
tok("PRERELEASEIDENTIFIER");
|
||||
src[t.PRERELEASEIDENTIFIER] = "(?:" + src[t.NUMERICIDENTIFIER] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
|
||||
tok("PRERELEASEIDENTIFIERLOOSE");
|
||||
src[t.PRERELEASEIDENTIFIERLOOSE] = "(?:" + src[t.NUMERICIDENTIFIERLOOSE] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
|
||||
tok("PRERELEASE");
|
||||
src[t.PRERELEASE] = "(?:-(" + src[t.PRERELEASEIDENTIFIER] + "(?:\\." + src[t.PRERELEASEIDENTIFIER] + ")*))";
|
||||
tok("PRERELEASELOOSE");
|
||||
src[t.PRERELEASELOOSE] = "(?:-?(" + src[t.PRERELEASEIDENTIFIERLOOSE] + "(?:\\." + src[t.PRERELEASEIDENTIFIERLOOSE] + ")*))";
|
||||
tok("BUILDIDENTIFIER");
|
||||
src[t.BUILDIDENTIFIER] = LETTERDASHNUMBER + "+";
|
||||
tok("BUILD");
|
||||
src[t.BUILD] = "(?:\\+(" + src[t.BUILDIDENTIFIER] + "(?:\\." + src[t.BUILDIDENTIFIER] + ")*))";
|
||||
tok("FULL");
|
||||
tok("FULLPLAIN");
|
||||
src[t.FULLPLAIN] = "v?" + src[t.MAINVERSION] + src[t.PRERELEASE] + "?" + src[t.BUILD] + "?";
|
||||
src[t.FULL] = "^" + src[t.FULLPLAIN] + "$";
|
||||
tok("LOOSEPLAIN");
|
||||
src[t.LOOSEPLAIN] = "[v=\\s]*" + src[t.MAINVERSIONLOOSE] + src[t.PRERELEASELOOSE] + "?" + src[t.BUILD] + "?";
|
||||
tok("LOOSE");
|
||||
src[t.LOOSE] = "^" + src[t.LOOSEPLAIN] + "$";
|
||||
tok("GTLT");
|
||||
src[t.GTLT] = "((?:<|>)?=?)";
|
||||
tok("XRANGEIDENTIFIERLOOSE");
|
||||
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + "|x|X|\\*";
|
||||
tok("XRANGEIDENTIFIER");
|
||||
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + "|x|X|\\*";
|
||||
tok("XRANGEPLAIN");
|
||||
src[t.XRANGEPLAIN] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:" + src[t.PRERELEASE] + ")?" + src[t.BUILD] + "?)?)?";
|
||||
tok("XRANGEPLAINLOOSE");
|
||||
src[t.XRANGEPLAINLOOSE] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:" + src[t.PRERELEASELOOSE] + ")?" + src[t.BUILD] + "?)?)?";
|
||||
tok("XRANGE");
|
||||
src[t.XRANGE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAIN] + "$";
|
||||
tok("XRANGELOOSE");
|
||||
src[t.XRANGELOOSE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAINLOOSE] + "$";
|
||||
tok("COERCE");
|
||||
src[t.COERCE] = "(^|[^\\d])(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "})(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:$|[^\\d])";
|
||||
tok("COERCERTL");
|
||||
re[t.COERCERTL] = new RegExp(src[t.COERCE], "g");
|
||||
safeRe[t.COERCERTL] = new RegExp(makeSafeRe(src[t.COERCE]), "g");
|
||||
tok("LONETILDE");
|
||||
src[t.LONETILDE] = "(?:~>?)";
|
||||
tok("TILDETRIM");
|
||||
src[t.TILDETRIM] = "(\\s*)" + src[t.LONETILDE] + "\\s+";
|
||||
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], "g");
|
||||
safeRe[t.TILDETRIM] = new RegExp(makeSafeRe(src[t.TILDETRIM]), "g");
|
||||
var tildeTrimReplace = "$1~";
|
||||
tok("TILDE");
|
||||
src[t.TILDE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAIN] + "$";
|
||||
tok("TILDELOOSE");
|
||||
src[t.TILDELOOSE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + "$";
|
||||
tok("LONECARET");
|
||||
src[t.LONECARET] = "(?:\\^)";
|
||||
tok("CARETTRIM");
|
||||
src[t.CARETTRIM] = "(\\s*)" + src[t.LONECARET] + "\\s+";
|
||||
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], "g");
|
||||
safeRe[t.CARETTRIM] = new RegExp(makeSafeRe(src[t.CARETTRIM]), "g");
|
||||
var caretTrimReplace = "$1^";
|
||||
tok("CARET");
|
||||
src[t.CARET] = "^" + src[t.LONECARET] + src[t.XRANGEPLAIN] + "$";
|
||||
tok("CARETLOOSE");
|
||||
src[t.CARETLOOSE] = "^" + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + "$";
|
||||
tok("COMPARATORLOOSE");
|
||||
src[t.COMPARATORLOOSE] = "^" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + ")$|^$";
|
||||
tok("COMPARATOR");
|
||||
src[t.COMPARATOR] = "^" + src[t.GTLT] + "\\s*(" + src[t.FULLPLAIN] + ")$|^$";
|
||||
tok("COMPARATORTRIM");
|
||||
src[t.COMPARATORTRIM] = "(\\s*)" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + "|" + src[t.XRANGEPLAIN] + ")";
|
||||
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], "g");
|
||||
safeRe[t.COMPARATORTRIM] = new RegExp(makeSafeRe(src[t.COMPARATORTRIM]), "g");
|
||||
var comparatorTrimReplace = "$1$2$3";
|
||||
tok("HYPHENRANGE");
|
||||
src[t.HYPHENRANGE] = "^\\s*(" + src[t.XRANGEPLAIN] + ")\\s+-\\s+(" + src[t.XRANGEPLAIN] + ")\\s*$";
|
||||
tok("HYPHENRANGELOOSE");
|
||||
src[t.HYPHENRANGELOOSE] = "^\\s*(" + src[t.XRANGEPLAINLOOSE] + ")\\s+-\\s+(" + src[t.XRANGEPLAINLOOSE] + ")\\s*$";
|
||||
tok("STAR");
|
||||
src[t.STAR] = "(<|>)?=?\\s*\\*";
|
||||
for (i = 0; i < R; i++) {
|
||||
debug2(i, src[i]);
|
||||
if (!re[i]) {
|
||||
re[i] = new RegExp(src[i]);
|
||||
safeRe[i] = new RegExp(makeSafeRe(src[i]));
|
||||
}
|
||||
}
|
||||
var i;
|
||||
exports2.parse = parse3;
|
||||
function parse3(version3, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (version3 instanceof SemVer) {
|
||||
return version3;
|
||||
}
|
||||
if (typeof version3 !== "string") {
|
||||
return null;
|
||||
}
|
||||
if (version3.length > MAX_LENGTH) {
|
||||
return null;
|
||||
}
|
||||
var r = options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL];
|
||||
if (!r.test(version3)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return new SemVer(version3, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports2.valid = valid2;
|
||||
function valid2(version3, options) {
|
||||
var v = parse3(version3, options);
|
||||
return v ? v.version : null;
|
||||
}
|
||||
exports2.clean = clean3;
|
||||
function clean3(version3, options) {
|
||||
var s = parse3(version3.trim().replace(/^[=v]+/, ""), options);
|
||||
return s ? s.version : null;
|
||||
}
|
||||
exports2.SemVer = SemVer;
|
||||
function SemVer(version3, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (version3 instanceof SemVer) {
|
||||
if (version3.loose === options.loose) {
|
||||
return version3;
|
||||
} else {
|
||||
version3 = version3.version;
|
||||
}
|
||||
} else if (typeof version3 !== "string") {
|
||||
throw new TypeError("Invalid Version: " + version3);
|
||||
}
|
||||
if (version3.length > MAX_LENGTH) {
|
||||
throw new TypeError("version is longer than " + MAX_LENGTH + " characters");
|
||||
}
|
||||
if (!(this instanceof SemVer)) {
|
||||
return new SemVer(version3, options);
|
||||
}
|
||||
debug2("SemVer", version3, options);
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
var m = version3.trim().match(options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL]);
|
||||
if (!m) {
|
||||
throw new TypeError("Invalid Version: " + version3);
|
||||
}
|
||||
this.raw = version3;
|
||||
this.major = +m[1];
|
||||
this.minor = +m[2];
|
||||
this.patch = +m[3];
|
||||
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
||||
throw new TypeError("Invalid major version");
|
||||
}
|
||||
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
||||
throw new TypeError("Invalid minor version");
|
||||
}
|
||||
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
||||
throw new TypeError("Invalid patch version");
|
||||
}
|
||||
if (!m[4]) {
|
||||
this.prerelease = [];
|
||||
} else {
|
||||
this.prerelease = m[4].split(".").map(function(id) {
|
||||
if (/^[0-9]+$/.test(id)) {
|
||||
var num = +id;
|
||||
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
||||
return num;
|
||||
}
|
||||
}
|
||||
return id;
|
||||
});
|
||||
}
|
||||
this.build = m[5] ? m[5].split(".") : [];
|
||||
this.format();
|
||||
}
|
||||
SemVer.prototype.format = function() {
|
||||
this.version = this.major + "." + this.minor + "." + this.patch;
|
||||
if (this.prerelease.length) {
|
||||
this.version += "-" + this.prerelease.join(".");
|
||||
}
|
||||
return this.version;
|
||||
};
|
||||
SemVer.prototype.toString = function() {
|
||||
return this.version;
|
||||
};
|
||||
SemVer.prototype.compare = function(other) {
|
||||
debug2("SemVer.compare", this.version, this.options, other);
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
return this.compareMain(other) || this.comparePre(other);
|
||||
};
|
||||
SemVer.prototype.compareMain = function(other) {
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
|
||||
};
|
||||
SemVer.prototype.comparePre = function(other) {
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
if (this.prerelease.length && !other.prerelease.length) {
|
||||
return -1;
|
||||
} else if (!this.prerelease.length && other.prerelease.length) {
|
||||
return 1;
|
||||
} else if (!this.prerelease.length && !other.prerelease.length) {
|
||||
return 0;
|
||||
}
|
||||
var i2 = 0;
|
||||
do {
|
||||
var a = this.prerelease[i2];
|
||||
var b = other.prerelease[i2];
|
||||
debug2("prerelease compare", i2, a, b);
|
||||
if (a === void 0 && b === void 0) {
|
||||
return 0;
|
||||
} else if (b === void 0) {
|
||||
return 1;
|
||||
} else if (a === void 0) {
|
||||
return -1;
|
||||
} else if (a === b) {
|
||||
continue;
|
||||
} else {
|
||||
return compareIdentifiers(a, b);
|
||||
}
|
||||
} while (++i2);
|
||||
};
|
||||
SemVer.prototype.compareBuild = function(other) {
|
||||
if (!(other instanceof SemVer)) {
|
||||
other = new SemVer(other, this.options);
|
||||
}
|
||||
var i2 = 0;
|
||||
do {
|
||||
var a = this.build[i2];
|
||||
var b = other.build[i2];
|
||||
debug2("prerelease compare", i2, a, b);
|
||||
if (a === void 0 && b === void 0) {
|
||||
return 0;
|
||||
} else if (b === void 0) {
|
||||
return 1;
|
||||
} else if (a === void 0) {
|
||||
return -1;
|
||||
} else if (a === b) {
|
||||
continue;
|
||||
} else {
|
||||
return compareIdentifiers(a, b);
|
||||
}
|
||||
} while (++i2);
|
||||
};
|
||||
SemVer.prototype.inc = function(release, identifier) {
|
||||
switch (release) {
|
||||
case "premajor":
|
||||
this.prerelease.length = 0;
|
||||
this.patch = 0;
|
||||
this.minor = 0;
|
||||
this.major++;
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
case "preminor":
|
||||
this.prerelease.length = 0;
|
||||
this.patch = 0;
|
||||
this.minor++;
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
case "prepatch":
|
||||
this.prerelease.length = 0;
|
||||
this.inc("patch", identifier);
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
// If the input is a non-prerelease version, this acts the same as
|
||||
// prepatch.
|
||||
case "prerelease":
|
||||
if (this.prerelease.length === 0) {
|
||||
this.inc("patch", identifier);
|
||||
}
|
||||
this.inc("pre", identifier);
|
||||
break;
|
||||
case "major":
|
||||
if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
|
||||
this.major++;
|
||||
}
|
||||
this.minor = 0;
|
||||
this.patch = 0;
|
||||
this.prerelease = [];
|
||||
break;
|
||||
case "minor":
|
||||
if (this.patch !== 0 || this.prerelease.length === 0) {
|
||||
this.minor++;
|
||||
}
|
||||
this.patch = 0;
|
||||
this.prerelease = [];
|
||||
break;
|
||||
case "patch":
|
||||
if (this.prerelease.length === 0) {
|
||||
this.patch++;
|
||||
}
|
||||
this.prerelease = [];
|
||||
break;
|
||||
// This probably shouldn't be used publicly.
|
||||
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
|
||||
case "pre":
|
||||
if (this.prerelease.length === 0) {
|
||||
this.prerelease = [0];
|
||||
} else {
|
||||
var i2 = this.prerelease.length;
|
||||
while (--i2 >= 0) {
|
||||
if (typeof this.prerelease[i2] === "number") {
|
||||
this.prerelease[i2]++;
|
||||
i2 = -2;
|
||||
}
|
||||
}
|
||||
if (i2 === -1) {
|
||||
this.prerelease.push(0);
|
||||
}
|
||||
}
|
||||
if (identifier) {
|
||||
if (this.prerelease[0] === identifier) {
|
||||
if (isNaN(this.prerelease[1])) {
|
||||
this.prerelease = [identifier, 0];
|
||||
}
|
||||
} else {
|
||||
this.prerelease = [identifier, 0];
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new Error("invalid increment argument: " + release);
|
||||
}
|
||||
this.format();
|
||||
this.raw = this.version;
|
||||
return this;
|
||||
};
|
||||
exports2.inc = inc;
|
||||
function inc(version3, release, loose, identifier) {
|
||||
if (typeof loose === "string") {
|
||||
identifier = loose;
|
||||
loose = void 0;
|
||||
}
|
||||
try {
|
||||
return new SemVer(version3, loose).inc(release, identifier).version;
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports2.diff = diff;
|
||||
function diff(version1, version22) {
|
||||
if (eq(version1, version22)) {
|
||||
return null;
|
||||
} else {
|
||||
var v1 = parse3(version1);
|
||||
var v2 = parse3(version22);
|
||||
var prefix2 = "";
|
||||
if (v1.prerelease.length || v2.prerelease.length) {
|
||||
prefix2 = "pre";
|
||||
var defaultResult = "prerelease";
|
||||
}
|
||||
for (var key in v1) {
|
||||
if (key === "major" || key === "minor" || key === "patch") {
|
||||
if (v1[key] !== v2[key]) {
|
||||
return prefix2 + key;
|
||||
}
|
||||
}
|
||||
}
|
||||
return defaultResult;
|
||||
}
|
||||
}
|
||||
exports2.compareIdentifiers = compareIdentifiers;
|
||||
var numeric = /^[0-9]+$/;
|
||||
function compareIdentifiers(a, b) {
|
||||
var anum = numeric.test(a);
|
||||
var bnum = numeric.test(b);
|
||||
if (anum && bnum) {
|
||||
a = +a;
|
||||
b = +b;
|
||||
}
|
||||
return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
|
||||
}
|
||||
exports2.rcompareIdentifiers = rcompareIdentifiers;
|
||||
function rcompareIdentifiers(a, b) {
|
||||
return compareIdentifiers(b, a);
|
||||
}
|
||||
exports2.major = major;
|
||||
function major(a, loose) {
|
||||
return new SemVer(a, loose).major;
|
||||
}
|
||||
exports2.minor = minor;
|
||||
function minor(a, loose) {
|
||||
return new SemVer(a, loose).minor;
|
||||
}
|
||||
exports2.patch = patch;
|
||||
function patch(a, loose) {
|
||||
return new SemVer(a, loose).patch;
|
||||
}
|
||||
exports2.compare = compare;
|
||||
function compare(a, b, loose) {
|
||||
return new SemVer(a, loose).compare(new SemVer(b, loose));
|
||||
}
|
||||
exports2.compareLoose = compareLoose;
|
||||
function compareLoose(a, b) {
|
||||
return compare(a, b, true);
|
||||
}
|
||||
exports2.compareBuild = compareBuild;
|
||||
function compareBuild(a, b, loose) {
|
||||
var versionA = new SemVer(a, loose);
|
||||
var versionB = new SemVer(b, loose);
|
||||
return versionA.compare(versionB) || versionA.compareBuild(versionB);
|
||||
}
|
||||
exports2.rcompare = rcompare;
|
||||
function rcompare(a, b, loose) {
|
||||
return compare(b, a, loose);
|
||||
}
|
||||
exports2.sort = sort;
|
||||
function sort(list, loose) {
|
||||
return list.sort(function(a, b) {
|
||||
return exports2.compareBuild(a, b, loose);
|
||||
});
|
||||
}
|
||||
exports2.rsort = rsort;
|
||||
function rsort(list, loose) {
|
||||
return list.sort(function(a, b) {
|
||||
return exports2.compareBuild(b, a, loose);
|
||||
});
|
||||
}
|
||||
exports2.gt = gt2;
|
||||
function gt2(a, b, loose) {
|
||||
return compare(a, b, loose) > 0;
|
||||
}
|
||||
exports2.lt = lt;
|
||||
function lt(a, b, loose) {
|
||||
return compare(a, b, loose) < 0;
|
||||
}
|
||||
exports2.eq = eq;
|
||||
function eq(a, b, loose) {
|
||||
return compare(a, b, loose) === 0;
|
||||
}
|
||||
exports2.neq = neq;
|
||||
function neq(a, b, loose) {
|
||||
return compare(a, b, loose) !== 0;
|
||||
}
|
||||
exports2.gte = gte;
|
||||
function gte(a, b, loose) {
|
||||
return compare(a, b, loose) >= 0;
|
||||
}
|
||||
exports2.lte = lte;
|
||||
function lte(a, b, loose) {
|
||||
return compare(a, b, loose) <= 0;
|
||||
}
|
||||
exports2.cmp = cmp;
|
||||
function 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 gt2(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);
|
||||
}
|
||||
}
|
||||
exports2.Comparator = Comparator;
|
||||
function Comparator(comp26, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (comp26 instanceof Comparator) {
|
||||
if (comp26.loose === !!options.loose) {
|
||||
return comp26;
|
||||
} else {
|
||||
comp26 = comp26.value;
|
||||
}
|
||||
}
|
||||
if (!(this instanceof Comparator)) {
|
||||
return new Comparator(comp26, options);
|
||||
}
|
||||
comp26 = comp26.trim().split(/\s+/).join(" ");
|
||||
debug2("comparator", comp26, options);
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
this.parse(comp26);
|
||||
if (this.semver === ANY) {
|
||||
this.value = "";
|
||||
} else {
|
||||
this.value = this.operator + this.semver.version;
|
||||
}
|
||||
debug2("comp", this);
|
||||
}
|
||||
var ANY = {};
|
||||
Comparator.prototype.parse = function(comp26) {
|
||||
var r = this.options.loose ? safeRe[t.COMPARATORLOOSE] : safeRe[t.COMPARATOR];
|
||||
var m = comp26.match(r);
|
||||
if (!m) {
|
||||
throw new TypeError("Invalid comparator: " + comp26);
|
||||
}
|
||||
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);
|
||||
}
|
||||
};
|
||||
Comparator.prototype.toString = function() {
|
||||
return this.value;
|
||||
};
|
||||
Comparator.prototype.test = function(version3) {
|
||||
debug2("Comparator.test", version3, this.options.loose);
|
||||
if (this.semver === ANY || version3 === ANY) {
|
||||
return true;
|
||||
}
|
||||
if (typeof version3 === "string") {
|
||||
try {
|
||||
version3 = new SemVer(version3, this.options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return cmp(version3, this.operator, this.semver, this.options);
|
||||
};
|
||||
Comparator.prototype.intersects = function(comp26, options) {
|
||||
if (!(comp26 instanceof Comparator)) {
|
||||
throw new TypeError("a Comparator is required");
|
||||
}
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
var rangeTmp;
|
||||
if (this.operator === "") {
|
||||
if (this.value === "") {
|
||||
return true;
|
||||
}
|
||||
rangeTmp = new Range(comp26.value, options);
|
||||
return satisfies4(this.value, rangeTmp, options);
|
||||
} else if (comp26.operator === "") {
|
||||
if (comp26.value === "") {
|
||||
return true;
|
||||
}
|
||||
rangeTmp = new Range(this.value, options);
|
||||
return satisfies4(comp26.semver, rangeTmp, options);
|
||||
}
|
||||
var sameDirectionIncreasing = (this.operator === ">=" || this.operator === ">") && (comp26.operator === ">=" || comp26.operator === ">");
|
||||
var sameDirectionDecreasing = (this.operator === "<=" || this.operator === "<") && (comp26.operator === "<=" || comp26.operator === "<");
|
||||
var sameSemVer = this.semver.version === comp26.semver.version;
|
||||
var differentDirectionsInclusive = (this.operator === ">=" || this.operator === "<=") && (comp26.operator === ">=" || comp26.operator === "<=");
|
||||
var oppositeDirectionsLessThan = cmp(this.semver, "<", comp26.semver, options) && ((this.operator === ">=" || this.operator === ">") && (comp26.operator === "<=" || comp26.operator === "<"));
|
||||
var oppositeDirectionsGreaterThan = cmp(this.semver, ">", comp26.semver, options) && ((this.operator === "<=" || this.operator === "<") && (comp26.operator === ">=" || comp26.operator === ">"));
|
||||
return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
|
||||
};
|
||||
exports2.Range = Range;
|
||||
function Range(range2, options) {
|
||||
if (!options || typeof options !== "object") {
|
||||
options = {
|
||||
loose: !!options,
|
||||
includePrerelease: false
|
||||
};
|
||||
}
|
||||
if (range2 instanceof Range) {
|
||||
if (range2.loose === !!options.loose && range2.includePrerelease === !!options.includePrerelease) {
|
||||
return range2;
|
||||
} else {
|
||||
return new Range(range2.raw, options);
|
||||
}
|
||||
}
|
||||
if (range2 instanceof Comparator) {
|
||||
return new Range(range2.value, options);
|
||||
}
|
||||
if (!(this instanceof Range)) {
|
||||
return new Range(range2, options);
|
||||
}
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
this.includePrerelease = !!options.includePrerelease;
|
||||
this.raw = range2.trim().split(/\s+/).join(" ");
|
||||
this.set = this.raw.split("||").map(function(range3) {
|
||||
return this.parseRange(range3.trim());
|
||||
}, this).filter(function(c) {
|
||||
return c.length;
|
||||
});
|
||||
if (!this.set.length) {
|
||||
throw new TypeError("Invalid SemVer Range: " + this.raw);
|
||||
}
|
||||
this.format();
|
||||
}
|
||||
Range.prototype.format = function() {
|
||||
this.range = this.set.map(function(comps) {
|
||||
return comps.join(" ").trim();
|
||||
}).join("||").trim();
|
||||
return this.range;
|
||||
};
|
||||
Range.prototype.toString = function() {
|
||||
return this.range;
|
||||
};
|
||||
Range.prototype.parseRange = function(range2) {
|
||||
var loose = this.options.loose;
|
||||
var hr = loose ? safeRe[t.HYPHENRANGELOOSE] : safeRe[t.HYPHENRANGE];
|
||||
range2 = range2.replace(hr, hyphenReplace);
|
||||
debug2("hyphen replace", range2);
|
||||
range2 = range2.replace(safeRe[t.COMPARATORTRIM], comparatorTrimReplace);
|
||||
debug2("comparator trim", range2, safeRe[t.COMPARATORTRIM]);
|
||||
range2 = range2.replace(safeRe[t.TILDETRIM], tildeTrimReplace);
|
||||
range2 = range2.replace(safeRe[t.CARETTRIM], caretTrimReplace);
|
||||
range2 = range2.split(/\s+/).join(" ");
|
||||
var compRe = loose ? safeRe[t.COMPARATORLOOSE] : safeRe[t.COMPARATOR];
|
||||
var set = range2.split(" ").map(function(comp26) {
|
||||
return parseComparator(comp26, this.options);
|
||||
}, this).join(" ").split(/\s+/);
|
||||
if (this.options.loose) {
|
||||
set = set.filter(function(comp26) {
|
||||
return !!comp26.match(compRe);
|
||||
});
|
||||
}
|
||||
set = set.map(function(comp26) {
|
||||
return new Comparator(comp26, this.options);
|
||||
}, this);
|
||||
return set;
|
||||
};
|
||||
Range.prototype.intersects = function(range2, options) {
|
||||
if (!(range2 instanceof Range)) {
|
||||
throw new TypeError("a Range is required");
|
||||
}
|
||||
return this.set.some(function(thisComparators) {
|
||||
return isSatisfiable(thisComparators, options) && range2.set.some(function(rangeComparators) {
|
||||
return isSatisfiable(rangeComparators, options) && thisComparators.every(function(thisComparator) {
|
||||
return rangeComparators.every(function(rangeComparator) {
|
||||
return thisComparator.intersects(rangeComparator, options);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
function isSatisfiable(comparators, options) {
|
||||
var result = true;
|
||||
var remainingComparators = comparators.slice();
|
||||
var testComparator = remainingComparators.pop();
|
||||
while (result && remainingComparators.length) {
|
||||
result = remainingComparators.every(function(otherComparator) {
|
||||
return testComparator.intersects(otherComparator, options);
|
||||
});
|
||||
testComparator = remainingComparators.pop();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
exports2.toComparators = toComparators;
|
||||
function toComparators(range2, options) {
|
||||
return new Range(range2, options).set.map(function(comp26) {
|
||||
return comp26.map(function(c) {
|
||||
return c.value;
|
||||
}).join(" ").trim().split(" ");
|
||||
});
|
||||
}
|
||||
function parseComparator(comp26, options) {
|
||||
debug2("comp", comp26, options);
|
||||
comp26 = replaceCarets(comp26, options);
|
||||
debug2("caret", comp26);
|
||||
comp26 = replaceTildes(comp26, options);
|
||||
debug2("tildes", comp26);
|
||||
comp26 = replaceXRanges(comp26, options);
|
||||
debug2("xrange", comp26);
|
||||
comp26 = replaceStars(comp26, options);
|
||||
debug2("stars", comp26);
|
||||
return comp26;
|
||||
}
|
||||
function isX(id) {
|
||||
return !id || id.toLowerCase() === "x" || id === "*";
|
||||
}
|
||||
function replaceTildes(comp26, options) {
|
||||
return comp26.trim().split(/\s+/).map(function(comp27) {
|
||||
return replaceTilde(comp27, options);
|
||||
}).join(" ");
|
||||
}
|
||||
function replaceTilde(comp26, options) {
|
||||
var r = options.loose ? safeRe[t.TILDELOOSE] : safeRe[t.TILDE];
|
||||
return comp26.replace(r, function(_, M, m, p, pr) {
|
||||
debug2("tilde", comp26, _, M, m, p, pr);
|
||||
var ret;
|
||||
if (isX(M)) {
|
||||
ret = "";
|
||||
} else if (isX(m)) {
|
||||
ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
|
||||
} else if (isX(p)) {
|
||||
ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
|
||||
} else if (pr) {
|
||||
debug2("replaceTilde pr", pr);
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
|
||||
}
|
||||
debug2("tilde return", ret);
|
||||
return ret;
|
||||
});
|
||||
}
|
||||
function replaceCarets(comp26, options) {
|
||||
return comp26.trim().split(/\s+/).map(function(comp27) {
|
||||
return replaceCaret(comp27, options);
|
||||
}).join(" ");
|
||||
}
|
||||
function replaceCaret(comp26, options) {
|
||||
debug2("caret", comp26, options);
|
||||
var r = options.loose ? safeRe[t.CARETLOOSE] : safeRe[t.CARET];
|
||||
return comp26.replace(r, function(_, M, m, p, pr) {
|
||||
debug2("caret", comp26, _, M, m, p, pr);
|
||||
var ret;
|
||||
if (isX(M)) {
|
||||
ret = "";
|
||||
} else if (isX(m)) {
|
||||
ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
|
||||
} else if (isX(p)) {
|
||||
if (M === "0") {
|
||||
ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + ".0 <" + (+M + 1) + ".0.0";
|
||||
}
|
||||
} else if (pr) {
|
||||
debug2("replaceCaret pr", pr);
|
||||
if (M === "0") {
|
||||
if (m === "0") {
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + m + "." + (+p + 1);
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
|
||||
}
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + (+M + 1) + ".0.0";
|
||||
}
|
||||
} else {
|
||||
debug2("no pr");
|
||||
if (M === "0") {
|
||||
if (m === "0") {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + M + "." + m + "." + (+p + 1);
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
|
||||
}
|
||||
} else {
|
||||
ret = ">=" + M + "." + m + "." + p + " <" + (+M + 1) + ".0.0";
|
||||
}
|
||||
}
|
||||
debug2("caret return", ret);
|
||||
return ret;
|
||||
});
|
||||
}
|
||||
function replaceXRanges(comp26, options) {
|
||||
debug2("replaceXRanges", comp26, options);
|
||||
return comp26.split(/\s+/).map(function(comp27) {
|
||||
return replaceXRange(comp27, options);
|
||||
}).join(" ");
|
||||
}
|
||||
function replaceXRange(comp26, options) {
|
||||
comp26 = comp26.trim();
|
||||
var r = options.loose ? safeRe[t.XRANGELOOSE] : safeRe[t.XRANGE];
|
||||
return comp26.replace(r, function(ret, gtlt, M, m, p, pr) {
|
||||
debug2("xRange", comp26, ret, gtlt, M, m, p, pr);
|
||||
var xM = isX(M);
|
||||
var xm = xM || isX(m);
|
||||
var xp = xm || isX(p);
|
||||
var 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;
|
||||
}
|
||||
}
|
||||
ret = gtlt + M + "." + m + "." + p + pr;
|
||||
} else if (xm) {
|
||||
ret = ">=" + M + ".0.0" + pr + " <" + (+M + 1) + ".0.0" + pr;
|
||||
} else if (xp) {
|
||||
ret = ">=" + M + "." + m + ".0" + pr + " <" + M + "." + (+m + 1) + ".0" + pr;
|
||||
}
|
||||
debug2("xRange return", ret);
|
||||
return ret;
|
||||
});
|
||||
}
|
||||
function replaceStars(comp26, options) {
|
||||
debug2("replaceStars", comp26, options);
|
||||
return comp26.trim().replace(safeRe[t.STAR], "");
|
||||
}
|
||||
function hyphenReplace($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";
|
||||
} else if (isX(fp)) {
|
||||
from = ">=" + fM + "." + fm + ".0";
|
||||
} else {
|
||||
from = ">=" + from;
|
||||
}
|
||||
if (isX(tM)) {
|
||||
to = "";
|
||||
} else if (isX(tm)) {
|
||||
to = "<" + (+tM + 1) + ".0.0";
|
||||
} else if (isX(tp)) {
|
||||
to = "<" + tM + "." + (+tm + 1) + ".0";
|
||||
} else if (tpr) {
|
||||
to = "<=" + tM + "." + tm + "." + tp + "-" + tpr;
|
||||
} else {
|
||||
to = "<=" + to;
|
||||
}
|
||||
return (from + " " + to).trim();
|
||||
}
|
||||
Range.prototype.test = function(version3) {
|
||||
if (!version3) {
|
||||
return false;
|
||||
}
|
||||
if (typeof version3 === "string") {
|
||||
try {
|
||||
version3 = new SemVer(version3, this.options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (var i2 = 0; i2 < this.set.length; i2++) {
|
||||
if (testSet(this.set[i2], version3, this.options)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
function testSet(set, version3, options) {
|
||||
for (var i2 = 0; i2 < set.length; i2++) {
|
||||
if (!set[i2].test(version3)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (version3.prerelease.length && !options.includePrerelease) {
|
||||
for (i2 = 0; i2 < set.length; i2++) {
|
||||
debug2(set[i2].semver);
|
||||
if (set[i2].semver === ANY) {
|
||||
continue;
|
||||
}
|
||||
if (set[i2].semver.prerelease.length > 0) {
|
||||
var allowed = set[i2].semver;
|
||||
if (allowed.major === version3.major && allowed.minor === version3.minor && allowed.patch === version3.patch) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exports2.satisfies = satisfies4;
|
||||
function satisfies4(version3, range2, options) {
|
||||
try {
|
||||
range2 = new Range(range2, options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
return range2.test(version3);
|
||||
}
|
||||
exports2.maxSatisfying = maxSatisfying3;
|
||||
function maxSatisfying3(versions, range2, options) {
|
||||
var max = null;
|
||||
var maxSV = null;
|
||||
try {
|
||||
var rangeObj = new Range(range2, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
versions.forEach(function(v) {
|
||||
if (rangeObj.test(v)) {
|
||||
if (!max || maxSV.compare(v) === -1) {
|
||||
max = v;
|
||||
maxSV = new SemVer(max, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
return max;
|
||||
}
|
||||
exports2.minSatisfying = minSatisfying4;
|
||||
function minSatisfying4(versions, range2, options) {
|
||||
var min = null;
|
||||
var minSV = null;
|
||||
try {
|
||||
var rangeObj = new Range(range2, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
versions.forEach(function(v) {
|
||||
if (rangeObj.test(v)) {
|
||||
if (!min || minSV.compare(v) === 1) {
|
||||
min = v;
|
||||
minSV = new SemVer(min, options);
|
||||
}
|
||||
}
|
||||
});
|
||||
return min;
|
||||
}
|
||||
exports2.minVersion = minVersion;
|
||||
function minVersion(range2, loose) {
|
||||
range2 = new Range(range2, loose);
|
||||
var minver = new SemVer("0.0.0");
|
||||
if (range2.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
minver = new SemVer("0.0.0-0");
|
||||
if (range2.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
minver = null;
|
||||
for (var i2 = 0; i2 < range2.set.length; ++i2) {
|
||||
var comparators = range2.set[i2];
|
||||
comparators.forEach(function(comparator) {
|
||||
var 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();
|
||||
/* fallthrough */
|
||||
case "":
|
||||
case ">=":
|
||||
if (!minver || gt2(minver, compver)) {
|
||||
minver = compver;
|
||||
}
|
||||
break;
|
||||
case "<":
|
||||
case "<=":
|
||||
break;
|
||||
/* istanbul ignore next */
|
||||
default:
|
||||
throw new Error("Unexpected operation: " + comparator.operator);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (minver && range2.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
exports2.validRange = validRange;
|
||||
function validRange(range2, options) {
|
||||
try {
|
||||
return new Range(range2, options).range || "*";
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
exports2.ltr = ltr;
|
||||
function ltr(version3, range2, options) {
|
||||
return outside(version3, range2, "<", options);
|
||||
}
|
||||
exports2.gtr = gtr;
|
||||
function gtr(version3, range2, options) {
|
||||
return outside(version3, range2, ">", options);
|
||||
}
|
||||
exports2.outside = outside;
|
||||
function outside(version3, range2, hilo, options) {
|
||||
version3 = new SemVer(version3, options);
|
||||
range2 = new Range(range2, options);
|
||||
var gtfn, ltefn, ltfn, comp26, ecomp;
|
||||
switch (hilo) {
|
||||
case ">":
|
||||
gtfn = gt2;
|
||||
ltefn = lte;
|
||||
ltfn = lt;
|
||||
comp26 = ">";
|
||||
ecomp = ">=";
|
||||
break;
|
||||
case "<":
|
||||
gtfn = lt;
|
||||
ltefn = gte;
|
||||
ltfn = gt2;
|
||||
comp26 = "<";
|
||||
ecomp = "<=";
|
||||
break;
|
||||
default:
|
||||
throw new TypeError('Must provide a hilo val of "<" or ">"');
|
||||
}
|
||||
if (satisfies4(version3, range2, options)) {
|
||||
return false;
|
||||
}
|
||||
for (var i2 = 0; i2 < range2.set.length; ++i2) {
|
||||
var comparators = range2.set[i2];
|
||||
var high = null;
|
||||
var low = null;
|
||||
comparators.forEach(function(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 === comp26 || high.operator === ecomp) {
|
||||
return false;
|
||||
}
|
||||
if ((!low.operator || low.operator === comp26) && ltefn(version3, low.semver)) {
|
||||
return false;
|
||||
} else if (low.operator === ecomp && ltfn(version3, low.semver)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exports2.prerelease = prerelease;
|
||||
function prerelease(version3, options) {
|
||||
var parsed = parse3(version3, options);
|
||||
return parsed && parsed.prerelease.length ? parsed.prerelease : null;
|
||||
}
|
||||
exports2.intersects = intersects;
|
||||
function intersects(r1, r2, options) {
|
||||
r1 = new Range(r1, options);
|
||||
r2 = new Range(r2, options);
|
||||
return r1.intersects(r2);
|
||||
}
|
||||
exports2.coerce = coerce;
|
||||
function coerce(version3, options) {
|
||||
if (version3 instanceof SemVer) {
|
||||
return version3;
|
||||
}
|
||||
if (typeof version3 === "number") {
|
||||
version3 = String(version3);
|
||||
}
|
||||
if (typeof version3 !== "string") {
|
||||
return null;
|
||||
}
|
||||
options = options || {};
|
||||
var match2 = null;
|
||||
if (!options.rtl) {
|
||||
match2 = version3.match(safeRe[t.COERCE]);
|
||||
} else {
|
||||
var next;
|
||||
while ((next = safeRe[t.COERCERTL].exec(version3)) && (!match2 || match2.index + match2[0].length !== version3.length)) {
|
||||
if (!match2 || next.index + next[0].length !== match2.index + match2[0].length) {
|
||||
match2 = next;
|
||||
}
|
||||
safeRe[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
|
||||
}
|
||||
safeRe[t.COERCERTL].lastIndex = -1;
|
||||
}
|
||||
if (match2 === null) {
|
||||
return null;
|
||||
}
|
||||
return parse3(match2[2] + "." + (match2[3] || "0") + "." + (match2[4] || "0"), options);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// src/setup-uv.ts
|
||||
var import_node_fs7 = __toESM(require("node:fs"), 1);
|
||||
var path16 = __toESM(require("node:path"), 1);
|
||||
var import_node_fs8 = __toESM(require("node:fs"), 1);
|
||||
var path15 = __toESM(require("node:path"), 1);
|
||||
|
||||
// node_modules/@actions/core/lib/command.js
|
||||
var os = __toESM(require("os"), 1);
|
||||
@@ -57945,8 +57945,8 @@ var Pattern = class _Pattern {
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-search-state.js
|
||||
var SearchState = class {
|
||||
constructor(path17, level) {
|
||||
this.path = path17;
|
||||
constructor(path16, level) {
|
||||
this.path = path16;
|
||||
this.level = level;
|
||||
}
|
||||
};
|
||||
@@ -62391,15 +62391,15 @@ function getRequestUrl(baseUri, operationSpec, operationArguments, fallbackObjec
|
||||
let isAbsolutePath = false;
|
||||
let requestUrl = replaceAll(baseUri, urlReplacements);
|
||||
if (operationSpec.path) {
|
||||
let path17 = replaceAll(operationSpec.path, urlReplacements);
|
||||
if (operationSpec.path === "/{nextLink}" && path17.startsWith("/")) {
|
||||
path17 = path17.substring(1);
|
||||
let path16 = replaceAll(operationSpec.path, urlReplacements);
|
||||
if (operationSpec.path === "/{nextLink}" && path16.startsWith("/")) {
|
||||
path16 = path16.substring(1);
|
||||
}
|
||||
if (isAbsoluteUrl(path17)) {
|
||||
requestUrl = path17;
|
||||
if (isAbsoluteUrl(path16)) {
|
||||
requestUrl = path16;
|
||||
isAbsolutePath = true;
|
||||
} else {
|
||||
requestUrl = appendPath(requestUrl, path17);
|
||||
requestUrl = appendPath(requestUrl, path16);
|
||||
}
|
||||
}
|
||||
const { queryParams, sequenceParams } = calculateQueryParameters(operationSpec, operationArguments, fallbackObject);
|
||||
@@ -62445,9 +62445,9 @@ function appendPath(url2, pathToAppend) {
|
||||
}
|
||||
const searchStart = pathToAppend.indexOf("?");
|
||||
if (searchStart !== -1) {
|
||||
const path17 = pathToAppend.substring(0, searchStart);
|
||||
const path16 = pathToAppend.substring(0, searchStart);
|
||||
const search = pathToAppend.substring(searchStart + 1);
|
||||
newPath = newPath + path17;
|
||||
newPath = newPath + path16;
|
||||
if (search) {
|
||||
parsedUrl.search = parsedUrl.search ? `${parsedUrl.search}&${search}` : search;
|
||||
}
|
||||
@@ -67289,9 +67289,9 @@ var StorageSharedKeyCredentialPolicy = class extends CredentialPolicy {
|
||||
* @param request -
|
||||
*/
|
||||
getCanonicalizedResourceString(request) {
|
||||
const path17 = getURLPath(request.url) || "/";
|
||||
const path16 = getURLPath(request.url) || "/";
|
||||
let canonicalizedResourceString = "";
|
||||
canonicalizedResourceString += `/${this.factory.accountName}${path17}`;
|
||||
canonicalizedResourceString += `/${this.factory.accountName}${path16}`;
|
||||
const queries = getURLQueries(request.url);
|
||||
const lowercaseQueries = {};
|
||||
if (queries) {
|
||||
@@ -67781,9 +67781,9 @@ function storageSharedKeyCredentialPolicy(options) {
|
||||
return canonicalizedHeadersStringToSign;
|
||||
}
|
||||
function getCanonicalizedResourceString(request) {
|
||||
const path17 = getURLPath(request.url) || "/";
|
||||
const path16 = getURLPath(request.url) || "/";
|
||||
let canonicalizedResourceString = "";
|
||||
canonicalizedResourceString += `/${options.accountName}${path17}`;
|
||||
canonicalizedResourceString += `/${options.accountName}${path16}`;
|
||||
const queries = getURLQueries(request.url);
|
||||
const lowercaseQueries = {};
|
||||
if (queries) {
|
||||
@@ -81724,10 +81724,10 @@ var StorageContextClient = class extends StorageClient {
|
||||
// node_modules/@azure/storage-blob/dist/esm/utils/utils.common.js
|
||||
function escapeURLPath(url2) {
|
||||
const urlParsed = new URL(url2);
|
||||
let path17 = urlParsed.pathname;
|
||||
path17 = path17 || "/";
|
||||
path17 = escape(path17);
|
||||
urlParsed.pathname = path17;
|
||||
let path16 = urlParsed.pathname;
|
||||
path16 = path16 || "/";
|
||||
path16 = escape(path16);
|
||||
urlParsed.pathname = path16;
|
||||
return urlParsed.toString();
|
||||
}
|
||||
function getProxyUriFromDevConnString(connectionString) {
|
||||
@@ -81812,9 +81812,9 @@ function escape(text) {
|
||||
}
|
||||
function appendToURLPath(url2, name) {
|
||||
const urlParsed = new URL(url2);
|
||||
let path17 = urlParsed.pathname;
|
||||
path17 = path17 ? path17.endsWith("/") ? `${path17}${name}` : `${path17}/${name}` : name;
|
||||
urlParsed.pathname = path17;
|
||||
let path16 = urlParsed.pathname;
|
||||
path16 = path16 ? path16.endsWith("/") ? `${path16}${name}` : `${path16}/${name}` : name;
|
||||
urlParsed.pathname = path16;
|
||||
return urlParsed.toString();
|
||||
}
|
||||
function setURLParameter2(url2, name, value) {
|
||||
@@ -90525,8 +90525,8 @@ function handleMatchResult(matchedKey, primaryKey, stateKey, outputKey) {
|
||||
}
|
||||
|
||||
// src/download/download-version.ts
|
||||
var import_node_fs6 = require("node:fs");
|
||||
var path14 = __toESM(require("node:path"), 1);
|
||||
var import_node_fs3 = require("node:fs");
|
||||
var path13 = __toESM(require("node:path"), 1);
|
||||
|
||||
// node_modules/@actions/tool-cache/lib/tool-cache.js
|
||||
var crypto5 = __toESM(require("crypto"), 1);
|
||||
@@ -90963,6 +90963,10 @@ function _getGlobal(key, defaultValue) {
|
||||
return value !== void 0 ? value : defaultValue;
|
||||
}
|
||||
|
||||
// src/download/download-version.ts
|
||||
var pep440 = __toESM(require_pep440(), 1);
|
||||
var semver4 = __toESM(require_semver5(), 1);
|
||||
|
||||
// src/utils/constants.ts
|
||||
var TOOL_CACHE_NAME = "uv";
|
||||
var STATE_UV_PATH = "uv-path";
|
||||
@@ -90977,78 +90981,6 @@ var fs10 = __toESM(require("node:fs"), 1);
|
||||
|
||||
// src/download/checksum/known-checksums.ts
|
||||
var KNOWN_CHECKSUMS = {
|
||||
"aarch64-apple-darwin-0.11.7": "66e37d91f839e12481d7b932a1eccbfe732560f42c1cfb89faddfa2454534ba8",
|
||||
"aarch64-pc-windows-msvc-0.11.7": "1387e1c94e15196351196b79fce4c1e6f4b30f19cdaaf9ff85fbd6b046018aa2",
|
||||
"aarch64-unknown-linux-gnu-0.11.7": "f2ee1cde9aabb4c6e43bd3f341dadaf42189a54e001e521346dc31547310e284",
|
||||
"aarch64-unknown-linux-musl-0.11.7": "46647dc16cbb7d6700f762fdd7a67d220abe18570914732bc310adc91308d272",
|
||||
"arm-unknown-linux-musleabihf-0.11.7": "238974610607541ccdb3b8f4ad161d4f2a4b018d749dc9d358b0965d9a1ddd0f",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.7": "7aa9ddc128f58c0e667227feb84e0aac3bb65301604c5f6f2ab0f442aaaafd99",
|
||||
"armv7-unknown-linux-musleabihf-0.11.7": "77a237761579125b822d604973a2d4afb62b10a8f066db4f793906deec66b017",
|
||||
"i686-pc-windows-msvc-0.11.7": "04652b46b1be90a753e686b839e109a79af3d032ba96d3616c162dffdbe89e5c",
|
||||
"i686-unknown-linux-gnu-0.11.7": "9c77e5b5f2ad4151c6dc29db5511af549e205dbd6e836e544c80ebfadd7a07ec",
|
||||
"i686-unknown-linux-musl-0.11.7": "b067ce3e92d04425bc11b84dc350f97447d3e8dffafccb7ebebde54a56bfc619",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.7": "6ac23c519d1b06297e1e8753c96911fadee5abab4ca35b8c17da30e3e927d8ac",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.7": "2052356c7388d26dc4dfcf2d44e28b3f800785371f37c5f37d179181fe377659",
|
||||
"riscv64gc-unknown-linux-musl-0.11.7": "219a25e413efb62c8ef3efb3593f1f01d9a3c22d1facf3b9c0d80b7caf3a5e56",
|
||||
"s390x-unknown-linux-gnu-0.11.7": "760152aa9e769712d52b6c65a8d7b86ed3aac25a24892cf5998a522d84942f9e",
|
||||
"x86_64-apple-darwin-0.11.7": "0a4bc8fcde4974ea3560be21772aeecab600a6f43fa6e58169f9fa7b3b71d302",
|
||||
"x86_64-pc-windows-msvc-0.11.7": "fe0c7815acf4fc45f8a5eff58ed3cf7ae2e15c3cf1dceadbd10c816ec1690cc1",
|
||||
"x86_64-unknown-linux-gnu-0.11.7": "6681d691eb7f9c00ac6a3af54252f7ab29ae72f0c8f95bdc7f9d1401c23ea868",
|
||||
"x86_64-unknown-linux-musl-0.11.7": "64ddb5f1087649e3f75aa50d139aa4f36ddde728a5295a141e0fa9697bfb7b0f",
|
||||
"aarch64-apple-darwin-0.11.6": "4b69a4e366ec38cd5f305707de95e12951181c448679a00dce2a78868dfc9f5b",
|
||||
"aarch64-pc-windows-msvc-0.11.6": "bee7b25a7a999f17291810242b47565c3ef2b9205651a0fd02a086f261a7e167",
|
||||
"aarch64-unknown-linux-gnu-0.11.6": "d5be4bf7015ea000378cb3c3aba53ba81a8673458ace9c7fa25a0be005b74802",
|
||||
"aarch64-unknown-linux-musl-0.11.6": "d14ebd6f200047264152daaf97b8bd36c7885a5033e9e8bba8366cb0049c0d00",
|
||||
"arm-unknown-linux-musleabihf-0.11.6": "4410a9489e0a29ce8f86fc8604b75a3dd821e9e52734282cbb413b4e19c5c70a",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.6": "9758d49c200c211ccb2c9cbf43877102031c3457e80b6c3cb9da1e4c00119d2a",
|
||||
"armv7-unknown-linux-musleabihf-0.11.6": "0677423d98cea5011d346d7d4a33a53360b99a51a04df4b45f67d43a8308c831",
|
||||
"i686-pc-windows-msvc-0.11.6": "c5569da150166363389a719553d87f99e0c29e542b2c31bc8bd4aeeb8eb83d99",
|
||||
"i686-unknown-linux-gnu-0.11.6": "b4bf8d78478b573c1816b17ec86da7ade14242cd68ac092c1701c5b4a75dc228",
|
||||
"i686-unknown-linux-musl-0.11.6": "ca31705d93f48313d5ffdc23da165e680c6c5389d9a2cc62b85a1ed495e0331f",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.6": "153397d3d82e45e68fb1f4a40ee9898245ec8ed86fd03fcaacaf6e793316acf7",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.6": "0e3ead8667b51b07b5fb9d114bcd1914a5fe3159e6959a584dc2f89c6724e123",
|
||||
"riscv64gc-unknown-linux-musl-0.11.6": "87d5932bffef3b7b9cba4a2a042f95edf75cd34555fc80cfa98cc5a4426635f9",
|
||||
"s390x-unknown-linux-gnu-0.11.6": "6e3d4338da2db2c63326721f1eb3b4f32d9bde24aeff11208d397e1aeba8678e",
|
||||
"x86_64-apple-darwin-0.11.6": "8e0ed5035eaa28c7c8cd2a46b5b9a05bfff1ef01dbdc090a010eb8fdf193a457",
|
||||
"x86_64-pc-windows-msvc-0.11.6": "99aa60edd017a256dbf378f372d1cff3292dbc6696e0ea01716d9158d773ab77",
|
||||
"x86_64-unknown-linux-gnu-0.11.6": "0c6bab77a67a445dc849ed5e8ee8d3cb333b6e2eba863643ce1e228075f27943",
|
||||
"x86_64-unknown-linux-musl-0.11.6": "aa342a53abe42364093506d7704214d2cdca30b916843e520bc67759a5d20132",
|
||||
"aarch64-apple-darwin-0.11.5": "470993e87503874c7c48861daa308b48a7c367e117235bbecf19368b9fdd35b2",
|
||||
"aarch64-pc-windows-msvc-0.11.5": "9b9b99a985cccf249225aaad76412823e9d9736d605dc2252151172a7f6ab3db",
|
||||
"aarch64-unknown-linux-gnu-0.11.5": "3e9b525d686ae4f3682412bce21536366a5c79616a41055530319c501c883169",
|
||||
"aarch64-unknown-linux-musl-0.11.5": "d73860013061c62d6a89f3370527d4c407214038af331147773ae2fd8f6394c1",
|
||||
"arm-unknown-linux-musleabihf-0.11.5": "dcfb4dc15f46eae90ac6d64e7dfc91d8bc0b16816f53b9f8d58ccc8a1220dbb8",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.5": "818d86386fb57ca4182f39df25dd6160e97300d5ba362bc44e25d8adc904776c",
|
||||
"armv7-unknown-linux-musleabihf-0.11.5": "2cae8baae2c1b42249e656e16f5fe733189b0760ee93995be024f9cc5e72eb19",
|
||||
"i686-pc-windows-msvc-0.11.5": "2057ccf3dba9ed23755df92318a08ab221e9e088385c667292acc09d9cc477c6",
|
||||
"i686-unknown-linux-gnu-0.11.5": "2d340e2e5b3354ee7208bb8f2bbf4d2347d7ffdf2af733c21bee98746e34076d",
|
||||
"i686-unknown-linux-musl-0.11.5": "ffe2bc9e0c4fdc18f69b7c5bc016a03fa17028d42620ab2b024ad5bb22cd3f3d",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.5": "c4dabaaa36a13989ab04389263064ca5c27093eb2e7c851ab62d50b6312d9800",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.5": "6ae3ec3cf1aab72604bc6aa8486faf4b473066422c49d9c42ea8366ff3039de4",
|
||||
"riscv64gc-unknown-linux-musl-0.11.5": "d4686fb144563a40e791fc3f010a91e57fdce9cac7a03b8a14a972c25be4464c",
|
||||
"s390x-unknown-linux-gnu-0.11.5": "1309f1e462462dab2da6a55c37012a228d1c06a55c5b43f8ef901ba1599d9e12",
|
||||
"x86_64-apple-darwin-0.11.5": "b8964bed538143f9016d807e421e28f0237a29589851fc79e8159751ac64779a",
|
||||
"x86_64-pc-windows-msvc-0.11.5": "3fa5b6ea9de9256a035e0471f5ef0bb5d95344659723d6eb063e27c76431515d",
|
||||
"x86_64-unknown-linux-gnu-0.11.5": "0d87793f733f327849ebf9cf51b576cfb08328e22af73061405e4bec96ae84d1",
|
||||
"x86_64-unknown-linux-musl-0.11.5": "ee8a52743ce3979e52872b49c5e58ffa541048cb95132142bff23fe5608d73ea",
|
||||
"aarch64-apple-darwin-0.11.4": "9b9cb6c6f58c3246dbf3351ed4e97c500bc3266f5f237d2fd620b66e1c31dc56",
|
||||
"aarch64-pc-windows-msvc-0.11.4": "708b1c210109e50ff520bcd9b6d29cbd8cee584bb55e84d3d1941bf75ab0893d",
|
||||
"aarch64-unknown-linux-gnu-0.11.4": "f5aa91bba0b98d85a4e5262e2847f9ab2273c754f6374dff62b37ef18c65a2e7",
|
||||
"aarch64-unknown-linux-musl-0.11.4": "a02ec7667d7bb1d33cdb7e1de22f7e4242967e3df7e350bac6212515e3bce8ac",
|
||||
"arm-unknown-linux-musleabihf-0.11.4": "5bbc59d8c3d5fdade88fca47e4c18298e44a367e178e97e11466b22e992edae2",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.4": "9d2299155b65988643a55777c638408a0df8e65f606933d1e44691ada72ff106",
|
||||
"armv7-unknown-linux-musleabihf-0.11.4": "43b1e02f8f4b27fd1d085fb14a246638bb607af32408cb13c5c3b3fb47db027f",
|
||||
"i686-pc-windows-msvc-0.11.4": "661588b3607e6d5bb78551f596772a0d04a930ce128189c90800d07f6fca1998",
|
||||
"i686-unknown-linux-gnu-0.11.4": "4248773a2574c3b697588655d7bf14f97baa744c3e156585230e5c711befa6ff",
|
||||
"i686-unknown-linux-musl-0.11.4": "0323c08c1e7455cdf65c89296eda28bad9051cb09d16ea3ce1d0bf718143449e",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.4": "3ddb764538a5dcb4967d7375fde193ce5391e37ddd4d1242012d04cf3848479f",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.4": "93db93607a824d677c47003ee828936913cfdeb2c871bb34cd79c3ec4481e2b1",
|
||||
"riscv64gc-unknown-linux-musl-0.11.4": "78f0d7f92244ce3d7a7a0df5fab2495450bcb18600b59acf1755e77cafed2300",
|
||||
"s390x-unknown-linux-gnu-0.11.4": "07361e1fb32e870841a27d3d7b0b20c4a81e0cc25eeb8b9115425bfd227d2d05",
|
||||
"x86_64-apple-darwin-0.11.4": "c326edaf3fd492f53d1c58777f3459c0d87bf9dae8d89e80aec4b0da6622dcf3",
|
||||
"x86_64-pc-windows-msvc-0.11.4": "26d84455a40b0272b2ab4785cad298ff2c89cd0765b482e9f85b5a1bd880a863",
|
||||
"x86_64-unknown-linux-gnu-0.11.4": "12f9a192bb32d70470aa22cbd2a193d1323a3f58f6ac5f9e3866aaca760c98c6",
|
||||
"x86_64-unknown-linux-musl-0.11.4": "36ce1c5d8997db9b6a24d0f41646d5509b6d1d8b9448c7325f8248a6ea5d4b00",
|
||||
"aarch64-apple-darwin-0.11.3": "2bc3d0c7bf2bd08325b1e170abac6f7e5b3346e1d4eab3370d17cefec934996f",
|
||||
"aarch64-pc-windows-msvc-0.11.3": "e99c56f9ab5e1e1ddcaea3e2389990c94baf38e0d7cb2148de08baf2d3261d49",
|
||||
"aarch64-unknown-linux-gnu-0.11.3": "711382e3158433f06b11d99afb440f4416359fc3c84558886d8ed8826a921bff",
|
||||
@@ -95706,9 +95638,6 @@ async function getLatestVersion(manifestUrl = VERSIONS_MANIFEST_URL) {
|
||||
return latestVersion;
|
||||
}
|
||||
async function getAllVersions(manifestUrl = VERSIONS_MANIFEST_URL) {
|
||||
info(
|
||||
`Getting available versions from ${manifestSource(manifestUrl)} ...`
|
||||
);
|
||||
const versions = await fetchManifest(manifestUrl);
|
||||
return versions.map((versionData) => versionData.version);
|
||||
}
|
||||
@@ -95741,12 +95670,6 @@ async function getArtifact(version3, arch3, platform2, manifestUrl = VERSIONS_MA
|
||||
downloadUrl: artifact.url
|
||||
};
|
||||
}
|
||||
function manifestSource(manifestUrl) {
|
||||
if (manifestUrl === VERSIONS_MANIFEST_URL) {
|
||||
return VERSIONS_MANIFEST_URL;
|
||||
}
|
||||
return `manifest-file ${manifestUrl}`;
|
||||
}
|
||||
function isManifestVersion(value) {
|
||||
if (!isRecord(value)) {
|
||||
return false;
|
||||
@@ -95767,51 +95690,177 @@ function isRecord(value) {
|
||||
return typeof value === "object" && value !== null;
|
||||
}
|
||||
|
||||
// src/version/resolve.ts
|
||||
var pep440 = __toESM(require_pep440(), 1);
|
||||
var semver4 = __toESM(require_semver5(), 1);
|
||||
|
||||
// src/version/specifier.ts
|
||||
function normalizeVersionSpecifier(specifier) {
|
||||
const trimmedSpecifier = specifier.trim();
|
||||
if (trimmedSpecifier.startsWith("==")) {
|
||||
return trimmedSpecifier.slice(2);
|
||||
// src/download/download-version.ts
|
||||
function tryGetFromToolCache(arch3, version3) {
|
||||
debug(`Trying to get uv from tool cache for ${version3}...`);
|
||||
const cachedVersions = findAllVersions(TOOL_CACHE_NAME, arch3);
|
||||
debug(`Cached versions: ${cachedVersions}`);
|
||||
let resolvedVersion = evaluateVersions(cachedVersions, version3);
|
||||
if (resolvedVersion === "") {
|
||||
resolvedVersion = version3;
|
||||
}
|
||||
return trimmedSpecifier;
|
||||
const installedPath = find(TOOL_CACHE_NAME, resolvedVersion, arch3);
|
||||
return { installedPath, version: resolvedVersion };
|
||||
}
|
||||
function parseVersionSpecifier(specifier) {
|
||||
const raw = specifier.trim();
|
||||
const normalized = normalizeVersionSpecifier(raw);
|
||||
if (normalized === "latest") {
|
||||
return {
|
||||
kind: "latest",
|
||||
normalized: "latest",
|
||||
raw
|
||||
};
|
||||
async function downloadVersion(platform2, arch3, version3, checksum, githubToken, manifestUrl) {
|
||||
const artifact = await getArtifact(version3, arch3, platform2, manifestUrl);
|
||||
if (!artifact) {
|
||||
throw new Error(
|
||||
getMissingArtifactMessage(version3, arch3, platform2, manifestUrl)
|
||||
);
|
||||
}
|
||||
if (isExplicitVersion(normalized)) {
|
||||
return {
|
||||
kind: "exact",
|
||||
normalized,
|
||||
raw
|
||||
};
|
||||
const resolvedChecksum = manifestUrl === void 0 ? checksum : resolveChecksum(checksum, artifact.checksum);
|
||||
const mirrorUrl = rewriteToMirror(artifact.downloadUrl);
|
||||
const downloadUrl = mirrorUrl ?? artifact.downloadUrl;
|
||||
const downloadToken = mirrorUrl !== void 0 ? void 0 : githubToken;
|
||||
try {
|
||||
return await downloadArtifact(
|
||||
downloadUrl,
|
||||
`uv-${arch3}-${platform2}`,
|
||||
platform2,
|
||||
arch3,
|
||||
version3,
|
||||
resolvedChecksum,
|
||||
downloadToken
|
||||
);
|
||||
} catch (err) {
|
||||
if (mirrorUrl === void 0) {
|
||||
throw err;
|
||||
}
|
||||
warning(
|
||||
`Failed to download from mirror, falling back to GitHub Releases: ${err.message}`
|
||||
);
|
||||
return await downloadArtifact(
|
||||
artifact.downloadUrl,
|
||||
`uv-${arch3}-${platform2}`,
|
||||
platform2,
|
||||
arch3,
|
||||
version3,
|
||||
resolvedChecksum,
|
||||
githubToken
|
||||
);
|
||||
}
|
||||
return {
|
||||
isSimpleMinimumVersionSpecifier: raw.includes(">") && !raw.includes(","),
|
||||
kind: "range",
|
||||
normalized,
|
||||
raw
|
||||
};
|
||||
}
|
||||
function rewriteToMirror(url2) {
|
||||
if (!url2.startsWith(GITHUB_RELEASES_PREFIX)) {
|
||||
return void 0;
|
||||
}
|
||||
return ASTRAL_MIRROR_PREFIX + url2.slice(GITHUB_RELEASES_PREFIX.length);
|
||||
}
|
||||
async function downloadArtifact(downloadUrl, artifactName, platform2, arch3, version3, checksum, githubToken) {
|
||||
info(`Downloading uv from "${downloadUrl}" ...`);
|
||||
const downloadPath = await downloadTool(
|
||||
downloadUrl,
|
||||
void 0,
|
||||
githubToken
|
||||
);
|
||||
await validateChecksum(checksum, downloadPath, arch3, platform2, version3);
|
||||
let uvDir;
|
||||
if (platform2 === "pc-windows-msvc") {
|
||||
try {
|
||||
uvDir = await extractTar2(downloadPath, void 0, "x");
|
||||
} catch (err) {
|
||||
info(
|
||||
`Extracting with tar failed, falling back to zip extraction: ${err.message}`
|
||||
);
|
||||
const extension = getExtension(platform2);
|
||||
const fullPathWithExtension = `${downloadPath}${extension}`;
|
||||
await import_node_fs3.promises.copyFile(downloadPath, fullPathWithExtension);
|
||||
uvDir = await extractZip(fullPathWithExtension);
|
||||
}
|
||||
} else {
|
||||
const extractedDir = await extractTar2(downloadPath);
|
||||
uvDir = path13.join(extractedDir, artifactName);
|
||||
}
|
||||
const cachedToolDir = await cacheDir(
|
||||
uvDir,
|
||||
TOOL_CACHE_NAME,
|
||||
version3,
|
||||
arch3
|
||||
);
|
||||
return { cachedToolDir, version: version3 };
|
||||
}
|
||||
function getMissingArtifactMessage(version3, arch3, platform2, manifestUrl) {
|
||||
if (manifestUrl === void 0) {
|
||||
return `Could not find artifact for version ${version3}, arch ${arch3}, platform ${platform2} in ${VERSIONS_MANIFEST_URL} .`;
|
||||
}
|
||||
return `manifest-file does not contain version ${version3}, arch ${arch3}, platform ${platform2}.`;
|
||||
}
|
||||
function resolveChecksum(checksum, manifestChecksum) {
|
||||
return checksum !== void 0 && checksum !== "" ? checksum : manifestChecksum;
|
||||
}
|
||||
function getExtension(platform2) {
|
||||
return platform2 === "pc-windows-msvc" ? ".zip" : ".tar.gz";
|
||||
}
|
||||
async function resolveVersion(versionInput, manifestUrl, resolutionStrategy = "highest") {
|
||||
debug(`Resolving version: ${versionInput}`);
|
||||
const isSimpleMinimumVersionSpecifier = versionInput.includes(">") && !versionInput.includes(",");
|
||||
const resolveVersionSpecifierToLatest = isSimpleMinimumVersionSpecifier && resolutionStrategy === "highest";
|
||||
if (resolveVersionSpecifierToLatest) {
|
||||
info("Found minimum version specifier, using latest version");
|
||||
}
|
||||
const version3 = versionInput === "latest" || resolveVersionSpecifierToLatest ? await getLatestVersion(manifestUrl) : versionInput;
|
||||
if (isExplicitVersion(version3)) {
|
||||
debug(`Version ${version3} is an explicit version.`);
|
||||
if (resolveVersionSpecifierToLatest && !pep440.satisfies(version3, versionInput)) {
|
||||
throw new Error(`No version found for ${versionInput}`);
|
||||
}
|
||||
return version3;
|
||||
}
|
||||
const availableVersions = await getAvailableVersions(manifestUrl);
|
||||
debug(`Available versions: ${availableVersions}`);
|
||||
const resolvedVersion = resolutionStrategy === "lowest" ? minSatisfying3(availableVersions, version3) : maxSatisfying2(availableVersions, version3);
|
||||
if (resolvedVersion === void 0) {
|
||||
throw new Error(`No version found for ${version3}`);
|
||||
}
|
||||
return resolvedVersion;
|
||||
}
|
||||
async function getAvailableVersions(manifestUrl) {
|
||||
if (manifestUrl !== void 0) {
|
||||
info(
|
||||
`Getting available versions from manifest-file ${manifestUrl} ...`
|
||||
);
|
||||
} else {
|
||||
info(`Getting available versions from ${VERSIONS_MANIFEST_URL} ...`);
|
||||
}
|
||||
return await getAllVersions(manifestUrl);
|
||||
}
|
||||
function maxSatisfying2(versions, version3) {
|
||||
const maxSemver = evaluateVersions(versions, version3);
|
||||
if (maxSemver !== "") {
|
||||
debug(`Found a version that satisfies the semver range: ${maxSemver}`);
|
||||
return maxSemver;
|
||||
}
|
||||
const maxPep440 = pep440.maxSatisfying(versions, version3);
|
||||
if (maxPep440 !== null) {
|
||||
debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${maxPep440}`
|
||||
);
|
||||
return maxPep440;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
function minSatisfying3(versions, version3) {
|
||||
const minSemver = semver4.minSatisfying(versions, version3);
|
||||
if (minSemver !== null) {
|
||||
debug(`Found a version that satisfies the semver range: ${minSemver}`);
|
||||
return minSemver;
|
||||
}
|
||||
const minPep440 = pep440.minSatisfying(versions, version3);
|
||||
if (minPep440 !== null) {
|
||||
debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${minPep440}`
|
||||
);
|
||||
return minPep440;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
|
||||
// src/version/version-request-resolver.ts
|
||||
var path13 = __toESM(require("node:path"), 1);
|
||||
|
||||
// src/version/file-parser.ts
|
||||
var import_node_fs5 = __toESM(require("node:fs"), 1);
|
||||
// src/utils/inputs.ts
|
||||
var import_node_path = __toESM(require("node:path"), 1);
|
||||
|
||||
// src/utils/config-file.ts
|
||||
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
||||
var import_node_fs4 = __toESM(require("node:fs"), 1);
|
||||
|
||||
// node_modules/smol-toml/dist/error.js
|
||||
function getLineColFromPtr(string, ptr) {
|
||||
@@ -96500,16 +96549,10 @@ function parse2(toml, { maxDepth = 1e3, integersAsBigInt } = {}) {
|
||||
|
||||
// src/utils/config-file.ts
|
||||
function getConfigValueFromTomlFile(filePath, key) {
|
||||
if (!import_node_fs3.default.existsSync(filePath) || !filePath.endsWith(".toml")) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContent = import_node_fs3.default.readFileSync(filePath, "utf-8");
|
||||
return getConfigValueFromTomlContent(filePath, fileContent, key);
|
||||
}
|
||||
function getConfigValueFromTomlContent(filePath, fileContent, key) {
|
||||
if (!filePath.endsWith(".toml")) {
|
||||
if (!import_node_fs4.default.existsSync(filePath) || !filePath.endsWith(".toml")) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContent = import_node_fs4.default.readFileSync(filePath, "utf-8");
|
||||
if (filePath.endsWith("pyproject.toml")) {
|
||||
const tomlContent2 = parse2(fileContent);
|
||||
return tomlContent2?.tool?.uv?.[key];
|
||||
@@ -96518,459 +96561,13 @@ function getConfigValueFromTomlContent(filePath, fileContent, key) {
|
||||
return tomlContent[key];
|
||||
}
|
||||
|
||||
// src/version/requirements-file.ts
|
||||
function getUvVersionFromRequirementsText(fileContent) {
|
||||
return getUvVersionFromAllDependencies(fileContent.split("\n"));
|
||||
}
|
||||
function getUvVersionFromParsedPyproject(pyproject) {
|
||||
const dependencies = pyproject?.project?.dependencies || [];
|
||||
const optionalDependencies = Object.values(
|
||||
pyproject?.project?.["optional-dependencies"] || {}
|
||||
).flat();
|
||||
const devDependencies = Object.values(
|
||||
pyproject?.["dependency-groups"] || {}
|
||||
).flat().filter((item) => typeof item === "string");
|
||||
return getUvVersionFromAllDependencies(
|
||||
dependencies.concat(optionalDependencies, devDependencies)
|
||||
);
|
||||
}
|
||||
function parsePyprojectContent(pyprojectContent) {
|
||||
return parse2(pyprojectContent);
|
||||
}
|
||||
function getUvVersionFromAllDependencies(allDependencies) {
|
||||
return allDependencies.find((dep) => dep.match(/^uv[=<>~!]/))?.match(/^uv([=<>~!]+\S*)/)?.[1].trim();
|
||||
}
|
||||
|
||||
// src/version/tool-versions-file.ts
|
||||
var import_node_fs4 = __toESM(require("node:fs"), 1);
|
||||
function getUvVersionFromToolVersions(filePath) {
|
||||
if (!filePath.endsWith(".tool-versions")) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContents = import_node_fs4.default.readFileSync(filePath, "utf8");
|
||||
const lines = fileContents.split("\n");
|
||||
for (const line of lines) {
|
||||
if (line.trim().startsWith("#")) {
|
||||
continue;
|
||||
}
|
||||
const match2 = line.match(/^\s*uv\s*v?\s*(?<version>[^\s]+)\s*$/);
|
||||
if (match2) {
|
||||
const matchedVersion = match2.groups?.version.trim();
|
||||
if (matchedVersion?.startsWith("ref")) {
|
||||
warning(
|
||||
"The ref syntax of .tool-versions is not supported. Please use a released version instead."
|
||||
);
|
||||
return void 0;
|
||||
}
|
||||
return matchedVersion;
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
|
||||
// src/version/file-parser.ts
|
||||
var VERSION_FILE_PARSERS = [
|
||||
{
|
||||
format: ".tool-versions",
|
||||
parse: (filePath) => getUvVersionFromToolVersions(filePath),
|
||||
supports: (filePath) => filePath.endsWith(".tool-versions")
|
||||
},
|
||||
{
|
||||
format: "uv.toml",
|
||||
parse: (filePath) => {
|
||||
const fileContent = import_node_fs5.default.readFileSync(filePath, "utf-8");
|
||||
return getConfigValueFromTomlContent(
|
||||
filePath,
|
||||
fileContent,
|
||||
"required-version"
|
||||
);
|
||||
},
|
||||
supports: (filePath) => filePath.endsWith("uv.toml")
|
||||
},
|
||||
{
|
||||
format: "pyproject.toml",
|
||||
parse: (filePath) => {
|
||||
const fileContent = import_node_fs5.default.readFileSync(filePath, "utf-8");
|
||||
const pyproject = parsePyprojectContent(fileContent);
|
||||
const requiredVersion = pyproject.tool?.uv?.["required-version"];
|
||||
if (requiredVersion !== void 0) {
|
||||
return requiredVersion;
|
||||
}
|
||||
return getUvVersionFromParsedPyproject(pyproject);
|
||||
},
|
||||
supports: (filePath) => filePath.endsWith("pyproject.toml")
|
||||
},
|
||||
{
|
||||
format: "requirements",
|
||||
parse: (filePath) => {
|
||||
const fileContent = import_node_fs5.default.readFileSync(filePath, "utf-8");
|
||||
return getUvVersionFromRequirementsText(fileContent);
|
||||
},
|
||||
supports: (filePath) => filePath.endsWith(".txt")
|
||||
}
|
||||
];
|
||||
function getParsedVersionFile(filePath) {
|
||||
info(`Trying to find version for uv in: ${filePath}`);
|
||||
if (!import_node_fs5.default.existsSync(filePath)) {
|
||||
info(`Could not find file: ${filePath}`);
|
||||
return void 0;
|
||||
}
|
||||
const parser = getVersionFileParser(filePath);
|
||||
if (parser === void 0) {
|
||||
return void 0;
|
||||
}
|
||||
try {
|
||||
const specifier = parser.parse(filePath);
|
||||
if (specifier === void 0) {
|
||||
return void 0;
|
||||
}
|
||||
const normalizedSpecifier = normalizeVersionSpecifier(specifier);
|
||||
info(`Found version for uv in ${filePath}: ${normalizedSpecifier}`);
|
||||
return {
|
||||
format: parser.format,
|
||||
specifier: normalizedSpecifier
|
||||
};
|
||||
} catch (error2) {
|
||||
warning(
|
||||
`Error while parsing ${filePath}: ${error2.message}`
|
||||
);
|
||||
return void 0;
|
||||
}
|
||||
}
|
||||
function getVersionFileParser(filePath) {
|
||||
return VERSION_FILE_PARSERS.find((parser) => parser.supports(filePath));
|
||||
}
|
||||
|
||||
// src/version/version-request-resolver.ts
|
||||
var VersionRequestContext = class {
|
||||
version;
|
||||
versionFile;
|
||||
workingDirectory;
|
||||
parsedFiles = /* @__PURE__ */ new Map();
|
||||
constructor(version3, versionFile, workingDirectory) {
|
||||
this.version = version3;
|
||||
this.versionFile = versionFile;
|
||||
this.workingDirectory = workingDirectory;
|
||||
}
|
||||
getVersionFile(filePath) {
|
||||
const cachedResult = this.parsedFiles.get(filePath);
|
||||
if (cachedResult !== void 0 || this.parsedFiles.has(filePath)) {
|
||||
return cachedResult;
|
||||
}
|
||||
const result = getParsedVersionFile(filePath);
|
||||
this.parsedFiles.set(filePath, result);
|
||||
return result;
|
||||
}
|
||||
getWorkspaceCandidates() {
|
||||
return [
|
||||
{
|
||||
source: "uv.toml",
|
||||
sourcePath: path13.join(this.workingDirectory, "uv.toml")
|
||||
},
|
||||
{
|
||||
source: "pyproject.toml",
|
||||
sourcePath: path13.join(this.workingDirectory, "pyproject.toml")
|
||||
}
|
||||
];
|
||||
}
|
||||
};
|
||||
var ExplicitInputVersionResolver = class {
|
||||
resolve(context3) {
|
||||
if (context3.version === void 0) {
|
||||
return void 0;
|
||||
}
|
||||
return {
|
||||
source: "input",
|
||||
specifier: normalizeVersionSpecifier(context3.version)
|
||||
};
|
||||
}
|
||||
};
|
||||
var VersionFileVersionResolver = class {
|
||||
resolve(context3) {
|
||||
if (context3.versionFile === void 0) {
|
||||
return void 0;
|
||||
}
|
||||
const versionFile = context3.getVersionFile(context3.versionFile);
|
||||
if (versionFile === void 0) {
|
||||
throw new Error(
|
||||
`Could not determine uv version from file: ${context3.versionFile}`
|
||||
);
|
||||
}
|
||||
return {
|
||||
format: versionFile.format,
|
||||
source: "version-file",
|
||||
sourcePath: context3.versionFile,
|
||||
specifier: versionFile.specifier
|
||||
};
|
||||
}
|
||||
};
|
||||
var WorkspaceVersionResolver = class {
|
||||
resolve(context3) {
|
||||
for (const candidate of context3.getWorkspaceCandidates()) {
|
||||
const versionFile = context3.getVersionFile(candidate.sourcePath);
|
||||
if (versionFile === void 0) {
|
||||
continue;
|
||||
}
|
||||
return {
|
||||
format: versionFile.format,
|
||||
source: candidate.source,
|
||||
sourcePath: candidate.sourcePath,
|
||||
specifier: versionFile.specifier
|
||||
};
|
||||
}
|
||||
info(
|
||||
"Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest."
|
||||
);
|
||||
return void 0;
|
||||
}
|
||||
};
|
||||
var LatestVersionResolver = class {
|
||||
resolve() {
|
||||
return {
|
||||
source: "default",
|
||||
specifier: "latest"
|
||||
};
|
||||
}
|
||||
};
|
||||
var VERSION_REQUEST_RESOLVERS = [
|
||||
new ExplicitInputVersionResolver(),
|
||||
new VersionFileVersionResolver(),
|
||||
new WorkspaceVersionResolver(),
|
||||
new LatestVersionResolver()
|
||||
];
|
||||
function resolveVersionRequest(options) {
|
||||
const context3 = new VersionRequestContext(
|
||||
emptyToUndefined(options.version),
|
||||
emptyToUndefined(options.versionFile),
|
||||
options.workingDirectory
|
||||
);
|
||||
for (const resolver of VERSION_REQUEST_RESOLVERS) {
|
||||
const request = resolver.resolve(context3);
|
||||
if (request !== void 0) {
|
||||
return request;
|
||||
}
|
||||
}
|
||||
throw new Error("Could not resolve a requested uv version.");
|
||||
}
|
||||
function emptyToUndefined(value) {
|
||||
return value === void 0 || value === "" ? void 0 : value;
|
||||
}
|
||||
|
||||
// src/version/resolve.ts
|
||||
var ExactVersionResolver = class {
|
||||
async resolve(context3) {
|
||||
if (context3.parsedSpecifier.kind !== "exact") {
|
||||
return void 0;
|
||||
}
|
||||
debug(
|
||||
`Version ${context3.parsedSpecifier.normalized} is an explicit version.`
|
||||
);
|
||||
return context3.parsedSpecifier.normalized;
|
||||
}
|
||||
};
|
||||
var LatestVersionResolver2 = class {
|
||||
async resolve(context3) {
|
||||
const shouldUseLatestVersion = context3.parsedSpecifier.kind === "latest" || context3.parsedSpecifier.kind === "range" && context3.parsedSpecifier.isSimpleMinimumVersionSpecifier && context3.resolutionStrategy === "highest";
|
||||
if (!shouldUseLatestVersion) {
|
||||
return void 0;
|
||||
}
|
||||
if (context3.parsedSpecifier.kind === "range" && context3.parsedSpecifier.isSimpleMinimumVersionSpecifier) {
|
||||
info("Found minimum version specifier, using latest version");
|
||||
}
|
||||
const latestVersion = await getLatestVersion(context3.manifestUrl);
|
||||
if (context3.parsedSpecifier.kind === "range" && context3.parsedSpecifier.isSimpleMinimumVersionSpecifier && !pep440.satisfies(latestVersion, context3.parsedSpecifier.raw)) {
|
||||
throw new Error(`No version found for ${context3.parsedSpecifier.raw}`);
|
||||
}
|
||||
return latestVersion;
|
||||
}
|
||||
};
|
||||
var RangeVersionResolver = class {
|
||||
async resolve(context3) {
|
||||
if (context3.parsedSpecifier.kind !== "range") {
|
||||
return void 0;
|
||||
}
|
||||
const availableVersions = await getAllVersions(context3.manifestUrl);
|
||||
debug(`Available versions: ${availableVersions}`);
|
||||
const resolvedVersion = context3.resolutionStrategy === "lowest" ? minSatisfying3(availableVersions, context3.parsedSpecifier.normalized) : maxSatisfying2(availableVersions, context3.parsedSpecifier.normalized);
|
||||
if (resolvedVersion === void 0) {
|
||||
throw new Error(`No version found for ${context3.parsedSpecifier.raw}`);
|
||||
}
|
||||
return resolvedVersion;
|
||||
}
|
||||
};
|
||||
var CONCRETE_VERSION_RESOLVERS = [
|
||||
new ExactVersionResolver(),
|
||||
new LatestVersionResolver2(),
|
||||
new RangeVersionResolver()
|
||||
];
|
||||
async function resolveUvVersion(options) {
|
||||
const request = resolveVersionRequest(options);
|
||||
const resolutionStrategy = options.resolutionStrategy ?? "highest";
|
||||
const version3 = await resolveVersion(
|
||||
request.specifier,
|
||||
options.manifestFile,
|
||||
resolutionStrategy
|
||||
);
|
||||
return version3;
|
||||
}
|
||||
async function resolveVersion(versionInput, manifestUrl, resolutionStrategy = "highest") {
|
||||
debug(`Resolving version: ${versionInput}`);
|
||||
const context3 = {
|
||||
manifestUrl,
|
||||
parsedSpecifier: parseVersionSpecifier(versionInput),
|
||||
resolutionStrategy
|
||||
};
|
||||
for (const resolver of CONCRETE_VERSION_RESOLVERS) {
|
||||
const version3 = await resolver.resolve(context3);
|
||||
if (version3 !== void 0) {
|
||||
return version3;
|
||||
}
|
||||
}
|
||||
throw new Error(`No version found for ${versionInput}`);
|
||||
}
|
||||
function maxSatisfying2(versions, version3) {
|
||||
const maxSemver = evaluateVersions(versions, version3);
|
||||
if (maxSemver !== "") {
|
||||
debug(`Found a version that satisfies the semver range: ${maxSemver}`);
|
||||
return maxSemver;
|
||||
}
|
||||
const maxPep440 = pep440.maxSatisfying(versions, version3);
|
||||
if (maxPep440 !== null) {
|
||||
debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${maxPep440}`
|
||||
);
|
||||
return maxPep440;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
function minSatisfying3(versions, version3) {
|
||||
const minSemver = semver4.minSatisfying(versions, version3);
|
||||
if (minSemver !== null) {
|
||||
debug(`Found a version that satisfies the semver range: ${minSemver}`);
|
||||
return minSemver;
|
||||
}
|
||||
const minPep440 = pep440.minSatisfying(versions, version3);
|
||||
if (minPep440 !== null) {
|
||||
debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${minPep440}`
|
||||
);
|
||||
return minPep440;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
|
||||
// src/download/download-version.ts
|
||||
function tryGetFromToolCache(arch3, version3) {
|
||||
debug(`Trying to get uv from tool cache for ${version3}...`);
|
||||
const cachedVersions = findAllVersions(TOOL_CACHE_NAME, arch3);
|
||||
debug(`Cached versions: ${cachedVersions}`);
|
||||
let resolvedVersion = evaluateVersions(cachedVersions, version3);
|
||||
if (resolvedVersion === "") {
|
||||
resolvedVersion = version3;
|
||||
}
|
||||
const installedPath = find(TOOL_CACHE_NAME, resolvedVersion, arch3);
|
||||
return { installedPath, version: resolvedVersion };
|
||||
}
|
||||
async function downloadVersion(platform2, arch3, version3, checksum, githubToken, manifestUrl) {
|
||||
const artifact = await getArtifact(version3, arch3, platform2, manifestUrl);
|
||||
if (!artifact) {
|
||||
throw new Error(
|
||||
getMissingArtifactMessage(version3, arch3, platform2, manifestUrl)
|
||||
);
|
||||
}
|
||||
const resolvedChecksum = manifestUrl === void 0 ? checksum : resolveChecksum(checksum, artifact.checksum);
|
||||
const mirrorUrl = rewriteToMirror(artifact.downloadUrl);
|
||||
const downloadUrl = mirrorUrl ?? artifact.downloadUrl;
|
||||
const downloadToken = mirrorUrl !== void 0 ? void 0 : githubToken;
|
||||
try {
|
||||
return await downloadArtifact(
|
||||
downloadUrl,
|
||||
`uv-${arch3}-${platform2}`,
|
||||
platform2,
|
||||
arch3,
|
||||
version3,
|
||||
resolvedChecksum,
|
||||
downloadToken
|
||||
);
|
||||
} catch (err) {
|
||||
if (mirrorUrl === void 0) {
|
||||
throw err;
|
||||
}
|
||||
warning(
|
||||
`Failed to download from mirror, falling back to GitHub Releases: ${err.message}`
|
||||
);
|
||||
return await downloadArtifact(
|
||||
artifact.downloadUrl,
|
||||
`uv-${arch3}-${platform2}`,
|
||||
platform2,
|
||||
arch3,
|
||||
version3,
|
||||
resolvedChecksum,
|
||||
githubToken
|
||||
);
|
||||
}
|
||||
}
|
||||
function rewriteToMirror(url2) {
|
||||
if (!url2.startsWith(GITHUB_RELEASES_PREFIX)) {
|
||||
return void 0;
|
||||
}
|
||||
return ASTRAL_MIRROR_PREFIX + url2.slice(GITHUB_RELEASES_PREFIX.length);
|
||||
}
|
||||
async function downloadArtifact(downloadUrl, artifactName, platform2, arch3, version3, checksum, githubToken) {
|
||||
info(`Downloading uv from "${downloadUrl}" ...`);
|
||||
const downloadPath = await downloadTool(
|
||||
downloadUrl,
|
||||
void 0,
|
||||
githubToken
|
||||
);
|
||||
await validateChecksum(checksum, downloadPath, arch3, platform2, version3);
|
||||
let uvDir;
|
||||
if (platform2 === "pc-windows-msvc") {
|
||||
try {
|
||||
uvDir = await extractTar2(downloadPath, void 0, "x");
|
||||
} catch (err) {
|
||||
info(
|
||||
`Extracting with tar failed, falling back to zip extraction: ${err.message}`
|
||||
);
|
||||
const extension = getExtension(platform2);
|
||||
const fullPathWithExtension = `${downloadPath}${extension}`;
|
||||
await import_node_fs6.promises.copyFile(downloadPath, fullPathWithExtension);
|
||||
uvDir = await extractZip(fullPathWithExtension);
|
||||
}
|
||||
} else {
|
||||
const extractedDir = await extractTar2(downloadPath);
|
||||
uvDir = path14.join(extractedDir, artifactName);
|
||||
}
|
||||
const cachedToolDir = await cacheDir(
|
||||
uvDir,
|
||||
TOOL_CACHE_NAME,
|
||||
version3,
|
||||
arch3
|
||||
);
|
||||
return { cachedToolDir, version: version3 };
|
||||
}
|
||||
function getMissingArtifactMessage(version3, arch3, platform2, manifestUrl) {
|
||||
if (manifestUrl === void 0) {
|
||||
return `Could not find artifact for version ${version3}, arch ${arch3}, platform ${platform2} in ${VERSIONS_MANIFEST_URL} .`;
|
||||
}
|
||||
return `manifest-file does not contain version ${version3}, arch ${arch3}, platform ${platform2}.`;
|
||||
}
|
||||
function resolveChecksum(checksum, manifestChecksum) {
|
||||
return checksum !== void 0 && checksum !== "" ? checksum : manifestChecksum;
|
||||
}
|
||||
function getExtension(platform2) {
|
||||
return platform2 === "pc-windows-msvc" ? ".zip" : ".tar.gz";
|
||||
}
|
||||
|
||||
// src/utils/inputs.ts
|
||||
var import_node_path = __toESM(require("node:path"), 1);
|
||||
function loadInputs() {
|
||||
const workingDirectory = getInput("working-directory");
|
||||
const version3 = getInput("version");
|
||||
const versionFile = getVersionFile(workingDirectory);
|
||||
const pythonVersion = getInput("python-version");
|
||||
const activateEnvironment2 = getBooleanInput("activate-environment");
|
||||
const noProject = getBooleanInput("no-project");
|
||||
const venvPath = getVenvPath(workingDirectory, activateEnvironment2);
|
||||
const checksum = getInput("checksum");
|
||||
const enableCache = getEnableCache();
|
||||
@@ -97007,7 +96604,6 @@ function loadInputs() {
|
||||
ignoreEmptyWorkdir,
|
||||
ignoreNothingToCache,
|
||||
manifestFile,
|
||||
noProject,
|
||||
pruneCache,
|
||||
pythonDir,
|
||||
pythonVersion,
|
||||
@@ -97212,6 +96808,91 @@ function getResolutionStrategy() {
|
||||
);
|
||||
}
|
||||
|
||||
// src/version/resolve.ts
|
||||
var import_node_fs7 = __toESM(require("node:fs"), 1);
|
||||
|
||||
// src/version/requirements-file.ts
|
||||
var import_node_fs5 = __toESM(require("node:fs"), 1);
|
||||
function getUvVersionFromRequirementsFile(filePath) {
|
||||
const fileContent = import_node_fs5.default.readFileSync(filePath, "utf-8");
|
||||
if (filePath.endsWith(".txt")) {
|
||||
return getUvVersionFromAllDependencies(fileContent.split("\n"));
|
||||
}
|
||||
const dependencies = parsePyprojectDependencies(fileContent);
|
||||
return getUvVersionFromAllDependencies(dependencies);
|
||||
}
|
||||
function getUvVersionFromAllDependencies(allDependencies) {
|
||||
return allDependencies.find((dep) => dep.match(/^uv[=<>~!]/))?.match(/^uv([=<>~!]+\S*)/)?.[1].trim();
|
||||
}
|
||||
function parsePyprojectDependencies(pyprojectContent) {
|
||||
const pyproject = parse2(pyprojectContent);
|
||||
const dependencies = pyproject?.project?.dependencies || [];
|
||||
const optionalDependencies = Object.values(
|
||||
pyproject?.project?.["optional-dependencies"] || {}
|
||||
).flat();
|
||||
const devDependencies = Object.values(
|
||||
pyproject?.["dependency-groups"] || {}
|
||||
).flat().filter((item) => typeof item === "string");
|
||||
return dependencies.concat(optionalDependencies, devDependencies);
|
||||
}
|
||||
|
||||
// src/version/tool-versions-file.ts
|
||||
var import_node_fs6 = __toESM(require("node:fs"), 1);
|
||||
function getUvVersionFromToolVersions(filePath) {
|
||||
if (!filePath.endsWith(".tool-versions")) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContents = import_node_fs6.default.readFileSync(filePath, "utf8");
|
||||
const lines = fileContents.split("\n");
|
||||
for (const line of lines) {
|
||||
if (line.trim().startsWith("#")) {
|
||||
continue;
|
||||
}
|
||||
const match2 = line.match(/^\s*uv\s*v?\s*(?<version>[^\s]+)\s*$/);
|
||||
if (match2) {
|
||||
const matchedVersion = match2.groups?.version.trim();
|
||||
if (matchedVersion?.startsWith("ref")) {
|
||||
warning(
|
||||
"The ref syntax of .tool-versions is not supported. Please use a released version instead."
|
||||
);
|
||||
return void 0;
|
||||
}
|
||||
return matchedVersion;
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
|
||||
// src/version/resolve.ts
|
||||
function getUvVersionFromFile(filePath) {
|
||||
info(`Trying to find version for uv in: ${filePath}`);
|
||||
if (!import_node_fs7.default.existsSync(filePath)) {
|
||||
info(`Could not find file: ${filePath}`);
|
||||
return void 0;
|
||||
}
|
||||
let uvVersion;
|
||||
try {
|
||||
uvVersion = getUvVersionFromToolVersions(filePath);
|
||||
if (uvVersion === void 0) {
|
||||
uvVersion = getConfigValueFromTomlFile(filePath, "required-version");
|
||||
}
|
||||
if (uvVersion === void 0) {
|
||||
uvVersion = getUvVersionFromRequirementsFile(filePath);
|
||||
}
|
||||
} catch (err) {
|
||||
const message = err.message;
|
||||
warning(`Error while parsing ${filePath}: ${message}`);
|
||||
return void 0;
|
||||
}
|
||||
if (uvVersion?.startsWith("==")) {
|
||||
uvVersion = uvVersion.slice(2);
|
||||
}
|
||||
if (uvVersion !== void 0) {
|
||||
info(`Found version for uv in ${filePath}: ${uvVersion}`);
|
||||
}
|
||||
return uvVersion;
|
||||
}
|
||||
|
||||
// src/setup-uv.ts
|
||||
var sourceDir = __dirname;
|
||||
async function getPythonVersion(inputs) {
|
||||
@@ -97276,7 +96957,7 @@ async function run() {
|
||||
}
|
||||
}
|
||||
function detectEmptyWorkdir(inputs) {
|
||||
if (import_node_fs7.default.readdirSync(inputs.workingDirectory).length === 0) {
|
||||
if (import_node_fs8.default.readdirSync(inputs.workingDirectory).length === 0) {
|
||||
if (inputs.ignoreEmptyWorkdir) {
|
||||
info(
|
||||
"Empty workdir detected. Ignoring because ignore-empty-workdir is enabled"
|
||||
@@ -97289,13 +96970,7 @@ function detectEmptyWorkdir(inputs) {
|
||||
}
|
||||
}
|
||||
async function setupUv(inputs, platform2, arch3) {
|
||||
const resolvedVersion = await resolveUvVersion({
|
||||
manifestFile: inputs.manifestFile,
|
||||
resolutionStrategy: inputs.resolutionStrategy,
|
||||
version: inputs.version,
|
||||
versionFile: inputs.versionFile,
|
||||
workingDirectory: inputs.workingDirectory
|
||||
});
|
||||
const resolvedVersion = await determineVersion(inputs);
|
||||
const toolCacheResult = tryGetFromToolCache(arch3, resolvedVersion);
|
||||
if (toolCacheResult.installedPath) {
|
||||
info(`Found uv in tool-cache for ${toolCacheResult.version}`);
|
||||
@@ -97317,10 +96992,43 @@ async function setupUv(inputs, platform2, arch3) {
|
||||
version: downloadResult.version
|
||||
};
|
||||
}
|
||||
async function determineVersion(inputs) {
|
||||
return await resolveVersion(
|
||||
getRequestedVersion(inputs),
|
||||
inputs.manifestFile,
|
||||
inputs.resolutionStrategy
|
||||
);
|
||||
}
|
||||
function getRequestedVersion(inputs) {
|
||||
if (inputs.version !== "") {
|
||||
return inputs.version;
|
||||
}
|
||||
if (inputs.versionFile !== "") {
|
||||
const versionFromFile = getUvVersionFromFile(inputs.versionFile);
|
||||
if (versionFromFile === void 0) {
|
||||
throw new Error(
|
||||
`Could not determine uv version from file: ${inputs.versionFile}`
|
||||
);
|
||||
}
|
||||
return versionFromFile;
|
||||
}
|
||||
const versionFromUvToml = getUvVersionFromFile(
|
||||
`${inputs.workingDirectory}${path15.sep}uv.toml`
|
||||
);
|
||||
const versionFromPyproject = getUvVersionFromFile(
|
||||
`${inputs.workingDirectory}${path15.sep}pyproject.toml`
|
||||
);
|
||||
if (versionFromUvToml === void 0 && versionFromPyproject === void 0) {
|
||||
info(
|
||||
"Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest."
|
||||
);
|
||||
}
|
||||
return versionFromUvToml || versionFromPyproject || "latest";
|
||||
}
|
||||
function addUvToPathAndOutput(cachedPath) {
|
||||
setOutput("uv-path", `${cachedPath}${path16.sep}uv`);
|
||||
saveState(STATE_UV_PATH, `${cachedPath}${path16.sep}uv`);
|
||||
setOutput("uvx-path", `${cachedPath}${path16.sep}uvx`);
|
||||
setOutput("uv-path", `${cachedPath}${path15.sep}uv`);
|
||||
saveState(STATE_UV_PATH, `${cachedPath}${path15.sep}uv`);
|
||||
setOutput("uvx-path", `${cachedPath}${path15.sep}uvx`);
|
||||
if (process.env.UV_NO_MODIFY_PATH !== void 0) {
|
||||
info("UV_NO_MODIFY_PATH is set, not modifying PATH");
|
||||
} else {
|
||||
@@ -97387,22 +97095,18 @@ async function activateEnvironment(inputs) {
|
||||
);
|
||||
}
|
||||
info(`Creating and activating python venv at ${inputs.venvPath}...`);
|
||||
const venvArgs = [
|
||||
await exec("uv", [
|
||||
"venv",
|
||||
inputs.venvPath,
|
||||
"--directory",
|
||||
inputs.workingDirectory,
|
||||
"--clear"
|
||||
];
|
||||
if (inputs.noProject) {
|
||||
venvArgs.push("--no-project");
|
||||
}
|
||||
await exec("uv", venvArgs);
|
||||
let venvBinPath = `${inputs.venvPath}${path16.sep}bin`;
|
||||
]);
|
||||
let venvBinPath = `${inputs.venvPath}${path15.sep}bin`;
|
||||
if (process.platform === "win32") {
|
||||
venvBinPath = `${inputs.venvPath}${path16.sep}Scripts`;
|
||||
venvBinPath = `${inputs.venvPath}${path15.sep}Scripts`;
|
||||
}
|
||||
addPath(path16.resolve(venvBinPath));
|
||||
addPath(path15.resolve(venvBinPath));
|
||||
exportVariable("VIRTUAL_ENV", inputs.venvPath);
|
||||
setOutput("venv", inputs.venvPath);
|
||||
}
|
||||
@@ -97421,8 +97125,8 @@ function setCacheDir(inputs) {
|
||||
}
|
||||
function addMatchers(inputs) {
|
||||
if (inputs.addProblemMatchers) {
|
||||
const matchersPath = path16.join(sourceDir, "..", "..", ".github");
|
||||
info(`##[add-matcher]${path16.join(matchersPath, "python.json")}`);
|
||||
const matchersPath = path15.join(sourceDir, "..", "..", ".github");
|
||||
info(`##[add-matcher]${path15.join(matchersPath, "python.json")}`);
|
||||
}
|
||||
}
|
||||
run();
|
||||
|
||||
72
dist/update-known-checksums/index.cjs
generated
vendored
72
dist/update-known-checksums/index.cjs
generated
vendored
@@ -44949,78 +44949,6 @@ var semver = __toESM(require_semver(), 1);
|
||||
|
||||
// src/download/checksum/known-checksums.ts
|
||||
var KNOWN_CHECKSUMS = {
|
||||
"aarch64-apple-darwin-0.11.7": "66e37d91f839e12481d7b932a1eccbfe732560f42c1cfb89faddfa2454534ba8",
|
||||
"aarch64-pc-windows-msvc-0.11.7": "1387e1c94e15196351196b79fce4c1e6f4b30f19cdaaf9ff85fbd6b046018aa2",
|
||||
"aarch64-unknown-linux-gnu-0.11.7": "f2ee1cde9aabb4c6e43bd3f341dadaf42189a54e001e521346dc31547310e284",
|
||||
"aarch64-unknown-linux-musl-0.11.7": "46647dc16cbb7d6700f762fdd7a67d220abe18570914732bc310adc91308d272",
|
||||
"arm-unknown-linux-musleabihf-0.11.7": "238974610607541ccdb3b8f4ad161d4f2a4b018d749dc9d358b0965d9a1ddd0f",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.7": "7aa9ddc128f58c0e667227feb84e0aac3bb65301604c5f6f2ab0f442aaaafd99",
|
||||
"armv7-unknown-linux-musleabihf-0.11.7": "77a237761579125b822d604973a2d4afb62b10a8f066db4f793906deec66b017",
|
||||
"i686-pc-windows-msvc-0.11.7": "04652b46b1be90a753e686b839e109a79af3d032ba96d3616c162dffdbe89e5c",
|
||||
"i686-unknown-linux-gnu-0.11.7": "9c77e5b5f2ad4151c6dc29db5511af549e205dbd6e836e544c80ebfadd7a07ec",
|
||||
"i686-unknown-linux-musl-0.11.7": "b067ce3e92d04425bc11b84dc350f97447d3e8dffafccb7ebebde54a56bfc619",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.7": "6ac23c519d1b06297e1e8753c96911fadee5abab4ca35b8c17da30e3e927d8ac",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.7": "2052356c7388d26dc4dfcf2d44e28b3f800785371f37c5f37d179181fe377659",
|
||||
"riscv64gc-unknown-linux-musl-0.11.7": "219a25e413efb62c8ef3efb3593f1f01d9a3c22d1facf3b9c0d80b7caf3a5e56",
|
||||
"s390x-unknown-linux-gnu-0.11.7": "760152aa9e769712d52b6c65a8d7b86ed3aac25a24892cf5998a522d84942f9e",
|
||||
"x86_64-apple-darwin-0.11.7": "0a4bc8fcde4974ea3560be21772aeecab600a6f43fa6e58169f9fa7b3b71d302",
|
||||
"x86_64-pc-windows-msvc-0.11.7": "fe0c7815acf4fc45f8a5eff58ed3cf7ae2e15c3cf1dceadbd10c816ec1690cc1",
|
||||
"x86_64-unknown-linux-gnu-0.11.7": "6681d691eb7f9c00ac6a3af54252f7ab29ae72f0c8f95bdc7f9d1401c23ea868",
|
||||
"x86_64-unknown-linux-musl-0.11.7": "64ddb5f1087649e3f75aa50d139aa4f36ddde728a5295a141e0fa9697bfb7b0f",
|
||||
"aarch64-apple-darwin-0.11.6": "4b69a4e366ec38cd5f305707de95e12951181c448679a00dce2a78868dfc9f5b",
|
||||
"aarch64-pc-windows-msvc-0.11.6": "bee7b25a7a999f17291810242b47565c3ef2b9205651a0fd02a086f261a7e167",
|
||||
"aarch64-unknown-linux-gnu-0.11.6": "d5be4bf7015ea000378cb3c3aba53ba81a8673458ace9c7fa25a0be005b74802",
|
||||
"aarch64-unknown-linux-musl-0.11.6": "d14ebd6f200047264152daaf97b8bd36c7885a5033e9e8bba8366cb0049c0d00",
|
||||
"arm-unknown-linux-musleabihf-0.11.6": "4410a9489e0a29ce8f86fc8604b75a3dd821e9e52734282cbb413b4e19c5c70a",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.6": "9758d49c200c211ccb2c9cbf43877102031c3457e80b6c3cb9da1e4c00119d2a",
|
||||
"armv7-unknown-linux-musleabihf-0.11.6": "0677423d98cea5011d346d7d4a33a53360b99a51a04df4b45f67d43a8308c831",
|
||||
"i686-pc-windows-msvc-0.11.6": "c5569da150166363389a719553d87f99e0c29e542b2c31bc8bd4aeeb8eb83d99",
|
||||
"i686-unknown-linux-gnu-0.11.6": "b4bf8d78478b573c1816b17ec86da7ade14242cd68ac092c1701c5b4a75dc228",
|
||||
"i686-unknown-linux-musl-0.11.6": "ca31705d93f48313d5ffdc23da165e680c6c5389d9a2cc62b85a1ed495e0331f",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.6": "153397d3d82e45e68fb1f4a40ee9898245ec8ed86fd03fcaacaf6e793316acf7",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.6": "0e3ead8667b51b07b5fb9d114bcd1914a5fe3159e6959a584dc2f89c6724e123",
|
||||
"riscv64gc-unknown-linux-musl-0.11.6": "87d5932bffef3b7b9cba4a2a042f95edf75cd34555fc80cfa98cc5a4426635f9",
|
||||
"s390x-unknown-linux-gnu-0.11.6": "6e3d4338da2db2c63326721f1eb3b4f32d9bde24aeff11208d397e1aeba8678e",
|
||||
"x86_64-apple-darwin-0.11.6": "8e0ed5035eaa28c7c8cd2a46b5b9a05bfff1ef01dbdc090a010eb8fdf193a457",
|
||||
"x86_64-pc-windows-msvc-0.11.6": "99aa60edd017a256dbf378f372d1cff3292dbc6696e0ea01716d9158d773ab77",
|
||||
"x86_64-unknown-linux-gnu-0.11.6": "0c6bab77a67a445dc849ed5e8ee8d3cb333b6e2eba863643ce1e228075f27943",
|
||||
"x86_64-unknown-linux-musl-0.11.6": "aa342a53abe42364093506d7704214d2cdca30b916843e520bc67759a5d20132",
|
||||
"aarch64-apple-darwin-0.11.5": "470993e87503874c7c48861daa308b48a7c367e117235bbecf19368b9fdd35b2",
|
||||
"aarch64-pc-windows-msvc-0.11.5": "9b9b99a985cccf249225aaad76412823e9d9736d605dc2252151172a7f6ab3db",
|
||||
"aarch64-unknown-linux-gnu-0.11.5": "3e9b525d686ae4f3682412bce21536366a5c79616a41055530319c501c883169",
|
||||
"aarch64-unknown-linux-musl-0.11.5": "d73860013061c62d6a89f3370527d4c407214038af331147773ae2fd8f6394c1",
|
||||
"arm-unknown-linux-musleabihf-0.11.5": "dcfb4dc15f46eae90ac6d64e7dfc91d8bc0b16816f53b9f8d58ccc8a1220dbb8",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.5": "818d86386fb57ca4182f39df25dd6160e97300d5ba362bc44e25d8adc904776c",
|
||||
"armv7-unknown-linux-musleabihf-0.11.5": "2cae8baae2c1b42249e656e16f5fe733189b0760ee93995be024f9cc5e72eb19",
|
||||
"i686-pc-windows-msvc-0.11.5": "2057ccf3dba9ed23755df92318a08ab221e9e088385c667292acc09d9cc477c6",
|
||||
"i686-unknown-linux-gnu-0.11.5": "2d340e2e5b3354ee7208bb8f2bbf4d2347d7ffdf2af733c21bee98746e34076d",
|
||||
"i686-unknown-linux-musl-0.11.5": "ffe2bc9e0c4fdc18f69b7c5bc016a03fa17028d42620ab2b024ad5bb22cd3f3d",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.5": "c4dabaaa36a13989ab04389263064ca5c27093eb2e7c851ab62d50b6312d9800",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.5": "6ae3ec3cf1aab72604bc6aa8486faf4b473066422c49d9c42ea8366ff3039de4",
|
||||
"riscv64gc-unknown-linux-musl-0.11.5": "d4686fb144563a40e791fc3f010a91e57fdce9cac7a03b8a14a972c25be4464c",
|
||||
"s390x-unknown-linux-gnu-0.11.5": "1309f1e462462dab2da6a55c37012a228d1c06a55c5b43f8ef901ba1599d9e12",
|
||||
"x86_64-apple-darwin-0.11.5": "b8964bed538143f9016d807e421e28f0237a29589851fc79e8159751ac64779a",
|
||||
"x86_64-pc-windows-msvc-0.11.5": "3fa5b6ea9de9256a035e0471f5ef0bb5d95344659723d6eb063e27c76431515d",
|
||||
"x86_64-unknown-linux-gnu-0.11.5": "0d87793f733f327849ebf9cf51b576cfb08328e22af73061405e4bec96ae84d1",
|
||||
"x86_64-unknown-linux-musl-0.11.5": "ee8a52743ce3979e52872b49c5e58ffa541048cb95132142bff23fe5608d73ea",
|
||||
"aarch64-apple-darwin-0.11.4": "9b9cb6c6f58c3246dbf3351ed4e97c500bc3266f5f237d2fd620b66e1c31dc56",
|
||||
"aarch64-pc-windows-msvc-0.11.4": "708b1c210109e50ff520bcd9b6d29cbd8cee584bb55e84d3d1941bf75ab0893d",
|
||||
"aarch64-unknown-linux-gnu-0.11.4": "f5aa91bba0b98d85a4e5262e2847f9ab2273c754f6374dff62b37ef18c65a2e7",
|
||||
"aarch64-unknown-linux-musl-0.11.4": "a02ec7667d7bb1d33cdb7e1de22f7e4242967e3df7e350bac6212515e3bce8ac",
|
||||
"arm-unknown-linux-musleabihf-0.11.4": "5bbc59d8c3d5fdade88fca47e4c18298e44a367e178e97e11466b22e992edae2",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.4": "9d2299155b65988643a55777c638408a0df8e65f606933d1e44691ada72ff106",
|
||||
"armv7-unknown-linux-musleabihf-0.11.4": "43b1e02f8f4b27fd1d085fb14a246638bb607af32408cb13c5c3b3fb47db027f",
|
||||
"i686-pc-windows-msvc-0.11.4": "661588b3607e6d5bb78551f596772a0d04a930ce128189c90800d07f6fca1998",
|
||||
"i686-unknown-linux-gnu-0.11.4": "4248773a2574c3b697588655d7bf14f97baa744c3e156585230e5c711befa6ff",
|
||||
"i686-unknown-linux-musl-0.11.4": "0323c08c1e7455cdf65c89296eda28bad9051cb09d16ea3ce1d0bf718143449e",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.4": "3ddb764538a5dcb4967d7375fde193ce5391e37ddd4d1242012d04cf3848479f",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.4": "93db93607a824d677c47003ee828936913cfdeb2c871bb34cd79c3ec4481e2b1",
|
||||
"riscv64gc-unknown-linux-musl-0.11.4": "78f0d7f92244ce3d7a7a0df5fab2495450bcb18600b59acf1755e77cafed2300",
|
||||
"s390x-unknown-linux-gnu-0.11.4": "07361e1fb32e870841a27d3d7b0b20c4a81e0cc25eeb8b9115425bfd227d2d05",
|
||||
"x86_64-apple-darwin-0.11.4": "c326edaf3fd492f53d1c58777f3459c0d87bf9dae8d89e80aec4b0da6622dcf3",
|
||||
"x86_64-pc-windows-msvc-0.11.4": "26d84455a40b0272b2ab4785cad298ff2c89cd0765b482e9f85b5a1bd880a863",
|
||||
"x86_64-unknown-linux-gnu-0.11.4": "12f9a192bb32d70470aa22cbd2a193d1323a3f58f6ac5f9e3866aaca760c98c6",
|
||||
"x86_64-unknown-linux-musl-0.11.4": "36ce1c5d8997db9b6a24d0f41646d5509b6d1d8b9448c7325f8248a6ea5d4b00",
|
||||
"aarch64-apple-darwin-0.11.3": "2bc3d0c7bf2bd08325b1e170abac6f7e5b3346e1d4eab3370d17cefec934996f",
|
||||
"aarch64-pc-windows-msvc-0.11.3": "e99c56f9ab5e1e1ddcaea3e2389990c94baf38e0d7cb2148de08baf2d3261d49",
|
||||
"aarch64-unknown-linux-gnu-0.11.3": "711382e3158433f06b11d99afb440f4416359fc3c84558886d8ed8826a921bff",
|
||||
|
||||
151
package-lock.json
generated
151
package-lock.json
generated
@@ -20,7 +20,7 @@
|
||||
"undici": "^7.24.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.4.7",
|
||||
"@biomejs/biome": "^2.4.10",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^25.5.0",
|
||||
"@types/semver": "^7.7.1",
|
||||
@@ -863,11 +863,10 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@biomejs/biome": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.7.tgz",
|
||||
"integrity": "sha512-vXrgcmNGZ4lpdwZSpMf1hWw1aWS6B+SyeSYKTLrNsiUsAdSRN0J4d/7mF3ogJFbIwFFSOL3wT92Zzxia/d5/ng==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.10.tgz",
|
||||
"integrity": "sha512-xxA3AphFQ1geij4JTHXv4EeSTda1IFn22ye9LdyVPoJU19fNVl0uzfEuhsfQ4Yue/0FaLs2/ccVi4UDiE7R30w==",
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"bin": {
|
||||
"biome": "bin/biome"
|
||||
},
|
||||
@@ -879,25 +878,24 @@
|
||||
"url": "https://opencollective.com/biome"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@biomejs/cli-darwin-arm64": "2.4.7",
|
||||
"@biomejs/cli-darwin-x64": "2.4.7",
|
||||
"@biomejs/cli-linux-arm64": "2.4.7",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.4.7",
|
||||
"@biomejs/cli-linux-x64": "2.4.7",
|
||||
"@biomejs/cli-linux-x64-musl": "2.4.7",
|
||||
"@biomejs/cli-win32-arm64": "2.4.7",
|
||||
"@biomejs/cli-win32-x64": "2.4.7"
|
||||
"@biomejs/cli-darwin-arm64": "2.4.10",
|
||||
"@biomejs/cli-darwin-x64": "2.4.10",
|
||||
"@biomejs/cli-linux-arm64": "2.4.10",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.4.10",
|
||||
"@biomejs/cli-linux-x64": "2.4.10",
|
||||
"@biomejs/cli-linux-x64-musl": "2.4.10",
|
||||
"@biomejs/cli-win32-arm64": "2.4.10",
|
||||
"@biomejs/cli-win32-x64": "2.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-darwin-arm64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.7.tgz",
|
||||
"integrity": "sha512-Oo0cF5mHzmvDmTXw8XSjhCia8K6YrZnk7aCS54+/HxyMdZMruMO3nfpDsrlar/EQWe41r1qrwKiCa2QDYHDzWA==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.10.tgz",
|
||||
"integrity": "sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
@@ -907,14 +905,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-darwin-x64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.7.tgz",
|
||||
"integrity": "sha512-I+cOG3sd/7HdFtvDSnF9QQPrWguUH7zrkIMMykM3PtfWU9soTcS2yRb9Myq6MHmzbeCT08D1UmY+BaiMl5CcoQ==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.10.tgz",
|
||||
"integrity": "sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
@@ -924,14 +921,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-arm64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.7.tgz",
|
||||
"integrity": "sha512-om6FugwmibzfP/6ALj5WRDVSND4H2G9X0nkI1HZpp2ySf9lW2j0X68oQSaHEnls6666oy4KDsc5RFjT4m0kV0w==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.10.tgz",
|
||||
"integrity": "sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
@@ -941,14 +937,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.7.tgz",
|
||||
"integrity": "sha512-I2NvM9KPb09jWml93O2/5WMfNR7Lee5Latag1JThDRMURVhPX74p9UDnyTw3Ae6cE1DgXfw7sqQgX7rkvpc0vw==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.10.tgz",
|
||||
"integrity": "sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
@@ -958,14 +953,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-x64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.7.tgz",
|
||||
"integrity": "sha512-bV8/uo2Tj+gumnk4sUdkerWyCPRabaZdv88IpbmDWARQQoA/Q0YaqPz1a+LSEDIL7OfrnPi9Hq1Llz4ZIGyIQQ==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.10.tgz",
|
||||
"integrity": "sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
@@ -975,14 +969,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-x64-musl": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.7.tgz",
|
||||
"integrity": "sha512-00kx4YrBMU8374zd2wHuRV5wseh0rom5HqRND+vDldJPrWwQw+mzd/d8byI9hPx926CG+vWzq6AeiT7Yi5y59g==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.10.tgz",
|
||||
"integrity": "sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
@@ -992,14 +985,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-win32-arm64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.7.tgz",
|
||||
"integrity": "sha512-hOUHBMlFCvDhu3WCq6vaBoG0dp0LkWxSEnEEsxxXvOa9TfT6ZBnbh72A/xBM7CBYB7WgwqboetzFEVDnMxelyw==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.10.tgz",
|
||||
"integrity": "sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
@@ -1009,14 +1001,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-win32-x64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.7.tgz",
|
||||
"integrity": "sha512-qEpGjSkPC3qX4ycbMUthXvi9CkRq7kZpkqMY1OyhmYlYLnANnooDQ7hDerM8+0NJ+DZKVnsIc07h30XOpt7LtQ==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.10.tgz",
|
||||
"integrity": "sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
@@ -6302,74 +6293,74 @@
|
||||
"dev": true
|
||||
},
|
||||
"@biomejs/biome": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.7.tgz",
|
||||
"integrity": "sha512-vXrgcmNGZ4lpdwZSpMf1hWw1aWS6B+SyeSYKTLrNsiUsAdSRN0J4d/7mF3ogJFbIwFFSOL3wT92Zzxia/d5/ng==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.10.tgz",
|
||||
"integrity": "sha512-xxA3AphFQ1geij4JTHXv4EeSTda1IFn22ye9LdyVPoJU19fNVl0uzfEuhsfQ4Yue/0FaLs2/ccVi4UDiE7R30w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@biomejs/cli-darwin-arm64": "2.4.7",
|
||||
"@biomejs/cli-darwin-x64": "2.4.7",
|
||||
"@biomejs/cli-linux-arm64": "2.4.7",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.4.7",
|
||||
"@biomejs/cli-linux-x64": "2.4.7",
|
||||
"@biomejs/cli-linux-x64-musl": "2.4.7",
|
||||
"@biomejs/cli-win32-arm64": "2.4.7",
|
||||
"@biomejs/cli-win32-x64": "2.4.7"
|
||||
"@biomejs/cli-darwin-arm64": "2.4.10",
|
||||
"@biomejs/cli-darwin-x64": "2.4.10",
|
||||
"@biomejs/cli-linux-arm64": "2.4.10",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.4.10",
|
||||
"@biomejs/cli-linux-x64": "2.4.10",
|
||||
"@biomejs/cli-linux-x64-musl": "2.4.10",
|
||||
"@biomejs/cli-win32-arm64": "2.4.10",
|
||||
"@biomejs/cli-win32-x64": "2.4.10"
|
||||
}
|
||||
},
|
||||
"@biomejs/cli-darwin-arm64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.7.tgz",
|
||||
"integrity": "sha512-Oo0cF5mHzmvDmTXw8XSjhCia8K6YrZnk7aCS54+/HxyMdZMruMO3nfpDsrlar/EQWe41r1qrwKiCa2QDYHDzWA==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.10.tgz",
|
||||
"integrity": "sha512-vuzzI1cWqDVzOMIkYyHbKqp+AkQq4K7k+UCXWpkYcY/HDn1UxdsbsfgtVpa40shem8Kax4TLDLlx8kMAecgqiw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-darwin-x64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.7.tgz",
|
||||
"integrity": "sha512-I+cOG3sd/7HdFtvDSnF9QQPrWguUH7zrkIMMykM3PtfWU9soTcS2yRb9Myq6MHmzbeCT08D1UmY+BaiMl5CcoQ==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.10.tgz",
|
||||
"integrity": "sha512-14fzASRo+BPotwp7nWULy2W5xeUyFnTaq1V13Etrrxkrih+ez/2QfgFm5Ehtf5vSjtgx/IJycMMpn5kPd5ZNaA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-arm64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.7.tgz",
|
||||
"integrity": "sha512-om6FugwmibzfP/6ALj5WRDVSND4H2G9X0nkI1HZpp2ySf9lW2j0X68oQSaHEnls6666oy4KDsc5RFjT4m0kV0w==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.10.tgz",
|
||||
"integrity": "sha512-7MH1CMW5uuxQ/s7FLST63qF8B3Hgu2HRdZ7tA1X1+mk+St4JOuIrqdhIBnnyqeyWJNI+Bww7Es5QZ0wIc1Cmkw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-arm64-musl": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.7.tgz",
|
||||
"integrity": "sha512-I2NvM9KPb09jWml93O2/5WMfNR7Lee5Latag1JThDRMURVhPX74p9UDnyTw3Ae6cE1DgXfw7sqQgX7rkvpc0vw==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.10.tgz",
|
||||
"integrity": "sha512-WrJY6UuiSD/Dh+nwK2qOTu8kdMDlLV3dLMmychIghHPAysWFq1/DGC1pVZx8POE3ZkzKR3PUUnVrtZfMfaJjyQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-x64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.7.tgz",
|
||||
"integrity": "sha512-bV8/uo2Tj+gumnk4sUdkerWyCPRabaZdv88IpbmDWARQQoA/Q0YaqPz1a+LSEDIL7OfrnPi9Hq1Llz4ZIGyIQQ==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.10.tgz",
|
||||
"integrity": "sha512-tZLvEEi2u9Xu1zAqRjTcpIDGVtldigVvzug2fTuPG0ME/g8/mXpRPcNgLB22bGn6FvLJpHHnqLnwliOu8xjYrg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-x64-musl": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.7.tgz",
|
||||
"integrity": "sha512-00kx4YrBMU8374zd2wHuRV5wseh0rom5HqRND+vDldJPrWwQw+mzd/d8byI9hPx926CG+vWzq6AeiT7Yi5y59g==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.10.tgz",
|
||||
"integrity": "sha512-kDTi3pI6PBN6CiczsWYOyP2zk0IJI08EWEQyDMQWW221rPaaEz6FvjLhnU07KMzLv8q3qSuoB93ua6inSQ55Tw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-win32-arm64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.7.tgz",
|
||||
"integrity": "sha512-hOUHBMlFCvDhu3WCq6vaBoG0dp0LkWxSEnEEsxxXvOa9TfT6ZBnbh72A/xBM7CBYB7WgwqboetzFEVDnMxelyw==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.10.tgz",
|
||||
"integrity": "sha512-umwQU6qPzH+ISTf/eHyJ/QoQnJs3V9Vpjz2OjZXe9MVBZ7prgGafMy7yYeRGnlmDAn87AKTF3Q6weLoMGpeqdQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-win32-x64": {
|
||||
"version": "2.4.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.7.tgz",
|
||||
"integrity": "sha512-qEpGjSkPC3qX4ycbMUthXvi9CkRq7kZpkqMY1OyhmYlYLnANnooDQ7hDerM8+0NJ+DZKVnsIc07h30XOpt7LtQ==",
|
||||
"version": "2.4.10",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.10.tgz",
|
||||
"integrity": "sha512-aW/JU5GuyH4uxMrNYpoC2kjaHlyJGLgIa3XkhPEZI0uKhZhJZU8BuEyJmvgzSPQNGozBwWjC972RaNdcJ9KyJg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"undici": "^7.24.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.4.7",
|
||||
"@biomejs/biome": "^2.4.10",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^25.5.0",
|
||||
"@types/semver": "^7.7.1",
|
||||
|
||||
@@ -1,149 +1,5 @@
|
||||
// AUTOGENERATED_DO_NOT_EDIT
|
||||
export const KNOWN_CHECKSUMS: { [key: string]: string } = {
|
||||
"aarch64-apple-darwin-0.11.7":
|
||||
"66e37d91f839e12481d7b932a1eccbfe732560f42c1cfb89faddfa2454534ba8",
|
||||
"aarch64-pc-windows-msvc-0.11.7":
|
||||
"1387e1c94e15196351196b79fce4c1e6f4b30f19cdaaf9ff85fbd6b046018aa2",
|
||||
"aarch64-unknown-linux-gnu-0.11.7":
|
||||
"f2ee1cde9aabb4c6e43bd3f341dadaf42189a54e001e521346dc31547310e284",
|
||||
"aarch64-unknown-linux-musl-0.11.7":
|
||||
"46647dc16cbb7d6700f762fdd7a67d220abe18570914732bc310adc91308d272",
|
||||
"arm-unknown-linux-musleabihf-0.11.7":
|
||||
"238974610607541ccdb3b8f4ad161d4f2a4b018d749dc9d358b0965d9a1ddd0f",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.7":
|
||||
"7aa9ddc128f58c0e667227feb84e0aac3bb65301604c5f6f2ab0f442aaaafd99",
|
||||
"armv7-unknown-linux-musleabihf-0.11.7":
|
||||
"77a237761579125b822d604973a2d4afb62b10a8f066db4f793906deec66b017",
|
||||
"i686-pc-windows-msvc-0.11.7":
|
||||
"04652b46b1be90a753e686b839e109a79af3d032ba96d3616c162dffdbe89e5c",
|
||||
"i686-unknown-linux-gnu-0.11.7":
|
||||
"9c77e5b5f2ad4151c6dc29db5511af549e205dbd6e836e544c80ebfadd7a07ec",
|
||||
"i686-unknown-linux-musl-0.11.7":
|
||||
"b067ce3e92d04425bc11b84dc350f97447d3e8dffafccb7ebebde54a56bfc619",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.7":
|
||||
"6ac23c519d1b06297e1e8753c96911fadee5abab4ca35b8c17da30e3e927d8ac",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.7":
|
||||
"2052356c7388d26dc4dfcf2d44e28b3f800785371f37c5f37d179181fe377659",
|
||||
"riscv64gc-unknown-linux-musl-0.11.7":
|
||||
"219a25e413efb62c8ef3efb3593f1f01d9a3c22d1facf3b9c0d80b7caf3a5e56",
|
||||
"s390x-unknown-linux-gnu-0.11.7":
|
||||
"760152aa9e769712d52b6c65a8d7b86ed3aac25a24892cf5998a522d84942f9e",
|
||||
"x86_64-apple-darwin-0.11.7":
|
||||
"0a4bc8fcde4974ea3560be21772aeecab600a6f43fa6e58169f9fa7b3b71d302",
|
||||
"x86_64-pc-windows-msvc-0.11.7":
|
||||
"fe0c7815acf4fc45f8a5eff58ed3cf7ae2e15c3cf1dceadbd10c816ec1690cc1",
|
||||
"x86_64-unknown-linux-gnu-0.11.7":
|
||||
"6681d691eb7f9c00ac6a3af54252f7ab29ae72f0c8f95bdc7f9d1401c23ea868",
|
||||
"x86_64-unknown-linux-musl-0.11.7":
|
||||
"64ddb5f1087649e3f75aa50d139aa4f36ddde728a5295a141e0fa9697bfb7b0f",
|
||||
"aarch64-apple-darwin-0.11.6":
|
||||
"4b69a4e366ec38cd5f305707de95e12951181c448679a00dce2a78868dfc9f5b",
|
||||
"aarch64-pc-windows-msvc-0.11.6":
|
||||
"bee7b25a7a999f17291810242b47565c3ef2b9205651a0fd02a086f261a7e167",
|
||||
"aarch64-unknown-linux-gnu-0.11.6":
|
||||
"d5be4bf7015ea000378cb3c3aba53ba81a8673458ace9c7fa25a0be005b74802",
|
||||
"aarch64-unknown-linux-musl-0.11.6":
|
||||
"d14ebd6f200047264152daaf97b8bd36c7885a5033e9e8bba8366cb0049c0d00",
|
||||
"arm-unknown-linux-musleabihf-0.11.6":
|
||||
"4410a9489e0a29ce8f86fc8604b75a3dd821e9e52734282cbb413b4e19c5c70a",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.6":
|
||||
"9758d49c200c211ccb2c9cbf43877102031c3457e80b6c3cb9da1e4c00119d2a",
|
||||
"armv7-unknown-linux-musleabihf-0.11.6":
|
||||
"0677423d98cea5011d346d7d4a33a53360b99a51a04df4b45f67d43a8308c831",
|
||||
"i686-pc-windows-msvc-0.11.6":
|
||||
"c5569da150166363389a719553d87f99e0c29e542b2c31bc8bd4aeeb8eb83d99",
|
||||
"i686-unknown-linux-gnu-0.11.6":
|
||||
"b4bf8d78478b573c1816b17ec86da7ade14242cd68ac092c1701c5b4a75dc228",
|
||||
"i686-unknown-linux-musl-0.11.6":
|
||||
"ca31705d93f48313d5ffdc23da165e680c6c5389d9a2cc62b85a1ed495e0331f",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.6":
|
||||
"153397d3d82e45e68fb1f4a40ee9898245ec8ed86fd03fcaacaf6e793316acf7",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.6":
|
||||
"0e3ead8667b51b07b5fb9d114bcd1914a5fe3159e6959a584dc2f89c6724e123",
|
||||
"riscv64gc-unknown-linux-musl-0.11.6":
|
||||
"87d5932bffef3b7b9cba4a2a042f95edf75cd34555fc80cfa98cc5a4426635f9",
|
||||
"s390x-unknown-linux-gnu-0.11.6":
|
||||
"6e3d4338da2db2c63326721f1eb3b4f32d9bde24aeff11208d397e1aeba8678e",
|
||||
"x86_64-apple-darwin-0.11.6":
|
||||
"8e0ed5035eaa28c7c8cd2a46b5b9a05bfff1ef01dbdc090a010eb8fdf193a457",
|
||||
"x86_64-pc-windows-msvc-0.11.6":
|
||||
"99aa60edd017a256dbf378f372d1cff3292dbc6696e0ea01716d9158d773ab77",
|
||||
"x86_64-unknown-linux-gnu-0.11.6":
|
||||
"0c6bab77a67a445dc849ed5e8ee8d3cb333b6e2eba863643ce1e228075f27943",
|
||||
"x86_64-unknown-linux-musl-0.11.6":
|
||||
"aa342a53abe42364093506d7704214d2cdca30b916843e520bc67759a5d20132",
|
||||
"aarch64-apple-darwin-0.11.5":
|
||||
"470993e87503874c7c48861daa308b48a7c367e117235bbecf19368b9fdd35b2",
|
||||
"aarch64-pc-windows-msvc-0.11.5":
|
||||
"9b9b99a985cccf249225aaad76412823e9d9736d605dc2252151172a7f6ab3db",
|
||||
"aarch64-unknown-linux-gnu-0.11.5":
|
||||
"3e9b525d686ae4f3682412bce21536366a5c79616a41055530319c501c883169",
|
||||
"aarch64-unknown-linux-musl-0.11.5":
|
||||
"d73860013061c62d6a89f3370527d4c407214038af331147773ae2fd8f6394c1",
|
||||
"arm-unknown-linux-musleabihf-0.11.5":
|
||||
"dcfb4dc15f46eae90ac6d64e7dfc91d8bc0b16816f53b9f8d58ccc8a1220dbb8",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.5":
|
||||
"818d86386fb57ca4182f39df25dd6160e97300d5ba362bc44e25d8adc904776c",
|
||||
"armv7-unknown-linux-musleabihf-0.11.5":
|
||||
"2cae8baae2c1b42249e656e16f5fe733189b0760ee93995be024f9cc5e72eb19",
|
||||
"i686-pc-windows-msvc-0.11.5":
|
||||
"2057ccf3dba9ed23755df92318a08ab221e9e088385c667292acc09d9cc477c6",
|
||||
"i686-unknown-linux-gnu-0.11.5":
|
||||
"2d340e2e5b3354ee7208bb8f2bbf4d2347d7ffdf2af733c21bee98746e34076d",
|
||||
"i686-unknown-linux-musl-0.11.5":
|
||||
"ffe2bc9e0c4fdc18f69b7c5bc016a03fa17028d42620ab2b024ad5bb22cd3f3d",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.5":
|
||||
"c4dabaaa36a13989ab04389263064ca5c27093eb2e7c851ab62d50b6312d9800",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.5":
|
||||
"6ae3ec3cf1aab72604bc6aa8486faf4b473066422c49d9c42ea8366ff3039de4",
|
||||
"riscv64gc-unknown-linux-musl-0.11.5":
|
||||
"d4686fb144563a40e791fc3f010a91e57fdce9cac7a03b8a14a972c25be4464c",
|
||||
"s390x-unknown-linux-gnu-0.11.5":
|
||||
"1309f1e462462dab2da6a55c37012a228d1c06a55c5b43f8ef901ba1599d9e12",
|
||||
"x86_64-apple-darwin-0.11.5":
|
||||
"b8964bed538143f9016d807e421e28f0237a29589851fc79e8159751ac64779a",
|
||||
"x86_64-pc-windows-msvc-0.11.5":
|
||||
"3fa5b6ea9de9256a035e0471f5ef0bb5d95344659723d6eb063e27c76431515d",
|
||||
"x86_64-unknown-linux-gnu-0.11.5":
|
||||
"0d87793f733f327849ebf9cf51b576cfb08328e22af73061405e4bec96ae84d1",
|
||||
"x86_64-unknown-linux-musl-0.11.5":
|
||||
"ee8a52743ce3979e52872b49c5e58ffa541048cb95132142bff23fe5608d73ea",
|
||||
"aarch64-apple-darwin-0.11.4":
|
||||
"9b9cb6c6f58c3246dbf3351ed4e97c500bc3266f5f237d2fd620b66e1c31dc56",
|
||||
"aarch64-pc-windows-msvc-0.11.4":
|
||||
"708b1c210109e50ff520bcd9b6d29cbd8cee584bb55e84d3d1941bf75ab0893d",
|
||||
"aarch64-unknown-linux-gnu-0.11.4":
|
||||
"f5aa91bba0b98d85a4e5262e2847f9ab2273c754f6374dff62b37ef18c65a2e7",
|
||||
"aarch64-unknown-linux-musl-0.11.4":
|
||||
"a02ec7667d7bb1d33cdb7e1de22f7e4242967e3df7e350bac6212515e3bce8ac",
|
||||
"arm-unknown-linux-musleabihf-0.11.4":
|
||||
"5bbc59d8c3d5fdade88fca47e4c18298e44a367e178e97e11466b22e992edae2",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.4":
|
||||
"9d2299155b65988643a55777c638408a0df8e65f606933d1e44691ada72ff106",
|
||||
"armv7-unknown-linux-musleabihf-0.11.4":
|
||||
"43b1e02f8f4b27fd1d085fb14a246638bb607af32408cb13c5c3b3fb47db027f",
|
||||
"i686-pc-windows-msvc-0.11.4":
|
||||
"661588b3607e6d5bb78551f596772a0d04a930ce128189c90800d07f6fca1998",
|
||||
"i686-unknown-linux-gnu-0.11.4":
|
||||
"4248773a2574c3b697588655d7bf14f97baa744c3e156585230e5c711befa6ff",
|
||||
"i686-unknown-linux-musl-0.11.4":
|
||||
"0323c08c1e7455cdf65c89296eda28bad9051cb09d16ea3ce1d0bf718143449e",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.4":
|
||||
"3ddb764538a5dcb4967d7375fde193ce5391e37ddd4d1242012d04cf3848479f",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.4":
|
||||
"93db93607a824d677c47003ee828936913cfdeb2c871bb34cd79c3ec4481e2b1",
|
||||
"riscv64gc-unknown-linux-musl-0.11.4":
|
||||
"78f0d7f92244ce3d7a7a0df5fab2495450bcb18600b59acf1755e77cafed2300",
|
||||
"s390x-unknown-linux-gnu-0.11.4":
|
||||
"07361e1fb32e870841a27d3d7b0b20c4a81e0cc25eeb8b9115425bfd227d2d05",
|
||||
"x86_64-apple-darwin-0.11.4":
|
||||
"c326edaf3fd492f53d1c58777f3459c0d87bf9dae8d89e80aec4b0da6622dcf3",
|
||||
"x86_64-pc-windows-msvc-0.11.4":
|
||||
"26d84455a40b0272b2ab4785cad298ff2c89cd0765b482e9f85b5a1bd880a863",
|
||||
"x86_64-unknown-linux-gnu-0.11.4":
|
||||
"12f9a192bb32d70470aa22cbd2a193d1323a3f58f6ac5f9e3866aaca760c98c6",
|
||||
"x86_64-unknown-linux-musl-0.11.4":
|
||||
"36ce1c5d8997db9b6a24d0f41646d5509b6d1d8b9448c7325f8248a6ea5d4b00",
|
||||
"aarch64-apple-darwin-0.11.3":
|
||||
"2bc3d0c7bf2bd08325b1e170abac6f7e5b3346e1d4eab3370d17cefec934996f",
|
||||
"aarch64-pc-windows-msvc-0.11.3":
|
||||
|
||||
@@ -2,6 +2,8 @@ import { promises as fs } from "node:fs";
|
||||
import * as path from "node:path";
|
||||
import * as core from "@actions/core";
|
||||
import * as tc from "@actions/tool-cache";
|
||||
import * as pep440 from "@renovatebot/pep440";
|
||||
import * as semver from "semver";
|
||||
import {
|
||||
ASTRAL_MIRROR_PREFIX,
|
||||
GITHUB_RELEASES_PREFIX,
|
||||
@@ -10,9 +12,7 @@ import {
|
||||
} from "../utils/constants";
|
||||
import type { Architecture, Platform } from "../utils/platforms";
|
||||
import { validateChecksum } from "./checksum/checksum";
|
||||
import { getArtifact } from "./manifest";
|
||||
|
||||
export { resolveVersion } from "../version/resolve";
|
||||
import { getAllVersions, getArtifact, getLatestVersion } from "./manifest";
|
||||
|
||||
export function tryGetFromToolCache(
|
||||
arch: Architecture,
|
||||
@@ -172,3 +172,102 @@ function resolveChecksum(
|
||||
function getExtension(platform: Platform): string {
|
||||
return platform === "pc-windows-msvc" ? ".zip" : ".tar.gz";
|
||||
}
|
||||
|
||||
export async function resolveVersion(
|
||||
versionInput: string,
|
||||
manifestUrl: string | undefined,
|
||||
resolutionStrategy: "highest" | "lowest" = "highest",
|
||||
): Promise<string> {
|
||||
core.debug(`Resolving version: ${versionInput}`);
|
||||
const isSimpleMinimumVersionSpecifier =
|
||||
versionInput.includes(">") && !versionInput.includes(",");
|
||||
const resolveVersionSpecifierToLatest =
|
||||
isSimpleMinimumVersionSpecifier && resolutionStrategy === "highest";
|
||||
|
||||
if (resolveVersionSpecifierToLatest) {
|
||||
core.info("Found minimum version specifier, using latest version");
|
||||
}
|
||||
|
||||
const version =
|
||||
versionInput === "latest" || resolveVersionSpecifierToLatest
|
||||
? await getLatestVersion(manifestUrl)
|
||||
: versionInput;
|
||||
|
||||
if (tc.isExplicitVersion(version)) {
|
||||
core.debug(`Version ${version} is an explicit version.`);
|
||||
if (
|
||||
resolveVersionSpecifierToLatest &&
|
||||
!pep440.satisfies(version, versionInput)
|
||||
) {
|
||||
throw new Error(`No version found for ${versionInput}`);
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
const availableVersions = await getAvailableVersions(manifestUrl);
|
||||
core.debug(`Available versions: ${availableVersions}`);
|
||||
const resolvedVersion =
|
||||
resolutionStrategy === "lowest"
|
||||
? minSatisfying(availableVersions, version)
|
||||
: maxSatisfying(availableVersions, version);
|
||||
|
||||
if (resolvedVersion === undefined) {
|
||||
throw new Error(`No version found for ${version}`);
|
||||
}
|
||||
|
||||
return resolvedVersion;
|
||||
}
|
||||
|
||||
async function getAvailableVersions(
|
||||
manifestUrl: string | undefined,
|
||||
): Promise<string[]> {
|
||||
if (manifestUrl !== undefined) {
|
||||
core.info(
|
||||
`Getting available versions from manifest-file ${manifestUrl} ...`,
|
||||
);
|
||||
} else {
|
||||
core.info(`Getting available versions from ${VERSIONS_MANIFEST_URL} ...`);
|
||||
}
|
||||
|
||||
return await getAllVersions(manifestUrl);
|
||||
}
|
||||
|
||||
function maxSatisfying(
|
||||
versions: string[],
|
||||
version: string,
|
||||
): string | undefined {
|
||||
const maxSemver = tc.evaluateVersions(versions, version);
|
||||
if (maxSemver !== "") {
|
||||
core.debug(`Found a version that satisfies the semver range: ${maxSemver}`);
|
||||
return maxSemver;
|
||||
}
|
||||
const maxPep440 = pep440.maxSatisfying(versions, version);
|
||||
if (maxPep440 !== null) {
|
||||
core.debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${maxPep440}`,
|
||||
);
|
||||
return maxPep440;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function minSatisfying(
|
||||
versions: string[],
|
||||
version: string,
|
||||
): string | undefined {
|
||||
// For semver, we need to use a different approach since tc.evaluateVersions only returns max
|
||||
// Let's use semver directly for min satisfying
|
||||
const minSemver = semver.minSatisfying(versions, version);
|
||||
if (minSemver !== null) {
|
||||
core.debug(`Found a version that satisfies the semver range: ${minSemver}`);
|
||||
return minSemver;
|
||||
}
|
||||
const minPep440 = pep440.minSatisfying(versions, version);
|
||||
if (minPep440 !== null) {
|
||||
core.debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${minPep440}`,
|
||||
);
|
||||
return minPep440;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@@ -111,9 +111,6 @@ export async function getLatestVersion(
|
||||
export async function getAllVersions(
|
||||
manifestUrl: string = VERSIONS_MANIFEST_URL,
|
||||
): Promise<string[]> {
|
||||
core.info(
|
||||
`Getting available versions from ${manifestSource(manifestUrl)} ...`,
|
||||
);
|
||||
const versions = await fetchManifest(manifestUrl);
|
||||
return versions.map((versionData) => versionData.version);
|
||||
}
|
||||
@@ -168,14 +165,6 @@ export function clearManifestCache(manifestUrl?: string): void {
|
||||
cachedManifestData.delete(manifestUrl);
|
||||
}
|
||||
|
||||
function manifestSource(manifestUrl: string): string {
|
||||
if (manifestUrl === VERSIONS_MANIFEST_URL) {
|
||||
return VERSIONS_MANIFEST_URL;
|
||||
}
|
||||
|
||||
return `manifest-file ${manifestUrl}`;
|
||||
}
|
||||
|
||||
function isManifestVersion(value: unknown): value is ManifestVersion {
|
||||
if (!isRecord(value)) {
|
||||
return false;
|
||||
|
||||
@@ -5,6 +5,7 @@ import * as exec from "@actions/exec";
|
||||
import { restoreCache } from "./cache/restore-cache";
|
||||
import {
|
||||
downloadVersion,
|
||||
resolveVersion,
|
||||
tryGetFromToolCache,
|
||||
} from "./download/download-version";
|
||||
import { STATE_UV_PATH, STATE_UV_VERSION } from "./utils/constants";
|
||||
@@ -15,7 +16,7 @@ import {
|
||||
getPlatform,
|
||||
type Platform,
|
||||
} from "./utils/platforms";
|
||||
import { resolveUvVersion } from "./version/resolve";
|
||||
import { getUvVersionFromFile } from "./version/resolve";
|
||||
|
||||
const sourceDir = __dirname;
|
||||
|
||||
@@ -111,13 +112,7 @@ async function setupUv(
|
||||
platform: Platform,
|
||||
arch: Architecture,
|
||||
): Promise<{ uvDir: string; version: string }> {
|
||||
const resolvedVersion = await resolveUvVersion({
|
||||
manifestFile: inputs.manifestFile,
|
||||
resolutionStrategy: inputs.resolutionStrategy,
|
||||
version: inputs.version,
|
||||
versionFile: inputs.versionFile,
|
||||
workingDirectory: inputs.workingDirectory,
|
||||
});
|
||||
const resolvedVersion = await determineVersion(inputs);
|
||||
const toolCacheResult = tryGetFromToolCache(arch, resolvedVersion);
|
||||
if (toolCacheResult.installedPath) {
|
||||
core.info(`Found uv in tool-cache for ${toolCacheResult.version}`);
|
||||
@@ -142,6 +137,45 @@ async function setupUv(
|
||||
};
|
||||
}
|
||||
|
||||
async function determineVersion(inputs: SetupInputs): Promise<string> {
|
||||
return await resolveVersion(
|
||||
getRequestedVersion(inputs),
|
||||
inputs.manifestFile,
|
||||
inputs.resolutionStrategy,
|
||||
);
|
||||
}
|
||||
|
||||
function getRequestedVersion(inputs: SetupInputs): string {
|
||||
if (inputs.version !== "") {
|
||||
return inputs.version;
|
||||
}
|
||||
|
||||
if (inputs.versionFile !== "") {
|
||||
const versionFromFile = getUvVersionFromFile(inputs.versionFile);
|
||||
if (versionFromFile === undefined) {
|
||||
throw new Error(
|
||||
`Could not determine uv version from file: ${inputs.versionFile}`,
|
||||
);
|
||||
}
|
||||
return versionFromFile;
|
||||
}
|
||||
|
||||
const versionFromUvToml = getUvVersionFromFile(
|
||||
`${inputs.workingDirectory}${path.sep}uv.toml`,
|
||||
);
|
||||
const versionFromPyproject = getUvVersionFromFile(
|
||||
`${inputs.workingDirectory}${path.sep}pyproject.toml`,
|
||||
);
|
||||
|
||||
if (versionFromUvToml === undefined && versionFromPyproject === undefined) {
|
||||
core.info(
|
||||
"Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest.",
|
||||
);
|
||||
}
|
||||
|
||||
return versionFromUvToml || versionFromPyproject || "latest";
|
||||
}
|
||||
|
||||
function addUvToPathAndOutput(cachedPath: string): void {
|
||||
core.setOutput("uv-path", `${cachedPath}${path.sep}uv`);
|
||||
core.saveState(STATE_UV_PATH, `${cachedPath}${path.sep}uv`);
|
||||
@@ -218,17 +252,13 @@ async function activateEnvironment(inputs: SetupInputs): Promise<void> {
|
||||
}
|
||||
|
||||
core.info(`Creating and activating python venv at ${inputs.venvPath}...`);
|
||||
const venvArgs = [
|
||||
await exec.exec("uv", [
|
||||
"venv",
|
||||
inputs.venvPath,
|
||||
"--directory",
|
||||
inputs.workingDirectory,
|
||||
"--clear",
|
||||
];
|
||||
if (inputs.noProject) {
|
||||
venvArgs.push("--no-project");
|
||||
}
|
||||
await exec.exec("uv", venvArgs);
|
||||
]);
|
||||
|
||||
let venvBinPath = `${inputs.venvPath}${path.sep}bin`;
|
||||
if (process.platform === "win32") {
|
||||
|
||||
@@ -8,19 +8,7 @@ export function getConfigValueFromTomlFile(
|
||||
if (!fs.existsSync(filePath) || !filePath.endsWith(".toml")) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
||||
return getConfigValueFromTomlContent(filePath, fileContent, key);
|
||||
}
|
||||
|
||||
export function getConfigValueFromTomlContent(
|
||||
filePath: string,
|
||||
fileContent: string,
|
||||
key: string,
|
||||
): string | undefined {
|
||||
if (!filePath.endsWith(".toml")) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (filePath.endsWith("pyproject.toml")) {
|
||||
const tomlContent = toml.parse(fileContent) as {
|
||||
@@ -28,7 +16,6 @@ export function getConfigValueFromTomlContent(
|
||||
};
|
||||
return tomlContent?.tool?.uv?.[key];
|
||||
}
|
||||
|
||||
const tomlContent = toml.parse(fileContent) as Record<
|
||||
string,
|
||||
string | undefined
|
||||
|
||||
@@ -22,7 +22,6 @@ export interface SetupInputs {
|
||||
versionFile: string;
|
||||
pythonVersion: string;
|
||||
activateEnvironment: boolean;
|
||||
noProject: boolean;
|
||||
venvPath: string;
|
||||
checksum: string;
|
||||
enableCache: boolean;
|
||||
@@ -50,7 +49,6 @@ export function loadInputs(): SetupInputs {
|
||||
const versionFile = getVersionFile(workingDirectory);
|
||||
const pythonVersion = core.getInput("python-version");
|
||||
const activateEnvironment = core.getBooleanInput("activate-environment");
|
||||
const noProject = core.getBooleanInput("no-project");
|
||||
const venvPath = getVenvPath(workingDirectory, activateEnvironment);
|
||||
const checksum = core.getInput("checksum");
|
||||
const enableCache = getEnableCache();
|
||||
@@ -89,7 +87,6 @@ export function loadInputs(): SetupInputs {
|
||||
ignoreEmptyWorkdir,
|
||||
ignoreNothingToCache,
|
||||
manifestFile,
|
||||
noProject,
|
||||
pruneCache,
|
||||
pythonDir,
|
||||
pythonVersion,
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
import fs from "node:fs";
|
||||
import * as core from "@actions/core";
|
||||
import { getConfigValueFromTomlContent } from "../utils/config-file";
|
||||
import {
|
||||
getUvVersionFromParsedPyproject,
|
||||
getUvVersionFromRequirementsText,
|
||||
parsePyprojectContent,
|
||||
} from "./requirements-file";
|
||||
import { normalizeVersionSpecifier } from "./specifier";
|
||||
import { getUvVersionFromToolVersions } from "./tool-versions-file";
|
||||
import type { ParsedVersionFile, VersionFileFormat } from "./types";
|
||||
|
||||
interface VersionFileParser {
|
||||
format: VersionFileFormat;
|
||||
parse(filePath: string): string | undefined;
|
||||
supports(filePath: string): boolean;
|
||||
}
|
||||
|
||||
const VERSION_FILE_PARSERS: VersionFileParser[] = [
|
||||
{
|
||||
format: ".tool-versions",
|
||||
parse: (filePath) => getUvVersionFromToolVersions(filePath),
|
||||
supports: (filePath) => filePath.endsWith(".tool-versions"),
|
||||
},
|
||||
{
|
||||
format: "uv.toml",
|
||||
parse: (filePath) => {
|
||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
||||
return getConfigValueFromTomlContent(
|
||||
filePath,
|
||||
fileContent,
|
||||
"required-version",
|
||||
);
|
||||
},
|
||||
supports: (filePath) => filePath.endsWith("uv.toml"),
|
||||
},
|
||||
{
|
||||
format: "pyproject.toml",
|
||||
parse: (filePath) => {
|
||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
||||
const pyproject = parsePyprojectContent(fileContent);
|
||||
const requiredVersion = pyproject.tool?.uv?.["required-version"];
|
||||
|
||||
if (requiredVersion !== undefined) {
|
||||
return requiredVersion;
|
||||
}
|
||||
|
||||
return getUvVersionFromParsedPyproject(pyproject);
|
||||
},
|
||||
supports: (filePath) => filePath.endsWith("pyproject.toml"),
|
||||
},
|
||||
{
|
||||
format: "requirements",
|
||||
parse: (filePath) => {
|
||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
||||
return getUvVersionFromRequirementsText(fileContent);
|
||||
},
|
||||
supports: (filePath) => filePath.endsWith(".txt"),
|
||||
},
|
||||
];
|
||||
|
||||
export function getParsedVersionFile(
|
||||
filePath: string,
|
||||
): ParsedVersionFile | undefined {
|
||||
core.info(`Trying to find version for uv in: ${filePath}`);
|
||||
|
||||
if (!fs.existsSync(filePath)) {
|
||||
core.info(`Could not find file: ${filePath}`);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const parser = getVersionFileParser(filePath);
|
||||
if (parser === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
try {
|
||||
const specifier = parser.parse(filePath);
|
||||
if (specifier === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const normalizedSpecifier = normalizeVersionSpecifier(specifier);
|
||||
core.info(`Found version for uv in ${filePath}: ${normalizedSpecifier}`);
|
||||
return {
|
||||
format: parser.format,
|
||||
specifier: normalizedSpecifier,
|
||||
};
|
||||
} catch (error) {
|
||||
core.warning(
|
||||
`Error while parsing ${filePath}: ${(error as Error).message}`,
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export function getUvVersionFromFile(filePath: string): string | undefined {
|
||||
return getParsedVersionFile(filePath)?.specifier;
|
||||
}
|
||||
|
||||
function getVersionFileParser(filePath: string): VersionFileParser | undefined {
|
||||
return VERSION_FILE_PARSERS.find((parser) => parser.supports(filePath));
|
||||
}
|
||||
@@ -5,23 +5,31 @@ export function getUvVersionFromRequirementsFile(
|
||||
filePath: string,
|
||||
): string | undefined {
|
||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
||||
|
||||
if (filePath.endsWith(".txt")) {
|
||||
return getUvVersionFromRequirementsText(fileContent);
|
||||
return getUvVersionFromAllDependencies(fileContent.split("\n"));
|
||||
}
|
||||
|
||||
return getUvVersionFromPyprojectContent(fileContent);
|
||||
const dependencies = parsePyprojectDependencies(fileContent);
|
||||
return getUvVersionFromAllDependencies(dependencies);
|
||||
}
|
||||
function getUvVersionFromAllDependencies(
|
||||
allDependencies: string[],
|
||||
): string | undefined {
|
||||
return allDependencies
|
||||
.find((dep: string) => dep.match(/^uv[=<>~!]/))
|
||||
?.match(/^uv([=<>~!]+\S*)/)?.[1]
|
||||
.trim();
|
||||
}
|
||||
|
||||
export function getUvVersionFromRequirementsText(
|
||||
fileContent: string,
|
||||
): string | undefined {
|
||||
return getUvVersionFromAllDependencies(fileContent.split("\n"));
|
||||
interface Pyproject {
|
||||
project?: {
|
||||
dependencies?: string[];
|
||||
"optional-dependencies"?: Record<string, string[]>;
|
||||
};
|
||||
"dependency-groups"?: Record<string, Array<string | object>>;
|
||||
}
|
||||
|
||||
export function getUvVersionFromParsedPyproject(
|
||||
pyproject: Pyproject,
|
||||
): string | undefined {
|
||||
function parsePyprojectDependencies(pyprojectContent: string): string[] {
|
||||
const pyproject: Pyproject = toml.parse(pyprojectContent);
|
||||
const dependencies: string[] = pyproject?.project?.dependencies || [];
|
||||
const optionalDependencies: string[] = Object.values(
|
||||
pyproject?.project?.["optional-dependencies"] || {},
|
||||
@@ -31,39 +39,5 @@ export function getUvVersionFromParsedPyproject(
|
||||
)
|
||||
.flat()
|
||||
.filter((item: string | object) => typeof item === "string");
|
||||
|
||||
return getUvVersionFromAllDependencies(
|
||||
dependencies.concat(optionalDependencies, devDependencies),
|
||||
);
|
||||
}
|
||||
|
||||
export function getUvVersionFromPyprojectContent(
|
||||
pyprojectContent: string,
|
||||
): string | undefined {
|
||||
const pyproject = parsePyprojectContent(pyprojectContent);
|
||||
return getUvVersionFromParsedPyproject(pyproject);
|
||||
}
|
||||
|
||||
export interface Pyproject {
|
||||
project?: {
|
||||
dependencies?: string[];
|
||||
"optional-dependencies"?: Record<string, string[]>;
|
||||
};
|
||||
"dependency-groups"?: Record<string, Array<string | object>>;
|
||||
tool?: {
|
||||
uv?: Record<string, string | undefined>;
|
||||
};
|
||||
}
|
||||
|
||||
export function parsePyprojectContent(pyprojectContent: string): Pyproject {
|
||||
return toml.parse(pyprojectContent) as Pyproject;
|
||||
}
|
||||
|
||||
function getUvVersionFromAllDependencies(
|
||||
allDependencies: string[],
|
||||
): string | undefined {
|
||||
return allDependencies
|
||||
.find((dep: string) => dep.match(/^uv[=<>~!]/))
|
||||
?.match(/^uv([=<>~!]+\S*)/)?.[1]
|
||||
.trim();
|
||||
return dependencies.concat(optionalDependencies, devDependencies);
|
||||
}
|
||||
|
||||
@@ -1,183 +1,34 @@
|
||||
import fs from "node:fs";
|
||||
import * as core from "@actions/core";
|
||||
import * as tc from "@actions/tool-cache";
|
||||
import * as pep440 from "@renovatebot/pep440";
|
||||
import * as semver from "semver";
|
||||
import { getAllVersions, getLatestVersion } from "../download/manifest";
|
||||
import type { ResolutionStrategy } from "../utils/inputs";
|
||||
import {
|
||||
type ParsedVersionSpecifier,
|
||||
parseVersionSpecifier,
|
||||
} from "./specifier";
|
||||
import type { ResolveUvVersionOptions } from "./types";
|
||||
import { resolveVersionRequest } from "./version-request-resolver";
|
||||
import { getConfigValueFromTomlFile } from "../utils/config-file";
|
||||
import { getUvVersionFromRequirementsFile } from "./requirements-file";
|
||||
import { getUvVersionFromToolVersions } from "./tool-versions-file";
|
||||
|
||||
interface ConcreteVersionResolutionContext {
|
||||
manifestUrl?: string;
|
||||
parsedSpecifier: ParsedVersionSpecifier;
|
||||
resolutionStrategy: ResolutionStrategy;
|
||||
}
|
||||
|
||||
interface ConcreteVersionResolver {
|
||||
resolve(
|
||||
context: ConcreteVersionResolutionContext,
|
||||
): Promise<string | undefined>;
|
||||
}
|
||||
|
||||
class ExactVersionResolver implements ConcreteVersionResolver {
|
||||
async resolve(
|
||||
context: ConcreteVersionResolutionContext,
|
||||
): Promise<string | undefined> {
|
||||
if (context.parsedSpecifier.kind !== "exact") {
|
||||
return undefined;
|
||||
export function getUvVersionFromFile(filePath: string): string | undefined {
|
||||
core.info(`Trying to find version for uv in: ${filePath}`);
|
||||
if (!fs.existsSync(filePath)) {
|
||||
core.info(`Could not find file: ${filePath}`);
|
||||
return undefined;
|
||||
}
|
||||
let uvVersion: string | undefined;
|
||||
try {
|
||||
uvVersion = getUvVersionFromToolVersions(filePath);
|
||||
if (uvVersion === undefined) {
|
||||
uvVersion = getConfigValueFromTomlFile(filePath, "required-version");
|
||||
}
|
||||
|
||||
core.debug(
|
||||
`Version ${context.parsedSpecifier.normalized} is an explicit version.`,
|
||||
);
|
||||
return context.parsedSpecifier.normalized;
|
||||
}
|
||||
}
|
||||
|
||||
class LatestVersionResolver implements ConcreteVersionResolver {
|
||||
async resolve(
|
||||
context: ConcreteVersionResolutionContext,
|
||||
): Promise<string | undefined> {
|
||||
const shouldUseLatestVersion =
|
||||
context.parsedSpecifier.kind === "latest" ||
|
||||
(context.parsedSpecifier.kind === "range" &&
|
||||
context.parsedSpecifier.isSimpleMinimumVersionSpecifier &&
|
||||
context.resolutionStrategy === "highest");
|
||||
|
||||
if (!shouldUseLatestVersion) {
|
||||
return undefined;
|
||||
if (uvVersion === undefined) {
|
||||
uvVersion = getUvVersionFromRequirementsFile(filePath);
|
||||
}
|
||||
|
||||
if (
|
||||
context.parsedSpecifier.kind === "range" &&
|
||||
context.parsedSpecifier.isSimpleMinimumVersionSpecifier
|
||||
) {
|
||||
core.info("Found minimum version specifier, using latest version");
|
||||
}
|
||||
|
||||
const latestVersion = await getLatestVersion(context.manifestUrl);
|
||||
|
||||
if (
|
||||
context.parsedSpecifier.kind === "range" &&
|
||||
context.parsedSpecifier.isSimpleMinimumVersionSpecifier &&
|
||||
!pep440.satisfies(latestVersion, context.parsedSpecifier.raw)
|
||||
) {
|
||||
throw new Error(`No version found for ${context.parsedSpecifier.raw}`);
|
||||
}
|
||||
|
||||
return latestVersion;
|
||||
} catch (err) {
|
||||
const message = (err as Error).message;
|
||||
core.warning(`Error while parsing ${filePath}: ${message}`);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
class RangeVersionResolver implements ConcreteVersionResolver {
|
||||
async resolve(
|
||||
context: ConcreteVersionResolutionContext,
|
||||
): Promise<string | undefined> {
|
||||
if (context.parsedSpecifier.kind !== "range") {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const availableVersions = await getAllVersions(context.manifestUrl);
|
||||
core.debug(`Available versions: ${availableVersions}`);
|
||||
|
||||
const resolvedVersion =
|
||||
context.resolutionStrategy === "lowest"
|
||||
? minSatisfying(availableVersions, context.parsedSpecifier.normalized)
|
||||
: maxSatisfying(availableVersions, context.parsedSpecifier.normalized);
|
||||
|
||||
if (resolvedVersion === undefined) {
|
||||
throw new Error(`No version found for ${context.parsedSpecifier.raw}`);
|
||||
}
|
||||
|
||||
return resolvedVersion;
|
||||
}
|
||||
}
|
||||
|
||||
const CONCRETE_VERSION_RESOLVERS: ConcreteVersionResolver[] = [
|
||||
new ExactVersionResolver(),
|
||||
new LatestVersionResolver(),
|
||||
new RangeVersionResolver(),
|
||||
];
|
||||
|
||||
export async function resolveUvVersion(
|
||||
options: ResolveUvVersionOptions,
|
||||
): Promise<string> {
|
||||
const request = resolveVersionRequest(options);
|
||||
const resolutionStrategy = options.resolutionStrategy ?? "highest";
|
||||
const version = await resolveVersion(
|
||||
request.specifier,
|
||||
options.manifestFile,
|
||||
resolutionStrategy,
|
||||
);
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
export async function resolveVersion(
|
||||
versionInput: string,
|
||||
manifestUrl: string | undefined,
|
||||
resolutionStrategy: ResolutionStrategy = "highest",
|
||||
): Promise<string> {
|
||||
core.debug(`Resolving version: ${versionInput}`);
|
||||
|
||||
const context: ConcreteVersionResolutionContext = {
|
||||
manifestUrl,
|
||||
parsedSpecifier: parseVersionSpecifier(versionInput),
|
||||
resolutionStrategy,
|
||||
};
|
||||
|
||||
for (const resolver of CONCRETE_VERSION_RESOLVERS) {
|
||||
const version = await resolver.resolve(context);
|
||||
if (version !== undefined) {
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(`No version found for ${versionInput}`);
|
||||
}
|
||||
|
||||
function maxSatisfying(
|
||||
versions: string[],
|
||||
version: string,
|
||||
): string | undefined {
|
||||
const maxSemver = tc.evaluateVersions(versions, version);
|
||||
if (maxSemver !== "") {
|
||||
core.debug(`Found a version that satisfies the semver range: ${maxSemver}`);
|
||||
return maxSemver;
|
||||
}
|
||||
|
||||
const maxPep440 = pep440.maxSatisfying(versions, version);
|
||||
if (maxPep440 !== null) {
|
||||
core.debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${maxPep440}`,
|
||||
);
|
||||
return maxPep440;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function minSatisfying(
|
||||
versions: string[],
|
||||
version: string,
|
||||
): string | undefined {
|
||||
const minSemver = semver.minSatisfying(versions, version);
|
||||
if (minSemver !== null) {
|
||||
core.debug(`Found a version that satisfies the semver range: ${minSemver}`);
|
||||
return minSemver;
|
||||
}
|
||||
|
||||
const minPep440 = pep440.minSatisfying(versions, version);
|
||||
if (minPep440 !== null) {
|
||||
core.debug(
|
||||
`Found a version that satisfies the pep440 specifier: ${minPep440}`,
|
||||
);
|
||||
return minPep440;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
if (uvVersion?.startsWith("==")) {
|
||||
uvVersion = uvVersion.slice(2);
|
||||
}
|
||||
if (uvVersion !== undefined) {
|
||||
core.info(`Found version for uv in ${filePath}: ${uvVersion}`);
|
||||
}
|
||||
return uvVersion;
|
||||
}
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
import * as tc from "@actions/tool-cache";
|
||||
|
||||
export type ParsedVersionSpecifier =
|
||||
| {
|
||||
kind: "exact";
|
||||
normalized: string;
|
||||
raw: string;
|
||||
}
|
||||
| {
|
||||
kind: "latest";
|
||||
normalized: "latest";
|
||||
raw: string;
|
||||
}
|
||||
| {
|
||||
isSimpleMinimumVersionSpecifier: boolean;
|
||||
kind: "range";
|
||||
normalized: string;
|
||||
raw: string;
|
||||
};
|
||||
|
||||
export function normalizeVersionSpecifier(specifier: string): string {
|
||||
const trimmedSpecifier = specifier.trim();
|
||||
|
||||
if (trimmedSpecifier.startsWith("==")) {
|
||||
return trimmedSpecifier.slice(2);
|
||||
}
|
||||
|
||||
return trimmedSpecifier;
|
||||
}
|
||||
|
||||
export function parseVersionSpecifier(
|
||||
specifier: string,
|
||||
): ParsedVersionSpecifier {
|
||||
const raw = specifier.trim();
|
||||
const normalized = normalizeVersionSpecifier(raw);
|
||||
|
||||
if (normalized === "latest") {
|
||||
return {
|
||||
kind: "latest",
|
||||
normalized: "latest",
|
||||
raw,
|
||||
};
|
||||
}
|
||||
|
||||
if (tc.isExplicitVersion(normalized)) {
|
||||
return {
|
||||
kind: "exact",
|
||||
normalized,
|
||||
raw,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
isSimpleMinimumVersionSpecifier: raw.includes(">") && !raw.includes(","),
|
||||
kind: "range",
|
||||
normalized,
|
||||
raw,
|
||||
};
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
import type { ResolutionStrategy } from "../utils/inputs";
|
||||
|
||||
export type VersionSource =
|
||||
| "input"
|
||||
| "version-file"
|
||||
| "uv.toml"
|
||||
| "pyproject.toml"
|
||||
| "default";
|
||||
|
||||
export type VersionFileFormat =
|
||||
| ".tool-versions"
|
||||
| "pyproject.toml"
|
||||
| "requirements"
|
||||
| "uv.toml";
|
||||
|
||||
export interface ParsedVersionFile {
|
||||
format: VersionFileFormat;
|
||||
specifier: string;
|
||||
}
|
||||
|
||||
export interface ResolveUvVersionOptions {
|
||||
manifestFile?: string;
|
||||
resolutionStrategy?: ResolutionStrategy;
|
||||
version?: string;
|
||||
versionFile?: string;
|
||||
workingDirectory: string;
|
||||
}
|
||||
|
||||
export interface VersionRequest {
|
||||
format?: VersionFileFormat;
|
||||
source: VersionSource;
|
||||
sourcePath?: string;
|
||||
specifier: string;
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
import * as path from "node:path";
|
||||
import * as core from "@actions/core";
|
||||
import { getParsedVersionFile } from "./file-parser";
|
||||
import { normalizeVersionSpecifier } from "./specifier";
|
||||
import type {
|
||||
ParsedVersionFile,
|
||||
ResolveUvVersionOptions,
|
||||
VersionRequest,
|
||||
} from "./types";
|
||||
|
||||
export interface VersionRequestResolver {
|
||||
resolve(context: VersionRequestContext): VersionRequest | undefined;
|
||||
}
|
||||
|
||||
export class VersionRequestContext {
|
||||
readonly version: string | undefined;
|
||||
readonly versionFile: string | undefined;
|
||||
readonly workingDirectory: string;
|
||||
|
||||
private readonly parsedFiles = new Map<
|
||||
string,
|
||||
ParsedVersionFile | undefined
|
||||
>();
|
||||
|
||||
constructor(
|
||||
version: string | undefined,
|
||||
versionFile: string | undefined,
|
||||
workingDirectory: string,
|
||||
) {
|
||||
this.version = version;
|
||||
this.versionFile = versionFile;
|
||||
this.workingDirectory = workingDirectory;
|
||||
}
|
||||
|
||||
getVersionFile(filePath: string): ParsedVersionFile | undefined {
|
||||
const cachedResult = this.parsedFiles.get(filePath);
|
||||
if (cachedResult !== undefined || this.parsedFiles.has(filePath)) {
|
||||
return cachedResult;
|
||||
}
|
||||
|
||||
const result = getParsedVersionFile(filePath);
|
||||
this.parsedFiles.set(filePath, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
getWorkspaceCandidates(): Array<{
|
||||
source: "pyproject.toml" | "uv.toml";
|
||||
sourcePath: string;
|
||||
}> {
|
||||
return [
|
||||
{
|
||||
source: "uv.toml",
|
||||
sourcePath: path.join(this.workingDirectory, "uv.toml"),
|
||||
},
|
||||
{
|
||||
source: "pyproject.toml",
|
||||
sourcePath: path.join(this.workingDirectory, "pyproject.toml"),
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
export class ExplicitInputVersionResolver implements VersionRequestResolver {
|
||||
resolve(context: VersionRequestContext): VersionRequest | undefined {
|
||||
if (context.version === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return {
|
||||
source: "input",
|
||||
specifier: normalizeVersionSpecifier(context.version),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class VersionFileVersionResolver implements VersionRequestResolver {
|
||||
resolve(context: VersionRequestContext): VersionRequest | undefined {
|
||||
if (context.versionFile === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const versionFile = context.getVersionFile(context.versionFile);
|
||||
if (versionFile === undefined) {
|
||||
throw new Error(
|
||||
`Could not determine uv version from file: ${context.versionFile}`,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
format: versionFile.format,
|
||||
source: "version-file",
|
||||
sourcePath: context.versionFile,
|
||||
specifier: versionFile.specifier,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class WorkspaceVersionResolver implements VersionRequestResolver {
|
||||
resolve(context: VersionRequestContext): VersionRequest | undefined {
|
||||
for (const candidate of context.getWorkspaceCandidates()) {
|
||||
const versionFile = context.getVersionFile(candidate.sourcePath);
|
||||
if (versionFile === undefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return {
|
||||
format: versionFile.format,
|
||||
source: candidate.source,
|
||||
sourcePath: candidate.sourcePath,
|
||||
specifier: versionFile.specifier,
|
||||
};
|
||||
}
|
||||
|
||||
core.info(
|
||||
"Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest.",
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export class LatestVersionResolver implements VersionRequestResolver {
|
||||
resolve(): VersionRequest {
|
||||
return {
|
||||
source: "default",
|
||||
specifier: "latest",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const VERSION_REQUEST_RESOLVERS: VersionRequestResolver[] = [
|
||||
new ExplicitInputVersionResolver(),
|
||||
new VersionFileVersionResolver(),
|
||||
new WorkspaceVersionResolver(),
|
||||
new LatestVersionResolver(),
|
||||
];
|
||||
|
||||
export function resolveVersionRequest(
|
||||
options: ResolveUvVersionOptions,
|
||||
): VersionRequest {
|
||||
const context = new VersionRequestContext(
|
||||
emptyToUndefined(options.version),
|
||||
emptyToUndefined(options.versionFile),
|
||||
options.workingDirectory,
|
||||
);
|
||||
|
||||
for (const resolver of VERSION_REQUEST_RESOLVERS) {
|
||||
const request = resolver.resolve(context);
|
||||
if (request !== undefined) {
|
||||
return request;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error("Could not resolve a requested uv version.");
|
||||
}
|
||||
|
||||
function emptyToUndefined(value: string | undefined): string | undefined {
|
||||
return value === undefined || value === "" ? undefined : value;
|
||||
}
|
||||
Reference in New Issue
Block a user