Compare commits

..
17 Commits
Author SHA1 Message Date
Kevin StillhammerandGitHub ae62891fec chore(deps): roll up Dependabot updates (#1013)
## Summary

Roll up the remaining dependency changes from:

- #1008 (`@actions/glob` 0.7.0)
- #1009 (`@types/node` 26.1.2)
- #1010 (`js-yaml` 5.2.3)
- #1011 (`@biomejs/biome` 2.5.7)
- #1012 (`@types/semver` 7.8.0)

The Biome schema URL and committed action bundles are updated
accordingly.

## Validation

- `npm run all`

Refs: pi-session 019ff5b2-b439-7431-9595-b965f7fe6119
2026-08-12 13:23:43 +02:00
Kevin StillhammerandGitHub f9cdb47d48 Reject paths in .tool-versions (#1007)
## Summary
- reject path-like uv versions from `.tool-versions`
- reject path-like Python versions from `.tool-versions`
- document the restriction and cover Unix and Windows paths in tests

## Testing
- `npm ci --ignore-scripts`
- `npm run all`

Refs: pi-session 019ff4bb-8b7c-7c4b-8bdf-7c188dfa2e3f
2026-08-12 13:18:20 +02:00
Kevin StillhammerandGitHub 4f6036f71c Require pull requests for Dependabot rollups (#1005)
## Summary

- require the Dependabot rollup skill to commit and push validated
changes
- always create a pull request with the `dependencies` label
- report the created PR and label confirmation

## Testing

- `git diff --check`

Refs: pi-session 019ff0f1-1aee-7691-8a2c-7c708812f7b0
2026-08-11 15:18:43 +02:00
Kevin StillhammerandGitHub 8d6402c9b7 chore(deps): roll up Dependabot updates (#1004)
## Summary

Roll up the remaining dependency changes from Dependabot PRs #997, #998,
#999, #1000, #1001, #1002, and #1003:

- update `github/codeql-action` to 4.37.6
- update `zizmorcore/zizmor-action` to 0.6.2
- update `undici` to 8.10.0
- update `smol-toml` to 1.7.1
- update `@biomejs/biome` and its schema to 2.5.6
- regenerate the published bundles

PRs #905 and #907 were excluded because their requested Jest and pep440
versions are already present on `main`.

## Validation

- `npm run all`
- `actionlint .github/workflows/codeql-analysis.yml
.github/workflows/test.yml`
- `uvx zizmor .github/workflows/codeql-analysis.yml
.github/workflows/test.yml`
- `git diff --check`

Refs: pi-session 019ff0c9-8e00-72d3-99ad-d4383a4c57d4
2026-08-11 15:08:35 +02:00
Kevin StillhammerandGitHub 46f427bd47 Read Python version from .tool-versions (#996)
## Summary
- read the Python version from an explicitly selected `.tool-versions`
file
- preserve `python-version` and existing `UV_PYTHON` precedence
- add parser, input, and workflow coverage and update documentation and
bundled action artifacts

## Validation
- `npm run all`
- `actionlint .github/workflows/test.yml`
- `uvx zizmor .github/workflows/test.yml`

Closes #983

Refs: pi-session 019ff01a-544c-79f3-8f73-a00132af39f5
2026-08-11 14:26:03 +02:00
Kevin StillhammerandGitHub 8ed89c5114 ci: pin Alpine container image (#995)
## Summary

- pin the Alpine test container to the current multi-platform digest for
Alpine 3.24.1
- resolve zizmor's `unpinned-images` finding

## Validation

- `actionlint .github/workflows/test.yml`
- `uvx zizmor .github/workflows/test.yml`
- `docker buildx imagetools inspect
alpine@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b`

Refs: pi-session 019ff01a-544c-79f3-8f73-a00132af39f5
2026-08-11 11:47:08 +02:00
Kevin StillhammerandGitHub 8473c7fea4 chore(deps): roll up Dependabot updates (#994)
## Summary

Roll up the remaining net changes from the open Dependabot updates:

- release-drafter/release-drafter 7.7.0 (#990)
- github/codeql-action 4.37.4 (#987, #988, #989)
- zizmorcore/zizmor-action 0.6.1 (#986)
- @actions/cache 6.2.0 (#975)
- @biomejs/biome 2.5.4 (#974)
- undici 8.7.0 (#973)

The Jest 30.4.2 (#905) and @renovatebot/pep440 5.0.0 (#907) updates are
already present on main and require no additional changes.

This also updates the Biome schema, applies the formatter changes from
Biome 2.5.4, and regenerates the published bundles.

## Testing

- `npm run all`
- `actionlint`
- `git diff --check`

Refs: pi-session 019ff01b-f917-73c1-950e-2966956f263c
2026-08-11 11:27:16 +02:00
Kevin StillhammerandGitHub 18d451d679 Add latest-known version selector (#993)
## Summary

- add `latest-known` as an explicit version selector
- resolve it locally to the newest version in the bundled checksum table
- preserve existing default and `latest` behavior
- document custom-manifest checksum semantics and update published
bundles

## Testing

- `npm ci --ignore-scripts`
- `npm run all` (99 tests passed)

Closes #919

Refs: pi-session 019fed0e-6019-7504-911b-bd9955cbbd49
2026-08-11 11:15:59 +02:00
Kevin StillhammerandGitHub f45168497b Disable automatic caching for sensitive events (#992)
## Summary

- disable `enable-cache: auto` for `pull_request_target`,
`workflow_run`, and `release` events
- disable automatic caching for tag pushes while leaving branch pushes
unchanged
- preserve explicit `enable-cache: true` as an override
- run a `workflow_run` integration fixture with `act` in pull request CI
and verify caching is disabled
- document the behavior and update the published bundles

## Testing

- `npm run all`
- `actionlint .github/workflows/test.yml
__tests__/workflows/workflow-run.yml`
- `uvx zizmor __tests__/workflows/workflow-run.yml`

Closes #984

Refs: pi-session 019fec42-9b26-714e-a359-830ac4401ecd
2026-08-10 18:12:08 +02:00
b68407c192 chore: update known checksums for 0.12.3 (#991)
chore: update known checksums for 0.12.3

Co-authored-by: eifinger <eifinger@users.noreply.github.com>
2026-08-09 10:26:32 +02:00
696e4e1bf2 chore: update known checksums for 0.12.2 (#985)
chore: update known checksums for 0.12.2

Co-authored-by: eifinger <eifinger@users.noreply.github.com>
2026-08-06 15:23:16 +02:00
dependabot[bot]andGitHub 7cd5f7fd2e chore(deps): bump zizmorcore/zizmor-action from 0.5.7 to 0.6.0 (#976)
Signed-off-by: dependabot[bot] <support@github.com>
2026-08-05 09:55:57 -04:00
dependabot[bot]andGitHub d64009a7c5 chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#980)
Signed-off-by: dependabot[bot] <support@github.com>
2026-08-05 09:55:41 -04:00
7e7e21ddc3 chore: update known checksums for 0.12.1 (#982)
chore: update known checksums for 0.12.1

Co-authored-by: eifinger <eifinger@users.noreply.github.com>
2026-08-01 10:26:59 +02:00
094aa226ed chore: update known checksums for 0.12.0 (#981)
chore: update known checksums for 0.12.0

Co-authored-by: eifinger <eifinger@users.noreply.github.com>
2026-07-29 09:17:43 +02:00
d269b9917d chore: update known checksums for 0.11.31/0.11.32 (#972)
chore: update known checksums for 0.11.32

Co-authored-by: eifinger <eifinger@users.noreply.github.com>
2026-07-24 08:30:02 +02:00
c6081965dd docs: update version references to v9.0.0 (#971)
Update `uses: astral-sh/setup-uv@...` references in documentation to
`c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0`.

Co-authored-by: eifinger <eifinger@users.noreply.github.com>
2026-07-21 18:03:39 +02:00
32 changed files with 11303 additions and 3301 deletions
+6 -4
View File
@@ -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
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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:
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+32 -13
View File
@@ -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 }}"
```
+6 -6
View File
@@ -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
View File
@@ -1 +1,2 @@
uv 0.5.15
python 3.13.1t
+112
View File
@@ -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]
+7 -4
View File
@@ -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(
+90 -2
View File
@@ -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();
});
});
+42
View File
@@ -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
View File
@@ -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
View File
@@ -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": {
Generated Vendored
+2439 -467
View File
@@ -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.`
);
Generated Vendored
+5641 -2015
View File
File diff suppressed because it is too large Load Diff
+2126 -524
View File
@@ -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) {
+25 -9
View File
@@ -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
View File
@@ -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
+3 -3
View File
@@ -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
```
+10 -9
View File
@@ -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"
+200 -122
View File
@@ -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
View File
@@ -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"
}
+252
View File
@@ -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":
+23
View File
@@ -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;
}
+2 -27
View File
@@ -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
View File
@@ -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";
}
+5
View File
@@ -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),
+69 -14
View File
@@ -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("\\");
}