mirror of
https://github.com/astral-sh/setup-uv.git
synced 2026-11-05 01:35:32 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae62891fec | ||
|
|
f9cdb47d48 | ||
|
|
4f6036f71c | ||
|
|
8d6402c9b7 | ||
|
|
46f427bd47 | ||
|
|
8ed89c5114 | ||
|
|
8473c7fea4 | ||
|
|
18d451d679 | ||
|
|
f45168497b | ||
|
|
b68407c192 | ||
|
|
696e4e1bf2 | ||
|
|
7cd5f7fd2e | ||
|
|
d64009a7c5 | ||
|
|
7e7e21ddc3 | ||
|
|
094aa226ed | ||
|
|
d269b9917d | ||
|
|
c6081965dd |
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: dependabot-pr-rollup
|
||||
description: Find open Dependabot PRs for the current GitHub repo, compare each PR head to its base branch, replay only the net dependency changes in a fresh worktree and branch, run npm validation, and optionally commit, push, and open a PR. Use when you want to batch or manually replicate active Dependabot updates.
|
||||
description: Find open Dependabot PRs for the current GitHub repo, compare each PR head to its base branch, replay only the net dependency changes in a fresh worktree and branch, run npm validation, then commit, push, and open a pull request labeled dependencies. Use when you want to batch or manually replicate active Dependabot updates.
|
||||
license: MIT
|
||||
compatibility: Requires git, git worktree, gh CLI auth, npm, and a GitHub repo with an origin remote.
|
||||
---
|
||||
@@ -13,7 +13,7 @@ Use this skill when the user wants to:
|
||||
- find all open Dependabot PRs in the current repo
|
||||
- reproduce their net effect in one local branch
|
||||
- validate the result with the repo's standard npm checks
|
||||
- optionally commit, push, and open a PR
|
||||
- commit and push the validated changes, then open a PR labeled `dependencies`
|
||||
|
||||
## Workflow
|
||||
|
||||
@@ -28,7 +28,8 @@ Use this skill when the user wants to:
|
||||
- Use `npm install ... --ignore-scripts` for direct dependency changes so `package-lock.json` stays in sync.
|
||||
- When updating `@biomejs/biome`, also update the Biome schema URL version in `biome.json` to match the installed Biome version.
|
||||
7. Run `npm run all`.
|
||||
8. If requested, commit the changed source, lockfile, and generated artifacts, then push and open a PR.
|
||||
8. Commit the changed source, lockfile, and generated artifacts, then push the branch.
|
||||
9. Always open a pull request for the rollup and add the `dependencies` label to it. Pass `--label dependencies` to `gh pr create`, or add the label immediately afterward with `gh pr edit --add-label dependencies`.
|
||||
|
||||
## Repo-specific notes
|
||||
|
||||
@@ -46,4 +47,5 @@ Always report:
|
||||
- new worktree path
|
||||
- files changed
|
||||
- `npm run all` result
|
||||
- if applicable, commit SHA and PR URL
|
||||
- commit SHA and PR URL
|
||||
- confirmation that the PR has the `dependencies` label
|
||||
|
||||
@@ -41,13 +41,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
|
||||
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
source-root: src
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
|
||||
uses: github/codeql-action/autobuild@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -73,4 +73,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
|
||||
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: 🚀 Run Release Drafter
|
||||
uses: release-drafter/release-drafter@4d75298e00d9e34c483e5ff8c68d0ea1c1940c1e # v7.5.1
|
||||
uses: release-drafter/release-drafter@34d80673e067bdc0c24568d3af899c216adcfaa9 # v7.7.0
|
||||
with:
|
||||
commitish: ${{ github.sha }}
|
||||
env:
|
||||
|
||||
+93
-47
@@ -21,13 +21,13 @@ jobs:
|
||||
permissions:
|
||||
security-events: write # for zizmor
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Actionlint
|
||||
uses: eifinger/actionlint-action@1fc89649be682d16ec5cf65ea16e269eb88d3982 # v1.10.2
|
||||
- name: Run zizmor
|
||||
uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7
|
||||
uses: zizmorcore/zizmor-action@3dc1ecc9bcb9e94e9b2c709687979e1298497054 # v0.6.2
|
||||
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
test-uv-no-modify-path:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install with UV_NO_MODIFY_PATH set
|
||||
@@ -125,7 +125,7 @@ jobs:
|
||||
expected-version: "0.1.0"
|
||||
resolution-strategy: "lowest"
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install version ${{ matrix.input.version-input }} with strategy ${{ matrix.input.resolution-strategy || 'highest' }}
|
||||
@@ -154,7 +154,7 @@ jobs:
|
||||
matrix:
|
||||
version-input: ["latest", ">=0.8"]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install version ${{ matrix.version-input }}
|
||||
@@ -194,7 +194,7 @@ jobs:
|
||||
- working-directory: "__tests__/fixtures/uv-toml-project"
|
||||
expected-version: "0.5.15"
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install version from ${{ matrix.input.working-directory }}
|
||||
@@ -220,7 +220,7 @@ jobs:
|
||||
- version-file: "__tests__/fixtures/.tool-versions"
|
||||
expected-version: "0.5.15"
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install version from ${{ matrix.input.version-file }}
|
||||
@@ -234,10 +234,35 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test-tool-versions-python-version:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install versions from .tool-versions
|
||||
id: setup-uv
|
||||
uses: ./
|
||||
with:
|
||||
version-file: "__tests__/fixtures/.tool-versions"
|
||||
- name: Verify Python version from .tool-versions
|
||||
run: |
|
||||
if [ "$UV_PYTHON" != "3.13.1t" ]; then
|
||||
echo "Wrong UV_PYTHON: $UV_PYTHON"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$PYTHON_VERSION" != "3.13.1t" ]; then
|
||||
echo "Wrong python-version output: $PYTHON_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
shell: bash
|
||||
env:
|
||||
PYTHON_VERSION: ${{ steps.setup-uv.outputs.python-version }}
|
||||
|
||||
test-malformed-pyproject-file-fallback:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install using malformed pyproject.toml
|
||||
@@ -257,7 +282,7 @@ jobs:
|
||||
- os: macos-latest
|
||||
checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218"
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Checksum matches expected
|
||||
@@ -271,7 +296,7 @@ jobs:
|
||||
test-with-explicit-token:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install default version
|
||||
@@ -284,7 +309,7 @@ jobs:
|
||||
test-uvx:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install default version
|
||||
@@ -297,7 +322,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install default version
|
||||
@@ -311,7 +336,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -343,7 +368,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -382,7 +407,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -433,7 +458,7 @@ jobs:
|
||||
test-activate-environment-no-project:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Create incompatible pyproject.toml
|
||||
@@ -477,7 +502,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
container: debian:unstable
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -489,9 +514,9 @@ jobs:
|
||||
|
||||
test-musl:
|
||||
runs-on: ubuntu-latest
|
||||
container: alpine
|
||||
container: alpine@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b # 3.24.1
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -530,7 +555,7 @@ jobs:
|
||||
- os: windows-2025
|
||||
expected-os: "windows-2025"
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup uv
|
||||
@@ -556,7 +581,7 @@ jobs:
|
||||
enable-cache: ["true", "false", "auto"]
|
||||
os: ["ubuntu-latest", "windows-latest"]
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup with cache
|
||||
@@ -575,7 +600,7 @@ jobs:
|
||||
os: ["ubuntu-latest", "windows-latest"]
|
||||
needs: test-setup-cache
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Restore with cache
|
||||
@@ -609,7 +634,7 @@ jobs:
|
||||
test-setup-cache-requirements-txt:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup with cache
|
||||
@@ -625,7 +650,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-setup-cache-requirements-txt
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Restore with cache
|
||||
@@ -649,7 +674,7 @@ jobs:
|
||||
test-setup-cache-dependency-glob:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup with cache
|
||||
@@ -666,7 +691,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-setup-cache-dependency-glob
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Change pyproject.toml
|
||||
@@ -694,7 +719,7 @@ jobs:
|
||||
test-setup-cache-save-cache-false:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup with cache
|
||||
@@ -710,7 +735,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-setup-cache-save-cache-false
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Restore with cache
|
||||
@@ -730,7 +755,7 @@ jobs:
|
||||
test-setup-cache-restore-cache-false:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup with cache
|
||||
@@ -745,7 +770,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-setup-cache-restore-cache-false
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Restore with cache
|
||||
@@ -773,7 +798,7 @@ jobs:
|
||||
expected-cache-dir: "D:\\a\\_temp\\setup-uv-cache"
|
||||
runs-on: ${{ matrix.inputs.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup with cache
|
||||
@@ -791,7 +816,7 @@ jobs:
|
||||
test-cache-local-cache-disabled:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup without cache
|
||||
@@ -810,7 +835,7 @@ jobs:
|
||||
test-cache-local-cache-disabled-but-explicit-path:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup without cache
|
||||
@@ -830,7 +855,7 @@ jobs:
|
||||
test-no-python-version:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Fake pyproject.toml at root
|
||||
@@ -845,7 +870,7 @@ jobs:
|
||||
test-custom-manifest-file:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install from custom manifest file
|
||||
@@ -864,7 +889,7 @@ jobs:
|
||||
test-download-from-astral-mirror-false:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install with download-from-astral-mirror disabled
|
||||
@@ -878,7 +903,7 @@ jobs:
|
||||
test-absolute-path:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Create requirements.txt
|
||||
@@ -898,7 +923,7 @@ jobs:
|
||||
test-relative-path:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: mkdir
|
||||
@@ -922,7 +947,7 @@ jobs:
|
||||
test-cache-prune-force:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup uv
|
||||
@@ -939,7 +964,7 @@ jobs:
|
||||
test-cache-dir-from-file:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Verify uv cache dir is not populated
|
||||
@@ -966,7 +991,7 @@ jobs:
|
||||
env:
|
||||
UV_PYTHON_INSTALL_DIR: /tmp/missing-uv-python
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup uv with cache and python cache enabled
|
||||
@@ -987,7 +1012,7 @@ jobs:
|
||||
test-cache-python-installs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Verify Python install dir is not populated
|
||||
@@ -1014,7 +1039,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test-cache-python-installs
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Verify Python install dir does not exist
|
||||
@@ -1056,7 +1081,7 @@ jobs:
|
||||
expected-python-dir: "D:\\a\\_temp\\uv-python-dir"
|
||||
runs-on: ${{ matrix.inputs.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install latest version
|
||||
@@ -1075,7 +1100,7 @@ jobs:
|
||||
test-act:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install act
|
||||
@@ -1087,10 +1112,29 @@ jobs:
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
|
||||
test-workflow-run:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install act
|
||||
run: gh extension install https://github.com/nektos/gh-act
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
- name: Verify workflow_run disables automatic caching with act
|
||||
run: |
|
||||
gh act workflow_run \
|
||||
-W __tests__/workflows/workflow-run.yml \
|
||||
-P ubuntu-latest=catthehacker/ubuntu:act-latest \
|
||||
--env RUNNER_ENVIRONMENT=github-hosted
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
|
||||
validate-typings:
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Validate typings
|
||||
@@ -1107,6 +1151,7 @@ jobs:
|
||||
- test-from-working-directory-version
|
||||
- test-malformed-pyproject-file-fallback
|
||||
- test-version-file-version
|
||||
- test-tool-versions-python-version
|
||||
- test-checksum
|
||||
- test-with-explicit-token
|
||||
- test-uvx
|
||||
@@ -1143,6 +1188,7 @@ jobs:
|
||||
- test-restore-python-installs
|
||||
- test-python-install-dir
|
||||
- test-act
|
||||
- test-workflow-run
|
||||
- validate-typings
|
||||
if: always()
|
||||
steps:
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: true
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: true
|
||||
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||
|
||||
@@ -26,7 +26,7 @@ Set up your GitHub Actions workflow with a specific version of [uv](https://docs
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
```
|
||||
|
||||
If you do not specify a version, this action will look for a [required-version](https://docs.astral.sh/uv/reference/settings/#required-version)
|
||||
@@ -42,18 +42,18 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
||||
|
||||
```yaml
|
||||
- name: Install uv with all available options
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
# The version of uv to install (default: searches for version in config files, then latest)
|
||||
# The version of uv to install, e.g., "0.5.0", "latest", or "latest-known" (default: searches for version in config files, then latest)
|
||||
version: ""
|
||||
|
||||
# Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock (default: searches uv.toml then pyproject.toml)
|
||||
# Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock. A selected .tool-versions file can also provide the Python version (default: searches uv.toml then pyproject.toml)
|
||||
version-file: ""
|
||||
|
||||
# Resolution strategy when resolving version ranges: 'highest' or 'lowest'
|
||||
resolution-strategy: "highest"
|
||||
|
||||
# The version of Python to set UV_PYTHON to
|
||||
# The version of Python to set UV_PYTHON to (overrides the Python version from .tool-versions)
|
||||
python-version: ""
|
||||
|
||||
# Use uv venv to activate a venv ready to be used by later steps
|
||||
@@ -74,7 +74,7 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
||||
# Used when downloading uv from GitHub releases
|
||||
github-token: ${{ github.token }}
|
||||
|
||||
# Enable uploading of the uv cache: true, false, or auto (enabled on GitHub-hosted runners, disabled on self-hosted runners)
|
||||
# Enable the GitHub Actions cache for uv: true, false, or auto (enabled on GitHub-hosted runners except for release, tag push, pull_request_target, and workflow_run events; disabled on self-hosted runners)
|
||||
enable-cache: "auto"
|
||||
|
||||
# Glob pattern to match files relative to the repository root to control the cache
|
||||
@@ -144,11 +144,30 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
||||
|
||||
You can use the input `python-version` to set the environment variable `UV_PYTHON` for the rest of your workflow
|
||||
|
||||
This will override any python version specifications in `pyproject.toml` and `.python-version`
|
||||
This will override any python version specifications in `pyproject.toml`, `.python-version`, and
|
||||
an explicitly selected `.tool-versions` file.
|
||||
|
||||
When `version-file` points to `.tool-versions`, its `python` entry is used if neither
|
||||
`python-version` nor `UV_PYTHON` is set:
|
||||
|
||||
```text
|
||||
uv 0.12.3
|
||||
python 3.13
|
||||
```
|
||||
|
||||
```yaml
|
||||
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version-file: ".tool-versions"
|
||||
```
|
||||
|
||||
Only a single Python version is supported. Filesystem paths are not supported for uv or Python.
|
||||
Multiple Python fallback versions and the asdf `ref:`, `path:`, and `system` forms are ignored with
|
||||
a warning.
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv and set the python version to 3.13t
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
python-version: 3.13t
|
||||
- run: uv pip install --python=3.13t pip
|
||||
@@ -166,7 +185,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- name: Install the latest version of uv and set the python version
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Test with python ${{ matrix.python-version }}
|
||||
@@ -183,7 +202,7 @@ It also controls where [the venv gets created](#activate-environment), unless `v
|
||||
|
||||
```yaml
|
||||
- name: Install uv based on the config files in the working-directory
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
working-directory: my/subproject/dir
|
||||
```
|
||||
@@ -225,7 +244,7 @@ For example:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@main
|
||||
- name: Install the latest version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
- name: Test
|
||||
@@ -237,7 +256,7 @@ To install a specific version of Python, use
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
- name: Install Python 3.12
|
||||
@@ -256,7 +275,7 @@ output:
|
||||
uses: actions/checkout@main
|
||||
- name: Install the default version of uv
|
||||
id: setup-uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
- name: Print the installed version
|
||||
run: echo "Installed uv version is ${{ steps.setup-uv.outputs.uv-version }}"
|
||||
```
|
||||
|
||||
@@ -40,9 +40,9 @@ it.each<KnownVersionFixture>([
|
||||
known: false,
|
||||
version: "0.0.15",
|
||||
},
|
||||
])("isknownVersion should return $known for version $version", ({
|
||||
version,
|
||||
known,
|
||||
}) => {
|
||||
expect(isknownVersion(version)).toBe(known);
|
||||
});
|
||||
])(
|
||||
"isknownVersion should return $known for version $version",
|
||||
({ version, known }) => {
|
||||
expect(isknownVersion(version)).toBe(known);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import { expect, it, jest } from "@jest/globals";
|
||||
|
||||
jest.unstable_mockModule(
|
||||
"../../../src/download/checksum/known-checksums",
|
||||
() => ({
|
||||
KNOWN_CHECKSUMS: {
|
||||
"aarch64-apple-darwin-1.9.0": "checksum",
|
||||
"x86_64-unknown-linux-gnu-1.8.0": "checksum",
|
||||
"x86_64-unknown-linux-gnu-1.10.0": "checksum",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
const { getLatestKnownVersion } = await import(
|
||||
"../../../src/download/checksum/known-version"
|
||||
);
|
||||
|
||||
it("returns the highest version with a built-in checksum", () => {
|
||||
expect(getLatestKnownVersion()).toBe("1.10.0");
|
||||
});
|
||||
@@ -55,6 +55,12 @@ jest.unstable_mockModule("../../src/download/checksum/checksum", () => ({
|
||||
validateChecksum: mockValidateChecksum,
|
||||
}));
|
||||
|
||||
const mockGetLatestKnownVersion = jest.fn(() => "0.9.25");
|
||||
|
||||
jest.unstable_mockModule("../../src/download/checksum/known-version", () => ({
|
||||
getLatestKnownVersion: mockGetLatestKnownVersion,
|
||||
}));
|
||||
|
||||
const { downloadVersion, resolveVersion, rewriteToMirror } = await import(
|
||||
"../../src/download/download-version"
|
||||
);
|
||||
@@ -72,6 +78,7 @@ describe("download-version", () => {
|
||||
mockGetFirstMatchingVersion.mockReset();
|
||||
mockGetArtifact.mockReset();
|
||||
mockValidateChecksum.mockReset();
|
||||
mockGetLatestKnownVersion.mockClear();
|
||||
|
||||
mockDownloadTool.mockResolvedValue("/tmp/downloaded");
|
||||
mockExtractTar.mockResolvedValue("/tmp/extracted");
|
||||
@@ -90,6 +97,16 @@ describe("download-version", () => {
|
||||
expect(mockGetLatestVersion).toHaveBeenCalledWith(undefined);
|
||||
});
|
||||
|
||||
it("resolves latest-known without reading the manifest", async () => {
|
||||
const version = await resolveVersion("latest-known", undefined);
|
||||
|
||||
expect(version).toBe("0.9.25");
|
||||
expect(mockGetLatestKnownVersion).toHaveBeenCalledTimes(1);
|
||||
expect(mockGetLatestVersion).not.toHaveBeenCalled();
|
||||
expect(mockGetAllVersions).not.toHaveBeenCalled();
|
||||
expect(mockGetFirstMatchingVersion).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("stops at the first matching version in the default manifest", async () => {
|
||||
mockGetFirstMatchingVersion.mockImplementation(
|
||||
(predicate: (version: string) => boolean) =>
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
uv 0.5.15
|
||||
python 3.13.1t
|
||||
|
||||
@@ -12,10 +12,13 @@ import {
|
||||
|
||||
let mockInputs: Record<string, string> = {};
|
||||
const tempDirs: string[] = [];
|
||||
const ORIGINAL_GITHUB_EVENT_NAME = process.env.GITHUB_EVENT_NAME;
|
||||
const ORIGINAL_GITHUB_REF = process.env.GITHUB_REF;
|
||||
const ORIGINAL_HOME = process.env.HOME;
|
||||
const ORIGINAL_RUNNER_ENVIRONMENT = process.env.RUNNER_ENVIRONMENT;
|
||||
const ORIGINAL_RUNNER_TEMP = process.env.RUNNER_TEMP;
|
||||
const ORIGINAL_UV_CACHE_DIR = process.env.UV_CACHE_DIR;
|
||||
const ORIGINAL_UV_PYTHON = process.env.UV_PYTHON;
|
||||
const ORIGINAL_UV_PYTHON_INSTALL_DIR = process.env.UV_PYTHON_INSTALL_DIR;
|
||||
|
||||
const mockDebug = jest.fn();
|
||||
@@ -52,10 +55,13 @@ function createTempProject(files: Record<string, string> = {}): string {
|
||||
function resetEnvironment(): void {
|
||||
jest.clearAllMocks();
|
||||
mockInputs = {};
|
||||
delete process.env.GITHUB_EVENT_NAME;
|
||||
delete process.env.GITHUB_REF;
|
||||
process.env.HOME = "/home/testuser";
|
||||
delete process.env.RUNNER_ENVIRONMENT;
|
||||
delete process.env.RUNNER_TEMP;
|
||||
delete process.env.UV_CACHE_DIR;
|
||||
delete process.env.UV_PYTHON;
|
||||
delete process.env.UV_PYTHON_INSTALL_DIR;
|
||||
}
|
||||
|
||||
@@ -64,10 +70,13 @@ function restoreEnvironment(): void {
|
||||
fs.rmSync(dir, { force: true, recursive: true });
|
||||
}
|
||||
|
||||
process.env.GITHUB_EVENT_NAME = ORIGINAL_GITHUB_EVENT_NAME;
|
||||
process.env.GITHUB_REF = ORIGINAL_GITHUB_REF;
|
||||
process.env.HOME = ORIGINAL_HOME;
|
||||
process.env.RUNNER_ENVIRONMENT = ORIGINAL_RUNNER_ENVIRONMENT;
|
||||
process.env.RUNNER_TEMP = ORIGINAL_RUNNER_TEMP;
|
||||
process.env.UV_CACHE_DIR = ORIGINAL_UV_CACHE_DIR;
|
||||
process.env.UV_PYTHON = ORIGINAL_UV_PYTHON;
|
||||
process.env.UV_PYTHON_INSTALL_DIR = ORIGINAL_UV_PYTHON_INSTALL_DIR;
|
||||
}
|
||||
|
||||
@@ -94,6 +103,109 @@ describe("loadInputs", () => {
|
||||
expect(inputs.resolutionStrategy).toBe("highest");
|
||||
});
|
||||
|
||||
it("uses the Python version from an explicitly selected .tool-versions file", () => {
|
||||
mockInputs["working-directory"] = createTempProject({
|
||||
".tool-versions": "uv 0.12.3\npython 3.13.1t\n",
|
||||
});
|
||||
mockInputs["version-file"] = ".tool-versions";
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.pythonVersion).toBe("3.13.1t");
|
||||
});
|
||||
|
||||
it("prefers the python-version input over .tool-versions", () => {
|
||||
mockInputs["working-directory"] = createTempProject({
|
||||
".tool-versions": "uv 0.12.3\npython 3.13\n",
|
||||
});
|
||||
mockInputs["version-file"] = ".tool-versions";
|
||||
mockInputs["python-version"] = "3.12";
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.pythonVersion).toBe("3.12");
|
||||
});
|
||||
|
||||
it("preserves UV_PYTHON instead of overriding it from .tool-versions", () => {
|
||||
mockInputs["working-directory"] = createTempProject({
|
||||
".tool-versions": "uv 0.12.3\npython 3.13\n",
|
||||
});
|
||||
mockInputs["version-file"] = ".tool-versions";
|
||||
process.env.UV_PYTHON = "3.11";
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.pythonVersion).toBe("");
|
||||
expect(process.env.UV_PYTHON).toBe("3.11");
|
||||
});
|
||||
|
||||
it("does not discover .tool-versions from the working directory", () => {
|
||||
mockInputs["working-directory"] = createTempProject({
|
||||
".tool-versions": "uv 0.12.3\npython 3.13\n",
|
||||
});
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.pythonVersion).toBe("");
|
||||
});
|
||||
|
||||
it.each(["pull_request_target", "workflow_run", "release"])(
|
||||
"disables automatic caching for the %s event",
|
||||
(eventName) => {
|
||||
mockInputs["working-directory"] = "/workspace";
|
||||
mockInputs["enable-cache"] = "auto";
|
||||
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||
process.env.RUNNER_TEMP = "/runner-temp";
|
||||
process.env.GITHUB_EVENT_NAME = eventName;
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.enableCache).toBe(false);
|
||||
expect(mockInfo).toHaveBeenCalledWith(
|
||||
`Caching is disabled for the ${eventName} event`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
it("disables automatic caching for tag pushes", () => {
|
||||
mockInputs["working-directory"] = "/workspace";
|
||||
mockInputs["enable-cache"] = "auto";
|
||||
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||
process.env.RUNNER_TEMP = "/runner-temp";
|
||||
process.env.GITHUB_EVENT_NAME = "push";
|
||||
process.env.GITHUB_REF = "refs/tags/v1.0.0";
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.enableCache).toBe(false);
|
||||
expect(mockInfo).toHaveBeenCalledWith("Caching is disabled for tag pushes");
|
||||
});
|
||||
|
||||
it("enables automatic caching for branch pushes", () => {
|
||||
mockInputs["working-directory"] = "/workspace";
|
||||
mockInputs["enable-cache"] = "auto";
|
||||
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||
process.env.RUNNER_TEMP = "/runner-temp";
|
||||
process.env.GITHUB_EVENT_NAME = "push";
|
||||
process.env.GITHUB_REF = "refs/heads/main";
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.enableCache).toBe(true);
|
||||
});
|
||||
|
||||
it("honors explicitly enabled caching for sensitive events", () => {
|
||||
mockInputs["working-directory"] = "/workspace";
|
||||
mockInputs["enable-cache"] = "true";
|
||||
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||
process.env.RUNNER_TEMP = "/runner-temp";
|
||||
process.env.GITHUB_EVENT_NAME = "release";
|
||||
|
||||
const inputs = loadInputs();
|
||||
|
||||
expect(inputs.enableCache).toBe(true);
|
||||
});
|
||||
|
||||
it("uses cache-dir from pyproject.toml when present", () => {
|
||||
mockInputs["working-directory"] = createTempProject({
|
||||
"pyproject.toml": `[project]
|
||||
|
||||
@@ -15,15 +15,18 @@ test("ignores dependencies starting with uv", async () => {
|
||||
test.each([
|
||||
["without space before marker", "uv==0.11.20; sys_platform != 'emscripten'"],
|
||||
["with space before marker", "uv==0.11.20 ; sys_platform != 'emscripten'"],
|
||||
])("strips PEP 508 markers from pyproject dependency groups %s", (_, dependency) => {
|
||||
const parsedVersion = getUvVersionFromPyprojectContent(`[dependency-groups]
|
||||
])(
|
||||
"strips PEP 508 markers from pyproject dependency groups %s",
|
||||
(_, dependency) => {
|
||||
const parsedVersion = getUvVersionFromPyprojectContent(`[dependency-groups]
|
||||
test = [
|
||||
"${dependency}",
|
||||
]
|
||||
`);
|
||||
|
||||
expect(parsedVersion).toBe("==0.11.20");
|
||||
});
|
||||
expect(parsedVersion).toBe("==0.11.20");
|
||||
},
|
||||
);
|
||||
|
||||
test("strips PEP 508 markers from requirements dependencies", () => {
|
||||
const parsedVersion = getUvVersionFromRequirementsText(
|
||||
|
||||
@@ -21,6 +21,11 @@ async function getVersionFromToolVersions(filePath: string) {
|
||||
return getUvVersionFromToolVersions(filePath);
|
||||
}
|
||||
|
||||
async function getPythonVersionFromToolVersions(filePath: string) {
|
||||
const module = await import("../../src/version/tool-versions-file");
|
||||
return module.getPythonVersionFromToolVersions(filePath);
|
||||
}
|
||||
|
||||
describe("getUvVersionFromToolVersions", () => {
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
@@ -61,8 +66,8 @@ describe("getUvVersionFromToolVersions", () => {
|
||||
expect(result).toBe("0.3.0");
|
||||
});
|
||||
|
||||
it("should skip commented lines", async () => {
|
||||
const fileContent = "# uv 0.1.0\npython 3.11.0\nuv 0.2.0";
|
||||
it("should skip comments", async () => {
|
||||
const fileContent = "# uv 0.1.0\npython 3.11.0\nuv 0.2.0 # inline comment";
|
||||
mockReadFileSync.mockReturnValue(fileContent);
|
||||
|
||||
const result = await getVersionFromToolVersions(".tool-versions");
|
||||
@@ -108,6 +113,20 @@ describe("getUvVersionFromToolVersions", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it.each(["/my/python/exploit", "my/exploited/uv", "C:\\exploited\\uv"])(
|
||||
"should warn and return undefined for path %s",
|
||||
async (version) => {
|
||||
mockReadFileSync.mockReturnValue(`uv ${version}`);
|
||||
|
||||
const result = await getVersionFromToolVersions(".tool-versions");
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
expect(mockWarning).toHaveBeenCalledWith(
|
||||
`The uv version ${version} in .tool-versions is not supported. Paths are not allowed.`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
it("should handle file path with .tool-versions extension", async () => {
|
||||
const fileContent = "uv 0.1.0";
|
||||
mockReadFileSync.mockReturnValue(fileContent);
|
||||
@@ -121,3 +140,72 @@ describe("getUvVersionFromToolVersions", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("getPythonVersionFromToolVersions", () => {
|
||||
beforeEach(() => {
|
||||
jest.resetModules();
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
it("should return version for a valid Python entry", async () => {
|
||||
mockReadFileSync.mockReturnValue(
|
||||
"nodejs 24.0.0\r\npython v3.13.1t # use free-threaded Python\r\nuv 0.12.3",
|
||||
);
|
||||
|
||||
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||
|
||||
expect(result).toBe("3.13.1t");
|
||||
});
|
||||
|
||||
it("should return the first matching Python version", async () => {
|
||||
mockReadFileSync.mockReturnValue("python 3.12\npython 3.13");
|
||||
|
||||
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||
|
||||
expect(result).toBe("3.12");
|
||||
});
|
||||
|
||||
it("should return undefined when no Python entry is found", async () => {
|
||||
mockReadFileSync.mockReturnValue("uv 0.12.3\nnodejs 24.0.0");
|
||||
|
||||
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should warn and return undefined for multiple Python versions", async () => {
|
||||
mockReadFileSync.mockReturnValue("python 3.13 3.12 system");
|
||||
|
||||
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
expect(mockWarning).toHaveBeenCalledWith(
|
||||
"Multiple Python versions in .tool-versions are not supported. The Python entry will be ignored.",
|
||||
);
|
||||
});
|
||||
|
||||
it.each([
|
||||
"ref:main",
|
||||
"path:~/src/python",
|
||||
"system",
|
||||
"/my/python/exploit",
|
||||
"my/exploited/python",
|
||||
"C:\\exploited\\python",
|
||||
])("should warn and return undefined for %s", async (version) => {
|
||||
mockReadFileSync.mockReturnValue(`python ${version}`);
|
||||
|
||||
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
expect(mockWarning).toHaveBeenCalledWith(
|
||||
`The Python version ${version} in .tool-versions is not supported. The Python entry will be ignored.`,
|
||||
);
|
||||
});
|
||||
|
||||
it("should return undefined for non-.tool-versions files", async () => {
|
||||
const result = await getPythonVersionFromToolVersions(".python-version");
|
||||
|
||||
expect(result).toBeUndefined();
|
||||
expect(mockReadFileSync).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
name: "test workflow_run caching"
|
||||
|
||||
on: # zizmor: ignore[dangerous-triggers] this workflow is a test fixture executed by act only
|
||||
workflow_run:
|
||||
workflows:
|
||||
- test
|
||||
types:
|
||||
- completed
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test-cache-disabled:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Setup uv with automatic caching
|
||||
id: setup-uv
|
||||
uses: ./
|
||||
- name: Verify automatic caching is disabled
|
||||
env:
|
||||
CACHE_KEY: ${{ steps.setup-uv.outputs.cache-key }}
|
||||
run: |
|
||||
if [ "$GITHUB_EVENT_NAME" != "workflow_run" ]; then
|
||||
echo "Expected workflow_run event, got: $GITHUB_EVENT_NAME"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$RUNNER_ENVIRONMENT" != "github-hosted" ]; then
|
||||
echo "Expected a simulated GitHub-hosted runner, got: $RUNNER_ENVIRONMENT"
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "$CACHE_KEY" ]; then
|
||||
echo "Cache key should not be set for a workflow_run event: $CACHE_KEY"
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "$UV_CACHE_DIR" ]; then
|
||||
echo "UV_CACHE_DIR should not be set for a workflow_run event: $UV_CACHE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
+4
-4
@@ -4,13 +4,13 @@ description:
|
||||
author: "astral-sh"
|
||||
inputs:
|
||||
version:
|
||||
description: "The version of uv to install e.g., `0.5.0` Defaults to the version in pyproject.toml or 'latest'."
|
||||
description: "The version of uv to install, e.g., `0.5.0`, `latest`, or `latest-known`. Defaults to the version in pyproject.toml or `latest`."
|
||||
default: ""
|
||||
version-file:
|
||||
description: "Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock. Defaults to searching for uv.toml and if not found pyproject.toml."
|
||||
description: "Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock. A selected .tool-versions file can also provide the Python version. Defaults to searching for uv.toml and if not found pyproject.toml."
|
||||
default: ""
|
||||
python-version:
|
||||
description: "The version of Python to set UV_PYTHON to"
|
||||
description: "The version of Python to set UV_PYTHON to. Overrides the Python version from .tool-versions."
|
||||
required: false
|
||||
activate-environment:
|
||||
description: "Use uv venv to activate a venv ready to be used by later steps. "
|
||||
@@ -33,7 +33,7 @@ inputs:
|
||||
required: false
|
||||
default: ${{ github.token }}
|
||||
enable-cache:
|
||||
description: "Enable uploading of the uv cache"
|
||||
description: "Enable the GitHub Actions cache for uv. 'auto' enables caching on GitHub-hosted runners except for release, tag push, pull_request_target, and workflow_run events."
|
||||
default: "auto"
|
||||
cache-dependency-glob:
|
||||
description:
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.5.1/schema.json",
|
||||
"$schema": "https://biomejs.dev/schemas/2.5.7/schema.json",
|
||||
"assist": {
|
||||
"actions": {
|
||||
"source": {
|
||||
|
||||
+2439
-467
@@ -1073,14 +1073,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 path12 = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
|
||||
let path13 = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
|
||||
if (origin[origin.length - 1] === "/") {
|
||||
origin = origin.slice(0, origin.length - 1);
|
||||
}
|
||||
if (path12 && path12[0] !== "/") {
|
||||
path12 = `/${path12}`;
|
||||
if (path13 && path13[0] !== "/") {
|
||||
path13 = `/${path13}`;
|
||||
}
|
||||
return new URL(`${origin}${path12}`);
|
||||
return new URL(`${origin}${path13}`);
|
||||
}
|
||||
if (!isHttpOrHttpsPrefixed(url2.origin || url2.protocol)) {
|
||||
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
|
||||
@@ -1361,9 +1361,9 @@ var require_util = __commonJS({
|
||||
function isValidHeaderValue(characters) {
|
||||
return !headerCharRegex.test(characters);
|
||||
}
|
||||
function parseRangeHeader(range2) {
|
||||
if (range2 == null || range2 === "") return { start: 0, end: null, size: null };
|
||||
const m = range2 ? range2.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null;
|
||||
function parseRangeHeader(range3) {
|
||||
if (range3 == null || range3 === "") return { start: 0, end: null, size: null };
|
||||
const m = range3 ? range3.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null;
|
||||
return m ? {
|
||||
start: parseInt(m[1]),
|
||||
end: m[2] ? parseInt(m[2]) : null,
|
||||
@@ -1531,39 +1531,39 @@ var require_diagnostics = __commonJS({
|
||||
});
|
||||
diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path12, origin }
|
||||
request: { method, path: path13, origin }
|
||||
} = evt;
|
||||
debuglog("sending request to %s %s/%s", method, origin, path12);
|
||||
debuglog("sending request to %s %s/%s", method, origin, path13);
|
||||
});
|
||||
diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path12, origin },
|
||||
request: { method, path: path13, origin },
|
||||
response: { statusCode }
|
||||
} = evt;
|
||||
debuglog(
|
||||
"received response to %s %s/%s - HTTP %d",
|
||||
method,
|
||||
origin,
|
||||
path12,
|
||||
path13,
|
||||
statusCode
|
||||
);
|
||||
});
|
||||
diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path12, origin }
|
||||
request: { method, path: path13, origin }
|
||||
} = evt;
|
||||
debuglog("trailers received from %s %s/%s", method, origin, path12);
|
||||
debuglog("trailers received from %s %s/%s", method, origin, path13);
|
||||
});
|
||||
diagnosticsChannel.channel("undici:request:error").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path12, origin },
|
||||
request: { method, path: path13, origin },
|
||||
error: error2
|
||||
} = evt;
|
||||
debuglog(
|
||||
"request to %s %s/%s errored - %s",
|
||||
method,
|
||||
origin,
|
||||
path12,
|
||||
path13,
|
||||
error2.message
|
||||
);
|
||||
});
|
||||
@@ -1612,9 +1612,9 @@ var require_diagnostics = __commonJS({
|
||||
});
|
||||
diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
|
||||
const {
|
||||
request: { method, path: path12, origin }
|
||||
request: { method, path: path13, origin }
|
||||
} = evt;
|
||||
debuglog("sending request to %s %s/%s", method, origin, path12);
|
||||
debuglog("sending request to %s %s/%s", method, origin, path13);
|
||||
});
|
||||
}
|
||||
diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => {
|
||||
@@ -1677,7 +1677,7 @@ var require_request = __commonJS({
|
||||
var kHandler = /* @__PURE__ */ Symbol("handler");
|
||||
var Request = class {
|
||||
constructor(origin, {
|
||||
path: path12,
|
||||
path: path13,
|
||||
method,
|
||||
body: body2,
|
||||
headers,
|
||||
@@ -1692,11 +1692,11 @@ var require_request = __commonJS({
|
||||
expectContinue,
|
||||
servername
|
||||
}, handler) {
|
||||
if (typeof path12 !== "string") {
|
||||
if (typeof path13 !== "string") {
|
||||
throw new InvalidArgumentError("path must be a string");
|
||||
} else if (path12[0] !== "/" && !(path12.startsWith("http://") || path12.startsWith("https://")) && method !== "CONNECT") {
|
||||
} else if (path13[0] !== "/" && !(path13.startsWith("http://") || path13.startsWith("https://")) && method !== "CONNECT") {
|
||||
throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
|
||||
} else if (invalidPathRegex.test(path12)) {
|
||||
} else if (invalidPathRegex.test(path13)) {
|
||||
throw new InvalidArgumentError("invalid request path");
|
||||
}
|
||||
if (typeof method !== "string") {
|
||||
@@ -1762,7 +1762,7 @@ var require_request = __commonJS({
|
||||
this.completed = false;
|
||||
this.aborted = false;
|
||||
this.upgrade = upgrade || null;
|
||||
this.path = query ? buildURL(path12, query) : path12;
|
||||
this.path = query ? buildURL(path13, query) : path13;
|
||||
this.origin = origin;
|
||||
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
|
||||
this.blocking = blocking == null ? false : blocking;
|
||||
@@ -3577,7 +3577,7 @@ var require_data_url = __commonJS({
|
||||
var require_webidl = __commonJS({
|
||||
"node_modules/@actions/http-client/node_modules/undici/lib/web/fetch/webidl.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var { types, inspect: inspect2 } = require("node:util");
|
||||
var { types: types2, inspect: inspect2 } = require("node:util");
|
||||
var { markAsUncloneable } = require("node:worker_threads");
|
||||
var { toUSVString } = require_util();
|
||||
var webidl = {};
|
||||
@@ -3767,7 +3767,7 @@ var require_webidl = __commonJS({
|
||||
});
|
||||
}
|
||||
const result = {};
|
||||
if (!types.isProxy(O)) {
|
||||
if (!types2.isProxy(O)) {
|
||||
const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)];
|
||||
for (const key of keys2) {
|
||||
const typedKey = keyConverter(key, prefix2, argument);
|
||||
@@ -3896,14 +3896,14 @@ var require_webidl = __commonJS({
|
||||
return x;
|
||||
};
|
||||
webidl.converters.ArrayBuffer = function(V, prefix2, argument, opts) {
|
||||
if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) {
|
||||
if (webidl.util.Type(V) !== "Object" || !types2.isAnyArrayBuffer(V)) {
|
||||
throw webidl.errors.conversionFailed({
|
||||
prefix: prefix2,
|
||||
argument: `${argument} ("${webidl.util.Stringify(V)}")`,
|
||||
types: ["ArrayBuffer"]
|
||||
});
|
||||
}
|
||||
if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) {
|
||||
if (opts?.allowShared === false && types2.isSharedArrayBuffer(V)) {
|
||||
throw webidl.errors.exception({
|
||||
header: "ArrayBuffer",
|
||||
message: "SharedArrayBuffer is not allowed."
|
||||
@@ -3918,14 +3918,14 @@ var require_webidl = __commonJS({
|
||||
return V;
|
||||
};
|
||||
webidl.converters.TypedArray = function(V, T, prefix2, name, opts) {
|
||||
if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) {
|
||||
if (webidl.util.Type(V) !== "Object" || !types2.isTypedArray(V) || V.constructor.name !== T.name) {
|
||||
throw webidl.errors.conversionFailed({
|
||||
prefix: prefix2,
|
||||
argument: `${name} ("${webidl.util.Stringify(V)}")`,
|
||||
types: [T.name]
|
||||
});
|
||||
}
|
||||
if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
|
||||
if (opts?.allowShared === false && types2.isSharedArrayBuffer(V.buffer)) {
|
||||
throw webidl.errors.exception({
|
||||
header: "ArrayBuffer",
|
||||
message: "SharedArrayBuffer is not allowed."
|
||||
@@ -3940,13 +3940,13 @@ var require_webidl = __commonJS({
|
||||
return V;
|
||||
};
|
||||
webidl.converters.DataView = function(V, prefix2, name, opts) {
|
||||
if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) {
|
||||
if (webidl.util.Type(V) !== "Object" || !types2.isDataView(V)) {
|
||||
throw webidl.errors.exception({
|
||||
header: prefix2,
|
||||
message: `${name} is not a DataView.`
|
||||
});
|
||||
}
|
||||
if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
|
||||
if (opts?.allowShared === false && types2.isSharedArrayBuffer(V.buffer)) {
|
||||
throw webidl.errors.exception({
|
||||
header: "ArrayBuffer",
|
||||
message: "SharedArrayBuffer is not allowed."
|
||||
@@ -3961,13 +3961,13 @@ var require_webidl = __commonJS({
|
||||
return V;
|
||||
};
|
||||
webidl.converters.BufferSource = function(V, prefix2, name, opts) {
|
||||
if (types.isAnyArrayBuffer(V)) {
|
||||
if (types2.isAnyArrayBuffer(V)) {
|
||||
return webidl.converters.ArrayBuffer(V, prefix2, name, { ...opts, allowShared: false });
|
||||
}
|
||||
if (types.isTypedArray(V)) {
|
||||
if (types2.isTypedArray(V)) {
|
||||
return webidl.converters.TypedArray(V, V.constructor, prefix2, name, { ...opts, allowShared: false });
|
||||
}
|
||||
if (types.isDataView(V)) {
|
||||
if (types2.isDataView(V)) {
|
||||
return webidl.converters.DataView(V, prefix2, name, { ...opts, allowShared: false });
|
||||
}
|
||||
throw webidl.errors.conversionFailed({
|
||||
@@ -5420,7 +5420,7 @@ var require_body = __commonJS({
|
||||
const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`;
|
||||
const prefix2 = `--${boundary}\r
|
||||
Content-Disposition: form-data`;
|
||||
const escape2 = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
|
||||
const escape3 = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
|
||||
const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n");
|
||||
const blobParts = [];
|
||||
const rn = new Uint8Array([13, 10]);
|
||||
@@ -5428,14 +5428,14 @@ Content-Disposition: form-data`;
|
||||
let hasUnknownSizeValue = false;
|
||||
for (const [name, value] of object) {
|
||||
if (typeof value === "string") {
|
||||
const chunk2 = textEncoder.encode(prefix2 + `; name="${escape2(normalizeLinefeeds(name))}"\r
|
||||
const chunk2 = textEncoder.encode(prefix2 + `; name="${escape3(normalizeLinefeeds(name))}"\r
|
||||
\r
|
||||
${normalizeLinefeeds(value)}\r
|
||||
`);
|
||||
blobParts.push(chunk2);
|
||||
length += chunk2.byteLength;
|
||||
} else {
|
||||
const chunk2 = textEncoder.encode(`${prefix2}; name="${escape2(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape2(value.name)}"` : "") + `\r
|
||||
const chunk2 = textEncoder.encode(`${prefix2}; name="${escape3(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape3(value.name)}"` : "") + `\r
|
||||
Content-Type: ${value.type || "application/octet-stream"}\r
|
||||
\r
|
||||
`);
|
||||
@@ -6281,7 +6281,7 @@ var require_client_h1 = __commonJS({
|
||||
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
||||
}
|
||||
function writeH1(client, request) {
|
||||
const { method, path: path12, host, upgrade, blocking, reset } = request;
|
||||
const { method, path: path13, 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 (util4.isFormDataLike(body2)) {
|
||||
@@ -6347,7 +6347,7 @@ var require_client_h1 = __commonJS({
|
||||
if (blocking) {
|
||||
socket[kBlocking] = true;
|
||||
}
|
||||
let header = `${method} ${path12} HTTP/1.1\r
|
||||
let header = `${method} ${path13} HTTP/1.1\r
|
||||
`;
|
||||
if (typeof host === "string") {
|
||||
header += `host: ${host}\r
|
||||
@@ -6873,7 +6873,7 @@ var require_client_h2 = __commonJS({
|
||||
}
|
||||
function writeH2(client, request) {
|
||||
const session = client[kHTTP2Session];
|
||||
const { method, path: path12, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
||||
const { method, path: path13, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
|
||||
let { body: body2 } = request;
|
||||
if (upgrade) {
|
||||
util4.errorRequest(client, request, new Error("Upgrade not supported for H2"));
|
||||
@@ -6940,7 +6940,7 @@ var require_client_h2 = __commonJS({
|
||||
});
|
||||
return true;
|
||||
}
|
||||
headers[HTTP2_HEADER_PATH] = path12;
|
||||
headers[HTTP2_HEADER_PATH] = path13;
|
||||
headers[HTTP2_HEADER_SCHEME] = "https";
|
||||
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
|
||||
if (body2 && typeof body2.read === "function") {
|
||||
@@ -7293,9 +7293,9 @@ var require_redirect_handler = __commonJS({
|
||||
return this.handler.onHeaders(statusCode, headers, resume, statusText);
|
||||
}
|
||||
const { origin, pathname, search } = util4.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
|
||||
const path12 = search ? `${pathname}${search}` : pathname;
|
||||
const path13 = search ? `${pathname}${search}` : pathname;
|
||||
this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin);
|
||||
this.opts.path = path12;
|
||||
this.opts.path = path13;
|
||||
this.opts.origin = origin;
|
||||
this.opts.maxRedirections = 0;
|
||||
this.opts.query = null;
|
||||
@@ -8529,10 +8529,10 @@ var require_proxy_agent = __commonJS({
|
||||
};
|
||||
const {
|
||||
origin,
|
||||
path: path12 = "/",
|
||||
path: path13 = "/",
|
||||
headers = {}
|
||||
} = opts;
|
||||
opts.path = origin + path12;
|
||||
opts.path = origin + path13;
|
||||
if (!("host" in headers) && !("Host" in headers)) {
|
||||
const { host } = new URL2(origin);
|
||||
headers.host = host;
|
||||
@@ -9025,8 +9025,8 @@ var require_retry_handler = __commonJS({
|
||||
}
|
||||
if (this.end == null) {
|
||||
if (statusCode === 206) {
|
||||
const range2 = parseRangeHeader(headers["content-range"]);
|
||||
if (range2 == null) {
|
||||
const range3 = parseRangeHeader(headers["content-range"]);
|
||||
if (range3 == null) {
|
||||
return this.handler.onHeaders(
|
||||
statusCode,
|
||||
rawHeaders,
|
||||
@@ -9034,7 +9034,7 @@ var require_retry_handler = __commonJS({
|
||||
statusMessage
|
||||
);
|
||||
}
|
||||
const { start, size, end = size - 1 } = range2;
|
||||
const { start, size, end = size - 1 } = range3;
|
||||
assert4(
|
||||
start != null && Number.isFinite(start),
|
||||
"content-range mismatch"
|
||||
@@ -10391,15 +10391,15 @@ var require_mock_utils = __commonJS({
|
||||
isPromise
|
||||
}
|
||||
} = require("node:util");
|
||||
function matchValue(match2, value) {
|
||||
if (typeof match2 === "string") {
|
||||
return match2 === value;
|
||||
function matchValue(match4, value) {
|
||||
if (typeof match4 === "string") {
|
||||
return match4 === value;
|
||||
}
|
||||
if (match2 instanceof RegExp) {
|
||||
return match2.test(value);
|
||||
if (match4 instanceof RegExp) {
|
||||
return match4.test(value);
|
||||
}
|
||||
if (typeof match2 === "function") {
|
||||
return match2(value) === true;
|
||||
if (typeof match4 === "function") {
|
||||
return match4(value) === true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -10453,20 +10453,20 @@ var require_mock_utils = __commonJS({
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function safeUrl(path12) {
|
||||
if (typeof path12 !== "string") {
|
||||
return path12;
|
||||
function safeUrl(path13) {
|
||||
if (typeof path13 !== "string") {
|
||||
return path13;
|
||||
}
|
||||
const pathSegments = path12.split("?");
|
||||
const pathSegments = path13.split("?");
|
||||
if (pathSegments.length !== 2) {
|
||||
return path12;
|
||||
return path13;
|
||||
}
|
||||
const qp = new URLSearchParams(pathSegments.pop());
|
||||
qp.sort();
|
||||
return [...pathSegments, qp.toString()].join("?");
|
||||
}
|
||||
function matchKey(mockDispatch2, { path: path12, method, body: body2, headers }) {
|
||||
const pathMatch = matchValue(mockDispatch2.path, path12);
|
||||
function matchKey(mockDispatch2, { path: path13, method, body: body2, headers }) {
|
||||
const pathMatch = matchValue(mockDispatch2.path, path13);
|
||||
const methodMatch = matchValue(mockDispatch2.method, method);
|
||||
const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body2) : true;
|
||||
const headersMatch = matchHeaders(mockDispatch2, headers);
|
||||
@@ -10488,7 +10488,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: path12 }) => matchValue(safeUrl(path12), resolvedPath));
|
||||
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path13 }) => matchValue(safeUrl(path13), resolvedPath));
|
||||
if (matchedMockDispatches.length === 0) {
|
||||
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`);
|
||||
}
|
||||
@@ -10526,9 +10526,9 @@ var require_mock_utils = __commonJS({
|
||||
}
|
||||
}
|
||||
function buildKey(opts) {
|
||||
const { path: path12, method, body: body2, headers, query } = opts;
|
||||
const { path: path13, method, body: body2, headers, query } = opts;
|
||||
return {
|
||||
path: path12,
|
||||
path: path13,
|
||||
method,
|
||||
body: body2,
|
||||
headers,
|
||||
@@ -10991,10 +10991,10 @@ var require_pending_interceptors_formatter = __commonJS({
|
||||
}
|
||||
format(pendingInterceptors) {
|
||||
const withPrettyHeaders = pendingInterceptors.map(
|
||||
({ method, path: path12, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
||||
({ method, path: path13, data: { statusCode }, persist, times, timesInvoked, origin }) => ({
|
||||
Method: method,
|
||||
Origin: origin,
|
||||
Path: path12,
|
||||
Path: path13,
|
||||
"Status code": statusCode,
|
||||
Persistent: persist ? PERSISTENT : NOT_PERSISTENT,
|
||||
Invocations: timesInvoked,
|
||||
@@ -12119,7 +12119,7 @@ var require_response = __commonJS({
|
||||
var { URLSerializer } = require_data_url();
|
||||
var { kConstruct } = require_symbols();
|
||||
var assert4 = require("node:assert");
|
||||
var { types } = require("node:util");
|
||||
var { types: types2 } = require("node:util");
|
||||
var textEncoder = new TextEncoder("utf-8");
|
||||
var Response = class _Response {
|
||||
// Creates network error Response.
|
||||
@@ -12440,7 +12440,7 @@ var require_response = __commonJS({
|
||||
if (isBlobLike(V)) {
|
||||
return webidl.converters.Blob(V, prefix2, name, { strict: false });
|
||||
}
|
||||
if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) {
|
||||
if (ArrayBuffer.isView(V) || types2.isArrayBuffer(V)) {
|
||||
return webidl.converters.BufferSource(V, prefix2, name);
|
||||
}
|
||||
if (util4.isFormDataLike(V)) {
|
||||
@@ -14676,7 +14676,7 @@ var require_util4 = __commonJS({
|
||||
var { ProgressEvent } = require_progressevent();
|
||||
var { getEncoding } = require_encoding();
|
||||
var { serializeAMimeType, parseMIMEType } = require_data_url();
|
||||
var { types } = require("node:util");
|
||||
var { types: types2 } = require("node:util");
|
||||
var { StringDecoder } = require("string_decoder");
|
||||
var { btoa: btoa2 } = require("node:buffer");
|
||||
var staticPropertyDescriptors = {
|
||||
@@ -14706,7 +14706,7 @@ var require_util4 = __commonJS({
|
||||
});
|
||||
}
|
||||
isFirstChunk = false;
|
||||
if (!done && types.isUint8Array(value)) {
|
||||
if (!done && types2.isUint8Array(value)) {
|
||||
bytes.push(value);
|
||||
if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) {
|
||||
fr[kLastProgressEventFired] = Date.now();
|
||||
@@ -15875,9 +15875,9 @@ var require_util6 = __commonJS({
|
||||
}
|
||||
}
|
||||
}
|
||||
function validateCookiePath(path12) {
|
||||
for (let i = 0; i < path12.length; ++i) {
|
||||
const code = path12.charCodeAt(i);
|
||||
function validateCookiePath(path13) {
|
||||
for (let i = 0; i < path13.length; ++i) {
|
||||
const code = path13.charCodeAt(i);
|
||||
if (code < 32 || // exclude CTLs (0-31)
|
||||
code === 127 || // DEL
|
||||
code === 59) {
|
||||
@@ -17540,7 +17540,7 @@ var require_websocket = __commonJS({
|
||||
var { ByteParser } = require_receiver();
|
||||
var { kEnumerableProperty, isBlobLike } = require_util();
|
||||
var { getGlobalDispatcher } = require_global2();
|
||||
var { types } = require("node:util");
|
||||
var { types: types2 } = require("node:util");
|
||||
var { ErrorEvent, CloseEvent } = require_events();
|
||||
var { SendQueue } = require_sender();
|
||||
var WebSocket = class _WebSocket extends EventTarget {
|
||||
@@ -17663,7 +17663,7 @@ var require_websocket = __commonJS({
|
||||
this.#sendQueue.add(data, () => {
|
||||
this.#bufferedAmount -= length;
|
||||
}, sendHints.string);
|
||||
} else if (types.isArrayBuffer(data)) {
|
||||
} else if (types2.isArrayBuffer(data)) {
|
||||
this.#bufferedAmount += data.byteLength;
|
||||
this.#sendQueue.add(data, () => {
|
||||
this.#bufferedAmount -= data.byteLength;
|
||||
@@ -17869,7 +17869,7 @@ var require_websocket = __commonJS({
|
||||
if (isBlobLike(V)) {
|
||||
return webidl.converters.Blob(V, { strict: false });
|
||||
}
|
||||
if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) {
|
||||
if (ArrayBuffer.isView(V) || types2.isArrayBuffer(V)) {
|
||||
return webidl.converters.BufferSource(V);
|
||||
}
|
||||
}
|
||||
@@ -18517,11 +18517,11 @@ var require_undici = __commonJS({
|
||||
if (typeof opts.path !== "string") {
|
||||
throw new InvalidArgumentError("invalid opts.path");
|
||||
}
|
||||
let path12 = opts.path;
|
||||
let path13 = opts.path;
|
||||
if (!opts.path.startsWith("/")) {
|
||||
path12 = `/${path12}`;
|
||||
path13 = `/${path13}`;
|
||||
}
|
||||
url2 = new URL(util4.parseOrigin(url2).origin + path12);
|
||||
url2 = new URL(util4.parseOrigin(url2).origin + path13);
|
||||
} else {
|
||||
if (!opts) {
|
||||
opts = typeof url2 === "object" ? url2 : {};
|
||||
@@ -18614,11 +18614,11 @@ var require_concat_map = __commonJS({
|
||||
var require_balanced_match = __commonJS({
|
||||
"node_modules/balanced-match/index.js"(exports2, module2) {
|
||||
"use strict";
|
||||
module2.exports = balanced;
|
||||
function balanced(a, b, str) {
|
||||
if (a instanceof RegExp) a = maybeMatch(a, str);
|
||||
if (b instanceof RegExp) b = maybeMatch(b, str);
|
||||
var r = range2(a, b, str);
|
||||
module2.exports = balanced2;
|
||||
function balanced2(a, b, str) {
|
||||
if (a instanceof RegExp) a = maybeMatch2(a, str);
|
||||
if (b instanceof RegExp) b = maybeMatch2(b, str);
|
||||
var r = range3(a, b, str);
|
||||
return r && {
|
||||
start: r[0],
|
||||
end: r[1],
|
||||
@@ -18627,12 +18627,12 @@ var require_balanced_match = __commonJS({
|
||||
post: str.slice(r[1] + b.length)
|
||||
};
|
||||
}
|
||||
function maybeMatch(reg, str) {
|
||||
function maybeMatch2(reg, str) {
|
||||
var m = str.match(reg);
|
||||
return m ? m[0] : null;
|
||||
}
|
||||
balanced.range = range2;
|
||||
function range2(a, b, str) {
|
||||
balanced2.range = range3;
|
||||
function range3(a, b, str) {
|
||||
var begs, beg, left, right, result;
|
||||
var ai = str.indexOf(a);
|
||||
var bi = str.indexOf(b, ai + 1);
|
||||
@@ -18669,27 +18669,27 @@ var require_balanced_match = __commonJS({
|
||||
var require_brace_expansion = __commonJS({
|
||||
"node_modules/brace-expansion/index.js"(exports2, module2) {
|
||||
var concatMap = require_concat_map();
|
||||
var balanced = require_balanced_match();
|
||||
var balanced2 = require_balanced_match();
|
||||
module2.exports = expandTop;
|
||||
var escSlash = "\0SLASH" + Math.random() + "\0";
|
||||
var escOpen = "\0OPEN" + Math.random() + "\0";
|
||||
var escClose = "\0CLOSE" + Math.random() + "\0";
|
||||
var escComma = "\0COMMA" + Math.random() + "\0";
|
||||
var escPeriod = "\0PERIOD" + Math.random() + "\0";
|
||||
function numeric(str) {
|
||||
var escSlash2 = "\0SLASH" + Math.random() + "\0";
|
||||
var escOpen2 = "\0OPEN" + Math.random() + "\0";
|
||||
var escClose2 = "\0CLOSE" + Math.random() + "\0";
|
||||
var escComma2 = "\0COMMA" + Math.random() + "\0";
|
||||
var escPeriod2 = "\0PERIOD" + Math.random() + "\0";
|
||||
function numeric2(str) {
|
||||
return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0);
|
||||
}
|
||||
function escapeBraces(str) {
|
||||
return str.split("\\\\").join(escSlash).split("\\{").join(escOpen).split("\\}").join(escClose).split("\\,").join(escComma).split("\\.").join(escPeriod);
|
||||
function escapeBraces2(str) {
|
||||
return str.split("\\\\").join(escSlash2).split("\\{").join(escOpen2).split("\\}").join(escClose2).split("\\,").join(escComma2).split("\\.").join(escPeriod2);
|
||||
}
|
||||
function unescapeBraces(str) {
|
||||
return str.split(escSlash).join("\\").split(escOpen).join("{").split(escClose).join("}").split(escComma).join(",").split(escPeriod).join(".");
|
||||
function unescapeBraces2(str) {
|
||||
return str.split(escSlash2).join("\\").split(escOpen2).join("{").split(escClose2).join("}").split(escComma2).join(",").split(escPeriod2).join(".");
|
||||
}
|
||||
function parseCommaParts(str) {
|
||||
function parseCommaParts2(str) {
|
||||
if (!str)
|
||||
return [""];
|
||||
var parts = [];
|
||||
var m = balanced("{", "}", str);
|
||||
var m = balanced2("{", "}", str);
|
||||
if (!m)
|
||||
return str.split(",");
|
||||
var pre = m.pre;
|
||||
@@ -18697,7 +18697,7 @@ var require_brace_expansion = __commonJS({
|
||||
var post = m.post;
|
||||
var p = pre.split(",");
|
||||
p[p.length - 1] += "{" + body2 + "}";
|
||||
var postParts = parseCommaParts(post);
|
||||
var postParts = parseCommaParts2(post);
|
||||
if (post.length) {
|
||||
p[p.length - 1] += postParts.shift();
|
||||
p.push.apply(p, postParts);
|
||||
@@ -18711,23 +18711,23 @@ var require_brace_expansion = __commonJS({
|
||||
if (str.substr(0, 2) === "{}") {
|
||||
str = "\\{\\}" + str.substr(2);
|
||||
}
|
||||
return expand(escapeBraces(str), true).map(unescapeBraces);
|
||||
return expand2(escapeBraces2(str), true).map(unescapeBraces2);
|
||||
}
|
||||
function embrace(str) {
|
||||
function embrace2(str) {
|
||||
return "{" + str + "}";
|
||||
}
|
||||
function isPadded(el) {
|
||||
function isPadded2(el) {
|
||||
return /^-?0\d/.test(el);
|
||||
}
|
||||
function lte(i, y) {
|
||||
function lte2(i, y) {
|
||||
return i <= y;
|
||||
}
|
||||
function gte(i, y) {
|
||||
function gte2(i, y) {
|
||||
return i >= y;
|
||||
}
|
||||
function expand(str, isTop) {
|
||||
function expand2(str, isTop) {
|
||||
var expansions = [];
|
||||
var m = balanced("{", "}", str);
|
||||
var m = balanced2("{", "}", str);
|
||||
if (!m || /\$$/.test(m.pre)) return [str];
|
||||
var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
|
||||
var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
|
||||
@@ -18735,8 +18735,8 @@ var require_brace_expansion = __commonJS({
|
||||
var isOptions = m.body.indexOf(",") >= 0;
|
||||
if (!isSequence && !isOptions) {
|
||||
if (m.post.match(/,(?!,).*\}/)) {
|
||||
str = m.pre + "{" + m.body + escClose + m.post;
|
||||
return expand(str);
|
||||
str = m.pre + "{" + m.body + escClose2 + m.post;
|
||||
return expand2(str);
|
||||
}
|
||||
return [str];
|
||||
}
|
||||
@@ -18744,11 +18744,11 @@ var require_brace_expansion = __commonJS({
|
||||
if (isSequence) {
|
||||
n = m.body.split(/\.\./);
|
||||
} else {
|
||||
n = parseCommaParts(m.body);
|
||||
n = parseCommaParts2(m.body);
|
||||
if (n.length === 1) {
|
||||
n = expand(n[0], false).map(embrace);
|
||||
n = expand2(n[0], false).map(embrace2);
|
||||
if (n.length === 1) {
|
||||
var post = m.post.length ? expand(m.post, false) : [""];
|
||||
var post = m.post.length ? expand2(m.post, false) : [""];
|
||||
return post.map(function(p) {
|
||||
return m.pre + n[0] + p;
|
||||
});
|
||||
@@ -18756,20 +18756,20 @@ var require_brace_expansion = __commonJS({
|
||||
}
|
||||
}
|
||||
var pre = m.pre;
|
||||
var post = m.post.length ? expand(m.post, false) : [""];
|
||||
var post = m.post.length ? expand2(m.post, false) : [""];
|
||||
var N;
|
||||
if (isSequence) {
|
||||
var x = numeric(n[0]);
|
||||
var y = numeric(n[1]);
|
||||
var x = numeric2(n[0]);
|
||||
var y = numeric2(n[1]);
|
||||
var width = Math.max(n[0].length, n[1].length);
|
||||
var incr = n.length == 3 ? Math.abs(numeric(n[2])) : 1;
|
||||
var test = lte;
|
||||
var incr = n.length == 3 ? Math.abs(numeric2(n[2])) : 1;
|
||||
var test = lte2;
|
||||
var reverse = y < x;
|
||||
if (reverse) {
|
||||
incr *= -1;
|
||||
test = gte;
|
||||
test = gte2;
|
||||
}
|
||||
var pad = n.some(isPadded);
|
||||
var pad = n.some(isPadded2);
|
||||
N = [];
|
||||
for (var i = x; test(i, y); i += incr) {
|
||||
var c;
|
||||
@@ -18794,7 +18794,7 @@ var require_brace_expansion = __commonJS({
|
||||
}
|
||||
} else {
|
||||
N = concatMap(n, function(el) {
|
||||
return expand(el, false);
|
||||
return expand2(el, false);
|
||||
});
|
||||
}
|
||||
for (var j = 0; j < N.length; j++) {
|
||||
@@ -18812,9 +18812,9 @@ var require_brace_expansion = __commonJS({
|
||||
// node_modules/minimatch/minimatch.js
|
||||
var require_minimatch = __commonJS({
|
||||
"node_modules/minimatch/minimatch.js"(exports2, module2) {
|
||||
module2.exports = minimatch2;
|
||||
minimatch2.Minimatch = Minimatch2;
|
||||
var path12 = (function() {
|
||||
module2.exports = minimatch3;
|
||||
minimatch3.Minimatch = Minimatch3;
|
||||
var path13 = (function() {
|
||||
try {
|
||||
return require("path");
|
||||
} catch (e) {
|
||||
@@ -18822,9 +18822,9 @@ var require_minimatch = __commonJS({
|
||||
})() || {
|
||||
sep: "/"
|
||||
};
|
||||
minimatch2.sep = path12.sep;
|
||||
var GLOBSTAR = minimatch2.GLOBSTAR = Minimatch2.GLOBSTAR = {};
|
||||
var expand = require_brace_expansion();
|
||||
minimatch3.sep = path13.sep;
|
||||
var GLOBSTAR2 = minimatch3.GLOBSTAR = Minimatch3.GLOBSTAR = {};
|
||||
var expand2 = require_brace_expansion();
|
||||
var plTypes = {
|
||||
"!": { open: "(?:(?!(?:", close: "))[^/]*?)" },
|
||||
"?": { open: "(?:", close: ")?" },
|
||||
@@ -18832,11 +18832,11 @@ var require_minimatch = __commonJS({
|
||||
"*": { open: "(?:", close: ")*" },
|
||||
"@": { open: "(?:", close: ")" }
|
||||
};
|
||||
var qmark = "[^/]";
|
||||
var star = qmark + "*?";
|
||||
var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";
|
||||
var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?";
|
||||
var reSpecials = charSet("().*{}+?[]^$\\!");
|
||||
var qmark3 = "[^/]";
|
||||
var star3 = qmark3 + "*?";
|
||||
var twoStarDot2 = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";
|
||||
var twoStarNoDot2 = "(?:(?!(?:\\/|^)\\.).)*?";
|
||||
var reSpecials2 = charSet("().*{}+?[]^$\\!");
|
||||
function charSet(s) {
|
||||
return s.split("").reduce(function(set, c) {
|
||||
set[c] = true;
|
||||
@@ -18844,14 +18844,14 @@ var require_minimatch = __commonJS({
|
||||
}, {});
|
||||
}
|
||||
var slashSplit = /\/+/;
|
||||
minimatch2.filter = filter2;
|
||||
function filter2(pattern, options) {
|
||||
minimatch3.filter = filter3;
|
||||
function filter3(pattern, options) {
|
||||
options = options || {};
|
||||
return function(p, i, list) {
|
||||
return minimatch2(p, pattern, options);
|
||||
return minimatch3(p, pattern, options);
|
||||
};
|
||||
}
|
||||
function ext(a, b) {
|
||||
function ext2(a, b) {
|
||||
b = b || {};
|
||||
var t = {};
|
||||
Object.keys(a).forEach(function(k) {
|
||||
@@ -18862,57 +18862,57 @@ var require_minimatch = __commonJS({
|
||||
});
|
||||
return t;
|
||||
}
|
||||
minimatch2.defaults = function(def) {
|
||||
minimatch3.defaults = function(def) {
|
||||
if (!def || typeof def !== "object" || !Object.keys(def).length) {
|
||||
return minimatch2;
|
||||
return minimatch3;
|
||||
}
|
||||
var orig = minimatch2;
|
||||
var m = function minimatch3(p, pattern, options) {
|
||||
return orig(p, pattern, ext(def, options));
|
||||
var orig = minimatch3;
|
||||
var m = function minimatch4(p, pattern, options) {
|
||||
return orig(p, pattern, ext2(def, options));
|
||||
};
|
||||
m.Minimatch = function Minimatch3(pattern, options) {
|
||||
return new orig.Minimatch(pattern, ext(def, options));
|
||||
m.Minimatch = function Minimatch4(pattern, options) {
|
||||
return new orig.Minimatch(pattern, ext2(def, options));
|
||||
};
|
||||
m.Minimatch.defaults = function defaults(options) {
|
||||
return orig.defaults(ext(def, options)).Minimatch;
|
||||
m.Minimatch.defaults = function defaults2(options) {
|
||||
return orig.defaults(ext2(def, options)).Minimatch;
|
||||
};
|
||||
m.filter = function filter3(pattern, options) {
|
||||
return orig.filter(pattern, ext(def, options));
|
||||
m.filter = function filter4(pattern, options) {
|
||||
return orig.filter(pattern, ext2(def, options));
|
||||
};
|
||||
m.defaults = function defaults(options) {
|
||||
return orig.defaults(ext(def, options));
|
||||
m.defaults = function defaults2(options) {
|
||||
return orig.defaults(ext2(def, options));
|
||||
};
|
||||
m.makeRe = function makeRe2(pattern, options) {
|
||||
return orig.makeRe(pattern, ext(def, options));
|
||||
m.makeRe = function makeRe3(pattern, options) {
|
||||
return orig.makeRe(pattern, ext2(def, options));
|
||||
};
|
||||
m.braceExpand = function braceExpand2(pattern, options) {
|
||||
return orig.braceExpand(pattern, ext(def, options));
|
||||
m.braceExpand = function braceExpand3(pattern, options) {
|
||||
return orig.braceExpand(pattern, ext2(def, options));
|
||||
};
|
||||
m.match = function(list, pattern, options) {
|
||||
return orig.match(list, pattern, ext(def, options));
|
||||
return orig.match(list, pattern, ext2(def, options));
|
||||
};
|
||||
return m;
|
||||
};
|
||||
Minimatch2.defaults = function(def) {
|
||||
return minimatch2.defaults(def).Minimatch;
|
||||
Minimatch3.defaults = function(def) {
|
||||
return minimatch3.defaults(def).Minimatch;
|
||||
};
|
||||
function minimatch2(p, pattern, options) {
|
||||
assertValidPattern(pattern);
|
||||
function minimatch3(p, pattern, options) {
|
||||
assertValidPattern2(pattern);
|
||||
if (!options) options = {};
|
||||
if (!options.nocomment && pattern.charAt(0) === "#") {
|
||||
return false;
|
||||
}
|
||||
return new Minimatch2(pattern, options).match(p);
|
||||
return new Minimatch3(pattern, options).match(p);
|
||||
}
|
||||
function Minimatch2(pattern, options) {
|
||||
if (!(this instanceof Minimatch2)) {
|
||||
return new Minimatch2(pattern, options);
|
||||
function Minimatch3(pattern, options) {
|
||||
if (!(this instanceof Minimatch3)) {
|
||||
return new Minimatch3(pattern, options);
|
||||
}
|
||||
assertValidPattern(pattern);
|
||||
assertValidPattern2(pattern);
|
||||
if (!options) options = {};
|
||||
pattern = pattern.trim();
|
||||
if (!options.allowWindowsEscape && path12.sep !== "/") {
|
||||
pattern = pattern.split(path12.sep).join("/");
|
||||
if (!options.allowWindowsEscape && path13.sep !== "/") {
|
||||
pattern = pattern.split(path13.sep).join("/");
|
||||
}
|
||||
this.options = options;
|
||||
this.set = [];
|
||||
@@ -18924,9 +18924,9 @@ var require_minimatch = __commonJS({
|
||||
this.partial = !!options.partial;
|
||||
this.make();
|
||||
}
|
||||
Minimatch2.prototype.debug = function() {
|
||||
Minimatch3.prototype.debug = function() {
|
||||
};
|
||||
Minimatch2.prototype.make = make;
|
||||
Minimatch3.prototype.make = make;
|
||||
function make() {
|
||||
var pattern = this.pattern;
|
||||
var options = this.options;
|
||||
@@ -18958,7 +18958,7 @@ var require_minimatch = __commonJS({
|
||||
this.debug(this.pattern, set);
|
||||
this.set = set;
|
||||
}
|
||||
Minimatch2.prototype.parseNegate = parseNegate;
|
||||
Minimatch3.prototype.parseNegate = parseNegate;
|
||||
function parseNegate() {
|
||||
var pattern = this.pattern;
|
||||
var negate = false;
|
||||
@@ -18972,42 +18972,42 @@ var require_minimatch = __commonJS({
|
||||
if (negateOffset) this.pattern = pattern.substr(negateOffset);
|
||||
this.negate = negate;
|
||||
}
|
||||
minimatch2.braceExpand = function(pattern, options) {
|
||||
return braceExpand(pattern, options);
|
||||
minimatch3.braceExpand = function(pattern, options) {
|
||||
return braceExpand2(pattern, options);
|
||||
};
|
||||
Minimatch2.prototype.braceExpand = braceExpand;
|
||||
function braceExpand(pattern, options) {
|
||||
Minimatch3.prototype.braceExpand = braceExpand2;
|
||||
function braceExpand2(pattern, options) {
|
||||
if (!options) {
|
||||
if (this instanceof Minimatch2) {
|
||||
if (this instanceof Minimatch3) {
|
||||
options = this.options;
|
||||
} else {
|
||||
options = {};
|
||||
}
|
||||
}
|
||||
pattern = typeof pattern === "undefined" ? this.pattern : pattern;
|
||||
assertValidPattern(pattern);
|
||||
assertValidPattern2(pattern);
|
||||
if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
|
||||
return [pattern];
|
||||
}
|
||||
return expand(pattern);
|
||||
return expand2(pattern);
|
||||
}
|
||||
var MAX_PATTERN_LENGTH = 1024 * 64;
|
||||
var assertValidPattern = function(pattern) {
|
||||
var MAX_PATTERN_LENGTH2 = 1024 * 64;
|
||||
var assertValidPattern2 = function(pattern) {
|
||||
if (typeof pattern !== "string") {
|
||||
throw new TypeError("invalid pattern");
|
||||
}
|
||||
if (pattern.length > MAX_PATTERN_LENGTH) {
|
||||
if (pattern.length > MAX_PATTERN_LENGTH2) {
|
||||
throw new TypeError("pattern is too long");
|
||||
}
|
||||
};
|
||||
Minimatch2.prototype.parse = parse4;
|
||||
Minimatch3.prototype.parse = parse4;
|
||||
var SUBPARSE = {};
|
||||
function parse4(pattern, isSub) {
|
||||
assertValidPattern(pattern);
|
||||
assertValidPattern2(pattern);
|
||||
var options = this.options;
|
||||
if (pattern === "**") {
|
||||
if (!options.noglobstar)
|
||||
return GLOBSTAR;
|
||||
return GLOBSTAR2;
|
||||
else
|
||||
pattern = "*";
|
||||
}
|
||||
@@ -19027,11 +19027,11 @@ var require_minimatch = __commonJS({
|
||||
if (stateChar) {
|
||||
switch (stateChar) {
|
||||
case "*":
|
||||
re += star;
|
||||
re += star3;
|
||||
hasMagic = true;
|
||||
break;
|
||||
case "?":
|
||||
re += qmark;
|
||||
re += qmark3;
|
||||
hasMagic = true;
|
||||
break;
|
||||
default:
|
||||
@@ -19044,7 +19044,7 @@ var require_minimatch = __commonJS({
|
||||
}
|
||||
for (var i = 0, len = pattern.length, c; i < len && (c = pattern.charAt(i)); i++) {
|
||||
this.debug("%s %s %s %j", pattern, i, re, c);
|
||||
if (escaping && reSpecials[c]) {
|
||||
if (escaping && reSpecials2[c]) {
|
||||
re += "\\" + c;
|
||||
escaping = false;
|
||||
continue;
|
||||
@@ -19156,7 +19156,7 @@ var require_minimatch = __commonJS({
|
||||
clearStateChar();
|
||||
if (escaping) {
|
||||
escaping = false;
|
||||
} else if (reSpecials[c] && !(c === "^" && inClass)) {
|
||||
} else if (reSpecials2[c] && !(c === "^" && inClass)) {
|
||||
re += "\\";
|
||||
}
|
||||
re += c;
|
||||
@@ -19178,7 +19178,7 @@ var require_minimatch = __commonJS({
|
||||
return $1 + $1 + $2 + "|";
|
||||
});
|
||||
this.debug("tail=%j\n %s", tail, tail, pl, re);
|
||||
var t = pl.type === "*" ? star : pl.type === "?" ? qmark : "\\" + pl.type;
|
||||
var t = pl.type === "*" ? star3 : pl.type === "?" ? qmark3 : "\\" + pl.type;
|
||||
hasMagic = true;
|
||||
re = re.slice(0, pl.reStart) + t + "\\(" + tail;
|
||||
}
|
||||
@@ -19186,12 +19186,12 @@ var require_minimatch = __commonJS({
|
||||
if (escaping) {
|
||||
re += "\\\\";
|
||||
}
|
||||
var addPatternStart = false;
|
||||
var addPatternStart2 = false;
|
||||
switch (re.charAt(0)) {
|
||||
case "[":
|
||||
case ".":
|
||||
case "(":
|
||||
addPatternStart = true;
|
||||
addPatternStart2 = true;
|
||||
}
|
||||
for (var n = negativeLists.length - 1; n > -1; n--) {
|
||||
var nl = negativeLists[n];
|
||||
@@ -19216,7 +19216,7 @@ var require_minimatch = __commonJS({
|
||||
if (re !== "" && hasMagic) {
|
||||
re = "(?=.)" + re;
|
||||
}
|
||||
if (addPatternStart) {
|
||||
if (addPatternStart2) {
|
||||
re = patternStart + re;
|
||||
}
|
||||
if (isSub === SUBPARSE) {
|
||||
@@ -19235,11 +19235,11 @@ var require_minimatch = __commonJS({
|
||||
regExp._src = re;
|
||||
return regExp;
|
||||
}
|
||||
minimatch2.makeRe = function(pattern, options) {
|
||||
return new Minimatch2(pattern, options || {}).makeRe();
|
||||
minimatch3.makeRe = function(pattern, options) {
|
||||
return new Minimatch3(pattern, options || {}).makeRe();
|
||||
};
|
||||
Minimatch2.prototype.makeRe = makeRe;
|
||||
function makeRe() {
|
||||
Minimatch3.prototype.makeRe = makeRe2;
|
||||
function makeRe2() {
|
||||
if (this.regexp || this.regexp === false) return this.regexp;
|
||||
var set = this.set;
|
||||
if (!set.length) {
|
||||
@@ -19247,11 +19247,11 @@ var require_minimatch = __commonJS({
|
||||
return this.regexp;
|
||||
}
|
||||
var options = this.options;
|
||||
var twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;
|
||||
var twoStar = options.noglobstar ? star3 : options.dot ? twoStarDot2 : twoStarNoDot2;
|
||||
var flags = options.nocase ? "i" : "";
|
||||
var re = set.map(function(pattern) {
|
||||
return pattern.map(function(p) {
|
||||
return p === GLOBSTAR ? twoStar : typeof p === "string" ? regExpEscape(p) : p._src;
|
||||
return p === GLOBSTAR2 ? twoStar : typeof p === "string" ? regExpEscape3(p) : p._src;
|
||||
}).join("\\/");
|
||||
}).join("|");
|
||||
re = "^(?:" + re + ")$";
|
||||
@@ -19263,9 +19263,9 @@ var require_minimatch = __commonJS({
|
||||
}
|
||||
return this.regexp;
|
||||
}
|
||||
minimatch2.match = function(list, pattern, options) {
|
||||
minimatch3.match = function(list, pattern, options) {
|
||||
options = options || {};
|
||||
var mm = new Minimatch2(pattern, options);
|
||||
var mm = new Minimatch3(pattern, options);
|
||||
list = list.filter(function(f) {
|
||||
return mm.match(f);
|
||||
});
|
||||
@@ -19274,15 +19274,15 @@ var require_minimatch = __commonJS({
|
||||
}
|
||||
return list;
|
||||
};
|
||||
Minimatch2.prototype.match = function match2(f, partial) {
|
||||
Minimatch3.prototype.match = function match4(f, partial) {
|
||||
if (typeof partial === "undefined") partial = this.partial;
|
||||
this.debug("match", f, this.pattern);
|
||||
if (this.comment) return false;
|
||||
if (this.empty) return f === "";
|
||||
if (f === "/" && partial) return true;
|
||||
var options = this.options;
|
||||
if (path12.sep !== "/") {
|
||||
f = f.split(path12.sep).join("/");
|
||||
if (path13.sep !== "/") {
|
||||
f = f.split(path13.sep).join("/");
|
||||
}
|
||||
f = f.split(slashSplit);
|
||||
this.debug(this.pattern, "split", f);
|
||||
@@ -19309,7 +19309,7 @@ var require_minimatch = __commonJS({
|
||||
if (options.flipNegate) return false;
|
||||
return this.negate;
|
||||
};
|
||||
Minimatch2.prototype.matchOne = function(file, pattern, partial) {
|
||||
Minimatch3.prototype.matchOne = function(file, pattern, partial) {
|
||||
var options = this.options;
|
||||
this.debug(
|
||||
"matchOne",
|
||||
@@ -19322,7 +19322,7 @@ var require_minimatch = __commonJS({
|
||||
var f = file[fi];
|
||||
this.debug(pattern, p, f);
|
||||
if (p === false) return false;
|
||||
if (p === GLOBSTAR) {
|
||||
if (p === GLOBSTAR2) {
|
||||
this.debug("GLOBSTAR", [pattern, p, f]);
|
||||
var fr = fi;
|
||||
var pr = pi + 1;
|
||||
@@ -19376,7 +19376,7 @@ var require_minimatch = __commonJS({
|
||||
function globUnescape(s) {
|
||||
return s.replace(/\\(.)/g, "$1");
|
||||
}
|
||||
function regExpEscape(s) {
|
||||
function regExpEscape3(s) {
|
||||
return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
}
|
||||
}
|
||||
@@ -19535,13 +19535,13 @@ var require_parse_options = __commonJS({
|
||||
var require_identifiers = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/internal/identifiers.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var numeric = /^[0-9]+$/;
|
||||
var numeric2 = /^[0-9]+$/;
|
||||
var compareIdentifiers = (a, b) => {
|
||||
if (typeof a === "number" && typeof b === "number") {
|
||||
return a === b ? 0 : a < b ? -1 : 1;
|
||||
}
|
||||
const anum = numeric.test(a);
|
||||
const bnum = numeric.test(b);
|
||||
const anum = numeric2.test(a);
|
||||
const bnum = numeric2.test(b);
|
||||
if (anum && bnum) {
|
||||
a = +a;
|
||||
b = +b;
|
||||
@@ -19725,8 +19725,8 @@ var require_semver = __commonJS({
|
||||
throw new Error("invalid increment argument: identifier is empty");
|
||||
}
|
||||
if (identifier) {
|
||||
const match2 = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
|
||||
if (!match2 || match2[1] !== identifier) {
|
||||
const match4 = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
|
||||
if (!match4 || match4[1] !== identifier) {
|
||||
throw new Error(`invalid identifier: ${identifier}`);
|
||||
}
|
||||
}
|
||||
@@ -20103,8 +20103,8 @@ var require_gte = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/functions/gte.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var compare2 = require_compare();
|
||||
var gte = (a, b, loose) => compare2(a, b, loose) >= 0;
|
||||
module2.exports = gte;
|
||||
var gte2 = (a, b, loose) => compare2(a, b, loose) >= 0;
|
||||
module2.exports = gte2;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -20113,8 +20113,8 @@ var require_lte = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/functions/lte.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var compare2 = require_compare();
|
||||
var lte = (a, b, loose) => compare2(a, b, loose) <= 0;
|
||||
module2.exports = lte;
|
||||
var lte2 = (a, b, loose) => compare2(a, b, loose) <= 0;
|
||||
module2.exports = lte2;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -20125,9 +20125,9 @@ var require_cmp = __commonJS({
|
||||
var eq2 = require_eq();
|
||||
var neq = require_neq();
|
||||
var gt2 = require_gt();
|
||||
var gte = require_gte();
|
||||
var gte2 = require_gte();
|
||||
var lt2 = require_lt();
|
||||
var lte = require_lte();
|
||||
var lte2 = require_lte();
|
||||
var cmp = (a, op, b, loose) => {
|
||||
switch (op) {
|
||||
case "===":
|
||||
@@ -20155,11 +20155,11 @@ var require_cmp = __commonJS({
|
||||
case ">":
|
||||
return gt2(a, b, loose);
|
||||
case ">=":
|
||||
return gte(a, b, loose);
|
||||
return gte2(a, b, loose);
|
||||
case "<":
|
||||
return lt2(a, b, loose);
|
||||
case "<=":
|
||||
return lte(a, b, loose);
|
||||
return lte2(a, b, loose);
|
||||
default:
|
||||
throw new TypeError(`Invalid operator: ${op}`);
|
||||
}
|
||||
@@ -20186,28 +20186,28 @@ var require_coerce = __commonJS({
|
||||
return null;
|
||||
}
|
||||
options = options || {};
|
||||
let match2 = null;
|
||||
let match4 = null;
|
||||
if (!options.rtl) {
|
||||
match2 = version3.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
|
||||
match4 = version3.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
|
||||
} else {
|
||||
const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
|
||||
let next;
|
||||
while ((next = coerceRtlRegex.exec(version3)) && (!match2 || match2.index + match2[0].length !== version3.length)) {
|
||||
if (!match2 || next.index + next[0].length !== match2.index + match2[0].length) {
|
||||
match2 = next;
|
||||
while ((next = coerceRtlRegex.exec(version3)) && (!match4 || match4.index + match4[0].length !== version3.length)) {
|
||||
if (!match4 || next.index + next[0].length !== match4.index + match4[0].length) {
|
||||
match4 = next;
|
||||
}
|
||||
coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
|
||||
}
|
||||
coerceRtlRegex.lastIndex = -1;
|
||||
}
|
||||
if (match2 === null) {
|
||||
if (match4 === null) {
|
||||
return null;
|
||||
}
|
||||
const major2 = match2[2];
|
||||
const minor2 = match2[3] || "0";
|
||||
const patch2 = match2[4] || "0";
|
||||
const prerelease = options.includePrerelease && match2[5] ? `-${match2[5]}` : "";
|
||||
const build = options.includePrerelease && match2[6] ? `+${match2[6]}` : "";
|
||||
const major2 = match4[2];
|
||||
const minor2 = match4[3] || "0";
|
||||
const patch2 = match4[4] || "0";
|
||||
const prerelease = options.includePrerelease && match4[5] ? `-${match4[5]}` : "";
|
||||
const build = options.includePrerelease && match4[6] ? `+${match4[6]}` : "";
|
||||
return parse4(`${major2}.${minor2}.${patch2}${prerelease}${build}`, options);
|
||||
};
|
||||
module2.exports = coerce;
|
||||
@@ -20258,25 +20258,25 @@ var require_range = __commonJS({
|
||||
"use strict";
|
||||
var SPACE_CHARACTERS = /\s+/g;
|
||||
var Range = class _Range {
|
||||
constructor(range2, options) {
|
||||
constructor(range3, options) {
|
||||
options = parseOptions(options);
|
||||
if (range2 instanceof _Range) {
|
||||
if (range2.loose === !!options.loose && range2.includePrerelease === !!options.includePrerelease) {
|
||||
return range2;
|
||||
if (range3 instanceof _Range) {
|
||||
if (range3.loose === !!options.loose && range3.includePrerelease === !!options.includePrerelease) {
|
||||
return range3;
|
||||
} else {
|
||||
return new _Range(range2.raw, options);
|
||||
return new _Range(range3.raw, options);
|
||||
}
|
||||
}
|
||||
if (range2 instanceof Comparator) {
|
||||
this.raw = range2.value;
|
||||
this.set = [[range2]];
|
||||
if (range3 instanceof Comparator) {
|
||||
this.raw = range3.value;
|
||||
this.set = [[range3]];
|
||||
this.formatted = void 0;
|
||||
return this;
|
||||
}
|
||||
this.options = options;
|
||||
this.loose = !!options.loose;
|
||||
this.includePrerelease = !!options.includePrerelease;
|
||||
this.raw = range2.trim().replace(SPACE_CHARACTERS, " ");
|
||||
this.raw = range3.trim().replace(SPACE_CHARACTERS, " ");
|
||||
this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
|
||||
if (!this.set.length) {
|
||||
throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
|
||||
@@ -20321,24 +20321,24 @@ var require_range = __commonJS({
|
||||
toString() {
|
||||
return this.range;
|
||||
}
|
||||
parseRange(range2) {
|
||||
parseRange(range3) {
|
||||
const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
|
||||
const memoKey = memoOpts + ":" + range2;
|
||||
const memoKey = memoOpts + ":" + range3;
|
||||
const cached = cache.get(memoKey);
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
const loose = this.options.loose;
|
||||
const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
|
||||
range2 = range2.replace(hr, hyphenReplace(this.options.includePrerelease));
|
||||
debug3("hyphen replace", range2);
|
||||
range2 = range2.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
|
||||
debug3("comparator trim", range2);
|
||||
range2 = range2.replace(re[t.TILDETRIM], tildeTrimReplace);
|
||||
debug3("tilde trim", range2);
|
||||
range2 = range2.replace(re[t.CARETTRIM], caretTrimReplace);
|
||||
debug3("caret trim", range2);
|
||||
let rangeList = range2.split(" ").map((comp26) => parseComparator(comp26, this.options)).join(" ").split(/\s+/).map((comp26) => replaceGTE0(comp26, this.options));
|
||||
range3 = range3.replace(hr, hyphenReplace(this.options.includePrerelease));
|
||||
debug3("hyphen replace", range3);
|
||||
range3 = range3.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
|
||||
debug3("comparator trim", range3);
|
||||
range3 = range3.replace(re[t.TILDETRIM], tildeTrimReplace);
|
||||
debug3("tilde trim", range3);
|
||||
range3 = range3.replace(re[t.CARETTRIM], caretTrimReplace);
|
||||
debug3("caret trim", range3);
|
||||
let rangeList = range3.split(" ").map((comp26) => parseComparator(comp26, this.options)).join(" ").split(/\s+/).map((comp26) => replaceGTE0(comp26, this.options));
|
||||
if (loose) {
|
||||
rangeList = rangeList.filter((comp26) => {
|
||||
debug3("loose invalid filter", comp26, this.options);
|
||||
@@ -20361,12 +20361,12 @@ var require_range = __commonJS({
|
||||
cache.set(memoKey, result);
|
||||
return result;
|
||||
}
|
||||
intersects(range2, options) {
|
||||
if (!(range2 instanceof _Range)) {
|
||||
intersects(range3, options) {
|
||||
if (!(range3 instanceof _Range)) {
|
||||
throw new TypeError("a Range is required");
|
||||
}
|
||||
return this.set.some((thisComparators) => {
|
||||
return isSatisfiable(thisComparators, options) && range2.set.some((rangeComparators) => {
|
||||
return isSatisfiable(thisComparators, options) && range3.set.some((rangeComparators) => {
|
||||
return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
|
||||
return rangeComparators.every((rangeComparator) => {
|
||||
return thisComparator.intersects(rangeComparator, options);
|
||||
@@ -20747,13 +20747,13 @@ var require_satisfies = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/functions/satisfies.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var Range = require_range();
|
||||
var satisfies2 = (version3, range2, options) => {
|
||||
var satisfies2 = (version3, range3, options) => {
|
||||
try {
|
||||
range2 = new Range(range2, options);
|
||||
range3 = new Range(range3, options);
|
||||
} catch (er) {
|
||||
return false;
|
||||
}
|
||||
return range2.test(version3);
|
||||
return range3.test(version3);
|
||||
};
|
||||
module2.exports = satisfies2;
|
||||
}
|
||||
@@ -20764,7 +20764,7 @@ var require_to_comparators = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/ranges/to-comparators.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var Range = require_range();
|
||||
var toComparators = (range2, options) => new Range(range2, options).set.map((comp26) => comp26.map((c) => c.value).join(" ").trim().split(" "));
|
||||
var toComparators = (range3, options) => new Range(range3, options).set.map((comp26) => comp26.map((c) => c.value).join(" ").trim().split(" "));
|
||||
module2.exports = toComparators;
|
||||
}
|
||||
});
|
||||
@@ -20775,12 +20775,12 @@ var require_max_satisfying = __commonJS({
|
||||
"use strict";
|
||||
var SemVer = require_semver();
|
||||
var Range = require_range();
|
||||
var maxSatisfying2 = (versions, range2, options) => {
|
||||
var maxSatisfying2 = (versions, range3, options) => {
|
||||
let max = null;
|
||||
let maxSV = null;
|
||||
let rangeObj = null;
|
||||
try {
|
||||
rangeObj = new Range(range2, options);
|
||||
rangeObj = new Range(range3, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
@@ -20804,12 +20804,12 @@ var require_min_satisfying = __commonJS({
|
||||
"use strict";
|
||||
var SemVer = require_semver();
|
||||
var Range = require_range();
|
||||
var minSatisfying2 = (versions, range2, options) => {
|
||||
var minSatisfying2 = (versions, range3, options) => {
|
||||
let min = null;
|
||||
let minSV = null;
|
||||
let rangeObj = null;
|
||||
try {
|
||||
rangeObj = new Range(range2, options);
|
||||
rangeObj = new Range(range3, options);
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
@@ -20834,19 +20834,19 @@ var require_min_version = __commonJS({
|
||||
var SemVer = require_semver();
|
||||
var Range = require_range();
|
||||
var gt2 = require_gt();
|
||||
var minVersion = (range2, loose) => {
|
||||
range2 = new Range(range2, loose);
|
||||
var minVersion = (range3, loose) => {
|
||||
range3 = new Range(range3, loose);
|
||||
let minver = new SemVer("0.0.0");
|
||||
if (range2.test(minver)) {
|
||||
if (range3.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
minver = new SemVer("0.0.0-0");
|
||||
if (range2.test(minver)) {
|
||||
if (range3.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
minver = null;
|
||||
for (let i = 0; i < range2.set.length; ++i) {
|
||||
const comparators = range2.set[i];
|
||||
for (let i = 0; i < range3.set.length; ++i) {
|
||||
const comparators = range3.set[i];
|
||||
let setMin = null;
|
||||
comparators.forEach((comparator) => {
|
||||
const compver = new SemVer(comparator.semver.version);
|
||||
@@ -20877,7 +20877,7 @@ var require_min_version = __commonJS({
|
||||
minver = setMin;
|
||||
}
|
||||
}
|
||||
if (minver && range2.test(minver)) {
|
||||
if (minver && range3.test(minver)) {
|
||||
return minver;
|
||||
}
|
||||
return null;
|
||||
@@ -20891,9 +20891,9 @@ var require_valid2 = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/ranges/valid.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var Range = require_range();
|
||||
var validRange2 = (range2, options) => {
|
||||
var validRange2 = (range3, options) => {
|
||||
try {
|
||||
return new Range(range2, options).range || "*";
|
||||
return new Range(range3, options).range || "*";
|
||||
} catch (er) {
|
||||
return null;
|
||||
}
|
||||
@@ -20913,23 +20913,23 @@ var require_outside = __commonJS({
|
||||
var satisfies2 = require_satisfies();
|
||||
var gt2 = require_gt();
|
||||
var lt2 = require_lt();
|
||||
var lte = require_lte();
|
||||
var gte = require_gte();
|
||||
var outside = (version3, range2, hilo, options) => {
|
||||
var lte2 = require_lte();
|
||||
var gte2 = require_gte();
|
||||
var outside = (version3, range3, hilo, options) => {
|
||||
version3 = new SemVer(version3, options);
|
||||
range2 = new Range(range2, options);
|
||||
range3 = new Range(range3, options);
|
||||
let gtfn, ltefn, ltfn, comp26, ecomp;
|
||||
switch (hilo) {
|
||||
case ">":
|
||||
gtfn = gt2;
|
||||
ltefn = lte;
|
||||
ltefn = lte2;
|
||||
ltfn = lt2;
|
||||
comp26 = ">";
|
||||
ecomp = ">=";
|
||||
break;
|
||||
case "<":
|
||||
gtfn = lt2;
|
||||
ltefn = gte;
|
||||
ltefn = gte2;
|
||||
ltfn = gt2;
|
||||
comp26 = "<";
|
||||
ecomp = "<=";
|
||||
@@ -20937,11 +20937,11 @@ var require_outside = __commonJS({
|
||||
default:
|
||||
throw new TypeError('Must provide a hilo val of "<" or ">"');
|
||||
}
|
||||
if (satisfies2(version3, range2, options)) {
|
||||
if (satisfies2(version3, range3, options)) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < range2.set.length; ++i) {
|
||||
const comparators = range2.set[i];
|
||||
for (let i = 0; i < range3.set.length; ++i) {
|
||||
const comparators = range3.set[i];
|
||||
let high = null;
|
||||
let low = null;
|
||||
comparators.forEach((comparator) => {
|
||||
@@ -20976,7 +20976,7 @@ var require_gtr = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/ranges/gtr.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var outside = require_outside();
|
||||
var gtr = (version3, range2, options) => outside(version3, range2, ">", options);
|
||||
var gtr = (version3, range3, options) => outside(version3, range3, ">", options);
|
||||
module2.exports = gtr;
|
||||
}
|
||||
});
|
||||
@@ -20986,7 +20986,7 @@ var require_ltr = __commonJS({
|
||||
"node_modules/@actions/cache/node_modules/semver/ranges/ltr.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var outside = require_outside();
|
||||
var ltr = (version3, range2, options) => outside(version3, range2, "<", options);
|
||||
var ltr = (version3, range3, options) => outside(version3, range3, "<", options);
|
||||
module2.exports = ltr;
|
||||
}
|
||||
});
|
||||
@@ -21011,13 +21011,13 @@ var require_simplify = __commonJS({
|
||||
"use strict";
|
||||
var satisfies2 = require_satisfies();
|
||||
var compare2 = require_compare();
|
||||
module2.exports = (versions, range2, options) => {
|
||||
module2.exports = (versions, range3, options) => {
|
||||
const set = [];
|
||||
let first = null;
|
||||
let prev = null;
|
||||
const v = versions.sort((a, b) => compare2(a, b, options));
|
||||
for (const version3 of v) {
|
||||
const included = satisfies2(version3, range2, options);
|
||||
const included = satisfies2(version3, range3, options);
|
||||
if (included) {
|
||||
prev = version3;
|
||||
if (!first) {
|
||||
@@ -21049,8 +21049,8 @@ var require_simplify = __commonJS({
|
||||
}
|
||||
}
|
||||
const simplified = ranges.join(" || ");
|
||||
const original = typeof range2.raw === "string" ? range2.raw : String(range2);
|
||||
return simplified.length < original.length ? simplified : range2;
|
||||
const original = typeof range3.raw === "string" ? range3.raw : String(range3);
|
||||
return simplified.length < original.length ? simplified : range3;
|
||||
};
|
||||
}
|
||||
});
|
||||
@@ -21244,8 +21244,8 @@ var require_semver2 = __commonJS({
|
||||
var lt2 = require_lt();
|
||||
var eq2 = require_eq();
|
||||
var neq = require_neq();
|
||||
var gte = require_gte();
|
||||
var lte = require_lte();
|
||||
var gte2 = require_gte();
|
||||
var lte2 = require_lte();
|
||||
var cmp = require_cmp();
|
||||
var coerce = require_coerce();
|
||||
var Comparator = require_comparator();
|
||||
@@ -21282,8 +21282,8 @@ var require_semver2 = __commonJS({
|
||||
lt: lt2,
|
||||
eq: eq2,
|
||||
neq,
|
||||
gte,
|
||||
lte,
|
||||
gte: gte2,
|
||||
lte: lte2,
|
||||
cmp,
|
||||
coerce,
|
||||
Comparator,
|
||||
@@ -21338,14 +21338,14 @@ var require_ms = __commonJS({
|
||||
if (str.length > 100) {
|
||||
return;
|
||||
}
|
||||
var match2 = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
|
||||
var match4 = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
|
||||
str
|
||||
);
|
||||
if (!match2) {
|
||||
if (!match4) {
|
||||
return;
|
||||
}
|
||||
var n = parseFloat(match2[1]);
|
||||
var type = (match2[2] || "ms").toLowerCase();
|
||||
var n = parseFloat(match4[1]);
|
||||
var type = (match4[2] || "ms").toLowerCase();
|
||||
switch (type) {
|
||||
case "years":
|
||||
case "year":
|
||||
@@ -21476,19 +21476,19 @@ var require_common = __commonJS({
|
||||
args.unshift("%O");
|
||||
}
|
||||
let index = 0;
|
||||
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match2, format) => {
|
||||
if (match2 === "%%") {
|
||||
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match4, format) => {
|
||||
if (match4 === "%%") {
|
||||
return "%";
|
||||
}
|
||||
index++;
|
||||
const formatter = createDebug.formatters[format];
|
||||
if (typeof formatter === "function") {
|
||||
const val = args[index];
|
||||
match2 = formatter.call(self2, val);
|
||||
match4 = formatter.call(self2, val);
|
||||
args.splice(index, 1);
|
||||
index--;
|
||||
}
|
||||
return match2;
|
||||
return match4;
|
||||
});
|
||||
createDebug.formatArgs.call(self2, args);
|
||||
const logFn = self2.log || createDebug.log;
|
||||
@@ -21708,12 +21708,12 @@ var require_browser = __commonJS({
|
||||
args.splice(1, 0, c, "color: inherit");
|
||||
let index = 0;
|
||||
let lastC = 0;
|
||||
args[0].replace(/%[a-zA-Z%]/g, (match2) => {
|
||||
if (match2 === "%%") {
|
||||
args[0].replace(/%[a-zA-Z%]/g, (match4) => {
|
||||
if (match4 === "%%") {
|
||||
return;
|
||||
}
|
||||
index++;
|
||||
if (match2 === "%c") {
|
||||
if (match4 === "%c") {
|
||||
lastC = index;
|
||||
}
|
||||
});
|
||||
@@ -22691,7 +22691,7 @@ var require_package = __commonJS({
|
||||
"node_modules/@actions/cache/package.json"(exports2, module2) {
|
||||
module2.exports = {
|
||||
name: "@actions/cache",
|
||||
version: "6.1.0",
|
||||
version: "6.2.0",
|
||||
description: "Actions cache lib",
|
||||
keywords: [
|
||||
"github",
|
||||
@@ -23844,9 +23844,9 @@ var require_json_format_contract = __commonJS({
|
||||
}
|
||||
exports2.jsonWriteOptions = jsonWriteOptions;
|
||||
function mergeJsonOptions(a, b) {
|
||||
var _a, _b;
|
||||
var _a2, _b;
|
||||
let c = Object.assign(Object.assign({}, a), b);
|
||||
c.typeRegistry = [...(_a = a === null || a === void 0 ? void 0 : a.typeRegistry) !== null && _a !== void 0 ? _a : [], ...(_b = b === null || b === void 0 ? void 0 : b.typeRegistry) !== null && _b !== void 0 ? _b : []];
|
||||
c.typeRegistry = [...(_a2 = a === null || a === void 0 ? void 0 : a.typeRegistry) !== null && _a2 !== void 0 ? _a2 : [], ...(_b = b === null || b === void 0 ? void 0 : b.typeRegistry) !== null && _b !== void 0 ? _b : []];
|
||||
return c;
|
||||
}
|
||||
exports2.mergeJsonOptions = mergeJsonOptions;
|
||||
@@ -23932,8 +23932,8 @@ var require_reflection_info = __commonJS({
|
||||
RepeatType2[RepeatType2["UNPACKED"] = 2] = "UNPACKED";
|
||||
})(RepeatType = exports2.RepeatType || (exports2.RepeatType = {}));
|
||||
function normalizeFieldInfo(field) {
|
||||
var _a, _b, _c, _d;
|
||||
field.localName = (_a = field.localName) !== null && _a !== void 0 ? _a : lower_camel_case_1.lowerCamelCase(field.name);
|
||||
var _a2, _b, _c, _d;
|
||||
field.localName = (_a2 = field.localName) !== null && _a2 !== void 0 ? _a2 : lower_camel_case_1.lowerCamelCase(field.name);
|
||||
field.jsonName = (_b = field.jsonName) !== null && _b !== void 0 ? _b : lower_camel_case_1.lowerCamelCase(field.name);
|
||||
field.repeat = (_c = field.repeat) !== null && _c !== void 0 ? _c : RepeatType.NO;
|
||||
field.opt = (_d = field.opt) !== null && _d !== void 0 ? _d : field.repeat ? false : field.oneof ? false : field.kind == "message";
|
||||
@@ -23941,14 +23941,14 @@ var require_reflection_info = __commonJS({
|
||||
}
|
||||
exports2.normalizeFieldInfo = normalizeFieldInfo;
|
||||
function readFieldOptions(messageType, fieldName, extensionName, extensionType) {
|
||||
var _a;
|
||||
const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;
|
||||
var _a2;
|
||||
const options = (_a2 = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a2 === void 0 ? void 0 : _a2.options;
|
||||
return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : void 0;
|
||||
}
|
||||
exports2.readFieldOptions = readFieldOptions;
|
||||
function readFieldOption(messageType, fieldName, extensionName, extensionType) {
|
||||
var _a;
|
||||
const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;
|
||||
var _a2;
|
||||
const options = (_a2 = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a2 === void 0 ? void 0 : _a2.options;
|
||||
if (!options) {
|
||||
return void 0;
|
||||
}
|
||||
@@ -24044,8 +24044,8 @@ var require_reflection_type_check = __commonJS({
|
||||
var oneof_1 = require_oneof();
|
||||
var ReflectionTypeCheck = class {
|
||||
constructor(info3) {
|
||||
var _a;
|
||||
this.fields = (_a = info3.fields) !== null && _a !== void 0 ? _a : [];
|
||||
var _a2;
|
||||
this.fields = (_a2 = info3.fields) !== null && _a2 !== void 0 ? _a2 : [];
|
||||
}
|
||||
prepare() {
|
||||
if (this.data)
|
||||
@@ -24295,10 +24295,10 @@ var require_reflection_json_reader = __commonJS({
|
||||
this.info = info3;
|
||||
}
|
||||
prepare() {
|
||||
var _a;
|
||||
var _a2;
|
||||
if (this.fMap === void 0) {
|
||||
this.fMap = {};
|
||||
const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];
|
||||
const fieldsInput = (_a2 = this.info.fields) !== null && _a2 !== void 0 ? _a2 : [];
|
||||
for (const field of fieldsInput) {
|
||||
this.fMap[field.name] = field;
|
||||
this.fMap[field.jsonName] = field;
|
||||
@@ -24589,8 +24589,8 @@ var require_reflection_json_writer = __commonJS({
|
||||
var assert_1 = require_assert();
|
||||
var ReflectionJsonWriter = class {
|
||||
constructor(info3) {
|
||||
var _a;
|
||||
this.fields = (_a = info3.fields) !== null && _a !== void 0 ? _a : [];
|
||||
var _a2;
|
||||
this.fields = (_a2 = info3.fields) !== null && _a2 !== void 0 ? _a2 : [];
|
||||
}
|
||||
/**
|
||||
* Converts the message to a JSON object, based on the field descriptors.
|
||||
@@ -24847,9 +24847,9 @@ var require_reflection_binary_reader = __commonJS({
|
||||
this.info = info3;
|
||||
}
|
||||
prepare() {
|
||||
var _a;
|
||||
var _a2;
|
||||
if (!this.fieldNoToField) {
|
||||
const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];
|
||||
const fieldsInput = (_a2 = this.info.fields) !== null && _a2 !== void 0 ? _a2 : [];
|
||||
this.fieldNoToField = new Map(fieldsInput.map((field) => [field.no, field]));
|
||||
}
|
||||
}
|
||||
@@ -25517,9 +25517,9 @@ var require_message_type = __commonJS({
|
||||
* This is equivalent to `JSON.stringify(T.toJson(t))`
|
||||
*/
|
||||
toJsonString(message, options) {
|
||||
var _a;
|
||||
var _a2;
|
||||
let value = this.toJson(message, options);
|
||||
return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);
|
||||
return JSON.stringify(value, null, (_a2 = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a2 !== void 0 ? _a2 : 0);
|
||||
}
|
||||
/**
|
||||
* Write the message to binary format.
|
||||
@@ -25845,10 +25845,10 @@ var require_reflection_info2 = __commonJS({
|
||||
exports2.readServiceOption = exports2.readMethodOption = exports2.readMethodOptions = exports2.normalizeMethodInfo = void 0;
|
||||
var runtime_1 = require_commonjs();
|
||||
function normalizeMethodInfo(method, service) {
|
||||
var _a, _b, _c;
|
||||
var _a2, _b, _c;
|
||||
let m = method;
|
||||
m.service = service;
|
||||
m.localName = (_a = m.localName) !== null && _a !== void 0 ? _a : runtime_1.lowerCamelCase(m.name);
|
||||
m.localName = (_a2 = m.localName) !== null && _a2 !== void 0 ? _a2 : runtime_1.lowerCamelCase(m.name);
|
||||
m.serverStreaming = !!m.serverStreaming;
|
||||
m.clientStreaming = !!m.clientStreaming;
|
||||
m.options = (_b = m.options) !== null && _b !== void 0 ? _b : {};
|
||||
@@ -25857,14 +25857,14 @@ var require_reflection_info2 = __commonJS({
|
||||
}
|
||||
exports2.normalizeMethodInfo = normalizeMethodInfo;
|
||||
function readMethodOptions(service, methodName, extensionName, extensionType) {
|
||||
var _a;
|
||||
const options = (_a = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a === void 0 ? void 0 : _a.options;
|
||||
var _a2;
|
||||
const options = (_a2 = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a2 === void 0 ? void 0 : _a2.options;
|
||||
return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : void 0;
|
||||
}
|
||||
exports2.readMethodOptions = readMethodOptions;
|
||||
function readMethodOption(service, methodName, extensionName, extensionType) {
|
||||
var _a;
|
||||
const options = (_a = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a === void 0 ? void 0 : _a.options;
|
||||
var _a2;
|
||||
const options = (_a2 = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a2 === void 0 ? void 0 : _a2.options;
|
||||
if (!options) {
|
||||
return void 0;
|
||||
}
|
||||
@@ -25953,28 +25953,28 @@ var require_rpc_options = __commonJS({
|
||||
Object.defineProperty(exports2, "__esModule", { value: true });
|
||||
exports2.mergeRpcOptions = void 0;
|
||||
var runtime_1 = require_commonjs();
|
||||
function mergeRpcOptions(defaults, options) {
|
||||
function mergeRpcOptions(defaults2, options) {
|
||||
if (!options)
|
||||
return defaults;
|
||||
return defaults2;
|
||||
let o = {};
|
||||
copy(defaults, o);
|
||||
copy(defaults2, o);
|
||||
copy(options, o);
|
||||
for (let key of Object.keys(options)) {
|
||||
let val = options[key];
|
||||
switch (key) {
|
||||
case "jsonOptions":
|
||||
o.jsonOptions = runtime_1.mergeJsonOptions(defaults.jsonOptions, o.jsonOptions);
|
||||
o.jsonOptions = runtime_1.mergeJsonOptions(defaults2.jsonOptions, o.jsonOptions);
|
||||
break;
|
||||
case "binaryOptions":
|
||||
o.binaryOptions = runtime_1.mergeBinaryOptions(defaults.binaryOptions, o.binaryOptions);
|
||||
o.binaryOptions = runtime_1.mergeBinaryOptions(defaults2.binaryOptions, o.binaryOptions);
|
||||
break;
|
||||
case "meta":
|
||||
o.meta = {};
|
||||
copy(defaults.meta, o.meta);
|
||||
copy(defaults2.meta, o.meta);
|
||||
copy(options.meta, o.meta);
|
||||
break;
|
||||
case "interceptors":
|
||||
o.interceptors = defaults.interceptors ? defaults.interceptors.concat(val) : val.concat();
|
||||
o.interceptors = defaults2.interceptors ? defaults2.interceptors.concat(val) : val.concat();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -26587,8 +26587,8 @@ var require_test_transport = __commonJS({
|
||||
}
|
||||
// Creates a promise for response headers from the mock data.
|
||||
promiseHeaders() {
|
||||
var _a;
|
||||
const headers = (_a = this.data.headers) !== null && _a !== void 0 ? _a : _TestTransport.defaultHeaders;
|
||||
var _a2;
|
||||
const headers = (_a2 = this.data.headers) !== null && _a2 !== void 0 ? _a2 : _TestTransport.defaultHeaders;
|
||||
return headers instanceof rpc_error_1.RpcError ? Promise.reject(headers) : Promise.resolve(headers);
|
||||
}
|
||||
// Creates a promise for a single, valid, message from the mock data.
|
||||
@@ -26663,14 +26663,14 @@ var require_test_transport = __commonJS({
|
||||
}
|
||||
// Creates a promise for response status from the mock data.
|
||||
promiseStatus() {
|
||||
var _a;
|
||||
const status = (_a = this.data.status) !== null && _a !== void 0 ? _a : _TestTransport.defaultStatus;
|
||||
var _a2;
|
||||
const status = (_a2 = this.data.status) !== null && _a2 !== void 0 ? _a2 : _TestTransport.defaultStatus;
|
||||
return status instanceof rpc_error_1.RpcError ? Promise.reject(status) : Promise.resolve(status);
|
||||
}
|
||||
// Creates a promise for response trailers from the mock data.
|
||||
promiseTrailers() {
|
||||
var _a;
|
||||
const trailers = (_a = this.data.trailers) !== null && _a !== void 0 ? _a : _TestTransport.defaultTrailers;
|
||||
var _a2;
|
||||
const trailers = (_a2 = this.data.trailers) !== null && _a2 !== void 0 ? _a2 : _TestTransport.defaultTrailers;
|
||||
return trailers instanceof rpc_error_1.RpcError ? Promise.reject(trailers) : Promise.resolve(trailers);
|
||||
}
|
||||
maybeSuppressUncaught(...promise) {
|
||||
@@ -26685,8 +26685,8 @@ var require_test_transport = __commonJS({
|
||||
return rpc_options_1.mergeRpcOptions({}, options);
|
||||
}
|
||||
unary(method, input, options) {
|
||||
var _a;
|
||||
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), responsePromise = headersPromise.catch((_) => {
|
||||
var _a2;
|
||||
const requestHeaders = (_a2 = options.meta) !== null && _a2 !== void 0 ? _a2 : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), responsePromise = headersPromise.catch((_) => {
|
||||
}).then(delay4(this.responseDelay, options.abort)).then((_) => this.promiseSingleResponse(method)), statusPromise = responsePromise.catch((_) => {
|
||||
}).then(delay4(this.afterResponseDelay, options.abort)).then((_) => this.promiseStatus()), trailersPromise = responsePromise.catch((_) => {
|
||||
}).then(delay4(this.afterResponseDelay, options.abort)).then((_) => this.promiseTrailers());
|
||||
@@ -26695,16 +26695,16 @@ var require_test_transport = __commonJS({
|
||||
return new unary_call_1.UnaryCall(method, requestHeaders, input, headersPromise, responsePromise, statusPromise, trailersPromise);
|
||||
}
|
||||
serverStreaming(method, input, options) {
|
||||
var _a;
|
||||
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), outputStream = new rpc_output_stream_1.RpcOutputStreamController(), responseStreamClosedPromise = headersPromise.then(delay4(this.responseDelay, options.abort)).catch(() => {
|
||||
var _a2;
|
||||
const requestHeaders = (_a2 = options.meta) !== null && _a2 !== void 0 ? _a2 : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), outputStream = new rpc_output_stream_1.RpcOutputStreamController(), responseStreamClosedPromise = headersPromise.then(delay4(this.responseDelay, options.abort)).catch(() => {
|
||||
}).then(() => this.streamResponses(method, outputStream, options.abort)).then(delay4(this.afterResponseDelay, options.abort)), statusPromise = responseStreamClosedPromise.then(() => this.promiseStatus()), trailersPromise = responseStreamClosedPromise.then(() => this.promiseTrailers());
|
||||
this.maybeSuppressUncaught(statusPromise, trailersPromise);
|
||||
this.lastInput = { single: input };
|
||||
return new server_streaming_call_1.ServerStreamingCall(method, requestHeaders, input, headersPromise, outputStream, statusPromise, trailersPromise);
|
||||
}
|
||||
clientStreaming(method, options) {
|
||||
var _a;
|
||||
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), responsePromise = headersPromise.catch((_) => {
|
||||
var _a2;
|
||||
const requestHeaders = (_a2 = options.meta) !== null && _a2 !== void 0 ? _a2 : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), responsePromise = headersPromise.catch((_) => {
|
||||
}).then(delay4(this.responseDelay, options.abort)).then((_) => this.promiseSingleResponse(method)), statusPromise = responsePromise.catch((_) => {
|
||||
}).then(delay4(this.afterResponseDelay, options.abort)).then((_) => this.promiseStatus()), trailersPromise = responsePromise.catch((_) => {
|
||||
}).then(delay4(this.afterResponseDelay, options.abort)).then((_) => this.promiseTrailers());
|
||||
@@ -26713,8 +26713,8 @@ var require_test_transport = __commonJS({
|
||||
return new client_streaming_call_1.ClientStreamingCall(method, requestHeaders, this.lastInput, headersPromise, responsePromise, statusPromise, trailersPromise);
|
||||
}
|
||||
duplex(method, options) {
|
||||
var _a;
|
||||
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), outputStream = new rpc_output_stream_1.RpcOutputStreamController(), responseStreamClosedPromise = headersPromise.then(delay4(this.responseDelay, options.abort)).catch(() => {
|
||||
var _a2;
|
||||
const requestHeaders = (_a2 = options.meta) !== null && _a2 !== void 0 ? _a2 : {}, headersPromise = this.promiseHeaders().then(delay4(this.headerDelay, options.abort)), outputStream = new rpc_output_stream_1.RpcOutputStreamController(), responseStreamClosedPromise = headersPromise.then(delay4(this.responseDelay, options.abort)).catch(() => {
|
||||
}).then(() => this.streamResponses(method, outputStream, options.abort)).then(delay4(this.afterResponseDelay, options.abort)), statusPromise = responseStreamClosedPromise.then(() => this.promiseStatus()), trailersPromise = responseStreamClosedPromise.then(() => this.promiseTrailers());
|
||||
this.maybeSuppressUncaught(statusPromise, trailersPromise);
|
||||
this.lastInput = new TestInputStream(this.data, options.abort);
|
||||
@@ -26790,10 +26790,10 @@ var require_rpc_interceptor = __commonJS({
|
||||
exports2.stackDuplexStreamingInterceptors = exports2.stackClientStreamingInterceptors = exports2.stackServerStreamingInterceptors = exports2.stackUnaryInterceptors = exports2.stackIntercept = void 0;
|
||||
var runtime_1 = require_commonjs();
|
||||
function stackIntercept(kind, transport, method, options, input) {
|
||||
var _a, _b, _c, _d;
|
||||
var _a2, _b, _c, _d;
|
||||
if (kind == "unary") {
|
||||
let tail = (mtd, inp, opt) => transport.unary(mtd, inp, opt);
|
||||
for (const curr of ((_a = options.interceptors) !== null && _a !== void 0 ? _a : []).filter((i) => i.interceptUnary).reverse()) {
|
||||
for (const curr of ((_a2 = options.interceptors) !== null && _a2 !== void 0 ? _a2 : []).filter((i) => i.interceptUnary).reverse()) {
|
||||
const next = tail;
|
||||
tail = (mtd, inp, opt) => curr.interceptUnary(next, mtd, inp, opt);
|
||||
}
|
||||
@@ -26998,7 +26998,7 @@ __export(save_cache_exports, {
|
||||
run: () => run
|
||||
});
|
||||
module.exports = __toCommonJS(save_cache_exports);
|
||||
var fs7 = __toESM(require("node:fs"), 1);
|
||||
var fs9 = __toESM(require("node:fs"), 1);
|
||||
|
||||
// node_modules/@actions/core/lib/command.js
|
||||
var os = __toESM(require("os"), 1);
|
||||
@@ -27094,7 +27094,7 @@ function getProxyUrl(reqUrl) {
|
||||
if (proxyVar) {
|
||||
try {
|
||||
return new DecodedURL(proxyVar);
|
||||
} catch (_a) {
|
||||
} catch (_a2) {
|
||||
if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://"))
|
||||
return new DecodedURL(`http://${proxyVar}`);
|
||||
}
|
||||
@@ -27886,7 +27886,7 @@ var Summary = class {
|
||||
}
|
||||
try {
|
||||
yield access(pathFromEnv, import_fs.constants.R_OK | import_fs.constants.W_OK);
|
||||
} catch (_a) {
|
||||
} catch (_a2) {
|
||||
throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);
|
||||
}
|
||||
this._filePath = pathFromEnv;
|
||||
@@ -28902,10 +28902,10 @@ function getState(name) {
|
||||
// node_modules/@actions/cache/lib/cache.js
|
||||
var path10 = __toESM(require("path"), 1);
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-globber.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-globber.js
|
||||
var fs2 = __toESM(require("fs"), 1);
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-glob-options-helper.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-glob-options-helper.js
|
||||
function getOptions(copy) {
|
||||
const result = {
|
||||
followSymbolicLinks: true,
|
||||
@@ -28939,10 +28939,10 @@ function getOptions(copy) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-globber.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-globber.js
|
||||
var path7 = __toESM(require("path"), 1);
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-path-helper.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-path-helper.js
|
||||
var path4 = __toESM(require("path"), 1);
|
||||
var import_assert2 = __toESM(require("assert"), 1);
|
||||
var IS_WINDOWS3 = process.platform === "win32";
|
||||
@@ -29034,16 +29034,16 @@ function safeTrimTrailingSeparator(p) {
|
||||
return p.substr(0, p.length - 1);
|
||||
}
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-match-kind.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-match-kind.js
|
||||
var MatchKind;
|
||||
(function(MatchKind2) {
|
||||
MatchKind2[MatchKind2["None"] = 0] = "None";
|
||||
MatchKind2[MatchKind2["Directory"] = 1] = "Directory";
|
||||
MatchKind2[MatchKind2["File"] = 2] = "File";
|
||||
MatchKind2[MatchKind2["All"] = 3] = "All";
|
||||
(function(MatchKind3) {
|
||||
MatchKind3[MatchKind3["None"] = 0] = "None";
|
||||
MatchKind3[MatchKind3["Directory"] = 1] = "Directory";
|
||||
MatchKind3[MatchKind3["File"] = 2] = "File";
|
||||
MatchKind3[MatchKind3["All"] = 3] = "All";
|
||||
})(MatchKind || (MatchKind = {}));
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-pattern-helper.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern-helper.js
|
||||
var IS_WINDOWS4 = process.platform === "win32";
|
||||
function getSearchPaths(patterns) {
|
||||
patterns = patterns.filter((x) => !x.negate);
|
||||
@@ -29091,13 +29091,13 @@ function partialMatch(patterns, itemPath) {
|
||||
return patterns.some((x) => !x.negate && x.partialMatch(itemPath));
|
||||
}
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-pattern.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern.js
|
||||
var os5 = __toESM(require("os"), 1);
|
||||
var path6 = __toESM(require("path"), 1);
|
||||
var import_assert4 = __toESM(require("assert"), 1);
|
||||
var import_minimatch = __toESM(require_minimatch(), 1);
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-path.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-path.js
|
||||
var path5 = __toESM(require("path"), 1);
|
||||
var import_assert3 = __toESM(require("assert"), 1);
|
||||
var IS_WINDOWS5 = process.platform === "win32";
|
||||
@@ -29159,7 +29159,7 @@ var Path = class {
|
||||
}
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-pattern.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-pattern.js
|
||||
var { Minimatch } = import_minimatch.default;
|
||||
var IS_WINDOWS6 = process.platform === "win32";
|
||||
var Pattern = class _Pattern {
|
||||
@@ -29320,15 +29320,15 @@ var Pattern = class _Pattern {
|
||||
}
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-search-state.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-search-state.js
|
||||
var SearchState = class {
|
||||
constructor(path12, level) {
|
||||
this.path = path12;
|
||||
constructor(path13, level) {
|
||||
this.path = path13;
|
||||
this.level = level;
|
||||
}
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-globber.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/internal-globber.js
|
||||
var __awaiter8 = function(thisArg, _arguments, P, generator) {
|
||||
function adopt(value) {
|
||||
return value instanceof P ? value : new P(function(resolve2) {
|
||||
@@ -29431,10 +29431,10 @@ var DefaultGlobber = class _DefaultGlobber {
|
||||
}
|
||||
glob() {
|
||||
return __awaiter8(this, void 0, void 0, function* () {
|
||||
var _a, e_1, _b, _c;
|
||||
var _a2, e_1, _b, _c;
|
||||
const result = [];
|
||||
try {
|
||||
for (var _d = true, _e = __asyncValues(this.globGenerator()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
||||
for (var _d = true, _e = __asyncValues(this.globGenerator()), _f; _f = yield _e.next(), _a2 = _f.done, !_a2; _d = true) {
|
||||
_c = _f.value;
|
||||
_d = false;
|
||||
const itemPath = _c;
|
||||
@@ -29444,7 +29444,7 @@ var DefaultGlobber = class _DefaultGlobber {
|
||||
e_1 = { error: e_1_1 };
|
||||
} finally {
|
||||
try {
|
||||
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
||||
if (!_d && !_a2 && (_b = _e.return)) yield _b.call(_e);
|
||||
} finally {
|
||||
if (e_1) throw e_1.error;
|
||||
}
|
||||
@@ -29478,9 +29478,9 @@ var DefaultGlobber = class _DefaultGlobber {
|
||||
const traversalChain = [];
|
||||
while (stack.length) {
|
||||
const item = stack.pop();
|
||||
const match2 = match(patterns, item.path);
|
||||
const partialMatch2 = !!match2 || partialMatch(patterns, item.path);
|
||||
if (!match2 && !partialMatch2) {
|
||||
const match4 = match(patterns, item.path);
|
||||
const partialMatch3 = !!match4 || partialMatch(patterns, item.path);
|
||||
if (!match4 && !partialMatch3) {
|
||||
continue;
|
||||
}
|
||||
const stats = yield __await(
|
||||
@@ -29494,15 +29494,15 @@ var DefaultGlobber = class _DefaultGlobber {
|
||||
continue;
|
||||
}
|
||||
if (stats.isDirectory()) {
|
||||
if (match2 & MatchKind.Directory && options.matchDirectories) {
|
||||
if (match4 & MatchKind.Directory && options.matchDirectories) {
|
||||
yield yield __await(item.path);
|
||||
} else if (!partialMatch2) {
|
||||
} else if (!partialMatch3) {
|
||||
continue;
|
||||
}
|
||||
const childLevel = item.level + 1;
|
||||
const childItems = (yield __await(fs2.promises.readdir(item.path))).map((x) => new SearchState(path7.join(item.path, x), childLevel));
|
||||
stack.push(...childItems.reverse());
|
||||
} else if (match2 & MatchKind.File) {
|
||||
} else if (match4 & MatchKind.File) {
|
||||
yield yield __await(item.path);
|
||||
}
|
||||
}
|
||||
@@ -29565,7 +29565,7 @@ var DefaultGlobber = class _DefaultGlobber {
|
||||
}
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/lib/glob.js
|
||||
// node_modules/@actions/cache/node_modules/@actions/glob/lib/glob.js
|
||||
var __awaiter9 = function(thisArg, _arguments, P, generator) {
|
||||
function adopt(value) {
|
||||
return value instanceof P ? value : new P(function(resolve2) {
|
||||
@@ -29681,11 +29681,11 @@ var __asyncValues2 = function(o) {
|
||||
var versionSalt = "1.0";
|
||||
function createTempDirectory() {
|
||||
return __awaiter10(this, void 0, void 0, function* () {
|
||||
const IS_WINDOWS9 = process.platform === "win32";
|
||||
const IS_WINDOWS14 = process.platform === "win32";
|
||||
let tempDirectory = process.env["RUNNER_TEMP"] || "";
|
||||
if (!tempDirectory) {
|
||||
let baseLocation;
|
||||
if (IS_WINDOWS9) {
|
||||
if (IS_WINDOWS14) {
|
||||
baseLocation = process.env["USERPROFILE"] || "C:\\";
|
||||
} else {
|
||||
if (process.platform === "darwin") {
|
||||
@@ -29706,7 +29706,7 @@ function getArchiveFileSizeInBytes(filePath) {
|
||||
}
|
||||
function resolvePaths(patterns) {
|
||||
return __awaiter10(this, void 0, void 0, function* () {
|
||||
var _a, e_1, _b, _c;
|
||||
var _a2, e_1, _b, _c;
|
||||
var _d;
|
||||
const paths = [];
|
||||
const workspace = (_d = process.env["GITHUB_WORKSPACE"]) !== null && _d !== void 0 ? _d : process.cwd();
|
||||
@@ -29714,7 +29714,7 @@ function resolvePaths(patterns) {
|
||||
implicitDescendants: false
|
||||
});
|
||||
try {
|
||||
for (var _e = true, _f = __asyncValues2(globber.globGenerator()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {
|
||||
for (var _e = true, _f = __asyncValues2(globber.globGenerator()), _g; _g = yield _f.next(), _a2 = _g.done, !_a2; _e = true) {
|
||||
_c = _g.value;
|
||||
_e = false;
|
||||
const file = _c;
|
||||
@@ -29730,7 +29730,7 @@ function resolvePaths(patterns) {
|
||||
e_1 = { error: e_1_1 };
|
||||
} finally {
|
||||
try {
|
||||
if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);
|
||||
if (!_e && !_a2 && (_b = _f.return)) yield _b.call(_f);
|
||||
} finally {
|
||||
if (e_1) throw e_1.error;
|
||||
}
|
||||
@@ -32519,10 +32519,10 @@ function parseChallenges(challenges) {
|
||||
const challengeRegex = /(\w+)\s+((?:\w+=(?:"[^"]*"|[^,]*),?\s*)+)/g;
|
||||
const paramRegex = /(\w+)="([^"]*)"/g;
|
||||
const parsedChallenges = [];
|
||||
let match2;
|
||||
while ((match2 = challengeRegex.exec(challenges)) !== null) {
|
||||
const scheme = match2[1];
|
||||
const paramsString = match2[2];
|
||||
let match4;
|
||||
while ((match4 = challengeRegex.exec(challenges)) !== null) {
|
||||
const scheme = match4[1];
|
||||
const paramsString = match4[2];
|
||||
const params = {};
|
||||
let paramMatch;
|
||||
while ((paramMatch = paramRegex.exec(paramsString)) !== null) {
|
||||
@@ -32658,7 +32658,7 @@ var SerializerImpl = class {
|
||||
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
|
||||
};
|
||||
if (mapper.constraints && value !== void 0 && value !== null) {
|
||||
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern: Pattern2, UniqueItems } = mapper.constraints;
|
||||
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern: Pattern3, UniqueItems } = mapper.constraints;
|
||||
if (ExclusiveMaximum !== void 0 && value >= ExclusiveMaximum) {
|
||||
failValidation("ExclusiveMaximum", ExclusiveMaximum);
|
||||
}
|
||||
@@ -32686,10 +32686,10 @@ var SerializerImpl = class {
|
||||
if (MultipleOf !== void 0 && value % MultipleOf !== 0) {
|
||||
failValidation("MultipleOf", MultipleOf);
|
||||
}
|
||||
if (Pattern2) {
|
||||
const pattern = typeof Pattern2 === "string" ? new RegExp(Pattern2) : Pattern2;
|
||||
if (Pattern3) {
|
||||
const pattern = typeof Pattern3 === "string" ? new RegExp(Pattern3) : Pattern3;
|
||||
if (typeof value !== "string" || value.match(pattern) === null) {
|
||||
failValidation("Pattern", Pattern2);
|
||||
failValidation("Pattern", Pattern3);
|
||||
}
|
||||
}
|
||||
if (UniqueItems && value.some((item, i, ar) => ar.indexOf(item) !== i)) {
|
||||
@@ -33826,15 +33826,15 @@ function getRequestUrl(baseUri, operationSpec, operationArguments, fallbackObjec
|
||||
let isAbsolutePath = false;
|
||||
let requestUrl = replaceAll(baseUri, urlReplacements);
|
||||
if (operationSpec.path) {
|
||||
let path12 = replaceAll(operationSpec.path, urlReplacements);
|
||||
if (operationSpec.path === "/{nextLink}" && path12.startsWith("/")) {
|
||||
path12 = path12.substring(1);
|
||||
let path13 = replaceAll(operationSpec.path, urlReplacements);
|
||||
if (operationSpec.path === "/{nextLink}" && path13.startsWith("/")) {
|
||||
path13 = path13.substring(1);
|
||||
}
|
||||
if (isAbsoluteUrl(path12)) {
|
||||
requestUrl = path12;
|
||||
if (isAbsoluteUrl(path13)) {
|
||||
requestUrl = path13;
|
||||
isAbsolutePath = true;
|
||||
} else {
|
||||
requestUrl = appendPath(requestUrl, path12);
|
||||
requestUrl = appendPath(requestUrl, path13);
|
||||
}
|
||||
}
|
||||
const { queryParams, sequenceParams } = calculateQueryParameters(operationSpec, operationArguments, fallbackObject);
|
||||
@@ -33880,9 +33880,9 @@ function appendPath(url2, pathToAppend) {
|
||||
}
|
||||
const searchStart = pathToAppend.indexOf("?");
|
||||
if (searchStart !== -1) {
|
||||
const path12 = pathToAppend.substring(0, searchStart);
|
||||
const path13 = pathToAppend.substring(0, searchStart);
|
||||
const search = pathToAppend.substring(searchStart + 1);
|
||||
newPath = newPath + path12;
|
||||
newPath = newPath + path13;
|
||||
if (search) {
|
||||
parsedUrl.search = parsedUrl.search ? `${parsedUrl.search}&${search}` : search;
|
||||
}
|
||||
@@ -34625,22 +34625,22 @@ var nameRegexp = "[" + nameStartChar + "][" + nameChar + "]*";
|
||||
var regexName = new RegExp("^" + nameRegexp + "$");
|
||||
function getAllMatches(string, regex) {
|
||||
const matches = [];
|
||||
let match2 = regex.exec(string);
|
||||
while (match2) {
|
||||
let match4 = regex.exec(string);
|
||||
while (match4) {
|
||||
const allmatches = [];
|
||||
allmatches.startIndex = regex.lastIndex - match2[0].length;
|
||||
const len = match2.length;
|
||||
allmatches.startIndex = regex.lastIndex - match4[0].length;
|
||||
const len = match4.length;
|
||||
for (let index = 0; index < len; index++) {
|
||||
allmatches.push(match2[index]);
|
||||
allmatches.push(match4[index]);
|
||||
}
|
||||
matches.push(allmatches);
|
||||
match2 = regex.exec(string);
|
||||
match4 = regex.exec(string);
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
var isName = function(string) {
|
||||
const match2 = regexName.exec(string);
|
||||
return !(match2 === null || typeof match2 === "undefined");
|
||||
const match4 = regexName.exec(string);
|
||||
return !(match4 === null || typeof match4 === "undefined");
|
||||
};
|
||||
function isExist(v) {
|
||||
return typeof v !== "undefined";
|
||||
@@ -34961,8 +34961,8 @@ function getLineNumberForPosition(xmlData, index) {
|
||||
col: lines[lines.length - 1].length + 1
|
||||
};
|
||||
}
|
||||
function getPositionFromMatch(match2) {
|
||||
return match2.startIndex + match2[1].length;
|
||||
function getPositionFromMatch(match4) {
|
||||
return match4.startIndex + match4[1].length;
|
||||
}
|
||||
|
||||
// node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js
|
||||
@@ -35433,11 +35433,11 @@ function toNumber(str, options = {}) {
|
||||
} else if (trimmedStr.includes("e") || trimmedStr.includes("E")) {
|
||||
return resolveEnotation(str, trimmedStr, options);
|
||||
} else {
|
||||
const match2 = numRegex.exec(trimmedStr);
|
||||
if (match2) {
|
||||
const sign = match2[1] || "";
|
||||
const leadingZeros = match2[2];
|
||||
let numTrimmedByZeros = trimZeros(match2[3]);
|
||||
const match4 = numRegex.exec(trimmedStr);
|
||||
if (match4) {
|
||||
const sign = match4[1] || "";
|
||||
const leadingZeros = match4[2];
|
||||
let numTrimmedByZeros = trimZeros(match4[3]);
|
||||
const decimalAdjacentToLeadingZeros = sign ? (
|
||||
// 0., -00., 000.
|
||||
str[leadingZeros.length + 1] === "."
|
||||
@@ -35853,13 +35853,13 @@ var Matcher = class {
|
||||
* @returns {string}
|
||||
*/
|
||||
toString(separator, includeNamespace = true) {
|
||||
const sep7 = separator || this.separator;
|
||||
const sep8 = separator || this.separator;
|
||||
return this.path.map((n) => {
|
||||
if (includeNamespace && n.namespace) {
|
||||
return `${n.namespace}:${n.tag}`;
|
||||
}
|
||||
return n.tag;
|
||||
}).join(sep7);
|
||||
}).join(sep8);
|
||||
}
|
||||
/**
|
||||
* Get path as array of tag names
|
||||
@@ -37479,17 +37479,17 @@ var XML_CHARKEY2 = "_";
|
||||
|
||||
// node_modules/@azure/core-xml/dist/esm/xml.js
|
||||
function getCommonOptions(options) {
|
||||
var _a;
|
||||
var _a2;
|
||||
return {
|
||||
attributesGroupName: XML_ATTRKEY2,
|
||||
textNodeName: (_a = options.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY2,
|
||||
textNodeName: (_a2 = options.xmlCharKey) !== null && _a2 !== void 0 ? _a2 : XML_CHARKEY2,
|
||||
ignoreAttributes: false,
|
||||
suppressBooleanAttributes: false
|
||||
};
|
||||
}
|
||||
function getSerializerOptions(options = {}) {
|
||||
var _a, _b;
|
||||
return Object.assign(Object.assign({}, getCommonOptions(options)), { attributeNamePrefix: "@_", format: true, suppressEmptyNode: true, indentBy: "", rootNodeName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "root", cdataPropName: (_b = options.cdataPropName) !== null && _b !== void 0 ? _b : "__cdata" });
|
||||
var _a2, _b;
|
||||
return Object.assign(Object.assign({}, getCommonOptions(options)), { attributeNamePrefix: "@_", format: true, suppressEmptyNode: true, indentBy: "", rootNodeName: (_a2 = options.rootName) !== null && _a2 !== void 0 ? _a2 : "root", cdataPropName: (_b = options.cdataPropName) !== null && _b !== void 0 ? _b : "__cdata" });
|
||||
}
|
||||
function getParserOptions(options = {}) {
|
||||
return Object.assign(Object.assign({}, getCommonOptions(options)), { parseAttributeValue: false, parseTagValue: false, attributeNamePrefix: "", stopNodes: options.stopNodes, processEntities: true, trimValues: false });
|
||||
@@ -38724,9 +38724,9 @@ var StorageSharedKeyCredentialPolicy = class extends CredentialPolicy {
|
||||
* @param request -
|
||||
*/
|
||||
getCanonicalizedResourceString(request) {
|
||||
const path12 = getURLPath(request.url) || "/";
|
||||
const path13 = getURLPath(request.url) || "/";
|
||||
let canonicalizedResourceString = "";
|
||||
canonicalizedResourceString += `/${this.factory.accountName}${path12}`;
|
||||
canonicalizedResourceString += `/${this.factory.accountName}${path13}`;
|
||||
const queries = getURLQueries(request.url);
|
||||
const lowercaseQueries = {};
|
||||
if (queries) {
|
||||
@@ -39216,9 +39216,9 @@ function storageSharedKeyCredentialPolicy(options) {
|
||||
return canonicalizedHeadersStringToSign;
|
||||
}
|
||||
function getCanonicalizedResourceString(request) {
|
||||
const path12 = getURLPath(request.url) || "/";
|
||||
const path13 = getURLPath(request.url) || "/";
|
||||
let canonicalizedResourceString = "";
|
||||
canonicalizedResourceString += `/${options.accountName}${path12}`;
|
||||
canonicalizedResourceString += `/${options.accountName}${path13}`;
|
||||
const queries = getURLQueries(request.url);
|
||||
const lowercaseQueries = {};
|
||||
if (queries) {
|
||||
@@ -52117,8 +52117,8 @@ var PageBlobImpl = class {
|
||||
* aligned and range-end is required.
|
||||
* @param options The options parameters.
|
||||
*/
|
||||
uploadPagesFromURL(sourceUrl2, sourceRange2, contentLength2, range2, options) {
|
||||
return this.client.sendOperationRequest({ sourceUrl: sourceUrl2, sourceRange: sourceRange2, contentLength: contentLength2, range: range2, options }, uploadPagesFromURLOperationSpec);
|
||||
uploadPagesFromURL(sourceUrl2, sourceRange2, contentLength2, range3, options) {
|
||||
return this.client.sendOperationRequest({ sourceUrl: sourceUrl2, sourceRange: sourceRange2, contentLength: contentLength2, range: range3, options }, uploadPagesFromURLOperationSpec);
|
||||
}
|
||||
/**
|
||||
* The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a
|
||||
@@ -53114,13 +53114,13 @@ var StorageClient = class extends ExtendedServiceClient {
|
||||
if (!options) {
|
||||
options = {};
|
||||
}
|
||||
const defaults = {
|
||||
const defaults2 = {
|
||||
requestContentType: "application/json; charset=utf-8"
|
||||
};
|
||||
const packageDetails = `azsdk-js-azure-storage-blob/12.30.0`;
|
||||
const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` : `${packageDetails}`;
|
||||
const optionsWithDefaults = {
|
||||
...defaults,
|
||||
...defaults2,
|
||||
...options,
|
||||
userAgentOptions: {
|
||||
userAgentPrefix
|
||||
@@ -53159,10 +53159,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 path12 = urlParsed.pathname;
|
||||
path12 = path12 || "/";
|
||||
path12 = escape(path12);
|
||||
urlParsed.pathname = path12;
|
||||
let path13 = urlParsed.pathname;
|
||||
path13 = path13 || "/";
|
||||
path13 = escape(path13);
|
||||
urlParsed.pathname = path13;
|
||||
return urlParsed.toString();
|
||||
}
|
||||
function getProxyUriFromDevConnString(connectionString) {
|
||||
@@ -53247,9 +53247,9 @@ function escape(text) {
|
||||
}
|
||||
function appendToURLPath(url2, name) {
|
||||
const urlParsed = new URL(url2);
|
||||
let path12 = urlParsed.pathname;
|
||||
path12 = path12 ? path12.endsWith("/") ? `${path12}${name}` : `${path12}/${name}` : name;
|
||||
urlParsed.pathname = path12;
|
||||
let path13 = urlParsed.pathname;
|
||||
path13 = path13 ? path13.endsWith("/") ? `${path13}${name}` : `${path13}/${name}` : name;
|
||||
urlParsed.pathname = path13;
|
||||
return urlParsed.toString();
|
||||
}
|
||||
function setURLParameter2(url2, name, value) {
|
||||
@@ -55771,9 +55771,9 @@ var AvroEnumType = class extends AvroType {
|
||||
};
|
||||
var AvroUnionType = class extends AvroType {
|
||||
_types;
|
||||
constructor(types) {
|
||||
constructor(types2) {
|
||||
super();
|
||||
this._types = types;
|
||||
this._types = types2;
|
||||
}
|
||||
async read(stream, options = {}) {
|
||||
const typeIndex = await AvroParser.readInt(stream, options);
|
||||
@@ -59962,10 +59962,10 @@ var UploadProgress = class {
|
||||
};
|
||||
function uploadCacheArchiveSDK(signedUploadURL, archivePath, options) {
|
||||
return __awaiter11(this, void 0, void 0, function* () {
|
||||
var _a;
|
||||
var _a2;
|
||||
const blobClient = new BlobClient(signedUploadURL);
|
||||
const blockBlobClient = blobClient.getBlockBlobClient();
|
||||
const uploadProgress = new UploadProgress((_a = options === null || options === void 0 ? void 0 : options.archiveSizeBytes) !== null && _a !== void 0 ? _a : 0);
|
||||
const uploadProgress = new UploadProgress((_a2 = options === null || options === void 0 ? void 0 : options.archiveSizeBytes) !== null && _a2 !== void 0 ? _a2 : 0);
|
||||
const uploadOptions = {
|
||||
blockSize: options === null || options === void 0 ? void 0 : options.uploadChunkSize,
|
||||
concurrency: options === null || options === void 0 ? void 0 : options.uploadConcurrency,
|
||||
@@ -60156,6 +60156,15 @@ function getCacheServiceVersion() {
|
||||
return "v1";
|
||||
return process.env["ACTIONS_CACHE_SERVICE_V2"] ? "v2" : "v1";
|
||||
}
|
||||
var KNOWN_CACHE_MODES = ["none", "read", "write", "write-only"];
|
||||
function getCacheMode() {
|
||||
return (process.env["ACTIONS_CACHE_MODE"] || "").trim().toLowerCase();
|
||||
}
|
||||
function isCacheWritable(mode) {
|
||||
if (!KNOWN_CACHE_MODES.includes(mode))
|
||||
return true;
|
||||
return mode === "write" || mode === "write-only";
|
||||
}
|
||||
function getCacheServiceURL() {
|
||||
const version3 = getCacheServiceVersion();
|
||||
switch (version3) {
|
||||
@@ -61288,8 +61297,8 @@ function getCommands(compressionMethod_1, type_1) {
|
||||
});
|
||||
}
|
||||
function getWorkingDirectory() {
|
||||
var _a;
|
||||
return (_a = process.env["GITHUB_WORKSPACE"]) !== null && _a !== void 0 ? _a : process.cwd();
|
||||
var _a2;
|
||||
return (_a2 = process.env["GITHUB_WORKSPACE"]) !== null && _a2 !== void 0 ? _a2 : process.cwd();
|
||||
}
|
||||
function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
|
||||
return __awaiter15(this, void 0, void 0, function* () {
|
||||
@@ -61445,6 +61454,12 @@ function saveCache2(paths_1, key_1, options_1) {
|
||||
debug(`Cache service version: ${cacheServiceVersion}`);
|
||||
checkPaths(paths);
|
||||
checkKey(key);
|
||||
const cacheMode = getCacheMode();
|
||||
if (!isCacheWritable(cacheMode)) {
|
||||
info(`Cache save skipped: the effective cache-mode '${cacheMode}' does not permit writes.`);
|
||||
debug(`Skipped save for paths [${paths.join(", ")}] with key '${key}'.`);
|
||||
return -1;
|
||||
}
|
||||
switch (cacheServiceVersion) {
|
||||
case "v2":
|
||||
return yield saveCacheV2(paths, key, options, enableCrossOsArchive);
|
||||
@@ -61456,7 +61471,7 @@ function saveCache2(paths_1, key_1, options_1) {
|
||||
}
|
||||
function saveCacheV1(paths_1, key_1, options_1) {
|
||||
return __awaiter16(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) {
|
||||
var _a, _b, _c, _d, _e, _f;
|
||||
var _a2, _b, _c, _d, _e, _f;
|
||||
const compressionMethod = yield getCompressionMethod();
|
||||
let cacheId = -1;
|
||||
const cachePaths = yield resolvePaths(paths);
|
||||
@@ -61485,7 +61500,7 @@ function saveCacheV1(paths_1, key_1, options_1) {
|
||||
enableCrossOsArchive,
|
||||
cacheSize: archiveFileSize
|
||||
});
|
||||
if ((_a = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.result) === null || _a === void 0 ? void 0 : _a.cacheId) {
|
||||
if ((_a2 = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.result) === null || _a2 === void 0 ? void 0 : _a2.cacheId) {
|
||||
cacheId = (_b = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.result) === null || _b === void 0 ? void 0 : _b.cacheId;
|
||||
} else if ((reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.statusCode) === 400) {
|
||||
throw new Error((_d = (_c = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : `Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the data cap limit, not saving cache.`);
|
||||
@@ -61502,8 +61517,6 @@ function saveCacheV1(paths_1, key_1, options_1) {
|
||||
const typedError = error2;
|
||||
if (typedError.name === ValidationError.name) {
|
||||
throw error2;
|
||||
} else if (typedError.name === CacheWriteDeniedError.name) {
|
||||
warning(`Failed to save: ${typedError.message}`);
|
||||
} else if (typedError.name === ReserveCacheError.name) {
|
||||
info(`Failed to save: ${typedError.message}`);
|
||||
} else {
|
||||
@@ -61525,7 +61538,7 @@ function saveCacheV1(paths_1, key_1, options_1) {
|
||||
}
|
||||
function saveCacheV2(paths_1, key_1, options_1) {
|
||||
return __awaiter16(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) {
|
||||
var _a;
|
||||
var _a2;
|
||||
options = Object.assign(Object.assign({}, options), { uploadChunkSize: 64 * 1024 * 1024, uploadConcurrency: 8, useAzureSdk: true });
|
||||
const compressionMethod = yield getCompressionMethod();
|
||||
const twirpClient = internalCacheTwirpClient();
|
||||
@@ -61565,7 +61578,7 @@ function saveCacheV2(paths_1, key_1, options_1) {
|
||||
signedUploadUrl = response.signedUploadUrl;
|
||||
} catch (error2) {
|
||||
debug(`Failed to reserve cache: ${error2}`);
|
||||
const errorMessage = (_a = error2 === null || error2 === void 0 ? void 0 : error2.message) !== null && _a !== void 0 ? _a : "";
|
||||
const errorMessage = (_a2 = error2 === null || error2 === void 0 ? void 0 : error2.message) !== null && _a2 !== void 0 ? _a2 : "";
|
||||
if (errorMessage.startsWith(CACHE_WRITE_DENIED_PREFIX)) {
|
||||
throw new CacheWriteDeniedError(`Unable to reserve cache with key ${key}. More details: ${errorMessage}`);
|
||||
}
|
||||
@@ -61591,8 +61604,6 @@ function saveCacheV2(paths_1, key_1, options_1) {
|
||||
const typedError = error2;
|
||||
if (typedError.name === ValidationError.name) {
|
||||
throw error2;
|
||||
} else if (typedError.name === CacheWriteDeniedError.name) {
|
||||
warning(`Failed to save: ${typedError.message}`);
|
||||
} else if (typedError.name === ReserveCacheError.name) {
|
||||
info(`Failed to save: ${typedError.message}`);
|
||||
} else if (typedError.name === FinalizeCacheError.name) {
|
||||
@@ -61809,6 +61820,1885 @@ var RANGE_PATTERN = [
|
||||
].join("");
|
||||
var rangeRegex = new RegExp("^" + RANGE_PATTERN + "$", "i");
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-path-helper.js
|
||||
var IS_WINDOWS9 = process.platform === "win32";
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-match-kind.js
|
||||
var MatchKind2;
|
||||
(function(MatchKind3) {
|
||||
MatchKind3[MatchKind3["None"] = 0] = "None";
|
||||
MatchKind3[MatchKind3["Directory"] = 1] = "Directory";
|
||||
MatchKind3[MatchKind3["File"] = 2] = "File";
|
||||
MatchKind3[MatchKind3["All"] = 3] = "All";
|
||||
})(MatchKind2 || (MatchKind2 = {}));
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-pattern-helper.js
|
||||
var IS_WINDOWS10 = process.platform === "win32";
|
||||
|
||||
// node_modules/@actions/glob/node_modules/balanced-match/dist/esm/index.js
|
||||
var balanced = (a, b, str) => {
|
||||
const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
|
||||
const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
|
||||
const r = ma !== null && mb != null && range2(ma, mb, str);
|
||||
return r && {
|
||||
start: r[0],
|
||||
end: r[1],
|
||||
pre: str.slice(0, r[0]),
|
||||
body: str.slice(r[0] + ma.length, r[1]),
|
||||
post: str.slice(r[1] + mb.length)
|
||||
};
|
||||
};
|
||||
var maybeMatch = (reg, str) => {
|
||||
const m = str.match(reg);
|
||||
return m ? m[0] : null;
|
||||
};
|
||||
var range2 = (a, b, str) => {
|
||||
let begs, beg, left, right = void 0, result;
|
||||
let ai = str.indexOf(a);
|
||||
let bi = str.indexOf(b, ai + 1);
|
||||
let i = ai;
|
||||
if (ai >= 0 && bi > 0) {
|
||||
if (a === b) {
|
||||
return [ai, bi];
|
||||
}
|
||||
begs = [];
|
||||
left = str.length;
|
||||
while (i >= 0 && !result) {
|
||||
if (i === ai) {
|
||||
begs.push(i);
|
||||
ai = str.indexOf(a, i + 1);
|
||||
} else if (begs.length === 1) {
|
||||
const r = begs.pop();
|
||||
if (r !== void 0)
|
||||
result = [r, bi];
|
||||
} else {
|
||||
beg = begs.pop();
|
||||
if (beg !== void 0 && beg < left) {
|
||||
left = beg;
|
||||
right = bi;
|
||||
}
|
||||
bi = str.indexOf(b, i + 1);
|
||||
}
|
||||
i = ai < bi && ai >= 0 ? ai : bi;
|
||||
}
|
||||
if (begs.length && right !== void 0) {
|
||||
result = [left, right];
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/node_modules/brace-expansion/dist/esm/index.js
|
||||
var escSlash = "\0SLASH" + Math.random() + "\0";
|
||||
var escOpen = "\0OPEN" + Math.random() + "\0";
|
||||
var escClose = "\0CLOSE" + Math.random() + "\0";
|
||||
var escComma = "\0COMMA" + Math.random() + "\0";
|
||||
var escPeriod = "\0PERIOD" + Math.random() + "\0";
|
||||
var escSlashPattern = new RegExp(escSlash, "g");
|
||||
var escOpenPattern = new RegExp(escOpen, "g");
|
||||
var escClosePattern = new RegExp(escClose, "g");
|
||||
var escCommaPattern = new RegExp(escComma, "g");
|
||||
var escPeriodPattern = new RegExp(escPeriod, "g");
|
||||
var slashPattern = /\\\\/g;
|
||||
var openPattern = /\\{/g;
|
||||
var closePattern = /\\}/g;
|
||||
var commaPattern = /\\,/g;
|
||||
var periodPattern = /\\\./g;
|
||||
var EXPANSION_MAX = 1e5;
|
||||
var EXPANSION_MAX_LENGTH = 4e6;
|
||||
function numeric(str) {
|
||||
return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
|
||||
}
|
||||
function escapeBraces(str) {
|
||||
return str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod);
|
||||
}
|
||||
function unescapeBraces(str) {
|
||||
return str.replace(escSlashPattern, "\\").replace(escOpenPattern, "{").replace(escClosePattern, "}").replace(escCommaPattern, ",").replace(escPeriodPattern, ".");
|
||||
}
|
||||
function parseCommaParts(str) {
|
||||
if (!str) {
|
||||
return [""];
|
||||
}
|
||||
const parts = [];
|
||||
const m = balanced("{", "}", str);
|
||||
if (!m) {
|
||||
return str.split(",");
|
||||
}
|
||||
const { pre, body: body2, post } = m;
|
||||
const p = pre.split(",");
|
||||
p[p.length - 1] += "{" + body2 + "}";
|
||||
const postParts = parseCommaParts(post);
|
||||
if (post.length) {
|
||||
;
|
||||
p[p.length - 1] += postParts.shift();
|
||||
p.push.apply(p, postParts);
|
||||
}
|
||||
parts.push.apply(parts, p);
|
||||
return parts;
|
||||
}
|
||||
function expand(str, options = {}) {
|
||||
if (!str) {
|
||||
return [];
|
||||
}
|
||||
const { max = EXPANSION_MAX, maxLength = EXPANSION_MAX_LENGTH } = options;
|
||||
if (str.slice(0, 2) === "{}") {
|
||||
str = "\\{\\}" + str.slice(2);
|
||||
}
|
||||
return expand_(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
|
||||
}
|
||||
function embrace(str) {
|
||||
return "{" + str + "}";
|
||||
}
|
||||
function isPadded(el) {
|
||||
return /^-?0\d/.test(el);
|
||||
}
|
||||
function lte(i, y) {
|
||||
return i <= y;
|
||||
}
|
||||
function gte(i, y) {
|
||||
return i >= y;
|
||||
}
|
||||
function combine(acc, pre, values, max, maxLength, dropEmpties) {
|
||||
const out = [];
|
||||
let length = 0;
|
||||
for (let a = 0; a < acc.length; a++) {
|
||||
for (let v = 0; v < values.length; v++) {
|
||||
if (out.length >= max)
|
||||
return out;
|
||||
const expansion = acc[a] + pre + values[v];
|
||||
if (dropEmpties && !expansion)
|
||||
continue;
|
||||
if (length + expansion.length > maxLength)
|
||||
return out;
|
||||
out.push(expansion);
|
||||
length += expansion.length;
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function expandSequence(body2, isAlphaSequence, max, maxLength) {
|
||||
const n = body2.split(/\.\./);
|
||||
const N = [];
|
||||
if (n[0] === void 0 || n[1] === void 0) {
|
||||
return N;
|
||||
}
|
||||
const x = numeric(n[0]);
|
||||
const y = numeric(n[1]);
|
||||
const width = Math.max(n[0].length, n[1].length);
|
||||
let incr = n.length === 3 && n[2] !== void 0 ? Math.max(Math.abs(numeric(n[2])), 1) : 1;
|
||||
let test = lte;
|
||||
const reverse = y < x;
|
||||
if (reverse) {
|
||||
incr *= -1;
|
||||
test = gte;
|
||||
}
|
||||
const pad = n.some(isPadded);
|
||||
let length = 0;
|
||||
for (let i = x; test(i, y) && N.length < max; i += incr) {
|
||||
let c;
|
||||
if (isAlphaSequence) {
|
||||
c = String.fromCharCode(i);
|
||||
if (c === "\\") {
|
||||
c = "";
|
||||
}
|
||||
} else {
|
||||
c = String(i);
|
||||
if (pad) {
|
||||
const need = width - c.length;
|
||||
if (need > 0) {
|
||||
const z = new Array(need + 1).join("0");
|
||||
if (i < 0) {
|
||||
c = "-" + z + c.slice(1);
|
||||
} else {
|
||||
c = z + c;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (length + c.length > maxLength)
|
||||
break;
|
||||
N.push(c);
|
||||
length += c.length;
|
||||
}
|
||||
return N;
|
||||
}
|
||||
function expand_(str, max, maxLength, isTop) {
|
||||
let acc = [""];
|
||||
let dropEmpties = false;
|
||||
let firstGroup = true;
|
||||
for (; ; ) {
|
||||
const m = balanced("{", "}", str);
|
||||
if (!m) {
|
||||
return combine(acc, str, [""], max, maxLength, dropEmpties);
|
||||
}
|
||||
const pre = m.pre;
|
||||
if (/\$$/.test(pre)) {
|
||||
acc = combine(acc, pre + "{" + m.body + "}", [""], max, maxLength, dropEmpties && !m.post.length);
|
||||
firstGroup = false;
|
||||
if (!m.post.length)
|
||||
break;
|
||||
str = m.post;
|
||||
continue;
|
||||
}
|
||||
const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
|
||||
const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
|
||||
const isSequence = isNumericSequence || isAlphaSequence;
|
||||
const isOptions = m.body.indexOf(",") >= 0;
|
||||
if (!isSequence && !isOptions) {
|
||||
if (m.post.match(/,(?!,).*\}/)) {
|
||||
str = m.pre + "{" + m.body + escClose + m.post;
|
||||
isTop = true;
|
||||
continue;
|
||||
}
|
||||
return combine(acc, pre + "{" + m.body + "}" + m.post, [""], max, maxLength, dropEmpties);
|
||||
}
|
||||
if (firstGroup) {
|
||||
dropEmpties = isTop && !isSequence;
|
||||
firstGroup = false;
|
||||
}
|
||||
let values;
|
||||
if (isSequence) {
|
||||
values = expandSequence(m.body, isAlphaSequence, max, maxLength);
|
||||
} else {
|
||||
let n = parseCommaParts(m.body);
|
||||
if (n.length === 1 && n[0] !== void 0) {
|
||||
n = expand_(n[0], max, maxLength, false).map(embrace);
|
||||
if (n.length === 1) {
|
||||
acc = combine(acc, pre + n[0], [""], max, maxLength, dropEmpties && !m.post.length);
|
||||
if (!m.post.length)
|
||||
break;
|
||||
str = m.post;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
let dropsEmpties = dropEmpties && !m.post.length && !pre;
|
||||
for (let d = 0; dropsEmpties && d < acc.length; d++) {
|
||||
if (acc[d]) {
|
||||
dropsEmpties = false;
|
||||
}
|
||||
}
|
||||
values = [];
|
||||
let valuesLength = 0;
|
||||
outer: for (let j = 0; j < n.length; j++) {
|
||||
const expanded = expand_(n[j], max, maxLength, false);
|
||||
for (let k = 0; k < expanded.length; k++) {
|
||||
const v = expanded[k];
|
||||
if (dropsEmpties && !v)
|
||||
continue;
|
||||
if (values.length >= max || valuesLength + v.length > maxLength) {
|
||||
break outer;
|
||||
}
|
||||
values.push(v);
|
||||
valuesLength += v.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);
|
||||
if (!m.post.length)
|
||||
break;
|
||||
str = m.post;
|
||||
}
|
||||
return acc;
|
||||
}
|
||||
|
||||
// node_modules/@actions/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js
|
||||
var MAX_PATTERN_LENGTH = 1024 * 64;
|
||||
var assertValidPattern = (pattern) => {
|
||||
if (typeof pattern !== "string") {
|
||||
throw new TypeError("invalid pattern");
|
||||
}
|
||||
if (pattern.length > MAX_PATTERN_LENGTH) {
|
||||
throw new TypeError("pattern is too long");
|
||||
}
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/node_modules/minimatch/dist/esm/brace-expressions.js
|
||||
var posixClasses = {
|
||||
"[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true],
|
||||
"[:alpha:]": ["\\p{L}\\p{Nl}", true],
|
||||
"[:ascii:]": ["\\x00-\\x7f", false],
|
||||
"[:blank:]": ["\\p{Zs}\\t", true],
|
||||
"[:cntrl:]": ["\\p{Cc}", true],
|
||||
"[:digit:]": ["\\p{Nd}", true],
|
||||
"[:graph:]": ["\\p{Z}\\p{C}", true, true],
|
||||
"[:lower:]": ["\\p{Ll}", true],
|
||||
"[:print:]": ["\\p{C}", true],
|
||||
"[:punct:]": ["\\p{P}", true],
|
||||
"[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true],
|
||||
"[:upper:]": ["\\p{Lu}", true],
|
||||
"[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true],
|
||||
"[:xdigit:]": ["A-Fa-f0-9", false]
|
||||
};
|
||||
var braceEscape = (s) => s.replace(/[[\]\\-]/g, "\\$&");
|
||||
var regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
var rangesToString = (ranges) => ranges.join("");
|
||||
var parseClass = (glob, position) => {
|
||||
const pos = position;
|
||||
if (glob.charAt(pos) !== "[") {
|
||||
throw new Error("not in a brace expression");
|
||||
}
|
||||
const ranges = [];
|
||||
const negs = [];
|
||||
let i = pos + 1;
|
||||
let sawStart = false;
|
||||
let uflag = false;
|
||||
let escaping = false;
|
||||
let negate = false;
|
||||
let endPos = pos;
|
||||
let rangeStart = "";
|
||||
WHILE: while (i < glob.length) {
|
||||
const c = glob.charAt(i);
|
||||
if ((c === "!" || c === "^") && i === pos + 1) {
|
||||
negate = true;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (c === "]" && sawStart && !escaping) {
|
||||
endPos = i + 1;
|
||||
break;
|
||||
}
|
||||
sawStart = true;
|
||||
if (c === "\\") {
|
||||
if (!escaping) {
|
||||
escaping = true;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (c === "[" && !escaping) {
|
||||
for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
|
||||
if (glob.startsWith(cls, i)) {
|
||||
if (rangeStart) {
|
||||
return ["$.", false, glob.length - pos, true];
|
||||
}
|
||||
i += cls.length;
|
||||
if (neg)
|
||||
negs.push(unip);
|
||||
else
|
||||
ranges.push(unip);
|
||||
uflag = uflag || u;
|
||||
continue WHILE;
|
||||
}
|
||||
}
|
||||
}
|
||||
escaping = false;
|
||||
if (rangeStart) {
|
||||
if (c > rangeStart) {
|
||||
ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c));
|
||||
} else if (c === rangeStart) {
|
||||
ranges.push(braceEscape(c));
|
||||
}
|
||||
rangeStart = "";
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (glob.startsWith("-]", i + 1)) {
|
||||
ranges.push(braceEscape(c + "-"));
|
||||
i += 2;
|
||||
continue;
|
||||
}
|
||||
if (glob.startsWith("-", i + 1)) {
|
||||
rangeStart = c;
|
||||
i += 2;
|
||||
continue;
|
||||
}
|
||||
ranges.push(braceEscape(c));
|
||||
i++;
|
||||
}
|
||||
if (endPos < i) {
|
||||
return ["", false, 0, false];
|
||||
}
|
||||
if (!ranges.length && !negs.length) {
|
||||
return ["$.", false, glob.length - pos, true];
|
||||
}
|
||||
if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) {
|
||||
const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
|
||||
return [regexpEscape(r), false, endPos - pos, false];
|
||||
}
|
||||
const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]";
|
||||
const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]";
|
||||
const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs;
|
||||
return [comb, uflag, endPos - pos, true];
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/node_modules/minimatch/dist/esm/unescape.js
|
||||
var unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true } = {}) => {
|
||||
if (magicalBraces) {
|
||||
return windowsPathsNoEscape ? s.replace(/\[([^/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^/\\])\]/g, "$1$2").replace(/\\([^/])/g, "$1");
|
||||
}
|
||||
return windowsPathsNoEscape ? s.replace(/\[([^/\\{}])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^/\\{}])\]/g, "$1$2").replace(/\\([^/{}])/g, "$1");
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/node_modules/minimatch/dist/esm/ast.js
|
||||
var _a;
|
||||
var types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]);
|
||||
var isExtglobType = (c) => types.has(c);
|
||||
var isExtglobAST = (c) => isExtglobType(c.type);
|
||||
var adoptionMap = /* @__PURE__ */ new Map([
|
||||
["!", ["@"]],
|
||||
["?", ["?", "@"]],
|
||||
["@", ["@"]],
|
||||
["*", ["*", "+", "?", "@"]],
|
||||
["+", ["+", "@"]]
|
||||
]);
|
||||
var adoptionWithSpaceMap = /* @__PURE__ */ new Map([
|
||||
["!", ["?"]],
|
||||
["@", ["?"]],
|
||||
["+", ["?", "*"]]
|
||||
]);
|
||||
var adoptionAnyMap = /* @__PURE__ */ new Map([
|
||||
["!", ["?", "@"]],
|
||||
["?", ["?", "@"]],
|
||||
["@", ["?", "@"]],
|
||||
["*", ["*", "+", "?", "@"]],
|
||||
["+", ["+", "@", "?", "*"]]
|
||||
]);
|
||||
var usurpMap = /* @__PURE__ */ new Map([
|
||||
["!", /* @__PURE__ */ new Map([["!", "@"]])],
|
||||
[
|
||||
"?",
|
||||
/* @__PURE__ */ new Map([
|
||||
["*", "*"],
|
||||
["+", "*"]
|
||||
])
|
||||
],
|
||||
[
|
||||
"@",
|
||||
/* @__PURE__ */ new Map([
|
||||
["!", "!"],
|
||||
["?", "?"],
|
||||
["@", "@"],
|
||||
["*", "*"],
|
||||
["+", "+"]
|
||||
])
|
||||
],
|
||||
[
|
||||
"+",
|
||||
/* @__PURE__ */ new Map([
|
||||
["?", "*"],
|
||||
["*", "*"]
|
||||
])
|
||||
]
|
||||
]);
|
||||
var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))";
|
||||
var startNoDot = "(?!\\.)";
|
||||
var addPatternStart = /* @__PURE__ */ new Set(["[", "."]);
|
||||
var justDots = /* @__PURE__ */ new Set(["..", "."]);
|
||||
var reSpecials = new Set("().*{}+?[]^$\\!");
|
||||
var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
var qmark = "[^/]";
|
||||
var star = qmark + "*?";
|
||||
var starNoEmpty = qmark + "+?";
|
||||
var ID = 0;
|
||||
var AST = class {
|
||||
type;
|
||||
#root;
|
||||
#hasMagic;
|
||||
#uflag = false;
|
||||
#parts = [];
|
||||
#parent;
|
||||
#parentIndex;
|
||||
#negs;
|
||||
#filledNegs = false;
|
||||
#options;
|
||||
#toString;
|
||||
// set to true if it's an extglob with no children
|
||||
// (which really means one child of '')
|
||||
#emptyExt = false;
|
||||
id = ++ID;
|
||||
get depth() {
|
||||
return (this.#parent?.depth ?? -1) + 1;
|
||||
}
|
||||
[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() {
|
||||
return {
|
||||
"@@type": "AST",
|
||||
id: this.id,
|
||||
type: this.type,
|
||||
root: this.#root.id,
|
||||
parent: this.#parent?.id,
|
||||
depth: this.depth,
|
||||
partsLength: this.#parts.length,
|
||||
parts: this.#parts
|
||||
};
|
||||
}
|
||||
constructor(type, parent, options = {}) {
|
||||
this.type = type;
|
||||
if (type)
|
||||
this.#hasMagic = true;
|
||||
this.#parent = parent;
|
||||
this.#root = this.#parent ? this.#parent.#root : this;
|
||||
this.#options = this.#root === this ? options : this.#root.#options;
|
||||
this.#negs = this.#root === this ? [] : this.#root.#negs;
|
||||
if (type === "!" && !this.#root.#filledNegs)
|
||||
this.#negs.push(this);
|
||||
this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
|
||||
}
|
||||
get hasMagic() {
|
||||
if (this.#hasMagic !== void 0)
|
||||
return this.#hasMagic;
|
||||
for (const p of this.#parts) {
|
||||
if (typeof p === "string")
|
||||
continue;
|
||||
if (p.type || p.hasMagic)
|
||||
return this.#hasMagic = true;
|
||||
}
|
||||
return this.#hasMagic;
|
||||
}
|
||||
// reconstructs the pattern
|
||||
toString() {
|
||||
return this.#toString !== void 0 ? this.#toString : !this.type ? this.#toString = this.#parts.map((p) => String(p)).join("") : this.#toString = this.type + "(" + this.#parts.map((p) => String(p)).join("|") + ")";
|
||||
}
|
||||
#fillNegs() {
|
||||
if (this !== this.#root)
|
||||
throw new Error("should only call on root");
|
||||
if (this.#filledNegs)
|
||||
return this;
|
||||
this.toString();
|
||||
this.#filledNegs = true;
|
||||
let n;
|
||||
while (n = this.#negs.pop()) {
|
||||
if (n.type !== "!")
|
||||
continue;
|
||||
let p = n;
|
||||
let pp = p.#parent;
|
||||
while (pp) {
|
||||
for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
|
||||
for (const part of n.#parts) {
|
||||
if (typeof part === "string") {
|
||||
throw new Error("string part in extglob AST??");
|
||||
}
|
||||
part.copyIn(pp.#parts[i]);
|
||||
}
|
||||
}
|
||||
p = pp;
|
||||
pp = p.#parent;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
push(...parts) {
|
||||
for (const p of parts) {
|
||||
if (p === "")
|
||||
continue;
|
||||
if (typeof p !== "string" && !(p instanceof _a && p.#parent === this)) {
|
||||
throw new Error("invalid part: " + p);
|
||||
}
|
||||
this.#parts.push(p);
|
||||
}
|
||||
}
|
||||
toJSON() {
|
||||
const ret = this.type === null ? this.#parts.slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...this.#parts.map((p) => p.toJSON())];
|
||||
if (this.isStart() && !this.type)
|
||||
ret.unshift([]);
|
||||
if (this.isEnd() && (this === this.#root || this.#root.#filledNegs && this.#parent?.type === "!")) {
|
||||
ret.push({});
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
isStart() {
|
||||
if (this.#root === this)
|
||||
return true;
|
||||
if (!this.#parent?.isStart())
|
||||
return false;
|
||||
if (this.#parentIndex === 0)
|
||||
return true;
|
||||
const p = this.#parent;
|
||||
for (let i = 0; i < this.#parentIndex; i++) {
|
||||
const pp = p.#parts[i];
|
||||
if (!(pp instanceof _a && pp.type === "!")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
isEnd() {
|
||||
if (this.#root === this)
|
||||
return true;
|
||||
if (this.#parent?.type === "!")
|
||||
return true;
|
||||
if (!this.#parent?.isEnd())
|
||||
return false;
|
||||
if (!this.type)
|
||||
return this.#parent?.isEnd();
|
||||
const pl = this.#parent ? this.#parent.#parts.length : 0;
|
||||
return this.#parentIndex === pl - 1;
|
||||
}
|
||||
copyIn(part) {
|
||||
if (typeof part === "string")
|
||||
this.push(part);
|
||||
else
|
||||
this.push(part.clone(this));
|
||||
}
|
||||
clone(parent) {
|
||||
const c = new _a(this.type, parent);
|
||||
for (const p of this.#parts) {
|
||||
c.copyIn(p);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
static #parseAST(str, ast, pos, opt, extDepth) {
|
||||
const maxDepth = opt.maxExtglobRecursion ?? 2;
|
||||
let escaping = false;
|
||||
let inBrace = false;
|
||||
let braceStart = -1;
|
||||
let braceNeg = false;
|
||||
if (ast.type === null) {
|
||||
let i2 = pos;
|
||||
let acc2 = "";
|
||||
while (i2 < str.length) {
|
||||
const c = str.charAt(i2++);
|
||||
if (escaping || c === "\\") {
|
||||
escaping = !escaping;
|
||||
acc2 += c;
|
||||
continue;
|
||||
}
|
||||
if (inBrace) {
|
||||
if (i2 === braceStart + 1) {
|
||||
if (c === "^" || c === "!") {
|
||||
braceNeg = true;
|
||||
}
|
||||
} else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) {
|
||||
inBrace = false;
|
||||
}
|
||||
acc2 += c;
|
||||
continue;
|
||||
} else if (c === "[") {
|
||||
inBrace = true;
|
||||
braceStart = i2;
|
||||
braceNeg = false;
|
||||
acc2 += c;
|
||||
continue;
|
||||
}
|
||||
const doRecurse = !opt.noext && isExtglobType(c) && str.charAt(i2) === "(" && extDepth <= maxDepth;
|
||||
if (doRecurse) {
|
||||
ast.push(acc2);
|
||||
acc2 = "";
|
||||
const ext2 = new _a(c, ast);
|
||||
i2 = _a.#parseAST(str, ext2, i2, opt, extDepth + 1);
|
||||
ast.push(ext2);
|
||||
continue;
|
||||
}
|
||||
acc2 += c;
|
||||
}
|
||||
ast.push(acc2);
|
||||
return i2;
|
||||
}
|
||||
let i = pos + 1;
|
||||
let part = new _a(null, ast);
|
||||
const parts = [];
|
||||
let acc = "";
|
||||
while (i < str.length) {
|
||||
const c = str.charAt(i++);
|
||||
if (escaping || c === "\\") {
|
||||
escaping = !escaping;
|
||||
acc += c;
|
||||
continue;
|
||||
}
|
||||
if (inBrace) {
|
||||
if (i === braceStart + 1) {
|
||||
if (c === "^" || c === "!") {
|
||||
braceNeg = true;
|
||||
}
|
||||
} else if (c === "]" && !(i === braceStart + 2 && braceNeg)) {
|
||||
inBrace = false;
|
||||
}
|
||||
acc += c;
|
||||
continue;
|
||||
} else if (c === "[") {
|
||||
inBrace = true;
|
||||
braceStart = i;
|
||||
braceNeg = false;
|
||||
acc += c;
|
||||
continue;
|
||||
}
|
||||
const doRecurse = !opt.noext && isExtglobType(c) && str.charAt(i) === "(" && /* c8 ignore start - the maxDepth is sufficient here */
|
||||
(extDepth <= maxDepth || ast && ast.#canAdoptType(c));
|
||||
if (doRecurse) {
|
||||
const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1;
|
||||
part.push(acc);
|
||||
acc = "";
|
||||
const ext2 = new _a(c, part);
|
||||
part.push(ext2);
|
||||
i = _a.#parseAST(str, ext2, i, opt, extDepth + depthAdd);
|
||||
continue;
|
||||
}
|
||||
if (c === "|") {
|
||||
part.push(acc);
|
||||
acc = "";
|
||||
parts.push(part);
|
||||
part = new _a(null, ast);
|
||||
continue;
|
||||
}
|
||||
if (c === ")") {
|
||||
if (acc === "" && ast.#parts.length === 0) {
|
||||
ast.#emptyExt = true;
|
||||
}
|
||||
part.push(acc);
|
||||
acc = "";
|
||||
ast.push(...parts, part);
|
||||
return i;
|
||||
}
|
||||
acc += c;
|
||||
}
|
||||
ast.type = null;
|
||||
ast.#hasMagic = void 0;
|
||||
ast.#parts = [str.substring(pos - 1)];
|
||||
return i;
|
||||
}
|
||||
#canAdoptWithSpace(child2) {
|
||||
return this.#canAdopt(child2, adoptionWithSpaceMap);
|
||||
}
|
||||
#canAdopt(child2, map = adoptionMap) {
|
||||
if (!child2 || typeof child2 !== "object" || child2.type !== null || child2.#parts.length !== 1 || this.type === null) {
|
||||
return false;
|
||||
}
|
||||
const gc = child2.#parts[0];
|
||||
if (!gc || typeof gc !== "object" || gc.type === null) {
|
||||
return false;
|
||||
}
|
||||
return this.#canAdoptType(gc.type, map);
|
||||
}
|
||||
#canAdoptType(c, map = adoptionAnyMap) {
|
||||
return !!map.get(this.type)?.includes(c);
|
||||
}
|
||||
#adoptWithSpace(child2, index) {
|
||||
const gc = child2.#parts[0];
|
||||
const blank = new _a(null, gc, this.options);
|
||||
blank.#parts.push("");
|
||||
gc.push(blank);
|
||||
this.#adopt(child2, index);
|
||||
}
|
||||
#adopt(child2, index) {
|
||||
const gc = child2.#parts[0];
|
||||
this.#parts.splice(index, 1, ...gc.#parts);
|
||||
for (const p of gc.#parts) {
|
||||
if (typeof p === "object")
|
||||
p.#parent = this;
|
||||
}
|
||||
this.#toString = void 0;
|
||||
}
|
||||
#canUsurpType(c) {
|
||||
const m = usurpMap.get(this.type);
|
||||
return !!m?.has(c);
|
||||
}
|
||||
#canUsurp(child2) {
|
||||
if (!child2 || typeof child2 !== "object" || child2.type !== null || child2.#parts.length !== 1 || this.type === null || this.#parts.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
const gc = child2.#parts[0];
|
||||
if (!gc || typeof gc !== "object" || gc.type === null) {
|
||||
return false;
|
||||
}
|
||||
return this.#canUsurpType(gc.type);
|
||||
}
|
||||
#usurp(child2) {
|
||||
const m = usurpMap.get(this.type);
|
||||
const gc = child2.#parts[0];
|
||||
const nt = m?.get(gc.type);
|
||||
if (!nt)
|
||||
return false;
|
||||
this.#parts = gc.#parts;
|
||||
for (const p of this.#parts) {
|
||||
if (typeof p === "object") {
|
||||
p.#parent = this;
|
||||
}
|
||||
}
|
||||
this.type = nt;
|
||||
this.#toString = void 0;
|
||||
this.#emptyExt = false;
|
||||
}
|
||||
static fromGlob(pattern, options = {}) {
|
||||
const ast = new _a(null, void 0, options);
|
||||
_a.#parseAST(pattern, ast, 0, options, 0);
|
||||
return ast;
|
||||
}
|
||||
// returns the regular expression if there's magic, or the unescaped
|
||||
// string if not.
|
||||
toMMPattern() {
|
||||
if (this !== this.#root)
|
||||
return this.#root.toMMPattern();
|
||||
const glob = this.toString();
|
||||
const [re, body2, hasMagic, uflag] = this.toRegExpSource();
|
||||
const anyMagic = hasMagic || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase();
|
||||
if (!anyMagic) {
|
||||
return body2;
|
||||
}
|
||||
const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : "");
|
||||
return Object.assign(new RegExp(`^${re}$`, flags), {
|
||||
_src: re,
|
||||
_glob: glob
|
||||
});
|
||||
}
|
||||
get options() {
|
||||
return this.#options;
|
||||
}
|
||||
// returns the string match, the regexp source, whether there's magic
|
||||
// in the regexp (so a regular expression is required) and whether or
|
||||
// not the uflag is needed for the regular expression (for posix classes)
|
||||
// TODO: instead of injecting the start/end at this point, just return
|
||||
// the BODY of the regexp, along with the start/end portions suitable
|
||||
// for binding the start/end in either a joined full-path makeRe context
|
||||
// (where we bind to (^|/), or a standalone matchPart context (where
|
||||
// we bind to ^, and not /). Otherwise slashes get duped!
|
||||
//
|
||||
// In part-matching mode, the start is:
|
||||
// - if not isStart: nothing
|
||||
// - if traversal possible, but not allowed: ^(?!\.\.?$)
|
||||
// - if dots allowed or not possible: ^
|
||||
// - if dots possible and not allowed: ^(?!\.)
|
||||
// end is:
|
||||
// - if not isEnd(): nothing
|
||||
// - else: $
|
||||
//
|
||||
// In full-path matching mode, we put the slash at the START of the
|
||||
// pattern, so start is:
|
||||
// - if first pattern: same as part-matching mode
|
||||
// - if not isStart(): nothing
|
||||
// - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
|
||||
// - if dots allowed or not possible: /
|
||||
// - if dots possible and not allowed: /(?!\.)
|
||||
// end is:
|
||||
// - if last pattern, same as part-matching mode
|
||||
// - else nothing
|
||||
//
|
||||
// Always put the (?:$|/) on negated tails, though, because that has to be
|
||||
// there to bind the end of the negated pattern portion, and it's easier to
|
||||
// just stick it in now rather than try to inject it later in the middle of
|
||||
// the pattern.
|
||||
//
|
||||
// We can just always return the same end, and leave it up to the caller
|
||||
// to know whether it's going to be used joined or in parts.
|
||||
// And, if the start is adjusted slightly, can do the same there:
|
||||
// - if not isStart: nothing
|
||||
// - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
|
||||
// - if dots allowed or not possible: (?:/|^)
|
||||
// - if dots possible and not allowed: (?:/|^)(?!\.)
|
||||
//
|
||||
// But it's better to have a simpler binding without a conditional, for
|
||||
// performance, so probably better to return both start options.
|
||||
//
|
||||
// Then the caller just ignores the end if it's not the first pattern,
|
||||
// and the start always gets applied.
|
||||
//
|
||||
// But that's always going to be $ if it's the ending pattern, or nothing,
|
||||
// so the caller can just attach $ at the end of the pattern when building.
|
||||
//
|
||||
// So the todo is:
|
||||
// - better detect what kind of start is needed
|
||||
// - return both flavors of starting pattern
|
||||
// - attach $ at the end of the pattern when creating the actual RegExp
|
||||
//
|
||||
// Ah, but wait, no, that all only applies to the root when the first pattern
|
||||
// is not an extglob. If the first pattern IS an extglob, then we need all
|
||||
// that dot prevention biz to live in the extglob portions, because eg
|
||||
// +(*|.x*) can match .xy but not .yx.
|
||||
//
|
||||
// So, return the two flavors if it's #root and the first child is not an
|
||||
// AST, otherwise leave it to the child AST to handle it, and there,
|
||||
// use the (?:^|/) style of start binding.
|
||||
//
|
||||
// Even simplified further:
|
||||
// - Since the start for a join is eg /(?!\.) and the start for a part
|
||||
// is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
|
||||
// or start or whatever) and prepend ^ or / at the Regexp construction.
|
||||
toRegExpSource(allowDot) {
|
||||
const dot = allowDot ?? !!this.#options.dot;
|
||||
if (this.#root === this) {
|
||||
this.#flatten();
|
||||
this.#fillNegs();
|
||||
}
|
||||
if (!isExtglobAST(this)) {
|
||||
const noEmpty = this.isStart() && this.isEnd() && !this.#parts.some((s) => typeof s !== "string");
|
||||
const src = this.#parts.map((p) => {
|
||||
const [re, _, hasMagic, uflag] = typeof p === "string" ? _a.#parseGlob(p, this.#hasMagic, noEmpty) : p.toRegExpSource(allowDot);
|
||||
this.#hasMagic = this.#hasMagic || hasMagic;
|
||||
this.#uflag = this.#uflag || uflag;
|
||||
return re;
|
||||
}).join("");
|
||||
let start2 = "";
|
||||
if (this.isStart()) {
|
||||
if (typeof this.#parts[0] === "string") {
|
||||
const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
|
||||
if (!dotTravAllowed) {
|
||||
const aps = addPatternStart;
|
||||
const needNoTrav = (
|
||||
// dots are allowed, and the pattern starts with [ or .
|
||||
dot && aps.has(src.charAt(0)) || // the pattern starts with \., and then [ or .
|
||||
src.startsWith("\\.") && aps.has(src.charAt(2)) || // the pattern starts with \.\., and then [ or .
|
||||
src.startsWith("\\.\\.") && aps.has(src.charAt(4))
|
||||
);
|
||||
const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
|
||||
start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : "";
|
||||
}
|
||||
}
|
||||
}
|
||||
let end = "";
|
||||
if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") {
|
||||
end = "(?:$|\\/)";
|
||||
}
|
||||
const final2 = start2 + src + end;
|
||||
return [
|
||||
final2,
|
||||
unescape(src),
|
||||
this.#hasMagic = !!this.#hasMagic,
|
||||
this.#uflag
|
||||
];
|
||||
}
|
||||
const repeated = this.type === "*" || this.type === "+";
|
||||
const start = this.type === "!" ? "(?:(?!(?:" : "(?:";
|
||||
let body2 = this.#partsToRegExp(dot);
|
||||
if (this.isStart() && this.isEnd() && !body2 && this.type !== "!") {
|
||||
const s = this.toString();
|
||||
const me = this;
|
||||
me.#parts = [s];
|
||||
me.type = null;
|
||||
me.#hasMagic = void 0;
|
||||
return [s, unescape(this.toString()), false, false];
|
||||
}
|
||||
let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : this.#partsToRegExp(true);
|
||||
if (bodyDotAllowed === body2) {
|
||||
bodyDotAllowed = "";
|
||||
}
|
||||
if (bodyDotAllowed) {
|
||||
body2 = `(?:${body2})(?:${bodyDotAllowed})*?`;
|
||||
}
|
||||
let final = "";
|
||||
if (this.type === "!" && this.#emptyExt) {
|
||||
final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty;
|
||||
} else {
|
||||
const close = this.type === "!" ? (
|
||||
// !() must match something,but !(x) can match ''
|
||||
"))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")"
|
||||
) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`;
|
||||
final = start + body2 + close;
|
||||
}
|
||||
return [
|
||||
final,
|
||||
unescape(body2),
|
||||
this.#hasMagic = !!this.#hasMagic,
|
||||
this.#uflag
|
||||
];
|
||||
}
|
||||
#flatten() {
|
||||
if (!isExtglobAST(this)) {
|
||||
for (const p of this.#parts) {
|
||||
if (typeof p === "object") {
|
||||
p.#flatten();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let iterations = 0;
|
||||
let done = false;
|
||||
do {
|
||||
done = true;
|
||||
for (let i = 0; i < this.#parts.length; i++) {
|
||||
const c = this.#parts[i];
|
||||
if (typeof c === "object") {
|
||||
c.#flatten();
|
||||
if (this.#canAdopt(c)) {
|
||||
done = false;
|
||||
this.#adopt(c, i);
|
||||
} else if (this.#canAdoptWithSpace(c)) {
|
||||
done = false;
|
||||
this.#adoptWithSpace(c, i);
|
||||
} else if (this.#canUsurp(c)) {
|
||||
done = false;
|
||||
this.#usurp(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (!done && ++iterations < 10);
|
||||
}
|
||||
this.#toString = void 0;
|
||||
}
|
||||
#partsToRegExp(dot) {
|
||||
return this.#parts.map((p) => {
|
||||
if (typeof p === "string") {
|
||||
throw new Error("string type in extglob ast??");
|
||||
}
|
||||
const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
|
||||
this.#uflag = this.#uflag || uflag;
|
||||
return re;
|
||||
}).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|");
|
||||
}
|
||||
static #parseGlob(glob, hasMagic, noEmpty = false) {
|
||||
let escaping = false;
|
||||
let re = "";
|
||||
let uflag = false;
|
||||
let inStar = false;
|
||||
for (let i = 0; i < glob.length; i++) {
|
||||
const c = glob.charAt(i);
|
||||
if (escaping) {
|
||||
escaping = false;
|
||||
re += (reSpecials.has(c) ? "\\" : "") + c;
|
||||
continue;
|
||||
}
|
||||
if (c === "*") {
|
||||
if (inStar)
|
||||
continue;
|
||||
inStar = true;
|
||||
re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star;
|
||||
hasMagic = true;
|
||||
continue;
|
||||
} else {
|
||||
inStar = false;
|
||||
}
|
||||
if (c === "\\") {
|
||||
if (i === glob.length - 1) {
|
||||
re += "\\\\";
|
||||
} else {
|
||||
escaping = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c === "[") {
|
||||
const [src, needUflag, consumed, magic] = parseClass(glob, i);
|
||||
if (consumed) {
|
||||
re += src;
|
||||
uflag = uflag || needUflag;
|
||||
i += consumed - 1;
|
||||
hasMagic = hasMagic || magic;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (c === "?") {
|
||||
re += qmark;
|
||||
hasMagic = true;
|
||||
continue;
|
||||
}
|
||||
re += regExpEscape(c);
|
||||
}
|
||||
return [re, unescape(glob), !!hasMagic, uflag];
|
||||
}
|
||||
};
|
||||
_a = AST;
|
||||
|
||||
// node_modules/@actions/glob/node_modules/minimatch/dist/esm/escape.js
|
||||
var escape2 = (s, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => {
|
||||
if (magicalBraces) {
|
||||
return windowsPathsNoEscape ? s.replace(/[?*()[\]{}]/g, "[$&]") : s.replace(/[?*()[\]\\{}]/g, "\\$&");
|
||||
}
|
||||
return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&");
|
||||
};
|
||||
|
||||
// node_modules/@actions/glob/node_modules/minimatch/dist/esm/index.js
|
||||
var minimatch2 = (p, pattern, options = {}) => {
|
||||
assertValidPattern(pattern);
|
||||
if (!options.nocomment && pattern.charAt(0) === "#") {
|
||||
return false;
|
||||
}
|
||||
return new Minimatch2(pattern, options).match(p);
|
||||
};
|
||||
var starDotExtRE = /^\*+([^+@!?*[(]*)$/;
|
||||
var starDotExtTest = (ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2);
|
||||
var starDotExtTestDot = (ext2) => (f) => f.endsWith(ext2);
|
||||
var starDotExtTestNocase = (ext2) => {
|
||||
ext2 = ext2.toLowerCase();
|
||||
return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2);
|
||||
};
|
||||
var starDotExtTestNocaseDot = (ext2) => {
|
||||
ext2 = ext2.toLowerCase();
|
||||
return (f) => f.toLowerCase().endsWith(ext2);
|
||||
};
|
||||
var starDotStarRE = /^\*+\.\*+$/;
|
||||
var starDotStarTest = (f) => !f.startsWith(".") && f.includes(".");
|
||||
var starDotStarTestDot = (f) => f !== "." && f !== ".." && f.includes(".");
|
||||
var dotStarRE = /^\.\*+$/;
|
||||
var dotStarTest = (f) => f !== "." && f !== ".." && f.startsWith(".");
|
||||
var starRE = /^\*+$/;
|
||||
var starTest = (f) => f.length !== 0 && !f.startsWith(".");
|
||||
var starTestDot = (f) => f.length !== 0 && f !== "." && f !== "..";
|
||||
var qmarksRE = /^\?+([^+@!?*[(]*)?$/;
|
||||
var qmarksTestNocase = ([$0, ext2 = ""]) => {
|
||||
const noext = qmarksTestNoExt([$0]);
|
||||
if (!ext2)
|
||||
return noext;
|
||||
ext2 = ext2.toLowerCase();
|
||||
return (f) => noext(f) && f.toLowerCase().endsWith(ext2);
|
||||
};
|
||||
var qmarksTestNocaseDot = ([$0, ext2 = ""]) => {
|
||||
const noext = qmarksTestNoExtDot([$0]);
|
||||
if (!ext2)
|
||||
return noext;
|
||||
ext2 = ext2.toLowerCase();
|
||||
return (f) => noext(f) && f.toLowerCase().endsWith(ext2);
|
||||
};
|
||||
var qmarksTestDot = ([$0, ext2 = ""]) => {
|
||||
const noext = qmarksTestNoExtDot([$0]);
|
||||
return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2);
|
||||
};
|
||||
var qmarksTest = ([$0, ext2 = ""]) => {
|
||||
const noext = qmarksTestNoExt([$0]);
|
||||
return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2);
|
||||
};
|
||||
var qmarksTestNoExt = ([$0]) => {
|
||||
const len = $0.length;
|
||||
return (f) => f.length === len && !f.startsWith(".");
|
||||
};
|
||||
var qmarksTestNoExtDot = ([$0]) => {
|
||||
const len = $0.length;
|
||||
return (f) => f.length === len && f !== "." && f !== "..";
|
||||
};
|
||||
var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix";
|
||||
var path11 = {
|
||||
win32: { sep: "\\" },
|
||||
posix: { sep: "/" }
|
||||
};
|
||||
var sep7 = defaultPlatform === "win32" ? path11.win32.sep : path11.posix.sep;
|
||||
minimatch2.sep = sep7;
|
||||
var GLOBSTAR = /* @__PURE__ */ Symbol("globstar **");
|
||||
minimatch2.GLOBSTAR = GLOBSTAR;
|
||||
var qmark2 = "[^/]";
|
||||
var star2 = qmark2 + "*?";
|
||||
var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";
|
||||
var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?";
|
||||
var filter2 = (pattern, options = {}) => (p) => minimatch2(p, pattern, options);
|
||||
minimatch2.filter = filter2;
|
||||
var ext = (a, b = {}) => Object.assign({}, a, b);
|
||||
var defaults = (def) => {
|
||||
if (!def || typeof def !== "object" || !Object.keys(def).length) {
|
||||
return minimatch2;
|
||||
}
|
||||
const orig = minimatch2;
|
||||
const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));
|
||||
return Object.assign(m, {
|
||||
Minimatch: class Minimatch extends orig.Minimatch {
|
||||
constructor(pattern, options = {}) {
|
||||
super(pattern, ext(def, options));
|
||||
}
|
||||
static defaults(options) {
|
||||
return orig.defaults(ext(def, options)).Minimatch;
|
||||
}
|
||||
},
|
||||
AST: class AST extends orig.AST {
|
||||
/* c8 ignore start */
|
||||
constructor(type, parent, options = {}) {
|
||||
super(type, parent, ext(def, options));
|
||||
}
|
||||
/* c8 ignore stop */
|
||||
static fromGlob(pattern, options = {}) {
|
||||
return orig.AST.fromGlob(pattern, ext(def, options));
|
||||
}
|
||||
},
|
||||
unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
|
||||
escape: (s, options = {}) => orig.escape(s, ext(def, options)),
|
||||
filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
|
||||
defaults: (options) => orig.defaults(ext(def, options)),
|
||||
makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),
|
||||
braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),
|
||||
match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),
|
||||
sep: orig.sep,
|
||||
GLOBSTAR
|
||||
});
|
||||
};
|
||||
minimatch2.defaults = defaults;
|
||||
var braceExpand = (pattern, options = {}) => {
|
||||
assertValidPattern(pattern);
|
||||
if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
|
||||
return [pattern];
|
||||
}
|
||||
return expand(pattern, { max: options.braceExpandMax });
|
||||
};
|
||||
minimatch2.braceExpand = braceExpand;
|
||||
var makeRe = (pattern, options = {}) => new Minimatch2(pattern, options).makeRe();
|
||||
minimatch2.makeRe = makeRe;
|
||||
var match2 = (list, pattern, options = {}) => {
|
||||
const mm = new Minimatch2(pattern, options);
|
||||
list = list.filter((f) => mm.match(f));
|
||||
if (mm.options.nonull && !list.length) {
|
||||
list.push(pattern);
|
||||
}
|
||||
return list;
|
||||
};
|
||||
minimatch2.match = match2;
|
||||
var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
|
||||
var regExpEscape2 = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
var Minimatch2 = class {
|
||||
options;
|
||||
set;
|
||||
pattern;
|
||||
windowsPathsNoEscape;
|
||||
nonegate;
|
||||
negate;
|
||||
comment;
|
||||
empty;
|
||||
preserveMultipleSlashes;
|
||||
partial;
|
||||
globSet;
|
||||
globParts;
|
||||
nocase;
|
||||
isWindows;
|
||||
platform;
|
||||
windowsNoMagicRoot;
|
||||
maxGlobstarRecursion;
|
||||
regexp;
|
||||
constructor(pattern, options = {}) {
|
||||
assertValidPattern(pattern);
|
||||
options = options || {};
|
||||
this.options = options;
|
||||
this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;
|
||||
this.pattern = pattern;
|
||||
this.platform = options.platform || defaultPlatform;
|
||||
this.isWindows = this.platform === "win32";
|
||||
const awe = "allowWindowsEscape";
|
||||
this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options[awe] === false;
|
||||
if (this.windowsPathsNoEscape) {
|
||||
this.pattern = this.pattern.replace(/\\/g, "/");
|
||||
}
|
||||
this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
|
||||
this.regexp = null;
|
||||
this.negate = false;
|
||||
this.nonegate = !!options.nonegate;
|
||||
this.comment = false;
|
||||
this.empty = false;
|
||||
this.partial = !!options.partial;
|
||||
this.nocase = !!this.options.nocase;
|
||||
this.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase);
|
||||
this.globSet = [];
|
||||
this.globParts = [];
|
||||
this.set = [];
|
||||
this.make();
|
||||
}
|
||||
hasMagic() {
|
||||
if (this.options.magicalBraces && this.set.length > 1) {
|
||||
return true;
|
||||
}
|
||||
for (const pattern of this.set) {
|
||||
for (const part of pattern) {
|
||||
if (typeof part !== "string")
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
debug(..._) {
|
||||
}
|
||||
make() {
|
||||
const pattern = this.pattern;
|
||||
const options = this.options;
|
||||
if (!options.nocomment && pattern.charAt(0) === "#") {
|
||||
this.comment = true;
|
||||
return;
|
||||
}
|
||||
if (!pattern) {
|
||||
this.empty = true;
|
||||
return;
|
||||
}
|
||||
this.parseNegate();
|
||||
this.globSet = [...new Set(this.braceExpand())];
|
||||
if (options.debug) {
|
||||
this.debug = (...args) => console.error(...args);
|
||||
}
|
||||
this.debug(this.pattern, this.globSet);
|
||||
const rawGlobParts = this.globSet.map((s) => this.slashSplit(s));
|
||||
this.globParts = this.preprocess(rawGlobParts);
|
||||
this.debug(this.pattern, this.globParts);
|
||||
let set = this.globParts.map((s, _, __) => {
|
||||
if (this.isWindows && this.windowsNoMagicRoot) {
|
||||
const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]);
|
||||
const isDrive = /^[a-z]:/i.test(s[0]);
|
||||
if (isUNC) {
|
||||
return [
|
||||
...s.slice(0, 4),
|
||||
...s.slice(4).map((ss) => this.parse(ss))
|
||||
];
|
||||
} else if (isDrive) {
|
||||
return [s[0], ...s.slice(1).map((ss) => this.parse(ss))];
|
||||
}
|
||||
}
|
||||
return s.map((ss) => this.parse(ss));
|
||||
});
|
||||
this.debug(this.pattern, set);
|
||||
this.set = set.filter((s) => s.indexOf(false) === -1);
|
||||
if (this.isWindows) {
|
||||
for (let i = 0; i < this.set.length; i++) {
|
||||
const p = this.set[i];
|
||||
if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) {
|
||||
p[2] = "?";
|
||||
}
|
||||
}
|
||||
}
|
||||
this.debug(this.pattern, this.set);
|
||||
}
|
||||
// various transforms to equivalent pattern sets that are
|
||||
// faster to process in a filesystem walk. The goal is to
|
||||
// eliminate what we can, and push all ** patterns as far
|
||||
// to the right as possible, even if it increases the number
|
||||
// of patterns that we have to process.
|
||||
preprocess(globParts) {
|
||||
if (this.options.noglobstar) {
|
||||
for (const partset of globParts) {
|
||||
for (let j = 0; j < partset.length; j++) {
|
||||
if (partset[j] === "**") {
|
||||
partset[j] = "*";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const { optimizationLevel = 1 } = this.options;
|
||||
if (optimizationLevel >= 2) {
|
||||
globParts = this.firstPhasePreProcess(globParts);
|
||||
globParts = this.secondPhasePreProcess(globParts);
|
||||
} else if (optimizationLevel >= 1) {
|
||||
globParts = this.levelOneOptimize(globParts);
|
||||
} else {
|
||||
globParts = this.adjascentGlobstarOptimize(globParts);
|
||||
}
|
||||
return globParts;
|
||||
}
|
||||
// just get rid of adjascent ** portions
|
||||
adjascentGlobstarOptimize(globParts) {
|
||||
return globParts.map((parts) => {
|
||||
let gs = -1;
|
||||
while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
|
||||
let i = gs;
|
||||
while (parts[i + 1] === "**") {
|
||||
i++;
|
||||
}
|
||||
if (i !== gs) {
|
||||
parts.splice(gs, i - gs);
|
||||
}
|
||||
}
|
||||
return parts;
|
||||
});
|
||||
}
|
||||
// get rid of adjascent ** and resolve .. portions
|
||||
levelOneOptimize(globParts) {
|
||||
return globParts.map((parts) => {
|
||||
parts = parts.reduce((set, part) => {
|
||||
const prev = set[set.length - 1];
|
||||
if (part === "**" && prev === "**") {
|
||||
return set;
|
||||
}
|
||||
if (part === "..") {
|
||||
if (prev && prev !== ".." && prev !== "." && prev !== "**") {
|
||||
set.pop();
|
||||
return set;
|
||||
}
|
||||
}
|
||||
set.push(part);
|
||||
return set;
|
||||
}, []);
|
||||
return parts.length === 0 ? [""] : parts;
|
||||
});
|
||||
}
|
||||
levelTwoFileOptimize(parts) {
|
||||
if (!Array.isArray(parts)) {
|
||||
parts = this.slashSplit(parts);
|
||||
}
|
||||
let didSomething = false;
|
||||
do {
|
||||
didSomething = false;
|
||||
if (!this.preserveMultipleSlashes) {
|
||||
for (let i = 1; i < parts.length - 1; i++) {
|
||||
const p = parts[i];
|
||||
if (i === 1 && p === "" && parts[0] === "")
|
||||
continue;
|
||||
if (p === "." || p === "") {
|
||||
didSomething = true;
|
||||
parts.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
|
||||
didSomething = true;
|
||||
parts.pop();
|
||||
}
|
||||
}
|
||||
let dd = 0;
|
||||
while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
|
||||
const p = parts[dd - 1];
|
||||
if (p && p !== "." && p !== ".." && p !== "**" && !(this.isWindows && /^[a-z]:$/i.test(p))) {
|
||||
didSomething = true;
|
||||
parts.splice(dd - 1, 2);
|
||||
dd -= 2;
|
||||
}
|
||||
}
|
||||
} while (didSomething);
|
||||
return parts.length === 0 ? [""] : parts;
|
||||
}
|
||||
// First phase: single-pattern processing
|
||||
// <pre> is 1 or more portions
|
||||
// <rest> is 1 or more portions
|
||||
// <p> is any portion other than ., .., '', or **
|
||||
// <e> is . or ''
|
||||
//
|
||||
// **/.. is *brutal* for filesystem walking performance, because
|
||||
// it effectively resets the recursive walk each time it occurs,
|
||||
// and ** cannot be reduced out by a .. pattern part like a regexp
|
||||
// or most strings (other than .., ., and '') can be.
|
||||
//
|
||||
// <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}
|
||||
// <pre>/<e>/<rest> -> <pre>/<rest>
|
||||
// <pre>/<p>/../<rest> -> <pre>/<rest>
|
||||
// **/**/<rest> -> **/<rest>
|
||||
//
|
||||
// **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow
|
||||
// this WOULD be allowed if ** did follow symlinks, or * didn't
|
||||
firstPhasePreProcess(globParts) {
|
||||
let didSomething = false;
|
||||
do {
|
||||
didSomething = false;
|
||||
for (let parts of globParts) {
|
||||
let gs = -1;
|
||||
while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
|
||||
let gss = gs;
|
||||
while (parts[gss + 1] === "**") {
|
||||
gss++;
|
||||
}
|
||||
if (gss > gs) {
|
||||
parts.splice(gs + 1, gss - gs);
|
||||
}
|
||||
let next = parts[gs + 1];
|
||||
const p = parts[gs + 2];
|
||||
const p2 = parts[gs + 3];
|
||||
if (next !== "..")
|
||||
continue;
|
||||
if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
|
||||
continue;
|
||||
}
|
||||
didSomething = true;
|
||||
parts.splice(gs, 1);
|
||||
const other = parts.slice(0);
|
||||
other[gs] = "**";
|
||||
globParts.push(other);
|
||||
gs--;
|
||||
}
|
||||
if (!this.preserveMultipleSlashes) {
|
||||
for (let i = 1; i < parts.length - 1; i++) {
|
||||
const p = parts[i];
|
||||
if (i === 1 && p === "" && parts[0] === "")
|
||||
continue;
|
||||
if (p === "." || p === "") {
|
||||
didSomething = true;
|
||||
parts.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
|
||||
didSomething = true;
|
||||
parts.pop();
|
||||
}
|
||||
}
|
||||
let dd = 0;
|
||||
while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
|
||||
const p = parts[dd - 1];
|
||||
if (p && p !== "." && p !== ".." && p !== "**") {
|
||||
didSomething = true;
|
||||
const needDot = dd === 1 && parts[dd + 1] === "**";
|
||||
const splin = needDot ? ["."] : [];
|
||||
parts.splice(dd - 1, 2, ...splin);
|
||||
if (parts.length === 0)
|
||||
parts.push("");
|
||||
dd -= 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (didSomething);
|
||||
return globParts;
|
||||
}
|
||||
// second phase: multi-pattern dedupes
|
||||
// {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>
|
||||
// {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>
|
||||
// {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>
|
||||
//
|
||||
// {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>
|
||||
// ^-- not valid because ** doens't follow symlinks
|
||||
secondPhasePreProcess(globParts) {
|
||||
for (let i = 0; i < globParts.length - 1; i++) {
|
||||
for (let j = i + 1; j < globParts.length; j++) {
|
||||
const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
|
||||
if (matched) {
|
||||
globParts[i] = [];
|
||||
globParts[j] = matched;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return globParts.filter((gs) => gs.length);
|
||||
}
|
||||
partsMatch(a, b, emptyGSMatch = false) {
|
||||
let ai = 0;
|
||||
let bi = 0;
|
||||
let result = [];
|
||||
let which2 = "";
|
||||
while (ai < a.length && bi < b.length) {
|
||||
if (a[ai] === b[bi]) {
|
||||
result.push(which2 === "b" ? b[bi] : a[ai]);
|
||||
ai++;
|
||||
bi++;
|
||||
} else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
|
||||
result.push(a[ai]);
|
||||
ai++;
|
||||
} else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
|
||||
result.push(b[bi]);
|
||||
bi++;
|
||||
} else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
|
||||
if (which2 === "b")
|
||||
return false;
|
||||
which2 = "a";
|
||||
result.push(a[ai]);
|
||||
ai++;
|
||||
bi++;
|
||||
} else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
|
||||
if (which2 === "a")
|
||||
return false;
|
||||
which2 = "b";
|
||||
result.push(b[bi]);
|
||||
ai++;
|
||||
bi++;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return a.length === b.length && result;
|
||||
}
|
||||
parseNegate() {
|
||||
if (this.nonegate)
|
||||
return;
|
||||
const pattern = this.pattern;
|
||||
let negate = false;
|
||||
let negateOffset = 0;
|
||||
for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
|
||||
negate = !negate;
|
||||
negateOffset++;
|
||||
}
|
||||
if (negateOffset)
|
||||
this.pattern = pattern.slice(negateOffset);
|
||||
this.negate = negate;
|
||||
}
|
||||
// set partial to true to test if, for example,
|
||||
// "/a/b" matches the start of "/*/b/*/d"
|
||||
// Partial means, if you run out of file before you run
|
||||
// out of pattern, then that's fine, as long as all
|
||||
// the parts match.
|
||||
matchOne(file, pattern, partial = false) {
|
||||
let fileStartIndex = 0;
|
||||
let patternStartIndex = 0;
|
||||
if (this.isWindows) {
|
||||
const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
|
||||
const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
|
||||
const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
|
||||
const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
|
||||
const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
|
||||
const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
|
||||
if (typeof fdi === "number" && typeof pdi === "number") {
|
||||
const [fd, pd] = [
|
||||
file[fdi],
|
||||
pattern[pdi]
|
||||
];
|
||||
if (fd.toLowerCase() === pd.toLowerCase()) {
|
||||
pattern[pdi] = fd;
|
||||
patternStartIndex = pdi;
|
||||
fileStartIndex = fdi;
|
||||
}
|
||||
}
|
||||
}
|
||||
const { optimizationLevel = 1 } = this.options;
|
||||
if (optimizationLevel >= 2) {
|
||||
file = this.levelTwoFileOptimize(file);
|
||||
}
|
||||
if (pattern.includes(GLOBSTAR)) {
|
||||
return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);
|
||||
}
|
||||
return this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);
|
||||
}
|
||||
#matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {
|
||||
const firstgs = pattern.indexOf(GLOBSTAR, patternIndex);
|
||||
const lastgs = pattern.lastIndexOf(GLOBSTAR);
|
||||
const [head, body2, tail] = partial ? [
|
||||
pattern.slice(patternIndex, firstgs),
|
||||
pattern.slice(firstgs + 1),
|
||||
[]
|
||||
] : [
|
||||
pattern.slice(patternIndex, firstgs),
|
||||
pattern.slice(firstgs + 1, lastgs),
|
||||
pattern.slice(lastgs + 1)
|
||||
];
|
||||
if (head.length) {
|
||||
const fileHead = file.slice(fileIndex, fileIndex + head.length);
|
||||
if (!this.#matchOne(fileHead, head, partial, 0, 0)) {
|
||||
return false;
|
||||
}
|
||||
fileIndex += head.length;
|
||||
patternIndex += head.length;
|
||||
}
|
||||
let fileTailMatch = 0;
|
||||
if (tail.length) {
|
||||
if (tail.length + fileIndex > file.length)
|
||||
return false;
|
||||
let tailStart = file.length - tail.length;
|
||||
if (this.#matchOne(file, tail, partial, tailStart, 0)) {
|
||||
fileTailMatch = tail.length;
|
||||
} else {
|
||||
if (file[file.length - 1] !== "" || fileIndex + tail.length === file.length) {
|
||||
return false;
|
||||
}
|
||||
tailStart--;
|
||||
if (!this.#matchOne(file, tail, partial, tailStart, 0)) {
|
||||
return false;
|
||||
}
|
||||
fileTailMatch = tail.length + 1;
|
||||
}
|
||||
}
|
||||
if (!body2.length) {
|
||||
let sawSome = !!fileTailMatch;
|
||||
for (let i2 = fileIndex; i2 < file.length - fileTailMatch; i2++) {
|
||||
const f = String(file[i2]);
|
||||
sawSome = true;
|
||||
if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return partial || sawSome;
|
||||
}
|
||||
const bodySegments = [[[], 0]];
|
||||
let currentBody = bodySegments[0];
|
||||
let nonGsParts = 0;
|
||||
const nonGsPartsSums = [0];
|
||||
for (const b of body2) {
|
||||
if (b === GLOBSTAR) {
|
||||
nonGsPartsSums.push(nonGsParts);
|
||||
currentBody = [[], 0];
|
||||
bodySegments.push(currentBody);
|
||||
} else {
|
||||
currentBody[0].push(b);
|
||||
nonGsParts++;
|
||||
}
|
||||
}
|
||||
let i = bodySegments.length - 1;
|
||||
const fileLength = file.length - fileTailMatch;
|
||||
for (const b of bodySegments) {
|
||||
b[1] = fileLength - (nonGsPartsSums[i--] + b[0].length);
|
||||
}
|
||||
return !!this.#matchGlobStarBodySections(file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch);
|
||||
}
|
||||
// return false for "nope, not matching"
|
||||
// return null for "not matching, cannot keep trying"
|
||||
#matchGlobStarBodySections(file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail) {
|
||||
const bs = bodySegments[bodyIndex];
|
||||
if (!bs) {
|
||||
for (let i = fileIndex; i < file.length; i++) {
|
||||
sawTail = true;
|
||||
const f = file[i];
|
||||
if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return sawTail;
|
||||
}
|
||||
const [body2, after] = bs;
|
||||
while (fileIndex <= after) {
|
||||
const m = this.#matchOne(file.slice(0, fileIndex + body2.length), body2, partial, fileIndex, 0);
|
||||
if (m && globStarDepth < this.maxGlobstarRecursion) {
|
||||
const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body2.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail);
|
||||
if (sub !== false) {
|
||||
return sub;
|
||||
}
|
||||
}
|
||||
const f = file[fileIndex];
|
||||
if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) {
|
||||
return false;
|
||||
}
|
||||
fileIndex++;
|
||||
}
|
||||
return partial || null;
|
||||
}
|
||||
#matchOne(file, pattern, partial, fileIndex, patternIndex) {
|
||||
let fi;
|
||||
let pi;
|
||||
let pl;
|
||||
let fl;
|
||||
for (fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
|
||||
this.debug("matchOne loop");
|
||||
let p = pattern[pi];
|
||||
let f = file[fi];
|
||||
this.debug(pattern, p, f);
|
||||
if (p === false || p === GLOBSTAR) {
|
||||
return false;
|
||||
}
|
||||
let hit;
|
||||
if (typeof p === "string") {
|
||||
hit = f === p;
|
||||
this.debug("string match", p, f, hit);
|
||||
} else {
|
||||
hit = p.test(f);
|
||||
this.debug("pattern match", p, f, hit);
|
||||
}
|
||||
if (!hit)
|
||||
return false;
|
||||
}
|
||||
if (fi === fl && pi === pl) {
|
||||
return true;
|
||||
} else if (fi === fl) {
|
||||
return partial;
|
||||
} else if (pi === pl) {
|
||||
return fi === fl - 1 && file[fi] === "";
|
||||
} else {
|
||||
throw new Error("wtf?");
|
||||
}
|
||||
}
|
||||
braceExpand() {
|
||||
return braceExpand(this.pattern, this.options);
|
||||
}
|
||||
parse(pattern) {
|
||||
assertValidPattern(pattern);
|
||||
const options = this.options;
|
||||
if (pattern === "**")
|
||||
return GLOBSTAR;
|
||||
if (pattern === "")
|
||||
return "";
|
||||
let m;
|
||||
let fastTest = null;
|
||||
if (m = pattern.match(starRE)) {
|
||||
fastTest = options.dot ? starTestDot : starTest;
|
||||
} else if (m = pattern.match(starDotExtRE)) {
|
||||
fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
|
||||
} else if (m = pattern.match(qmarksRE)) {
|
||||
fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
|
||||
} else if (m = pattern.match(starDotStarRE)) {
|
||||
fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
|
||||
} else if (m = pattern.match(dotStarRE)) {
|
||||
fastTest = dotStarTest;
|
||||
}
|
||||
const re = AST.fromGlob(pattern, this.options).toMMPattern();
|
||||
if (fastTest && typeof re === "object") {
|
||||
Reflect.defineProperty(re, "test", { value: fastTest });
|
||||
}
|
||||
return re;
|
||||
}
|
||||
makeRe() {
|
||||
if (this.regexp || this.regexp === false)
|
||||
return this.regexp;
|
||||
const set = this.set;
|
||||
if (!set.length) {
|
||||
this.regexp = false;
|
||||
return this.regexp;
|
||||
}
|
||||
const options = this.options;
|
||||
const twoStar = options.noglobstar ? star2 : options.dot ? twoStarDot : twoStarNoDot;
|
||||
const flags = new Set(options.nocase ? ["i"] : []);
|
||||
let re = set.map((pattern) => {
|
||||
const pp = pattern.map((p) => {
|
||||
if (p instanceof RegExp) {
|
||||
for (const f of p.flags.split(""))
|
||||
flags.add(f);
|
||||
}
|
||||
return typeof p === "string" ? regExpEscape2(p) : p === GLOBSTAR ? GLOBSTAR : p._src;
|
||||
});
|
||||
pp.forEach((p, i) => {
|
||||
const next = pp[i + 1];
|
||||
const prev = pp[i - 1];
|
||||
if (p !== GLOBSTAR || prev === GLOBSTAR) {
|
||||
return;
|
||||
}
|
||||
if (prev === void 0) {
|
||||
if (next !== void 0 && next !== GLOBSTAR) {
|
||||
pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
|
||||
} else {
|
||||
pp[i] = twoStar;
|
||||
}
|
||||
} else if (next === void 0) {
|
||||
pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + ")?";
|
||||
} else if (next !== GLOBSTAR) {
|
||||
pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
|
||||
pp[i + 1] = GLOBSTAR;
|
||||
}
|
||||
});
|
||||
const filtered = pp.filter((p) => p !== GLOBSTAR);
|
||||
if (this.partial && filtered.length >= 1) {
|
||||
const prefixes = [];
|
||||
for (let i = 1; i <= filtered.length; i++) {
|
||||
prefixes.push(filtered.slice(0, i).join("/"));
|
||||
}
|
||||
return "(?:" + prefixes.join("|") + ")";
|
||||
}
|
||||
return filtered.join("/");
|
||||
}).join("|");
|
||||
const [open2, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
|
||||
re = "^" + open2 + re + close + "$";
|
||||
if (this.partial) {
|
||||
re = "^(?:\\/|" + open2 + re.slice(1, -1) + close + ")$";
|
||||
}
|
||||
if (this.negate)
|
||||
re = "^(?!" + re + ").+$";
|
||||
try {
|
||||
this.regexp = new RegExp(re, [...flags].join(""));
|
||||
} catch {
|
||||
this.regexp = false;
|
||||
}
|
||||
return this.regexp;
|
||||
}
|
||||
slashSplit(p) {
|
||||
if (this.preserveMultipleSlashes) {
|
||||
return p.split("/");
|
||||
} else if (this.isWindows && /^\/\/[^/]+/.test(p)) {
|
||||
return ["", ...p.split(/\/+/)];
|
||||
} else {
|
||||
return p.split(/\/+/);
|
||||
}
|
||||
}
|
||||
match(f, partial = this.partial) {
|
||||
this.debug("match", f, this.pattern);
|
||||
if (this.comment) {
|
||||
return false;
|
||||
}
|
||||
if (this.empty) {
|
||||
return f === "";
|
||||
}
|
||||
if (f === "/" && partial) {
|
||||
return true;
|
||||
}
|
||||
const options = this.options;
|
||||
if (this.isWindows) {
|
||||
f = f.split("\\").join("/");
|
||||
}
|
||||
const ff = this.slashSplit(f);
|
||||
this.debug(this.pattern, "split", ff);
|
||||
const set = this.set;
|
||||
this.debug(this.pattern, "set", set);
|
||||
let filename = ff[ff.length - 1];
|
||||
if (!filename) {
|
||||
for (let i = ff.length - 2; !filename && i >= 0; i--) {
|
||||
filename = ff[i];
|
||||
}
|
||||
}
|
||||
for (const pattern of set) {
|
||||
let file = ff;
|
||||
if (options.matchBase && pattern.length === 1) {
|
||||
file = [filename];
|
||||
}
|
||||
const hit = this.matchOne(file, pattern, partial);
|
||||
if (hit) {
|
||||
if (options.flipNegate) {
|
||||
return true;
|
||||
}
|
||||
return !this.negate;
|
||||
}
|
||||
}
|
||||
if (options.flipNegate) {
|
||||
return false;
|
||||
}
|
||||
return this.negate;
|
||||
}
|
||||
static defaults(def) {
|
||||
return minimatch2.defaults(def).Minimatch;
|
||||
}
|
||||
};
|
||||
minimatch2.AST = AST;
|
||||
minimatch2.Minimatch = Minimatch2;
|
||||
minimatch2.escape = escape2;
|
||||
minimatch2.unescape = unescape;
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-path.js
|
||||
var IS_WINDOWS11 = process.platform === "win32";
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-pattern.js
|
||||
var IS_WINDOWS12 = process.platform === "win32";
|
||||
|
||||
// node_modules/@actions/glob/lib/internal-globber.js
|
||||
var IS_WINDOWS13 = process.platform === "win32";
|
||||
|
||||
// src/utils/logging.ts
|
||||
var quiet;
|
||||
function isQuiet() {
|
||||
@@ -61834,10 +63724,57 @@ var STATE_UV_PATH = "uv-path";
|
||||
var STATE_UV_VERSION = "uv-version";
|
||||
|
||||
// src/utils/inputs.ts
|
||||
var import_node_fs4 = __toESM(require("node:fs"), 1);
|
||||
var import_node_path = __toESM(require("node:path"), 1);
|
||||
|
||||
// src/utils/config-file.ts
|
||||
// src/version/tool-versions-file.ts
|
||||
var import_node_fs2 = __toESM(require("node:fs"), 1);
|
||||
function getPythonVersionFromToolVersions(filePath) {
|
||||
const versions = getToolVersions(filePath, "python");
|
||||
if (versions === void 0 || versions.length === 0) {
|
||||
return void 0;
|
||||
}
|
||||
if (versions.length > 1) {
|
||||
warning(
|
||||
"Multiple Python versions in .tool-versions are not supported. The Python entry will be ignored."
|
||||
);
|
||||
return void 0;
|
||||
}
|
||||
const version3 = stripVersionPrefix(versions[0]);
|
||||
if (version3 === "system" || version3.startsWith("ref:") || version3.startsWith("path:") || isPath(version3)) {
|
||||
warning(
|
||||
`The Python version ${versions[0]} in .tool-versions is not supported. The Python entry will be ignored.`
|
||||
);
|
||||
return void 0;
|
||||
}
|
||||
return version3;
|
||||
}
|
||||
function getToolVersions(filePath, toolName) {
|
||||
if (!filePath.endsWith(".tool-versions")) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContents = import_node_fs2.default.readFileSync(filePath, "utf8");
|
||||
for (const line of fileContents.split("\n")) {
|
||||
const content = line.split("#", 1)[0].trim();
|
||||
if (content === "") {
|
||||
continue;
|
||||
}
|
||||
const [tool, ...versions] = content.split(/\s+/);
|
||||
if (tool === toolName) {
|
||||
return versions;
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
function stripVersionPrefix(version3) {
|
||||
return version3.startsWith("v") ? version3.slice(1) : version3;
|
||||
}
|
||||
function isPath(version3) {
|
||||
return version3.includes("/") || version3.includes("\\");
|
||||
}
|
||||
|
||||
// src/utils/config-file.ts
|
||||
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
||||
|
||||
// node_modules/smol-toml/dist/date.js
|
||||
var DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;
|
||||
@@ -61850,18 +63787,18 @@ var TomlDate = class _TomlDate extends Date {
|
||||
let hasTime = true;
|
||||
let offset = "Z";
|
||||
if (typeof date === "string") {
|
||||
let match2 = date.match(DATE_TIME_RE);
|
||||
if (match2) {
|
||||
if (!match2[1]) {
|
||||
let match4 = date.match(DATE_TIME_RE);
|
||||
if (match4) {
|
||||
if (!match4[1]) {
|
||||
hasDate = false;
|
||||
date = `0000-01-01T${date}`;
|
||||
}
|
||||
hasTime = !!match2[2];
|
||||
hasTime = !!match4[2];
|
||||
hasTime && date[10] === " " && (date = date.replace(" ", "T"));
|
||||
if (match2[2] && +match2[2] > 23) {
|
||||
if (match4[2] && +match4[2] > 23) {
|
||||
date = "";
|
||||
} else {
|
||||
offset = match2[3] || null;
|
||||
offset = match4[3] || null;
|
||||
date = date.toUpperCase();
|
||||
if (!offset && hasTime)
|
||||
date += "Z";
|
||||
@@ -62101,24 +64038,24 @@ function parseValue2(value, toml, ptr, integersAsBigInt) {
|
||||
});
|
||||
}
|
||||
value = value.replace(/_/g, "");
|
||||
let numeric = +value;
|
||||
if (isNaN(numeric)) {
|
||||
let numeric2 = +value;
|
||||
if (isNaN(numeric2)) {
|
||||
throw new TomlError("invalid number", {
|
||||
toml,
|
||||
ptr
|
||||
});
|
||||
}
|
||||
if (isInt) {
|
||||
if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {
|
||||
if ((isInt = !Number.isSafeInteger(numeric2)) && !integersAsBigInt) {
|
||||
throw new TomlError("integer value cannot be represented losslessly", {
|
||||
toml,
|
||||
ptr
|
||||
});
|
||||
}
|
||||
if (isInt || integersAsBigInt === true)
|
||||
numeric = BigInt(value);
|
||||
numeric2 = BigInt(value);
|
||||
}
|
||||
return numeric;
|
||||
return numeric2;
|
||||
}
|
||||
const date = new TomlDate(value);
|
||||
if (!date.isValid()) {
|
||||
@@ -62164,7 +64101,7 @@ function skipVoid(str, ptr, banNewLines, banComments) {
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
function skipUntil(str, ptr, sep7, end, banNewLines = false) {
|
||||
function skipUntil(str, ptr, sep8, end, banNewLines = false) {
|
||||
if (!end) {
|
||||
ptr = indexOfNewline(str, ptr);
|
||||
return ptr < 0 ? str.length : ptr;
|
||||
@@ -62173,7 +64110,9 @@ function skipUntil(str, ptr, sep7, end, banNewLines = false) {
|
||||
let c = str[i];
|
||||
if (c === "#") {
|
||||
i = indexOfNewline(str, i);
|
||||
} else if (c === sep7) {
|
||||
if (i < 0)
|
||||
break;
|
||||
} else if (c === sep8) {
|
||||
return i + 1;
|
||||
} else if (c === end || banNewLines && (c === "\n" || c === "\r" && str[i + 1] === "\n")) {
|
||||
return i;
|
||||
@@ -62521,10 +64460,10 @@ function parse3(toml, { maxDepth = 1e3, integersAsBigInt } = {}) {
|
||||
|
||||
// src/utils/config-file.ts
|
||||
function getConfigValueFromTomlFile(filePath, key) {
|
||||
if (!import_node_fs2.default.existsSync(filePath) || !filePath.endsWith(".toml")) {
|
||||
if (!import_node_fs3.default.existsSync(filePath) || !filePath.endsWith(".toml")) {
|
||||
return void 0;
|
||||
}
|
||||
const fileContent = import_node_fs2.default.readFileSync(filePath, "utf-8");
|
||||
const fileContent = import_node_fs3.default.readFileSync(filePath, "utf-8");
|
||||
return getConfigValueFromTomlContent(filePath, fileContent, key);
|
||||
}
|
||||
function getConfigValueFromTomlContent(filePath, fileContent, key) {
|
||||
@@ -62544,7 +64483,7 @@ function loadInputs() {
|
||||
const workingDirectory = getInput("working-directory");
|
||||
const version3 = getInput("version");
|
||||
const versionFile = getVersionFile(workingDirectory);
|
||||
const pythonVersion = getInput("python-version");
|
||||
const pythonVersion = getPythonVersion(versionFile);
|
||||
const activateEnvironment = getBooleanInput("activate-environment");
|
||||
const noProject = getBooleanInput("no-project");
|
||||
const venvPath = getVenvPath(workingDirectory, activateEnvironment);
|
||||
@@ -62610,6 +64549,26 @@ function getVersionFile(workingDirectory) {
|
||||
}
|
||||
return versionFileInput;
|
||||
}
|
||||
function getPythonVersion(versionFile) {
|
||||
const pythonVersionInput = getInput("python-version");
|
||||
if (pythonVersionInput !== "") {
|
||||
return pythonVersionInput;
|
||||
}
|
||||
if (process.env.UV_PYTHON !== void 0 && process.env.UV_PYTHON !== "") {
|
||||
return "";
|
||||
}
|
||||
if (versionFile === "" || !import_node_fs4.default.existsSync(versionFile)) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
return getPythonVersionFromToolVersions(versionFile) ?? "";
|
||||
} catch (err) {
|
||||
warning2(
|
||||
`Error while parsing Python version from ${versionFile}: ${err.message}`
|
||||
);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
function getVenvPath(workingDirectory, activateEnvironment) {
|
||||
const venvPathInput = getInput("venv-path");
|
||||
if (venvPathInput !== "") {
|
||||
@@ -62624,7 +64583,20 @@ function getVenvPath(workingDirectory, activateEnvironment) {
|
||||
function getEnableCache() {
|
||||
const enableCacheInput = getInput("enable-cache");
|
||||
if (enableCacheInput === "auto") {
|
||||
return process.env.RUNNER_ENVIRONMENT === "github-hosted";
|
||||
if (process.env.RUNNER_ENVIRONMENT !== "github-hosted") {
|
||||
return false;
|
||||
}
|
||||
const eventName = process.env.GITHUB_EVENT_NAME;
|
||||
const isTagPush = eventName === "push" && process.env.GITHUB_REF?.startsWith("refs/tags/");
|
||||
if (isTagPush) {
|
||||
info2("Caching is disabled for tag pushes");
|
||||
return false;
|
||||
}
|
||||
if (eventName === "pull_request_target" || eventName === "workflow_run" || eventName === "release") {
|
||||
info2(`Caching is disabled for the ${eventName} event`);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return enableCacheInput === "true";
|
||||
}
|
||||
@@ -62840,7 +64812,7 @@ async function saveCache3(inputs) {
|
||||
await pruneCache();
|
||||
}
|
||||
const actualCachePath = getUvCachePath(inputs);
|
||||
if (!fs7.existsSync(actualCachePath)) {
|
||||
if (!fs9.existsSync(actualCachePath)) {
|
||||
if (inputs.ignoreNothingToCache) {
|
||||
info2(
|
||||
"No cacheable uv cache paths were found. Ignoring because ignore-nothing-to-cache is enabled."
|
||||
@@ -62860,7 +64832,7 @@ async function saveCache3(inputs) {
|
||||
}
|
||||
}
|
||||
if (inputs.cachePython) {
|
||||
if (!fs7.existsSync(inputs.pythonDir)) {
|
||||
if (!fs9.existsSync(inputs.pythonDir)) {
|
||||
warning2(
|
||||
`Python cache path ${inputs.pythonDir} does not exist on disk. Skipping Python cache save because no managed Python installation was found. If you want uv to install managed Python instead of using a system interpreter, set UV_PYTHON_PREFERENCE=only-managed.`
|
||||
);
|
||||
|
||||
+5641
-2015
File diff suppressed because it is too large
Load Diff
+2126
-524
@@ -19803,6 +19803,7 @@ var require_symbols6 = __commonJS({
|
||||
kCounter: /* @__PURE__ */ Symbol("socket request counter"),
|
||||
kMaxResponseSize: /* @__PURE__ */ Symbol("max response size"),
|
||||
kHTTP2Session: /* @__PURE__ */ Symbol("http2Session"),
|
||||
kHTTP2Options: /* @__PURE__ */ Symbol("http2 options"),
|
||||
kHTTP2SessionState: /* @__PURE__ */ Symbol("http2Session state"),
|
||||
kRetryHandlerDefaultRetry: /* @__PURE__ */ Symbol("retry agent default retry"),
|
||||
kConstruct: /* @__PURE__ */ Symbol("constructable"),
|
||||
@@ -20394,6 +20395,22 @@ var require_errors2 = __commonJS({
|
||||
return true;
|
||||
}
|
||||
};
|
||||
var kProxyConnectionError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_PRX_CONN");
|
||||
var ProxyConnectionError = class extends UndiciError {
|
||||
constructor(cause, message, options = {}) {
|
||||
super(message, { cause, ...options });
|
||||
this.name = "ProxyConnectionError";
|
||||
this.message = message || "Proxy Connection failed";
|
||||
this.code = "UND_ERR_PRX_CONN";
|
||||
this.cause = cause;
|
||||
}
|
||||
static [Symbol.hasInstance](instance) {
|
||||
return instance && instance[kProxyConnectionError] === true;
|
||||
}
|
||||
get [kProxyConnectionError]() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
var kMaxOriginsReachedError = /* @__PURE__ */ Symbol.for("undici.error.UND_ERR_MAX_ORIGINS_REACHED");
|
||||
var MaxOriginsReachedError = class extends UndiciError {
|
||||
constructor(message) {
|
||||
@@ -20455,6 +20472,7 @@ var require_errors2 = __commonJS({
|
||||
RequestRetryError,
|
||||
ResponseError,
|
||||
SecureProxyConnectionError,
|
||||
ProxyConnectionError,
|
||||
MaxOriginsReachedError,
|
||||
Socks5ProxyError,
|
||||
MessageSizeExceededError
|
||||
@@ -20912,7 +20930,10 @@ var require_util9 = __commonJS({
|
||||
if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) {
|
||||
stream2.socket = null;
|
||||
}
|
||||
stream2.destroy(err);
|
||||
try {
|
||||
stream2.destroy(err);
|
||||
} catch {
|
||||
}
|
||||
} else if (err) {
|
||||
queueMicrotask(() => {
|
||||
stream2.emit("error", err);
|
||||
@@ -21100,9 +21121,8 @@ var require_util9 = __commonJS({
|
||||
return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData";
|
||||
}
|
||||
function addAbortListener(signal, listener) {
|
||||
if (signal instanceof AbortSignal) {
|
||||
const disposable = addAbortListenerNative(signal, listener);
|
||||
return () => disposable[Symbol.dispose]();
|
||||
if (!signal || "aborted" in signal) {
|
||||
return addAbortListenerNative(signal, listener)[Symbol.dispose];
|
||||
}
|
||||
if (typeof signal.addEventListener === "function") {
|
||||
signal.addEventListener("abort", listener, { once: true });
|
||||
@@ -21406,7 +21426,8 @@ var require_util9 = __commonJS({
|
||||
var rangeHeaderRegex = /^bytes (\d+)-(\d+)\/(\d+|\*)?$/;
|
||||
function parseRangeHeader(range) {
|
||||
if (range == null || range === "") return { start: 0, end: null, size: null };
|
||||
const m = range ? range.match(rangeHeaderRegex) : null;
|
||||
if (!range) return null;
|
||||
const m = rangeHeaderRegex.exec(range);
|
||||
return m ? {
|
||||
start: parseInt(m[1]),
|
||||
end: m[2] ? parseInt(m[2]) : null,
|
||||
@@ -21480,7 +21501,18 @@ var require_util9 = __commonJS({
|
||||
message += ` timeout: ${opts.timeout}ms)`;
|
||||
destroy(socket, new ConnectTimeoutError(message));
|
||||
}
|
||||
var lastUrlString = null;
|
||||
var lastProtocol = null;
|
||||
function getProtocolFromUrlString(urlString) {
|
||||
if (urlString === lastUrlString) {
|
||||
return lastProtocol;
|
||||
}
|
||||
const protocol = getProtocolFromUrlStringSlow(urlString);
|
||||
lastUrlString = urlString;
|
||||
lastProtocol = protocol;
|
||||
return protocol;
|
||||
}
|
||||
function getProtocolFromUrlStringSlow(urlString) {
|
||||
if (urlString[0] === "h" && urlString[1] === "t" && urlString[2] === "t" && urlString[3] === "p") {
|
||||
switch (urlString[4]) {
|
||||
case ":":
|
||||
@@ -21493,8 +21525,10 @@ var require_util9 = __commonJS({
|
||||
}
|
||||
return urlString.slice(0, urlString.indexOf(":") + 1);
|
||||
}
|
||||
var kEnumerableProperty = /* @__PURE__ */ Object.create(null);
|
||||
kEnumerableProperty.enumerable = true;
|
||||
var kEnumerableProperty = {
|
||||
__proto__: null,
|
||||
enumerable: true
|
||||
};
|
||||
var normalizedMethodRecordsBase = {
|
||||
delete: "DELETE",
|
||||
DELETE: "DELETE",
|
||||
@@ -21507,7 +21541,9 @@ var require_util9 = __commonJS({
|
||||
post: "POST",
|
||||
POST: "POST",
|
||||
put: "PUT",
|
||||
PUT: "PUT"
|
||||
PUT: "PUT",
|
||||
query: "QUERY",
|
||||
QUERY: "QUERY"
|
||||
};
|
||||
var normalizedMethodRecords = {
|
||||
...normalizedMethodRecordsBase,
|
||||
@@ -21958,7 +21994,7 @@ var require_request3 = __commonJS({
|
||||
this.headersTimeout = headersTimeout;
|
||||
this.bodyTimeout = bodyTimeout;
|
||||
this.method = method;
|
||||
this.typeOfService = typeOfService ?? 0;
|
||||
this.typeOfService = typeOfService;
|
||||
this.abort = null;
|
||||
if (body == null) {
|
||||
this.body = null;
|
||||
@@ -21998,7 +22034,7 @@ var require_request3 = __commonJS({
|
||||
this.path = query ? serializePathWithQuery(path, query) : path;
|
||||
this.origin = origin;
|
||||
this.protocol = getProtocolFromUrlString(origin);
|
||||
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
|
||||
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" || method === "QUERY" : idempotent;
|
||||
this.blocking = blocking ?? this.method !== "HEAD";
|
||||
this.reset = reset == null ? null : reset;
|
||||
this.host = null;
|
||||
@@ -22192,7 +22228,11 @@ var require_request3 = __commonJS({
|
||||
} else if (typeof val[i] === "object") {
|
||||
throw new InvalidArgumentError(`invalid ${key} header`);
|
||||
} else {
|
||||
arr.push(`${val[i]}`);
|
||||
const str = `${val[i]}`;
|
||||
if (!isValidHeaderValue(str)) {
|
||||
throw new InvalidArgumentError(`invalid ${key} header`);
|
||||
}
|
||||
arr.push(str);
|
||||
}
|
||||
}
|
||||
val = arr;
|
||||
@@ -22204,6 +22244,9 @@ var require_request3 = __commonJS({
|
||||
val = "";
|
||||
} else {
|
||||
val = `${val}`;
|
||||
if (!isValidHeaderValue(val)) {
|
||||
throw new InvalidArgumentError(`invalid ${key} header`);
|
||||
}
|
||||
}
|
||||
if (headerName === "host") {
|
||||
if (request.host !== null) {
|
||||
@@ -22324,6 +22367,7 @@ var require_dispatcher_base2 = __commonJS({
|
||||
*/
|
||||
get webSocketOptions() {
|
||||
return {
|
||||
maxFragments: this[kWebSocketOptions].maxFragments ?? 131072,
|
||||
maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024
|
||||
// 128 MB default
|
||||
};
|
||||
@@ -22448,7 +22492,7 @@ var require_connect2 = __commonJS({
|
||||
var net = require("node:net");
|
||||
var assert = require("node:assert");
|
||||
var util = require_util9();
|
||||
var { InvalidArgumentError } = require_errors2();
|
||||
var { InvalidArgumentError, ConnectTimeoutError } = require_errors2();
|
||||
var tls;
|
||||
var SessionCache = class WeakSessionCache {
|
||||
constructor(maxCachedSessions) {
|
||||
@@ -22490,7 +22534,7 @@ var require_connect2 = __commonJS({
|
||||
this._sessionRegistry.register(session, sessionKey);
|
||||
}
|
||||
};
|
||||
function buildConnector({ allowH2, useH2c, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {
|
||||
function buildConnector({ allowH2, preferH2, useH2c, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {
|
||||
if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {
|
||||
throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero");
|
||||
}
|
||||
@@ -22516,7 +22560,7 @@ var require_connect2 = __commonJS({
|
||||
servername,
|
||||
session,
|
||||
localAddress,
|
||||
ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"],
|
||||
ALPNProtocols: allowH2 ? preferH2 ? ["h2", "http/1.1"] : ["http/1.1", "h2"] : ["http/1.1"],
|
||||
socket: httpSocket,
|
||||
// upgrade socket connection
|
||||
port,
|
||||
@@ -22528,14 +22572,26 @@ var require_connect2 = __commonJS({
|
||||
} else {
|
||||
assert(!httpSocket, "httpSocket can only be sent on TLS update");
|
||||
port = port || 80;
|
||||
socket = net.connect({
|
||||
const connectOptions = {
|
||||
highWaterMark: 64 * 1024,
|
||||
// Same as nodejs fs streams.
|
||||
...options,
|
||||
localAddress,
|
||||
port,
|
||||
host: hostname
|
||||
});
|
||||
};
|
||||
const family = net.isIP(hostname);
|
||||
if (family !== 0 && servername && servername !== hostname) {
|
||||
connectOptions.host = servername;
|
||||
connectOptions.lookup = (_hostname, lookupOptions, cb) => {
|
||||
if (lookupOptions.all) {
|
||||
cb(null, [{ address: hostname, family }]);
|
||||
} else {
|
||||
cb(null, hostname, family);
|
||||
}
|
||||
};
|
||||
}
|
||||
socket = net.connect(connectOptions);
|
||||
if (useH2c === true) {
|
||||
socket.alpnProtocol = "h2";
|
||||
}
|
||||
@@ -22557,12 +22613,27 @@ var require_connect2 = __commonJS({
|
||||
if (callback) {
|
||||
const cb = callback;
|
||||
callback = null;
|
||||
cb(err);
|
||||
cb(maybeNormalizeConnectError(err, this, { timeout, hostname, port }));
|
||||
}
|
||||
});
|
||||
return socket;
|
||||
};
|
||||
}
|
||||
function maybeNormalizeConnectError(err, socket, opts) {
|
||||
if (err instanceof AggregateError && (err.code === "ETIMEDOUT" || err.errors.some((e) => e != null && e.code === "ETIMEDOUT"))) {
|
||||
let message = "Connect Timeout Error";
|
||||
if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {
|
||||
message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`;
|
||||
} else {
|
||||
message += ` (attempted address: ${opts.hostname}:${opts.port},`;
|
||||
}
|
||||
message += ` timeout: ${opts.timeout}ms)`;
|
||||
const wrapped = new ConnectTimeoutError(message);
|
||||
wrapped.cause = err;
|
||||
return wrapped;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
module2.exports = buildConnector;
|
||||
}
|
||||
});
|
||||
@@ -23369,7 +23440,7 @@ var require_constants8 = __commonJS({
|
||||
);
|
||||
var safeMethods = (
|
||||
/** @type {const} */
|
||||
["GET", "HEAD", "OPTIONS", "TRACE"]
|
||||
["GET", "HEAD", "OPTIONS", "TRACE", "QUERY"]
|
||||
);
|
||||
var safeMethodsSet = new Set(safeMethods);
|
||||
var requestMode = (
|
||||
@@ -25091,7 +25162,7 @@ var require_util10 = __commonJS({
|
||||
if (rangeEndValue === null && rangeStartValue === null) {
|
||||
return "failure";
|
||||
}
|
||||
if (rangeStartValue > rangeEndValue) {
|
||||
if (rangeStartValue !== null && rangeEndValue !== null && rangeStartValue > rangeEndValue) {
|
||||
return "failure";
|
||||
}
|
||||
return { rangeStartValue, rangeEndValue };
|
||||
@@ -25877,6 +25948,7 @@ var require_body2 = __commonJS({
|
||||
var { multipartFormDataParser } = require_formdata_parser2();
|
||||
var { parseJSONFromBytes } = require_infra();
|
||||
var { utf8DecodeBytes } = require_encoding2();
|
||||
var { ReadableStreamTee } = require("node:stream/web");
|
||||
var textEncoder = new TextEncoder();
|
||||
function noop() {
|
||||
}
|
||||
@@ -26019,7 +26091,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
||||
return extractBody(object, keepalive);
|
||||
}
|
||||
function cloneBody(body) {
|
||||
const { 0: out1, 1: out2 } = body.stream.tee();
|
||||
const { 0: out1, 1: out2 } = ReadableStreamTee?.(body.stream, true) ?? body.stream.tee();
|
||||
body.stream = out1;
|
||||
return {
|
||||
stream: out2,
|
||||
@@ -26081,6 +26153,29 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
||||
return consumeBody(this, (bytes) => {
|
||||
return new Uint8Array(bytes);
|
||||
}, instance, getInternalState);
|
||||
},
|
||||
textStream() {
|
||||
const this_ = getInternalState(this);
|
||||
if (bodyUnusable(this_)) {
|
||||
throw new TypeError("Body is unusable: Body has already been read");
|
||||
}
|
||||
if (this_.body == null) {
|
||||
let controller;
|
||||
const emptyStream = new ReadableStream({
|
||||
start: (c) => {
|
||||
controller = c;
|
||||
},
|
||||
pull: () => Promise.resolve(),
|
||||
cancel: () => Promise.resolve()
|
||||
}, {
|
||||
size: () => 1
|
||||
});
|
||||
controller.close();
|
||||
return emptyStream;
|
||||
}
|
||||
const stream = this_.body.stream;
|
||||
const decoder = new TextDecoderStream("UTF-8");
|
||||
return stream.pipeThrough(decoder);
|
||||
}
|
||||
};
|
||||
return methods;
|
||||
@@ -26149,6 +26244,7 @@ var require_client_h12 = __commonJS({
|
||||
RequestContentLengthMismatchError,
|
||||
ResponseContentLengthMismatchError,
|
||||
RequestAbortedError,
|
||||
InvalidArgumentError,
|
||||
HeadersTimeoutError,
|
||||
HeadersOverflowError,
|
||||
SocketError,
|
||||
@@ -26195,6 +26291,10 @@ var require_client_h12 = __commonJS({
|
||||
var EMPTY_BUF = Buffer.alloc(0);
|
||||
var FastBuffer = Buffer[Symbol.species];
|
||||
var removeAllListeners = util.removeAllListeners;
|
||||
var kIdleSocketValidation = /* @__PURE__ */ Symbol("kIdleSocketValidation");
|
||||
var kIdleSocketValidationTimeout = /* @__PURE__ */ Symbol("kIdleSocketValidationTimeout");
|
||||
var kSocketUsed = /* @__PURE__ */ Symbol("kSocketUsed");
|
||||
var kTypeOfService = /* @__PURE__ */ Symbol("kTypeOfService");
|
||||
var extractBody;
|
||||
function lazyllhttp() {
|
||||
const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm2() : void 0;
|
||||
@@ -26435,8 +26535,20 @@ var require_client_h12 = __commonJS({
|
||||
finish() {
|
||||
assert(currentParser === null);
|
||||
assert(this.ptr != null);
|
||||
assert(!this.paused);
|
||||
const { llhttp } = this;
|
||||
if (this.paused) {
|
||||
let data;
|
||||
do {
|
||||
llhttp.llhttp_resume(this.ptr);
|
||||
this.paused = false;
|
||||
data = this.socket.read() || EMPTY_BUF;
|
||||
this.execute(data);
|
||||
} while (this.paused && data.length > 0);
|
||||
if (this.paused) {
|
||||
llhttp.llhttp_resume(this.ptr);
|
||||
this.paused = false;
|
||||
}
|
||||
}
|
||||
let ret;
|
||||
try {
|
||||
currentParser = this;
|
||||
@@ -26493,6 +26605,10 @@ var require_client_h12 = __commonJS({
|
||||
if (socket.destroyed) {
|
||||
return -1;
|
||||
}
|
||||
if (client[kRunning] === 0) {
|
||||
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
||||
return -1;
|
||||
}
|
||||
const request = client[kQueue][client[kRunningIdx]];
|
||||
if (!request) {
|
||||
return -1;
|
||||
@@ -26600,6 +26716,10 @@ var require_client_h12 = __commonJS({
|
||||
if (socket.destroyed) {
|
||||
return -1;
|
||||
}
|
||||
if (client[kRunning] === 0) {
|
||||
util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket)));
|
||||
return -1;
|
||||
}
|
||||
const request = client[kQueue][client[kRunningIdx]];
|
||||
if (!request) {
|
||||
return -1;
|
||||
@@ -26733,6 +26853,7 @@ var require_client_h12 = __commonJS({
|
||||
}
|
||||
request.onResponseEnd(headers);
|
||||
client[kQueue][client[kRunningIdx]++] = null;
|
||||
socket[kSocketUsed] = client[kPending] === 0;
|
||||
if (socket[kWriting]) {
|
||||
assert(client[kRunning] === 0);
|
||||
util.destroy(socket, new InformationalError("reset"));
|
||||
@@ -26786,6 +26907,9 @@ var require_client_h12 = __commonJS({
|
||||
socket[kWriting] = false;
|
||||
socket[kReset] = false;
|
||||
socket[kBlocking] = false;
|
||||
socket[kIdleSocketValidation] = 0;
|
||||
socket[kIdleSocketValidationTimeout] = null;
|
||||
socket[kSocketUsed] = false;
|
||||
socket[kParser] = new Parser(client, socket, llhttpInstance);
|
||||
util.addListener(socket, "error", onHttpSocketError);
|
||||
util.addListener(socket, "readable", onHttpSocketReadable);
|
||||
@@ -26825,7 +26949,7 @@ var require_client_h12 = __commonJS({
|
||||
* @returns {boolean}
|
||||
*/
|
||||
busy(request) {
|
||||
if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {
|
||||
if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
|
||||
return true;
|
||||
}
|
||||
if (request) {
|
||||
@@ -26873,6 +26997,7 @@ var require_client_h12 = __commonJS({
|
||||
}
|
||||
function onHttpSocketClose() {
|
||||
const parser = this[kParser];
|
||||
clearIdleSocketValidation(this);
|
||||
if (parser) {
|
||||
if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
|
||||
this[kError] = parser.finish() || this[kError];
|
||||
@@ -26904,6 +27029,24 @@ var require_client_h12 = __commonJS({
|
||||
function onSocketClose() {
|
||||
this[kClosed] = true;
|
||||
}
|
||||
function clearIdleSocketValidation(socket) {
|
||||
if (socket[kIdleSocketValidationTimeout]) {
|
||||
clearTimeout(socket[kIdleSocketValidationTimeout]);
|
||||
socket[kIdleSocketValidationTimeout] = null;
|
||||
}
|
||||
socket[kIdleSocketValidation] = 0;
|
||||
}
|
||||
function scheduleIdleSocketValidation(client, socket) {
|
||||
socket[kIdleSocketValidation] = 1;
|
||||
socket[kIdleSocketValidationTimeout] = setTimeout(() => {
|
||||
socket[kIdleSocketValidationTimeout] = null;
|
||||
socket[kIdleSocketValidation] = 2;
|
||||
if (client[kSocket] === socket && !socket.destroyed) {
|
||||
client[kResume]();
|
||||
}
|
||||
}, 0);
|
||||
socket[kIdleSocketValidationTimeout].unref?.();
|
||||
}
|
||||
function resumeH1(client) {
|
||||
const socket = client[kSocket];
|
||||
if (socket && !socket.destroyed) {
|
||||
@@ -26916,6 +27059,29 @@ var require_client_h12 = __commonJS({
|
||||
socket.ref();
|
||||
socket[kNoRef] = false;
|
||||
}
|
||||
if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {
|
||||
if (socket[kIdleSocketValidation] === 0) {
|
||||
scheduleIdleSocketValidation(client, socket);
|
||||
socket[kParser].readMore();
|
||||
if (socket.destroyed) {
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (socket[kIdleSocketValidation] === 1) {
|
||||
socket[kParser].readMore();
|
||||
if (socket.destroyed) {
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (client[kRunning] === 0) {
|
||||
socket[kParser].readMore();
|
||||
if (socket.destroyed) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (client[kSize] === 0) {
|
||||
if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
|
||||
socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE);
|
||||
@@ -26932,6 +27098,24 @@ var require_client_h12 = __commonJS({
|
||||
function shouldSendContentLength(method) {
|
||||
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
|
||||
}
|
||||
function setTypeOfService(socket, request) {
|
||||
if (typeof socket.setTypeOfService !== "function") {
|
||||
return;
|
||||
}
|
||||
const typeOfService = request.typeOfService;
|
||||
if (typeOfService === void 0) {
|
||||
return;
|
||||
}
|
||||
const currentTypeOfService = socket[kTypeOfService];
|
||||
if (currentTypeOfService === typeOfService) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
socket.setTypeOfService(typeOfService);
|
||||
socket[kTypeOfService] = typeOfService;
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
function writeH1(client, request) {
|
||||
const { method, path, host, upgrade, blocking, reset } = request;
|
||||
let { body, headers, contentLength } = request;
|
||||
@@ -26946,8 +27130,16 @@ var require_client_h12 = __commonJS({
|
||||
}
|
||||
body = bodyStream.stream;
|
||||
contentLength = bodyStream.length;
|
||||
} else if (util.isBlobLike(body) && request.contentType == null && body.type) {
|
||||
headers.push("content-type", body.type);
|
||||
} else if (util.isBlobLike(body) && request.contentType == null) {
|
||||
const contentType = body.type;
|
||||
if (contentType) {
|
||||
const contentTypeValue = `${contentType}`;
|
||||
if (!util.isValidHeaderValue(contentTypeValue)) {
|
||||
util.errorRequest(client, request, new InvalidArgumentError("invalid content-type header"));
|
||||
return false;
|
||||
}
|
||||
headers.push("content-type", contentTypeValue);
|
||||
}
|
||||
}
|
||||
if (body && typeof body.read === "function") {
|
||||
body.read(0);
|
||||
@@ -26968,6 +27160,7 @@ var require_client_h12 = __commonJS({
|
||||
process.emitWarning(new RequestContentLengthMismatchError());
|
||||
}
|
||||
const socket = client[kSocket];
|
||||
clearIdleSocketValidation(socket);
|
||||
const abort = (err) => {
|
||||
if (request.aborted || request.completed) {
|
||||
return;
|
||||
@@ -26999,9 +27192,7 @@ var require_client_h12 = __commonJS({
|
||||
if (blocking) {
|
||||
socket[kBlocking] = true;
|
||||
}
|
||||
if (socket.setTypeOfService) {
|
||||
socket.setTypeOfService(request.typeOfService);
|
||||
}
|
||||
setTypeOfService(socket, request);
|
||||
let header = `${method} ${path} HTTP/1.1\r
|
||||
`;
|
||||
if (typeof host === "string") {
|
||||
@@ -27359,7 +27550,9 @@ var require_client_h22 = __commonJS({
|
||||
RequestAbortedError,
|
||||
SocketError,
|
||||
InformationalError,
|
||||
InvalidArgumentError
|
||||
InvalidArgumentError,
|
||||
HeadersTimeoutError,
|
||||
BodyTimeoutError
|
||||
} = require_errors2();
|
||||
var {
|
||||
kUrl,
|
||||
@@ -27375,20 +27568,20 @@ var require_client_h22 = __commonJS({
|
||||
kStrictContentLength,
|
||||
kOnError,
|
||||
kMaxConcurrentStreams,
|
||||
kPingInterval,
|
||||
kHTTP2Session,
|
||||
kHTTP2InitialWindowSize,
|
||||
kHTTP2ConnectionWindowSize,
|
||||
kHostAuthority,
|
||||
kResume,
|
||||
kSize,
|
||||
kHTTPContext,
|
||||
kClosed,
|
||||
kKeepAliveDefaultTimeout,
|
||||
kHeadersTimeout,
|
||||
kBodyTimeout,
|
||||
kEnableConnectProtocol,
|
||||
kRemoteSettings,
|
||||
kHTTP2Stream,
|
||||
kHTTP2SessionState
|
||||
kHTTP2SessionState,
|
||||
kHTTP2Options
|
||||
} = require_symbols6();
|
||||
var { channels } = require_diagnostics2();
|
||||
var kOpenStreams = /* @__PURE__ */ Symbol("open streams");
|
||||
@@ -27397,6 +27590,9 @@ var require_client_h22 = __commonJS({
|
||||
var kRequestStreamCleanup = /* @__PURE__ */ Symbol("request stream cleanup");
|
||||
var kRequestStreamState = /* @__PURE__ */ Symbol("request stream state");
|
||||
var kReceivedGoAway = /* @__PURE__ */ Symbol("received goaway");
|
||||
var kGoAwayReplayAttempts = /* @__PURE__ */ Symbol("goaway replay attempts");
|
||||
var kRefusedStreamRetry = /* @__PURE__ */ Symbol("refused stream retry");
|
||||
var MAX_GOAWAY_REPLAY_ATTEMPTS = 1;
|
||||
var extractBody;
|
||||
var http2;
|
||||
try {
|
||||
@@ -27421,6 +27617,25 @@ var require_client_h22 = __commonJS({
|
||||
function getGoAwayError(session, errorCode) {
|
||||
return session[kError] || (errorCode === NGHTTP2_NO_ERROR ? new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${errorCode}`) : new SocketError(`HTTP/2: "GOAWAY" frame received with code ${errorCode}`, util.getSocketInfo(session[kSocket])));
|
||||
}
|
||||
function resetHttp2Session(session, err) {
|
||||
const client = session[kClient];
|
||||
const socket = session[kSocket];
|
||||
if (client[kHTTP2Session] === session) {
|
||||
client[kSocket] = null;
|
||||
client[kHTTPContext] = null;
|
||||
client[kHTTP2Session] = null;
|
||||
}
|
||||
if (socket != null && socket[kError] == null) {
|
||||
socket[kError] = err;
|
||||
}
|
||||
if (!session.closed && !session.destroyed) {
|
||||
try {
|
||||
session.destroy(err);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
util.destroy(socket, err);
|
||||
}
|
||||
function getGoAwayPendingIdx(client, lastStreamID) {
|
||||
const maxAcceptedStreamID = Number.isInteger(lastStreamID) ? lastStreamID : Number.MAX_SAFE_INTEGER;
|
||||
for (let i = client[kRunningIdx]; i < client[kPendingIdx]; i++) {
|
||||
@@ -27454,13 +27669,37 @@ var require_client_h22 = __commonJS({
|
||||
detachRequestFromStream(request);
|
||||
cleanup?.(stream);
|
||||
}
|
||||
function canRetryRequestAfterGoAway(request) {
|
||||
function requeueUnsentRequest(client, request) {
|
||||
client[kQueue].splice(client[kPendingIdx] + 1, 0, request);
|
||||
}
|
||||
function completeRequest(client, request, resetPendingIdx = false) {
|
||||
const queue = client[kQueue];
|
||||
const runningIdx = client[kRunningIdx];
|
||||
if (runningIdx < client[kPendingIdx] && queue[runningIdx] === request) {
|
||||
queue[runningIdx] = null;
|
||||
client[kRunningIdx] = runningIdx + 1;
|
||||
return;
|
||||
}
|
||||
const index = queue.indexOf(request, runningIdx);
|
||||
if (index === -1 || index >= client[kPendingIdx]) {
|
||||
return;
|
||||
}
|
||||
queue.splice(index, 1);
|
||||
client[kPendingIdx]--;
|
||||
if (resetPendingIdx && client[kPendingIdx] < client[kRunningIdx]) {
|
||||
client[kPendingIdx] = client[kRunningIdx];
|
||||
}
|
||||
}
|
||||
function canReplayRequest(request) {
|
||||
const { body } = request;
|
||||
return body == null || util.isBuffer(body) || util.isBlobLike(body);
|
||||
}
|
||||
function closeRequestStream(request, code = NGHTTP2_REFUSED_STREAM) {
|
||||
const stream = request[kRequestStream];
|
||||
clearRequestStream(request);
|
||||
function registerGoAwayRefusal(request) {
|
||||
const attempts = (request[kGoAwayReplayAttempts] ?? 0) + 1;
|
||||
request[kGoAwayReplayAttempts] = attempts;
|
||||
return attempts <= MAX_GOAWAY_REPLAY_ATTEMPTS;
|
||||
}
|
||||
function closeStream(stream, code = NGHTTP2_REFUSED_STREAM) {
|
||||
if (stream != null && !stream.destroyed && !stream.closed) {
|
||||
try {
|
||||
stream.close(code);
|
||||
@@ -27468,13 +27707,33 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
}
|
||||
}
|
||||
function detachRequestStreamForClose(request) {
|
||||
const stream = request[kRequestStream];
|
||||
clearRequestStream(request);
|
||||
severRequestStream(stream);
|
||||
return stream;
|
||||
}
|
||||
function severRequestStream(stream) {
|
||||
if (stream == null || stream[kRequestStreamState] == null) {
|
||||
return;
|
||||
}
|
||||
stream[kRequestStreamState] = null;
|
||||
stream.off("close", completeRequestStream);
|
||||
stream.off("close", onUpgradeStreamClose);
|
||||
if (stream[kHTTP2Session] != null) {
|
||||
closeStreamSession(stream);
|
||||
}
|
||||
if (!stream.destroyed && !stream.closed) {
|
||||
stream.once("error", noop);
|
||||
}
|
||||
}
|
||||
function connectH2(client, socket) {
|
||||
client[kSocket] = socket;
|
||||
const http2InitialWindowSize = client[kHTTP2InitialWindowSize];
|
||||
const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize];
|
||||
const http2InitialWindowSize = client[kHTTP2Options].sessionOptions?.initialWindowSize;
|
||||
const http2ConnectionWindowSize = client[kHTTP2Options].connectionWindowSize;
|
||||
const session = http2.connect(client[kUrl], {
|
||||
createConnection: () => socket,
|
||||
peerMaxConcurrentStreams: client[kMaxConcurrentStreams],
|
||||
peerMaxConcurrentStreams: client[kHTTP2Options].maxConcurrentStreams,
|
||||
settings: {
|
||||
// TODO(metcoder95): add support for PUSH
|
||||
enablePush: false,
|
||||
@@ -27486,8 +27745,17 @@ var require_client_h22 = __commonJS({
|
||||
session[kClient] = client;
|
||||
session[kSocket] = socket;
|
||||
session[kHTTP2SessionState] = {
|
||||
idleTimeout: null,
|
||||
// Armed while the peer advertises MAX_CONCURRENT_STREAMS = 0 and we have
|
||||
// work that cannot start. See setNoStreamsTimeout.
|
||||
noStreamsTimeout: null,
|
||||
// Sockets start out ref'd. Session ref/unref proxies to the socket, so a
|
||||
// single cached flag lets us skip redundant uv ref/unref calls, provided
|
||||
// every ref/unref of the session or its socket goes through
|
||||
// refH2Session/unrefH2Session.
|
||||
refed: true,
|
||||
ping: {
|
||||
interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()
|
||||
interval: client[kHTTP2Options].pingInterval === 0 ? null : setInterval(onHttp2SendPing, client[kHTTP2Options].pingInterval, session).unref()
|
||||
}
|
||||
};
|
||||
session[kReceivedGoAway] = false;
|
||||
@@ -27498,11 +27766,10 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
util.addListener(session, "error", onHttp2SessionError);
|
||||
util.addListener(session, "frameError", onHttp2FrameError);
|
||||
util.addListener(session, "end", onHttp2SessionEnd);
|
||||
util.addListener(session, "goaway", onHttp2SessionGoAway);
|
||||
util.addListener(session, "close", onHttp2SessionClose);
|
||||
util.addListener(session, "remoteSettings", onHttp2RemoteSettings);
|
||||
session.unref();
|
||||
unrefH2Session(session);
|
||||
client[kHTTP2Session] = session;
|
||||
socket[kHTTP2Session] = session;
|
||||
util.addListener(socket, "error", onHttp2SocketError);
|
||||
@@ -27556,9 +27823,7 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
if (request != null) {
|
||||
if (client[kRunning] > 0) {
|
||||
if (request.idempotent === false) return true;
|
||||
if ((request.upgrade === "websocket" || request.method === "CONNECT") && session[kRemoteSettings] === false) return true;
|
||||
if (util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true;
|
||||
} else {
|
||||
return (request.upgrade === "websocket" || request.method === "CONNECT") && session[kRemoteSettings] === false;
|
||||
}
|
||||
@@ -27567,18 +27832,109 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
};
|
||||
}
|
||||
function refH2Session(session) {
|
||||
const state = session[kHTTP2SessionState];
|
||||
if (state.refed === false) {
|
||||
state.refed = true;
|
||||
session.ref();
|
||||
}
|
||||
}
|
||||
function unrefH2Session(session) {
|
||||
const state = session[kHTTP2SessionState];
|
||||
if (state.refed === true) {
|
||||
state.refed = false;
|
||||
session.unref();
|
||||
}
|
||||
}
|
||||
function resumeH2(client) {
|
||||
const socket = client[kSocket];
|
||||
const session = client[kHTTP2Session];
|
||||
if (socket?.destroyed === false) {
|
||||
if (client[kSize] === 0 || client[kMaxConcurrentStreams] === 0) {
|
||||
socket.unref();
|
||||
client[kHTTP2Session].unref();
|
||||
unrefH2Session(session);
|
||||
} else {
|
||||
socket.ref();
|
||||
client[kHTTP2Session].ref();
|
||||
refH2Session(session);
|
||||
}
|
||||
if (client[kSize] === 0 && session[kOpenStreams] === 0) {
|
||||
setHttp2IdleTimeout(session);
|
||||
} else {
|
||||
clearHttp2IdleTimeout(session);
|
||||
}
|
||||
if (client[kMaxConcurrentStreams] === 0 && client[kRunning] === 0 && client[kPending] > 0) {
|
||||
setNoStreamsTimeout(session);
|
||||
} else {
|
||||
clearNoStreamsTimeout(session);
|
||||
}
|
||||
}
|
||||
}
|
||||
function clearNoStreamsTimeout(session) {
|
||||
const state = session[kHTTP2SessionState];
|
||||
if (state?.noStreamsTimeout != null) {
|
||||
clearTimeout(state.noStreamsTimeout);
|
||||
state.noStreamsTimeout = null;
|
||||
}
|
||||
}
|
||||
function setNoStreamsTimeout(session) {
|
||||
const client = session[kClient];
|
||||
const state = session[kHTTP2SessionState];
|
||||
const timeout = client[kHeadersTimeout];
|
||||
if (!timeout || state.noStreamsTimeout != null) {
|
||||
return;
|
||||
}
|
||||
state.noStreamsTimeout = setTimeout(onNoStreamsTimeout, timeout, session).unref();
|
||||
}
|
||||
function onNoStreamsTimeout(session) {
|
||||
const client = session[kClient];
|
||||
const state = session[kHTTP2SessionState];
|
||||
state.noStreamsTimeout = null;
|
||||
if (client[kHTTP2Session] !== session || client[kMaxConcurrentStreams] !== 0 || client[kRunning] !== 0 || client[kPending] === 0) {
|
||||
return;
|
||||
}
|
||||
const err = new HeadersTimeoutError(
|
||||
`HTTP/2: server did not accept a new stream within ${client[kHeadersTimeout]}`
|
||||
);
|
||||
const requests = client[kQueue].splice(client[kPendingIdx]);
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
if (requests[i] != null) {
|
||||
util.errorRequest(client, requests[i], err);
|
||||
}
|
||||
}
|
||||
session[kError] = err;
|
||||
resetHttp2Session(session, err);
|
||||
}
|
||||
function clearHttp2IdleTimeout(session) {
|
||||
const state = session[kHTTP2SessionState];
|
||||
if (state?.idleTimeout != null) {
|
||||
clearTimeout(state.idleTimeout);
|
||||
state.idleTimeout = null;
|
||||
}
|
||||
}
|
||||
function setHttp2IdleTimeout(session) {
|
||||
const client = session[kClient];
|
||||
if (client[kHTTP2Session] !== session || session.closed || session.destroyed) {
|
||||
return;
|
||||
}
|
||||
if (session[kOpenStreams] !== 0 || client[kSize] !== 0) {
|
||||
clearHttp2IdleTimeout(session);
|
||||
return;
|
||||
}
|
||||
const state = session[kHTTP2SessionState];
|
||||
if (state.idleTimeout == null) {
|
||||
state.idleTimeout = setTimeout(onHttp2SessionIdleTimeout, client[kKeepAliveDefaultTimeout], session).unref();
|
||||
}
|
||||
}
|
||||
function onHttp2SessionIdleTimeout(session) {
|
||||
const client = session[kClient];
|
||||
const socket = session[kSocket];
|
||||
const state = session[kHTTP2SessionState];
|
||||
state.idleTimeout = null;
|
||||
if (client[kHTTP2Session] !== session || session[kOpenStreams] !== 0 || client[kSize] !== 0 || session.closed || session.destroyed) {
|
||||
return;
|
||||
}
|
||||
const err = new InformationalError("socket idle timeout");
|
||||
socket[kError] = err;
|
||||
util.destroy(socket, err);
|
||||
}
|
||||
function applyConnectionWindowSize(connectionWindowSize) {
|
||||
try {
|
||||
if (typeof this.setLocalWindowSize === "function") {
|
||||
@@ -27622,20 +27978,21 @@ var require_client_h22 = __commonJS({
|
||||
function onHttp2SessionError(err) {
|
||||
assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
||||
this[kSocket][kError] = err;
|
||||
if (this[kReceivedGoAway]) {
|
||||
return;
|
||||
}
|
||||
this[kClient][kOnError](err);
|
||||
}
|
||||
function onHttp2FrameError(type, code, id) {
|
||||
if (id === 0) {
|
||||
if (this[kReceivedGoAway]) {
|
||||
return;
|
||||
}
|
||||
const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
|
||||
this[kSocket][kError] = err;
|
||||
this[kClient][kOnError](err);
|
||||
}
|
||||
}
|
||||
function onHttp2SessionEnd() {
|
||||
const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket]));
|
||||
this.destroy(err);
|
||||
util.destroy(this[kSocket], err);
|
||||
}
|
||||
function onHttp2SessionGoAway(errorCode, lastStreamID) {
|
||||
if (this[kReceivedGoAway]) {
|
||||
return;
|
||||
@@ -27646,17 +28003,21 @@ var require_client_h22 = __commonJS({
|
||||
const previousPendingIdx = client[kPendingIdx];
|
||||
const pendingIdx = getGoAwayPendingIdx(client, lastStreamID);
|
||||
const retriableRequests = [];
|
||||
const streamsToClose = [];
|
||||
for (let i = pendingIdx; i < previousPendingIdx; i++) {
|
||||
const request = client[kQueue][i];
|
||||
if (request != null) {
|
||||
closeRequestStream(request);
|
||||
if (canRetryRequestAfterGoAway(request)) {
|
||||
streamsToClose.push(detachRequestStreamForClose(request));
|
||||
if (canReplayRequest(request) && registerGoAwayRefusal(request)) {
|
||||
retriableRequests.push(request);
|
||||
} else {
|
||||
util.errorRequest(client, request, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < streamsToClose.length; i++) {
|
||||
closeStream(streamsToClose[i]);
|
||||
}
|
||||
if (pendingIdx !== previousPendingIdx) {
|
||||
const remainingPendingRequests = client[kQueue].slice(previousPendingIdx);
|
||||
client[kQueue].length = pendingIdx;
|
||||
@@ -27667,6 +28028,8 @@ var require_client_h22 = __commonJS({
|
||||
client[kHTTPContext] = null;
|
||||
client[kHTTP2Session] = null;
|
||||
}
|
||||
clearHttp2IdleTimeout(this);
|
||||
clearNoStreamsTimeout(this);
|
||||
if (!this.closed && !this.destroyed) {
|
||||
this.close();
|
||||
}
|
||||
@@ -27682,6 +28045,8 @@ var require_client_h22 = __commonJS({
|
||||
client[kHTTPContext] = null;
|
||||
client[kHTTP2Session] = null;
|
||||
}
|
||||
clearHttp2IdleTimeout(this);
|
||||
clearNoStreamsTimeout(this);
|
||||
if (state.ping.interval != null) {
|
||||
clearInterval(state.ping.interval);
|
||||
state.ping.interval = null;
|
||||
@@ -27691,7 +28056,9 @@ var require_client_h22 = __commonJS({
|
||||
const requests = client[kQueue].splice(client[kRunningIdx]);
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
const request = requests[i];
|
||||
util.errorRequest(client, request, err);
|
||||
if (request != null) {
|
||||
util.errorRequest(client, request, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27718,7 +28085,10 @@ var require_client_h22 = __commonJS({
|
||||
function onHttp2SocketError(err) {
|
||||
assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
|
||||
this[kError] = err;
|
||||
this[kClient][kOnError](err);
|
||||
if (this[kHTTP2Session]?.[kReceivedGoAway]) {
|
||||
return;
|
||||
}
|
||||
this[kHTTP2Session]?.[kClient]?.[kOnError](err);
|
||||
}
|
||||
function onHttp2SocketEnd() {
|
||||
util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this)));
|
||||
@@ -27733,7 +28103,8 @@ var require_client_h22 = __commonJS({
|
||||
stream[kHTTP2Session] = null;
|
||||
session[kOpenStreams] -= 1;
|
||||
if (session[kOpenStreams] === 0) {
|
||||
session.unref();
|
||||
unrefH2Session(session);
|
||||
setHttp2IdleTimeout(session);
|
||||
}
|
||||
}
|
||||
function onUpgradeStreamClose() {
|
||||
@@ -27743,9 +28114,22 @@ var require_client_h22 = __commonJS({
|
||||
failUpgradeStream(state, new InformationalError("HTTP/2: stream closed before response headers"));
|
||||
closeStreamSession(this);
|
||||
}
|
||||
function onRequestStreamClose() {
|
||||
this.off("data", onData);
|
||||
this.off("error", noop);
|
||||
function completeRequestStream() {
|
||||
const state = this[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
releaseRequestStream(this);
|
||||
if (state.pendingEnd && !state.request.aborted && !state.request.completed) {
|
||||
state.request.onResponseEnd(state.trailers || {});
|
||||
} else if (!state.request.aborted && !state.request.completed) {
|
||||
util.errorRequest(
|
||||
state.client,
|
||||
state.request,
|
||||
new InformationalError("HTTP/2: stream closed before the response was complete")
|
||||
);
|
||||
}
|
||||
finalizeRequest(state);
|
||||
closeStreamSession(this);
|
||||
this[kRequestStreamState] = null;
|
||||
}
|
||||
@@ -27824,7 +28208,7 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
function onUpgradeStreamTimeout() {
|
||||
const state = this[kRequestStreamState];
|
||||
failUpgradeStream(state, new InformationalError(`HTTP/2: "stream timeout after ${state.requestTimeout}"`));
|
||||
failUpgradeStream(state, new InformationalError(`HTTP/2: "stream timeout after ${state.headersTimeout}"`));
|
||||
}
|
||||
function onUpgradeResponse(headers, _flags) {
|
||||
const stream = this;
|
||||
@@ -27839,10 +28223,10 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
removeUpgradeStreamListeners(stream);
|
||||
detachRequestFromStream(request);
|
||||
state.finalizeRequest();
|
||||
finalizeRequest(state);
|
||||
}
|
||||
function setupUpgradeStream(stream, state) {
|
||||
const { request, requestTimeout, session } = state;
|
||||
const { request, headersTimeout, session } = state;
|
||||
stream[kHTTP2Stream] = true;
|
||||
stream[kHTTP2Session] = session;
|
||||
stream[kRequestStreamState] = state;
|
||||
@@ -27853,33 +28237,67 @@ var require_client_h22 = __commonJS({
|
||||
stream.once("end", onUpgradeStreamEnd);
|
||||
stream.on("timeout", onUpgradeStreamTimeout);
|
||||
stream.once("close", onUpgradeStreamClose);
|
||||
clearHttp2IdleTimeout(session);
|
||||
++session[kOpenStreams];
|
||||
stream.setTimeout(requestTimeout);
|
||||
stream.setTimeout(headersTimeout);
|
||||
}
|
||||
function finalizeRequest(state, resetPendingIdx = false) {
|
||||
if (state.requestFinalized) {
|
||||
return;
|
||||
}
|
||||
state.requestFinalized = true;
|
||||
completeRequest(state.client, state.request, resetPendingIdx);
|
||||
state.client[kResume]();
|
||||
}
|
||||
function openStream(client, request, session, abort, headers, options) {
|
||||
try {
|
||||
return session.request(headers, options);
|
||||
} catch (err) {
|
||||
if (err?.code === "ERR_HTTP2_INVALID_SESSION" || err?.code === "ERR_HTTP2_GOAWAY_SESSION") {
|
||||
const wrappedErr2 = new SocketError(err.message, util.getSocketInfo(session[kSocket]));
|
||||
wrappedErr2.cause = err;
|
||||
session[kError] = wrappedErr2;
|
||||
resetHttp2Session(session, wrappedErr2);
|
||||
requeueUnsentRequest(client, request);
|
||||
return null;
|
||||
}
|
||||
const wrappedErr = new InformationalError(err.message, { cause: err });
|
||||
session[kError] = wrappedErr;
|
||||
session[kSocket][kError] = wrappedErr;
|
||||
session.destroy(wrappedErr);
|
||||
util.destroy(session[kSocket], wrappedErr);
|
||||
abort(wrappedErr);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
function writeH2(client, request) {
|
||||
const requestTimeout = request.bodyTimeout ?? client[kBodyTimeout];
|
||||
const headersTimeout = request.headersTimeout ?? client[kHeadersTimeout];
|
||||
const bodyTimeout = request.bodyTimeout ?? client[kBodyTimeout];
|
||||
const session = client[kHTTP2Session];
|
||||
const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request;
|
||||
let { body } = request;
|
||||
if (upgrade != null && upgrade !== "websocket") {
|
||||
util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade "${upgrade}" not supported over HTTP/2`));
|
||||
return false;
|
||||
}
|
||||
const headers = buildRequestHeaders(reqHeaders);
|
||||
let stream = null;
|
||||
headers[HTTP2_HEADER_AUTHORITY] = host || client[kHostAuthority];
|
||||
headers[HTTP2_HEADER_METHOD] = method;
|
||||
let requestFinalized = false;
|
||||
const finalizeRequest = (resetPendingIdx = false) => {
|
||||
if (requestFinalized) {
|
||||
return;
|
||||
}
|
||||
requestFinalized = true;
|
||||
client[kQueue][client[kRunningIdx]++] = null;
|
||||
if (resetPendingIdx) {
|
||||
client[kPendingIdx] = client[kRunningIdx];
|
||||
}
|
||||
client[kResume]();
|
||||
const state = {
|
||||
abort: null,
|
||||
body: request.body,
|
||||
client,
|
||||
contentLength: null,
|
||||
expectsPayload: false,
|
||||
request,
|
||||
headersTimeout,
|
||||
bodyTimeout,
|
||||
requestFinalized: false,
|
||||
responseReceived: false,
|
||||
bodySent: false,
|
||||
pendingEnd: false,
|
||||
trailers: null,
|
||||
session,
|
||||
stream: null
|
||||
};
|
||||
const abort = (err, resetPendingIdx = false) => {
|
||||
if (request.aborted || request.completed) {
|
||||
@@ -27887,30 +28305,20 @@ var require_client_h22 = __commonJS({
|
||||
}
|
||||
err = err || new RequestAbortedError();
|
||||
util.errorRequest(client, request, err);
|
||||
if (stream != null) {
|
||||
if (state.stream != null) {
|
||||
clearRequestStream(request);
|
||||
stream.close();
|
||||
client[kOnError](err);
|
||||
finalizeRequest(resetPendingIdx);
|
||||
}
|
||||
util.destroy(body, err);
|
||||
};
|
||||
const requestStream = (headers2, options) => {
|
||||
try {
|
||||
return session.request(headers2, options);
|
||||
} catch (err) {
|
||||
if (err?.code !== "ERR_HTTP2_INVALID_CONNECTION_HEADERS") {
|
||||
throw err;
|
||||
const stream2 = state.stream;
|
||||
stream2.close();
|
||||
if (!stream2.destroyed) {
|
||||
util.destroy(stream2);
|
||||
}
|
||||
const wrappedErr = new InformationalError(err.message, { cause: err });
|
||||
session[kError] = wrappedErr;
|
||||
session[kSocket][kError] = wrappedErr;
|
||||
session.destroy(wrappedErr);
|
||||
util.destroy(session[kSocket], wrappedErr);
|
||||
abort(wrappedErr);
|
||||
return null;
|
||||
client[kOnError](err);
|
||||
finalizeRequest(state, resetPendingIdx);
|
||||
}
|
||||
util.destroy(state.body, err);
|
||||
};
|
||||
state.abort = abort;
|
||||
let stream = null;
|
||||
try {
|
||||
request.onRequestStart(abort, null);
|
||||
} catch (err) {
|
||||
@@ -27920,20 +28328,11 @@ var require_client_h22 = __commonJS({
|
||||
return false;
|
||||
}
|
||||
if (upgrade || method === "CONNECT") {
|
||||
session.ref();
|
||||
const upgradeState = {
|
||||
abort,
|
||||
finalizeRequest,
|
||||
request,
|
||||
requestTimeout,
|
||||
responseReceived: false,
|
||||
session,
|
||||
stream: null
|
||||
};
|
||||
refH2Session(session);
|
||||
if (upgrade === "websocket") {
|
||||
if (session[kEnableConnectProtocol] === false) {
|
||||
util.errorRequest(client, request, new InformationalError("HTTP/2: Extended CONNECT protocol not supported by server"));
|
||||
session.unref();
|
||||
unrefH2Session(session);
|
||||
return false;
|
||||
}
|
||||
headers[HTTP2_HEADER_METHOD] = "CONNECT";
|
||||
@@ -27944,25 +28343,26 @@ var require_client_h22 = __commonJS({
|
||||
} else {
|
||||
headers[HTTP2_HEADER_SCHEME] = protocol === "http:" ? "http" : "https";
|
||||
}
|
||||
stream = requestStream(headers, { endStream: false, signal });
|
||||
stream = openStream(client, request, session, abort, headers, { endStream: false, signal });
|
||||
if (stream == null) {
|
||||
session.unref();
|
||||
unrefH2Session(session);
|
||||
return false;
|
||||
}
|
||||
setupUpgradeStream(stream, upgradeState);
|
||||
setupUpgradeStream(stream, state);
|
||||
return true;
|
||||
}
|
||||
stream = requestStream(headers, { endStream: false, signal });
|
||||
stream = openStream(client, request, session, abort, headers, { endStream: false, signal });
|
||||
if (stream == null) {
|
||||
session.unref();
|
||||
unrefH2Session(session);
|
||||
return false;
|
||||
}
|
||||
setupUpgradeStream(stream, upgradeState);
|
||||
setupUpgradeStream(stream, state);
|
||||
return true;
|
||||
}
|
||||
headers[HTTP2_HEADER_PATH] = path;
|
||||
headers[HTTP2_HEADER_SCHEME] = protocol === "http:" ? "http" : "https";
|
||||
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
|
||||
let body = state.body;
|
||||
if (body && typeof body.read === "function") {
|
||||
body.read(0);
|
||||
}
|
||||
@@ -27991,7 +28391,7 @@ var require_client_h22 = __commonJS({
|
||||
assert(body || contentLength === 0, "no body must not have content length");
|
||||
headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`;
|
||||
}
|
||||
session.ref();
|
||||
refH2Session(session);
|
||||
if (channels.sendHeaders.hasSubscribers) {
|
||||
let header = "";
|
||||
for (const key in headers) {
|
||||
@@ -28001,45 +28401,39 @@ var require_client_h22 = __commonJS({
|
||||
channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] });
|
||||
}
|
||||
const shouldEndStream = body === null || contentLength === 0;
|
||||
const state = {
|
||||
abort,
|
||||
body,
|
||||
client,
|
||||
contentLength,
|
||||
expectsPayload,
|
||||
finalizeRequest,
|
||||
request,
|
||||
requestTimeout,
|
||||
responseReceived: false,
|
||||
session,
|
||||
stream: null
|
||||
};
|
||||
state.body = body;
|
||||
state.contentLength = contentLength;
|
||||
state.expectsPayload = expectsPayload;
|
||||
if (expectContinue) {
|
||||
headers[HTTP2_HEADER_EXPECT] = "100-continue";
|
||||
}
|
||||
stream = requestStream(headers, { endStream: shouldEndStream, signal });
|
||||
stream = openStream(client, request, session, abort, headers, { endStream: shouldEndStream, signal });
|
||||
if (stream == null) {
|
||||
return false;
|
||||
}
|
||||
stream[kHTTP2Stream] = true;
|
||||
stream[kRequestStreamState] = state;
|
||||
state.stream = stream;
|
||||
bindRequestToStream(request, stream, null);
|
||||
clearHttp2IdleTimeout(session);
|
||||
++session[kOpenStreams];
|
||||
stream.setTimeout(requestTimeout);
|
||||
if (headersTimeout) {
|
||||
stream.setTimeout(headersTimeout);
|
||||
}
|
||||
stream[kHTTP2Session] = session;
|
||||
stream.once("close", onRequestStreamClose);
|
||||
stream.on("close", completeRequestStream);
|
||||
bindRequestToStream(request, stream, releaseRequestStream);
|
||||
if (expectContinue) {
|
||||
stream.once("continue", writeBodyH2);
|
||||
}
|
||||
stream.once("response", onResponse);
|
||||
stream.once("end", onEnd);
|
||||
stream.once("error", onError);
|
||||
stream.once("frameError", onFrameError);
|
||||
stream.on("response", onResponse);
|
||||
stream.on("end", onEnd);
|
||||
stream.on("error", onError);
|
||||
stream.on("frameError", onFrameError);
|
||||
stream.on("aborted", onAborted);
|
||||
stream.on("timeout", onTimeout);
|
||||
stream.once("trailers", onTrailers);
|
||||
if (headersTimeout || bodyTimeout) {
|
||||
stream.on("timeout", onTimeout);
|
||||
}
|
||||
stream.on("trailers", onTrailers);
|
||||
if (!expectContinue) {
|
||||
writeBodyH2.call(stream);
|
||||
}
|
||||
@@ -28069,14 +28463,18 @@ var require_client_h22 = __commonJS({
|
||||
if (request[kRequestStream] === stream) {
|
||||
detachRequestFromStream(request);
|
||||
}
|
||||
removeRequestStreamListeners(stream);
|
||||
if (!stream.destroyed && !stream.closed) {
|
||||
removeRequestStreamListeners(stream);
|
||||
stream.once("error", noop);
|
||||
}
|
||||
}
|
||||
function onData(chunk) {
|
||||
const stream = this;
|
||||
const { request } = stream[kRequestStreamState];
|
||||
const state = stream[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
const { request } = state;
|
||||
if (request.aborted || request.completed) {
|
||||
return;
|
||||
}
|
||||
@@ -28087,13 +28485,23 @@ var require_client_h22 = __commonJS({
|
||||
function onResponse(headers) {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
const { request } = state;
|
||||
stream.off("response", onResponse);
|
||||
if (state.body != null && !state.bodySent && !stream.writableEnded) {
|
||||
stream.removeListener("continue", writeBodyH2);
|
||||
stream.end();
|
||||
}
|
||||
const statusCode = headers[HTTP2_HEADER_STATUS];
|
||||
delete headers[HTTP2_HEADER_STATUS];
|
||||
request.onResponseStarted();
|
||||
state.responseReceived = true;
|
||||
if (request.aborted) {
|
||||
if (state.headersTimeout || state.bodyTimeout) {
|
||||
stream.setTimeout(state.bodyTimeout);
|
||||
}
|
||||
if (request.aborted || request.completed) {
|
||||
releaseRequestStream(stream);
|
||||
return;
|
||||
}
|
||||
@@ -28105,30 +28513,56 @@ var require_client_h22 = __commonJS({
|
||||
function onEnd() {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
const { request } = state;
|
||||
stream.off("end", onEnd);
|
||||
releaseRequestStream(stream);
|
||||
if (state.responseReceived) {
|
||||
if (!request.aborted && !request.completed) {
|
||||
request.onResponseEnd({});
|
||||
state.pendingEnd = true;
|
||||
completeRequestStream.call(stream);
|
||||
}
|
||||
state.finalizeRequest();
|
||||
} else {
|
||||
state.abort(new InformationalError("HTTP/2: stream half-closed (remote)"), true);
|
||||
}
|
||||
}
|
||||
function retryRefusedStream(stream, state) {
|
||||
const { client, request } = state;
|
||||
if (state.responseReceived || request.aborted || request.completed || request[kRefusedStreamRetry] || !canReplayRequest(request)) {
|
||||
return false;
|
||||
}
|
||||
request[kRefusedStreamRetry] = true;
|
||||
detachRequestStreamForClose(request);
|
||||
state.stream = null;
|
||||
state.requestFinalized = true;
|
||||
completeRequest(client, request);
|
||||
client[kQueue].splice(client[kPendingIdx], 0, request);
|
||||
client[kResume]();
|
||||
return true;
|
||||
}
|
||||
function onError(err) {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
stream.off("error", onError);
|
||||
releaseRequestStream(stream);
|
||||
if (typeof stream.rstCode === "number" && stream.rstCode !== NGHTTP2_NO_ERROR) {
|
||||
err.http2ErrorCode = stream.rstCode;
|
||||
}
|
||||
if (stream.rstCode === NGHTTP2_REFUSED_STREAM && retryRefusedStream(stream, state)) {
|
||||
return;
|
||||
}
|
||||
state.abort(err);
|
||||
}
|
||||
function onFrameError(type, code) {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
stream.off("frameError", onFrameError);
|
||||
releaseRequestStream(stream);
|
||||
state.abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`));
|
||||
}
|
||||
function onAborted() {
|
||||
@@ -28137,25 +28571,31 @@ var require_client_h22 = __commonJS({
|
||||
function onTimeout() {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
releaseRequestStream(stream);
|
||||
const err = new InformationalError(`HTTP/2: "stream timeout after ${state.requestTimeout}"`);
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
stream.off("timeout", onTimeout);
|
||||
const err = state.responseReceived ? new BodyTimeoutError(`HTTP/2: "stream timeout after ${state.bodyTimeout}"`) : new HeadersTimeoutError(`HTTP/2: "headers timeout after ${state.headersTimeout}"`);
|
||||
state.abort(err);
|
||||
}
|
||||
function onTrailers(trailers) {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
if (state == null) {
|
||||
return;
|
||||
}
|
||||
const { request } = state;
|
||||
stream.off("trailers", onTrailers);
|
||||
stream.off("data", onData);
|
||||
if (request.aborted || request.completed) {
|
||||
return;
|
||||
}
|
||||
releaseRequestStream(stream);
|
||||
request.onResponseEnd(trailers);
|
||||
state.finalizeRequest();
|
||||
state.trailers = trailers;
|
||||
}
|
||||
function writeBodyH2() {
|
||||
const stream = this;
|
||||
const state = stream[kRequestStreamState];
|
||||
state.bodySent = true;
|
||||
const { abort, body, client, contentLength, expectsPayload, request } = state;
|
||||
if (!body || contentLength === 0) {
|
||||
writeBuffer(
|
||||
@@ -28395,10 +28835,8 @@ var require_client2 = __commonJS({
|
||||
kHTTPContext,
|
||||
kMaxConcurrentStreams,
|
||||
kHostAuthority,
|
||||
kHTTP2InitialWindowSize,
|
||||
kHTTP2ConnectionWindowSize,
|
||||
kResume,
|
||||
kPingInterval
|
||||
kHTTP2Options
|
||||
} = require_symbols6();
|
||||
var connectH1 = require_client_h12();
|
||||
var connectH2 = require_client_h22();
|
||||
@@ -28411,6 +28849,20 @@ var require_client2 = __commonJS({
|
||||
function getPipelining(client) {
|
||||
return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1;
|
||||
}
|
||||
var h2NamespaceOptsWarning = false;
|
||||
function emitH2OptionsNamespaceWarning(optName) {
|
||||
if (h2NamespaceOptsWarning === true) return;
|
||||
process.emitWarning(`Use h2Options.${optName} instead. ${optName} for H2 will be deprecated in future major.`, {
|
||||
code: "UNDICI-H2-OPTIONS"
|
||||
});
|
||||
h2NamespaceOptsWarning = true;
|
||||
}
|
||||
function getMaxConcurrent(client) {
|
||||
if (client[kHTTPContext]?.version === "h2") {
|
||||
return client[kMaxConcurrentStreams];
|
||||
}
|
||||
return getPipelining(client);
|
||||
}
|
||||
var Client = class extends DispatcherBase {
|
||||
/**
|
||||
*
|
||||
@@ -28448,7 +28900,8 @@ var require_client2 = __commonJS({
|
||||
initialWindowSize,
|
||||
connectionWindowSize,
|
||||
pingInterval,
|
||||
webSocket
|
||||
webSocket,
|
||||
h2Options
|
||||
} = {}) {
|
||||
if (keepAlive !== void 0) {
|
||||
throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
|
||||
@@ -28511,20 +28964,45 @@ var require_client2 = __commonJS({
|
||||
if (allowH2 != null && typeof allowH2 !== "boolean") {
|
||||
throw new InvalidArgumentError("allowH2 must be a valid boolean value");
|
||||
}
|
||||
if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
|
||||
throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0");
|
||||
}
|
||||
if (useH2c != null && typeof useH2c !== "boolean") {
|
||||
throw new InvalidArgumentError("useH2c must be a valid boolean value");
|
||||
}
|
||||
if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {
|
||||
throw new InvalidArgumentError("initialWindowSize must be a positive integer, greater than 0");
|
||||
}
|
||||
if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {
|
||||
throw new InvalidArgumentError("connectionWindowSize must be a positive integer, greater than 0");
|
||||
}
|
||||
if (pingInterval != null && (typeof pingInterval !== "number" || !Number.isInteger(pingInterval) || pingInterval < 0)) {
|
||||
throw new InvalidArgumentError("pingInterval must be a positive integer, greater or equal to 0");
|
||||
if (allowH2 !== false) {
|
||||
if (h2Options != null) {
|
||||
if (h2Options.useH2c != null && typeof h2Options.useH2c !== "boolean") {
|
||||
throw new InvalidArgumentError("h2Options.useH2c must be a valid boolean value");
|
||||
}
|
||||
if (h2Options.settings?.initialWindowSize != null && (!Number.isInteger(h2Options.settings.initialWindowSize) || h2Options.settings.initialWindowSize < 1)) {
|
||||
throw new InvalidArgumentError("h2Options.settings.initialWindowSize must be a positive integer, greater than 0");
|
||||
}
|
||||
if (h2Options.maxConcurrentStreams != null && (!Number.isInteger(h2Options.connectionWindowSize) || h2Options.maxConcurrentStreams < 1)) {
|
||||
throw new InvalidArgumentError("h2Options.maxConcurrentStreams must be a positive integer, greater than 0");
|
||||
}
|
||||
if (h2Options.connectionWindowSize != null && (!Number.isInteger(h2Options.connectionWindowSize) || h2Options.connectionWindowSize < 1)) {
|
||||
throw new InvalidArgumentError("h2Options.connectionWindowSize must be a positive integer, greater than 0");
|
||||
}
|
||||
if (h2Options.pingInterval != null && (typeof h2Options.pingInterval !== "number" || !Number.isInteger(h2Options.pingInterval) || h2Options.pingInterval < 0)) {
|
||||
throw new InvalidArgumentError("h2Options.pingInterval must be a positive integer, greater or equal to 0");
|
||||
}
|
||||
} else {
|
||||
if (useH2c != null && typeof useH2c !== "boolean") {
|
||||
emitH2OptionsNamespaceWarning("useH2c");
|
||||
throw new InvalidArgumentError("useH2c must be a valid boolean value");
|
||||
}
|
||||
if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
|
||||
emitH2OptionsNamespaceWarning("maxConcurrentStreams");
|
||||
throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0");
|
||||
}
|
||||
if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {
|
||||
emitH2OptionsNamespaceWarning("initialWindowSize");
|
||||
throw new InvalidArgumentError("initialWindowSize must be a positive integer, greater than 0");
|
||||
}
|
||||
if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {
|
||||
emitH2OptionsNamespaceWarning("connectionWindowSize");
|
||||
throw new InvalidArgumentError("connectionWindowSize must be a positive integer, greater than 0");
|
||||
}
|
||||
if (pingInterval != null && (typeof pingInterval !== "number" || !Number.isInteger(pingInterval) || pingInterval < 0)) {
|
||||
emitH2OptionsNamespaceWarning("pingInterval");
|
||||
throw new InvalidArgumentError("pingInterval must be a positive integer, greater or equal to 0");
|
||||
}
|
||||
}
|
||||
}
|
||||
super({ webSocket });
|
||||
if (typeof connect2 !== "function") {
|
||||
@@ -28532,8 +29010,8 @@ var require_client2 = __commonJS({
|
||||
...tls,
|
||||
maxCachedSessions,
|
||||
allowH2,
|
||||
useH2c,
|
||||
socketPath,
|
||||
useH2c: h2Options?.useH2c ?? useH2c,
|
||||
timeout: connectTimeout,
|
||||
...typeof autoSelectFamily === "boolean" ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
|
||||
...connect2
|
||||
@@ -28568,10 +29046,21 @@ var require_client2 = __commonJS({
|
||||
this[kClosedResolve] = null;
|
||||
this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1;
|
||||
this[kHTTPContext] = null;
|
||||
this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100;
|
||||
this[kHTTP2InitialWindowSize] = initialWindowSize != null ? initialWindowSize : 262144;
|
||||
this[kHTTP2ConnectionWindowSize] = connectionWindowSize != null ? connectionWindowSize : 524288;
|
||||
this[kPingInterval] = pingInterval != null ? pingInterval : 6e4;
|
||||
this[kHTTP2Options] = {
|
||||
pingInterval: h2Options?.pingInterval ?? pingInterval ?? 6e4,
|
||||
connectionWindowSize: h2Options?.connectionWindowSize ?? connectionWindowSize ?? 524288,
|
||||
maxConcurrentStreams: h2Options?.maxConcurrentStreams ?? maxConcurrentStreams ?? 100,
|
||||
// Max peerConcurrentStreams for a Node h2 server
|
||||
sessionOptions: {
|
||||
// HTTP/2 window sizes are set to higher defaults than Node.js core for better performance:
|
||||
// - initialWindowSize: 262144 (256KB) vs Node.js default 65535 (64KB - 1)
|
||||
// Allows more data to be sent before requiring acknowledgment, improving throughput
|
||||
// especially on high-latency networks. This matches common production HTTP/2 servers.
|
||||
// - connectionWindowSize: 524288 (512KB) vs Node.js default (none set)
|
||||
// Provides better flow control for the entire connection across multiple streams.
|
||||
initialWindowSize: h2Options?.initialWindowSize ?? initialWindowSize ?? 262144
|
||||
}
|
||||
};
|
||||
this[kQueue] = [];
|
||||
this[kRunningIdx] = 0;
|
||||
this[kPendingIdx] = 0;
|
||||
@@ -28601,8 +29090,9 @@ var require_client2 = __commonJS({
|
||||
return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed;
|
||||
}
|
||||
get [kBusy]() {
|
||||
const allowsMux = this[kHTTPContext]?.version === "h2";
|
||||
return Boolean(
|
||||
this[kHTTPContext]?.busy(null) || this[kSize] >= (getPipelining(this) || 1) || this[kPending] > 0
|
||||
this[kHTTPContext]?.busy(null) || this[kSize] >= (getMaxConcurrent(this) || 1) || this[kPending] > 0 && !allowsMux
|
||||
);
|
||||
}
|
||||
[kConnect](cb) {
|
||||
@@ -28638,7 +29128,9 @@ var require_client2 = __commonJS({
|
||||
const requests = this[kQueue].splice(this[kPendingIdx]);
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
const request = requests[i];
|
||||
util.errorRequest(this, request, err);
|
||||
if (request != null) {
|
||||
util.errorRequest(this, request, err);
|
||||
}
|
||||
}
|
||||
const callback = () => {
|
||||
if (this[kClosedResolve]) {
|
||||
@@ -28663,7 +29155,9 @@ var require_client2 = __commonJS({
|
||||
const requests = client[kQueue].splice(client[kRunningIdx]);
|
||||
for (let i = 0; i < requests.length; i++) {
|
||||
const request = requests[i];
|
||||
util.errorRequest(client, request, err);
|
||||
if (request != null) {
|
||||
util.errorRequest(client, request, err);
|
||||
}
|
||||
}
|
||||
assert(client[kSize] === 0);
|
||||
}
|
||||
@@ -28771,9 +29265,13 @@ var require_client2 = __commonJS({
|
||||
});
|
||||
}
|
||||
if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
|
||||
assert(client[kRunning] === 0);
|
||||
const running = client[kQueue].splice(client[kRunningIdx], client[kRunning]);
|
||||
client[kPendingIdx] = client[kRunningIdx];
|
||||
for (let i = 0; i < running.length; i++) {
|
||||
util.errorRequest(client, running[i], err);
|
||||
}
|
||||
while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
|
||||
const request = client[kQueue][client[kPendingIdx]++];
|
||||
const request = client[kQueue].splice(client[kPendingIdx], 1)[0];
|
||||
util.errorRequest(client, request, err);
|
||||
}
|
||||
} else {
|
||||
@@ -28826,7 +29324,7 @@ var require_client2 = __commonJS({
|
||||
if (client[kPending] === 0) {
|
||||
return;
|
||||
}
|
||||
if (client[kRunning] >= (getPipelining(client) || 1)) {
|
||||
if (client[kRunning] >= (getMaxConcurrent(client) || 1)) {
|
||||
return;
|
||||
}
|
||||
const request = client[kQueue][client[kPendingIdx]];
|
||||
@@ -28847,6 +29345,7 @@ var require_client2 = __commonJS({
|
||||
return;
|
||||
}
|
||||
if (!client[kHTTPContext]) {
|
||||
client[kServerName] = request.servername;
|
||||
connect(client);
|
||||
return;
|
||||
}
|
||||
@@ -29617,14 +30116,14 @@ var require_agent2 = __commonJS({
|
||||
dispatcher.close();
|
||||
}
|
||||
let hasOrigin = false;
|
||||
for (const client of this[kClients].values()) {
|
||||
if (client[kUrl].origin === dispatcher[kUrl].origin) {
|
||||
for (const k of this[kClients].keys()) {
|
||||
if (k === origin || k === `${origin}#http1-only`) {
|
||||
hasOrigin = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!hasOrigin) {
|
||||
this[kOrigins].delete(dispatcher[kUrl].origin);
|
||||
this[kOrigins].delete(origin);
|
||||
}
|
||||
};
|
||||
dispatcher.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", (origin2, targets, err) => {
|
||||
@@ -30257,7 +30756,7 @@ var require_socks5_proxy_agent = __commonJS({
|
||||
var DispatcherBase = require_dispatcher_base2();
|
||||
var { InvalidArgumentError } = require_errors2();
|
||||
var { Socks5Client, STATES } = require_socks5_client();
|
||||
var { kDispatch, kClose, kDestroy } = require_symbols6();
|
||||
var { kBusy, kConnected, kDispatch, kClose, kDestroy } = require_symbols6();
|
||||
var Pool = require_pool2();
|
||||
var buildConnector = require_connect2();
|
||||
var { debuglog } = require("node:util");
|
||||
@@ -30268,6 +30767,7 @@ var require_socks5_proxy_agent = __commonJS({
|
||||
var kProxyProtocol = /* @__PURE__ */ Symbol("proxy protocol");
|
||||
var kPools = /* @__PURE__ */ Symbol("pools");
|
||||
var kConnector = /* @__PURE__ */ Symbol("connector");
|
||||
var kRequestTls = /* @__PURE__ */ Symbol("request tls settings");
|
||||
var experimentalWarningEmitted = false;
|
||||
var Socks5ProxyAgent = class extends DispatcherBase {
|
||||
constructor(proxyUrl, options = {}) {
|
||||
@@ -30289,6 +30789,7 @@ var require_socks5_proxy_agent = __commonJS({
|
||||
this[kProxyUrl] = url;
|
||||
this[kProxyHeaders] = options.headers || {};
|
||||
this[kProxyProtocol] = options.proxyTls ? "https:" : "http:";
|
||||
this[kRequestTls] = options.requestTls;
|
||||
this[kProxyAuth] = {
|
||||
username: options.username || (url.username ? decodeURIComponent(url.username) : null),
|
||||
password: options.password || (url.password ? decodeURIComponent(url.password) : null)
|
||||
@@ -30396,9 +30897,9 @@ var require_socks5_proxy_agent = __commonJS({
|
||||
}
|
||||
debug2("upgrading to TLS");
|
||||
finalSocket = tls.connect({
|
||||
...this[kRequestTls],
|
||||
socket,
|
||||
servername: targetHost,
|
||||
...connectOpts.tls || {}
|
||||
servername: this[kRequestTls]?.servername || targetHost
|
||||
});
|
||||
const tlsReady = Promise.withResolvers();
|
||||
finalSocket.once("secureConnect", tlsReady.resolve);
|
||||
@@ -30413,6 +30914,17 @@ var require_socks5_proxy_agent = __commonJS({
|
||||
}
|
||||
});
|
||||
this[kPools].set(originKey, pool);
|
||||
const closePoolIfUnused = () => {
|
||||
if (this[kPools].get(originKey) !== pool || pool[kConnected] > 0 || pool[kBusy]) {
|
||||
return;
|
||||
}
|
||||
this[kPools].delete(originKey);
|
||||
if (!pool.destroyed) {
|
||||
pool.close();
|
||||
}
|
||||
};
|
||||
pool.on("disconnect", closePoolIfUnused);
|
||||
pool.on("connectionError", closePoolIfUnused);
|
||||
}
|
||||
return pool[kDispatch](opts, handler);
|
||||
} catch (err) {
|
||||
@@ -30457,7 +30969,7 @@ var require_proxy_agent2 = __commonJS({
|
||||
var Agent = require_agent2();
|
||||
var Pool = require_pool2();
|
||||
var DispatcherBase = require_dispatcher_base2();
|
||||
var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors2();
|
||||
var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError, ProxyConnectionError } = require_errors2();
|
||||
var buildConnector = require_connect2();
|
||||
var Client = require_client2();
|
||||
var { channels } = require_diagnostics2();
|
||||
@@ -30485,14 +30997,19 @@ var require_proxy_agent2 = __commonJS({
|
||||
}
|
||||
return new Pool(origin, opts);
|
||||
}
|
||||
function shouldProxyTunnel(requestProtocol, proxyTunnel) {
|
||||
return proxyTunnel === true || requestProtocol !== "http:";
|
||||
}
|
||||
var Http1ProxyWrapper = class extends DispatcherBase {
|
||||
#client;
|
||||
constructor(proxyUrl, { headers = {}, connect, factory }) {
|
||||
#proxyServername;
|
||||
constructor(proxyUrl, { headers = {}, connect, factory, proxyServername }) {
|
||||
if (!proxyUrl) {
|
||||
throw new InvalidArgumentError("Proxy URL is mandatory");
|
||||
}
|
||||
super();
|
||||
this[kProxyHeaders] = headers;
|
||||
this.#proxyServername = proxyServername;
|
||||
if (factory) {
|
||||
this.#client = factory(proxyUrl, { connect });
|
||||
} else {
|
||||
@@ -30521,6 +31038,9 @@ var require_proxy_agent2 = __commonJS({
|
||||
headers.host = host;
|
||||
}
|
||||
opts.headers = { ...this[kProxyHeaders], ...headers };
|
||||
if (this.#proxyServername != null) {
|
||||
opts.servername = this.#proxyServername;
|
||||
}
|
||||
return this.#client[kDispatch](opts, handler);
|
||||
}
|
||||
[kClose]() {
|
||||
@@ -30539,7 +31059,7 @@ var require_proxy_agent2 = __commonJS({
|
||||
if (typeof clientFactory !== "function") {
|
||||
throw new InvalidArgumentError("Proxy opts.clientFactory must be a function.");
|
||||
}
|
||||
const { proxyTunnel = true, connectTimeout } = opts;
|
||||
const { proxyTunnel, connectTimeout } = opts;
|
||||
super();
|
||||
const url = this.#getUrl(opts);
|
||||
const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url;
|
||||
@@ -30560,6 +31080,7 @@ var require_proxy_agent2 = __commonJS({
|
||||
this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:`).toString("base64")}`;
|
||||
}
|
||||
const connect = buildConnector({ timeout: connectTimeout, ...opts.proxyTls });
|
||||
const connectHTTP1 = buildConnector({ timeout: connectTimeout, ...opts.proxyTls, allowH2: false });
|
||||
this[kConnectEndpoint] = buildConnector({ timeout: connectTimeout, ...opts.requestTls });
|
||||
this[kConnectEndpointHTTP1] = buildConnector({ timeout: connectTimeout, ...opts.requestTls, allowH2: false });
|
||||
const agentFactory = opts.factory || defaultAgentFactory;
|
||||
@@ -30572,14 +31093,23 @@ var require_proxy_agent2 = __commonJS({
|
||||
factory: agentFactory,
|
||||
username: opts.username || username,
|
||||
password: opts.password || password,
|
||||
proxyTls: opts.proxyTls
|
||||
proxyTls: opts.proxyTls,
|
||||
requestTls: opts.requestTls
|
||||
});
|
||||
}
|
||||
if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") {
|
||||
if (!shouldProxyTunnel(protocol2, this[kTunnelProxy])) {
|
||||
const forwardConnect = this[kProxy].protocol === "https:" ? (opts2, cb) => connectHTTP1(opts2, (err, socket) => {
|
||||
if (err && err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
|
||||
cb(new SecureProxyConnectionError(err));
|
||||
} else {
|
||||
cb(err, socket);
|
||||
}
|
||||
}) : connectHTTP1;
|
||||
return new Http1ProxyWrapper(this[kProxy].uri, {
|
||||
headers: this[kProxyHeaders],
|
||||
connect,
|
||||
factory: agentFactory
|
||||
connect: forwardConnect,
|
||||
factory: agentFactory,
|
||||
proxyServername: this[kProxy].protocol === "https:" ? this[kProxyTls]?.servername || proxyHostname : void 0
|
||||
});
|
||||
}
|
||||
return agentFactory(origin2, options);
|
||||
@@ -30641,6 +31171,8 @@ var require_proxy_agent2 = __commonJS({
|
||||
} catch (err) {
|
||||
if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
|
||||
callback(new SecureProxyConnectionError(err));
|
||||
} else if (err.code === "UND_ERR_SOCKET") {
|
||||
callback(new ProxyConnectionError(err));
|
||||
} else {
|
||||
callback(err);
|
||||
}
|
||||
@@ -30777,7 +31309,7 @@ var require_env_http_proxy_agent2 = __commonJS({
|
||||
}
|
||||
#getProxyAgentForUrl(url) {
|
||||
let { protocol, host: hostname, port } = url;
|
||||
hostname = hostname.replace(/:\d*$/, "").toLowerCase();
|
||||
hostname = hostname.replace(/:\d*$/, "").replace(/^\[(.+)\]$/, "$1").toLowerCase();
|
||||
port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0;
|
||||
if (!this.#shouldProxy(hostname, port)) {
|
||||
return this[kNoProxyAgent];
|
||||
@@ -30820,11 +31352,22 @@ var require_env_http_proxy_agent2 = __commonJS({
|
||||
if (!entry) {
|
||||
continue;
|
||||
}
|
||||
const parsed = entry.match(/^(.+):(\d+)$/);
|
||||
let hostname, port;
|
||||
const ipv6WithPort = entry.match(/^\[(.+)\]:(\d+)$/);
|
||||
if (ipv6WithPort) {
|
||||
hostname = ipv6WithPort[1];
|
||||
port = Number.parseInt(ipv6WithPort[2], 10);
|
||||
} else {
|
||||
const unbracketed = entry.replace(/^\[(.+)\]$/, "$1");
|
||||
const colonCount = (unbracketed.match(/:/g) || []).length;
|
||||
const parsed = colonCount === 1 && unbracketed.match(/^(.+):(\d+)$/);
|
||||
hostname = parsed ? parsed[1] : unbracketed;
|
||||
port = parsed ? Number.parseInt(parsed[2], 10) : 0;
|
||||
}
|
||||
noProxyEntries.push({
|
||||
// strip leading dot or asterisk with dot
|
||||
hostname: (parsed ? parsed[1] : entry).replace(/^\*?\./, "").toLowerCase(),
|
||||
port: parsed ? Number.parseInt(parsed[2], 10) : 0
|
||||
hostname: hostname.replace(/^\*?\./, "").toLowerCase(),
|
||||
port
|
||||
});
|
||||
}
|
||||
this.#noProxyValue = noProxyValue;
|
||||
@@ -30858,8 +31401,54 @@ var require_retry_handler2 = __commonJS({
|
||||
} = require_util9();
|
||||
function calculateRetryAfterHeader(retryAfter) {
|
||||
const retryTime = new Date(retryAfter).getTime();
|
||||
return isNaN(retryTime) ? 0 : retryTime - Date.now();
|
||||
return isNaN(retryTime) ? null : retryTime - Date.now();
|
||||
}
|
||||
function validatePartialResponseContentLength(headers, range, statusCode, retryCount) {
|
||||
const contentLength = headers["content-length"];
|
||||
if (contentLength == null) {
|
||||
return;
|
||||
}
|
||||
if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) {
|
||||
return;
|
||||
}
|
||||
const length = Number(contentLength);
|
||||
const expectedLength = range.end - range.start + 1;
|
||||
if (!Number.isFinite(length) || length !== expectedLength) {
|
||||
throw new RequestRetryError("Content-Length mismatch", statusCode, {
|
||||
headers,
|
||||
data: { count: retryCount }
|
||||
});
|
||||
}
|
||||
}
|
||||
var RetryController = class {
|
||||
constructor() {
|
||||
this.target = null;
|
||||
}
|
||||
pause() {
|
||||
this.target?.pause();
|
||||
}
|
||||
resume() {
|
||||
this.target?.resume();
|
||||
}
|
||||
abort(reason) {
|
||||
this.target?.abort(reason);
|
||||
}
|
||||
get paused() {
|
||||
return this.target?.paused ?? false;
|
||||
}
|
||||
get aborted() {
|
||||
return this.target?.aborted ?? false;
|
||||
}
|
||||
get reason() {
|
||||
return this.target?.reason ?? null;
|
||||
}
|
||||
get rawHeaders() {
|
||||
return this.target?.rawHeaders ?? null;
|
||||
}
|
||||
get rawTrailers() {
|
||||
return this.target?.rawTrailers ?? null;
|
||||
}
|
||||
};
|
||||
var RetryHandler = class _RetryHandler {
|
||||
constructor(opts, { dispatch, handler }) {
|
||||
const { retryOptions, ...dispatchOpts } = opts;
|
||||
@@ -30892,7 +31481,7 @@ var require_retry_handler2 = __commonJS({
|
||||
timeoutFactor: timeoutFactor ?? 2,
|
||||
maxRetries: maxRetries ?? 5,
|
||||
// What errors we should retry
|
||||
methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"],
|
||||
methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE", "QUERY"],
|
||||
// Indicates which errors to retry
|
||||
statusCodes: statusCodes ?? [500, 502, 503, 504, 429],
|
||||
// List of errors to retry
|
||||
@@ -30916,12 +31505,13 @@ var require_retry_handler2 = __commonJS({
|
||||
this.etag = null;
|
||||
this.statusCode = null;
|
||||
this.headers = null;
|
||||
this.controllerProxy = new RetryController();
|
||||
}
|
||||
onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err) {
|
||||
if (this.retryOpts.throwOnError) {
|
||||
if (this.retryOpts.statusCodes.includes(statusCode) === false) {
|
||||
this.headersSent = true;
|
||||
this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage);
|
||||
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
||||
} else {
|
||||
this.error = err;
|
||||
}
|
||||
@@ -30929,13 +31519,13 @@ var require_retry_handler2 = __commonJS({
|
||||
}
|
||||
if (isDisturbed(this.opts.body)) {
|
||||
this.headersSent = true;
|
||||
this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage);
|
||||
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
||||
return;
|
||||
}
|
||||
function shouldRetry(passedErr) {
|
||||
if (passedErr) {
|
||||
this.headersSent = true;
|
||||
this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage);
|
||||
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
||||
controller.resume();
|
||||
return;
|
||||
}
|
||||
@@ -30953,12 +31543,13 @@ var require_retry_handler2 = __commonJS({
|
||||
);
|
||||
}
|
||||
onRequestStart(controller, context) {
|
||||
this.controllerProxy.target = controller;
|
||||
if (!this.headersSent) {
|
||||
this.handler.onRequestStart?.(controller, context);
|
||||
this.handler.onRequestStart?.(this.controllerProxy, context);
|
||||
}
|
||||
}
|
||||
onRequestUpgrade(controller, statusCode, headers, socket) {
|
||||
this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket);
|
||||
onRequestUpgrade(_controller, statusCode, headers, socket) {
|
||||
this.handler.onRequestUpgrade?.(this.controllerProxy, statusCode, headers, socket);
|
||||
}
|
||||
static [kRetryHandlerDefaultRetry](err, { state, opts }, cb) {
|
||||
const { statusCode, code, headers } = err;
|
||||
@@ -30994,10 +31585,14 @@ var require_retry_handler2 = __commonJS({
|
||||
retryAfterHeader = Number(retryAfterHeader);
|
||||
retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(headers["retry-after"]) : retryAfterHeader * 1e3;
|
||||
}
|
||||
const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout);
|
||||
const retryTimeout = retryAfterHeader === 0 ? 0 : retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout);
|
||||
setTimeout(() => cb(null), retryTimeout);
|
||||
}
|
||||
onResponseStart(controller, statusCode, headers, statusMessage) {
|
||||
if (statusCode < 200) {
|
||||
this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage);
|
||||
return;
|
||||
}
|
||||
this.error = null;
|
||||
this.retryCount += 1;
|
||||
this.statusCode = statusCode;
|
||||
@@ -31032,6 +31627,7 @@ var require_retry_handler2 = __commonJS({
|
||||
data: { count: this.retryCount }
|
||||
});
|
||||
}
|
||||
validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount);
|
||||
const { start, size, end = size ? size - 1 : null } = contentRange;
|
||||
assert(this.start === start, "content-range mismatch");
|
||||
assert(this.end == null || this.end === end, "content-range mismatch");
|
||||
@@ -31040,16 +31636,17 @@ var require_retry_handler2 = __commonJS({
|
||||
if (this.end == null) {
|
||||
if (statusCode === 206) {
|
||||
const range = parseRangeHeader(headers["content-range"]);
|
||||
if (range == null) {
|
||||
if (range == null || range.end == null) {
|
||||
this.headersSent = true;
|
||||
this.handler.onResponseStart?.(
|
||||
controller,
|
||||
this.controllerProxy,
|
||||
statusCode,
|
||||
headers,
|
||||
statusMessage
|
||||
);
|
||||
return;
|
||||
}
|
||||
validatePartialResponseContentLength(headers, range, statusCode, this.retryCount);
|
||||
const { start, size, end = size ? size - 1 : null } = range;
|
||||
assert(
|
||||
start != null && Number.isFinite(start),
|
||||
@@ -31059,7 +31656,7 @@ var require_retry_handler2 = __commonJS({
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
if (this.end == null) {
|
||||
if (this.end == null && this.opts.method !== "HEAD") {
|
||||
const contentLength = headers["content-length"];
|
||||
this.end = contentLength != null ? Number(contentLength) - 1 : null;
|
||||
}
|
||||
@@ -31075,7 +31672,7 @@ var require_retry_handler2 = __commonJS({
|
||||
}
|
||||
this.headersSent = true;
|
||||
this.handler.onResponseStart?.(
|
||||
controller,
|
||||
this.controllerProxy,
|
||||
statusCode,
|
||||
headers,
|
||||
statusMessage
|
||||
@@ -31087,14 +31684,14 @@ var require_retry_handler2 = __commonJS({
|
||||
});
|
||||
}
|
||||
}
|
||||
onResponseData(controller, chunk) {
|
||||
onResponseData(_controller, chunk) {
|
||||
if (this.error) {
|
||||
return;
|
||||
}
|
||||
this.start += chunk.length;
|
||||
this.handler.onResponseData?.(controller, chunk);
|
||||
this.handler.onResponseData?.(this.controllerProxy, chunk);
|
||||
}
|
||||
onResponseEnd(controller, trailers) {
|
||||
onResponseEnd(_controller, trailers) {
|
||||
if (this.error && this.retryOpts.throwOnError) {
|
||||
throw this.error;
|
||||
}
|
||||
@@ -31108,11 +31705,11 @@ var require_retry_handler2 = __commonJS({
|
||||
}
|
||||
}
|
||||
this.retryCount = 0;
|
||||
return this.handler.onResponseEnd?.(controller, trailers);
|
||||
return this.handler.onResponseEnd?.(this.controllerProxy, trailers);
|
||||
}
|
||||
this.retry(controller);
|
||||
this.retry();
|
||||
}
|
||||
retry(controller) {
|
||||
retry() {
|
||||
if (this.start !== 0) {
|
||||
const headers = { range: `bytes=${this.start}-${this.end ?? ""}` };
|
||||
if (this.etag != null) {
|
||||
@@ -31130,20 +31727,20 @@ var require_retry_handler2 = __commonJS({
|
||||
this.retryCountCheckpoint = this.retryCount;
|
||||
this.dispatch(this.opts, this);
|
||||
} catch (err) {
|
||||
this.handler.onResponseError?.(controller, err);
|
||||
this.handler.onResponseError?.(this.controllerProxy, err);
|
||||
}
|
||||
}
|
||||
onResponseError(controller, err) {
|
||||
if (controller?.aborted || isDisturbed(this.opts.body)) {
|
||||
this.handler.onResponseError?.(controller, err);
|
||||
this.handler.onResponseError?.(this.controllerProxy, err);
|
||||
return;
|
||||
}
|
||||
function shouldRetry(returnedErr) {
|
||||
if (!returnedErr) {
|
||||
this.retry(controller);
|
||||
this.retry();
|
||||
return;
|
||||
}
|
||||
this.handler?.onResponseError?.(controller, returnedErr);
|
||||
this.handler?.onResponseError?.(this.controllerProxy, returnedErr);
|
||||
}
|
||||
if (this.retryCount - this.retryCountCheckpoint > 0) {
|
||||
this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint);
|
||||
@@ -31498,7 +32095,7 @@ var require_readable2 = __commonJS({
|
||||
*/
|
||||
setEncoding(encoding) {
|
||||
if (Buffer.isEncoding(encoding)) {
|
||||
this._readableState.encoding = encoding;
|
||||
super.setEncoding(encoding);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -31559,13 +32156,17 @@ var require_readable2 = __commonJS({
|
||||
consumePush(consume2, chunk);
|
||||
}
|
||||
}
|
||||
if (state.endEmitted) {
|
||||
consumeEnd(this[kConsume], this._readableState.encoding);
|
||||
} else {
|
||||
consume2.stream.on("end", function() {
|
||||
consumeEnd(this[kConsume], this._readableState.encoding);
|
||||
});
|
||||
const decoder = state.decoder;
|
||||
if (decoder != null && decoder.lastNeed > 0) {
|
||||
consumePush(consume2, Buffer.from(decoder.lastChar.subarray(0, decoder.lastTotal - decoder.lastNeed)));
|
||||
}
|
||||
if (state.endEmitted) {
|
||||
consumeEnd(consume2, state.encoding);
|
||||
return;
|
||||
}
|
||||
consume2.stream.on("end", function() {
|
||||
consumeEnd(this[kConsume], this._readableState.encoding);
|
||||
});
|
||||
consume2.stream.resume();
|
||||
while (consume2.stream.read() != null) {
|
||||
}
|
||||
@@ -31619,6 +32220,12 @@ var require_readable2 = __commonJS({
|
||||
}
|
||||
}
|
||||
function consumePush(consume2, chunk) {
|
||||
if (consume2.body === null) {
|
||||
return;
|
||||
}
|
||||
if (typeof chunk === "string") {
|
||||
chunk = Buffer.from(chunk, consume2.stream._readableState.encoding);
|
||||
}
|
||||
consume2.length += chunk.length;
|
||||
consume2.body.push(chunk);
|
||||
}
|
||||
@@ -31705,7 +32312,9 @@ var require_api_request2 = __commonJS({
|
||||
this.removeAbortListener = util.addAbortListener(signal, () => {
|
||||
this.reason = signal.reason ?? new RequestAbortedError();
|
||||
if (this.res) {
|
||||
util.destroy(this.res.on("error", noop), this.reason);
|
||||
const res = this.res;
|
||||
this.res = null;
|
||||
util.destroy(res.on("error", noop), this.reason);
|
||||
} else if (this.abort) {
|
||||
this.abort(this.reason);
|
||||
}
|
||||
@@ -32601,6 +33210,7 @@ var require_mock_utils2 = __commonJS({
|
||||
}
|
||||
} = require("node:util");
|
||||
var { InvalidArgumentError } = require_errors2();
|
||||
var requestAborted = /* @__PURE__ */ Symbol("request aborted");
|
||||
function matchValue(match, value) {
|
||||
if (typeof match === "string") {
|
||||
return match === value;
|
||||
@@ -32713,6 +33323,8 @@ var require_mock_utils2 = __commonJS({
|
||||
return data;
|
||||
} else if (data instanceof ArrayBuffer) {
|
||||
return data;
|
||||
} else if (ArrayBuffer.isView(data)) {
|
||||
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
||||
} else if (typeof data === "object") {
|
||||
return JSON.stringify(data);
|
||||
} else if (data) {
|
||||
@@ -32766,6 +33378,9 @@ var require_mock_utils2 = __commonJS({
|
||||
}
|
||||
}
|
||||
function removeTrailingSlash(path) {
|
||||
if (typeof path !== "string") {
|
||||
return path;
|
||||
}
|
||||
while (path.endsWith("/")) {
|
||||
path = path.slice(0, -1);
|
||||
}
|
||||
@@ -32814,17 +33429,43 @@ var require_mock_utils2 = __commonJS({
|
||||
function mockDispatch(opts, handler) {
|
||||
const key = buildKey(opts);
|
||||
const mockDispatch2 = getMockDispatch(this[kDispatches], key);
|
||||
const mockDispatches = this[kDispatches];
|
||||
mockDispatch2.timesInvoked++;
|
||||
if (mockDispatch2.data.callback) {
|
||||
mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) };
|
||||
}
|
||||
const { data: { statusCode, data, headers, trailers, error: error2 }, delay, persist } = mockDispatch2;
|
||||
const { timesInvoked, times } = mockDispatch2;
|
||||
mockDispatch2.consumed = !persist && timesInvoked >= times;
|
||||
mockDispatch2.consumed = !mockDispatch2.persist && timesInvoked >= times;
|
||||
mockDispatch2.pending = timesInvoked < times;
|
||||
if (error2 !== null) {
|
||||
deleteMockDispatch(this[kDispatches], key);
|
||||
handler.onResponseError(null, error2);
|
||||
const hasBodyHooks = typeof handler.onBodySent === "function" || typeof handler.onRequestSent === "function";
|
||||
if (mockDispatch2.data.callback && (!hasBodyHooks || opts.body == null)) {
|
||||
const { callback, ...responseDefaults } = mockDispatch2.data;
|
||||
const callbackResult = callback(opts);
|
||||
if (isPromise(callbackResult)) {
|
||||
callbackResult.then(
|
||||
(resolvedData) => {
|
||||
if (resolvedData == null || typeof resolvedData !== "object") {
|
||||
handler.onResponseError(null, new InvalidArgumentError("reply options callback must return an object"));
|
||||
return;
|
||||
}
|
||||
mockDispatch2.data = { ...responseDefaults, ...resolvedData };
|
||||
dispatchMockReply(mockDispatches, mockDispatch2, key, opts, handler);
|
||||
},
|
||||
(error2) => {
|
||||
handler.onResponseError(null, error2);
|
||||
}
|
||||
);
|
||||
return true;
|
||||
}
|
||||
if (callbackResult == null || typeof callbackResult !== "object") {
|
||||
throw new InvalidArgumentError("reply options callback must return an object");
|
||||
}
|
||||
mockDispatch2.data = { ...responseDefaults, ...callbackResult };
|
||||
}
|
||||
return dispatchMockReply(mockDispatches, mockDispatch2, key, opts, handler);
|
||||
}
|
||||
function dispatchMockReply(mockDispatches, mockDispatch2, key, opts, handler) {
|
||||
const { data: response, delay } = mockDispatch2;
|
||||
if (response.error !== null) {
|
||||
deleteMockDispatch(mockDispatches, key);
|
||||
handler.onResponseError(null, response.error);
|
||||
return true;
|
||||
}
|
||||
let aborted = false;
|
||||
@@ -32851,39 +33492,172 @@ var require_mock_utils2 = __commonJS({
|
||||
handler.onResponseError?.(controller, reason);
|
||||
}
|
||||
};
|
||||
let replyOpts = opts;
|
||||
const dispatches = mockDispatches;
|
||||
handler.onRequestStart?.(controller, null);
|
||||
if (typeof delay === "number" && delay > 0) {
|
||||
timer = setTimeout(() => {
|
||||
timer = null;
|
||||
handleReply(this[kDispatches]);
|
||||
}, delay);
|
||||
} else {
|
||||
handleReply(this[kDispatches]);
|
||||
if (aborted) {
|
||||
return true;
|
||||
}
|
||||
function handleReply(mockDispatches, _data = data) {
|
||||
const requestBody = dispatchRequestBody(opts.body, handler, controller, () => aborted);
|
||||
if (isPromise(requestBody)) {
|
||||
requestBody.then((body) => {
|
||||
if (body === requestAborted) {
|
||||
return;
|
||||
}
|
||||
if (body !== opts.body) {
|
||||
replyOpts = { ...opts, body };
|
||||
}
|
||||
sendReply();
|
||||
}, (error2) => controller.abort(error2));
|
||||
return true;
|
||||
}
|
||||
if (requestBody === requestAborted) {
|
||||
return true;
|
||||
}
|
||||
if (requestBody !== opts.body) {
|
||||
replyOpts = { ...opts, body: requestBody };
|
||||
}
|
||||
sendReply();
|
||||
function sendReply() {
|
||||
if (response.callback) {
|
||||
const { callback, ...responseDefaults } = response;
|
||||
let callbackResult;
|
||||
try {
|
||||
callbackResult = callback(replyOpts);
|
||||
} catch (err) {
|
||||
deleteMockDispatch(mockDispatches, key);
|
||||
handler.onResponseError(null, err);
|
||||
return;
|
||||
}
|
||||
if (isPromise(callbackResult)) {
|
||||
callbackResult.then(
|
||||
(resolvedData) => {
|
||||
if (resolvedData == null || typeof resolvedData !== "object") {
|
||||
handler.onResponseError(null, new InvalidArgumentError("reply options callback must return an object"));
|
||||
return;
|
||||
}
|
||||
mockDispatch2.data = { ...responseDefaults, ...resolvedData };
|
||||
handleReply(dispatches, mockDispatch2.data);
|
||||
},
|
||||
(err) => {
|
||||
handler.onResponseError(null, err);
|
||||
}
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (callbackResult == null || typeof callbackResult !== "object") {
|
||||
throw new InvalidArgumentError("reply options callback must return an object");
|
||||
}
|
||||
mockDispatch2.data = { ...responseDefaults, ...callbackResult };
|
||||
handleReply(dispatches, mockDispatch2.data);
|
||||
return;
|
||||
}
|
||||
if (typeof delay === "number" && delay > 0) {
|
||||
timer = setTimeout(() => {
|
||||
timer = null;
|
||||
handleReply(dispatches);
|
||||
}, delay);
|
||||
} else {
|
||||
handleReply(dispatches);
|
||||
}
|
||||
}
|
||||
function handleReply(mockDispatches2, _response = response) {
|
||||
if (aborted) {
|
||||
return;
|
||||
}
|
||||
const { statusCode, data, headers, trailers } = _response;
|
||||
const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers;
|
||||
const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data;
|
||||
const body = typeof data === "function" ? data({ ...replyOpts, headers: optsHeaders }) : data;
|
||||
if (isPromise(body)) {
|
||||
return body.then((newData) => handleReply(mockDispatches, newData));
|
||||
return body.then((newData) => handleReply(mockDispatches2, { ..._response, data: newData }));
|
||||
}
|
||||
if (aborted) {
|
||||
return;
|
||||
}
|
||||
const responseData = getResponseData(body);
|
||||
const responseHeaders = generateKeyValues(headers);
|
||||
const responseTrailers = generateKeyValues(trailers);
|
||||
const responseHeaders = generateKeyValues(headers ?? {});
|
||||
const responseTrailers = generateKeyValues(trailers ?? {});
|
||||
controller.rawHeaders = responseHeaders;
|
||||
controller.rawTrailers = responseTrailers;
|
||||
handler.onResponseStart?.(controller, statusCode, parseHeaders(responseHeaders), getStatusText(statusCode));
|
||||
handler.onResponseData?.(controller, Buffer.from(responseData));
|
||||
handler.onResponseEnd?.(controller, parseHeaders(responseTrailers));
|
||||
deleteMockDispatch(mockDispatches, key);
|
||||
deleteMockDispatch(mockDispatches2, key);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function dispatchRequestBody(body, handler, controller, isAborted) {
|
||||
if (typeof handler.onBodySent !== "function" && typeof handler.onRequestSent !== "function") {
|
||||
return body;
|
||||
}
|
||||
if (body == null) {
|
||||
return callOnRequestSent(handler, controller, isAborted) ? body : requestAborted;
|
||||
}
|
||||
if (body && typeof body[Symbol.asyncIterator] === "function") {
|
||||
return dispatchAsyncIterableBody(body, handler, controller, isAborted);
|
||||
}
|
||||
if (isIterableBody(body)) {
|
||||
const chunks = [];
|
||||
for (const chunk of body) {
|
||||
if (isAborted()) {
|
||||
return requestAborted;
|
||||
}
|
||||
chunks.push(chunk);
|
||||
if (!callOnBodySent(handler, controller, chunk) || isAborted()) {
|
||||
return requestAborted;
|
||||
}
|
||||
}
|
||||
return callOnRequestSent(handler, controller, isAborted) ? chunks : requestAborted;
|
||||
}
|
||||
if (isAborted()) {
|
||||
return requestAborted;
|
||||
}
|
||||
if (!callOnBodySent(handler, controller, body)) {
|
||||
return requestAborted;
|
||||
}
|
||||
return callOnRequestSent(handler, controller, isAborted) ? body : requestAborted;
|
||||
}
|
||||
async function dispatchAsyncIterableBody(body, handler, controller, isAborted) {
|
||||
const chunks = [];
|
||||
for await (const chunk of body) {
|
||||
if (isAborted()) {
|
||||
return requestAborted;
|
||||
}
|
||||
chunks.push(chunk);
|
||||
if (!callOnBodySent(handler, controller, chunk) || isAborted()) {
|
||||
return requestAborted;
|
||||
}
|
||||
}
|
||||
if (!callOnRequestSent(handler, controller, isAborted)) {
|
||||
return requestAborted;
|
||||
}
|
||||
return {
|
||||
async *[Symbol.asyncIterator]() {
|
||||
yield* chunks;
|
||||
}
|
||||
};
|
||||
}
|
||||
function callOnBodySent(handler, controller, chunk) {
|
||||
try {
|
||||
handler.onBodySent?.(chunk);
|
||||
return true;
|
||||
} catch (error2) {
|
||||
controller.abort(error2);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function callOnRequestSent(handler, controller, isAborted) {
|
||||
try {
|
||||
handler.onRequestSent?.();
|
||||
return !isAborted();
|
||||
} catch (error2) {
|
||||
controller.abort(error2);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function isIterableBody(body) {
|
||||
return typeof body !== "string" && !Buffer.isBuffer(body) && !ArrayBuffer.isView(body) && typeof body[Symbol.iterator] === "function";
|
||||
}
|
||||
function buildMockDispatch() {
|
||||
const agent = this[kMockAgent];
|
||||
const origin = this[kOrigin];
|
||||
@@ -32984,6 +33758,11 @@ var require_mock_interceptor2 = __commonJS({
|
||||
} = require_mock_symbols2();
|
||||
var { InvalidArgumentError } = require_errors2();
|
||||
var { serializePathWithQuery } = require_util9();
|
||||
var {
|
||||
types: {
|
||||
isPromise
|
||||
}
|
||||
} = require("node:util");
|
||||
var MockScope = class {
|
||||
constructor(mockDispatch) {
|
||||
this[kMockDispatch] = mockDispatch;
|
||||
@@ -33065,8 +33844,7 @@ var require_mock_interceptor2 = __commonJS({
|
||||
*/
|
||||
reply(replyOptionsCallbackOrStatusCode) {
|
||||
if (typeof replyOptionsCallbackOrStatusCode === "function") {
|
||||
const wrappedDefaultsCallback = (opts) => {
|
||||
const resolvedData = replyOptionsCallbackOrStatusCode(opts);
|
||||
const resolveReplyCallbackData = (resolvedData) => {
|
||||
if (typeof resolvedData !== "object" || resolvedData === null) {
|
||||
throw new InvalidArgumentError("reply options callback must return an object");
|
||||
}
|
||||
@@ -33076,6 +33854,13 @@ var require_mock_interceptor2 = __commonJS({
|
||||
...this.createMockScopeDispatchData(replyParameters2)
|
||||
};
|
||||
};
|
||||
const wrappedDefaultsCallback = (opts) => {
|
||||
const resolvedData = replyOptionsCallbackOrStatusCode(opts);
|
||||
if (isPromise(resolvedData)) {
|
||||
return resolvedData.then(resolveReplyCallbackData);
|
||||
}
|
||||
return resolveReplyCallbackData(resolvedData);
|
||||
};
|
||||
const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] });
|
||||
return new MockScope(newMockDispatch2);
|
||||
}
|
||||
@@ -33224,7 +34009,7 @@ var require_mock_call_history = __commonJS({
|
||||
return finalOptions;
|
||||
}
|
||||
function makeFilterCalls(parameterName) {
|
||||
return (parameterValue, logs) => {
|
||||
return (parameterValue, logs = this.logs) => {
|
||||
if (typeof parameterValue === "string" || parameterValue == null) {
|
||||
return logs.filter((log) => {
|
||||
return log[parameterName] === parameterValue;
|
||||
@@ -34442,7 +35227,11 @@ var require_snapshot_agent = __commonJS({
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async close() {
|
||||
await this[kSnapshotRecorder].close();
|
||||
if (this[kSnapshotMode] === "playback") {
|
||||
this[kSnapshotRecorder].destroy();
|
||||
} else {
|
||||
await this[kSnapshotRecorder].close();
|
||||
}
|
||||
await this[kRealAgent]?.close();
|
||||
await super.close();
|
||||
}
|
||||
@@ -34460,6 +35249,7 @@ var require_global4 = __commonJS({
|
||||
var { InvalidArgumentError } = require_errors2();
|
||||
var Agent = require_agent2();
|
||||
var Dispatcher1Wrapper = require_dispatcher1_wrapper();
|
||||
var fallbackDispatcher;
|
||||
if (getGlobalDispatcher() === void 0) {
|
||||
setGlobalDispatcher(new Agent());
|
||||
}
|
||||
@@ -34467,22 +35257,36 @@ var require_global4 = __commonJS({
|
||||
if (!agent || typeof agent.dispatch !== "function") {
|
||||
throw new InvalidArgumentError("Argument agent must implement Agent");
|
||||
}
|
||||
Object.defineProperty(globalThis, globalDispatcher, {
|
||||
value: agent,
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: false
|
||||
});
|
||||
const legacyAgent = agent instanceof Dispatcher1Wrapper ? agent : new Dispatcher1Wrapper(agent);
|
||||
Object.defineProperty(globalThis, legacyGlobalDispatcher, {
|
||||
value: legacyAgent,
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: false
|
||||
});
|
||||
try {
|
||||
Object.defineProperty(globalThis, globalDispatcher, {
|
||||
value: agent,
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: false
|
||||
});
|
||||
} catch (err) {
|
||||
if (err instanceof TypeError) {
|
||||
fallbackDispatcher = agent;
|
||||
return;
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
try {
|
||||
const legacyAgent = agent instanceof Dispatcher1Wrapper ? agent : new Dispatcher1Wrapper(agent);
|
||||
Object.defineProperty(globalThis, legacyGlobalDispatcher, {
|
||||
value: legacyAgent,
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: false
|
||||
});
|
||||
} catch (err) {
|
||||
if (!(err instanceof TypeError)) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
function getGlobalDispatcher() {
|
||||
return globalThis[globalDispatcher];
|
||||
return globalThis[globalDispatcher] ?? fallbackDispatcher;
|
||||
}
|
||||
var installedExports = (
|
||||
/** @type {const} */
|
||||
@@ -34589,9 +35393,11 @@ var require_redirect_handler2 = __commonJS({
|
||||
}
|
||||
this.dispatch = dispatch;
|
||||
this.location = null;
|
||||
const { maxRedirections: _, ...cleanOpts } = opts;
|
||||
const { maxRedirections: _, stripHeadersOnRedirect, stripHeadersOnCrossOriginRedirect, ...cleanOpts } = opts;
|
||||
this.opts = cleanOpts;
|
||||
this.opts.body = util.wrapRequestBody(this.opts.body);
|
||||
this.stripHeadersOnRedirect = normalizeStripHeaders(stripHeadersOnRedirect, "stripHeadersOnRedirect");
|
||||
this.stripHeadersOnCrossOriginRedirect = normalizeStripHeaders(stripHeadersOnCrossOriginRedirect, "stripHeadersOnCrossOriginRedirect");
|
||||
this.maxRedirections = maxRedirections;
|
||||
this.handler = handler;
|
||||
this.history = [];
|
||||
@@ -34606,12 +35412,14 @@ var require_redirect_handler2 = __commonJS({
|
||||
if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {
|
||||
throw new Error("max redirects");
|
||||
}
|
||||
let removeContentHeaders = statusCode === 303;
|
||||
if ((statusCode === 301 || statusCode === 302) && this.opts.method === "POST") {
|
||||
this.opts.method = "GET";
|
||||
if (util.isStream(this.opts.body)) {
|
||||
util.destroy(this.opts.body.on("error", noop));
|
||||
}
|
||||
this.opts.body = null;
|
||||
removeContentHeaders = true;
|
||||
}
|
||||
if (statusCode === 303 && this.opts.method !== "HEAD") {
|
||||
this.opts.method = "GET";
|
||||
@@ -34636,7 +35444,7 @@ var require_redirect_handler2 = __commonJS({
|
||||
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.headers = cleanRequestHeaders(this.opts.headers, removeContentHeaders, this.opts.origin !== origin, this.stripHeadersOnRedirect, this.stripHeadersOnCrossOriginRedirect);
|
||||
this.opts.path = path;
|
||||
this.opts.origin = origin;
|
||||
this.opts.query = null;
|
||||
@@ -34658,31 +35466,50 @@ var require_redirect_handler2 = __commonJS({
|
||||
this.handler.onResponseError?.(controller, error2);
|
||||
}
|
||||
};
|
||||
function shouldRemoveHeader(header, removeContent, unknownOrigin) {
|
||||
if (header.length === 4) {
|
||||
return util.headerNameToString(header) === "host";
|
||||
}
|
||||
if (removeContent && util.headerNameToString(header).startsWith("content-")) {
|
||||
function shouldRemoveHeader(header, removeContent, unknownOrigin, stripHeaders, stripHeadersOnCrossOrigin) {
|
||||
const name = util.headerNameToString(header);
|
||||
if (name === "host") {
|
||||
return true;
|
||||
}
|
||||
if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {
|
||||
const name = util.headerNameToString(header);
|
||||
if (stripHeaders?.has(name) || unknownOrigin && stripHeadersOnCrossOrigin?.has(name)) {
|
||||
return true;
|
||||
}
|
||||
if (removeContent && name.startsWith("content-")) {
|
||||
return true;
|
||||
}
|
||||
if (unknownOrigin) {
|
||||
return name === "authorization" || name === "cookie" || name === "proxy-authorization";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function cleanRequestHeaders(headers, removeContent, unknownOrigin) {
|
||||
function normalizeStripHeaders(headers, optionName) {
|
||||
if (headers == null) {
|
||||
return null;
|
||||
}
|
||||
if (!Array.isArray(headers)) {
|
||||
throw new InvalidArgumentError(`${optionName} must be an array`);
|
||||
}
|
||||
const normalized = /* @__PURE__ */ new Set();
|
||||
for (const header of headers) {
|
||||
if (typeof header !== "string") {
|
||||
throw new InvalidArgumentError(`${optionName} must contain header names`);
|
||||
}
|
||||
normalized.add(util.headerNameToString(header));
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
function cleanRequestHeaders(headers, removeContent, unknownOrigin, stripHeaders, stripHeadersOnCrossOrigin) {
|
||||
const ret = [];
|
||||
if (Array.isArray(headers)) {
|
||||
for (let i = 0; i < headers.length; i += 2) {
|
||||
if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {
|
||||
if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin, stripHeaders, stripHeadersOnCrossOrigin)) {
|
||||
ret.push(headers[i], headers[i + 1]);
|
||||
}
|
||||
}
|
||||
} else if (headers && typeof headers === "object") {
|
||||
const entries = util.hasSafeIterator(headers) ? headers : Object.entries(headers);
|
||||
for (const [key, value] of entries) {
|
||||
if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {
|
||||
if (!shouldRemoveHeader(key, removeContent, unknownOrigin, stripHeaders, stripHeadersOnCrossOrigin)) {
|
||||
ret.push(key, value);
|
||||
}
|
||||
}
|
||||
@@ -34700,14 +35527,14 @@ var require_redirect2 = __commonJS({
|
||||
"node_modules/undici/lib/interceptor/redirect.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var RedirectHandler = require_redirect_handler2();
|
||||
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections, throwOnMaxRedirect: defaultThrowOnMaxRedirect } = {}) {
|
||||
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections, throwOnMaxRedirect: defaultThrowOnMaxRedirect, stripHeadersOnRedirect: defaultStripHeadersOnRedirect, stripHeadersOnCrossOriginRedirect: defaultStripHeadersOnCrossOriginRedirect } = {}) {
|
||||
return (dispatch) => {
|
||||
return function Intercept(opts, handler) {
|
||||
const { maxRedirections = defaultMaxRedirections, throwOnMaxRedirect = defaultThrowOnMaxRedirect, ...rest } = opts;
|
||||
const { maxRedirections = defaultMaxRedirections, throwOnMaxRedirect = defaultThrowOnMaxRedirect, stripHeadersOnRedirect = defaultStripHeadersOnRedirect, stripHeadersOnCrossOriginRedirect = defaultStripHeadersOnCrossOriginRedirect, ...rest } = opts;
|
||||
if (maxRedirections == null || maxRedirections === 0) {
|
||||
return dispatch(opts, handler);
|
||||
}
|
||||
const dispatchOpts = { ...rest, throwOnMaxRedirect };
|
||||
const dispatchOpts = { ...rest, throwOnMaxRedirect, stripHeadersOnRedirect, stripHeadersOnCrossOriginRedirect };
|
||||
const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler);
|
||||
return dispatch(dispatchOpts, redirectHandler);
|
||||
};
|
||||
@@ -35318,6 +36145,9 @@ var require_dns2 = __commonJS({
|
||||
const instance = new DNSInstance(opts);
|
||||
return (dispatch) => {
|
||||
return function dnsInterceptor(origDispatchOpts, handler) {
|
||||
if (origDispatchOpts.origin == null) {
|
||||
return dispatch(origDispatchOpts, handler);
|
||||
}
|
||||
const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin);
|
||||
if (isIP(origin.hostname) !== 0) {
|
||||
return dispatch(origDispatchOpts, handler);
|
||||
@@ -35355,24 +36185,146 @@ var require_cache2 = __commonJS({
|
||||
var {
|
||||
safeHTTPMethods,
|
||||
pathHasQueryOrFragment,
|
||||
hasSafeIterator
|
||||
hasSafeIterator,
|
||||
isValidHTTPToken
|
||||
} = require_util9();
|
||||
var { serializePathWithQuery } = require_util9();
|
||||
function makeCacheKey(opts) {
|
||||
if (!opts.origin) {
|
||||
throw new Error("opts.origin is undefined");
|
||||
var MAX_DELTA_SECONDS = 2147483647;
|
||||
var RESTRICTIVE_DIRECTIVE_NAMES = ["no-store", "private", "no-cache"];
|
||||
var kInvalidCacheControlDirectives = /* @__PURE__ */ Symbol("invalid cache-control directives");
|
||||
function trimOWS(value) {
|
||||
return value.replace(/^[\t ]+|[\t ]+$/g, "");
|
||||
}
|
||||
function arrayIncludes(array, value) {
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
if (array[i] === value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function trimOWSStart(value) {
|
||||
return value.replace(/^[\t ]+/, "");
|
||||
}
|
||||
function trimOWSEnd(value) {
|
||||
return value.replace(/[\t ]+$/, "");
|
||||
}
|
||||
function findUnescapedQuote(value, start) {
|
||||
let escaped = false;
|
||||
for (let i = start; i < value.length; i++) {
|
||||
if (escaped) {
|
||||
escaped = false;
|
||||
} else if (value[i] === "\\") {
|
||||
escaped = true;
|
||||
} else if (value[i] === '"') {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
function splitCacheControlHeaderValue(value) {
|
||||
const directives = [];
|
||||
let start = 0;
|
||||
let quoteStart = -1;
|
||||
let inQuote = false;
|
||||
let escaped = false;
|
||||
for (let i = 0; i < value.length; i++) {
|
||||
if (inQuote) {
|
||||
if (escaped) {
|
||||
escaped = false;
|
||||
} else if (value[i] === "\\") {
|
||||
escaped = true;
|
||||
} else if (value[i] === '"') {
|
||||
inQuote = false;
|
||||
quoteStart = -1;
|
||||
}
|
||||
} else if (value[i] === '"') {
|
||||
inQuote = true;
|
||||
quoteStart = i;
|
||||
} else if (value[i] === ",") {
|
||||
directives.push({ value: value.substring(start, i), fromMalformedQuote: false });
|
||||
start = i + 1;
|
||||
}
|
||||
}
|
||||
if (!inQuote) {
|
||||
directives.push({ value: value.substring(start), fromMalformedQuote: false });
|
||||
return directives;
|
||||
}
|
||||
const tail = value.substring(start);
|
||||
const quoteOffset = quoteStart - start;
|
||||
let tailStart = 0;
|
||||
for (let i = 0; i < tail.length; i++) {
|
||||
if (tail[i] === ",") {
|
||||
directives.push({
|
||||
value: tail.substring(tailStart, i),
|
||||
fromMalformedQuote: tailStart > quoteOffset
|
||||
});
|
||||
tailStart = i + 1;
|
||||
}
|
||||
}
|
||||
directives.push({
|
||||
value: tail.substring(tailStart),
|
||||
fromMalformedQuote: tailStart > quoteOffset
|
||||
});
|
||||
return directives;
|
||||
}
|
||||
function markInvalidCacheControlDirective(directives, key) {
|
||||
let invalidDirectives = directives[kInvalidCacheControlDirectives];
|
||||
if (invalidDirectives === void 0) {
|
||||
invalidDirectives = /* @__PURE__ */ new Set();
|
||||
Object.defineProperty(directives, kInvalidCacheControlDirectives, {
|
||||
value: invalidDirectives
|
||||
});
|
||||
}
|
||||
invalidDirectives.add(key);
|
||||
}
|
||||
function hasInvalidCacheControlDirective(directives, key) {
|
||||
return directives[kInvalidCacheControlDirectives]?.has(key) === true;
|
||||
}
|
||||
function getMalformedRestrictiveDirectiveName(key) {
|
||||
for (const directiveName of RESTRICTIVE_DIRECTIVE_NAMES) {
|
||||
if (key.startsWith(directiveName) && key.length > directiveName.length && !isValidHTTPToken(key[directiveName.length])) {
|
||||
return directiveName;
|
||||
}
|
||||
}
|
||||
let tokenOnlyKey = "";
|
||||
let hasInvalidTokenChar = false;
|
||||
for (let i = 0; i < key.length; i++) {
|
||||
if (isValidHTTPToken(key[i])) {
|
||||
tokenOnlyKey += key[i];
|
||||
} else {
|
||||
hasInvalidTokenChar = true;
|
||||
}
|
||||
}
|
||||
if (hasInvalidTokenChar && arrayIncludes(RESTRICTIVE_DIRECTIVE_NAMES, tokenOnlyKey)) {
|
||||
return tokenOnlyKey;
|
||||
}
|
||||
}
|
||||
function makeCacheKey(opts) {
|
||||
const origin = opts.origin ? opts.origin.toString() : "";
|
||||
let fullPath = opts.path || "/";
|
||||
if (opts.query && !pathHasQueryOrFragment(fullPath)) {
|
||||
fullPath = serializePathWithQuery(fullPath, opts.query);
|
||||
}
|
||||
return {
|
||||
origin: opts.origin.toString(),
|
||||
origin,
|
||||
method: opts.method,
|
||||
path: fullPath,
|
||||
headers: opts.headers
|
||||
};
|
||||
}
|
||||
function appendHeader(headers, key, val) {
|
||||
const headerName = key.toLowerCase();
|
||||
const current = headers[headerName];
|
||||
const values = Array.isArray(val) ? val : [val];
|
||||
if (current === void 0) {
|
||||
headers[headerName] = Array.isArray(val) ? val.slice() : val;
|
||||
} else if (Array.isArray(current)) {
|
||||
current.push(...values);
|
||||
} else {
|
||||
headers[headerName] = [current, ...values];
|
||||
}
|
||||
}
|
||||
function normalizeHeaders(opts) {
|
||||
let headers;
|
||||
if (opts.headers == null) {
|
||||
@@ -35380,19 +36332,57 @@ var require_cache2 = __commonJS({
|
||||
} else if (typeof opts.headers === "object") {
|
||||
headers = {};
|
||||
if (hasSafeIterator(opts.headers)) {
|
||||
for (const x of opts.headers) {
|
||||
if (!Array.isArray(x)) {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
if (Array.isArray(opts.headers)) {
|
||||
const first = opts.headers[0];
|
||||
if (Array.isArray(first)) {
|
||||
for (const x of opts.headers) {
|
||||
if (!Array.isArray(x)) {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
}
|
||||
const [key, val] = x;
|
||||
if (typeof key !== "string" || typeof val !== "string") {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
}
|
||||
appendHeader(headers, key, val);
|
||||
}
|
||||
} else {
|
||||
const len = opts.headers.length;
|
||||
if (len % 2 !== 0) {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
}
|
||||
for (let i = 0; i < len; i += 2) {
|
||||
const key = opts.headers[i];
|
||||
const val = opts.headers[i + 1];
|
||||
if (typeof key !== "string" || typeof val !== "string" && !Array.isArray(val)) {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
}
|
||||
if (typeof val === "string") {
|
||||
appendHeader(headers, key, val);
|
||||
} else {
|
||||
const mapped = [];
|
||||
for (let j = 0; j < val.length; j++) {
|
||||
const v = val[j];
|
||||
mapped.push(typeof v === "string" ? v : v.toString("latin1"));
|
||||
}
|
||||
appendHeader(headers, key, mapped);
|
||||
}
|
||||
}
|
||||
}
|
||||
const [key, val] = x;
|
||||
if (typeof key !== "string" || typeof val !== "string") {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
} else {
|
||||
for (const x of opts.headers) {
|
||||
if (!Array.isArray(x)) {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
}
|
||||
const [key, val] = x;
|
||||
if (typeof key !== "string" || typeof val !== "string") {
|
||||
throw new Error("opts.headers is not a valid header map");
|
||||
}
|
||||
appendHeader(headers, key, val);
|
||||
}
|
||||
headers[key.toLowerCase()] = val;
|
||||
}
|
||||
} else {
|
||||
for (const key of Object.keys(opts.headers)) {
|
||||
headers[key.toLowerCase()] = opts.headers[key];
|
||||
appendHeader(headers, key, opts.headers[key]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -35437,25 +36427,32 @@ var require_cache2 = __commonJS({
|
||||
}
|
||||
function parseCacheControlHeader(header) {
|
||||
const output = {};
|
||||
let directives;
|
||||
if (Array.isArray(header)) {
|
||||
directives = [];
|
||||
for (const directive of header) {
|
||||
directives.push(...directive.split(","));
|
||||
}
|
||||
} else {
|
||||
directives = header.split(",");
|
||||
}
|
||||
const invalidNumericDirectives = /* @__PURE__ */ new Set();
|
||||
const invalidNoArgumentDirectives = /* @__PURE__ */ new Set();
|
||||
const directives = splitCacheControlHeaderValue(Array.isArray(header) ? header.join(",") : header);
|
||||
for (let i = 0; i < directives.length; i++) {
|
||||
const directive = directives[i].toLowerCase();
|
||||
const directiveRecord = directives[i];
|
||||
const directive = directiveRecord.value.toLowerCase();
|
||||
const fromMalformedQuote = directiveRecord.fromMalformedQuote;
|
||||
const keyValueDelimiter = directive.indexOf("=");
|
||||
let key;
|
||||
let value;
|
||||
let keyHasTrailingWhitespace = false;
|
||||
let valueHasLeadingWhitespace = false;
|
||||
if (keyValueDelimiter !== -1) {
|
||||
key = directive.substring(0, keyValueDelimiter).trimStart();
|
||||
value = directive.substring(keyValueDelimiter + 1);
|
||||
const rawKey = directive.substring(0, keyValueDelimiter);
|
||||
const rawValue = directive.substring(keyValueDelimiter + 1);
|
||||
keyHasTrailingWhitespace = trimOWSEnd(rawKey) !== rawKey;
|
||||
valueHasLeadingWhitespace = trimOWSStart(rawValue) !== rawValue;
|
||||
key = trimOWS(rawKey);
|
||||
value = trimOWSStart(rawValue);
|
||||
} else {
|
||||
key = directive.trim();
|
||||
key = trimOWS(directive);
|
||||
}
|
||||
const malformedRestrictiveDirectiveName = getMalformedRestrictiveDirectiveName(key);
|
||||
if (malformedRestrictiveDirectiveName !== void 0) {
|
||||
output[malformedRestrictiveDirectiveName] = true;
|
||||
continue;
|
||||
}
|
||||
switch (key) {
|
||||
case "min-fresh":
|
||||
@@ -35464,45 +36461,85 @@ var require_cache2 = __commonJS({
|
||||
case "s-maxage":
|
||||
case "stale-while-revalidate":
|
||||
case "stale-if-error": {
|
||||
if (value === void 0 || value[0] === " ") {
|
||||
if (fromMalformedQuote || invalidNumericDirectives.has(key)) {
|
||||
continue;
|
||||
}
|
||||
if (value === void 0 || keyHasTrailingWhitespace || valueHasLeadingWhitespace) {
|
||||
delete output[key];
|
||||
invalidNumericDirectives.add(key);
|
||||
markInvalidCacheControlDirective(output, key);
|
||||
continue;
|
||||
}
|
||||
if (value.length >= 2 && value[0] === '"' && value[value.length - 1] === '"') {
|
||||
value = value.substring(1, value.length - 1);
|
||||
}
|
||||
const parsedValue = parseInt(value, 10);
|
||||
if (parsedValue !== parsedValue) {
|
||||
if (!/^[0-9]+$/.test(value)) {
|
||||
delete output[key];
|
||||
invalidNumericDirectives.add(key);
|
||||
markInvalidCacheControlDirective(output, key);
|
||||
continue;
|
||||
}
|
||||
if (key === "max-age" && key in output && output[key] >= parsedValue) {
|
||||
continue;
|
||||
const parsedValue = Math.min(parseInt(value, 10), MAX_DELTA_SECONDS);
|
||||
if (key === "min-fresh") {
|
||||
if (!(key in output) || output[key] < parsedValue) {
|
||||
output[key] = parsedValue;
|
||||
}
|
||||
} else if (!(key in output) || output[key] > parsedValue) {
|
||||
output[key] = parsedValue;
|
||||
}
|
||||
output[key] = parsedValue;
|
||||
break;
|
||||
}
|
||||
case "private":
|
||||
case "no-cache": {
|
||||
if (fromMalformedQuote) {
|
||||
output[key] = true;
|
||||
break;
|
||||
}
|
||||
if (value !== void 0 && value.length === 0) {
|
||||
output[key] = true;
|
||||
break;
|
||||
}
|
||||
if (value) {
|
||||
if (value[0] === '"') {
|
||||
const headers = [value.substring(1)];
|
||||
let foundEndingQuote = value[value.length - 1] === '"';
|
||||
if (!foundEndingQuote) {
|
||||
value = trimOWSEnd(value);
|
||||
let fieldList = "";
|
||||
let lastQuotedPart = i;
|
||||
let foundEndingQuote = false;
|
||||
const closingQuote = findUnescapedQuote(value, 1);
|
||||
if (closingQuote !== -1) {
|
||||
fieldList = value.substring(1, closingQuote);
|
||||
foundEndingQuote = true;
|
||||
} else {
|
||||
const fieldListParts = [value.substring(1)];
|
||||
for (let j = i + 1; j < directives.length; j++) {
|
||||
const nextPart = directives[j];
|
||||
const nextPartLength = nextPart.length;
|
||||
headers.push(nextPart.trim());
|
||||
if (nextPartLength !== 0 && nextPart[nextPartLength - 1] === '"') {
|
||||
const nextPart = trimOWS(directives[j].value);
|
||||
const closingQuote2 = findUnescapedQuote(nextPart, 0);
|
||||
lastQuotedPart = j;
|
||||
if (closingQuote2 !== -1) {
|
||||
fieldListParts.push(nextPart.substring(0, closingQuote2));
|
||||
foundEndingQuote = true;
|
||||
break;
|
||||
}
|
||||
fieldListParts.push(nextPart);
|
||||
}
|
||||
fieldList = fieldListParts.join(",");
|
||||
}
|
||||
if (!foundEndingQuote) {
|
||||
output[key] = true;
|
||||
break;
|
||||
}
|
||||
i = lastQuotedPart;
|
||||
const headers = fieldList.split(",");
|
||||
let validFieldNames = true;
|
||||
for (let j = 0; j < headers.length; j++) {
|
||||
headers[j] = trimOWS(headers[j]);
|
||||
if (!isValidHTTPToken(headers[j])) {
|
||||
validFieldNames = false;
|
||||
}
|
||||
}
|
||||
if (foundEndingQuote) {
|
||||
let lastHeader = headers[headers.length - 1];
|
||||
if (lastHeader[lastHeader.length - 1] === '"') {
|
||||
lastHeader = lastHeader.substring(0, lastHeader.length - 1);
|
||||
headers[headers.length - 1] = lastHeader;
|
||||
}
|
||||
if (!validFieldNames) {
|
||||
output[key] = true;
|
||||
} else if (output[key] !== true) {
|
||||
if (key in output) {
|
||||
output[key] = output[key].concat(headers);
|
||||
} else {
|
||||
@@ -35510,10 +36547,15 @@ var require_cache2 = __commonJS({
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (key in output) {
|
||||
output[key] = output[key].concat(value);
|
||||
} else {
|
||||
output[key] = [value];
|
||||
const fieldName = trimOWS(value);
|
||||
if (!isValidHTTPToken(fieldName)) {
|
||||
output[key] = true;
|
||||
} else if (output[key] !== true) {
|
||||
if (key in output) {
|
||||
output[key] = output[key].concat(fieldName);
|
||||
} else {
|
||||
output[key] = [fieldName];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -35521,16 +36563,23 @@ var require_cache2 = __commonJS({
|
||||
}
|
||||
// eslint-disable-next-line no-fallthrough
|
||||
case "public":
|
||||
case "no-store":
|
||||
case "must-revalidate":
|
||||
case "proxy-revalidate":
|
||||
case "immutable":
|
||||
case "no-transform":
|
||||
case "must-understand":
|
||||
case "only-if-cached":
|
||||
if (value) {
|
||||
if (fromMalformedQuote || invalidNoArgumentDirectives.has(key)) {
|
||||
continue;
|
||||
}
|
||||
if (value !== void 0) {
|
||||
delete output[key];
|
||||
invalidNoArgumentDirectives.add(key);
|
||||
continue;
|
||||
}
|
||||
output[key] = true;
|
||||
break;
|
||||
case "no-store":
|
||||
output[key] = true;
|
||||
break;
|
||||
default:
|
||||
@@ -35539,21 +36588,51 @@ var require_cache2 = __commonJS({
|
||||
}
|
||||
return output;
|
||||
}
|
||||
function splitVaryHeader(varyHeader) {
|
||||
const values = Array.isArray(varyHeader) ? varyHeader : [varyHeader];
|
||||
const output = [];
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
const parts = values[i].split(",");
|
||||
for (let j = 0; j < parts.length; j++) {
|
||||
output.push(parts[j]);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
function hasVaryStar(varyHeader) {
|
||||
const values = splitVaryHeader(varyHeader);
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
if (trimOWS(values[i]).indexOf("*") !== -1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function parseVaryHeader(varyHeader, headers) {
|
||||
if (typeof varyHeader === "string" && varyHeader.includes("*")) {
|
||||
if (hasVaryStar(varyHeader)) {
|
||||
return headers;
|
||||
}
|
||||
const output = (
|
||||
/** @type {Record<string, string | string[] | null>} */
|
||||
{}
|
||||
);
|
||||
const varyingHeaders = typeof varyHeader === "string" ? varyHeader.split(",") : varyHeader;
|
||||
const varyingHeaders = splitVaryHeader(varyHeader);
|
||||
for (const header of varyingHeaders) {
|
||||
const trimmedHeader = header.trim().toLowerCase();
|
||||
output[trimmedHeader] = headers[trimmedHeader] ?? null;
|
||||
const trimmedHeader = trimOWS(header).toLowerCase();
|
||||
if (trimmedHeader.length === 0) {
|
||||
continue;
|
||||
}
|
||||
if (!isValidHTTPToken(trimmedHeader)) {
|
||||
return void 0;
|
||||
}
|
||||
const headerValue = headers[trimmedHeader];
|
||||
output[trimmedHeader] = Array.isArray(headerValue) ? headerValue.slice() : headerValue ?? null;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
function isInvalidOrWildcardVaryHeader(varyHeader) {
|
||||
return hasVaryStar(varyHeader) || parseVaryHeader(varyHeader, {}) === void 0;
|
||||
}
|
||||
function isEtagUsable(etag) {
|
||||
if (etag.length <= 2) {
|
||||
return false;
|
||||
@@ -35584,7 +36663,7 @@ var require_cache2 = __commonJS({
|
||||
throw new TypeError(`${name} needs to have at least one method`);
|
||||
}
|
||||
for (const method of methods) {
|
||||
if (!safeHTTPMethods.includes(method)) {
|
||||
if (!arrayIncludes(safeHTTPMethods, method)) {
|
||||
throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(", ")}, got ${method}`);
|
||||
}
|
||||
}
|
||||
@@ -35608,7 +36687,10 @@ var require_cache2 = __commonJS({
|
||||
assertCacheKey,
|
||||
assertCacheValue,
|
||||
parseCacheControlHeader,
|
||||
hasInvalidCacheControlDirective,
|
||||
parseVaryHeader,
|
||||
hasVaryStar,
|
||||
isInvalidOrWildcardVaryHeader,
|
||||
isEtagUsable,
|
||||
assertCacheMethods,
|
||||
assertCacheStore,
|
||||
@@ -35631,6 +36713,13 @@ var require_date = __commonJS({
|
||||
return parseRfc850Date(date);
|
||||
}
|
||||
}
|
||||
function makeDate(year, monthIdx, day, hour, minute, second, weekday) {
|
||||
const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second));
|
||||
if (year >= 0 && year <= 99) {
|
||||
result.setUTCFullYear(year);
|
||||
}
|
||||
return result.getUTCFullYear() === year && result.getUTCMonth() === monthIdx && result.getUTCDate() === day && result.getUTCHours() === hour && result.getUTCMinutes() === minute && result.getUTCSeconds() === second && result.getUTCDay() === weekday ? result : void 0;
|
||||
}
|
||||
function parseImfDate(date) {
|
||||
if (date.length !== 29 || date[4] !== " " || date[7] !== " " || date[11] !== " " || date[16] !== " " || date[19] !== ":" || date[22] !== ":" || date[25] !== " " || date[26] !== "G" || date[27] !== "M" || date[28] !== "T") {
|
||||
return void 0;
|
||||
@@ -35791,8 +36880,7 @@ var require_date = __commonJS({
|
||||
}
|
||||
second = (code1 - 48) * 10 + (code2 - 48);
|
||||
}
|
||||
const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second));
|
||||
return result.getUTCDay() === weekday ? result : void 0;
|
||||
return makeDate(year, monthIdx, day, hour, minute, second, weekday);
|
||||
}
|
||||
function parseAscTimeDate(date) {
|
||||
if (date.length !== 24 || date[7] !== " " || date[10] !== " " || date[19] !== " ") {
|
||||
@@ -35954,8 +37042,7 @@ var require_date = __commonJS({
|
||||
return void 0;
|
||||
}
|
||||
const year = (yearDigit1 - 48) * 1e3 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48);
|
||||
const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second));
|
||||
return result.getUTCDay() === weekday ? result : void 0;
|
||||
return makeDate(year, monthIdx, day, hour, minute, second, weekday);
|
||||
}
|
||||
function parseRfc850Date(date) {
|
||||
let commaIndex = -1;
|
||||
@@ -36104,8 +37191,7 @@ var require_date = __commonJS({
|
||||
}
|
||||
second = (code1 - 48) * 10 + (code2 - 48);
|
||||
}
|
||||
const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second));
|
||||
return result.getUTCDay() === weekday ? result : void 0;
|
||||
return makeDate(year, monthIdx, day, hour, minute, second, weekday);
|
||||
}
|
||||
module2.exports = {
|
||||
parseHttpDate
|
||||
@@ -36120,7 +37206,10 @@ var require_cache_handler = __commonJS({
|
||||
var util = require_util9();
|
||||
var {
|
||||
parseCacheControlHeader,
|
||||
hasInvalidCacheControlDirective,
|
||||
parseVaryHeader,
|
||||
hasVaryStar,
|
||||
isInvalidOrWildcardVaryHeader,
|
||||
isEtagUsable
|
||||
} = require_cache2();
|
||||
var { parseHttpDate } = require_date();
|
||||
@@ -36144,6 +37233,79 @@ var require_cache_handler = __commonJS({
|
||||
206
|
||||
];
|
||||
var MAX_RESPONSE_AGE = 2147483647e3;
|
||||
var REVALIDATION_ONLY_RETENTION = 864e5;
|
||||
function trimOWS(value) {
|
||||
return value.replace(/^[\t ]+|[\t ]+$/g, "");
|
||||
}
|
||||
function arrayIncludes(array, value) {
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
if (array[i] === value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function appendConnectionHeaderTokens(headersToRemove, connectionHeader) {
|
||||
const values = Array.isArray(connectionHeader) ? connectionHeader : [connectionHeader];
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
const tokens = values[i].split(",");
|
||||
for (let j = 0; j < tokens.length; j++) {
|
||||
headersToRemove.push(trimOWS(tokens[j]).toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
function getSameOriginPath(cacheKey, location) {
|
||||
if (typeof location !== "string") {
|
||||
return void 0;
|
||||
}
|
||||
let originUrl;
|
||||
let requestUrl;
|
||||
let locationUrl;
|
||||
try {
|
||||
originUrl = new URL(cacheKey.origin);
|
||||
requestUrl = new URL(cacheKey.path, originUrl);
|
||||
locationUrl = new URL(location, requestUrl);
|
||||
} catch {
|
||||
return void 0;
|
||||
}
|
||||
if (locationUrl.origin !== originUrl.origin) {
|
||||
return void 0;
|
||||
}
|
||||
return locationUrl.pathname + locationUrl.search;
|
||||
}
|
||||
function deleteCachedUri(store, cacheKey, path) {
|
||||
deleteCachedValue(store, {
|
||||
...cacheKey,
|
||||
path
|
||||
});
|
||||
for (let i = 0; i < util.safeHTTPMethods.length; i++) {
|
||||
const method = util.safeHTTPMethods[i];
|
||||
if (method !== cacheKey.method) {
|
||||
deleteCachedValue(store, {
|
||||
...cacheKey,
|
||||
method,
|
||||
path
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
function deleteLocationTargets(store, cacheKey, headerValue) {
|
||||
if (headerValue === void 0) {
|
||||
return;
|
||||
}
|
||||
const values = Array.isArray(headerValue) ? headerValue : [headerValue];
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
const path = getSameOriginPath(cacheKey, values[i]);
|
||||
if (path !== void 0) {
|
||||
deleteCachedUri(store, cacheKey, path);
|
||||
}
|
||||
}
|
||||
}
|
||||
function invalidateUnsafeRequest(store, cacheKey, resHeaders) {
|
||||
deleteCachedUri(store, cacheKey, cacheKey.path);
|
||||
deleteLocationTargets(store, cacheKey, resHeaders.location);
|
||||
deleteLocationTargets(store, cacheKey, resHeaders["content-location"]);
|
||||
}
|
||||
var CacheHandler = class {
|
||||
/**
|
||||
* @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}
|
||||
@@ -36203,35 +37365,51 @@ var require_cache_handler = __commonJS({
|
||||
statusMessage
|
||||
);
|
||||
const handler = this;
|
||||
if (!util.safeHTTPMethods.includes(this.#cacheKey.method) && statusCode >= 200 && statusCode <= 399) {
|
||||
try {
|
||||
this.#store.delete(this.#cacheKey)?.catch?.(noop);
|
||||
} catch {
|
||||
}
|
||||
if (!arrayIncludes(util.safeHTTPMethods, this.#cacheKey.method) && statusCode >= 200 && statusCode <= 399) {
|
||||
invalidateUnsafeRequest(this.#store, this.#cacheKey, resHeaders);
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
const cacheControlHeader = resHeaders["cache-control"];
|
||||
const heuristicallyCacheable = resHeaders["last-modified"] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode);
|
||||
const heuristicallyCacheable = resHeaders["last-modified"] && arrayIncludes(HEURISTICALLY_CACHEABLE_STATUS_CODES, statusCode);
|
||||
if (!cacheControlHeader && !resHeaders["expires"] && !heuristicallyCacheable && !this.#cacheByDefault) {
|
||||
if (statusCode === 304 && resHeaders.vary && isInvalidOrWildcardVaryHeader(resHeaders.vary)) {
|
||||
deleteCachedValue(this.#store, this.#cacheKey);
|
||||
}
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {};
|
||||
if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives, this.#cacheKey.headers)) {
|
||||
if (statusCode === 304 && (cacheControlHeader || revalidationResponseDisallowsCachedReuse(this.#cacheType, resHeaders, cacheControlDirectives))) {
|
||||
deleteCachedValue(this.#store, this.#cacheKey);
|
||||
}
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
const now = Date.now();
|
||||
const resAge = resHeaders.age ? getAge(resHeaders.age) : void 0;
|
||||
if (resAge && resAge >= MAX_RESPONSE_AGE) {
|
||||
const resAge = Object.hasOwn(resHeaders, "age") ? getAge(resHeaders.age) : void 0;
|
||||
if (resAge !== void 0 && resAge >= MAX_RESPONSE_AGE) {
|
||||
deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey);
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
const resDate = typeof resHeaders.date === "string" ? parseHttpDate(resHeaders.date) : void 0;
|
||||
const staleAt = determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ?? this.#cacheByDefault;
|
||||
if (staleAt === void 0 || resAge && resAge > staleAt) {
|
||||
const resDate = Object.hasOwn(resHeaders, "date") ? getDate(resHeaders.date) : void 0;
|
||||
if (resDate === null) {
|
||||
deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey);
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
const baseTime = resDate ? resDate.getTime() : now;
|
||||
const apparentAge = resDate ? Math.max(0, now - resDate.getTime()) : 0;
|
||||
const currentAge = Math.max(apparentAge, resAge ?? 0);
|
||||
const hasValidator = typeof resHeaders.etag === "string" && isEtagUsable(resHeaders.etag) || typeof resHeaders["last-modified"] === "string";
|
||||
const staleAt = determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives, hasValidator) ?? this.#cacheByDefault;
|
||||
const revalidationOnly = staleAt === 0 && hasValidator;
|
||||
if (staleAt === void 0 || currentAge >= staleAt && !revalidationOnly) {
|
||||
if (cacheControlHeader || staleAt !== void 0) {
|
||||
deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey);
|
||||
}
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
const baseTime = now - currentAge;
|
||||
const absoluteStaleAt = staleAt + baseTime;
|
||||
if (now >= absoluteStaleAt) {
|
||||
if (now >= absoluteStaleAt && !revalidationOnly) {
|
||||
deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey);
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
let varyDirectives;
|
||||
@@ -36241,8 +37419,8 @@ var require_cache_handler = __commonJS({
|
||||
return downstreamOnHeaders();
|
||||
}
|
||||
}
|
||||
const cachedAt = resAge ? now - resAge : now;
|
||||
const deleteAt = determineDeleteAt(baseTime, cachedAt, cacheControlDirectives, absoluteStaleAt);
|
||||
const cachedAt = baseTime;
|
||||
const deleteAt = determineDeleteAt(baseTime, now, cacheControlDirectives, absoluteStaleAt);
|
||||
const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives);
|
||||
const value = {
|
||||
statusCode,
|
||||
@@ -36262,6 +37440,7 @@ var require_cache_handler = __commonJS({
|
||||
value.statusCode = cachedValue.statusCode;
|
||||
value.statusMessage = cachedValue.statusMessage;
|
||||
value.etag = cachedValue.etag;
|
||||
value.vary = varyDirectives ?? cachedValue.vary;
|
||||
value.headers = { ...cachedValue.headers, ...strippedHeaders };
|
||||
downstreamOnHeaders();
|
||||
this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value);
|
||||
@@ -36352,11 +37531,25 @@ var require_cache_handler = __commonJS({
|
||||
this.#handler.onResponseError?.(controller, err);
|
||||
}
|
||||
};
|
||||
function deleteCachedValue(store, cacheKey) {
|
||||
try {
|
||||
store.delete(cacheKey)?.catch?.(noop);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
function deleteCachedValueIfNotModified(statusCode, store, cacheKey) {
|
||||
if (statusCode === 304) {
|
||||
deleteCachedValue(store, cacheKey);
|
||||
}
|
||||
}
|
||||
function revalidationResponseDisallowsCachedReuse(cacheType, resHeaders, cacheControlDirectives) {
|
||||
return cacheControlDirectives["no-store"] === true || cacheType === "shared" && cacheControlDirectives.private === true || (resHeaders.vary ? isInvalidOrWildcardVaryHeader(resHeaders.vary) : false);
|
||||
}
|
||||
function canCacheResponse(cacheType, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {
|
||||
if (statusCode < 200 || NOT_UNDERSTOOD_STATUS_CODES.includes(statusCode)) {
|
||||
if (statusCode < 200 || arrayIncludes(NOT_UNDERSTOOD_STATUS_CODES, statusCode)) {
|
||||
return false;
|
||||
}
|
||||
if (!HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode) && !resHeaders["expires"] && !cacheControlDirectives.public && cacheControlDirectives["max-age"] === void 0 && // RFC 9111: a private response directive, if the cache is not shared
|
||||
if (!arrayIncludes(HEURISTICALLY_CACHEABLE_STATUS_CODES, statusCode) && !resHeaders["expires"] && !cacheControlDirectives.public && cacheControlDirectives["max-age"] === void 0 && // RFC 9111: a private response directive, if the cache is not shared
|
||||
!(cacheControlDirectives.private && cacheType === "private") && !(cacheControlDirectives["s-maxage"] !== void 0 && cacheType === "shared")) {
|
||||
return false;
|
||||
}
|
||||
@@ -36366,60 +37559,104 @@ var require_cache_handler = __commonJS({
|
||||
if (cacheType === "shared" && cacheControlDirectives.private === true) {
|
||||
return false;
|
||||
}
|
||||
if (resHeaders.vary?.includes("*")) {
|
||||
if (resHeaders.vary && hasVaryStar(resHeaders.vary)) {
|
||||
return false;
|
||||
}
|
||||
if (reqHeaders?.authorization) {
|
||||
if (reqHeaders != null && Object.hasOwn(reqHeaders, "authorization")) {
|
||||
if (!cacheControlDirectives.public && !cacheControlDirectives["s-maxage"] && !cacheControlDirectives["must-revalidate"]) {
|
||||
return false;
|
||||
}
|
||||
if (typeof reqHeaders.authorization !== "string") {
|
||||
return false;
|
||||
}
|
||||
if (Array.isArray(cacheControlDirectives["no-cache"]) && cacheControlDirectives["no-cache"].includes("authorization")) {
|
||||
if (Array.isArray(cacheControlDirectives["no-cache"]) && arrayIncludes(cacheControlDirectives["no-cache"], "authorization")) {
|
||||
return false;
|
||||
}
|
||||
if (Array.isArray(cacheControlDirectives["private"]) && cacheControlDirectives["private"].includes("authorization")) {
|
||||
if (Array.isArray(cacheControlDirectives["private"]) && arrayIncludes(cacheControlDirectives["private"], "authorization")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function getAge(ageHeader) {
|
||||
const age = parseInt(Array.isArray(ageHeader) ? ageHeader[0] : ageHeader);
|
||||
return isNaN(age) ? void 0 : age * 1e3;
|
||||
function getDate(dateHeader) {
|
||||
let dateValue = dateHeader;
|
||||
if (Array.isArray(dateValue)) {
|
||||
if (dateValue.length !== 1) {
|
||||
return null;
|
||||
}
|
||||
dateValue = dateValue[0];
|
||||
}
|
||||
if (typeof dateValue !== "string") {
|
||||
return null;
|
||||
}
|
||||
return parseHttpDate(dateValue);
|
||||
}
|
||||
function determineStaleAt(cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {
|
||||
function getAge(ageHeader) {
|
||||
let ageValue = ageHeader;
|
||||
if (Array.isArray(ageValue)) {
|
||||
if (ageValue.length !== 1) {
|
||||
return MAX_RESPONSE_AGE;
|
||||
}
|
||||
ageValue = ageValue[0];
|
||||
}
|
||||
if (typeof ageValue !== "string" || !/^[\t ]*[0-9]+[\t ]*$/.test(ageValue)) {
|
||||
return MAX_RESPONSE_AGE;
|
||||
}
|
||||
const age = BigInt(ageValue.replace(/^[\t ]+|[\t ]+$/g, ""));
|
||||
if (age >= BigInt(MAX_RESPONSE_AGE / 1e3)) {
|
||||
return MAX_RESPONSE_AGE;
|
||||
}
|
||||
return Number(age) * 1e3;
|
||||
}
|
||||
function determineStaleAt(cacheType, now, age, resHeaders, responseDate, cacheControlDirectives, hasValidator) {
|
||||
if (cacheType === "shared") {
|
||||
if (hasInvalidCacheControlDirective(cacheControlDirectives, "s-maxage")) {
|
||||
return 0;
|
||||
}
|
||||
const sMaxAge = cacheControlDirectives["s-maxage"];
|
||||
if (sMaxAge !== void 0) {
|
||||
return sMaxAge > 0 ? sMaxAge * 1e3 : void 0;
|
||||
if (sMaxAge > 0) {
|
||||
return sMaxAge * 1e3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (hasInvalidCacheControlDirective(cacheControlDirectives, "max-age")) {
|
||||
return 0;
|
||||
}
|
||||
const maxAge = cacheControlDirectives["max-age"];
|
||||
if (maxAge !== void 0) {
|
||||
return maxAge > 0 ? maxAge * 1e3 : void 0;
|
||||
}
|
||||
if (typeof resHeaders.expires === "string") {
|
||||
const expiresDate = parseHttpDate(resHeaders.expires);
|
||||
if (expiresDate) {
|
||||
if (now >= expiresDate.getTime()) {
|
||||
return void 0;
|
||||
}
|
||||
if (responseDate) {
|
||||
if (responseDate >= expiresDate) {
|
||||
return void 0;
|
||||
}
|
||||
if (age !== void 0 && age > expiresDate - responseDate) {
|
||||
return void 0;
|
||||
}
|
||||
}
|
||||
return expiresDate.getTime() - now;
|
||||
if (maxAge > 0) {
|
||||
return maxAge * 1e3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (Object.hasOwn(resHeaders, "expires")) {
|
||||
if (typeof resHeaders.expires !== "string") {
|
||||
return 0;
|
||||
}
|
||||
const expiresDate = parseHttpDate(resHeaders.expires);
|
||||
if (!expiresDate) {
|
||||
return 0;
|
||||
}
|
||||
if (now >= expiresDate.getTime()) {
|
||||
return 0;
|
||||
}
|
||||
if (responseDate) {
|
||||
if (responseDate >= expiresDate) {
|
||||
return 0;
|
||||
}
|
||||
const freshnessLifetime = expiresDate.getTime() - responseDate.getTime();
|
||||
if (age !== void 0 && age >= freshnessLifetime) {
|
||||
return 0;
|
||||
}
|
||||
return freshnessLifetime;
|
||||
}
|
||||
return expiresDate.getTime() - now;
|
||||
}
|
||||
if (typeof resHeaders["last-modified"] === "string") {
|
||||
const lastModified = new Date(resHeaders["last-modified"]);
|
||||
if (isValidDate(lastModified)) {
|
||||
const lastModified = parseHttpDate(resHeaders["last-modified"]);
|
||||
if (lastModified) {
|
||||
if (lastModified.getTime() >= now) {
|
||||
return void 0;
|
||||
}
|
||||
@@ -36430,6 +37667,9 @@ var require_cache_handler = __commonJS({
|
||||
if (cacheControlDirectives.immutable) {
|
||||
return 31536e6;
|
||||
}
|
||||
if (cacheControlDirectives["no-cache"] === true && hasValidator) {
|
||||
return 0;
|
||||
}
|
||||
return void 0;
|
||||
}
|
||||
function determineDeleteAt(baseTime, cachedAt, cacheControlDirectives, staleAt) {
|
||||
@@ -36447,6 +37687,9 @@ var require_cache_handler = __commonJS({
|
||||
}
|
||||
if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {
|
||||
const freshnessLifetime = staleAt - baseTime;
|
||||
if (freshnessLifetime <= 0) {
|
||||
return cachedAt + REVALIDATION_ONLY_RETENTION;
|
||||
}
|
||||
const datePrecisionPadding = Math.min(Math.max(cachedAt - baseTime, 0), 1e3);
|
||||
return staleAt + freshnessLifetime + datePrecisionPadding;
|
||||
}
|
||||
@@ -36466,11 +37709,7 @@ var require_cache_handler = __commonJS({
|
||||
"age"
|
||||
];
|
||||
if (resHeaders["connection"]) {
|
||||
if (Array.isArray(resHeaders["connection"])) {
|
||||
headersToRemove.push(...resHeaders["connection"].map((header) => header.trim()));
|
||||
} else {
|
||||
headersToRemove.push(...resHeaders["connection"].split(",").map((header) => header.trim()));
|
||||
}
|
||||
appendConnectionHeaderTokens(headersToRemove, resHeaders["connection"]);
|
||||
}
|
||||
if (Array.isArray(cacheControlDirectives["no-cache"])) {
|
||||
headersToRemove.push(...cacheControlDirectives["no-cache"]);
|
||||
@@ -36480,16 +37719,13 @@ var require_cache_handler = __commonJS({
|
||||
}
|
||||
let strippedHeaders;
|
||||
for (const headerName of headersToRemove) {
|
||||
if (resHeaders[headerName]) {
|
||||
if (Object.hasOwn(resHeaders, headerName)) {
|
||||
strippedHeaders ??= { ...resHeaders };
|
||||
delete strippedHeaders[headerName];
|
||||
}
|
||||
}
|
||||
return strippedHeaders ?? resHeaders;
|
||||
}
|
||||
function isValidDate(date) {
|
||||
return date instanceof Date && Number.isFinite(date.valueOf());
|
||||
}
|
||||
module2.exports = CacheHandler;
|
||||
}
|
||||
});
|
||||
@@ -36660,12 +37896,43 @@ var require_memory_cache_store = __commonJS({
|
||||
}
|
||||
};
|
||||
function findEntry(key, entries, now) {
|
||||
return entries.find((entry) => entry.deleteAt > now && entry.method === key.method && (entry.vary == null || Object.keys(entry.vary).every((headerName) => {
|
||||
if (entry.vary[headerName] === null) {
|
||||
return key.headers[headerName] === void 0;
|
||||
for (let i = 0; i < entries.length; i++) {
|
||||
const entry = entries[i];
|
||||
if (entry.deleteAt > now && entry.method === key.method && varyMatches(key, entry)) {
|
||||
return entry;
|
||||
}
|
||||
return entry.vary[headerName] === key.headers[headerName];
|
||||
})));
|
||||
}
|
||||
}
|
||||
function varyMatches(key, entry) {
|
||||
if (entry.vary == null) {
|
||||
return true;
|
||||
}
|
||||
for (const headerName in entry.vary) {
|
||||
if (Object.hasOwn(entry.vary, headerName) && !headerValueEquals(key.headers?.[headerName], entry.vary[headerName])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function headerValueEquals(lhs, rhs) {
|
||||
if (lhs == null && rhs == null) {
|
||||
return true;
|
||||
}
|
||||
if (lhs == null && rhs != null || lhs != null && rhs == null) {
|
||||
return false;
|
||||
}
|
||||
if (Array.isArray(lhs) && Array.isArray(rhs)) {
|
||||
if (lhs.length !== rhs.length) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < lhs.length; i++) {
|
||||
if (lhs[i] !== rhs[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return lhs === rhs;
|
||||
}
|
||||
module2.exports = MemoryCacheStore;
|
||||
}
|
||||
@@ -36679,7 +37946,7 @@ var require_cache_revalidation_handler = __commonJS({
|
||||
var CacheRevalidationHandler = class {
|
||||
#successful = false;
|
||||
/**
|
||||
* @type {((boolean, any) => void) | null}
|
||||
* @type {((success: boolean, context?: any, statusCode?: number, headers?: import('../../types/header.d.ts').IncomingHttpHeaders) => void) | null}
|
||||
*/
|
||||
#callback;
|
||||
/**
|
||||
@@ -36692,7 +37959,7 @@ var require_cache_revalidation_handler = __commonJS({
|
||||
*/
|
||||
#allowErrorStatusCodes;
|
||||
/**
|
||||
* @param {(boolean) => void} callback Function to call if the cached value is valid
|
||||
* @param {(success: boolean, context?: any, statusCode?: number, headers?: import('../../types/header.d.ts').IncomingHttpHeaders) => void} callback Function to call if the cached value is valid
|
||||
* @param {import('../../types/dispatcher.d.ts').default.DispatchHandlers} handler
|
||||
* @param {boolean} allowErrorStatusCodes
|
||||
*/
|
||||
@@ -36714,7 +37981,7 @@ var require_cache_revalidation_handler = __commonJS({
|
||||
onResponseStart(controller, statusCode, headers, statusMessage) {
|
||||
assert(this.#callback != null);
|
||||
this.#successful = statusCode === 304 || this.#allowErrorStatusCodes && statusCode >= 500 && statusCode <= 504;
|
||||
this.#callback(this.#successful, this.#context);
|
||||
this.#callback(this.#successful, this.#context, statusCode, headers);
|
||||
this.#callback = null;
|
||||
if (this.#successful) {
|
||||
return true;
|
||||
@@ -36744,6 +38011,12 @@ var require_cache_revalidation_handler = __commonJS({
|
||||
return;
|
||||
}
|
||||
if (this.#callback) {
|
||||
if (this.#allowErrorStatusCodes) {
|
||||
this.#successful = true;
|
||||
this.#callback(true, this.#context);
|
||||
this.#callback = null;
|
||||
return;
|
||||
}
|
||||
this.#callback(false);
|
||||
this.#callback = null;
|
||||
}
|
||||
@@ -36768,8 +38041,9 @@ var require_cache3 = __commonJS({
|
||||
var CacheHandler = require_cache_handler();
|
||||
var MemoryCacheStore = require_memory_cache_store();
|
||||
var CacheRevalidationHandler = require_cache_revalidation_handler();
|
||||
var { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader } = require_cache2();
|
||||
var { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader, isInvalidOrWildcardVaryHeader } = require_cache2();
|
||||
var { AbortError } = require_errors2();
|
||||
var { parseHttpDate } = require_date();
|
||||
function assertCacheOrigins(origins, name) {
|
||||
if (origins === void 0) return;
|
||||
if (!Array.isArray(origins)) {
|
||||
@@ -36784,6 +38058,37 @@ var require_cache3 = __commonJS({
|
||||
}
|
||||
var nop = () => {
|
||||
};
|
||||
function trimOWS(value) {
|
||||
return value.replace(/^[\t ]+|[\t ]+$/g, "");
|
||||
}
|
||||
function arrayIncludes(array, value) {
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
if (array[i] === value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function hasPragmaNoCache(headers) {
|
||||
const pragma = headers?.pragma;
|
||||
if (!pragma) {
|
||||
return false;
|
||||
}
|
||||
const values = Array.isArray(pragma) ? pragma : [pragma];
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
const value = values[i];
|
||||
if (typeof value !== "string") {
|
||||
continue;
|
||||
}
|
||||
const directives = value.split(",");
|
||||
for (let j = 0; j < directives.length; j++) {
|
||||
if (trimOWS(directives[j]).toLowerCase() === "no-cache") {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function needsRevalidation(result, cacheControlDirectives, { headers = {} }) {
|
||||
if (cacheControlDirectives?.["no-cache"]) {
|
||||
return true;
|
||||
@@ -36796,10 +38101,58 @@ var require_cache3 = __commonJS({
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function isStale(result, cacheControlDirectives) {
|
||||
function staleResponseRequiresRevalidation(result, cacheType) {
|
||||
return result.cacheControlDirectives?.["must-revalidate"] === true || cacheType === "shared" && (result.cacheControlDirectives?.["proxy-revalidate"] === true || // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10
|
||||
// s-maxage implies proxy-revalidate for shared caches.
|
||||
result.cacheControlDirectives?.["s-maxage"] !== void 0);
|
||||
}
|
||||
function revalidationResponseDisallowsCachedReuse(cacheType, headers) {
|
||||
if (headers.vary && isInvalidOrWildcardVaryHeader(headers.vary)) {
|
||||
return true;
|
||||
}
|
||||
const cacheControl = headers["cache-control"];
|
||||
if (!cacheControl) {
|
||||
return false;
|
||||
}
|
||||
const cacheControlDirectives = parseCacheControlHeader(cacheControl);
|
||||
return cacheControlDirectives["no-store"] === true || cacheType === "shared" && cacheControlDirectives.private === true;
|
||||
}
|
||||
function revalidationResponseUpdatesCacheControl(headers) {
|
||||
return headers["cache-control"] !== void 0;
|
||||
}
|
||||
function deleteCachedValue(store, cacheKey) {
|
||||
try {
|
||||
store.delete(cacheKey)?.catch?.(nop);
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
function getUsableLastModified(headers) {
|
||||
const lastModified = headers?.["last-modified"];
|
||||
if (typeof lastModified === "string" && parseHttpDate(lastModified)) {
|
||||
return lastModified;
|
||||
}
|
||||
}
|
||||
function makeRevalidationHeaders(opts, result) {
|
||||
const headers = {
|
||||
...opts.headers,
|
||||
"if-modified-since": getUsableLastModified(result.headers) ?? new Date(result.cachedAt).toUTCString()
|
||||
};
|
||||
if (result.etag) {
|
||||
headers["if-none-match"] = result.etag;
|
||||
}
|
||||
if (result.vary) {
|
||||
for (const key in result.vary) {
|
||||
if (result.vary[key] != null) {
|
||||
headers[key] = result.vary[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
function isStale(result, cacheControlDirectives, cacheType) {
|
||||
const now = Date.now();
|
||||
if (now > result.staleAt) {
|
||||
if (cacheControlDirectives?.["max-stale"]) {
|
||||
if (!staleResponseRequiresRevalidation(result, cacheType) && cacheControlDirectives?.["max-stale"]) {
|
||||
const gracePeriod = result.staleAt + cacheControlDirectives["max-stale"] * 1e3;
|
||||
return now > gracePeriod;
|
||||
}
|
||||
@@ -36812,9 +38165,9 @@ var require_cache3 = __commonJS({
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function withinStaleWhileRevalidateWindow(result) {
|
||||
function withinStaleWhileRevalidateWindow(result, cacheType) {
|
||||
const staleWhileRevalidate = result.cacheControlDirectives?.["stale-while-revalidate"];
|
||||
if (!staleWhileRevalidate) {
|
||||
if (!staleWhileRevalidate || staleResponseRequiresRevalidation(result, cacheType)) {
|
||||
return false;
|
||||
}
|
||||
const now = Date.now();
|
||||
@@ -36924,32 +38277,17 @@ var require_cache3 = __commonJS({
|
||||
return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler));
|
||||
}
|
||||
const age = Math.round((now - result.cachedAt) / 1e3);
|
||||
if (reqCacheControl?.["max-age"] && age >= reqCacheControl["max-age"]) {
|
||||
return dispatch(opts, handler);
|
||||
}
|
||||
const stale = isStale(result, reqCacheControl);
|
||||
const revalidate = needsRevalidation(result, reqCacheControl, opts);
|
||||
const requestMaxAgeExpired = reqCacheControl?.["max-age"] !== void 0 && age >= reqCacheControl["max-age"];
|
||||
const stale = requestMaxAgeExpired || isStale(result, reqCacheControl, globalOpts.type);
|
||||
const revalidate = requestMaxAgeExpired || needsRevalidation(result, reqCacheControl, opts);
|
||||
if (stale || revalidate) {
|
||||
if (util.isStream(opts.body) && util.bodyLength(opts.body) !== 0) {
|
||||
return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler));
|
||||
}
|
||||
if (!revalidate && withinStaleWhileRevalidateWindow(result)) {
|
||||
if (!revalidate && withinStaleWhileRevalidateWindow(result, globalOpts.type)) {
|
||||
sendCachedValue(handler, opts, result, age, null, true);
|
||||
queueMicrotask(() => {
|
||||
const headers2 = {
|
||||
...opts.headers,
|
||||
"if-modified-since": new Date(result.cachedAt).toUTCString()
|
||||
};
|
||||
if (result.etag) {
|
||||
headers2["if-none-match"] = result.etag;
|
||||
}
|
||||
if (result.vary) {
|
||||
for (const key in result.vary) {
|
||||
if (result.vary[key] != null) {
|
||||
headers2[key] = result.vary[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
const headers2 = makeRevalidationHeaders(opts, result);
|
||||
dispatch(
|
||||
{
|
||||
...opts,
|
||||
@@ -36975,32 +38313,33 @@ var require_cache3 = __commonJS({
|
||||
return true;
|
||||
}
|
||||
let withinStaleIfErrorThreshold = false;
|
||||
const staleIfErrorExpiry = result.cacheControlDirectives["stale-if-error"] ?? reqCacheControl?.["stale-if-error"];
|
||||
if (staleIfErrorExpiry) {
|
||||
withinStaleIfErrorThreshold = now < result.staleAt + staleIfErrorExpiry * 1e3;
|
||||
}
|
||||
const headers = {
|
||||
...opts.headers,
|
||||
"if-modified-since": new Date(result.cachedAt).toUTCString()
|
||||
};
|
||||
if (result.etag) {
|
||||
headers["if-none-match"] = result.etag;
|
||||
}
|
||||
if (result.vary) {
|
||||
for (const key in result.vary) {
|
||||
if (result.vary[key] != null) {
|
||||
headers[key] = result.vary[key];
|
||||
}
|
||||
if (!staleResponseRequiresRevalidation(result, globalOpts.type)) {
|
||||
const staleIfErrorExpiry = result.cacheControlDirectives["stale-if-error"] ?? reqCacheControl?.["stale-if-error"];
|
||||
if (staleIfErrorExpiry) {
|
||||
withinStaleIfErrorThreshold = now < result.staleAt + staleIfErrorExpiry * 1e3;
|
||||
}
|
||||
}
|
||||
const headers = makeRevalidationHeaders(opts, result);
|
||||
return dispatch(
|
||||
{
|
||||
...opts,
|
||||
headers
|
||||
},
|
||||
new CacheRevalidationHandler(
|
||||
(success, context) => {
|
||||
(success, context, statusCode, headers2) => {
|
||||
if (success) {
|
||||
if (statusCode === 304) {
|
||||
if (revalidationResponseDisallowsCachedReuse(globalOpts.type, headers2)) {
|
||||
if (util.isStream(result.body)) {
|
||||
result.body.on("error", nop).destroy();
|
||||
}
|
||||
deleteCachedValue(globalOpts.store, cacheKey);
|
||||
return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler));
|
||||
}
|
||||
if (revalidationResponseUpdatesCacheControl(headers2)) {
|
||||
deleteCachedValue(globalOpts.store, cacheKey);
|
||||
}
|
||||
}
|
||||
sendCachedValue(handler, opts, result, age, context, stale);
|
||||
} else if (util.isStream(result.body)) {
|
||||
result.body.on("error", nop).destroy();
|
||||
@@ -37042,13 +38381,22 @@ var require_cache3 = __commonJS({
|
||||
cacheByDefault,
|
||||
type
|
||||
};
|
||||
const safeMethodsToNotCache = util.safeHTTPMethods.filter((method) => methods.includes(method) === false);
|
||||
const safeMethodsToNotCache = [];
|
||||
for (let i = 0; i < util.safeHTTPMethods.length; i++) {
|
||||
const method = util.safeHTTPMethods[i];
|
||||
if (!arrayIncludes(methods, method)) {
|
||||
safeMethodsToNotCache.push(method);
|
||||
}
|
||||
}
|
||||
return (dispatch) => {
|
||||
return (opts2, handler) => {
|
||||
if (!opts2.origin || safeMethodsToNotCache.includes(opts2.method)) {
|
||||
if (arrayIncludes(safeMethodsToNotCache, opts2.method)) {
|
||||
return dispatch(opts2, handler);
|
||||
}
|
||||
if (origins !== void 0) {
|
||||
if (!opts2.origin) {
|
||||
return dispatch(opts2, handler);
|
||||
}
|
||||
const requestOrigin = opts2.origin.toString().toLowerCase();
|
||||
let isAllowed = false;
|
||||
for (let i = 0; i < origins.length; i++) {
|
||||
@@ -37071,7 +38419,7 @@ var require_cache3 = __commonJS({
|
||||
...opts2,
|
||||
headers: normalizeHeaders(opts2)
|
||||
};
|
||||
const reqCacheControl = opts2.headers?.["cache-control"] ? parseCacheControlHeader(opts2.headers["cache-control"]) : void 0;
|
||||
const reqCacheControl = opts2.headers?.["cache-control"] ? parseCacheControlHeader(opts2.headers["cache-control"]) : hasPragmaNoCache(opts2.headers) ? { "no-cache": true } : void 0;
|
||||
if (reqCacheControl?.["no-store"]) {
|
||||
return dispatch(opts2, handler);
|
||||
}
|
||||
@@ -37131,6 +38479,8 @@ var require_decompress = __commonJS({
|
||||
var DecompressHandler = class extends DecoratorHandler {
|
||||
/** @type {Transform[]} */
|
||||
#decompressors = [];
|
||||
/** @type {Record<string, string | string[]> | undefined} */
|
||||
#trailers;
|
||||
/** @type {Readonly<number[]>} */
|
||||
#skipStatusCodes;
|
||||
/** @type {boolean} */
|
||||
@@ -37206,7 +38556,7 @@ var require_decompress = __commonJS({
|
||||
const decompressor = this.#decompressors[0];
|
||||
this.#setupDecompressorEvents(decompressor, controller);
|
||||
decompressor.on("end", () => {
|
||||
super.onResponseEnd(controller, {});
|
||||
super.onResponseEnd(controller, this.#trailers);
|
||||
});
|
||||
}
|
||||
/**
|
||||
@@ -37222,7 +38572,7 @@ var require_decompress = __commonJS({
|
||||
super.onResponseError(controller, err);
|
||||
return;
|
||||
}
|
||||
super.onResponseEnd(controller, {});
|
||||
super.onResponseEnd(controller, this.#trailers);
|
||||
});
|
||||
}
|
||||
/**
|
||||
@@ -37300,6 +38650,7 @@ var require_decompress = __commonJS({
|
||||
*/
|
||||
onResponseEnd(controller, trailers) {
|
||||
if (this.#decompressors.length > 0) {
|
||||
this.#trailers = trailers;
|
||||
this.#decompressors[0].end();
|
||||
this.#cleanupDecompressors();
|
||||
return;
|
||||
@@ -37331,6 +38682,9 @@ var require_decompress = __commonJS({
|
||||
}
|
||||
return (dispatch) => {
|
||||
return (opts, handler) => {
|
||||
if (opts.method === "HEAD") {
|
||||
return dispatch(opts, handler);
|
||||
}
|
||||
const decompressHandler = new DecompressHandler(handler, options);
|
||||
return dispatch(opts, decompressHandler);
|
||||
};
|
||||
@@ -37740,7 +39094,7 @@ var require_deduplicate = __commonJS({
|
||||
const pendingRequests = /* @__PURE__ */ new Map();
|
||||
return (dispatch) => {
|
||||
return (opts2, handler) => {
|
||||
if (!opts2.origin || methods.includes(opts2.method) === false) {
|
||||
if (opts2.upgrade || methods.includes(opts2.method) === false) {
|
||||
return dispatch(opts2, handler);
|
||||
}
|
||||
opts2 = {
|
||||
@@ -38138,7 +39492,12 @@ var require_sqlite_cache_store = __commonJS({
|
||||
if (lhs.length !== rhs.length) {
|
||||
return false;
|
||||
}
|
||||
return lhs.every((x, i) => x === rhs[i]);
|
||||
for (let i = 0; i < lhs.length; i++) {
|
||||
if (lhs[i] !== rhs[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return lhs === rhs;
|
||||
}
|
||||
@@ -38644,9 +40003,7 @@ var require_response2 = __commonJS({
|
||||
// https://fetch.spec.whatwg.org/#dom-response-json
|
||||
static json(data, init = void 0) {
|
||||
webidl.argumentLengthCheck(arguments, 1, "Response.json");
|
||||
if (init !== null) {
|
||||
init = webidl.converters.ResponseInit(init);
|
||||
}
|
||||
init = webidl.converters.ResponseInit(init);
|
||||
const bytes = textEncoder.encode(
|
||||
serializeJavascriptValueToJSONString(data)
|
||||
);
|
||||
@@ -39101,6 +40458,12 @@ var require_request4 = __commonJS({
|
||||
/** @type {Headers} */
|
||||
#headers;
|
||||
#state;
|
||||
/**
|
||||
* Removes the `abort` listener that makes this request's signal follow the
|
||||
* passed signal. `null` when no such listener was registered.
|
||||
* @type {(() => void) | null}
|
||||
*/
|
||||
#abortCleanup = null;
|
||||
// https://fetch.spec.whatwg.org/#dom-request
|
||||
constructor(input, init = void 0) {
|
||||
webidl.util.markAsUncloneable(this);
|
||||
@@ -39298,8 +40661,13 @@ var require_request4 = __commonJS({
|
||||
if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {
|
||||
setMaxListeners(1500, signal);
|
||||
}
|
||||
util.addAbortListener(signal, abort);
|
||||
const removeAbortListener = util.addAbortListener(signal, abort);
|
||||
requestFinalizer.register(ac, { signal, abort }, abort);
|
||||
this.#abortCleanup = () => {
|
||||
requestFinalizer.unregister(abort);
|
||||
removeAbortListener();
|
||||
this.#abortCleanup = null;
|
||||
};
|
||||
}
|
||||
}
|
||||
this.#headers = new Headers2(kConstruct);
|
||||
@@ -39578,14 +40946,23 @@ var require_request4 = __commonJS({
|
||||
static setRequestState(request, newState) {
|
||||
request.#state = newState;
|
||||
}
|
||||
/**
|
||||
* Removes the `abort` listener that makes this request's signal follow the
|
||||
* signal passed to its constructor, if any. Idempotent.
|
||||
* @param {Request} request
|
||||
*/
|
||||
static removeRequestAbortListener(request) {
|
||||
request.#abortCleanup?.();
|
||||
}
|
||||
};
|
||||
var { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request;
|
||||
var { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState, removeRequestAbortListener } = Request;
|
||||
Reflect.deleteProperty(Request, "setRequestSignal");
|
||||
Reflect.deleteProperty(Request, "getRequestDispatcher");
|
||||
Reflect.deleteProperty(Request, "setRequestDispatcher");
|
||||
Reflect.deleteProperty(Request, "setRequestHeaders");
|
||||
Reflect.deleteProperty(Request, "getRequestState");
|
||||
Reflect.deleteProperty(Request, "setRequestState");
|
||||
Reflect.deleteProperty(Request, "removeRequestAbortListener");
|
||||
mixinBody(Request, getRequestState);
|
||||
function makeRequest(init) {
|
||||
return {
|
||||
@@ -39608,6 +40985,7 @@ var require_request4 = __commonJS({
|
||||
referrerPolicy: init.referrerPolicy ?? "",
|
||||
mode: init.mode ?? "no-cors",
|
||||
useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,
|
||||
// TODO: is this credentials mode? https://fetch.spec.whatwg.org/#concept-request-credentials-mode
|
||||
credentials: init.credentials ?? "same-origin",
|
||||
useCredentials: init.useCredentials ?? false,
|
||||
cache: init.cache ?? "default",
|
||||
@@ -39779,7 +41157,8 @@ var require_request4 = __commonJS({
|
||||
fromInnerRequest,
|
||||
cloneRequest,
|
||||
getRequestDispatcher,
|
||||
getRequestState
|
||||
getRequestState,
|
||||
removeRequestAbortListener
|
||||
};
|
||||
}
|
||||
});
|
||||
@@ -39936,7 +41315,7 @@ var require_fetch2 = __commonJS({
|
||||
getResponseState
|
||||
} = require_response2();
|
||||
var { HeadersList } = require_headers2();
|
||||
var { Request, cloneRequest, getRequestDispatcher, getRequestState } = require_request4();
|
||||
var { Request, cloneRequest, getRequestDispatcher, getRequestState, removeRequestAbortListener } = require_request4();
|
||||
var zlib = require("node:zlib");
|
||||
var {
|
||||
makePolicyContainer,
|
||||
@@ -40073,7 +41452,7 @@ var require_fetch2 = __commonJS({
|
||||
let responseObject = null;
|
||||
let locallyAborted = false;
|
||||
let controller = null;
|
||||
addAbortListener(
|
||||
const removeAbortListener = addAbortListener(
|
||||
requestObject.signal,
|
||||
() => {
|
||||
locallyAborted = true;
|
||||
@@ -40083,16 +41462,22 @@ var require_fetch2 = __commonJS({
|
||||
abortFetch(p, request, realResponse, requestObject.signal.reason, controller.controller);
|
||||
}
|
||||
);
|
||||
const cleanupAbortListeners = () => {
|
||||
removeAbortListener();
|
||||
removeRequestAbortListener(requestObject);
|
||||
};
|
||||
const processResponse = (response) => {
|
||||
if (locallyAborted) {
|
||||
return;
|
||||
}
|
||||
if (response.aborted) {
|
||||
abortFetch(p, request, responseObject, controller.serializedAbortReason, controller.controller);
|
||||
cleanupAbortListeners();
|
||||
return;
|
||||
}
|
||||
if (response.type === "error") {
|
||||
p.reject(new TypeError("fetch failed", { cause: response.error }));
|
||||
cleanupAbortListeners();
|
||||
return;
|
||||
}
|
||||
responseObject = new WeakRef(fromInnerResponse(response, "immutable"));
|
||||
@@ -40101,7 +41486,10 @@ var require_fetch2 = __commonJS({
|
||||
};
|
||||
controller = fetching({
|
||||
request,
|
||||
processResponseEndOfBody: handleFetchDone,
|
||||
processResponseEndOfBody: (response) => {
|
||||
handleFetchDone(response);
|
||||
cleanupAbortListeners();
|
||||
},
|
||||
processResponse,
|
||||
dispatcher: getRequestDispatcher(requestObject),
|
||||
// undici
|
||||
@@ -40600,7 +41988,12 @@ var require_fetch2 = __commonJS({
|
||||
httpFetchParams = fetchParams;
|
||||
httpRequest = request;
|
||||
} else {
|
||||
httpRequest = cloneRequest(request);
|
||||
if (request.body?.source != null) {
|
||||
httpRequest = cloneRequest(request);
|
||||
} else {
|
||||
httpRequest = cloneRequest({ ...request, body: null });
|
||||
httpRequest.body = request.body;
|
||||
}
|
||||
httpFetchParams = { ...fetchParams };
|
||||
httpFetchParams.request = httpRequest;
|
||||
}
|
||||
@@ -40645,7 +42038,7 @@ var require_fetch2 = __commonJS({
|
||||
}
|
||||
if (!httpRequest.headersList.contains("accept-encoding", true)) {
|
||||
if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {
|
||||
httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true);
|
||||
httpRequest.headersList.append("accept-encoding", "br, gzip, deflate, zstd", true);
|
||||
} else {
|
||||
httpRequest.headersList.append("accept-encoding", "gzip, deflate", true);
|
||||
}
|
||||
@@ -41823,14 +43216,48 @@ var require_util12 = __commonJS({
|
||||
for (let i = 0; i < path.length; ++i) {
|
||||
const code = path.charCodeAt(i);
|
||||
if (code < 32 || // exclude CTLs (0-31)
|
||||
code === 127 || // DEL
|
||||
code > 126 || // exclude non-ascii and DEL
|
||||
code === 59) {
|
||||
throw new Error("Invalid cookie path");
|
||||
}
|
||||
}
|
||||
}
|
||||
function isLetterOrDigit(code) {
|
||||
return code >= 48 && code <= 57 || // 0-9
|
||||
code >= 65 && code <= 90 || // A-Z
|
||||
code >= 97 && code <= 122;
|
||||
}
|
||||
function validateCookieDomain(domain) {
|
||||
if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) {
|
||||
if (domain === " ") {
|
||||
return;
|
||||
}
|
||||
if (domain.length > 255) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
let labelLength = 0;
|
||||
for (let i = 0; i < domain.length; ++i) {
|
||||
const code = domain.charCodeAt(i);
|
||||
if (code === 46) {
|
||||
if (labelLength === 0) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
if (domain.charCodeAt(i - 1) === 45) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
labelLength = 0;
|
||||
continue;
|
||||
}
|
||||
if (labelLength === 0 && !isLetterOrDigit(code)) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
if (!isLetterOrDigit(code) && code !== 45) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
if (++labelLength > 63) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
}
|
||||
if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 45) {
|
||||
throw new Error("Invalid cookie domain");
|
||||
}
|
||||
}
|
||||
@@ -41913,7 +43340,11 @@ var require_util12 = __commonJS({
|
||||
throw new Error("Invalid unparsed");
|
||||
}
|
||||
const [key, ...value] = part.split("=");
|
||||
out.push(`${key.trim()}=${value.join("=")}`);
|
||||
const trimmedKey = key.trim();
|
||||
const joinedValue = value.join("=");
|
||||
validateCookieName(trimmedKey);
|
||||
validateCookieValue(joinedValue);
|
||||
out.push(`${trimmedKey}=${joinedValue}`);
|
||||
}
|
||||
return out.join("; ");
|
||||
}
|
||||
@@ -41936,7 +43367,6 @@ var require_parse2 = __commonJS({
|
||||
var { maxNameValuePairSize, maxAttributeValueSize } = require_constants9();
|
||||
var { isCTLExcludingHtab } = require_util12();
|
||||
var assert = require("node:assert");
|
||||
var { unescape: qsUnescape } = require("node:querystring");
|
||||
function parseSetCookie(header) {
|
||||
if (isCTLExcludingHtab(header)) {
|
||||
return null;
|
||||
@@ -41970,7 +43400,7 @@ var require_parse2 = __commonJS({
|
||||
}
|
||||
return {
|
||||
name,
|
||||
value: qsUnescape(value),
|
||||
value,
|
||||
...parseUnparsedAttributes(unparsedAttributes)
|
||||
};
|
||||
}
|
||||
@@ -42013,7 +43443,9 @@ var require_parse2 = __commonJS({
|
||||
const attributeNameLowercase = attributeName.toLowerCase();
|
||||
if (attributeNameLowercase === "expires") {
|
||||
const expiryTime = new Date(attributeValue);
|
||||
cookieAttributeList.expires = expiryTime;
|
||||
if (!Number.isNaN(expiryTime.getTime())) {
|
||||
cookieAttributeList.expires = expiryTime;
|
||||
}
|
||||
} else if (attributeNameLowercase === "max-age") {
|
||||
const charCode = attributeValue.charCodeAt(0);
|
||||
if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") {
|
||||
@@ -42044,18 +43476,14 @@ var require_parse2 = __commonJS({
|
||||
} else if (attributeNameLowercase === "httponly") {
|
||||
cookieAttributeList.httpOnly = true;
|
||||
} else if (attributeNameLowercase === "samesite") {
|
||||
let enforcement = "Default";
|
||||
const attributeValueLowercase = attributeValue.toLowerCase();
|
||||
if (attributeValueLowercase.includes("none")) {
|
||||
enforcement = "None";
|
||||
if (attributeValueLowercase === "none") {
|
||||
cookieAttributeList.sameSite = "None";
|
||||
} else if (attributeValueLowercase === "strict") {
|
||||
cookieAttributeList.sameSite = "Strict";
|
||||
} else if (attributeValueLowercase === "lax") {
|
||||
cookieAttributeList.sameSite = "Lax";
|
||||
}
|
||||
if (attributeValueLowercase.includes("strict")) {
|
||||
enforcement = "Strict";
|
||||
}
|
||||
if (attributeValueLowercase.includes("lax")) {
|
||||
enforcement = "Lax";
|
||||
}
|
||||
cookieAttributeList.sameSite = enforcement;
|
||||
} else {
|
||||
cookieAttributeList.unparsed ??= [];
|
||||
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
|
||||
@@ -43075,6 +44503,8 @@ var require_receiver2 = __commonJS({
|
||||
/** @type {import('./websocket').Handler} */
|
||||
#handler;
|
||||
/** @type {number} */
|
||||
#maxFragments;
|
||||
/** @type {number} */
|
||||
#maxPayloadSize;
|
||||
/**
|
||||
* @param {import('./websocket').Handler} handler
|
||||
@@ -43085,6 +44515,7 @@ var require_receiver2 = __commonJS({
|
||||
super();
|
||||
this.#handler = handler;
|
||||
this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions;
|
||||
this.#maxFragments = options.maxFragments ?? 0;
|
||||
this.#maxPayloadSize = options.maxPayloadSize ?? 0;
|
||||
if (this.#extensions.has("permessage-deflate")) {
|
||||
this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options));
|
||||
@@ -43101,7 +44532,7 @@ var require_receiver2 = __commonJS({
|
||||
this.run(callback);
|
||||
}
|
||||
#validatePayloadLength() {
|
||||
if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength > this.#maxPayloadSize) {
|
||||
if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize) {
|
||||
failWebsocketConnection(this.#handler, 1009, "Payload size exceeds maximum allowed size");
|
||||
return false;
|
||||
}
|
||||
@@ -43218,7 +44649,9 @@ var require_receiver2 = __commonJS({
|
||||
this.#state = parserStates.INFO;
|
||||
} else {
|
||||
if (!this.#info.compressed) {
|
||||
this.writeFragments(body);
|
||||
if (!this.writeFragments(body)) {
|
||||
return;
|
||||
}
|
||||
if (!this.#info.fragmented && this.#info.fin) {
|
||||
websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments());
|
||||
}
|
||||
@@ -43233,7 +44666,9 @@ var require_receiver2 = __commonJS({
|
||||
failWebsocketConnection(this.#handler, code, error2.message);
|
||||
return;
|
||||
}
|
||||
this.writeFragments(data);
|
||||
if (!this.writeFragments(data)) {
|
||||
return;
|
||||
}
|
||||
if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
|
||||
failWebsocketConnection(this.#handler, 1009, new MessageSizeExceededError().message);
|
||||
return;
|
||||
@@ -43298,8 +44733,13 @@ var require_receiver2 = __commonJS({
|
||||
}
|
||||
}
|
||||
writeFragments(fragment) {
|
||||
if (this.#maxFragments > 0 && this.#fragments.length === this.#maxFragments) {
|
||||
failWebsocketConnection(this.#handler, 1008, "Too many message fragments");
|
||||
return false;
|
||||
}
|
||||
this.#fragmentsBytes += fragment.length;
|
||||
this.#fragments.push(fragment);
|
||||
return true;
|
||||
}
|
||||
consumeFragments() {
|
||||
const fragments = this.#fragments;
|
||||
@@ -43504,6 +44944,8 @@ var require_websocket2 = __commonJS({
|
||||
var { SendQueue } = require_sender2();
|
||||
var { WebsocketFrameSend } = require_frame2();
|
||||
var { channels } = require_diagnostics2();
|
||||
var kRef = /* @__PURE__ */ Symbol.for("nodejs.ref");
|
||||
var kUnref = /* @__PURE__ */ Symbol.for("nodejs.unref");
|
||||
function getSocketAddress(socket) {
|
||||
if (typeof socket?.address === "function") {
|
||||
return socket.address();
|
||||
@@ -43523,6 +44965,7 @@ var require_websocket2 = __commonJS({
|
||||
#bufferedAmount = 0;
|
||||
#protocol = "";
|
||||
#extensions = "";
|
||||
#refed = true;
|
||||
/** @type {SendQueue} */
|
||||
#sendQueue;
|
||||
/** @type {Handler} */
|
||||
@@ -43605,6 +45048,16 @@ var require_websocket2 = __commonJS({
|
||||
this.#handler.readyState = _WebSocket.CONNECTING;
|
||||
this.#binaryType = "blob";
|
||||
}
|
||||
[kRef]() {
|
||||
webidl.brandCheck(this, _WebSocket);
|
||||
this.#refed = true;
|
||||
this.#handler.socket?.ref?.();
|
||||
}
|
||||
[kUnref]() {
|
||||
webidl.brandCheck(this, _WebSocket);
|
||||
this.#refed = false;
|
||||
this.#handler.socket?.unref?.();
|
||||
}
|
||||
/**
|
||||
* @see https://websockets.spec.whatwg.org/#dom-websocket-close
|
||||
* @param {number|undefined} code
|
||||
@@ -43766,8 +45219,13 @@ var require_websocket2 = __commonJS({
|
||||
*/
|
||||
#onConnectionEstablished(response, parsedExtensions) {
|
||||
this.#handler.socket = response.socket;
|
||||
if (!this.#refed) {
|
||||
this.#handler.socket.unref?.();
|
||||
}
|
||||
const maxFragments = this.#handler.controller.dispatcher?.webSocketOptions?.maxFragments;
|
||||
const maxPayloadSize = this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize;
|
||||
const parser = new ByteParser(this.#handler, parsedExtensions, {
|
||||
maxFragments,
|
||||
maxPayloadSize
|
||||
});
|
||||
parser.on("drain", () => this.#handler.onParserDrain());
|
||||
@@ -44213,7 +45671,12 @@ var require_websocketstream = __commonJS({
|
||||
/** @type {import('../websocket').Handler['onConnectionEstablished']} */
|
||||
#onConnectionEstablished(response, parsedExtensions) {
|
||||
this.#handler.socket = response.socket;
|
||||
const parser = new ByteParser(this.#handler, parsedExtensions);
|
||||
const maxFragments = this.#handler.controller.dispatcher?.webSocketOptions?.maxFragments;
|
||||
const maxPayloadSize = this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize;
|
||||
const parser = new ByteParser(this.#handler, parsedExtensions, {
|
||||
maxFragments,
|
||||
maxPayloadSize
|
||||
});
|
||||
parser.on("drain", () => this.#handler.onParserDrain());
|
||||
parser.on("error", (err) => this.#handler.onParserError(err));
|
||||
this.#parser = parser;
|
||||
@@ -44353,6 +45816,7 @@ var require_websocketstream = __commonJS({
|
||||
var require_util14 = __commonJS({
|
||||
"node_modules/undici/lib/web/eventsource/util.js"(exports2, module2) {
|
||||
"use strict";
|
||||
var { makeRequest } = require_request4();
|
||||
function isValidLastEventId(value) {
|
||||
return value.indexOf("\0") === -1;
|
||||
}
|
||||
@@ -44363,9 +45827,27 @@ var require_util14 = __commonJS({
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function createPotentialCORSRequest(url, destination, corsAttributeState, sameOriginFallback) {
|
||||
let mode = corsAttributeState === "no cors" ? "no-cors" : "cors";
|
||||
if (sameOriginFallback && mode === "no-cors") {
|
||||
mode = "same-origin";
|
||||
}
|
||||
let credentialsMode = "include";
|
||||
if (corsAttributeState === "anonymous") {
|
||||
credentialsMode = "same-origin";
|
||||
}
|
||||
return makeRequest({
|
||||
urlList: [url],
|
||||
destination,
|
||||
mode,
|
||||
credentials: credentialsMode,
|
||||
useURLCredentials: true
|
||||
});
|
||||
}
|
||||
module2.exports = {
|
||||
isValidLastEventId,
|
||||
isASCIINumber
|
||||
isASCIINumber,
|
||||
createPotentialCORSRequest
|
||||
};
|
||||
}
|
||||
});
|
||||
@@ -44717,7 +46199,6 @@ var require_eventsource2 = __commonJS({
|
||||
"use strict";
|
||||
var { pipeline } = require("node:stream");
|
||||
var { fetching } = require_fetch2();
|
||||
var { makeRequest } = require_request4();
|
||||
var { webidl } = require_webidl2();
|
||||
var { EventSourceStream } = require_eventsource_stream2();
|
||||
var { parseMIMEType } = require_data_url2();
|
||||
@@ -44725,6 +46206,7 @@ var require_eventsource2 = __commonJS({
|
||||
var { isNetworkError } = require_response2();
|
||||
var { kEnumerableProperty } = require_util9();
|
||||
var { environmentSettingsObject } = require_util10();
|
||||
var { createPotentialCORSRequest } = require_util14();
|
||||
var experimentalWarned = false;
|
||||
var defaultReconnectionTime = 3e3;
|
||||
var CONNECTING = 0;
|
||||
@@ -44789,20 +46271,12 @@ var require_eventsource2 = __commonJS({
|
||||
corsAttributeState = USE_CREDENTIALS;
|
||||
this.#withCredentials = true;
|
||||
}
|
||||
const initRequest = {
|
||||
redirect: "follow",
|
||||
keepalive: true,
|
||||
// @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes
|
||||
mode: "cors",
|
||||
credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit",
|
||||
referrer: "no-referrer"
|
||||
};
|
||||
initRequest.client = environmentSettingsObject.settingsObject;
|
||||
initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]];
|
||||
initRequest.cache = "no-store";
|
||||
initRequest.initiator = "other";
|
||||
initRequest.urlList = [new URL(this.#url)];
|
||||
this.#request = makeRequest(initRequest);
|
||||
const request = createPotentialCORSRequest(urlRecord, "", corsAttributeState);
|
||||
request.client = environmentSettingsObject.settingsObject;
|
||||
request.headersList.set("Accept", "text/event-stream");
|
||||
request.cache = "no-store";
|
||||
request.initiator = "other";
|
||||
this.#request = request;
|
||||
this.#connect();
|
||||
}
|
||||
/**
|
||||
@@ -45701,10 +47175,139 @@ function info(message) {
|
||||
}
|
||||
|
||||
// src/update-known-checksums.ts
|
||||
var semver2 = __toESM(require_semver(), 1);
|
||||
|
||||
// src/download/checksum/known-version.ts
|
||||
var semver = __toESM(require_semver(), 1);
|
||||
|
||||
// src/download/checksum/known-checksums.ts
|
||||
var KNOWN_CHECKSUMS = {
|
||||
"aarch64-apple-darwin-0.12.3": "546f7f8a6c70ff13a3a9d2bc958db3427298cebf3e0cb756f9177133b7068843",
|
||||
"aarch64-pc-windows-msvc-0.12.3": "4343217d668727b8a8eb5cad92389a1d2eeead93c89940d1b955ba1bb15462eb",
|
||||
"aarch64-unknown-linux-gnu-0.12.3": "bb66cb52e7b1823aed1183630d8d8e5c958840d584a4c55ec10a4cfc168dcca2",
|
||||
"aarch64-unknown-linux-musl-0.12.3": "fa513fca1eb2913334c944fe9adbdd410274a1cbe8dd05d03699a9eb85311d4e",
|
||||
"arm-unknown-linux-musleabihf-0.12.3": "44c4c43969c0e58945c7954b033a99916355acef558decf6a9a0b090a6e0465b",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.3": "f572e3b8496f2069e102fd02fb346d7b2fbe0cba6edf0013575cfe79322e4ad0",
|
||||
"armv7-unknown-linux-musleabihf-0.12.3": "771c35fc4de5ea1e115ddab3147439498f30572be38fa2ff5c2dabb2258faa90",
|
||||
"i686-pc-windows-msvc-0.12.3": "8b1e428b1f5acfd5ba6bf490a7205b4f9149a27a0d9cbd1487243fd8e3d8a80b",
|
||||
"i686-unknown-linux-gnu-0.12.3": "0205eb65e8b39419616acbdad139718b59ea2a17869dea49bf7a5e3cf5aae1eb",
|
||||
"i686-unknown-linux-musl-0.12.3": "981619b5cf63a1bbab8eaf011aaac9d511db6ec0ac2618d59e36b9ccd95e8f99",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.3": "bff188fcf2d867c5595f8db6061a39e54752ab213eaefc14287f37e85afe9ead",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.3": "84d0d7d1359c432545b5717b5d7ba97465d694e13bd80646e04769b54890037d",
|
||||
"riscv64gc-unknown-linux-musl-0.12.3": "1b3ee81808a381bb0a83deb697c9612a5a48c47b9d98f6043c924600f2bf1321",
|
||||
"s390x-unknown-linux-gnu-0.12.3": "c6d0d036c4250bd28554c78b411b711ff9367a7dd12f241a27f5b7d43f549ae3",
|
||||
"x86_64-apple-darwin-0.12.3": "4c9f52262a14da336e4a42ed24992d12d0c956acde87619e4611d321dffa602b",
|
||||
"x86_64-pc-windows-msvc-0.12.3": "b23350c79e8ad0192b8124af13a0f17e8d4e4549524785e1aef389ae5a06990e",
|
||||
"x86_64-unknown-linux-gnu-0.12.3": "600cf9a742aca00d292673b16b5acffaa7b8c269a364ad0c2e79498dcb1fe101",
|
||||
"x86_64-unknown-linux-musl-0.12.3": "0643b9fb8c9fb27458e709ce6ff939695013c41975ff7b02d3f3b138d8d4bdb3",
|
||||
"aarch64-apple-darwin-0.12.2": "fa909fea3bc06f460db79017030a221fdbc43ec4478f089cb554d8335c090817",
|
||||
"aarch64-pc-windows-msvc-0.12.2": "dccc2bb7724c015f2a82467dee5bf4b2353a3fcdbfdfb30e0f93cdf5db2dd1df",
|
||||
"aarch64-unknown-linux-gnu-0.12.2": "19b7f1f66895261fbaa07f8ea91da0f86337ad4e47efa594e87641c1718ffc52",
|
||||
"aarch64-unknown-linux-musl-0.12.2": "73b87f0d65d7dfcd39753a51ce65592360b02c29f8e1bc2c85cc4190fe914499",
|
||||
"arm-unknown-linux-musleabihf-0.12.2": "4e27dfadda93c82dd85c2de29b7fd6417ea74c430bfbc52833ea9580c8c16d04",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.2": "0536e78e9796394fa135102c7500f24a291aaf9fbf129b70add472b6dcf42a4b",
|
||||
"armv7-unknown-linux-musleabihf-0.12.2": "5e10ffda5760511a16c0d5a9b2c28ebaed864dfa34e73fddcf0f600cf125cfee",
|
||||
"i686-pc-windows-msvc-0.12.2": "e2037092f25370ecbd8827b1d91650a9fbf002548ae647aea39073c6bbe45384",
|
||||
"i686-unknown-linux-gnu-0.12.2": "659b83b91a329a6bf5fbb412ea61262640b9bf15f07b6208334bd7a379c0dbf0",
|
||||
"i686-unknown-linux-musl-0.12.2": "b57cc4b2bd5e1cc20253222add0d377a5398c2bafc93611bd2a4438ac8e21f9c",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.2": "0e135c0fddbd303297a847016ea3cb60fdacebed20bd87200a3537cfb67d4d46",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.2": "cc348cecc84695394721e2fc1e0c4fd5b9a052d4eeeba57b194929c719d5681e",
|
||||
"riscv64gc-unknown-linux-musl-0.12.2": "a0e9a9d99e0f2cc39b645aecdabe27e308074b1d3dc2afdd507433528c97e701",
|
||||
"s390x-unknown-linux-gnu-0.12.2": "78797ad74c948950181b607be0989b1d5926a2096d81def4238192c95ff47aeb",
|
||||
"x86_64-apple-darwin-0.12.2": "a6e6506a9109801222d65d17461abf4ed13bdecc5d2b13af0495418a82972c6b",
|
||||
"x86_64-pc-windows-msvc-0.12.2": "01442d8ce5c7124151a73e697c836d252c6da853c18c73206d3cc4c2378a91d2",
|
||||
"x86_64-unknown-linux-gnu-0.12.2": "d66e96b5f1ca3b99806eee283a8125d33a0bd669e6e6d9bc4ab7ffda63c41bf4",
|
||||
"x86_64-unknown-linux-musl-0.12.2": "2dbe8209c9592f6d1009b8565f4bf29813427907bee2236023c013101ede343f",
|
||||
"aarch64-apple-darwin-0.12.1": "77d2906988e8074fd43f2f329ec452ebbf9b0c257ba1c66451c71de70a6baf42",
|
||||
"aarch64-pc-windows-msvc-0.12.1": "9bc7c18e616230fa2dc6fb24bc3afde18a95c2b5c9433de747e9502c66041568",
|
||||
"aarch64-unknown-linux-gnu-0.12.1": "769d373e146692c639b5fbaae33b331c297a32e03d30448772051902df52bbf4",
|
||||
"aarch64-unknown-linux-musl-0.12.1": "ce218dad9eb48a39dd86160bec6291fac7275f20a9cabcc4bc10dd2c757208f8",
|
||||
"arm-unknown-linux-musleabihf-0.12.1": "fba356be49629c5e0c0270fb3c55def0d83a7abe014ea857b13d14e0cbeabbbc",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.1": "bfca453bdf4ea6ce149f9d5be0589fc2e17a22d434c66c2f374a802dabb13cb5",
|
||||
"armv7-unknown-linux-musleabihf-0.12.1": "0cb3e6ccfedce3cf3f5f95e3a5ddb32977f54025ea74f91993072ebcf91f9df2",
|
||||
"i686-pc-windows-msvc-0.12.1": "9b51c33d307a8ab9e9dfd88d4ae1491761f63de0bffa3cec96bec536491c9b97",
|
||||
"i686-unknown-linux-gnu-0.12.1": "4c6f5d77215cf40ddd388215dfdac46471d074aeba62163f3e7fab6892645f95",
|
||||
"i686-unknown-linux-musl-0.12.1": "be4d42582284456dae2ff4bf622c4169d1e6b8d1cd0e516658d6ba01f2a57dfa",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.1": "9f3ebd5e5ce0f7a212a8d1326995612896cdcaa4ef571194d3b061a2d0d4d92e",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.1": "dda637a8f2f11b73a3e8da35c7909772beb49799aea61bacb04c2e7d2455b939",
|
||||
"riscv64gc-unknown-linux-musl-0.12.1": "31806babab570f6cab8bfdaaaf6890360f1efa4e122372ad73193b70326b8f83",
|
||||
"s390x-unknown-linux-gnu-0.12.1": "58132e9675680eb952b9794206a7ee98b528c1e664e6f80f55fb4972ffb7f269",
|
||||
"x86_64-apple-darwin-0.12.1": "69d9f9a00337f25a50dcb13882052da08b8469bac11091c98c5694c3c6721467",
|
||||
"x86_64-pc-windows-msvc-0.12.1": "8fcb0cb46e1229065e344758980924e569bef5882ef45f46fada8fb24e06b74a",
|
||||
"x86_64-unknown-linux-gnu-0.12.1": "90b2f223fb69d19db49e117da601f64978593417988530aa733d456141b4bcbb",
|
||||
"x86_64-unknown-linux-musl-0.12.1": "47823f814693bab8623308341369190de30b5c621eec5b1ee20352eae8c7982c",
|
||||
"aarch64-apple-darwin-0.12.0": "2b9e582af54f84fa50c115427451a6c13e80f43b52f8282b8af5791077317bbf",
|
||||
"aarch64-pc-windows-msvc-0.12.0": "60c12dc34a8ff0269d7744a3a94506fa8f140618a82194b7bf7834fa789a765b",
|
||||
"aarch64-unknown-linux-gnu-0.12.0": "2c5d6e3092cc5223b10ff403880cc75121bf64e84644e7a0c69f643b0d89ac95",
|
||||
"aarch64-unknown-linux-musl-0.12.0": "936fbbf20188a2b1c66bce3dca3f4009a5c9cdf12bb2bbd084e71926f75d6a15",
|
||||
"arm-unknown-linux-musleabihf-0.12.0": "b5879d87fe1fd7a3c8fb27346339222acc5628000002024e7f4d114f1e67a55d",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.0": "a84cc572bf83d82c9fb6ce6aaed37da98789420a84f6f754b80ba519d8683345",
|
||||
"armv7-unknown-linux-musleabihf-0.12.0": "d4a3383585057824e16fa7f0b24e9f0fecf4b37d29e6d4c7f26b76a5959116e3",
|
||||
"i686-pc-windows-msvc-0.12.0": "4b7f9319eeb79a8e6204952742ac5ef6a56a096dc9438f416bfa60a374d6e94d",
|
||||
"i686-unknown-linux-gnu-0.12.0": "9399d51a33779007692e84e0395a78af7adfd21f2cc10da16ea2c9b6ad7dc260",
|
||||
"i686-unknown-linux-musl-0.12.0": "7a1994b07077bd67ef76dab2107dfad576436951993969a93067f3217f7fa1fb",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.0": "9a4a9b50a27111545b16821449f79fa646bad4b14f0811d6f70ad77f627983a2",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.0": "a55f970e88e7acb73a21a9efe892caff40e1a7b928770a2b844fdd7d74d8070e",
|
||||
"riscv64gc-unknown-linux-musl-0.12.0": "01253909dec1d5cdd836f52ed70a2fc1a7017ec723a724b7315b55f2025728a1",
|
||||
"s390x-unknown-linux-gnu-0.12.0": "3737b6d3fe7100ade46df0aae3d59564e7bbbb2fcb926186209e103e942535ab",
|
||||
"x86_64-apple-darwin-0.12.0": "d41593beaefc54bab7d062af0ef6ca093bfb81d001d58ebbef39e44423f9c496",
|
||||
"x86_64-pc-windows-msvc-0.12.0": "68200e25de594df92387186bbfb9d9df606ec1d87efaa0ae0c7f690970e53db6",
|
||||
"x86_64-unknown-linux-gnu-0.12.0": "eaf842262aa1c418d8ecc5605f02ee1ebfd369124fa48548e85f9481a47831a9",
|
||||
"x86_64-unknown-linux-musl-0.12.0": "3340a9d8cffc4d801bc1a7459ebfaf5790c79400720d9b6963d806f058526684",
|
||||
"aarch64-apple-darwin-0.11.33": "d75e3d2bfc203d17388edaabd3aa37958edbcbfc36219e3ee0d31bb080b4baa2",
|
||||
"aarch64-pc-windows-msvc-0.11.33": "6eb261d3ad61b35e2a6cfd997b296b908ff74d6199717eca81c3c73e1df7fbc7",
|
||||
"aarch64-unknown-linux-gnu-0.11.33": "9ed88a9a42de3102f9704d021ab186fdf8a69a7ad9a1d3f3486ac6b1e55d6141",
|
||||
"aarch64-unknown-linux-musl-0.11.33": "e256e5cf23f8c2e7d4d83f029acd662cbe7275ff24268ce1d6d2ba9016855268",
|
||||
"arm-unknown-linux-musleabihf-0.11.33": "8c973de331a13f83a1b9bc358b6e7bfa5e5e1f015ff93545dc04839c868e20fe",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.33": "5446f812e7f5512198adaf60d2c66672a41d9676e86686819222baef021bce5b",
|
||||
"armv7-unknown-linux-musleabihf-0.11.33": "9e0f6904f62997e34ee8795d615ba2974f31b0461674572d05859ba0b9402290",
|
||||
"i686-pc-windows-msvc-0.11.33": "10b09a49823dd561bb4ececee1eea2c29cb58982f7253865ec27d23fd131daa7",
|
||||
"i686-unknown-linux-gnu-0.11.33": "b5b82a4eedf863f855acba77bb51fc7c1f399b276fdbfdff63edf35bb2a2fdfb",
|
||||
"i686-unknown-linux-musl-0.11.33": "af050631909811e945a9a8b087cc071038bfe25cfa5ff0b7afd17fb468522f43",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.33": "eee721adf229681b98cdd868d4991886bd91527ecbdb6fa778feb79f46d4be75",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.33": "bbb1fc2e25beb8bf0ee4342e70bb0caacb74a7503a02e04cb009aff28a182cfd",
|
||||
"riscv64gc-unknown-linux-musl-0.11.33": "ff4d248fff98c1c6ea12088ae002c07b861278bfc2c41e31ac0ecc1795ddb2f0",
|
||||
"s390x-unknown-linux-gnu-0.11.33": "bbb4740bd2596d2da979ad721258761fa0d4c5bb6ed151356c2146c150edfd21",
|
||||
"x86_64-apple-darwin-0.11.33": "f1b919f740bd6be1d014ff58c4271b0779a32198adfb19ad9c5d1c4d9b2b4301",
|
||||
"x86_64-pc-windows-msvc-0.11.33": "c253ce868ad48d29327b661452ce184c9e333e6d6f5bc8d6fcfbf4dd52b83442",
|
||||
"x86_64-unknown-linux-gnu-0.11.33": "aa9fca823c03289fb6e3460b3dc864f3ea895cafaf9b99247701a67b17d1b018",
|
||||
"x86_64-unknown-linux-musl-0.11.33": "3e95b84d8a8b3390c91584d4fd0c4d326e951da2b8fb15a76719368af2795424",
|
||||
"aarch64-apple-darwin-0.11.32": "ed336d0ba49db8ef89b2b41fffa372ce63bd032f22a56f001c265891aec32829",
|
||||
"aarch64-pc-windows-msvc-0.11.32": "a7427ea0440bb826b6716d1837ff3d173b8e7d496cb09ee8f456b4e023a2fdcd",
|
||||
"aarch64-unknown-linux-gnu-0.11.32": "4d4fa08d95b06642e5800df6a22bd71455f23f988269e18da2847971d8c0bf31",
|
||||
"aarch64-unknown-linux-musl-0.11.32": "d70cdae687feb6aad9a09fe8d686df8c8efaf69a1007fa581379a2025adc10a5",
|
||||
"arm-unknown-linux-musleabihf-0.11.32": "43b1c42483d15e94747699b5f718e829144d2b1b117e1c1658742e73d05527a3",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.32": "593e0f6b92cef908b23e3e3e0da2fd8ae24392afdb70eed05651869fea4a1b02",
|
||||
"armv7-unknown-linux-musleabihf-0.11.32": "cc169fc42b63970cb0cc10a1658c9833e79a5bfde8915ec5f6f5316d9e0cb95f",
|
||||
"i686-pc-windows-msvc-0.11.32": "e54e814a3963af3af607940f142169312d7550d44db8e2daa2bf6c524554ac3c",
|
||||
"i686-unknown-linux-gnu-0.11.32": "d4c53923c44dd060a42dbc6b88e349c86676d779b01603329d8c6b8f916e74cd",
|
||||
"i686-unknown-linux-musl-0.11.32": "7704bf0270e1ef8421608c585e8016411a625314125fce473e01446fdcb1fcf3",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.32": "0afff437b499f5919045fd0095b52dec18d818771f9a6bd0be0ff027b427fb16",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.32": "f10954d2263d407f6ffa6bfdd458d0fc0918f097f851ca3cf4907d4f7ebf2dae",
|
||||
"riscv64gc-unknown-linux-musl-0.11.32": "3c58fc5e82589a77b2409a6c308f1a55361c29130cb3ff239e850d413433f97f",
|
||||
"s390x-unknown-linux-gnu-0.11.32": "9922ba31cd582f4d762ac88a3cfdf339be599063c689c64c36916f04139ed43d",
|
||||
"x86_64-apple-darwin-0.11.32": "77f5ca26c0de20e992a3677a174fe1121ee25c36f9b1434a863f75bf077a05eb",
|
||||
"x86_64-pc-windows-msvc-0.11.32": "acfde570451cfdb8689fa159a138ee805ba4e241c466432750302c86254b0984",
|
||||
"x86_64-unknown-linux-gnu-0.11.32": "aab924fd522efd06f1c5f3b93a243864fc453132c94b2dc49f1371b528a4b967",
|
||||
"x86_64-unknown-linux-musl-0.11.32": "1fd052f196108d87e61fc3d98fe06b4ec758c9a1eb1466a6fd1a436fe45885f2",
|
||||
"aarch64-apple-darwin-0.11.31": "b2b93e82a6786f9c7cb89fd4ca0e859a147b292ae8f6f95784f9742f0efec39e",
|
||||
"aarch64-pc-windows-msvc-0.11.31": "060da44c6474680ce9ed31f866a496cb06979dbea86de8fe24e0f22c48ac992b",
|
||||
"aarch64-unknown-linux-gnu-0.11.31": "d74f23949fd07be4970f293d06ca99d87cd2a78a341c3d7b7fc0df7bc2d8a145",
|
||||
"aarch64-unknown-linux-musl-0.11.31": "49cb5ffce40cc9c85355caa8104f7b61c40a8daac7334f4bc841cad1a7bb359e",
|
||||
"arm-unknown-linux-musleabihf-0.11.31": "0f71f9f2b37d1f82dd225662b3ecb10c3ff114a5828819173015dbc86d2fa0dd",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.31": "de23124095c4df154d3807495b59f1985d8d9460bd70d3de61fef2034756bd61",
|
||||
"armv7-unknown-linux-musleabihf-0.11.31": "9cb5373c1c2e6939077dcc60723a79dc348dd3c9942f2559d19696d16ac34990",
|
||||
"i686-pc-windows-msvc-0.11.31": "4b4d07862b81275ea1a507d5e80774b0f38502493f854cbb585a987c0155d627",
|
||||
"i686-unknown-linux-gnu-0.11.31": "85c71ad3f7c189e77bef0d94bcc3c1cbf8792695efe616dec86a389fbb1ee72b",
|
||||
"i686-unknown-linux-musl-0.11.31": "160a9e19934879492f5b92c8eb132b39ee19858a406c9f3224c05c7b7cd70e59",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.31": "43e21695092a3c58aa3d364c139bbeab838baba662f0e9f37aa78e52305289e3",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.31": "7fa2c496e1ca94c7bcfcc9361f7928c4126d63fc4588dee4c8a2465332b60636",
|
||||
"riscv64gc-unknown-linux-musl-0.11.31": "b300fe07dd1fb98e8608277d7b822ff637e25ee839674645f7ddcbc42199a39b",
|
||||
"s390x-unknown-linux-gnu-0.11.31": "42114face40b846720980dc3f6e2c1b4676d8bf56c8c551586b249be9137cb84",
|
||||
"x86_64-apple-darwin-0.11.31": "33ee6bd62b57fcd77a499deb54e4432dc1e1a2f3d34930ba987ad8b43f9c7bc7",
|
||||
"x86_64-pc-windows-msvc-0.11.31": "410c2fd3126ff621c9450a21cfc200002c7540dc48d130069a8f619cdb0a811b",
|
||||
"x86_64-unknown-linux-gnu-0.11.31": "8cc1cd82d434ec565376f98bd938d4b715b5791a80ff2d3aa78821cf85091b4b",
|
||||
"x86_64-unknown-linux-musl-0.11.31": "89048b7e30a6c459fa7e8f2e91cfdc413dc004dcbddc6c2af5e09df123e3246d",
|
||||
"aarch64-apple-darwin-0.11.30": "9bed3567d496d8dab84ecf7a1247551ac94ef1baaebb7b65df008dd93e9dc357",
|
||||
"aarch64-pc-windows-msvc-0.11.30": "0edc44e7f23668bce7985facd96b2fe04a4d8ea8edfc7e53294afd8993e960fc",
|
||||
"aarch64-unknown-linux-gnu-0.11.30": "8c11d90f5f66d232930cf8ae3a085c39877690d409e10878234802b028b20e2a",
|
||||
@@ -50707,6 +52310,23 @@ var KNOWN_CHECKSUMS = {
|
||||
"x86_64-unknown-linux-musl-0.0.5": "705bbe04a93a9d4d9db5224c2f980a88bba272538a33a78ea2e966f46b4d5eb7"
|
||||
};
|
||||
|
||||
// src/download/checksum/known-version.ts
|
||||
var VERSION_IN_CHECKSUM_KEY_PATTERN = /-(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/;
|
||||
function getLatestKnownVersion() {
|
||||
const versions = /* @__PURE__ */ new Set();
|
||||
for (const key of Object.keys(KNOWN_CHECKSUMS)) {
|
||||
const version = key.match(VERSION_IN_CHECKSUM_KEY_PATTERN)?.[1];
|
||||
if (version !== void 0) {
|
||||
versions.add(version);
|
||||
}
|
||||
}
|
||||
const latestVersion = [...versions].sort(semver.rcompare)[0];
|
||||
if (!latestVersion) {
|
||||
throw new Error("Could not determine latest known version from checksums.");
|
||||
}
|
||||
return latestVersion;
|
||||
}
|
||||
|
||||
// src/download/checksum/update-known-checksums.ts
|
||||
var import_node_fs = require("node:fs");
|
||||
async function updateChecksums(filePath, checksumEntries) {
|
||||
@@ -50921,7 +52541,6 @@ function isRecord(value) {
|
||||
}
|
||||
|
||||
// src/update-known-checksums.ts
|
||||
var VERSION_IN_CHECKSUM_KEY_PATTERN = /-(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/;
|
||||
async function run() {
|
||||
const checksumFilePath = process.argv.slice(2)[0];
|
||||
if (!checksumFilePath) {
|
||||
@@ -50930,8 +52549,8 @@ async function run() {
|
||||
);
|
||||
}
|
||||
const latestVersion = await getLatestVersion();
|
||||
const latestKnownVersion = getLatestKnownVersionFromChecksums();
|
||||
if (semver.lte(latestVersion, latestKnownVersion)) {
|
||||
const latestKnownVersion = getLatestKnownVersion();
|
||||
if (semver2.lte(latestVersion, latestKnownVersion)) {
|
||||
info2(
|
||||
`Latest release (${latestVersion}) is not newer than the latest known version (${latestKnownVersion}). Skipping update.`
|
||||
);
|
||||
@@ -50942,23 +52561,6 @@ async function run() {
|
||||
await updateChecksums(checksumFilePath, checksumEntries);
|
||||
setOutput("latest-version", latestVersion);
|
||||
}
|
||||
function getLatestKnownVersionFromChecksums() {
|
||||
const versions = /* @__PURE__ */ new Set();
|
||||
for (const key of Object.keys(KNOWN_CHECKSUMS)) {
|
||||
const version = extractVersionFromChecksumKey(key);
|
||||
if (version !== void 0) {
|
||||
versions.add(version);
|
||||
}
|
||||
}
|
||||
const latestVersion = [...versions].sort(semver.rcompare)[0];
|
||||
if (!latestVersion) {
|
||||
throw new Error("Could not determine latest known version from checksums.");
|
||||
}
|
||||
return latestVersion;
|
||||
}
|
||||
function extractVersionFromChecksumKey(key) {
|
||||
return key.match(VERSION_IN_CHECKSUM_KEY_PATTERN)?.[1];
|
||||
}
|
||||
function extractChecksumsFromManifest(versions) {
|
||||
const checksums = [];
|
||||
for (const version of versions) {
|
||||
|
||||
@@ -6,16 +6,29 @@ This document covers advanced options for configuring which version of uv to ins
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: "latest"
|
||||
```
|
||||
|
||||
## Install the latest version with a checksum verified by this action
|
||||
|
||||
Use `latest-known` to install the newest uv version whose checksums were bundled with the version of setup-uv used by your workflow. Version resolution is performed locally without fetching the latest release, so updating setup-uv also updates the version selected by `latest-known`.
|
||||
|
||||
When `manifest-file` is set, `latest-known` still selects a version from setup-uv's bundled checksum table, but the artifact and checksum come from the custom manifest.
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv known to setup-uv
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: "latest-known"
|
||||
```
|
||||
|
||||
## Install a specific version
|
||||
|
||||
```yaml
|
||||
- name: Install a specific version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: "0.4.4"
|
||||
```
|
||||
@@ -28,21 +41,21 @@ to install the latest version that satisfies the range.
|
||||
|
||||
```yaml
|
||||
- name: Install a semver range of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: ">=0.4.0"
|
||||
```
|
||||
|
||||
```yaml
|
||||
- name: Pinning a minor version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: "0.4.x"
|
||||
```
|
||||
|
||||
```yaml
|
||||
- name: Install a pep440-specifier-satisfying version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: ">=0.4.25,<0.5"
|
||||
```
|
||||
@@ -54,7 +67,7 @@ You can change this behavior using the `resolution-strategy` input:
|
||||
|
||||
```yaml
|
||||
- name: Install the lowest compatible version of uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: ">=0.4.0"
|
||||
resolution-strategy: "lowest"
|
||||
@@ -72,11 +85,14 @@ You can use the `version-file` input to specify a file that contains the version
|
||||
This can either be a `pyproject.toml` or `uv.toml` file which defines a `required-version` or
|
||||
uv defined as a dependency in `pyproject.toml` or `requirements.txt`.
|
||||
|
||||
[asdf](https://asdf-vm.com/) `.tool-versions` is also supported, but without the `ref` syntax.
|
||||
[asdf](https://asdf-vm.com/) `.tool-versions` is also supported for selecting uv. If neither
|
||||
`python-version` nor `UV_PYTHON` is set, the `python` entry from the selected file is also exported
|
||||
as `UV_PYTHON`. Only a single Python version is supported; multiple fallback versions and the asdf
|
||||
`ref:`, `path:`, and `system` forms are ignored with a warning.
|
||||
|
||||
```yaml
|
||||
- name: Install uv based on the version defined in pyproject.toml
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version-file: "pyproject.toml"
|
||||
```
|
||||
@@ -87,7 +103,7 @@ silently picking up a newer uv until the lockfile is updated.
|
||||
|
||||
```yaml
|
||||
- name: Install uv based on the version locked in uv.lock
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version-file: "uv.lock"
|
||||
```
|
||||
|
||||
+16
-13
@@ -23,7 +23,7 @@ The computed cache key is available as the `cache-key` output:
|
||||
```yaml
|
||||
- name: Setup uv
|
||||
id: setup-uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
- name: Print cache key
|
||||
@@ -38,7 +38,10 @@ The computed cache key is available as the `cache-key` output:
|
||||
|
||||
If you enable caching, the [uv cache](https://docs.astral.sh/uv/concepts/cache/) will be uploaded to
|
||||
the GitHub Actions cache. This can speed up runs that reuse the cache by several minutes.
|
||||
Caching is enabled by default on GitHub-hosted runners.
|
||||
With the default `enable-cache: auto`, caching is enabled on GitHub-hosted runners except for
|
||||
`release`, tag push, `pull_request_target`, and `workflow_run` events. Caching is disabled for these
|
||||
events to prevent insecure or release-sensitive jobs from restoring potentially poisoned caches.
|
||||
Set `enable-cache: true` to explicitly enable caching for any event.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
@@ -50,7 +53,7 @@ You can optionally define a custom cache key suffix.
|
||||
```yaml
|
||||
- name: Enable caching and define a custom cache key suffix
|
||||
id: setup-uv
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
cache-suffix: "optional-suffix"
|
||||
@@ -89,7 +92,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
||||
|
||||
```yaml
|
||||
- name: Define a cache dependency glob
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
cache-dependency-glob: "**/pyproject.toml"
|
||||
@@ -97,7 +100,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
||||
|
||||
```yaml
|
||||
- name: Define a list of cache dependency globs
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
cache-dependency-glob: |
|
||||
@@ -107,7 +110,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
||||
|
||||
```yaml
|
||||
- name: Define an absolute cache dependency glob
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
cache-dependency-glob: "/tmp/my-folder/requirements*.txt"
|
||||
@@ -115,7 +118,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
||||
|
||||
```yaml
|
||||
- name: Never invalidate the cache
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
cache-dependency-glob: ""
|
||||
@@ -128,7 +131,7 @@ By default, the cache will be restored.
|
||||
|
||||
```yaml
|
||||
- name: Don't restore an existing cache
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
restore-cache: false
|
||||
@@ -142,7 +145,7 @@ By default, the cache will be saved.
|
||||
|
||||
```yaml
|
||||
- name: Don't save the cache after the run
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
save-cache: false
|
||||
@@ -168,7 +171,7 @@ It defaults to `setup-uv-cache` in the `TMP` dir, `D:\a\_temp\setup-uv-cache` on
|
||||
|
||||
```yaml
|
||||
- name: Define a custom uv cache path
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
cache-local-path: "/path/to/cache"
|
||||
```
|
||||
@@ -185,7 +188,7 @@ If you want to prune the cache before saving it, enable cache pruning with the `
|
||||
|
||||
```yaml
|
||||
- name: Prune the cache before saving it
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
prune-cache: true
|
||||
@@ -204,7 +207,7 @@ To force managed Python installs, set `UV_PYTHON_PREFERENCE=only-managed`.
|
||||
|
||||
```yaml
|
||||
- name: Cache Python installs
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
cache-python: true
|
||||
@@ -222,7 +225,7 @@ If you want to ignore this, set the `ignore-nothing-to-cache` input to `true`.
|
||||
|
||||
```yaml
|
||||
- name: Ignore nothing to cache
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
enable-cache: true
|
||||
ignore-nothing-to-cache: true
|
||||
|
||||
@@ -10,7 +10,7 @@ are automatically verified by this action. The sha256 hashes can be found on the
|
||||
|
||||
```yaml
|
||||
- name: Install a specific version and validate the checksum
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
version: "0.3.1"
|
||||
checksum: "e11b01402ab645392c7ad6044db63d37e4fd1e745e015306993b07695ea5f9f8"
|
||||
@@ -39,7 +39,7 @@ The `archive_format` field is currently ignored.
|
||||
|
||||
```yaml
|
||||
- name: Use a custom manifest file
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
manifest-file: "https://example.com/my-custom-manifest.ndjson"
|
||||
```
|
||||
@@ -58,7 +58,7 @@ You can disable this by setting the `add-problem-matchers` input to `false`.
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv without problem matchers
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
add-problem-matchers: false
|
||||
```
|
||||
|
||||
@@ -9,7 +9,7 @@ This allows directly using it in later steps:
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv and activate the environment
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
activate-environment: true
|
||||
- run: uv pip install pip
|
||||
@@ -20,7 +20,7 @@ By default, the venv is created at `.venv` inside the `working-directory`.
|
||||
You can customize the venv location with `venv-path`, for example to place it in the runner temp directory:
|
||||
|
||||
```yaml
|
||||
- uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
activate-environment: true
|
||||
venv-path: ${{ runner.temp }}/custom-venv
|
||||
@@ -51,7 +51,7 @@ are not sufficient, you can provide a custom GitHub token with the necessary per
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv with a custom GitHub token
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
|
||||
```
|
||||
@@ -69,7 +69,7 @@ input:
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv with a custom tool dir
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
tool-dir: "/path/to/tool/dir"
|
||||
```
|
||||
@@ -88,7 +88,7 @@ If you want to change this behaviour (especially on self-hosted runners) you can
|
||||
|
||||
```yaml
|
||||
- name: Install the latest version of uv with a custom tool bin dir
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
tool-bin-dir: "/path/to/tool-bin/dir"
|
||||
```
|
||||
@@ -105,7 +105,7 @@ This action supports expanding the `~` character to the user's home directory fo
|
||||
|
||||
```yaml
|
||||
- name: Expand the tilde character
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
cache-local-path: "~/path/to/cache"
|
||||
tool-dir: "~/path/to/tool/dir"
|
||||
@@ -122,7 +122,7 @@ If you want to ignore this, set the `ignore-empty-workdir` input to `true`.
|
||||
|
||||
```yaml
|
||||
- name: Ignore empty workdir
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
ignore-empty-workdir: true
|
||||
```
|
||||
@@ -131,7 +131,7 @@ If you want to ignore this, set the `ignore-empty-workdir` input to `true`.
|
||||
|
||||
This action sets several environment variables that influence uv's behavior and can be used by subsequent steps:
|
||||
|
||||
- `UV_PYTHON`: Set when `python-version` input is specified. Controls which Python version uv uses.
|
||||
- `UV_PYTHON`: Set when `python-version` is specified or the selected `.tool-versions` file contains a supported `python` entry. Controls which Python version uv uses.
|
||||
- `UV_CACHE_DIR`: Set when caching is enabled (unless already configured in uv config files). Controls where uv stores its cache.
|
||||
- `UV_TOOL_DIR`: Set when `tool-dir` input is specified. Controls where uv installs tool environments.
|
||||
- `UV_TOOL_BIN_DIR`: Set when `tool-bin-dir` input is specified. Controls where uv installs tool binaries.
|
||||
@@ -142,10 +142,11 @@ This action sets several environment variables that influence uv's behavior and
|
||||
|
||||
- `UV_NO_MODIFY_PATH`: If set, prevents the action from modifying PATH. Cannot be used with `activate-environment`.
|
||||
- `UV_CACHE_DIR`: If already set, the action will respect it instead of setting its own cache directory.
|
||||
- `UV_PYTHON`: If already set and `python-version` is not specified, the action will respect it instead of using the `python` entry from `.tool-versions`.
|
||||
|
||||
```yaml
|
||||
- name: Example using environment variables
|
||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
||||
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
||||
with:
|
||||
python-version: "3.12"
|
||||
tool-dir: "/custom/tool/dir"
|
||||
|
||||
Generated
+200
-122
@@ -9,33 +9,33 @@
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/cache": "^6.1.0",
|
||||
"@actions/cache": "^6.2.0",
|
||||
"@actions/core": "^3.0.0",
|
||||
"@actions/exec": "^3.0.0",
|
||||
"@actions/glob": "^0.6.1",
|
||||
"@actions/glob": "^0.7.0",
|
||||
"@actions/io": "^3.0.2",
|
||||
"@actions/tool-cache": "^4.0.0",
|
||||
"@renovatebot/pep440": "^5.0.0",
|
||||
"smol-toml": "^1.7.0",
|
||||
"undici": "^8.3.0"
|
||||
"smol-toml": "^1.7.1",
|
||||
"undici": "^8.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.5.1",
|
||||
"@biomejs/biome": "^2.5.7",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^26.1.1",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@types/node": "^26.1.2",
|
||||
"@types/semver": "^7.8.0",
|
||||
"@vercel/ncc": "^0.44.1",
|
||||
"esbuild": "^0.28.1",
|
||||
"jest": "^30.4.2",
|
||||
"js-yaml": "^5.2.1",
|
||||
"js-yaml": "^5.2.3",
|
||||
"ts-jest": "^29.4.11",
|
||||
"typescript": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/cache": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.1.0.tgz",
|
||||
"integrity": "sha512-LVqybSbzhBp2uAETOQ3HnVjXA4AcjavgMH+LCr+cjgO+PZfciv/1QAgoW+esXBaAhvDid+vXeV70GGJpAh4V5Q==",
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.2.0.tgz",
|
||||
"integrity": "sha512-Nv0xWRmbxfDbAn/70flO/F6tj2Nv4XTYMAsQHiDFSojCDfso/Zni+fRKa14ToI9hnmOW/rQcY1WYb6wsM7Pgwg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^3.0.1",
|
||||
@@ -49,6 +49,16 @@
|
||||
"semver": "^7.7.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/cache/node_modules/@actions/glob": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
||||
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^3.0.0",
|
||||
"minimatch": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/cache/node_modules/semver": {
|
||||
"version": "7.7.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||
@@ -81,13 +91,49 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/glob": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
||||
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.7.0.tgz",
|
||||
"integrity": "sha512-+7s3wM+cXapDLmLL1NVWHawqcJOZzXZy2df/VhNn8DnZtS/x83iTCKaUn9F0llur4h3CII0AilvKKH4CMPL8Gw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^3.0.0",
|
||||
"minimatch": "^3.0.4"
|
||||
"minimatch": "^10.2.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/glob/node_modules/balanced-match": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
|
||||
"integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "18 || 20 || >=22"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/glob/node_modules/brace-expansion": {
|
||||
"version": "5.0.9",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
|
||||
"integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^4.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "20 || >=22"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/glob/node_modules/minimatch": {
|
||||
"version": "10.2.6",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
|
||||
"integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
|
||||
"license": "BlueOak-1.0.0",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^5.0.8"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18 || 20 || >=22"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/http-client": {
|
||||
@@ -863,9 +909,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@biomejs/biome": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.1.tgz",
|
||||
"integrity": "sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.7.tgz",
|
||||
"integrity": "sha512-zr8K/DcY5tYsQOQwqMJ0AWElo6QgmgNI7idXgXLhevVszlt8RGVpesEJPqx3ThazLaOwjJ5Y8fz3BtH5fGZNsw==",
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"bin": {
|
||||
@@ -879,20 +925,20 @@
|
||||
"url": "https://opencollective.com/biome"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@biomejs/cli-darwin-arm64": "2.5.1",
|
||||
"@biomejs/cli-darwin-x64": "2.5.1",
|
||||
"@biomejs/cli-linux-arm64": "2.5.1",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.5.1",
|
||||
"@biomejs/cli-linux-x64": "2.5.1",
|
||||
"@biomejs/cli-linux-x64-musl": "2.5.1",
|
||||
"@biomejs/cli-win32-arm64": "2.5.1",
|
||||
"@biomejs/cli-win32-x64": "2.5.1"
|
||||
"@biomejs/cli-darwin-arm64": "2.5.7",
|
||||
"@biomejs/cli-darwin-x64": "2.5.7",
|
||||
"@biomejs/cli-linux-arm64": "2.5.7",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.5.7",
|
||||
"@biomejs/cli-linux-x64": "2.5.7",
|
||||
"@biomejs/cli-linux-x64-musl": "2.5.7",
|
||||
"@biomejs/cli-win32-arm64": "2.5.7",
|
||||
"@biomejs/cli-win32-x64": "2.5.7"
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-darwin-arm64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.1.tgz",
|
||||
"integrity": "sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.7.tgz",
|
||||
"integrity": "sha512-vxo/Ls3/PYdQWyLhYYcgMOCzQypAjcY+iihS8M0wW03l16TCLW4zqZzGo75gm1VdCMj38hTVZ31KBWrZ4G9dJw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -907,9 +953,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-darwin-x64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.1.tgz",
|
||||
"integrity": "sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.7.tgz",
|
||||
"integrity": "sha512-Cd3Ga61amT/Yl/0x8elP5hhGYaFy4bw6WuysTgf7oo8TA5tJ5A1k+DkVoJ2BHbTVil51gTX9VPzArnrlLJ3Kyg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -924,9 +970,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-arm64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.1.tgz",
|
||||
"integrity": "sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.7.tgz",
|
||||
"integrity": "sha512-rR2QE0yF2GYSuYuKIa7pKvODGJqnOH+2eDREAM8wV+mWKSkMQKdAp4zXEZfTaxY8PMoNONnpgSWcBCyLDPDOKg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -941,9 +987,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.1.tgz",
|
||||
"integrity": "sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.7.tgz",
|
||||
"integrity": "sha512-xPI5yB6XlpDbNkS+bm1t42olw5c4l3UrlOmLg7KtLJvjvkNF/1V4tnUgfkylGIeb3u/T+BzMGYqgQhzjAoJzuQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -958,9 +1004,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-x64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.1.tgz",
|
||||
"integrity": "sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.7.tgz",
|
||||
"integrity": "sha512-FQgqJhscrqJUFptGaRSUJWlXAExwWcDwLuK49dvKfkQ1bB5SEEyFssnsxQY83Xm6jR0EbbX3+8+D5bfvYqUG2Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -975,9 +1021,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-linux-x64-musl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.1.tgz",
|
||||
"integrity": "sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.7.tgz",
|
||||
"integrity": "sha512-rE5VZi+qtmPgQH+l7jVxYoZ18b/TiHEhulhMpjmCZH1PltSbjRcxNWywC3HZ9tYottG7ORkeTtoscBilKSBm0g==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -992,9 +1038,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-win32-arm64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.1.tgz",
|
||||
"integrity": "sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.7.tgz",
|
||||
"integrity": "sha512-Oq4x0CCwP4jirrcTywXs5kOGZ4v5vuEP+gWrbtjApOA2CL9F3F9GlIdQIci8AKSCa/zURanMRpX/4wQ7Am6hHg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -1009,9 +1055,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@biomejs/cli-win32-x64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.1.tgz",
|
||||
"integrity": "sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.7.tgz",
|
||||
"integrity": "sha512-V+0wu/nrj2S+MhP4EQ0uHNolP0IALEsz45pg0WoKkHfDeh0+ItHwP/p7bX5RPoMOl9NkpHYWdYPhIcy2mACHvQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2145,9 +2191,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "26.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
|
||||
"integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
|
||||
"version": "26.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
|
||||
"integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -2155,9 +2201,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/semver": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
|
||||
"integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz",
|
||||
"integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
@@ -4365,9 +4411,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.1.tgz",
|
||||
"integrity": "sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==",
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz",
|
||||
"integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -4994,9 +5040,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/smol-toml": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz",
|
||||
"integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==",
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
|
||||
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
@@ -5436,9 +5482,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/undici": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-8.3.0.tgz",
|
||||
"integrity": "sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q==",
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-8.10.0.tgz",
|
||||
"integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=22.19.0"
|
||||
@@ -5789,9 +5835,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/cache": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.1.0.tgz",
|
||||
"integrity": "sha512-LVqybSbzhBp2uAETOQ3HnVjXA4AcjavgMH+LCr+cjgO+PZfciv/1QAgoW+esXBaAhvDid+vXeV70GGJpAh4V5Q==",
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.2.0.tgz",
|
||||
"integrity": "sha512-Nv0xWRmbxfDbAn/70flO/F6tj2Nv4XTYMAsQHiDFSojCDfso/Zni+fRKa14ToI9hnmOW/rQcY1WYb6wsM7Pgwg==",
|
||||
"requires": {
|
||||
"@actions/core": "^3.0.1",
|
||||
"@actions/exec": "^3.0.0",
|
||||
@@ -5804,6 +5850,15 @@
|
||||
"semver": "^7.7.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/glob": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
||||
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
||||
"requires": {
|
||||
"@actions/core": "^3.0.0",
|
||||
"minimatch": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.7.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||
@@ -5829,12 +5884,35 @@
|
||||
}
|
||||
},
|
||||
"@actions/glob": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
||||
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.7.0.tgz",
|
||||
"integrity": "sha512-+7s3wM+cXapDLmLL1NVWHawqcJOZzXZy2df/VhNn8DnZtS/x83iTCKaUn9F0llur4h3CII0AilvKKH4CMPL8Gw==",
|
||||
"requires": {
|
||||
"@actions/core": "^3.0.0",
|
||||
"minimatch": "^3.0.4"
|
||||
"minimatch": "^10.2.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"balanced-match": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
|
||||
"integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "5.0.9",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
|
||||
"integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
|
||||
"requires": {
|
||||
"balanced-match": "^4.0.2"
|
||||
}
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "10.2.6",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
|
||||
"integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
|
||||
"requires": {
|
||||
"brace-expansion": "^5.0.8"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@actions/http-client": {
|
||||
@@ -6377,74 +6455,74 @@
|
||||
"dev": true
|
||||
},
|
||||
"@biomejs/biome": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.1.tgz",
|
||||
"integrity": "sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.7.tgz",
|
||||
"integrity": "sha512-zr8K/DcY5tYsQOQwqMJ0AWElo6QgmgNI7idXgXLhevVszlt8RGVpesEJPqx3ThazLaOwjJ5Y8fz3BtH5fGZNsw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@biomejs/cli-darwin-arm64": "2.5.1",
|
||||
"@biomejs/cli-darwin-x64": "2.5.1",
|
||||
"@biomejs/cli-linux-arm64": "2.5.1",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.5.1",
|
||||
"@biomejs/cli-linux-x64": "2.5.1",
|
||||
"@biomejs/cli-linux-x64-musl": "2.5.1",
|
||||
"@biomejs/cli-win32-arm64": "2.5.1",
|
||||
"@biomejs/cli-win32-x64": "2.5.1"
|
||||
"@biomejs/cli-darwin-arm64": "2.5.7",
|
||||
"@biomejs/cli-darwin-x64": "2.5.7",
|
||||
"@biomejs/cli-linux-arm64": "2.5.7",
|
||||
"@biomejs/cli-linux-arm64-musl": "2.5.7",
|
||||
"@biomejs/cli-linux-x64": "2.5.7",
|
||||
"@biomejs/cli-linux-x64-musl": "2.5.7",
|
||||
"@biomejs/cli-win32-arm64": "2.5.7",
|
||||
"@biomejs/cli-win32-x64": "2.5.7"
|
||||
}
|
||||
},
|
||||
"@biomejs/cli-darwin-arm64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.1.tgz",
|
||||
"integrity": "sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.7.tgz",
|
||||
"integrity": "sha512-vxo/Ls3/PYdQWyLhYYcgMOCzQypAjcY+iihS8M0wW03l16TCLW4zqZzGo75gm1VdCMj38hTVZ31KBWrZ4G9dJw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-darwin-x64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.1.tgz",
|
||||
"integrity": "sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.7.tgz",
|
||||
"integrity": "sha512-Cd3Ga61amT/Yl/0x8elP5hhGYaFy4bw6WuysTgf7oo8TA5tJ5A1k+DkVoJ2BHbTVil51gTX9VPzArnrlLJ3Kyg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-arm64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.1.tgz",
|
||||
"integrity": "sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.7.tgz",
|
||||
"integrity": "sha512-rR2QE0yF2GYSuYuKIa7pKvODGJqnOH+2eDREAM8wV+mWKSkMQKdAp4zXEZfTaxY8PMoNONnpgSWcBCyLDPDOKg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-arm64-musl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.1.tgz",
|
||||
"integrity": "sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.7.tgz",
|
||||
"integrity": "sha512-xPI5yB6XlpDbNkS+bm1t42olw5c4l3UrlOmLg7KtLJvjvkNF/1V4tnUgfkylGIeb3u/T+BzMGYqgQhzjAoJzuQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-x64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.1.tgz",
|
||||
"integrity": "sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.7.tgz",
|
||||
"integrity": "sha512-FQgqJhscrqJUFptGaRSUJWlXAExwWcDwLuK49dvKfkQ1bB5SEEyFssnsxQY83Xm6jR0EbbX3+8+D5bfvYqUG2Q==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-linux-x64-musl": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.1.tgz",
|
||||
"integrity": "sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.7.tgz",
|
||||
"integrity": "sha512-rE5VZi+qtmPgQH+l7jVxYoZ18b/TiHEhulhMpjmCZH1PltSbjRcxNWywC3HZ9tYottG7ORkeTtoscBilKSBm0g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-win32-arm64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.1.tgz",
|
||||
"integrity": "sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.7.tgz",
|
||||
"integrity": "sha512-Oq4x0CCwP4jirrcTywXs5kOGZ4v5vuEP+gWrbtjApOA2CL9F3F9GlIdQIci8AKSCa/zURanMRpX/4wQ7Am6hHg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"@biomejs/cli-win32-x64": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.1.tgz",
|
||||
"integrity": "sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==",
|
||||
"version": "2.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.7.tgz",
|
||||
"integrity": "sha512-V+0wu/nrj2S+MhP4EQ0uHNolP0IALEsz45pg0WoKkHfDeh0+ItHwP/p7bX5RPoMOl9NkpHYWdYPhIcy2mACHvQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
@@ -7153,18 +7231,18 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "26.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
|
||||
"integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
|
||||
"version": "26.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
|
||||
"integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"undici-types": "~8.3.0"
|
||||
}
|
||||
},
|
||||
"@types/semver": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
|
||||
"integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz",
|
||||
"integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/stack-utils": {
|
||||
@@ -8627,9 +8705,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"js-yaml": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.1.tgz",
|
||||
"integrity": "sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==",
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz",
|
||||
"integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"argparse": "^2.0.1"
|
||||
@@ -9035,9 +9113,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"smol-toml": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz",
|
||||
"integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ=="
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
|
||||
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
@@ -9303,9 +9381,9 @@
|
||||
"optional": true
|
||||
},
|
||||
"undici": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-8.3.0.tgz",
|
||||
"integrity": "sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q=="
|
||||
"version": "8.10.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-8.10.0.tgz",
|
||||
"integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ=="
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "8.3.0",
|
||||
|
||||
+8
-8
@@ -28,25 +28,25 @@
|
||||
"author": "@eifinger",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/cache": "^6.1.0",
|
||||
"@actions/cache": "^6.2.0",
|
||||
"@actions/core": "^3.0.0",
|
||||
"@actions/exec": "^3.0.0",
|
||||
"@actions/glob": "^0.6.1",
|
||||
"@actions/glob": "^0.7.0",
|
||||
"@actions/io": "^3.0.2",
|
||||
"@actions/tool-cache": "^4.0.0",
|
||||
"@renovatebot/pep440": "^5.0.0",
|
||||
"smol-toml": "^1.7.0",
|
||||
"undici": "^8.3.0"
|
||||
"smol-toml": "^1.7.1",
|
||||
"undici": "^8.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.5.1",
|
||||
"@biomejs/biome": "^2.5.7",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^26.1.1",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@types/node": "^26.1.2",
|
||||
"@types/semver": "^7.8.0",
|
||||
"@vercel/ncc": "^0.44.1",
|
||||
"esbuild": "^0.28.1",
|
||||
"jest": "^30.4.2",
|
||||
"js-yaml": "^5.2.1",
|
||||
"js-yaml": "^5.2.3",
|
||||
"ts-jest": "^29.4.11",
|
||||
"typescript": "^6.0.3"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,257 @@
|
||||
// AUTOGENERATED_DO_NOT_EDIT
|
||||
export const KNOWN_CHECKSUMS: { [key: string]: string } = {
|
||||
"aarch64-apple-darwin-0.12.3":
|
||||
"546f7f8a6c70ff13a3a9d2bc958db3427298cebf3e0cb756f9177133b7068843",
|
||||
"aarch64-pc-windows-msvc-0.12.3":
|
||||
"4343217d668727b8a8eb5cad92389a1d2eeead93c89940d1b955ba1bb15462eb",
|
||||
"aarch64-unknown-linux-gnu-0.12.3":
|
||||
"bb66cb52e7b1823aed1183630d8d8e5c958840d584a4c55ec10a4cfc168dcca2",
|
||||
"aarch64-unknown-linux-musl-0.12.3":
|
||||
"fa513fca1eb2913334c944fe9adbdd410274a1cbe8dd05d03699a9eb85311d4e",
|
||||
"arm-unknown-linux-musleabihf-0.12.3":
|
||||
"44c4c43969c0e58945c7954b033a99916355acef558decf6a9a0b090a6e0465b",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.3":
|
||||
"f572e3b8496f2069e102fd02fb346d7b2fbe0cba6edf0013575cfe79322e4ad0",
|
||||
"armv7-unknown-linux-musleabihf-0.12.3":
|
||||
"771c35fc4de5ea1e115ddab3147439498f30572be38fa2ff5c2dabb2258faa90",
|
||||
"i686-pc-windows-msvc-0.12.3":
|
||||
"8b1e428b1f5acfd5ba6bf490a7205b4f9149a27a0d9cbd1487243fd8e3d8a80b",
|
||||
"i686-unknown-linux-gnu-0.12.3":
|
||||
"0205eb65e8b39419616acbdad139718b59ea2a17869dea49bf7a5e3cf5aae1eb",
|
||||
"i686-unknown-linux-musl-0.12.3":
|
||||
"981619b5cf63a1bbab8eaf011aaac9d511db6ec0ac2618d59e36b9ccd95e8f99",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.3":
|
||||
"bff188fcf2d867c5595f8db6061a39e54752ab213eaefc14287f37e85afe9ead",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.3":
|
||||
"84d0d7d1359c432545b5717b5d7ba97465d694e13bd80646e04769b54890037d",
|
||||
"riscv64gc-unknown-linux-musl-0.12.3":
|
||||
"1b3ee81808a381bb0a83deb697c9612a5a48c47b9d98f6043c924600f2bf1321",
|
||||
"s390x-unknown-linux-gnu-0.12.3":
|
||||
"c6d0d036c4250bd28554c78b411b711ff9367a7dd12f241a27f5b7d43f549ae3",
|
||||
"x86_64-apple-darwin-0.12.3":
|
||||
"4c9f52262a14da336e4a42ed24992d12d0c956acde87619e4611d321dffa602b",
|
||||
"x86_64-pc-windows-msvc-0.12.3":
|
||||
"b23350c79e8ad0192b8124af13a0f17e8d4e4549524785e1aef389ae5a06990e",
|
||||
"x86_64-unknown-linux-gnu-0.12.3":
|
||||
"600cf9a742aca00d292673b16b5acffaa7b8c269a364ad0c2e79498dcb1fe101",
|
||||
"x86_64-unknown-linux-musl-0.12.3":
|
||||
"0643b9fb8c9fb27458e709ce6ff939695013c41975ff7b02d3f3b138d8d4bdb3",
|
||||
"aarch64-apple-darwin-0.12.2":
|
||||
"fa909fea3bc06f460db79017030a221fdbc43ec4478f089cb554d8335c090817",
|
||||
"aarch64-pc-windows-msvc-0.12.2":
|
||||
"dccc2bb7724c015f2a82467dee5bf4b2353a3fcdbfdfb30e0f93cdf5db2dd1df",
|
||||
"aarch64-unknown-linux-gnu-0.12.2":
|
||||
"19b7f1f66895261fbaa07f8ea91da0f86337ad4e47efa594e87641c1718ffc52",
|
||||
"aarch64-unknown-linux-musl-0.12.2":
|
||||
"73b87f0d65d7dfcd39753a51ce65592360b02c29f8e1bc2c85cc4190fe914499",
|
||||
"arm-unknown-linux-musleabihf-0.12.2":
|
||||
"4e27dfadda93c82dd85c2de29b7fd6417ea74c430bfbc52833ea9580c8c16d04",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.2":
|
||||
"0536e78e9796394fa135102c7500f24a291aaf9fbf129b70add472b6dcf42a4b",
|
||||
"armv7-unknown-linux-musleabihf-0.12.2":
|
||||
"5e10ffda5760511a16c0d5a9b2c28ebaed864dfa34e73fddcf0f600cf125cfee",
|
||||
"i686-pc-windows-msvc-0.12.2":
|
||||
"e2037092f25370ecbd8827b1d91650a9fbf002548ae647aea39073c6bbe45384",
|
||||
"i686-unknown-linux-gnu-0.12.2":
|
||||
"659b83b91a329a6bf5fbb412ea61262640b9bf15f07b6208334bd7a379c0dbf0",
|
||||
"i686-unknown-linux-musl-0.12.2":
|
||||
"b57cc4b2bd5e1cc20253222add0d377a5398c2bafc93611bd2a4438ac8e21f9c",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.2":
|
||||
"0e135c0fddbd303297a847016ea3cb60fdacebed20bd87200a3537cfb67d4d46",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.2":
|
||||
"cc348cecc84695394721e2fc1e0c4fd5b9a052d4eeeba57b194929c719d5681e",
|
||||
"riscv64gc-unknown-linux-musl-0.12.2":
|
||||
"a0e9a9d99e0f2cc39b645aecdabe27e308074b1d3dc2afdd507433528c97e701",
|
||||
"s390x-unknown-linux-gnu-0.12.2":
|
||||
"78797ad74c948950181b607be0989b1d5926a2096d81def4238192c95ff47aeb",
|
||||
"x86_64-apple-darwin-0.12.2":
|
||||
"a6e6506a9109801222d65d17461abf4ed13bdecc5d2b13af0495418a82972c6b",
|
||||
"x86_64-pc-windows-msvc-0.12.2":
|
||||
"01442d8ce5c7124151a73e697c836d252c6da853c18c73206d3cc4c2378a91d2",
|
||||
"x86_64-unknown-linux-gnu-0.12.2":
|
||||
"d66e96b5f1ca3b99806eee283a8125d33a0bd669e6e6d9bc4ab7ffda63c41bf4",
|
||||
"x86_64-unknown-linux-musl-0.12.2":
|
||||
"2dbe8209c9592f6d1009b8565f4bf29813427907bee2236023c013101ede343f",
|
||||
"aarch64-apple-darwin-0.12.1":
|
||||
"77d2906988e8074fd43f2f329ec452ebbf9b0c257ba1c66451c71de70a6baf42",
|
||||
"aarch64-pc-windows-msvc-0.12.1":
|
||||
"9bc7c18e616230fa2dc6fb24bc3afde18a95c2b5c9433de747e9502c66041568",
|
||||
"aarch64-unknown-linux-gnu-0.12.1":
|
||||
"769d373e146692c639b5fbaae33b331c297a32e03d30448772051902df52bbf4",
|
||||
"aarch64-unknown-linux-musl-0.12.1":
|
||||
"ce218dad9eb48a39dd86160bec6291fac7275f20a9cabcc4bc10dd2c757208f8",
|
||||
"arm-unknown-linux-musleabihf-0.12.1":
|
||||
"fba356be49629c5e0c0270fb3c55def0d83a7abe014ea857b13d14e0cbeabbbc",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.1":
|
||||
"bfca453bdf4ea6ce149f9d5be0589fc2e17a22d434c66c2f374a802dabb13cb5",
|
||||
"armv7-unknown-linux-musleabihf-0.12.1":
|
||||
"0cb3e6ccfedce3cf3f5f95e3a5ddb32977f54025ea74f91993072ebcf91f9df2",
|
||||
"i686-pc-windows-msvc-0.12.1":
|
||||
"9b51c33d307a8ab9e9dfd88d4ae1491761f63de0bffa3cec96bec536491c9b97",
|
||||
"i686-unknown-linux-gnu-0.12.1":
|
||||
"4c6f5d77215cf40ddd388215dfdac46471d074aeba62163f3e7fab6892645f95",
|
||||
"i686-unknown-linux-musl-0.12.1":
|
||||
"be4d42582284456dae2ff4bf622c4169d1e6b8d1cd0e516658d6ba01f2a57dfa",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.1":
|
||||
"9f3ebd5e5ce0f7a212a8d1326995612896cdcaa4ef571194d3b061a2d0d4d92e",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.1":
|
||||
"dda637a8f2f11b73a3e8da35c7909772beb49799aea61bacb04c2e7d2455b939",
|
||||
"riscv64gc-unknown-linux-musl-0.12.1":
|
||||
"31806babab570f6cab8bfdaaaf6890360f1efa4e122372ad73193b70326b8f83",
|
||||
"s390x-unknown-linux-gnu-0.12.1":
|
||||
"58132e9675680eb952b9794206a7ee98b528c1e664e6f80f55fb4972ffb7f269",
|
||||
"x86_64-apple-darwin-0.12.1":
|
||||
"69d9f9a00337f25a50dcb13882052da08b8469bac11091c98c5694c3c6721467",
|
||||
"x86_64-pc-windows-msvc-0.12.1":
|
||||
"8fcb0cb46e1229065e344758980924e569bef5882ef45f46fada8fb24e06b74a",
|
||||
"x86_64-unknown-linux-gnu-0.12.1":
|
||||
"90b2f223fb69d19db49e117da601f64978593417988530aa733d456141b4bcbb",
|
||||
"x86_64-unknown-linux-musl-0.12.1":
|
||||
"47823f814693bab8623308341369190de30b5c621eec5b1ee20352eae8c7982c",
|
||||
"aarch64-apple-darwin-0.12.0":
|
||||
"2b9e582af54f84fa50c115427451a6c13e80f43b52f8282b8af5791077317bbf",
|
||||
"aarch64-pc-windows-msvc-0.12.0":
|
||||
"60c12dc34a8ff0269d7744a3a94506fa8f140618a82194b7bf7834fa789a765b",
|
||||
"aarch64-unknown-linux-gnu-0.12.0":
|
||||
"2c5d6e3092cc5223b10ff403880cc75121bf64e84644e7a0c69f643b0d89ac95",
|
||||
"aarch64-unknown-linux-musl-0.12.0":
|
||||
"936fbbf20188a2b1c66bce3dca3f4009a5c9cdf12bb2bbd084e71926f75d6a15",
|
||||
"arm-unknown-linux-musleabihf-0.12.0":
|
||||
"b5879d87fe1fd7a3c8fb27346339222acc5628000002024e7f4d114f1e67a55d",
|
||||
"armv7-unknown-linux-gnueabihf-0.12.0":
|
||||
"a84cc572bf83d82c9fb6ce6aaed37da98789420a84f6f754b80ba519d8683345",
|
||||
"armv7-unknown-linux-musleabihf-0.12.0":
|
||||
"d4a3383585057824e16fa7f0b24e9f0fecf4b37d29e6d4c7f26b76a5959116e3",
|
||||
"i686-pc-windows-msvc-0.12.0":
|
||||
"4b7f9319eeb79a8e6204952742ac5ef6a56a096dc9438f416bfa60a374d6e94d",
|
||||
"i686-unknown-linux-gnu-0.12.0":
|
||||
"9399d51a33779007692e84e0395a78af7adfd21f2cc10da16ea2c9b6ad7dc260",
|
||||
"i686-unknown-linux-musl-0.12.0":
|
||||
"7a1994b07077bd67ef76dab2107dfad576436951993969a93067f3217f7fa1fb",
|
||||
"powerpc64le-unknown-linux-gnu-0.12.0":
|
||||
"9a4a9b50a27111545b16821449f79fa646bad4b14f0811d6f70ad77f627983a2",
|
||||
"riscv64gc-unknown-linux-gnu-0.12.0":
|
||||
"a55f970e88e7acb73a21a9efe892caff40e1a7b928770a2b844fdd7d74d8070e",
|
||||
"riscv64gc-unknown-linux-musl-0.12.0":
|
||||
"01253909dec1d5cdd836f52ed70a2fc1a7017ec723a724b7315b55f2025728a1",
|
||||
"s390x-unknown-linux-gnu-0.12.0":
|
||||
"3737b6d3fe7100ade46df0aae3d59564e7bbbb2fcb926186209e103e942535ab",
|
||||
"x86_64-apple-darwin-0.12.0":
|
||||
"d41593beaefc54bab7d062af0ef6ca093bfb81d001d58ebbef39e44423f9c496",
|
||||
"x86_64-pc-windows-msvc-0.12.0":
|
||||
"68200e25de594df92387186bbfb9d9df606ec1d87efaa0ae0c7f690970e53db6",
|
||||
"x86_64-unknown-linux-gnu-0.12.0":
|
||||
"eaf842262aa1c418d8ecc5605f02ee1ebfd369124fa48548e85f9481a47831a9",
|
||||
"x86_64-unknown-linux-musl-0.12.0":
|
||||
"3340a9d8cffc4d801bc1a7459ebfaf5790c79400720d9b6963d806f058526684",
|
||||
"aarch64-apple-darwin-0.11.33":
|
||||
"d75e3d2bfc203d17388edaabd3aa37958edbcbfc36219e3ee0d31bb080b4baa2",
|
||||
"aarch64-pc-windows-msvc-0.11.33":
|
||||
"6eb261d3ad61b35e2a6cfd997b296b908ff74d6199717eca81c3c73e1df7fbc7",
|
||||
"aarch64-unknown-linux-gnu-0.11.33":
|
||||
"9ed88a9a42de3102f9704d021ab186fdf8a69a7ad9a1d3f3486ac6b1e55d6141",
|
||||
"aarch64-unknown-linux-musl-0.11.33":
|
||||
"e256e5cf23f8c2e7d4d83f029acd662cbe7275ff24268ce1d6d2ba9016855268",
|
||||
"arm-unknown-linux-musleabihf-0.11.33":
|
||||
"8c973de331a13f83a1b9bc358b6e7bfa5e5e1f015ff93545dc04839c868e20fe",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.33":
|
||||
"5446f812e7f5512198adaf60d2c66672a41d9676e86686819222baef021bce5b",
|
||||
"armv7-unknown-linux-musleabihf-0.11.33":
|
||||
"9e0f6904f62997e34ee8795d615ba2974f31b0461674572d05859ba0b9402290",
|
||||
"i686-pc-windows-msvc-0.11.33":
|
||||
"10b09a49823dd561bb4ececee1eea2c29cb58982f7253865ec27d23fd131daa7",
|
||||
"i686-unknown-linux-gnu-0.11.33":
|
||||
"b5b82a4eedf863f855acba77bb51fc7c1f399b276fdbfdff63edf35bb2a2fdfb",
|
||||
"i686-unknown-linux-musl-0.11.33":
|
||||
"af050631909811e945a9a8b087cc071038bfe25cfa5ff0b7afd17fb468522f43",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.33":
|
||||
"eee721adf229681b98cdd868d4991886bd91527ecbdb6fa778feb79f46d4be75",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.33":
|
||||
"bbb1fc2e25beb8bf0ee4342e70bb0caacb74a7503a02e04cb009aff28a182cfd",
|
||||
"riscv64gc-unknown-linux-musl-0.11.33":
|
||||
"ff4d248fff98c1c6ea12088ae002c07b861278bfc2c41e31ac0ecc1795ddb2f0",
|
||||
"s390x-unknown-linux-gnu-0.11.33":
|
||||
"bbb4740bd2596d2da979ad721258761fa0d4c5bb6ed151356c2146c150edfd21",
|
||||
"x86_64-apple-darwin-0.11.33":
|
||||
"f1b919f740bd6be1d014ff58c4271b0779a32198adfb19ad9c5d1c4d9b2b4301",
|
||||
"x86_64-pc-windows-msvc-0.11.33":
|
||||
"c253ce868ad48d29327b661452ce184c9e333e6d6f5bc8d6fcfbf4dd52b83442",
|
||||
"x86_64-unknown-linux-gnu-0.11.33":
|
||||
"aa9fca823c03289fb6e3460b3dc864f3ea895cafaf9b99247701a67b17d1b018",
|
||||
"x86_64-unknown-linux-musl-0.11.33":
|
||||
"3e95b84d8a8b3390c91584d4fd0c4d326e951da2b8fb15a76719368af2795424",
|
||||
"aarch64-apple-darwin-0.11.32":
|
||||
"ed336d0ba49db8ef89b2b41fffa372ce63bd032f22a56f001c265891aec32829",
|
||||
"aarch64-pc-windows-msvc-0.11.32":
|
||||
"a7427ea0440bb826b6716d1837ff3d173b8e7d496cb09ee8f456b4e023a2fdcd",
|
||||
"aarch64-unknown-linux-gnu-0.11.32":
|
||||
"4d4fa08d95b06642e5800df6a22bd71455f23f988269e18da2847971d8c0bf31",
|
||||
"aarch64-unknown-linux-musl-0.11.32":
|
||||
"d70cdae687feb6aad9a09fe8d686df8c8efaf69a1007fa581379a2025adc10a5",
|
||||
"arm-unknown-linux-musleabihf-0.11.32":
|
||||
"43b1c42483d15e94747699b5f718e829144d2b1b117e1c1658742e73d05527a3",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.32":
|
||||
"593e0f6b92cef908b23e3e3e0da2fd8ae24392afdb70eed05651869fea4a1b02",
|
||||
"armv7-unknown-linux-musleabihf-0.11.32":
|
||||
"cc169fc42b63970cb0cc10a1658c9833e79a5bfde8915ec5f6f5316d9e0cb95f",
|
||||
"i686-pc-windows-msvc-0.11.32":
|
||||
"e54e814a3963af3af607940f142169312d7550d44db8e2daa2bf6c524554ac3c",
|
||||
"i686-unknown-linux-gnu-0.11.32":
|
||||
"d4c53923c44dd060a42dbc6b88e349c86676d779b01603329d8c6b8f916e74cd",
|
||||
"i686-unknown-linux-musl-0.11.32":
|
||||
"7704bf0270e1ef8421608c585e8016411a625314125fce473e01446fdcb1fcf3",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.32":
|
||||
"0afff437b499f5919045fd0095b52dec18d818771f9a6bd0be0ff027b427fb16",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.32":
|
||||
"f10954d2263d407f6ffa6bfdd458d0fc0918f097f851ca3cf4907d4f7ebf2dae",
|
||||
"riscv64gc-unknown-linux-musl-0.11.32":
|
||||
"3c58fc5e82589a77b2409a6c308f1a55361c29130cb3ff239e850d413433f97f",
|
||||
"s390x-unknown-linux-gnu-0.11.32":
|
||||
"9922ba31cd582f4d762ac88a3cfdf339be599063c689c64c36916f04139ed43d",
|
||||
"x86_64-apple-darwin-0.11.32":
|
||||
"77f5ca26c0de20e992a3677a174fe1121ee25c36f9b1434a863f75bf077a05eb",
|
||||
"x86_64-pc-windows-msvc-0.11.32":
|
||||
"acfde570451cfdb8689fa159a138ee805ba4e241c466432750302c86254b0984",
|
||||
"x86_64-unknown-linux-gnu-0.11.32":
|
||||
"aab924fd522efd06f1c5f3b93a243864fc453132c94b2dc49f1371b528a4b967",
|
||||
"x86_64-unknown-linux-musl-0.11.32":
|
||||
"1fd052f196108d87e61fc3d98fe06b4ec758c9a1eb1466a6fd1a436fe45885f2",
|
||||
"aarch64-apple-darwin-0.11.31":
|
||||
"b2b93e82a6786f9c7cb89fd4ca0e859a147b292ae8f6f95784f9742f0efec39e",
|
||||
"aarch64-pc-windows-msvc-0.11.31":
|
||||
"060da44c6474680ce9ed31f866a496cb06979dbea86de8fe24e0f22c48ac992b",
|
||||
"aarch64-unknown-linux-gnu-0.11.31":
|
||||
"d74f23949fd07be4970f293d06ca99d87cd2a78a341c3d7b7fc0df7bc2d8a145",
|
||||
"aarch64-unknown-linux-musl-0.11.31":
|
||||
"49cb5ffce40cc9c85355caa8104f7b61c40a8daac7334f4bc841cad1a7bb359e",
|
||||
"arm-unknown-linux-musleabihf-0.11.31":
|
||||
"0f71f9f2b37d1f82dd225662b3ecb10c3ff114a5828819173015dbc86d2fa0dd",
|
||||
"armv7-unknown-linux-gnueabihf-0.11.31":
|
||||
"de23124095c4df154d3807495b59f1985d8d9460bd70d3de61fef2034756bd61",
|
||||
"armv7-unknown-linux-musleabihf-0.11.31":
|
||||
"9cb5373c1c2e6939077dcc60723a79dc348dd3c9942f2559d19696d16ac34990",
|
||||
"i686-pc-windows-msvc-0.11.31":
|
||||
"4b4d07862b81275ea1a507d5e80774b0f38502493f854cbb585a987c0155d627",
|
||||
"i686-unknown-linux-gnu-0.11.31":
|
||||
"85c71ad3f7c189e77bef0d94bcc3c1cbf8792695efe616dec86a389fbb1ee72b",
|
||||
"i686-unknown-linux-musl-0.11.31":
|
||||
"160a9e19934879492f5b92c8eb132b39ee19858a406c9f3224c05c7b7cd70e59",
|
||||
"powerpc64le-unknown-linux-gnu-0.11.31":
|
||||
"43e21695092a3c58aa3d364c139bbeab838baba662f0e9f37aa78e52305289e3",
|
||||
"riscv64gc-unknown-linux-gnu-0.11.31":
|
||||
"7fa2c496e1ca94c7bcfcc9361f7928c4126d63fc4588dee4c8a2465332b60636",
|
||||
"riscv64gc-unknown-linux-musl-0.11.31":
|
||||
"b300fe07dd1fb98e8608277d7b822ff637e25ee839674645f7ddcbc42199a39b",
|
||||
"s390x-unknown-linux-gnu-0.11.31":
|
||||
"42114face40b846720980dc3f6e2c1b4676d8bf56c8c551586b249be9137cb84",
|
||||
"x86_64-apple-darwin-0.11.31":
|
||||
"33ee6bd62b57fcd77a499deb54e4432dc1e1a2f3d34930ba987ad8b43f9c7bc7",
|
||||
"x86_64-pc-windows-msvc-0.11.31":
|
||||
"410c2fd3126ff621c9450a21cfc200002c7540dc48d130069a8f619cdb0a811b",
|
||||
"x86_64-unknown-linux-gnu-0.11.31":
|
||||
"8cc1cd82d434ec565376f98bd938d4b715b5791a80ff2d3aa78821cf85091b4b",
|
||||
"x86_64-unknown-linux-musl-0.11.31":
|
||||
"89048b7e30a6c459fa7e8f2e91cfdc413dc004dcbddc6c2af5e09df123e3246d",
|
||||
"aarch64-apple-darwin-0.11.30":
|
||||
"9bed3567d496d8dab84ecf7a1247551ac94ef1baaebb7b65df008dd93e9dc357",
|
||||
"aarch64-pc-windows-msvc-0.11.30":
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import * as semver from "semver";
|
||||
import { KNOWN_CHECKSUMS } from "./known-checksums";
|
||||
|
||||
const VERSION_IN_CHECKSUM_KEY_PATTERN =
|
||||
/-(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/;
|
||||
|
||||
export function getLatestKnownVersion(): string {
|
||||
const versions = new Set<string>();
|
||||
|
||||
for (const key of Object.keys(KNOWN_CHECKSUMS)) {
|
||||
const version = key.match(VERSION_IN_CHECKSUM_KEY_PATTERN)?.[1];
|
||||
if (version !== undefined) {
|
||||
versions.add(version);
|
||||
}
|
||||
}
|
||||
|
||||
const latestVersion = [...versions].sort(semver.rcompare)[0];
|
||||
if (!latestVersion) {
|
||||
throw new Error("Could not determine latest known version from checksums.");
|
||||
}
|
||||
|
||||
return latestVersion;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as core from "@actions/core";
|
||||
import * as semver from "semver";
|
||||
import { KNOWN_CHECKSUMS } from "./download/checksum/known-checksums";
|
||||
import { getLatestKnownVersion } from "./download/checksum/known-version";
|
||||
import {
|
||||
type ChecksumEntry,
|
||||
updateChecksums,
|
||||
@@ -12,9 +12,6 @@ import {
|
||||
} from "./download/manifest";
|
||||
import * as log from "./utils/logging";
|
||||
|
||||
const VERSION_IN_CHECKSUM_KEY_PATTERN =
|
||||
/-(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/;
|
||||
|
||||
async function run(): Promise<void> {
|
||||
const checksumFilePath = process.argv.slice(2)[0];
|
||||
if (!checksumFilePath) {
|
||||
@@ -24,7 +21,7 @@ async function run(): Promise<void> {
|
||||
}
|
||||
|
||||
const latestVersion = await getLatestVersion();
|
||||
const latestKnownVersion = getLatestKnownVersionFromChecksums();
|
||||
const latestKnownVersion = getLatestKnownVersion();
|
||||
|
||||
if (semver.lte(latestVersion, latestKnownVersion)) {
|
||||
log.info(
|
||||
@@ -40,28 +37,6 @@ async function run(): Promise<void> {
|
||||
core.setOutput("latest-version", latestVersion);
|
||||
}
|
||||
|
||||
function getLatestKnownVersionFromChecksums(): string {
|
||||
const versions = new Set<string>();
|
||||
|
||||
for (const key of Object.keys(KNOWN_CHECKSUMS)) {
|
||||
const version = extractVersionFromChecksumKey(key);
|
||||
if (version !== undefined) {
|
||||
versions.add(version);
|
||||
}
|
||||
}
|
||||
|
||||
const latestVersion = [...versions].sort(semver.rcompare)[0];
|
||||
if (!latestVersion) {
|
||||
throw new Error("Could not determine latest known version from checksums.");
|
||||
}
|
||||
|
||||
return latestVersion;
|
||||
}
|
||||
|
||||
function extractVersionFromChecksumKey(key: string): string | undefined {
|
||||
return key.match(VERSION_IN_CHECKSUM_KEY_PATTERN)?.[1];
|
||||
}
|
||||
|
||||
function extractChecksumsFromManifest(
|
||||
versions: ManifestVersion[],
|
||||
): ChecksumEntry[] {
|
||||
|
||||
+46
-2
@@ -1,5 +1,7 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import * as core from "@actions/core";
|
||||
import { getPythonVersionFromToolVersions } from "../version/tool-versions-file";
|
||||
import { getConfigValueFromTomlFile } from "./config-file";
|
||||
import * as log from "./logging";
|
||||
|
||||
@@ -51,7 +53,7 @@ export function loadInputs(): SetupInputs {
|
||||
const workingDirectory = core.getInput("working-directory");
|
||||
const version = core.getInput("version");
|
||||
const versionFile = getVersionFile(workingDirectory);
|
||||
const pythonVersion = core.getInput("python-version");
|
||||
const pythonVersion = getPythonVersion(versionFile);
|
||||
const activateEnvironment = core.getBooleanInput("activate-environment");
|
||||
const noProject = core.getBooleanInput("no-project");
|
||||
const venvPath = getVenvPath(workingDirectory, activateEnvironment);
|
||||
@@ -122,6 +124,28 @@ function getVersionFile(workingDirectory: string): string {
|
||||
return versionFileInput;
|
||||
}
|
||||
|
||||
function getPythonVersion(versionFile: string): string {
|
||||
const pythonVersionInput = core.getInput("python-version");
|
||||
if (pythonVersionInput !== "") {
|
||||
return pythonVersionInput;
|
||||
}
|
||||
if (process.env.UV_PYTHON !== undefined && process.env.UV_PYTHON !== "") {
|
||||
return "";
|
||||
}
|
||||
if (versionFile === "" || !fs.existsSync(versionFile)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
try {
|
||||
return getPythonVersionFromToolVersions(versionFile) ?? "";
|
||||
} catch (err) {
|
||||
log.warning(
|
||||
`Error while parsing Python version from ${versionFile}: ${(err as Error).message}`,
|
||||
);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function getVenvPath(
|
||||
workingDirectory: string,
|
||||
activateEnvironment: boolean,
|
||||
@@ -140,7 +164,27 @@ function getVenvPath(
|
||||
function getEnableCache(): boolean {
|
||||
const enableCacheInput = core.getInput("enable-cache");
|
||||
if (enableCacheInput === "auto") {
|
||||
return process.env.RUNNER_ENVIRONMENT === "github-hosted";
|
||||
if (process.env.RUNNER_ENVIRONMENT !== "github-hosted") {
|
||||
return false;
|
||||
}
|
||||
|
||||
const eventName = process.env.GITHUB_EVENT_NAME;
|
||||
const isTagPush =
|
||||
eventName === "push" && process.env.GITHUB_REF?.startsWith("refs/tags/");
|
||||
if (isTagPush) {
|
||||
log.info("Caching is disabled for tag pushes");
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
eventName === "pull_request_target" ||
|
||||
eventName === "workflow_run" ||
|
||||
eventName === "release"
|
||||
) {
|
||||
log.info(`Caching is disabled for the ${eventName} event`);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return enableCacheInput === "true";
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ 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 { getLatestKnownVersion } from "../download/checksum/known-version";
|
||||
import {
|
||||
getAllVersions,
|
||||
getFirstMatchingVersion,
|
||||
@@ -143,6 +144,10 @@ export async function resolveVersion(
|
||||
): Promise<string> {
|
||||
core.debug(`Resolving version: ${versionInput}`);
|
||||
|
||||
if (versionInput.trim() === "latest-known") {
|
||||
return getLatestKnownVersion();
|
||||
}
|
||||
|
||||
const context: ConcreteVersionResolutionContext = {
|
||||
manifestUrl,
|
||||
parsedSpecifier: parseVersionSpecifier(versionInput),
|
||||
|
||||
@@ -4,28 +4,83 @@ import * as core from "@actions/core";
|
||||
export function getUvVersionFromToolVersions(
|
||||
filePath: string,
|
||||
): string | undefined {
|
||||
const versions = getToolVersions(filePath, "uv");
|
||||
if (versions === undefined || versions.length !== 1) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const version = stripVersionPrefix(versions[0]);
|
||||
if (isPath(version)) {
|
||||
core.warning(
|
||||
`The uv version ${versions[0]} in .tool-versions is not supported. Paths are not allowed.`,
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
if (version.startsWith("ref")) {
|
||||
core.warning(
|
||||
"The ref syntax of .tool-versions is not supported. Please use a released version instead.",
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
export function getPythonVersionFromToolVersions(
|
||||
filePath: string,
|
||||
): string | undefined {
|
||||
const versions = getToolVersions(filePath, "python");
|
||||
if (versions === undefined || versions.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
if (versions.length > 1) {
|
||||
core.warning(
|
||||
"Multiple Python versions in .tool-versions are not supported. The Python entry will be ignored.",
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const version = stripVersionPrefix(versions[0]);
|
||||
if (
|
||||
version === "system" ||
|
||||
version.startsWith("ref:") ||
|
||||
version.startsWith("path:") ||
|
||||
isPath(version)
|
||||
) {
|
||||
core.warning(
|
||||
`The Python version ${versions[0]} in .tool-versions is not supported. The Python entry will be ignored.`,
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
function getToolVersions(
|
||||
filePath: string,
|
||||
toolName: string,
|
||||
): string[] | undefined {
|
||||
if (!filePath.endsWith(".tool-versions")) {
|
||||
return undefined;
|
||||
}
|
||||
const fileContents = fs.readFileSync(filePath, "utf8");
|
||||
const lines = fileContents.split("\n");
|
||||
|
||||
for (const line of lines) {
|
||||
// Skip commented lines
|
||||
if (line.trim().startsWith("#")) {
|
||||
for (const line of fileContents.split("\n")) {
|
||||
const content = line.split("#", 1)[0].trim();
|
||||
if (content === "") {
|
||||
continue;
|
||||
}
|
||||
const match = line.match(/^\s*uv\s*v?\s*(?<version>[^\s]+)\s*$/);
|
||||
if (match) {
|
||||
const matchedVersion = match.groups?.version.trim();
|
||||
if (matchedVersion?.startsWith("ref")) {
|
||||
core.warning(
|
||||
"The ref syntax of .tool-versions is not supported. Please use a released version instead.",
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
return matchedVersion;
|
||||
|
||||
const [tool, ...versions] = content.split(/\s+/);
|
||||
if (tool === toolName) {
|
||||
return versions;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function stripVersionPrefix(version: string): string {
|
||||
return version.startsWith("v") ? version.slice(1) : version;
|
||||
}
|
||||
|
||||
function isPath(version: string): boolean {
|
||||
return version.includes("/") || version.includes("\\");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user