diff --git a/.github/actions/prepare-mergeback-branch/action.yml b/.github/actions/prepare-mergeback-branch/action.yml index d4dee99bc..2c57dfc01 100644 --- a/.github/actions/prepare-mergeback-branch/action.yml +++ b/.github/actions/prepare-mergeback-branch/action.yml @@ -91,18 +91,15 @@ runs: Please do the following: - - [ ] Mark the PR as ready for review to trigger the full set of PR checks. + - [ ] Approve running the full set of PR checks. - [ ] Approve and merge the PR. When merging the PR, make sure "Create a merge commit" is selected rather than "Squash and merge" or "Rebase and merge". EOF ) - # PR checks won't be triggered on PRs created by Actions. Therefore mark the PR as draft - # so that a maintainer can take the PR out of draft, thereby triggering the PR checks. gh pr create \ --head "${NEW_BRANCH}" \ --base "${BASE_BRANCH}" \ --title "${pr_title}" \ --body "${pr_body}" \ - --assignee "${GITHUB_ACTOR}" \ - --draft + --assignee "${GITHUB_ACTOR}" diff --git a/.github/update-release-branch.py b/.github/update-release-branch.py index 784a450ef..263512682 100644 --- a/.github/update-release-branch.py +++ b/.github/update-release-branch.py @@ -136,7 +136,7 @@ def open_pr( body.append(f' - [ ] Check that there are not any unexpected commits being merged into the `{target_branch}` branch.') body.append(' - [ ] Ensure the docs team is aware of any documentation changes that need to be released.') - body.append(' - [ ] Mark the PR as ready for review to trigger the full set of PR checks.') + body.append(' - [ ] Approve running the full set of PR checks if you have not pushed any changes.') body.append(' - [ ] Approve and merge this PR. Make sure `Create a merge commit` is selected rather than `Squash and merge` or `Rebase and merge`.') if is_primary_release: @@ -146,9 +146,7 @@ def open_pr( title = f'Merge {source_branch} into {target_branch}' # Create the pull request - # PR checks won't be triggered on PRs created by Actions. Therefore mark the PR as draft so that - # a maintainer can take the PR out of draft, thereby triggering the PR checks. - pr = repo.create_pull(title=title, body='\n'.join(body), head=new_branch_name, base=target_branch, draft=True) + pr = repo.create_pull(title=title, body='\n'.join(body), head=new_branch_name, base=target_branch) print(f'Created PR #{str(pr.number)}') # Assign the conductor diff --git a/.github/workflows/__all-platform-bundle.yml b/.github/workflows/__all-platform-bundle.yml index 648679b7b..d4daf95d8 100644 --- a/.github/workflows/__all-platform-bundle.yml +++ b/.github/workflows/__all-platform-bundle.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__analysis-kinds.yml b/.github/workflows/__analysis-kinds.yml index 504c1fcc6..53c8834ee 100644 --- a/.github/workflows/__analysis-kinds.yml +++ b/.github/workflows/__analysis-kinds.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -72,7 +67,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__analyze-ref-input.yml b/.github/workflows/__analyze-ref-input.yml index 5f4bb4d04..da40def24 100644 --- a/.github/workflows/__analyze-ref-input.yml +++ b/.github/workflows/__analyze-ref-input.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -70,13 +65,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__autobuild-action.yml b/.github/workflows/__autobuild-action.yml index f8cd1275d..2d655b2ee 100644 --- a/.github/workflows/__autobuild-action.yml +++ b/.github/workflows/__autobuild-action.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -64,9 +59,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Prepare test diff --git a/.github/workflows/__autobuild-direct-tracing-with-working-dir.yml b/.github/workflows/__autobuild-direct-tracing-with-working-dir.yml index 01016165b..c5856df04 100644 --- a/.github/workflows/__autobuild-direct-tracing-with-working-dir.yml +++ b/.github/workflows/__autobuild-direct-tracing-with-working-dir.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -66,9 +61,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Java - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 + uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0 with: java-version: ${{ inputs.java-version || '17' }} distribution: temurin diff --git a/.github/workflows/__autobuild-working-dir.yml b/.github/workflows/__autobuild-working-dir.yml index f9718baf7..71dd9d1df 100644 --- a/.github/workflows/__autobuild-working-dir.yml +++ b/.github/workflows/__autobuild-working-dir.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__build-mode-autobuild.yml b/.github/workflows/__build-mode-autobuild.yml index d2f129e84..1ecceee86 100644 --- a/.github/workflows/__build-mode-autobuild.yml +++ b/.github/workflows/__build-mode-autobuild.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -66,9 +61,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Java - uses: actions/setup-java@ad2b38190b15e4d6bdf0c97fb4fca8412226d287 # v5.3.0 + uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0 with: java-version: ${{ inputs.java-version || '17' }} distribution: temurin diff --git a/.github/workflows/__build-mode-manual.yml b/.github/workflows/__build-mode-manual.yml index 515e28223..efc63b640 100644 --- a/.github/workflows/__build-mode-manual.yml +++ b/.github/workflows/__build-mode-manual.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -70,13 +65,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__build-mode-none.yml b/.github/workflows/__build-mode-none.yml index 4aff83588..dc97aa3d9 100644 --- a/.github/workflows/__build-mode-none.yml +++ b/.github/workflows/__build-mode-none.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -52,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__build-mode-rollback.yml b/.github/workflows/__build-mode-rollback.yml index f7c4d090e..4383024f3 100644 --- a/.github/workflows/__build-mode-rollback.yml +++ b/.github/workflows/__build-mode-rollback.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__bundle-from-nightly.yml b/.github/workflows/__bundle-from-nightly.yml index 549969645..9ccb50786 100644 --- a/.github/workflows/__bundle-from-nightly.yml +++ b/.github/workflows/__bundle-from-nightly.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__bundle-from-toolcache.yml b/.github/workflows/__bundle-from-toolcache.yml index 389981985..036262395 100644 --- a/.github/workflows/__bundle-from-toolcache.yml +++ b/.github/workflows/__bundle-from-toolcache.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__bundle-toolcache.yml b/.github/workflows/__bundle-toolcache.yml index 7e83829d6..0bdfd4508 100644 --- a/.github/workflows/__bundle-toolcache.yml +++ b/.github/workflows/__bundle-toolcache.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__bundle-zstd.yml b/.github/workflows/__bundle-zstd.yml index 45cf73a0e..7c1f89cfb 100644 --- a/.github/workflows/__bundle-zstd.yml +++ b/.github/workflows/__bundle-zstd.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__cleanup-db-cluster-dir.yml b/.github/workflows/__cleanup-db-cluster-dir.yml index 249a1f81b..921228910 100644 --- a/.github/workflows/__cleanup-db-cluster-dir.yml +++ b/.github/workflows/__cleanup-db-cluster-dir.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__config-export.yml b/.github/workflows/__config-export.yml index e359764bd..dedf55971 100644 --- a/.github/workflows/__config-export.yml +++ b/.github/workflows/__config-export.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -52,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__config-input.yml b/.github/workflows/__config-input.yml index 2a82e9aa5..a5da2050a 100644 --- a/.github/workflows/__config-input.yml +++ b/.github/workflows/__config-input.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: diff --git a/.github/workflows/__cpp-deptrace-disabled.yml b/.github/workflows/__cpp-deptrace-disabled.yml index 9e4428519..5eba27ed6 100644 --- a/.github/workflows/__cpp-deptrace-disabled.yml +++ b/.github/workflows/__cpp-deptrace-disabled.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__cpp-deptrace-enabled-on-macos.yml b/.github/workflows/__cpp-deptrace-enabled-on-macos.yml index 825d4acd9..d26cd7dca 100644 --- a/.github/workflows/__cpp-deptrace-enabled-on-macos.yml +++ b/.github/workflows/__cpp-deptrace-enabled-on-macos.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -52,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__cpp-deptrace-enabled.yml b/.github/workflows/__cpp-deptrace-enabled.yml index c4ac54f3d..d3b04db26 100644 --- a/.github/workflows/__cpp-deptrace-enabled.yml +++ b/.github/workflows/__cpp-deptrace-enabled.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__diagnostics-export.yml b/.github/workflows/__diagnostics-export.yml index 418517a15..7f788ef0a 100644 --- a/.github/workflows/__diagnostics-export.yml +++ b/.github/workflows/__diagnostics-export.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -52,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__export-file-baseline-information.yml b/.github/workflows/__export-file-baseline-information.yml index 18fcfafe0..8d4cfc8f8 100644 --- a/.github/workflows/__export-file-baseline-information.yml +++ b/.github/workflows/__export-file-baseline-information.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__extractor-ram-threads.yml b/.github/workflows/__extractor-ram-threads.yml index a647124bc..28487388d 100644 --- a/.github/workflows/__extractor-ram-threads.yml +++ b/.github/workflows/__extractor-ram-threads.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__global-proxy.yml b/.github/workflows/__global-proxy.yml index df544fb68..e3ba6ff10 100644 --- a/.github/workflows/__global-proxy.yml +++ b/.github/workflows/__global-proxy.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -52,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__go-custom-queries.yml b/.github/workflows/__go-custom-queries.yml index a59530065..a522b602f 100644 --- a/.github/workflows/__go-custom-queries.yml +++ b/.github/workflows/__go-custom-queries.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -72,13 +67,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__go-indirect-tracing-workaround-diagnostic.yml b/.github/workflows/__go-indirect-tracing-workaround-diagnostic.yml index 2415c7ff8..ced2df598 100644 --- a/.github/workflows/__go-indirect-tracing-workaround-diagnostic.yml +++ b/.github/workflows/__go-indirect-tracing-workaround-diagnostic.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -60,9 +55,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false @@ -78,7 +73,7 @@ jobs: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} # Deliberately change Go after the `init` step - - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: '1.20' - name: Build code diff --git a/.github/workflows/__go-indirect-tracing-workaround-no-file-program.yml b/.github/workflows/__go-indirect-tracing-workaround-no-file-program.yml index 38718fba2..32ebaee34 100644 --- a/.github/workflows/__go-indirect-tracing-workaround-no-file-program.yml +++ b/.github/workflows/__go-indirect-tracing-workaround-no-file-program.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -60,9 +55,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__go-indirect-tracing-workaround.yml b/.github/workflows/__go-indirect-tracing-workaround.yml index 754299d3e..869606326 100644 --- a/.github/workflows/__go-indirect-tracing-workaround.yml +++ b/.github/workflows/__go-indirect-tracing-workaround.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -60,9 +55,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__go-tracing-autobuilder.yml b/.github/workflows/__go-tracing-autobuilder.yml index 5c96e28f1..d8ef15b5a 100644 --- a/.github/workflows/__go-tracing-autobuilder.yml +++ b/.github/workflows/__go-tracing-autobuilder.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -80,9 +75,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__go-tracing-custom-build-steps.yml b/.github/workflows/__go-tracing-custom-build-steps.yml index 7d3ea3aea..077382459 100644 --- a/.github/workflows/__go-tracing-custom-build-steps.yml +++ b/.github/workflows/__go-tracing-custom-build-steps.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -80,9 +75,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__go-tracing-legacy-workflow.yml b/.github/workflows/__go-tracing-legacy-workflow.yml index 68012f0d4..2c4031b38 100644 --- a/.github/workflows/__go-tracing-legacy-workflow.yml +++ b/.github/workflows/__go-tracing-legacy-workflow.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -80,9 +75,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__init-with-registries.yml b/.github/workflows/__init-with-registries.yml index 2c55e14e4..623afdee9 100644 --- a/.github/workflows/__init-with-registries.yml +++ b/.github/workflows/__init-with-registries.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__javascript-source-root.yml b/.github/workflows/__javascript-source-root.yml index 31662fc16..622156ce4 100644 --- a/.github/workflows/__javascript-source-root.yml +++ b/.github/workflows/__javascript-source-root.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__job-run-uuid-sarif.yml b/.github/workflows/__job-run-uuid-sarif.yml index c0fa820e5..989b28fc5 100644 --- a/.github/workflows/__job-run-uuid-sarif.yml +++ b/.github/workflows/__job-run-uuid-sarif.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__language-aliases.yml b/.github/workflows/__language-aliases.yml index fe9ebef9c..3a1656eef 100644 --- a/.github/workflows/__language-aliases.yml +++ b/.github/workflows/__language-aliases.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__local-bundle.yml b/.github/workflows/__local-bundle.yml index a6ab9f523..98d56aa7e 100644 --- a/.github/workflows/__local-bundle.yml +++ b/.github/workflows/__local-bundle.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -70,13 +65,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__multi-language-autodetect.yml b/.github/workflows/__multi-language-autodetect.yml index 4c75f5e5d..e211d0bcd 100644 --- a/.github/workflows/__multi-language-autodetect.yml +++ b/.github/workflows/__multi-language-autodetect.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -104,13 +99,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false @@ -125,7 +120,7 @@ jobs: # We need Python 3.13 for older CLI versions because they are not compatible with Python 3.14 or newer. # See https://github.com/github/codeql-action/pull/3212 if: matrix.version != 'nightly-latest' && matrix.version != 'linked' - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: '3.13' diff --git a/.github/workflows/__overlay-init-fallback.yml b/.github/workflows/__overlay-init-fallback.yml index 554e9defc..9a4ffa71f 100644 --- a/.github/workflows/__overlay-init-fallback.yml +++ b/.github/workflows/__overlay-init-fallback.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -52,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__packaging-codescanning-config-inputs-js.yml b/.github/workflows/__packaging-codescanning-config-inputs-js.yml index 9c7d84229..adfbf27df 100644 --- a/.github/workflows/__packaging-codescanning-config-inputs-js.yml +++ b/.github/workflows/__packaging-codescanning-config-inputs-js.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__packaging-config-inputs-js.yml b/.github/workflows/__packaging-config-inputs-js.yml index c446c7ff3..0e3c0a19f 100644 --- a/.github/workflows/__packaging-config-inputs-js.yml +++ b/.github/workflows/__packaging-config-inputs-js.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__packaging-config-js.yml b/.github/workflows/__packaging-config-js.yml index e550e493d..0d78c4727 100644 --- a/.github/workflows/__packaging-config-js.yml +++ b/.github/workflows/__packaging-config-js.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__packaging-inputs-js.yml b/.github/workflows/__packaging-inputs-js.yml index 7d3450d04..981d3606b 100644 --- a/.github/workflows/__packaging-inputs-js.yml +++ b/.github/workflows/__packaging-inputs-js.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__remote-config.yml b/.github/workflows/__remote-config.yml index 277f9293e..853a3909e 100644 --- a/.github/workflows/__remote-config.yml +++ b/.github/workflows/__remote-config.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -72,13 +67,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__resolve-environment-action.yml b/.github/workflows/__resolve-environment-action.yml index 05125ca10..29a042ae2 100644 --- a/.github/workflows/__resolve-environment-action.yml +++ b/.github/workflows/__resolve-environment-action.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__rubocop-multi-language.yml b/.github/workflows/__rubocop-multi-language.yml index 9bee982be..bc8499d60 100644 --- a/.github/workflows/__rubocop-multi-language.yml +++ b/.github/workflows/__rubocop-multi-language.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test @@ -59,7 +54,7 @@ jobs: use-all-platform-bundle: 'false' setup-kotlin: 'true' - name: Set up Ruby - uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1.312.0 + uses: ruby/setup-ruby@9eb537ca036ebaed86729dcb9309076e4c5c3b74 # v1.314.0 with: ruby-version: 2.6 - name: Install Code Scanning integration diff --git a/.github/workflows/__ruby.yml b/.github/workflows/__ruby.yml index b8d556e53..3558be85e 100644 --- a/.github/workflows/__ruby.yml +++ b/.github/workflows/__ruby.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -60,7 +55,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__rust.yml b/.github/workflows/__rust.yml index 91c3d6618..e74daa4e4 100644 --- a/.github/workflows/__rust.yml +++ b/.github/workflows/__rust.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -58,7 +53,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__split-workflow.yml b/.github/workflows/__split-workflow.yml index 64efae65f..9b49aeceb 100644 --- a/.github/workflows/__split-workflow.yml +++ b/.github/workflows/__split-workflow.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -80,13 +75,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__start-proxy.yml b/.github/workflows/__start-proxy.yml index 7a318b023..7ac2dede3 100644 --- a/.github/workflows/__start-proxy.yml +++ b/.github/workflows/__start-proxy.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__submit-sarif-failure.yml b/.github/workflows/__submit-sarif-failure.yml index 03ea2de23..339d6a07c 100644 --- a/.github/workflows/__submit-sarif-failure.yml +++ b/.github/workflows/__submit-sarif-failure.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -54,7 +49,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test @@ -62,7 +57,7 @@ jobs: version: ${{ matrix.version }} use-all-platform-bundle: 'false' setup-kotlin: 'true' - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: ./init with: languages: javascript diff --git a/.github/workflows/__swift-autobuild.yml b/.github/workflows/__swift-autobuild.yml index 496254703..e59a87e3a 100644 --- a/.github/workflows/__swift-autobuild.yml +++ b/.github/workflows/__swift-autobuild.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -50,7 +45,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/__swift-custom-build.yml b/.github/workflows/__swift-custom-build.yml index 23db3651b..638e2c58f 100644 --- a/.github/workflows/__swift-custom-build.yml +++ b/.github/workflows/__swift-custom-build.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -74,13 +69,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__unset-environment.yml b/.github/workflows/__unset-environment.yml index b519e01dd..263139dc8 100644 --- a/.github/workflows/__unset-environment.yml +++ b/.github/workflows/__unset-environment.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -72,13 +67,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__upload-ref-sha-input.yml b/.github/workflows/__upload-ref-sha-input.yml index 9a1c91dea..e7f942df1 100644 --- a/.github/workflows/__upload-ref-sha-input.yml +++ b/.github/workflows/__upload-ref-sha-input.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -70,13 +65,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__upload-sarif.yml b/.github/workflows/__upload-sarif.yml index 182adbfde..36e5d9f05 100644 --- a/.github/workflows/__upload-sarif.yml +++ b/.github/workflows/__upload-sarif.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -77,13 +72,13 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false diff --git a/.github/workflows/__with-checkout-path.yml b/.github/workflows/__with-checkout-path.yml index 3d6380462..c4a0c9218 100644 --- a/.github/workflows/__with-checkout-path.yml +++ b/.github/workflows/__with-checkout-path.yml @@ -12,12 +12,7 @@ on: branches: - main - releases/v* - pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review + pull_request: {} merge_group: types: - checks_requested @@ -71,13 +66,13 @@ jobs: steps: # This ensures we don't accidentally use the original checkout for any part of the test. - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: ${{ inputs.dotnet-version || '9.x' }} - name: Install Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ${{ inputs.go-version || '>=1.21.0' }} cache: false @@ -96,7 +91,7 @@ jobs: rm -rf ./* .github .git # Check out the actions repo again, but at a different location. # choose an arbitrary SHA so that we can later test that the commit_oid is not from main - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: 474bbf07f9247ffe1856c6a0f94aeeb10e7afee6 path: x/y/z/some-path diff --git a/.github/workflows/check-expected-release-files.yml b/.github/workflows/check-expected-release-files.yml index ee6ad120b..670f14656 100644 --- a/.github/workflows/check-expected-release-files.yml +++ b/.github/workflows/check-expected-release-files.yml @@ -5,9 +5,6 @@ on: paths: - .github/workflows/check-expected-release-files.yml - src/defaults.json - # Run checks on reopened draft PRs to support triggering PR checks on draft PRs that were opened - # by other workflows. - types: [opened, synchronize, reopened, ready_for_review] concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' || false }} @@ -26,7 +23,7 @@ jobs: steps: - name: Checkout CodeQL Action - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Check Expected Release Files run: | bundle_version="$(cat "./src/defaults.json" | jq -r ".bundleVersion")" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index d604bbd80..c5efa1731 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -4,9 +4,6 @@ on: push: branches: [main, releases/v*] pull_request: - # Run checks on reopened draft PRs to support triggering PR checks on draft PRs that were opened - # by other workflows. - types: [opened, synchronize, reopened, ready_for_review] merge_group: types: [checks_requested] schedule: @@ -35,7 +32,7 @@ jobs: security-events: read steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up default CodeQL bundle id: setup-default uses: ./setup-codeql @@ -87,7 +84,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Initialize CodeQL uses: ./init id: init @@ -124,7 +121,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Initialize CodeQL uses: ./init with: diff --git a/.github/workflows/codescanning-config-cli.yml b/.github/workflows/codescanning-config-cli.yml index 3a62bd78d..693be1239 100644 --- a/.github/workflows/codescanning-config-cli.yml +++ b/.github/workflows/codescanning-config-cli.yml @@ -13,11 +13,6 @@ on: - main - releases/v* pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review merge_group: types: [checks_requested] schedule: @@ -59,7 +54,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 diff --git a/.github/workflows/debug-artifacts-failure-safe.yml b/.github/workflows/debug-artifacts-failure-safe.yml index d044d8420..665d0799d 100644 --- a/.github/workflows/debug-artifacts-failure-safe.yml +++ b/.github/workflows/debug-artifacts-failure-safe.yml @@ -9,11 +9,6 @@ on: - main - releases/v* pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review merge_group: types: [checks_requested] schedule: @@ -53,17 +48,17 @@ jobs: - name: Dump GitHub event run: cat "${GITHUB_EVENT_PATH}" - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} - - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ^1.13.1 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: '9.x' - name: Assert best-effort artifact scan completed diff --git a/.github/workflows/debug-artifacts-safe.yml b/.github/workflows/debug-artifacts-safe.yml index 4699436a1..997cfe623 100644 --- a/.github/workflows/debug-artifacts-safe.yml +++ b/.github/workflows/debug-artifacts-safe.yml @@ -8,11 +8,6 @@ on: - main - releases/v* pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review merge_group: types: [checks_requested] schedule: @@ -49,17 +44,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test with: version: ${{ matrix.version }} - - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: ^1.13.1 - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: '9.x' - name: Assert best-effort artifact scan completed diff --git a/.github/workflows/label-pr-size.yml b/.github/workflows/label-pr-size.yml index f688122b2..170ccb074 100644 --- a/.github/workflows/label-pr-size.yml +++ b/.github/workflows/label-pr-size.yml @@ -7,7 +7,6 @@ on: - synchronize - reopened - edited - - ready_for_review permissions: contents: read diff --git a/.github/workflows/post-release-mergeback.yml b/.github/workflows/post-release-mergeback.yml index 313a1e355..b0eed4b71 100644 --- a/.github/workflows/post-release-mergeback.yml +++ b/.github/workflows/post-release-mergeback.yml @@ -44,14 +44,14 @@ jobs: GITHUB_CONTEXT: '${{ toJson(github) }}' run: echo "${GITHUB_CONTEXT}" - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # ensure we have all tags and can push commits - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 24 cache: 'npm' - - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: '3.12' diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index e0c37dbe2..45d38d345 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -3,9 +3,6 @@ name: PR Checks on: push: pull_request: - # Run checks on reopened draft PRs to support triggering PR checks on draft PRs that were opened - # by other workflows. - types: [opened, synchronize, reopened, ready_for_review] merge_group: types: [checks_requested] workflow_dispatch: @@ -42,7 +39,7 @@ jobs: if: runner.os == 'Windows' run: git config --global core.autocrlf false - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 @@ -91,7 +88,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 @@ -164,7 +161,7 @@ jobs: - name: 'Backport: Check out base ref' id: checkout-base if: ${{ startsWith(github.head_ref, 'backport-') }} - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ github.base_ref }} diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 915148e27..8bab54557 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -44,7 +44,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # Need full history for calculation of diffs diff --git a/.github/workflows/publish-immutable-action.yml b/.github/workflows/publish-immutable-action.yml index 3944a81e6..ec9a6518a 100644 --- a/.github/workflows/publish-immutable-action.yml +++ b/.github/workflows/publish-immutable-action.yml @@ -20,7 +20,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Publish immutable release id: publish diff --git a/.github/workflows/python312-windows.yml b/.github/workflows/python312-windows.yml index 76a9c4ff2..5722289fa 100644 --- a/.github/workflows/python312-windows.yml +++ b/.github/workflows/python312-windows.yml @@ -4,9 +4,6 @@ on: push: branches: [main, releases/v*] pull_request: - # Run checks on reopened draft PRs to support triggering PR checks on draft PRs that were opened - # by other workflows. - types: [opened, synchronize, reopened, ready_for_review] merge_group: types: [checks_requested] schedule: @@ -35,11 +32,11 @@ jobs: runs-on: windows-latest steps: - - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: 3.12 - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test uses: ./.github/actions/prepare-test diff --git a/.github/workflows/query-filters.yml b/.github/workflows/query-filters.yml index 3d1f4275c..0343ce2e6 100644 --- a/.github/workflows/query-filters.yml +++ b/.github/workflows/query-filters.yml @@ -6,11 +6,6 @@ on: - main - releases/v* pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review merge_group: types: [checks_requested] schedule: @@ -35,7 +30,7 @@ jobs: contents: read # This permission is needed to allow the GitHub Actions workflow to read the contents of the repository. steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 diff --git a/.github/workflows/rebuild.yml b/.github/workflows/rebuild.yml index f1d74dc8f..39b42d8a0 100644 --- a/.github/workflows/rebuild.yml +++ b/.github/workflows/rebuild.yml @@ -24,7 +24,7 @@ jobs: pull-requests: write # needed to comment on the PR steps: - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 ref: ${{ env.HEAD_REF }} @@ -143,6 +143,5 @@ jobs: PR_NUMBER: ${{ github.event.pull_request.number }} run: | echo "Pushed a commit to rebuild the Action." \ - "Please mark the PR as ready for review to trigger PR checks." | + "Please approve running the PR checks." | gh pr comment --body-file - --repo github/codeql-action "$PR_NUMBER" - gh pr ready --undo --repo github/codeql-action "$PR_NUMBER" diff --git a/.github/workflows/rollback-release.yml b/.github/workflows/rollback-release.yml index e6a9da61f..b830a827d 100644 --- a/.github/workflows/rollback-release.yml +++ b/.github/workflows/rollback-release.yml @@ -52,7 +52,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # Need full history for calculation of diffs diff --git a/.github/workflows/test-codeql-bundle-all.yml b/.github/workflows/test-codeql-bundle-all.yml index c44dafc59..e7cd9aab1 100644 --- a/.github/workflows/test-codeql-bundle-all.yml +++ b/.github/workflows/test-codeql-bundle-all.yml @@ -8,11 +8,6 @@ on: - main - releases/v* pull_request: - types: - - opened - - synchronize - - reopened - - ready_for_review merge_group: types: [checks_requested] schedule: @@ -43,7 +38,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Check out repository - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Prepare test id: prepare-test uses: ./.github/actions/prepare-test @@ -51,7 +46,7 @@ jobs: version: ${{ matrix.version }} use-all-platform-bundle: true - name: Install .NET - uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0 + uses: actions/setup-dotnet@26b0ec14cb23fa6904739307f278c14f94c95bf1 # v5.4.0 with: dotnet-version: '9.x' - id: init diff --git a/.github/workflows/update-bundle.yml b/.github/workflows/update-bundle.yml index 94c79bc56..04402f6db 100644 --- a/.github/workflows/update-bundle.yml +++ b/.github/workflows/update-bundle.yml @@ -33,7 +33,7 @@ jobs: GITHUB_CONTEXT: '${{ toJson(github) }}' run: echo "$GITHUB_CONTEXT" - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Update git config run: | @@ -41,7 +41,7 @@ jobs: git config --global user.name "github-actions[bot]" - name: Set up Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: '3.12' @@ -114,7 +114,6 @@ jobs: --title "Update default bundle to $cli_version" \ --body "$pr_body" \ --assignee "$GITHUB_ACTOR" \ - --draft \ ) echo "CLI_VERSION=$cli_version" | tee -a "$GITHUB_ENV" echo "PR_URL=$pr_url" | tee -a "$GITHUB_ENV" diff --git a/.github/workflows/update-release-branch.yml b/.github/workflows/update-release-branch.yml index bef796574..11e97eeca 100644 --- a/.github/workflows/update-release-branch.yml +++ b/.github/workflows/update-release-branch.yml @@ -38,7 +38,7 @@ jobs: contents: write # needed to push commits pull-requests: write # needed to create pull request steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # Need full history for calculation of diffs - uses: ./.github/actions/release-initialise @@ -101,7 +101,7 @@ jobs: private-key: ${{ secrets.AUTOMATION_PRIVATE_KEY }} - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # Need full history for calculation of diffs token: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/update-supported-enterprise-server-versions.yml b/.github/workflows/update-supported-enterprise-server-versions.yml index 2271ee2ac..ed35ff9ca 100644 --- a/.github/workflows/update-supported-enterprise-server-versions.yml +++ b/.github/workflows/update-supported-enterprise-server-versions.yml @@ -23,12 +23,12 @@ jobs: steps: - name: Setup Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: "3.13" - name: Checkout CodeQL Action - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 @@ -40,7 +40,7 @@ jobs: run: npm ci - name: Checkout Enterprise Releases - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: repository: github/enterprise-releases token: ${{ secrets.ENTERPRISE_RELEASE_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c0d6f84e..a7ecdb018 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th No user facing changes. +## 4.36.3 - 01 Jul 2026 + +No user facing changes. + ## 4.36.2 - 04 Jun 2026 - Cache CodeQL CLI version information across Actions steps. [#3943](https://github.com/github/codeql-action/pull/3943) diff --git a/lib/entry-points.js b/lib/entry-points.js index 97ee9e69b..d3c07ccf2 100644 --- a/lib/entry-points.js +++ b/lib/entry-points.js @@ -12012,13 +12012,13 @@ var require_headers = __commonJS({ var HeadersList = class _HeadersList { /** @type {[string, string][]|null} */ cookies = null; - constructor(init) { - if (init instanceof _HeadersList) { - this[kHeadersMap] = new Map(init[kHeadersMap]); - this[kHeadersSortedMap] = init[kHeadersSortedMap]; - this.cookies = init.cookies === null ? null : [...init.cookies]; + constructor(init2) { + if (init2 instanceof _HeadersList) { + this[kHeadersMap] = new Map(init2[kHeadersMap]); + this[kHeadersSortedMap] = init2[kHeadersSortedMap]; + this.cookies = init2.cookies === null ? null : [...init2.cookies]; } else { - this[kHeadersMap] = new Map(init); + this[kHeadersMap] = new Map(init2); this[kHeadersSortedMap] = null; } } @@ -12177,16 +12177,16 @@ var require_headers = __commonJS({ var Headers = class _Headers { #guard; #headersList; - constructor(init = void 0) { + constructor(init2 = void 0) { webidl.util.markAsUncloneable(this); - if (init === kConstruct) { + if (init2 === kConstruct) { return; } this.#headersList = new HeadersList(); this.#guard = "none"; - if (init !== void 0) { - init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); - fill(this, init); + if (init2 !== void 0) { + init2 = webidl.converters.HeadersInit(init2, "Headers contructor", "init"); + fill(this, init2); } } // https://fetch.spec.whatwg.org/#dom-headers-append @@ -12417,17 +12417,17 @@ var require_response = __commonJS({ return responseObject; } // https://fetch.spec.whatwg.org/#dom-response-json - static json(data, init = {}) { + static json(data, init2 = {}) { webidl.argumentLengthCheck(arguments, 1, "Response.json"); - if (init !== null) { - init = webidl.converters.ResponseInit(init); + if (init2 !== null) { + init2 = webidl.converters.ResponseInit(init2); } const bytes = textEncoder.encode( serializeJavascriptValueToJSONString(data) ); const body = extractBody(bytes); const responseObject = fromInnerResponse(makeResponse({}), "response"); - initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); + initializeResponse(responseObject, init2, { body: body[0], type: "application/json" }); return responseObject; } // Creates a redirect Response that redirects to url with status status. @@ -12451,7 +12451,7 @@ var require_response = __commonJS({ return responseObject; } // https://fetch.spec.whatwg.org/#dom-response - constructor(body = null, init = {}) { + constructor(body = null, init2 = {}) { webidl.util.markAsUncloneable(this); if (body === kConstruct) { return; @@ -12459,7 +12459,7 @@ var require_response = __commonJS({ if (body !== null) { body = webidl.converters.BodyInit(body); } - init = webidl.converters.ResponseInit(init); + init2 = webidl.converters.ResponseInit(init2); this[kState] = makeResponse({}); this[kHeaders] = new Headers(kConstruct); setHeadersGuard(this[kHeaders], "response"); @@ -12469,7 +12469,7 @@ var require_response = __commonJS({ const [extractedBody, type] = extractBody(body); bodyWithType = { body: extractedBody, type }; } - initializeResponse(this, init, bodyWithType); + initializeResponse(this, init2, bodyWithType); } // Returns response’s type, e.g., "cors". get type() { @@ -12588,7 +12588,7 @@ var require_response = __commonJS({ } return newResponse; } - function makeResponse(init) { + function makeResponse(init2) { return { aborted: false, rangeRequested: false, @@ -12599,9 +12599,9 @@ var require_response = __commonJS({ timingInfo: null, cacheState: "", statusText: "", - ...init, - headersList: init?.headersList ? new HeadersList(init?.headersList) : new HeadersList(), - urlList: init?.urlList ? [...init.urlList] : [] + ...init2, + headersList: init2?.headersList ? new HeadersList(init2?.headersList) : new HeadersList(), + urlList: init2?.urlList ? [...init2.urlList] : [] }; } function makeNetworkError(reason) { @@ -12671,23 +12671,23 @@ var require_response = __commonJS({ assert(isCancelled(fetchParams)); return isAborted(fetchParams) ? makeNetworkError(Object.assign(new DOMException("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError(Object.assign(new DOMException("Request was cancelled."), { cause: err })); } - function initializeResponse(response, init, body) { - if (init.status !== null && (init.status < 200 || init.status > 599)) { + function initializeResponse(response, init2, body) { + if (init2.status !== null && (init2.status < 200 || init2.status > 599)) { throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.'); } - if ("statusText" in init && init.statusText != null) { - if (!isValidReasonPhrase(String(init.statusText))) { + if ("statusText" in init2 && init2.statusText != null) { + if (!isValidReasonPhrase(String(init2.statusText))) { throw new TypeError("Invalid statusText"); } } - if ("status" in init && init.status != null) { - response[kState].status = init.status; + if ("status" in init2 && init2.status != null) { + response[kState].status = init2.status; } - if ("statusText" in init && init.statusText != null) { - response[kState].statusText = init.statusText; + if ("statusText" in init2 && init2.statusText != null) { + response[kState].statusText = init2.statusText; } - if ("headers" in init && init.headers != null) { - fill(response[kHeaders], init.headers); + if ("headers" in init2 && init2.headers != null) { + fill(response[kHeaders], init2.headers); } if (body) { if (nullBodyStatus.includes(response.status)) { @@ -12883,7 +12883,7 @@ var require_request2 = __commonJS({ var patchMethodWarning = false; var Request = class _Request { // https://fetch.spec.whatwg.org/#dom-request - constructor(input, init = {}) { + constructor(input, init2 = {}) { webidl.util.markAsUncloneable(this); if (input === kConstruct) { return; @@ -12891,13 +12891,13 @@ var require_request2 = __commonJS({ const prefix = "Request constructor"; webidl.argumentLengthCheck(arguments, 1, prefix); input = webidl.converters.RequestInfo(input, prefix, "input"); - init = webidl.converters.RequestInit(init, prefix, "init"); + init2 = webidl.converters.RequestInit(init2, prefix, "init"); let request3 = null; let fallbackMode = null; const baseUrl = environmentSettingsObject.settingsObject.baseUrl; let signal = null; if (typeof input === "string") { - this[kDispatcher] = init.dispatcher; + this[kDispatcher] = init2.dispatcher; let parsedURL; try { parsedURL = new URL(input, baseUrl); @@ -12912,7 +12912,7 @@ var require_request2 = __commonJS({ request3 = makeRequest({ urlList: [parsedURL] }); fallbackMode = "cors"; } else { - this[kDispatcher] = init.dispatcher || input[kDispatcher]; + this[kDispatcher] = init2.dispatcher || input[kDispatcher]; assert(input instanceof _Request); request3 = input[kState]; signal = input[kSignal]; @@ -12922,10 +12922,10 @@ var require_request2 = __commonJS({ if (request3.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request3.window, origin)) { window2 = request3.window; } - if (init.window != null) { + if (init2.window != null) { throw new TypeError(`'window' option '${window2}' must be null`); } - if ("window" in init) { + if ("window" in init2) { window2 = "no-window"; } request3 = makeRequest({ @@ -12971,7 +12971,7 @@ var require_request2 = __commonJS({ // URL list A clone of request’s URL list. urlList: [...request3.urlList] }); - const initHasKey = Object.keys(init).length !== 0; + const initHasKey = Object.keys(init2).length !== 0; if (initHasKey) { if (request3.mode === "navigate") { request3.mode = "same-origin"; @@ -12984,8 +12984,8 @@ var require_request2 = __commonJS({ request3.url = request3.urlList[request3.urlList.length - 1]; request3.urlList = [request3.url]; } - if (init.referrer !== void 0) { - const referrer = init.referrer; + if (init2.referrer !== void 0) { + const referrer = init2.referrer; if (referrer === "") { request3.referrer = "no-referrer"; } else { @@ -13002,12 +13002,12 @@ var require_request2 = __commonJS({ } } } - if (init.referrerPolicy !== void 0) { - request3.referrerPolicy = init.referrerPolicy; + if (init2.referrerPolicy !== void 0) { + request3.referrerPolicy = init2.referrerPolicy; } let mode; - if (init.mode !== void 0) { - mode = init.mode; + if (init2.mode !== void 0) { + mode = init2.mode; } else { mode = fallbackMode; } @@ -13020,28 +13020,28 @@ var require_request2 = __commonJS({ if (mode != null) { request3.mode = mode; } - if (init.credentials !== void 0) { - request3.credentials = init.credentials; + if (init2.credentials !== void 0) { + request3.credentials = init2.credentials; } - if (init.cache !== void 0) { - request3.cache = init.cache; + if (init2.cache !== void 0) { + request3.cache = init2.cache; } if (request3.cache === "only-if-cached" && request3.mode !== "same-origin") { throw new TypeError( "'only-if-cached' can be set only with 'same-origin' mode" ); } - if (init.redirect !== void 0) { - request3.redirect = init.redirect; + if (init2.redirect !== void 0) { + request3.redirect = init2.redirect; } - if (init.integrity != null) { - request3.integrity = String(init.integrity); + if (init2.integrity != null) { + request3.integrity = String(init2.integrity); } - if (init.keepalive !== void 0) { - request3.keepalive = Boolean(init.keepalive); + if (init2.keepalive !== void 0) { + request3.keepalive = Boolean(init2.keepalive); } - if (init.method !== void 0) { - let method = init.method; + if (init2.method !== void 0) { + let method = init2.method; const mayBeNormalized = normalizedMethodRecords[method]; if (mayBeNormalized !== void 0) { request3.method = mayBeNormalized; @@ -13063,8 +13063,8 @@ var require_request2 = __commonJS({ patchMethodWarning = true; } } - if (init.signal !== void 0) { - signal = init.signal; + if (init2.signal !== void 0) { + signal = init2.signal; } this[kState] = request3; const ac = new AbortController(); @@ -13106,7 +13106,7 @@ var require_request2 = __commonJS({ } if (initHasKey) { const headersList = getHeadersList(this[kHeaders]); - const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); + const headers = init2.headers !== void 0 ? init2.headers : new HeadersList(headersList); headersList.clear(); if (headers instanceof HeadersList) { for (const { name, value } of headers.rawValues()) { @@ -13118,13 +13118,13 @@ var require_request2 = __commonJS({ } } const inputBody = input instanceof _Request ? input[kState].body : null; - if ((init.body != null || inputBody != null) && (request3.method === "GET" || request3.method === "HEAD")) { + if ((init2.body != null || inputBody != null) && (request3.method === "GET" || request3.method === "HEAD")) { throw new TypeError("Request with GET/HEAD method cannot have body."); } let initBody = null; - if (init.body != null) { + if (init2.body != null) { const [extractedBody, contentType] = extractBody( - init.body, + init2.body, request3.keepalive ); initBody = extractedBody; @@ -13134,7 +13134,7 @@ var require_request2 = __commonJS({ } const inputOrInitBody = initBody ?? inputBody; if (inputOrInitBody != null && inputOrInitBody.source == null) { - if (initBody != null && init.duplex == null) { + if (initBody != null && init2.duplex == null) { throw new TypeError("RequestInit: duplex option is required when sending a body."); } if (request3.mode !== "same-origin" && request3.mode !== "cors") { @@ -13329,46 +13329,46 @@ var require_request2 = __commonJS({ } }; mixinBody(Request); - function makeRequest(init) { + function makeRequest(init2) { return { - method: init.method ?? "GET", - localURLsOnly: init.localURLsOnly ?? false, - unsafeRequest: init.unsafeRequest ?? false, - body: init.body ?? null, - client: init.client ?? null, - reservedClient: init.reservedClient ?? null, - replacesClientId: init.replacesClientId ?? "", - window: init.window ?? "client", - keepalive: init.keepalive ?? false, - serviceWorkers: init.serviceWorkers ?? "all", - initiator: init.initiator ?? "", - destination: init.destination ?? "", - priority: init.priority ?? null, - origin: init.origin ?? "client", - policyContainer: init.policyContainer ?? "client", - referrer: init.referrer ?? "client", - referrerPolicy: init.referrerPolicy ?? "", - mode: init.mode ?? "no-cors", - useCORSPreflightFlag: init.useCORSPreflightFlag ?? false, - credentials: init.credentials ?? "same-origin", - useCredentials: init.useCredentials ?? false, - cache: init.cache ?? "default", - redirect: init.redirect ?? "follow", - integrity: init.integrity ?? "", - cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? "", - parserMetadata: init.parserMetadata ?? "", - reloadNavigation: init.reloadNavigation ?? false, - historyNavigation: init.historyNavigation ?? false, - userActivation: init.userActivation ?? false, - taintedOrigin: init.taintedOrigin ?? false, - redirectCount: init.redirectCount ?? 0, - responseTainting: init.responseTainting ?? "basic", - preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false, - done: init.done ?? false, - timingAllowFailed: init.timingAllowFailed ?? false, - urlList: init.urlList, - url: init.urlList[0], - headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() + method: init2.method ?? "GET", + localURLsOnly: init2.localURLsOnly ?? false, + unsafeRequest: init2.unsafeRequest ?? false, + body: init2.body ?? null, + client: init2.client ?? null, + reservedClient: init2.reservedClient ?? null, + replacesClientId: init2.replacesClientId ?? "", + window: init2.window ?? "client", + keepalive: init2.keepalive ?? false, + serviceWorkers: init2.serviceWorkers ?? "all", + initiator: init2.initiator ?? "", + destination: init2.destination ?? "", + priority: init2.priority ?? null, + origin: init2.origin ?? "client", + policyContainer: init2.policyContainer ?? "client", + referrer: init2.referrer ?? "client", + referrerPolicy: init2.referrerPolicy ?? "", + mode: init2.mode ?? "no-cors", + useCORSPreflightFlag: init2.useCORSPreflightFlag ?? false, + credentials: init2.credentials ?? "same-origin", + useCredentials: init2.useCredentials ?? false, + cache: init2.cache ?? "default", + redirect: init2.redirect ?? "follow", + integrity: init2.integrity ?? "", + cryptoGraphicsNonceMetadata: init2.cryptoGraphicsNonceMetadata ?? "", + parserMetadata: init2.parserMetadata ?? "", + reloadNavigation: init2.reloadNavigation ?? false, + historyNavigation: init2.historyNavigation ?? false, + userActivation: init2.userActivation ?? false, + taintedOrigin: init2.taintedOrigin ?? false, + redirectCount: init2.redirectCount ?? 0, + responseTainting: init2.responseTainting ?? "basic", + preventNoCacheCacheControlHeaderModification: init2.preventNoCacheCacheControlHeaderModification ?? false, + done: init2.done ?? false, + timingAllowFailed: init2.timingAllowFailed ?? false, + urlList: init2.urlList, + url: init2.urlList[0], + headersList: init2.headersList ? new HeadersList(init2.headersList) : new HeadersList() }; } function cloneRequest(request3) { @@ -13617,12 +13617,12 @@ var require_fetch = __commonJS({ function handleFetchDone(response) { finalizeAndReportTiming(response, "fetch"); } - function fetch(input, init = void 0) { + function fetch(input, init2 = void 0) { webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); let p = createDeferredPromise(); let requestObject; try { - requestObject = new Request(input, init); + requestObject = new Request(input, init2); } catch (e) { p.reject(e); return p.promise; @@ -16602,9 +16602,9 @@ var require_events = __commonJS({ ports }); } - static createFastMessageEvent(type, init) { - const messageEvent = new _MessageEvent(kConstruct, type, init); - messageEvent.#eventInit = init; + static createFastMessageEvent(type, init2) { + const messageEvent = new _MessageEvent(kConstruct, type, init2); + messageEvent.#eventInit = init2; messageEvent.#eventInit.data ??= null; messageEvent.#eventInit.origin ??= ""; messageEvent.#eventInit.lastEventId ??= ""; @@ -16903,7 +16903,7 @@ var require_util7 = __commonJS({ function isClosed(ws) { return ws[kReadyState] === states.CLOSED; } - function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { + function fireEvent(e, target, eventFactory = (type, init2) => new Event(type, init2), eventInitDict = {}) { const event = eventFactory(e, eventInitDict); target.dispatchEvent(event); } @@ -16981,7 +16981,7 @@ var require_util7 = __commonJS({ response.socket.destroy(); } if (reason) { - fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { + fireEvent("error", ws, (type, init2) => new ErrorEvent(type, init2), { error: new Error(reason), message: reason }); @@ -17289,7 +17289,7 @@ var require_connection = __commonJS({ code = 1006; } ws[kReadyState] = states.CLOSED; - fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { + fireEvent("close", ws, (type, init2) => new CloseEvent(type, init2), { wasClean, code, reason @@ -18832,9 +18832,9 @@ var require_undici = __commonJS({ module2.exports.setGlobalDispatcher = setGlobalDispatcher; module2.exports.getGlobalDispatcher = getGlobalDispatcher; var fetchImpl = require_fetch().fetch; - module2.exports.fetch = async function fetch(init, options = void 0) { + module2.exports.fetch = async function fetch(init2, options = void 0) { try { - return await fetchImpl(init, options); + return await fetchImpl(init2, options); } catch (err) { if (err && typeof err === "object") { Error.captureStackTrace(err); @@ -21409,7 +21409,7 @@ var require_core = __commonJS({ exports2.getBooleanInput = getBooleanInput; exports2.setOutput = setOutput7; exports2.setCommandEcho = setCommandEcho; - exports2.setFailed = setFailed12; + exports2.setFailed = setFailed13; exports2.isDebug = isDebug5; exports2.debug = debug6; exports2.error = error3; @@ -21493,7 +21493,7 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); function setCommandEcho(enabled) { (0, command_1.issue)("echo", enabled ? "on" : "off"); } - function setFailed12(message) { + function setFailed13(message) { process.exitCode = ExitCode.Failure; error3(message); } @@ -27000,15 +27000,16 @@ var require_range = __commonJS({ }; var replaceTilde = (comp, options) => { const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; + const z = options.includePrerelease ? "-0" : ""; return comp.replace(r, (_2, M, m, p, pr) => { debug6("tilde", comp, _2, M, m, p, pr); let ret; if (isX(M)) { ret = ""; } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0`; + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`; } else if (isX(p)) { - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`; } else if (pr) { debug6("replaceTilde pr", pr); ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; @@ -30692,7 +30693,7 @@ var require_internal_glob_options_helper = __commonJS({ })(); Object.defineProperty(exports2, "__esModule", { value: true }); exports2.getOptions = getOptions; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); function getOptions(copy) { const result = { followSymbolicLinks: true, @@ -30704,23 +30705,23 @@ var require_internal_glob_options_helper = __commonJS({ if (copy) { if (typeof copy.followSymbolicLinks === "boolean") { result.followSymbolicLinks = copy.followSymbolicLinks; - core30.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`); + core31.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`); } if (typeof copy.implicitDescendants === "boolean") { result.implicitDescendants = copy.implicitDescendants; - core30.debug(`implicitDescendants '${result.implicitDescendants}'`); + core31.debug(`implicitDescendants '${result.implicitDescendants}'`); } if (typeof copy.matchDirectories === "boolean") { result.matchDirectories = copy.matchDirectories; - core30.debug(`matchDirectories '${result.matchDirectories}'`); + core31.debug(`matchDirectories '${result.matchDirectories}'`); } if (typeof copy.omitBrokenSymbolicLinks === "boolean") { result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks; - core30.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`); + core31.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`); } if (typeof copy.excludeHiddenFiles === "boolean") { result.excludeHiddenFiles = copy.excludeHiddenFiles; - core30.debug(`excludeHiddenFiles '${result.excludeHiddenFiles}'`); + core31.debug(`excludeHiddenFiles '${result.excludeHiddenFiles}'`); } } return result; @@ -32350,7 +32351,7 @@ var require_internal_globber = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.DefaultGlobber = void 0; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var fs31 = __importStar2(require("fs")); var globOptionsHelper = __importStar2(require_internal_glob_options_helper()); var path29 = __importStar2(require("path")); @@ -32403,7 +32404,7 @@ var require_internal_globber = __commonJS({ } const stack = []; for (const searchPath of patternHelper.getSearchPaths(patterns)) { - core30.debug(`Search path '${searchPath}'`); + core31.debug(`Search path '${searchPath}'`); try { yield __await2(fs31.promises.lstat(searchPath)); } catch (err) { @@ -32478,7 +32479,7 @@ var require_internal_globber = __commonJS({ } catch (err) { if (err.code === "ENOENT") { if (options.omitBrokenSymbolicLinks) { - core30.debug(`Broken symlink '${item.path}'`); + core31.debug(`Broken symlink '${item.path}'`); return void 0; } throw new Error(`No information found for the path '${item.path}'. This may indicate a broken symbolic link.`); @@ -32494,7 +32495,7 @@ var require_internal_globber = __commonJS({ traversalChain.pop(); } if (traversalChain.some((x) => x === realPath)) { - core30.debug(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`); + core31.debug(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`); return void 0; } traversalChain.push(realPath); @@ -32597,7 +32598,7 @@ var require_internal_hash_files = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.hashFiles = hashFiles2; var crypto3 = __importStar2(require("crypto")); - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var fs31 = __importStar2(require("fs")); var stream2 = __importStar2(require("stream")); var util3 = __importStar2(require("util")); @@ -32606,7 +32607,7 @@ var require_internal_hash_files = __commonJS({ return __awaiter2(this, arguments, void 0, function* (globber, currentWorkspace, verbose = false) { var _a2, e_1, _b, _c; var _d; - const writeDelegate = verbose ? core30.info : core30.debug; + const writeDelegate = verbose ? core31.info : core31.debug; let hasMatch = false; const githubWorkspace = currentWorkspace ? currentWorkspace : (_d = process.env["GITHUB_WORKSPACE"]) !== null && _d !== void 0 ? _d : process.cwd(); const result = crypto3.createHash("sha256"); @@ -33997,7 +33998,7 @@ var require_cacheUtils = __commonJS({ exports2.assertDefined = assertDefined; exports2.getCacheVersion = getCacheVersion; exports2.getRuntimeToken = getRuntimeToken; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var exec3 = __importStar2(require_exec()); var glob2 = __importStar2(require_glob()); var io9 = __importStar2(require_io()); @@ -34048,7 +34049,7 @@ var require_cacheUtils = __commonJS({ _e = false; const file = _c; const relativeFile = path29.relative(workspace, file).replace(new RegExp(`\\${path29.sep}`, "g"), "/"); - core30.debug(`Matched: ${relativeFile}`); + core31.debug(`Matched: ${relativeFile}`); if (relativeFile === "") { paths.push("."); } else { @@ -34076,7 +34077,7 @@ var require_cacheUtils = __commonJS({ return __awaiter2(this, arguments, void 0, function* (app, additionalArgs = []) { let versionOutput = ""; additionalArgs.push("--version"); - core30.debug(`Checking ${app} ${additionalArgs.join(" ")}`); + core31.debug(`Checking ${app} ${additionalArgs.join(" ")}`); try { yield exec3.exec(`${app}`, additionalArgs, { ignoreReturnCode: true, @@ -34087,10 +34088,10 @@ var require_cacheUtils = __commonJS({ } }); } catch (err) { - core30.debug(err.message); + core31.debug(err.message); } versionOutput = versionOutput.trim(); - core30.debug(versionOutput); + core31.debug(versionOutput); return versionOutput; }); } @@ -34098,7 +34099,7 @@ var require_cacheUtils = __commonJS({ return __awaiter2(this, void 0, void 0, function* () { const versionOutput = yield getVersion("zstd", ["--quiet"]); const version = semver11.clean(versionOutput); - core30.debug(`zstd version: ${version}`); + core31.debug(`zstd version: ${version}`); if (versionOutput === "") { return constants_1.CompressionMethod.Gzip; } else { @@ -37130,7 +37131,7 @@ var require_node = __commonJS({ "node_modules/debug/src/node.js"(exports2, module2) { var tty = require("tty"); var util3 = require("util"); - exports2.init = init; + exports2.init = init2; exports2.log = log; exports2.formatArgs = formatArgs; exports2.save = save; @@ -37279,7 +37280,7 @@ var require_node = __commonJS({ function load2() { return process.env.DEBUG; } - function init(debug6) { + function init2(debug6) { debug6.inspectOpts = {}; const keys = Object.keys(exports2.inspectOpts); for (let i = 0; i < keys.length; i++) { @@ -67055,8 +67056,8 @@ var require_operation = __commonJS({ return processResult ? processResult(response, state) : response; } async function initOperation(inputs) { - const { init, stateProxy, processResult, getOperationStatus, withOperationLocation, setErrorAsResult } = inputs; - const { operationLocation, resourceLocation, metadata, response } = await init(); + const { init: init2, stateProxy, processResult, getOperationStatus, withOperationLocation, setErrorAsResult } = inputs; + const { operationLocation, resourceLocation, metadata, response } = await init2(); if (operationLocation) withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(operationLocation, false); const config = { @@ -67450,7 +67451,7 @@ var require_poller = __commonJS({ }); function buildCreatePoller(inputs) { const { getOperationLocation, getStatusFromInitialResponse, getStatusFromPollResponse, isOperationError, getResourceLocation, getPollingInterval, getError, resolveOnUnsuccessful } = inputs; - return async ({ init, poll }, options) => { + return async ({ init: init2, poll }, options) => { const { processResult, updateState, withOperationLocation: withOperationLocationCallback, intervalInMs = constants_js_1.POLL_INTERVAL_IN_MS, restoreFrom } = options || {}; const stateProxy = createStateProxy(); const withOperationLocation = withOperationLocationCallback ? /* @__PURE__ */ (() => { @@ -67464,7 +67465,7 @@ var require_poller = __commonJS({ }; })() : void 0; const state = restoreFrom ? (0, operation_js_1.deserializeState)(restoreFrom) : await (0, operation_js_1.initOperation)({ - init, + init: init2, stateProxy, processResult, getOperationStatus: getStatusFromInitialResponse, @@ -74396,7 +74397,7 @@ var require_uploadUtils = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.UploadProgress = void 0; exports2.uploadCacheArchiveSDK = uploadCacheArchiveSDK; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var storage_blob_1 = require_commonjs15(); var errors_1 = require_errors2(); var UploadProgress = class { @@ -74438,7 +74439,7 @@ var require_uploadUtils = __commonJS({ const percentage = (100 * (transferredBytes / this.contentLength)).toFixed(1); const elapsedTime = Date.now() - this.startTime; const uploadSpeed = (transferredBytes / (1024 * 1024) / (elapsedTime / 1e3)).toFixed(1); - core30.info(`Sent ${transferredBytes} of ${this.contentLength} (${percentage}%), ${uploadSpeed} MBs/sec`); + core31.info(`Sent ${transferredBytes} of ${this.contentLength} (${percentage}%), ${uploadSpeed} MBs/sec`); if (this.isDone()) { this.displayedComplete = true; } @@ -74495,14 +74496,14 @@ var require_uploadUtils = __commonJS({ }; try { uploadProgress.startDisplayTimer(); - core30.debug(`BlobClient: ${blobClient.name}:${blobClient.accountName}:${blobClient.containerName}`); + core31.debug(`BlobClient: ${blobClient.name}:${blobClient.accountName}:${blobClient.containerName}`); const response = yield blockBlobClient.uploadFile(archivePath, uploadOptions); if (response._response.status >= 400) { throw new errors_1.InvalidResponseError(`uploadCacheArchiveSDK: upload failed with status code ${response._response.status}`); } return response; } catch (error3) { - core30.warning(`uploadCacheArchiveSDK: internal error uploading cache archive: ${error3.message}`); + core31.warning(`uploadCacheArchiveSDK: internal error uploading cache archive: ${error3.message}`); throw error3; } finally { uploadProgress.stopDisplayTimer(); @@ -74587,7 +74588,7 @@ var require_requestUtils = __commonJS({ exports2.retry = retry2; exports2.retryTypedResponse = retryTypedResponse; exports2.retryHttpClientResponse = retryHttpClientResponse; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var http_client_1 = require_lib(); var constants_1 = require_constants7(); function isSuccessStatusCode(statusCode) { @@ -74645,9 +74646,9 @@ var require_requestUtils = __commonJS({ isRetryable = isRetryableStatusCode(statusCode); errorMessage = `Cache service responded with ${statusCode}`; } - core30.debug(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`); + core31.debug(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`); if (!isRetryable) { - core30.debug(`${name} - Error is not retryable`); + core31.debug(`${name} - Error is not retryable`); break; } yield sleep(delay2); @@ -74906,7 +74907,7 @@ var require_downloadUtils = __commonJS({ exports2.downloadCacheHttpClient = downloadCacheHttpClient; exports2.downloadCacheHttpClientConcurrent = downloadCacheHttpClientConcurrent; exports2.downloadCacheStorageSDK = downloadCacheStorageSDK; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var http_client_1 = require_lib(); var storage_blob_1 = require_commonjs15(); var buffer = __importStar2(require("buffer")); @@ -74944,7 +74945,7 @@ var require_downloadUtils = __commonJS({ this.segmentIndex = this.segmentIndex + 1; this.segmentSize = segmentSize; this.receivedBytes = 0; - core30.debug(`Downloading segment at offset ${this.segmentOffset} with length ${this.segmentSize}...`); + core31.debug(`Downloading segment at offset ${this.segmentOffset} with length ${this.segmentSize}...`); } /** * Sets the number of bytes received for the current segment. @@ -74978,7 +74979,7 @@ var require_downloadUtils = __commonJS({ const percentage = (100 * (transferredBytes / this.contentLength)).toFixed(1); const elapsedTime = Date.now() - this.startTime; const downloadSpeed = (transferredBytes / (1024 * 1024) / (elapsedTime / 1e3)).toFixed(1); - core30.info(`Received ${transferredBytes} of ${this.contentLength} (${percentage}%), ${downloadSpeed} MBs/sec`); + core31.info(`Received ${transferredBytes} of ${this.contentLength} (${percentage}%), ${downloadSpeed} MBs/sec`); if (this.isDone()) { this.displayedComplete = true; } @@ -75028,7 +75029,7 @@ var require_downloadUtils = __commonJS({ })); downloadResponse.message.socket.setTimeout(constants_1.SocketTimeout, () => { downloadResponse.message.destroy(); - core30.debug(`Aborting download, socket timed out after ${constants_1.SocketTimeout} ms`); + core31.debug(`Aborting download, socket timed out after ${constants_1.SocketTimeout} ms`); }); yield pipeResponseToStream(downloadResponse, writeStream); const contentLengthHeader = downloadResponse.message.headers["content-length"]; @@ -75039,7 +75040,7 @@ var require_downloadUtils = __commonJS({ throw new Error(`Incomplete download. Expected file size: ${expectedLength}, actual file size: ${actualLength}`); } } else { - core30.debug("Unable to validate download, no Content-Length header"); + core31.debug("Unable to validate download, no Content-Length header"); } }); } @@ -75157,7 +75158,7 @@ var require_downloadUtils = __commonJS({ const properties = yield client.getProperties(); const contentLength = (_a2 = properties.contentLength) !== null && _a2 !== void 0 ? _a2 : -1; if (contentLength < 0) { - core30.debug("Unable to determine content length, downloading file with http-client..."); + core31.debug("Unable to determine content length, downloading file with http-client..."); yield downloadCacheHttpClient(archiveLocation, archivePath); } else { const maxSegmentSize = Math.min(134217728, buffer.constants.MAX_LENGTH); @@ -75247,7 +75248,7 @@ var require_options = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.getUploadOptions = getUploadOptions; exports2.getDownloadOptions = getDownloadOptions; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); function getUploadOptions(copy) { const result = { useAzureSdk: false, @@ -75267,9 +75268,9 @@ var require_options = __commonJS({ } result.uploadConcurrency = !isNaN(Number(process.env["CACHE_UPLOAD_CONCURRENCY"])) ? Math.min(32, Number(process.env["CACHE_UPLOAD_CONCURRENCY"])) : result.uploadConcurrency; result.uploadChunkSize = !isNaN(Number(process.env["CACHE_UPLOAD_CHUNK_SIZE"])) ? Math.min(128 * 1024 * 1024, Number(process.env["CACHE_UPLOAD_CHUNK_SIZE"]) * 1024 * 1024) : result.uploadChunkSize; - core30.debug(`Use Azure SDK: ${result.useAzureSdk}`); - core30.debug(`Upload concurrency: ${result.uploadConcurrency}`); - core30.debug(`Upload chunk size: ${result.uploadChunkSize}`); + core31.debug(`Use Azure SDK: ${result.useAzureSdk}`); + core31.debug(`Upload concurrency: ${result.uploadConcurrency}`); + core31.debug(`Upload chunk size: ${result.uploadChunkSize}`); return result; } function getDownloadOptions(copy) { @@ -75305,12 +75306,12 @@ var require_options = __commonJS({ if (segmentDownloadTimeoutMins && !isNaN(Number(segmentDownloadTimeoutMins)) && isFinite(Number(segmentDownloadTimeoutMins))) { result.segmentTimeoutInMs = Number(segmentDownloadTimeoutMins) * 60 * 1e3; } - core30.debug(`Use Azure SDK: ${result.useAzureSdk}`); - core30.debug(`Download concurrency: ${result.downloadConcurrency}`); - core30.debug(`Request timeout (ms): ${result.timeoutInMs}`); - core30.debug(`Cache segment download timeout mins env var: ${process.env["SEGMENT_DOWNLOAD_TIMEOUT_MINS"]}`); - core30.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`); - core30.debug(`Lookup only: ${result.lookupOnly}`); + core31.debug(`Use Azure SDK: ${result.useAzureSdk}`); + core31.debug(`Download concurrency: ${result.downloadConcurrency}`); + core31.debug(`Request timeout (ms): ${result.timeoutInMs}`); + core31.debug(`Cache segment download timeout mins env var: ${process.env["SEGMENT_DOWNLOAD_TIMEOUT_MINS"]}`); + core31.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`); + core31.debug(`Lookup only: ${result.lookupOnly}`); return result; } } @@ -75356,7 +75357,7 @@ var require_package = __commonJS({ "node_modules/@actions/cache/package.json"(exports2, module2) { module2.exports = { name: "@actions/cache", - version: "5.0.5", + version: "5.1.0", preview: true, description: "Actions cache lib", keywords: [ @@ -75504,7 +75505,7 @@ var require_cacheHttpClient = __commonJS({ exports2.downloadCache = downloadCache; exports2.reserveCache = reserveCache; exports2.saveCache = saveCache5; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var http_client_1 = require_lib(); var auth_1 = require_auth(); var fs31 = __importStar2(require("fs")); @@ -75522,7 +75523,7 @@ var require_cacheHttpClient = __commonJS({ throw new Error("Cache Service Url not found, unable to restore cache."); } const url2 = `${baseUrl}_apis/artifactcache/${resource}`; - core30.debug(`Resource Url: ${url2}`); + core31.debug(`Resource Url: ${url2}`); return url2; } function createAcceptHeader(type, apiVersion) { @@ -75550,7 +75551,7 @@ var require_cacheHttpClient = __commonJS({ return httpClient.getJson(getCacheApiUrl(resource)); })); if (response.statusCode === 204) { - if (core30.isDebug()) { + if (core31.isDebug()) { yield printCachesListForDiagnostics(keys[0], httpClient, version); } return null; @@ -75563,9 +75564,9 @@ var require_cacheHttpClient = __commonJS({ if (!cacheDownloadUrl) { throw new Error("Cache not found."); } - core30.setSecret(cacheDownloadUrl); - core30.debug(`Cache Result:`); - core30.debug(JSON.stringify(cacheResult)); + core31.setSecret(cacheDownloadUrl); + core31.debug(`Cache Result:`); + core31.debug(JSON.stringify(cacheResult)); return cacheResult; }); } @@ -75579,10 +75580,10 @@ var require_cacheHttpClient = __commonJS({ const cacheListResult = response.result; const totalCount = cacheListResult === null || cacheListResult === void 0 ? void 0 : cacheListResult.totalCount; if (totalCount && totalCount > 0) { - core30.debug(`No matching cache found for cache key '${key}', version '${version} and scope ${process.env["GITHUB_REF"]}. There exist one or more cache(s) with similar key but they have different version or scope. See more info on cache matching here: https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key + core31.debug(`No matching cache found for cache key '${key}', version '${version} and scope ${process.env["GITHUB_REF"]}. There exist one or more cache(s) with similar key but they have different version or scope. See more info on cache matching here: https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key Other caches with similar key:`); for (const cacheEntry of (cacheListResult === null || cacheListResult === void 0 ? void 0 : cacheListResult.artifactCaches) || []) { - core30.debug(`Cache Key: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.cacheKey}, Cache Version: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.cacheVersion}, Cache Scope: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.scope}, Cache Created: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.creationTime}`); + core31.debug(`Cache Key: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.cacheKey}, Cache Version: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.cacheVersion}, Cache Scope: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.scope}, Cache Created: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.creationTime}`); } } } @@ -75625,7 +75626,7 @@ Other caches with similar key:`); } function uploadChunk(httpClient, resourceUrl, openStream, start, end) { return __awaiter2(this, void 0, void 0, function* () { - core30.debug(`Uploading chunk of size ${end - start + 1} bytes at offset ${start} with content range: ${getContentRange(start, end)}`); + core31.debug(`Uploading chunk of size ${end - start + 1} bytes at offset ${start} with content range: ${getContentRange(start, end)}`); const additionalHeaders = { "Content-Type": "application/octet-stream", "Content-Range": getContentRange(start, end) @@ -75647,7 +75648,7 @@ Other caches with similar key:`); const concurrency = utils.assertDefined("uploadConcurrency", uploadOptions.uploadConcurrency); const maxChunkSize = utils.assertDefined("uploadChunkSize", uploadOptions.uploadChunkSize); const parallelUploads = [...new Array(concurrency).keys()]; - core30.debug("Awaiting all uploads"); + core31.debug("Awaiting all uploads"); let offset = 0; try { yield Promise.all(parallelUploads.map(() => __awaiter2(this, void 0, void 0, function* () { @@ -75690,16 +75691,16 @@ Other caches with similar key:`); yield (0, uploadUtils_1.uploadCacheArchiveSDK)(signedUploadURL, archivePath, options); } else { const httpClient = createHttpClient(); - core30.debug("Upload cache"); + core31.debug("Upload cache"); yield uploadFile(httpClient, cacheId, archivePath, options); - core30.debug("Commiting cache"); + core31.debug("Commiting cache"); const cacheSize = utils.getArchiveFileSizeInBytes(archivePath); - core30.info(`Cache Size: ~${Math.round(cacheSize / (1024 * 1024))} MB (${cacheSize} B)`); + core31.info(`Cache Size: ~${Math.round(cacheSize / (1024 * 1024))} MB (${cacheSize} B)`); const commitCacheResponse = yield commitCache(httpClient, cacheId, cacheSize); if (!(0, requestUtils_1.isSuccessStatusCode)(commitCacheResponse.statusCode)) { throw new Error(`Cache service responded with ${commitCacheResponse.statusCode} during commit cache.`); } - core30.info("Cache saved successfully"); + core31.info("Cache saved successfully"); } }); } @@ -81178,11 +81179,11 @@ var require_cache4 = __commonJS({ }); }; Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.FinalizeCacheError = exports2.ReserveCacheError = exports2.ValidationError = void 0; + exports2.FinalizeCacheError = exports2.CacheWriteDeniedError = exports2.CACHE_WRITE_DENIED_PREFIX = exports2.ReserveCacheError = exports2.ValidationError = void 0; exports2.isFeatureAvailable = isFeatureAvailable; exports2.restoreCache = restoreCache5; exports2.saveCache = saveCache5; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var path29 = __importStar2(require("path")); var utils = __importStar2(require_cacheUtils()); var cacheHttpClient = __importStar2(require_cacheHttpClient()); @@ -81206,6 +81207,15 @@ var require_cache4 = __commonJS({ } }; exports2.ReserveCacheError = ReserveCacheError2; + exports2.CACHE_WRITE_DENIED_PREFIX = "cache write denied:"; + var CacheWriteDeniedError = class _CacheWriteDeniedError extends ReserveCacheError2 { + constructor(message) { + super(message); + this.name = "CacheWriteDeniedError"; + Object.setPrototypeOf(this, _CacheWriteDeniedError.prototype); + } + }; + exports2.CacheWriteDeniedError = CacheWriteDeniedError; var FinalizeCacheError = class _FinalizeCacheError extends Error { constructor(message) { super(message); @@ -81241,7 +81251,7 @@ var require_cache4 = __commonJS({ function restoreCache5(paths_1, primaryKey_1, restoreKeys_1, options_1) { return __awaiter2(this, arguments, void 0, function* (paths, primaryKey, restoreKeys, options, enableCrossOsArchive = false) { const cacheServiceVersion = (0, config_1.getCacheServiceVersion)(); - core30.debug(`Cache service version: ${cacheServiceVersion}`); + core31.debug(`Cache service version: ${cacheServiceVersion}`); checkPaths(paths); switch (cacheServiceVersion) { case "v2": @@ -81256,8 +81266,8 @@ var require_cache4 = __commonJS({ return __awaiter2(this, arguments, void 0, function* (paths, primaryKey, restoreKeys, options, enableCrossOsArchive = false) { restoreKeys = restoreKeys || []; const keys = [primaryKey, ...restoreKeys]; - core30.debug("Resolved Keys:"); - core30.debug(JSON.stringify(keys)); + core31.debug("Resolved Keys:"); + core31.debug(JSON.stringify(keys)); if (keys.length > 10) { throw new ValidationError(`Key Validation Error: Keys are limited to a maximum of 10.`); } @@ -81275,19 +81285,19 @@ var require_cache4 = __commonJS({ return void 0; } if (options === null || options === void 0 ? void 0 : options.lookupOnly) { - core30.info("Lookup only - skipping download"); + core31.info("Lookup only - skipping download"); return cacheEntry.cacheKey; } archivePath = path29.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod)); - core30.debug(`Archive Path: ${archivePath}`); + core31.debug(`Archive Path: ${archivePath}`); yield cacheHttpClient.downloadCache(cacheEntry.archiveLocation, archivePath, options); - if (core30.isDebug()) { + if (core31.isDebug()) { yield (0, tar_1.listTar)(archivePath, compressionMethod); } const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath); - core30.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); + core31.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); yield (0, tar_1.extractTar)(archivePath, compressionMethod); - core30.info("Cache restored successfully"); + core31.info("Cache restored successfully"); return cacheEntry.cacheKey; } catch (error3) { const typedError = error3; @@ -81295,16 +81305,16 @@ var require_cache4 = __commonJS({ throw error3; } else { if (typedError instanceof http_client_1.HttpClientError && typeof typedError.statusCode === "number" && typedError.statusCode >= 500) { - core30.error(`Failed to restore: ${error3.message}`); + core31.error(`Failed to restore: ${error3.message}`); } else { - core30.warning(`Failed to restore: ${error3.message}`); + core31.warning(`Failed to restore: ${error3.message}`); } } } finally { try { yield utils.unlinkFile(archivePath); } catch (error3) { - core30.debug(`Failed to delete archive: ${error3}`); + core31.debug(`Failed to delete archive: ${error3}`); } } return void 0; @@ -81315,8 +81325,8 @@ var require_cache4 = __commonJS({ options = Object.assign(Object.assign({}, options), { useAzureSdk: true }); restoreKeys = restoreKeys || []; const keys = [primaryKey, ...restoreKeys]; - core30.debug("Resolved Keys:"); - core30.debug(JSON.stringify(keys)); + core31.debug("Resolved Keys:"); + core31.debug(JSON.stringify(keys)); if (keys.length > 10) { throw new ValidationError(`Key Validation Error: Keys are limited to a maximum of 10.`); } @@ -81334,30 +81344,30 @@ var require_cache4 = __commonJS({ }; const response = yield twirpClient.GetCacheEntryDownloadURL(request3); if (!response.ok) { - core30.debug(`Cache not found for version ${request3.version} of keys: ${keys.join(", ")}`); + core31.debug(`Cache not found for version ${request3.version} of keys: ${keys.join(", ")}`); return void 0; } const isRestoreKeyMatch = request3.key !== response.matchedKey; if (isRestoreKeyMatch) { - core30.info(`Cache hit for restore-key: ${response.matchedKey}`); + core31.info(`Cache hit for restore-key: ${response.matchedKey}`); } else { - core30.info(`Cache hit for: ${response.matchedKey}`); + core31.info(`Cache hit for: ${response.matchedKey}`); } if (options === null || options === void 0 ? void 0 : options.lookupOnly) { - core30.info("Lookup only - skipping download"); + core31.info("Lookup only - skipping download"); return response.matchedKey; } archivePath = path29.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod)); - core30.debug(`Archive path: ${archivePath}`); - core30.debug(`Starting download of archive to: ${archivePath}`); + core31.debug(`Archive path: ${archivePath}`); + core31.debug(`Starting download of archive to: ${archivePath}`); yield cacheHttpClient.downloadCache(response.signedDownloadUrl, archivePath, options); const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath); - core30.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); - if (core30.isDebug()) { + core31.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); + if (core31.isDebug()) { yield (0, tar_1.listTar)(archivePath, compressionMethod); } yield (0, tar_1.extractTar)(archivePath, compressionMethod); - core30.info("Cache restored successfully"); + core31.info("Cache restored successfully"); return response.matchedKey; } catch (error3) { const typedError = error3; @@ -81365,9 +81375,9 @@ var require_cache4 = __commonJS({ throw error3; } else { if (typedError instanceof http_client_1.HttpClientError && typeof typedError.statusCode === "number" && typedError.statusCode >= 500) { - core30.error(`Failed to restore: ${error3.message}`); + core31.error(`Failed to restore: ${error3.message}`); } else { - core30.warning(`Failed to restore: ${error3.message}`); + core31.warning(`Failed to restore: ${error3.message}`); } } } finally { @@ -81376,7 +81386,7 @@ var require_cache4 = __commonJS({ yield utils.unlinkFile(archivePath); } } catch (error3) { - core30.debug(`Failed to delete archive: ${error3}`); + core31.debug(`Failed to delete archive: ${error3}`); } } return void 0; @@ -81385,7 +81395,7 @@ var require_cache4 = __commonJS({ function saveCache5(paths_1, key_1, options_1) { return __awaiter2(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) { const cacheServiceVersion = (0, config_1.getCacheServiceVersion)(); - core30.debug(`Cache service version: ${cacheServiceVersion}`); + core31.debug(`Cache service version: ${cacheServiceVersion}`); checkPaths(paths); checkKey(key); switch (cacheServiceVersion) { @@ -81403,26 +81413,26 @@ var require_cache4 = __commonJS({ const compressionMethod = yield utils.getCompressionMethod(); let cacheId = -1; const cachePaths = yield utils.resolvePaths(paths); - core30.debug("Cache Paths:"); - core30.debug(`${JSON.stringify(cachePaths)}`); + core31.debug("Cache Paths:"); + core31.debug(`${JSON.stringify(cachePaths)}`); if (cachePaths.length === 0) { throw new Error(`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`); } const archiveFolder = yield utils.createTempDirectory(); const archivePath = path29.join(archiveFolder, utils.getCacheFileName(compressionMethod)); - core30.debug(`Archive Path: ${archivePath}`); + core31.debug(`Archive Path: ${archivePath}`); try { yield (0, tar_1.createTar)(archiveFolder, cachePaths, compressionMethod); - if (core30.isDebug()) { + if (core31.isDebug()) { yield (0, tar_1.listTar)(archivePath, compressionMethod); } const fileSizeLimit = 10 * 1024 * 1024 * 1024; const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath); - core30.debug(`File Size: ${archiveFileSize}`); + core31.debug(`File Size: ${archiveFileSize}`); if (archiveFileSize > fileSizeLimit && !(0, config_1.isGhes)()) { throw new Error(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 10GB limit, not saving cache.`); } - core30.debug("Reserving Cache"); + core31.debug("Reserving Cache"); const reserveCacheResponse = yield cacheHttpClient.reserveCache(key, paths, { compressionMethod, enableCrossOsArchive, @@ -81433,28 +81443,34 @@ var require_cache4 = __commonJS({ } 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.`); } else { - throw new ReserveCacheError2(`Unable to reserve cache with key ${key}, another job may be creating this cache. More details: ${(_e = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.error) === null || _e === void 0 ? void 0 : _e.message}`); + const detailMessage = (_e = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.error) === null || _e === void 0 ? void 0 : _e.message; + if (detailMessage === null || detailMessage === void 0 ? void 0 : detailMessage.startsWith(exports2.CACHE_WRITE_DENIED_PREFIX)) { + throw new CacheWriteDeniedError(`Unable to reserve cache with key ${key}. More details: ${detailMessage}`); + } + throw new ReserveCacheError2(`Unable to reserve cache with key ${key}, another job may be creating this cache. More details: ${detailMessage}`); } - core30.debug(`Saving Cache (ID: ${cacheId})`); + core31.debug(`Saving Cache (ID: ${cacheId})`); yield cacheHttpClient.saveCache(cacheId, archivePath, "", options); } catch (error3) { const typedError = error3; if (typedError.name === ValidationError.name) { throw error3; + } else if (typedError.name === CacheWriteDeniedError.name) { + core31.warning(`Failed to save: ${typedError.message}`); } else if (typedError.name === ReserveCacheError2.name) { - core30.info(`Failed to save: ${typedError.message}`); + core31.info(`Failed to save: ${typedError.message}`); } else { if (typedError instanceof http_client_1.HttpClientError && typeof typedError.statusCode === "number" && typedError.statusCode >= 500) { - core30.error(`Failed to save: ${typedError.message}`); + core31.error(`Failed to save: ${typedError.message}`); } else { - core30.warning(`Failed to save: ${typedError.message}`); + core31.warning(`Failed to save: ${typedError.message}`); } } } finally { try { yield utils.unlinkFile(archivePath); } catch (error3) { - core30.debug(`Failed to delete archive: ${error3}`); + core31.debug(`Failed to delete archive: ${error3}`); } } return cacheId; @@ -81462,28 +81478,29 @@ var require_cache4 = __commonJS({ } function saveCacheV2(paths_1, key_1, options_1) { return __awaiter2(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) { + var _a2; options = Object.assign(Object.assign({}, options), { uploadChunkSize: 64 * 1024 * 1024, uploadConcurrency: 8, useAzureSdk: true }); const compressionMethod = yield utils.getCompressionMethod(); const twirpClient = cacheTwirpClient.internalCacheTwirpClient(); let cacheId = -1; const cachePaths = yield utils.resolvePaths(paths); - core30.debug("Cache Paths:"); - core30.debug(`${JSON.stringify(cachePaths)}`); + core31.debug("Cache Paths:"); + core31.debug(`${JSON.stringify(cachePaths)}`); if (cachePaths.length === 0) { throw new Error(`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`); } const archiveFolder = yield utils.createTempDirectory(); const archivePath = path29.join(archiveFolder, utils.getCacheFileName(compressionMethod)); - core30.debug(`Archive Path: ${archivePath}`); + core31.debug(`Archive Path: ${archivePath}`); try { yield (0, tar_1.createTar)(archiveFolder, cachePaths, compressionMethod); - if (core30.isDebug()) { + if (core31.isDebug()) { yield (0, tar_1.listTar)(archivePath, compressionMethod); } const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath); - core30.debug(`File Size: ${archiveFileSize}`); + core31.debug(`File Size: ${archiveFileSize}`); options.archiveSizeBytes = archiveFileSize; - core30.debug("Reserving Cache"); + core31.debug("Reserving Cache"); const version = utils.getCacheVersion(paths, compressionMethod, enableCrossOsArchive); const request3 = { key, @@ -81493,17 +81510,21 @@ var require_cache4 = __commonJS({ try { const response = yield twirpClient.CreateCacheEntry(request3); if (!response.ok) { - if (response.message) { - core30.warning(`Cache reservation failed: ${response.message}`); + if (response.message && !response.message.startsWith(exports2.CACHE_WRITE_DENIED_PREFIX)) { + core31.warning(`Cache reservation failed: ${response.message}`); } throw new Error(response.message || "Response was not ok"); } signedUploadUrl = response.signedUploadUrl; } catch (error3) { - core30.debug(`Failed to reserve cache: ${error3}`); + core31.debug(`Failed to reserve cache: ${error3}`); + const errorMessage = (_a2 = error3 === null || error3 === void 0 ? void 0 : error3.message) !== null && _a2 !== void 0 ? _a2 : ""; + if (errorMessage.startsWith(exports2.CACHE_WRITE_DENIED_PREFIX)) { + throw new CacheWriteDeniedError(`Unable to reserve cache with key ${key}. More details: ${errorMessage}`); + } throw new ReserveCacheError2(`Unable to reserve cache with key ${key}, another job may be creating this cache.`); } - core30.debug(`Attempting to upload cache located at: ${archivePath}`); + core31.debug(`Attempting to upload cache located at: ${archivePath}`); yield cacheHttpClient.saveCache(cacheId, archivePath, signedUploadUrl, options); const finalizeRequest = { key, @@ -81511,7 +81532,7 @@ var require_cache4 = __commonJS({ sizeBytes: `${archiveFileSize}` }; const finalizeResponse = yield twirpClient.FinalizeCacheEntryUpload(finalizeRequest); - core30.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`); + core31.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`); if (!finalizeResponse.ok) { if (finalizeResponse.message) { throw new FinalizeCacheError(finalizeResponse.message); @@ -81523,22 +81544,24 @@ var require_cache4 = __commonJS({ const typedError = error3; if (typedError.name === ValidationError.name) { throw error3; + } else if (typedError.name === CacheWriteDeniedError.name) { + core31.warning(`Failed to save: ${typedError.message}`); } else if (typedError.name === ReserveCacheError2.name) { - core30.info(`Failed to save: ${typedError.message}`); + core31.info(`Failed to save: ${typedError.message}`); } else if (typedError.name === FinalizeCacheError.name) { - core30.warning(typedError.message); + core31.warning(typedError.message); } else { if (typedError instanceof http_client_1.HttpClientError && typeof typedError.statusCode === "number" && typedError.statusCode >= 500) { - core30.error(`Failed to save: ${typedError.message}`); + core31.error(`Failed to save: ${typedError.message}`); } else { - core30.warning(`Failed to save: ${typedError.message}`); + core31.warning(`Failed to save: ${typedError.message}`); } } } finally { try { yield utils.unlinkFile(archivePath); } catch (error3) { - core30.debug(`Failed to delete archive: ${error3}`); + core31.debug(`Failed to delete archive: ${error3}`); } } return cacheId; @@ -81765,7 +81788,7 @@ var require_retry_helper = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.RetryHelper = void 0; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var RetryHelper = class { constructor(maxAttempts, minSeconds, maxSeconds) { if (maxAttempts < 1) { @@ -81788,10 +81811,10 @@ var require_retry_helper = __commonJS({ if (isRetryable && !isRetryable(err)) { throw err; } - core30.info(err.message); + core31.info(err.message); } const seconds = this.getSleepAmount(); - core30.info(`Waiting ${seconds} seconds before trying again`); + core31.info(`Waiting ${seconds} seconds before trying again`); yield this.sleep(seconds); attempt++; } @@ -81894,7 +81917,7 @@ var require_tool_cache = __commonJS({ exports2.findFromManifest = findFromManifest; exports2.isExplicitVersion = isExplicitVersion; exports2.evaluateVersions = evaluateVersions; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var io9 = __importStar2(require_io()); var crypto3 = __importStar2(require("crypto")); var fs31 = __importStar2(require("fs")); @@ -81923,8 +81946,8 @@ var require_tool_cache = __commonJS({ return __awaiter2(this, void 0, void 0, function* () { dest = dest || path29.join(_getTempDirectory(), crypto3.randomUUID()); yield io9.mkdirP(path29.dirname(dest)); - core30.debug(`Downloading ${url2}`); - core30.debug(`Destination ${dest}`); + core31.debug(`Downloading ${url2}`); + core31.debug(`Destination ${dest}`); const maxAttempts = 3; const minSeconds = _getGlobal("TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS", 10); const maxSeconds = _getGlobal("TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS", 20); @@ -81950,7 +81973,7 @@ var require_tool_cache = __commonJS({ allowRetries: false }); if (auth2) { - core30.debug("set auth"); + core31.debug("set auth"); if (headers === void 0) { headers = {}; } @@ -81959,7 +81982,7 @@ var require_tool_cache = __commonJS({ const response = yield http.get(url2, headers); if (response.message.statusCode !== 200) { const err = new HTTPError2(response.message.statusCode); - core30.debug(`Failed to download from "${url2}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + core31.debug(`Failed to download from "${url2}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); throw err; } const pipeline = util3.promisify(stream2.pipeline); @@ -81968,16 +81991,16 @@ var require_tool_cache = __commonJS({ let succeeded = false; try { yield pipeline(readStream, fs31.createWriteStream(dest)); - core30.debug("download complete"); + core31.debug("download complete"); succeeded = true; return dest; } finally { if (!succeeded) { - core30.debug("download failed"); + core31.debug("download failed"); try { yield io9.rmRF(dest); } catch (err) { - core30.debug(`Failed to delete '${dest}'. ${err.message}`); + core31.debug(`Failed to delete '${dest}'. ${err.message}`); } } } @@ -81992,7 +82015,7 @@ var require_tool_cache = __commonJS({ process.chdir(dest); if (_7zPath) { try { - const logLevel = core30.isDebug() ? "-bb1" : "-bb0"; + const logLevel = core31.isDebug() ? "-bb1" : "-bb0"; const args = [ "x", // eXtract files with full paths @@ -82045,7 +82068,7 @@ var require_tool_cache = __commonJS({ throw new Error("parameter 'file' is required"); } dest = yield _createExtractFolder(dest); - core30.debug("Checking tar --version"); + core31.debug("Checking tar --version"); let versionOutput = ""; yield (0, exec_1.exec)("tar --version", [], { ignoreReturnCode: true, @@ -82055,7 +82078,7 @@ var require_tool_cache = __commonJS({ stderr: (data) => versionOutput += data.toString() } }); - core30.debug(versionOutput.trim()); + core31.debug(versionOutput.trim()); const isGnuTar = versionOutput.toUpperCase().includes("GNU TAR"); let args; if (flags instanceof Array) { @@ -82063,7 +82086,7 @@ var require_tool_cache = __commonJS({ } else { args = [flags]; } - if (core30.isDebug() && !flags.includes("v")) { + if (core31.isDebug() && !flags.includes("v")) { args.push("-v"); } let destArg = dest; @@ -82094,7 +82117,7 @@ var require_tool_cache = __commonJS({ args = [flags]; } args.push("-x", "-C", dest, "-f", file); - if (core30.isDebug()) { + if (core31.isDebug()) { args.push("-v"); } const xarPath = yield io9.which("xar", true); @@ -82137,7 +82160,7 @@ var require_tool_cache = __commonJS({ "-Command", pwshCommand ]; - core30.debug(`Using pwsh at path: ${pwshPath}`); + core31.debug(`Using pwsh at path: ${pwshPath}`); yield (0, exec_1.exec)(`"${pwshPath}"`, args); } else { const powershellCommand = [ @@ -82157,7 +82180,7 @@ var require_tool_cache = __commonJS({ powershellCommand ]; const powershellPath = yield io9.which("powershell", true); - core30.debug(`Using powershell at path: ${powershellPath}`); + core31.debug(`Using powershell at path: ${powershellPath}`); yield (0, exec_1.exec)(`"${powershellPath}"`, args); } }); @@ -82166,7 +82189,7 @@ var require_tool_cache = __commonJS({ return __awaiter2(this, void 0, void 0, function* () { const unzipPath = yield io9.which("unzip", true); const args = [file]; - if (!core30.isDebug()) { + if (!core31.isDebug()) { args.unshift("-q"); } args.unshift("-o"); @@ -82177,8 +82200,8 @@ var require_tool_cache = __commonJS({ return __awaiter2(this, void 0, void 0, function* () { version = semver11.clean(version) || version; arch2 = arch2 || os7.arch(); - core30.debug(`Caching tool ${tool} ${version} ${arch2}`); - core30.debug(`source dir: ${sourceDir}`); + core31.debug(`Caching tool ${tool} ${version} ${arch2}`); + core31.debug(`source dir: ${sourceDir}`); if (!fs31.statSync(sourceDir).isDirectory()) { throw new Error("sourceDir is not a directory"); } @@ -82195,14 +82218,14 @@ var require_tool_cache = __commonJS({ return __awaiter2(this, void 0, void 0, function* () { version = semver11.clean(version) || version; arch2 = arch2 || os7.arch(); - core30.debug(`Caching tool ${tool} ${version} ${arch2}`); - core30.debug(`source file: ${sourceFile}`); + core31.debug(`Caching tool ${tool} ${version} ${arch2}`); + core31.debug(`source file: ${sourceFile}`); if (!fs31.statSync(sourceFile).isFile()) { throw new Error("sourceFile is not a file"); } const destFolder = yield _createToolPath(tool, version, arch2); const destPath = path29.join(destFolder, targetFile); - core30.debug(`destination file ${destPath}`); + core31.debug(`destination file ${destPath}`); yield io9.cp(sourceFile, destPath); _completeToolPath(tool, version, arch2); return destFolder; @@ -82225,12 +82248,12 @@ var require_tool_cache = __commonJS({ if (versionSpec) { versionSpec = semver11.clean(versionSpec) || ""; const cachePath = path29.join(_getCacheDirectory(), toolName, versionSpec, arch2); - core30.debug(`checking cache: ${cachePath}`); + core31.debug(`checking cache: ${cachePath}`); if (fs31.existsSync(cachePath) && fs31.existsSync(`${cachePath}.complete`)) { - core30.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch2}`); + core31.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch2}`); toolPath = cachePath; } else { - core30.debug("not found"); + core31.debug("not found"); } } return toolPath; @@ -82259,7 +82282,7 @@ var require_tool_cache = __commonJS({ const http = new httpm.HttpClient("tool-cache"); const headers = {}; if (auth2) { - core30.debug("set auth"); + core31.debug("set auth"); headers.authorization = auth2; } const response = yield http.getJson(treeUrl, headers); @@ -82280,7 +82303,7 @@ var require_tool_cache = __commonJS({ try { releases = JSON.parse(versionsRaw); } catch (_a2) { - core30.debug("Invalid json"); + core31.debug("Invalid json"); } } return releases; @@ -82304,7 +82327,7 @@ var require_tool_cache = __commonJS({ function _createToolPath(tool, version, arch2) { return __awaiter2(this, void 0, void 0, function* () { const folderPath = path29.join(_getCacheDirectory(), tool, semver11.clean(version) || version, arch2 || ""); - core30.debug(`destination ${folderPath}`); + core31.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io9.rmRF(folderPath); yield io9.rmRF(markerPath); @@ -82316,18 +82339,18 @@ var require_tool_cache = __commonJS({ const folderPath = path29.join(_getCacheDirectory(), tool, semver11.clean(version) || version, arch2 || ""); const markerPath = `${folderPath}.complete`; fs31.writeFileSync(markerPath, ""); - core30.debug("finished caching tool"); + core31.debug("finished caching tool"); } function isExplicitVersion(versionSpec) { const c = semver11.clean(versionSpec) || ""; - core30.debug(`isExplicit: ${c}`); + core31.debug(`isExplicit: ${c}`); const valid4 = semver11.valid(c) != null; - core30.debug(`explicit? ${valid4}`); + core31.debug(`explicit? ${valid4}`); return valid4; } function evaluateVersions(versions, versionSpec) { let version = ""; - core30.debug(`evaluating ${versions.length} versions`); + core31.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { if (semver11.gt(a, b)) { return 1; @@ -82343,9 +82366,9 @@ var require_tool_cache = __commonJS({ } } if (version) { - core30.debug(`matched: ${version}`); + core31.debug(`matched: ${version}`); } else { - core30.debug("match not found"); + core31.debug("match not found"); } return version; } @@ -87938,14 +87961,14 @@ var require_retention = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.getExpiration = void 0; var generated_1 = require_generated(); - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); function getExpiration(retentionDays) { if (!retentionDays) { return void 0; } const maxRetentionDays = getRetentionDays(); if (maxRetentionDays && maxRetentionDays < retentionDays) { - core30.warning(`Retention days cannot be greater than the maximum allowed retention set within the repository. Using ${maxRetentionDays} instead.`); + core31.warning(`Retention days cannot be greater than the maximum allowed retention set within the repository. Using ${maxRetentionDays} instead.`); retentionDays = maxRetentionDays; } const expirationDate = /* @__PURE__ */ new Date(); @@ -88283,7 +88306,7 @@ var require_util11 = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.maskSecretUrls = exports2.maskSigUrl = exports2.getBackendIdsFromToken = void 0; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var config_1 = require_config2(); var jwt_decode_1 = __importDefault2(require_jwt_decode_cjs()); var core_1 = require_core(); @@ -88310,8 +88333,8 @@ var require_util11 = __commonJS({ workflowRunBackendId: scopeParts[1], workflowJobRunBackendId: scopeParts[2] }; - core30.debug(`Workflow Run Backend ID: ${ids.workflowRunBackendId}`); - core30.debug(`Workflow Job Run Backend ID: ${ids.workflowJobRunBackendId}`); + core31.debug(`Workflow Run Backend ID: ${ids.workflowRunBackendId}`); + core31.debug(`Workflow Job Run Backend ID: ${ids.workflowJobRunBackendId}`); return ids; } throw InvalidJwtError; @@ -88671,7 +88694,7 @@ var require_blob_upload = __commonJS({ exports2.uploadZipToBlobStorage = void 0; var storage_blob_1 = require_commonjs15(); var config_1 = require_config2(); - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var crypto3 = __importStar2(require("crypto")); var stream2 = __importStar2(require("stream")); var errors_1 = require_errors3(); @@ -88697,9 +88720,9 @@ var require_blob_upload = __commonJS({ const bufferSize = (0, config_1.getUploadChunkSize)(); const blobClient = new storage_blob_1.BlobClient(authenticatedUploadURL); const blockBlobClient = blobClient.getBlockBlobClient(); - core30.debug(`Uploading artifact zip to blob storage with maxConcurrency: ${maxConcurrency}, bufferSize: ${bufferSize}`); + core31.debug(`Uploading artifact zip to blob storage with maxConcurrency: ${maxConcurrency}, bufferSize: ${bufferSize}`); const uploadCallback = (progress) => { - core30.info(`Uploaded bytes ${progress.loadedBytes}`); + core31.info(`Uploaded bytes ${progress.loadedBytes}`); uploadByteCount = progress.loadedBytes; lastProgressTime = Date.now(); }; @@ -88713,7 +88736,7 @@ var require_blob_upload = __commonJS({ const hashStream = crypto3.createHash("sha256"); zipUploadStream.pipe(uploadStream); zipUploadStream.pipe(hashStream).setEncoding("hex"); - core30.info("Beginning upload of artifact content to blob storage"); + core31.info("Beginning upload of artifact content to blob storage"); try { yield Promise.race([ blockBlobClient.uploadStream(uploadStream, bufferSize, maxConcurrency, options), @@ -88727,12 +88750,12 @@ var require_blob_upload = __commonJS({ } finally { abortController.abort(); } - core30.info("Finished uploading artifact content to blob storage!"); + core31.info("Finished uploading artifact content to blob storage!"); hashStream.end(); sha256Hash = hashStream.read(); - core30.info(`SHA256 digest of uploaded artifact zip is ${sha256Hash}`); + core31.info(`SHA256 digest of uploaded artifact zip is ${sha256Hash}`); if (uploadByteCount === 0) { - core30.warning(`No data was uploaded to blob storage. Reported upload byte count is 0.`); + core31.warning(`No data was uploaded to blob storage. Reported upload byte count is 0.`); } return { uploadSize: uploadByteCount, @@ -102450,7124 +102473,3025 @@ var require_isPlainObject = __commonJS({ } }); -// node_modules/glob/node_modules/balanced-match/dist/commonjs/index.js -var require_commonjs18 = __commonJS({ - "node_modules/glob/node_modules/balanced-match/dist/commonjs/index.js"(exports2) { +// node_modules/glob/dist/commonjs/index.min.js +var require_index_min = __commonJS({ + "node_modules/glob/dist/commonjs/index.min.js"(exports2) { "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.range = exports2.balanced = void 0; - var balanced2 = (a, b, str) => { - const ma = a instanceof RegExp ? maybeMatch2(a, str) : a; - const mb = b instanceof RegExp ? maybeMatch2(b, str) : b; - const r = ma !== null && mb != null && (0, exports2.range)(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 R = (n, t) => () => (t || n((t = { exports: {} }).exports, t), t.exports); + var Ge = R((Y) => { + "use strict"; + Object.defineProperty(Y, "__esModule", { value: true }); + Y.range = Y.balanced = void 0; + var Gs = (n, t, e) => { + let s = n instanceof RegExp ? Ie(n, e) : n, i = t instanceof RegExp ? Ie(t, e) : t, r = s !== null && i != null && (0, Y.range)(s, i, e); + return r && { start: r[0], end: r[1], pre: e.slice(0, r[0]), body: e.slice(r[0] + s.length, r[1]), post: e.slice(r[1] + i.length) }; }; - }; - exports2.balanced = balanced2; - var maybeMatch2 = (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); + Y.balanced = Gs; + var Ie = (n, t) => { + let e = t.match(n); + return e ? e[0] : null; + }, zs = (n, t, e) => { + let s, i, r, h, o, a = e.indexOf(n), l = e.indexOf(t, a + 1), f = a; + if (a >= 0 && l > 0) { + if (n === t) return [a, l]; + for (s = [], r = e.length; f >= 0 && !o; ) { + if (f === a) s.push(f), a = e.indexOf(n, f + 1); + else if (s.length === 1) { + let c = s.pop(); + c !== void 0 && (o = [c, l]); + } else i = s.pop(), i !== void 0 && i < r && (r = i, h = l), l = e.indexOf(t, f + 1); + f = a < l && a >= 0 ? a : l; } - i = ai < bi && ai >= 0 ? ai : bi; - } - if (begs.length && right !== void 0) { - result = [left, right]; - } - } - return result; - }; - exports2.range = range2; - } -}); - -// node_modules/glob/node_modules/brace-expansion/dist/commonjs/index.js -var require_commonjs19 = __commonJS({ - "node_modules/glob/node_modules/brace-expansion/dist/commonjs/index.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.EXPANSION_MAX = void 0; - exports2.expand = expand3; - var balanced_match_1 = require_commonjs18(); - 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"; - var escSlashPattern2 = new RegExp(escSlash2, "g"); - var escOpenPattern2 = new RegExp(escOpen2, "g"); - var escClosePattern2 = new RegExp(escClose2, "g"); - var escCommaPattern2 = new RegExp(escComma2, "g"); - var escPeriodPattern2 = new RegExp(escPeriod2, "g"); - var slashPattern2 = /\\\\/g; - var openPattern2 = /\\{/g; - var closePattern2 = /\\}/g; - var commaPattern2 = /\\,/g; - var periodPattern2 = /\\\./g; - exports2.EXPANSION_MAX = 1e5; - function numeric2(str) { - return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0); - } - function escapeBraces2(str) { - return str.replace(slashPattern2, escSlash2).replace(openPattern2, escOpen2).replace(closePattern2, escClose2).replace(commaPattern2, escComma2).replace(periodPattern2, escPeriod2); - } - function unescapeBraces2(str) { - return str.replace(escSlashPattern2, "\\").replace(escOpenPattern2, "{").replace(escClosePattern2, "}").replace(escCommaPattern2, ",").replace(escPeriodPattern2, "."); - } - function parseCommaParts2(str) { - if (!str) { - return [""]; - } - const parts = []; - const m = (0, balanced_match_1.balanced)("{", "}", str); - if (!m) { - return str.split(","); - } - const { pre, body, post } = m; - const p = pre.split(","); - p[p.length - 1] += "{" + body + "}"; - const postParts = parseCommaParts2(post); - if (post.length) { - ; - p[p.length - 1] += postParts.shift(); - p.push.apply(p, postParts); - } - parts.push.apply(parts, p); - return parts; - } - function expand3(str, options = {}) { - if (!str) { - return []; - } - const { max = exports2.EXPANSION_MAX } = options; - if (str.slice(0, 2) === "{}") { - str = "\\{\\}" + str.slice(2); - } - return expand_2(escapeBraces2(str), max, true).map(unescapeBraces2); - } - function embrace2(str) { - return "{" + str + "}"; - } - function isPadded2(el) { - return /^-?0\d/.test(el); - } - function lte2(i, y) { - return i <= y; - } - function gte7(i, y) { - return i >= y; - } - function expand_2(str, max, isTop) { - const expansions = []; - const m = (0, balanced_match_1.balanced)("{", "}", str); - if (!m) - return [str]; - const pre = m.pre; - const post = m.post.length ? expand_2(m.post, max, false) : [""]; - if (/\$$/.test(m.pre)) { - for (let k = 0; k < post.length && k < max; k++) { - const expansion = pre + "{" + m.body + "}" + post[k]; - expansions.push(expansion); - } - } else { - 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 + escClose2 + m.post; - return expand_2(str, max, true); - } - return [str]; - } - let n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts2(m.body); - if (n.length === 1 && n[0] !== void 0) { - n = expand_2(n[0], max, false).map(embrace2); - if (n.length === 1) { - return post.map((p) => m.pre + n[0] + p); - } - } - } - let N; - if (isSequence && n[0] !== void 0 && n[1] !== void 0) { - const x = numeric2(n[0]); - const y = numeric2(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(numeric2(n[2])), 1) : 1; - let test = lte2; - const reverse = y < x; - if (reverse) { - incr *= -1; - test = gte7; - } - const pad = n.some(isPadded2); - N = []; - 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; - } - } - } - } - N.push(c); - } - } else { - N = []; - for (let j = 0; j < n.length; j++) { - N.push.apply(N, expand_2(n[j], max, false)); - } - } - for (let j = 0; j < N.length; j++) { - for (let k = 0; k < post.length && expansions.length < max; k++) { - const expansion = pre + N[j] + post[k]; - if (!isTop || isSequence || expansion) { - expansions.push(expansion); - } - } - } - } - return expansions; - } - } -}); - -// node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js -var require_assert_valid_pattern = __commonJS({ - "node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.assertValidPattern = void 0; - var MAX_PATTERN_LENGTH2 = 1024 * 64; - var assertValidPattern2 = (pattern) => { - if (typeof pattern !== "string") { - throw new TypeError("invalid pattern"); - } - if (pattern.length > MAX_PATTERN_LENGTH2) { - throw new TypeError("pattern is too long"); - } - }; - exports2.assertValidPattern = assertValidPattern2; - } -}); - -// node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js -var require_brace_expressions = __commonJS({ - "node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.parseClass = void 0; - var posixClasses2 = { - "[: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 braceEscape2 = (s) => s.replace(/[[\]\\-]/g, "\\$&"); - var regexpEscape2 = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - var rangesToString2 = (ranges) => ranges.join(""); - var parseClass2 = (glob2, position) => { - const pos = position; - if (glob2.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 negate2 = false; - let endPos = pos; - let rangeStart = ""; - WHILE: while (i < glob2.length) { - const c = glob2.charAt(i); - if ((c === "!" || c === "^") && i === pos + 1) { - negate2 = 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(posixClasses2)) { - if (glob2.startsWith(cls, i)) { - if (rangeStart) { - return ["$.", false, glob2.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(braceEscape2(rangeStart) + "-" + braceEscape2(c)); - } else if (c === rangeStart) { - ranges.push(braceEscape2(c)); - } - rangeStart = ""; - i++; - continue; - } - if (glob2.startsWith("-]", i + 1)) { - ranges.push(braceEscape2(c + "-")); - i += 2; - continue; - } - if (glob2.startsWith("-", i + 1)) { - rangeStart = c; - i += 2; - continue; - } - ranges.push(braceEscape2(c)); - i++; - } - if (endPos < i) { - return ["", false, 0, false]; - } - if (!ranges.length && !negs.length) { - return ["$.", false, glob2.length - pos, true]; - } - if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate2) { - const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; - return [regexpEscape2(r), false, endPos - pos, false]; - } - const sranges = "[" + (negate2 ? "^" : "") + rangesToString2(ranges) + "]"; - const snegs = "[" + (negate2 ? "" : "^") + rangesToString2(negs) + "]"; - const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs; - return [comb, uflag, endPos - pos, true]; - }; - exports2.parseClass = parseClass2; - } -}); - -// node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js -var require_unescape = __commonJS({ - "node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.unescape = void 0; - var unescape3 = (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"); - }; - exports2.unescape = unescape3; - } -}); - -// node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js -var require_ast = __commonJS({ - "node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js"(exports2) { - "use strict"; - var _a2; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.AST = void 0; - var brace_expressions_js_1 = require_brace_expressions(); - var unescape_js_1 = require_unescape(); - var types2 = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); - var isExtglobType2 = (c) => types2.has(c); - var isExtglobAST2 = (c) => isExtglobType2(c.type); - var adoptionMap2 = /* @__PURE__ */ new Map([ - ["!", ["@"]], - ["?", ["?", "@"]], - ["@", ["@"]], - ["*", ["*", "+", "?", "@"]], - ["+", ["+", "@"]] - ]); - var adoptionWithSpaceMap2 = /* @__PURE__ */ new Map([ - ["!", ["?"]], - ["@", ["?"]], - ["+", ["?", "*"]] - ]); - var adoptionAnyMap2 = /* @__PURE__ */ new Map([ - ["!", ["?", "@"]], - ["?", ["?", "@"]], - ["@", ["?", "@"]], - ["*", ["*", "+", "?", "@"]], - ["+", ["+", "@", "?", "*"]] - ]); - var usurpMap2 = /* @__PURE__ */ new Map([ - ["!", /* @__PURE__ */ new Map([["!", "@"]])], - [ - "?", - /* @__PURE__ */ new Map([ - ["*", "*"], - ["+", "*"] - ]) - ], - [ - "@", - /* @__PURE__ */ new Map([ - ["!", "!"], - ["?", "?"], - ["@", "@"], - ["*", "*"], - ["+", "+"] - ]) - ], - [ - "+", - /* @__PURE__ */ new Map([ - ["?", "*"], - ["*", "*"] - ]) - ] - ]); - var startNoTraversal2 = "(?!(?:^|/)\\.\\.?(?:$|/))"; - var startNoDot2 = "(?!\\.)"; - var addPatternStart2 = /* @__PURE__ */ new Set(["[", "."]); - var justDots2 = /* @__PURE__ */ new Set(["..", "."]); - var reSpecials2 = new Set("().*{}+?[]^$\\!"); - var regExpEscape3 = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - var qmark3 = "[^/]"; - var star3 = qmark3 + "*?"; - var starNoEmpty2 = qmark3 + "+?"; - var ID2 = 0; - var AST2 = 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 = ++ID2; - 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() { - if (this.#toString !== void 0) - return this.#toString; - if (!this.type) { - return this.#toString = this.#parts.map((p) => String(p)).join(""); - } else { - return 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 _a2 && 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 _a2 && 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 _a2(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 && isExtglobType2(c) && str.charAt(i2) === "(" && extDepth <= maxDepth; - if (doRecurse) { - ast.push(acc2); - acc2 = ""; - const ext2 = new _a2(c, ast); - i2 = _a2.#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 _a2(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 && isExtglobType2(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 _a2(c, part); - part.push(ext2); - i = _a2.#parseAST(str, ext2, i, opt, extDepth + depthAdd); - continue; - } - if (c === "|") { - part.push(acc); - acc = ""; - parts.push(part); - part = new _a2(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(child) { - return this.#canAdopt(child, adoptionWithSpaceMap2); - } - #canAdopt(child, map = adoptionMap2) { - if (!child || typeof child !== "object" || child.type !== null || child.#parts.length !== 1 || this.type === null) { - return false; - } - const gc = child.#parts[0]; - if (!gc || typeof gc !== "object" || gc.type === null) { - return false; - } - return this.#canAdoptType(gc.type, map); - } - #canAdoptType(c, map = adoptionAnyMap2) { - return !!map.get(this.type)?.includes(c); - } - #adoptWithSpace(child, index2) { - const gc = child.#parts[0]; - const blank = new _a2(null, gc, this.options); - blank.#parts.push(""); - gc.push(blank); - this.#adopt(child, index2); - } - #adopt(child, index2) { - const gc = child.#parts[0]; - this.#parts.splice(index2, 1, ...gc.#parts); - for (const p of gc.#parts) { - if (typeof p === "object") - p.#parent = this; - } - this.#toString = void 0; - } - #canUsurpType(c) { - const m = usurpMap2.get(this.type); - return !!m?.has(c); - } - #canUsurp(child) { - if (!child || typeof child !== "object" || child.type !== null || child.#parts.length !== 1 || this.type === null || this.#parts.length !== 1) { - return false; - } - const gc = child.#parts[0]; - if (!gc || typeof gc !== "object" || gc.type === null) { - return false; - } - return this.#canUsurpType(gc.type); - } - #usurp(child) { - const m = usurpMap2.get(this.type); - const gc = child.#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 _a2(null, void 0, options); - _a2.#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 glob2 = this.toString(); - const [re, body, hasMagic, uflag] = this.toRegExpSource(); - const anyMagic = hasMagic || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob2.toUpperCase() !== glob2.toLowerCase(); - if (!anyMagic) { - return body; - } - const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : ""); - return Object.assign(new RegExp(`^${re}$`, flags), { - _src: re, - _glob: glob2 - }); - } - 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 (!isExtglobAST2(this)) { - const noEmpty = this.isStart() && this.isEnd() && !this.#parts.some((s) => typeof s !== "string"); - const src = this.#parts.map((p) => { - const [re, _2, hasMagic, uflag] = typeof p === "string" ? _a2.#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 && justDots2.has(this.#parts[0]); - if (!dotTravAllowed) { - const aps = addPatternStart2; - 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 ? startNoTraversal2 : needNoDot ? startNoDot2 : ""; - } - } - } - let end = ""; - if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") { - end = "(?:$|\\/)"; - } - const final2 = start2 + src + end; - return [ - final2, - (0, unescape_js_1.unescape)(src), - this.#hasMagic = !!this.#hasMagic, - this.#uflag - ]; - } - const repeated = this.type === "*" || this.type === "+"; - const start = this.type === "!" ? "(?:(?!(?:" : "(?:"; - let body = this.#partsToRegExp(dot); - if (this.isStart() && this.isEnd() && !body && this.type !== "!") { - const s = this.toString(); - const me = this; - me.#parts = [s]; - me.type = null; - me.#hasMagic = void 0; - return [s, (0, unescape_js_1.unescape)(this.toString()), false, false]; - } - let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot2 ? "" : this.#partsToRegExp(true); - if (bodyDotAllowed === body) { - bodyDotAllowed = ""; - } - if (bodyDotAllowed) { - body = `(?:${body})(?:${bodyDotAllowed})*?`; - } - let final = ""; - if (this.type === "!" && this.#emptyExt) { - final = (this.isStart() && !dot ? startNoDot2 : "") + starNoEmpty2; - } else { - const close = this.type === "!" ? ( - // !() must match something,but !(x) can match '' - "))" + (this.isStart() && !dot && !allowDot ? startNoDot2 : "") + star3 + ")" - ) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`; - final = start + body + close; - } - return [ - final, - (0, unescape_js_1.unescape)(body), - this.#hasMagic = !!this.#hasMagic, - this.#uflag - ]; - } - #flatten() { - if (!isExtglobAST2(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, _2, _hasMagic, uflag] = p.toRegExpSource(dot); - this.#uflag = this.#uflag || uflag; - return re; - }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|"); - } - static #parseGlob(glob2, hasMagic, noEmpty = false) { - let escaping = false; - let re = ""; - let uflag = false; - let inStar = false; - for (let i = 0; i < glob2.length; i++) { - const c = glob2.charAt(i); - if (escaping) { - escaping = false; - re += (reSpecials2.has(c) ? "\\" : "") + c; - continue; - } - if (c === "*") { - if (inStar) - continue; - inStar = true; - re += noEmpty && /^[*]+$/.test(glob2) ? starNoEmpty2 : star3; - hasMagic = true; - continue; - } else { - inStar = false; - } - if (c === "\\") { - if (i === glob2.length - 1) { - re += "\\\\"; - } else { - escaping = true; - } - continue; - } - if (c === "[") { - const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob2, i); - if (consumed) { - re += src; - uflag = uflag || needUflag; - i += consumed - 1; - hasMagic = hasMagic || magic; - continue; - } - } - if (c === "?") { - re += qmark3; - hasMagic = true; - continue; - } - re += regExpEscape3(c); - } - return [re, (0, unescape_js_1.unescape)(glob2), !!hasMagic, uflag]; - } - }; - exports2.AST = AST2; - _a2 = AST2; - } -}); - -// node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js -var require_escape = __commonJS({ - "node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.escape = void 0; - var escape3 = (s, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => { - if (magicalBraces) { - return windowsPathsNoEscape ? s.replace(/[?*()[\]{}]/g, "[$&]") : s.replace(/[?*()[\]\\{}]/g, "\\$&"); - } - return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&"); - }; - exports2.escape = escape3; - } -}); - -// node_modules/glob/node_modules/minimatch/dist/commonjs/index.js -var require_commonjs20 = __commonJS({ - "node_modules/glob/node_modules/minimatch/dist/commonjs/index.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.unescape = exports2.escape = exports2.AST = exports2.Minimatch = exports2.match = exports2.makeRe = exports2.braceExpand = exports2.defaults = exports2.filter = exports2.GLOBSTAR = exports2.sep = exports2.minimatch = void 0; - var brace_expansion_1 = require_commonjs19(); - var assert_valid_pattern_js_1 = require_assert_valid_pattern(); - var ast_js_1 = require_ast(); - var escape_js_1 = require_escape(); - var unescape_js_1 = require_unescape(); - var minimatch2 = (p, pattern, options = {}) => { - (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); - if (!options.nocomment && pattern.charAt(0) === "#") { - return false; - } - return new Minimatch2(pattern, options).match(p); - }; - exports2.minimatch = minimatch2; - var starDotExtRE2 = /^\*+([^+@!?\*\[\(]*)$/; - var starDotExtTest2 = (ext3) => (f) => !f.startsWith(".") && f.endsWith(ext3); - var starDotExtTestDot2 = (ext3) => (f) => f.endsWith(ext3); - var starDotExtTestNocase2 = (ext3) => { - ext3 = ext3.toLowerCase(); - return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext3); - }; - var starDotExtTestNocaseDot2 = (ext3) => { - ext3 = ext3.toLowerCase(); - return (f) => f.toLowerCase().endsWith(ext3); - }; - var starDotStarRE2 = /^\*+\.\*+$/; - var starDotStarTest2 = (f) => !f.startsWith(".") && f.includes("."); - var starDotStarTestDot2 = (f) => f !== "." && f !== ".." && f.includes("."); - var dotStarRE2 = /^\.\*+$/; - var dotStarTest2 = (f) => f !== "." && f !== ".." && f.startsWith("."); - var starRE2 = /^\*+$/; - var starTest2 = (f) => f.length !== 0 && !f.startsWith("."); - var starTestDot2 = (f) => f.length !== 0 && f !== "." && f !== ".."; - var qmarksRE2 = /^\?+([^+@!?\*\[\(]*)?$/; - var qmarksTestNocase2 = ([$0, ext3 = ""]) => { - const noext = qmarksTestNoExt2([$0]); - if (!ext3) - return noext; - ext3 = ext3.toLowerCase(); - return (f) => noext(f) && f.toLowerCase().endsWith(ext3); - }; - var qmarksTestNocaseDot2 = ([$0, ext3 = ""]) => { - const noext = qmarksTestNoExtDot2([$0]); - if (!ext3) - return noext; - ext3 = ext3.toLowerCase(); - return (f) => noext(f) && f.toLowerCase().endsWith(ext3); - }; - var qmarksTestDot2 = ([$0, ext3 = ""]) => { - const noext = qmarksTestNoExtDot2([$0]); - return !ext3 ? noext : (f) => noext(f) && f.endsWith(ext3); - }; - var qmarksTest2 = ([$0, ext3 = ""]) => { - const noext = qmarksTestNoExt2([$0]); - return !ext3 ? noext : (f) => noext(f) && f.endsWith(ext3); - }; - var qmarksTestNoExt2 = ([$0]) => { - const len = $0.length; - return (f) => f.length === len && !f.startsWith("."); - }; - var qmarksTestNoExtDot2 = ([$0]) => { - const len = $0.length; - return (f) => f.length === len && f !== "." && f !== ".."; - }; - var defaultPlatform2 = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; - var path29 = { - win32: { sep: "\\" }, - posix: { sep: "/" } - }; - exports2.sep = defaultPlatform2 === "win32" ? path29.win32.sep : path29.posix.sep; - exports2.minimatch.sep = exports2.sep; - exports2.GLOBSTAR = /* @__PURE__ */ Symbol("globstar **"); - exports2.minimatch.GLOBSTAR = exports2.GLOBSTAR; - var qmark3 = "[^/]"; - var star3 = qmark3 + "*?"; - var twoStarDot2 = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?"; - var twoStarNoDot2 = "(?:(?!(?:\\/|^)\\.).)*?"; - var filter2 = (pattern, options = {}) => (p) => (0, exports2.minimatch)(p, pattern, options); - exports2.filter = filter2; - exports2.minimatch.filter = exports2.filter; - var ext2 = (a, b = {}) => Object.assign({}, a, b); - var defaults2 = (def) => { - if (!def || typeof def !== "object" || !Object.keys(def).length) { - return exports2.minimatch; - } - const orig = exports2.minimatch; - const m = (p, pattern, options = {}) => orig(p, pattern, ext2(def, options)); - return Object.assign(m, { - Minimatch: class Minimatch extends orig.Minimatch { - constructor(pattern, options = {}) { - super(pattern, ext2(def, options)); - } - static defaults(options) { - return orig.defaults(ext2(def, options)).Minimatch; - } - }, - AST: class AST extends orig.AST { - /* c8 ignore start */ - constructor(type, parent, options = {}) { - super(type, parent, ext2(def, options)); - } - /* c8 ignore stop */ - static fromGlob(pattern, options = {}) { - return orig.AST.fromGlob(pattern, ext2(def, options)); - } - }, - unescape: (s, options = {}) => orig.unescape(s, ext2(def, options)), - escape: (s, options = {}) => orig.escape(s, ext2(def, options)), - filter: (pattern, options = {}) => orig.filter(pattern, ext2(def, options)), - defaults: (options) => orig.defaults(ext2(def, options)), - makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext2(def, options)), - braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext2(def, options)), - match: (list, pattern, options = {}) => orig.match(list, pattern, ext2(def, options)), - sep: orig.sep, - GLOBSTAR: exports2.GLOBSTAR - }); - }; - exports2.defaults = defaults2; - exports2.minimatch.defaults = exports2.defaults; - var braceExpand2 = (pattern, options = {}) => { - (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); - if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { - return [pattern]; - } - return (0, brace_expansion_1.expand)(pattern, { max: options.braceExpandMax }); - }; - exports2.braceExpand = braceExpand2; - exports2.minimatch.braceExpand = exports2.braceExpand; - var makeRe2 = (pattern, options = {}) => new Minimatch2(pattern, options).makeRe(); - exports2.makeRe = makeRe2; - exports2.minimatch.makeRe = exports2.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; - }; - exports2.match = match2; - exports2.minimatch.match = exports2.match; - var globMagic2 = /[?*]|[+@!]\(.*?\)|\[|\]/; - var regExpEscape3 = (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 = {}) { - (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); - options = options || {}; - this.options = options; - this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200; - this.pattern = pattern; - this.platform = options.platform || defaultPlatform2; - 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(..._2) { - } - 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, _2, __) => { - if (this.isWindows && this.windowsNoMagicRoot) { - const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic2.test(s[2])) && !globMagic2.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 (let i = 0; i < globParts.length; i++) { - for (let j = 0; j < globParts[i].length; j++) { - if (globParts[i][j] === "**") { - globParts[i][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 !== "**") { - didSomething = true; - parts.splice(dd - 1, 2); - dd -= 2; - } - } - } while (didSomething); - return parts.length === 0 ? [""] : parts; - } - // First phase: single-pattern processing - //
is 1 or more portions - //is 1 or more portions - // is any portion other than ., .., '', or ** - //
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. - // - // /**/..//
/
-> { /..//
/
, /**//
/
} - // // -> /- // //../
-> /- // **/**/ -> **/ - // - // **/*/ -> */**/ <== 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 - // { /*/, //
} -> /*/- // { /, /} -> /- // { /**/, /} -> /**/- // - // { /**/, /**//
} -> /**/- // ^-- 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 which9 = ""; - while (ai < a.length && bi < b.length) { - if (a[ai] === b[bi]) { - result.push(which9 === "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 (which9 === "b") - return false; - which9 = "a"; - result.push(a[ai]); - ai++; - bi++; - } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") { - if (which9 === "a") - return false; - which9 = "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 negate2 = false; - let negateOffset = 0; - for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) { - negate2 = !negate2; - negateOffset++; - } - if (negateOffset) - this.pattern = pattern.slice(negateOffset); - this.negate = negate2; - } - // 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(exports2.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(exports2.GLOBSTAR, patternIndex); - const lastgs = pattern.lastIndexOf(exports2.GLOBSTAR); - const [head, body, 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 (!body.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 body) { - if (b === exports2.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 [body, after] = bs; - while (fileIndex <= after) { - const m = this.#matchOne(file.slice(0, fileIndex + body.length), body, partial, fileIndex, 0); - if (m && globStarDepth < this.maxGlobstarRecursion) { - const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body.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 === exports2.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 (0, exports2.braceExpand)(this.pattern, this.options); - } - parse(pattern) { - (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); - const options = this.options; - if (pattern === "**") - return exports2.GLOBSTAR; - if (pattern === "") - return ""; - let m; - let fastTest = null; - if (m = pattern.match(starRE2)) { - fastTest = options.dot ? starTestDot2 : starTest2; - } else if (m = pattern.match(starDotExtRE2)) { - fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot2 : starDotExtTestNocase2 : options.dot ? starDotExtTestDot2 : starDotExtTest2)(m[1]); - } else if (m = pattern.match(qmarksRE2)) { - fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot2 : qmarksTestNocase2 : options.dot ? qmarksTestDot2 : qmarksTest2)(m); - } else if (m = pattern.match(starDotStarRE2)) { - fastTest = options.dot ? starDotStarTestDot2 : starDotStarTest2; - } else if (m = pattern.match(dotStarRE2)) { - fastTest = dotStarTest2; - } - const re = ast_js_1.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 ? star3 : options.dot ? twoStarDot2 : twoStarNoDot2; - 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" ? regExpEscape3(p) : p === exports2.GLOBSTAR ? exports2.GLOBSTAR : p._src; - }); - pp.forEach((p, i) => { - const next = pp[i + 1]; - const prev = pp[i - 1]; - if (p !== exports2.GLOBSTAR || prev === exports2.GLOBSTAR) { - return; - } - if (prev === void 0) { - if (next !== void 0 && next !== exports2.GLOBSTAR) { - pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next; - } else { - pp[i] = twoStar; - } - } else if (next === void 0) { - pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + ")?"; - } else if (next !== exports2.GLOBSTAR) { - pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next; - pp[i + 1] = exports2.GLOBSTAR; - } - }); - const filtered = pp.filter((p) => p !== exports2.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 [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""]; - re = "^" + open + re + close + "$"; - if (this.partial) { - re = "^(?:\\/|" + open + re.slice(1, -1) + close + ")$"; - } - if (this.negate) - re = "^(?!" + re + ").+$"; - try { - this.regexp = new RegExp(re, [...flags].join("")); - } catch (ex) { - 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 (let i = 0; i < set.length; i++) { - const pattern = set[i]; - 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 exports2.minimatch.defaults(def).Minimatch; - } - }; - exports2.Minimatch = Minimatch2; - var ast_js_2 = require_ast(); - Object.defineProperty(exports2, "AST", { enumerable: true, get: function() { - return ast_js_2.AST; - } }); - var escape_js_2 = require_escape(); - Object.defineProperty(exports2, "escape", { enumerable: true, get: function() { - return escape_js_2.escape; - } }); - var unescape_js_2 = require_unescape(); - Object.defineProperty(exports2, "unescape", { enumerable: true, get: function() { - return unescape_js_2.unescape; - } }); - exports2.minimatch.AST = ast_js_1.AST; - exports2.minimatch.Minimatch = Minimatch2; - exports2.minimatch.escape = escape_js_1.escape; - exports2.minimatch.unescape = unescape_js_1.unescape; - } -}); - -// node_modules/lru-cache/dist/commonjs/index.js -var require_commonjs21 = __commonJS({ - "node_modules/lru-cache/dist/commonjs/index.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.LRUCache = void 0; - var perf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date; - var warned = /* @__PURE__ */ new Set(); - var PROCESS = typeof process === "object" && !!process ? process : {}; - var emitWarning = (msg, type, code, fn) => { - typeof PROCESS.emitWarning === "function" ? PROCESS.emitWarning(msg, type, code, fn) : console.error(`[${code}] ${type}: ${msg}`); - }; - var AC = globalThis.AbortController; - var AS = globalThis.AbortSignal; - if (typeof AC === "undefined") { - AS = class AbortSignal { - onabort; - _onabort = []; - reason; - aborted = false; - addEventListener(_2, fn) { - this._onabort.push(fn); + s.length && h !== void 0 && (o = [r, h]); } + return o; }; - AC = class AbortController { - constructor() { - warnACPolyfill(); - } - signal = new AS(); - abort(reason) { - if (this.signal.aborted) - return; - this.signal.reason = reason; - this.signal.aborted = true; - for (const fn of this.signal._onabort) { - fn(reason); - } - this.signal.onabort?.(reason); - } - }; - let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1"; - const warnACPolyfill = () => { - if (!printACPolyfillWarning) - return; - printACPolyfillWarning = false; - emitWarning("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", warnACPolyfill); - }; - } - var shouldWarn = (code) => !warned.has(code); - var isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n); - var getUintArray = (max) => !isPosInt(max) ? null : max <= Math.pow(2, 8) ? Uint8Array : max <= Math.pow(2, 16) ? Uint16Array : max <= Math.pow(2, 32) ? Uint32Array : max <= Number.MAX_SAFE_INTEGER ? ZeroArray : null; - var ZeroArray = class extends Array { - constructor(size) { - super(size); - this.fill(0); + Y.range = zs; + }); + var Ke = R((it) => { + "use strict"; + Object.defineProperty(it, "__esModule", { value: true }); + it.EXPANSION_MAX = void 0; + it.expand = ei; + var ze = Ge(), Ue = "\0SLASH" + Math.random() + "\0", $e = "\0OPEN" + Math.random() + "\0", ue = "\0CLOSE" + Math.random() + "\0", qe = "\0COMMA" + Math.random() + "\0", He = "\0PERIOD" + Math.random() + "\0", Us = new RegExp(Ue, "g"), $s = new RegExp($e, "g"), qs = new RegExp(ue, "g"), Hs = new RegExp(qe, "g"), Vs = new RegExp(He, "g"), Ks = /\\\\/g, Xs = /\\{/g, Ys = /\\}/g, Js = /\\,/g, Zs = /\\./g; + it.EXPANSION_MAX = 1e5; + function ce(n) { + return isNaN(n) ? n.charCodeAt(0) : parseInt(n, 10); } - }; - var Stack = class _Stack { - heap; - length; - // private constructor - static #constructing = false; - static create(max) { - const HeapCls = getUintArray(max); - if (!HeapCls) - return []; - _Stack.#constructing = true; - const s = new _Stack(max, HeapCls); - _Stack.#constructing = false; + function Qs(n) { + return n.replace(Ks, Ue).replace(Xs, $e).replace(Ys, ue).replace(Js, qe).replace(Zs, He); + } + function ti(n) { + return n.replace(Us, "\\").replace($s, "{").replace(qs, "}").replace(Hs, ",").replace(Vs, "."); + } + function Ve(n) { + if (!n) return [""]; + let t = [], e = (0, ze.balanced)("{", "}", n); + if (!e) return n.split(","); + let { pre: s, body: i, post: r } = e, h = s.split(","); + h[h.length - 1] += "{" + i + "}"; + let o = Ve(r); + return r.length && (h[h.length - 1] += o.shift(), h.push.apply(h, o)), t.push.apply(t, h), t; + } + function ei(n, t = {}) { + if (!n) return []; + let { max: e = it.EXPANSION_MAX } = t; + return n.slice(0, 2) === "{}" && (n = "\\{\\}" + n.slice(2)), ht(Qs(n), e, true).map(ti); + } + function si(n) { + return "{" + n + "}"; + } + function ii(n) { + return /^-?0\d/.test(n); + } + function ri(n, t) { + return n <= t; + } + function ni(n, t) { + return n >= t; + } + function ht(n, t, e) { + let s = [], i = (0, ze.balanced)("{", "}", n); + if (!i) return [n]; + let r = i.pre, h = i.post.length ? ht(i.post, t, false) : [""]; + if (/\$$/.test(i.pre)) for (let o = 0; o < h.length && o < t; o++) { + let a = r + "{" + i.body + "}" + h[o]; + s.push(a); + } + else { + let o = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body), a = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body), l = o || a, f = i.body.indexOf(",") >= 0; + if (!l && !f) return i.post.match(/,(?!,).*\}/) ? (n = i.pre + "{" + i.body + ue + i.post, ht(n, t, true)) : [n]; + let c; + if (l) c = i.body.split(/\.\./); + else if (c = Ve(i.body), c.length === 1 && c[0] !== void 0 && (c = ht(c[0], t, false).map(si), c.length === 1)) return h.map((u) => i.pre + c[0] + u); + let d; + if (l && c[0] !== void 0 && c[1] !== void 0) { + let u = ce(c[0]), m = ce(c[1]), p = Math.max(c[0].length, c[1].length), b = c.length === 3 && c[2] !== void 0 ? Math.abs(ce(c[2])) : 1, w = ri; + m < u && (b *= -1, w = ni); + let E = c.some(ii); + d = []; + for (let y = u; w(y, m); y += b) { + let S; + if (a) S = String.fromCharCode(y), S === "\\" && (S = ""); + else if (S = String(y), E) { + let B = p - S.length; + if (B > 0) { + let U = new Array(B + 1).join("0"); + y < 0 ? S = "-" + U + S.slice(1) : S = U + S; + } + } + d.push(S); + } + } else { + d = []; + for (let u = 0; u < c.length; u++) d.push.apply(d, ht(c[u], t, false)); + } + for (let u = 0; u < d.length; u++) for (let m = 0; m < h.length && s.length < t; m++) { + let p = r + d[u] + h[m]; + (!e || l || p) && s.push(p); + } + } return s; } - constructor(max, HeapCls) { - if (!_Stack.#constructing) { - throw new TypeError("instantiate Stack using Stack.create(n)"); - } - this.heap = new HeapCls(max); - this.length = 0; - } - push(n) { - this.heap[this.length++] = n; - } - pop() { - return this.heap[--this.length]; - } - }; - var LRUCache = class _LRUCache { - // options that cannot be changed without disaster - #max; - #maxSize; - #dispose; - #onInsert; - #disposeAfter; - #fetchMethod; - #memoMethod; - /** - * {@link LRUCache.OptionsBase.ttl} - */ - ttl; - /** - * {@link LRUCache.OptionsBase.ttlResolution} - */ - ttlResolution; - /** - * {@link LRUCache.OptionsBase.ttlAutopurge} - */ - ttlAutopurge; - /** - * {@link LRUCache.OptionsBase.updateAgeOnGet} - */ - updateAgeOnGet; - /** - * {@link LRUCache.OptionsBase.updateAgeOnHas} - */ - updateAgeOnHas; - /** - * {@link LRUCache.OptionsBase.allowStale} - */ - allowStale; - /** - * {@link LRUCache.OptionsBase.noDisposeOnSet} - */ - noDisposeOnSet; - /** - * {@link LRUCache.OptionsBase.noUpdateTTL} - */ - noUpdateTTL; - /** - * {@link LRUCache.OptionsBase.maxEntrySize} - */ - maxEntrySize; - /** - * {@link LRUCache.OptionsBase.sizeCalculation} - */ - sizeCalculation; - /** - * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection} - */ - noDeleteOnFetchRejection; - /** - * {@link LRUCache.OptionsBase.noDeleteOnStaleGet} - */ - noDeleteOnStaleGet; - /** - * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort} - */ - allowStaleOnFetchAbort; - /** - * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} - */ - allowStaleOnFetchRejection; - /** - * {@link LRUCache.OptionsBase.ignoreFetchAbort} - */ - ignoreFetchAbort; - // computed properties - #size; - #calculatedSize; - #keyMap; - #keyList; - #valList; - #next; - #prev; - #head; - #tail; - #free; - #disposed; - #sizes; - #starts; - #ttls; - #hasDispose; - #hasFetchMethod; - #hasDisposeAfter; - #hasOnInsert; - /** - * Do not call this method unless you need to inspect the - * inner workings of the cache. If anything returned by this - * object is modified in any way, strange breakage may occur. - * - * These fields are private for a reason! - * - * @internal - */ - static unsafeExposeInternals(c) { - return { - // properties - starts: c.#starts, - ttls: c.#ttls, - sizes: c.#sizes, - keyMap: c.#keyMap, - keyList: c.#keyList, - valList: c.#valList, - next: c.#next, - prev: c.#prev, - get head() { - return c.#head; - }, - get tail() { - return c.#tail; - }, - free: c.#free, - // methods - isBackgroundFetch: (p) => c.#isBackgroundFetch(p), - backgroundFetch: (k, index2, options, context5) => c.#backgroundFetch(k, index2, options, context5), - moveToTail: (index2) => c.#moveToTail(index2), - indexes: (options) => c.#indexes(options), - rindexes: (options) => c.#rindexes(options), - isStale: (index2) => c.#isStale(index2) - }; - } - // Protected read-only members - /** - * {@link LRUCache.OptionsBase.max} (read-only) - */ - get max() { - return this.#max; - } - /** - * {@link LRUCache.OptionsBase.maxSize} (read-only) - */ - get maxSize() { - return this.#maxSize; - } - /** - * The total computed size of items in the cache (read-only) - */ - get calculatedSize() { - return this.#calculatedSize; - } - /** - * The number of items stored in the cache (read-only) - */ - get size() { - return this.#size; - } - /** - * {@link LRUCache.OptionsBase.fetchMethod} (read-only) - */ - get fetchMethod() { - return this.#fetchMethod; - } - get memoMethod() { - return this.#memoMethod; - } - /** - * {@link LRUCache.OptionsBase.dispose} (read-only) - */ - get dispose() { - return this.#dispose; - } - /** - * {@link LRUCache.OptionsBase.onInsert} (read-only) - */ - get onInsert() { - return this.#onInsert; - } - /** - * {@link LRUCache.OptionsBase.disposeAfter} (read-only) - */ - get disposeAfter() { - return this.#disposeAfter; - } - constructor(options) { - const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, onInsert, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort } = options; - if (max !== 0 && !isPosInt(max)) { - throw new TypeError("max option must be a nonnegative integer"); - } - const UintArray = max ? getUintArray(max) : Array; - if (!UintArray) { - throw new Error("invalid max value: " + max); - } - this.#max = max; - this.#maxSize = maxSize; - this.maxEntrySize = maxEntrySize || this.#maxSize; - this.sizeCalculation = sizeCalculation; - if (this.sizeCalculation) { - if (!this.#maxSize && !this.maxEntrySize) { - throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize"); - } - if (typeof this.sizeCalculation !== "function") { - throw new TypeError("sizeCalculation set to non-function"); - } - } - if (memoMethod !== void 0 && typeof memoMethod !== "function") { - throw new TypeError("memoMethod must be a function if defined"); - } - this.#memoMethod = memoMethod; - if (fetchMethod !== void 0 && typeof fetchMethod !== "function") { - throw new TypeError("fetchMethod must be a function if specified"); - } - this.#fetchMethod = fetchMethod; - this.#hasFetchMethod = !!fetchMethod; - this.#keyMap = /* @__PURE__ */ new Map(); - this.#keyList = new Array(max).fill(void 0); - this.#valList = new Array(max).fill(void 0); - this.#next = new UintArray(max); - this.#prev = new UintArray(max); - this.#head = 0; - this.#tail = 0; - this.#free = Stack.create(max); - this.#size = 0; - this.#calculatedSize = 0; - if (typeof dispose === "function") { - this.#dispose = dispose; - } - if (typeof onInsert === "function") { - this.#onInsert = onInsert; - } - if (typeof disposeAfter === "function") { - this.#disposeAfter = disposeAfter; - this.#disposed = []; - } else { - this.#disposeAfter = void 0; - this.#disposed = void 0; - } - this.#hasDispose = !!this.#dispose; - this.#hasOnInsert = !!this.#onInsert; - this.#hasDisposeAfter = !!this.#disposeAfter; - this.noDisposeOnSet = !!noDisposeOnSet; - this.noUpdateTTL = !!noUpdateTTL; - this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; - this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; - this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; - this.ignoreFetchAbort = !!ignoreFetchAbort; - if (this.maxEntrySize !== 0) { - if (this.#maxSize !== 0) { - if (!isPosInt(this.#maxSize)) { - throw new TypeError("maxSize must be a positive integer if specified"); - } - } - if (!isPosInt(this.maxEntrySize)) { - throw new TypeError("maxEntrySize must be a positive integer if specified"); - } - this.#initializeSizeTracking(); - } - this.allowStale = !!allowStale; - this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; - this.updateAgeOnGet = !!updateAgeOnGet; - this.updateAgeOnHas = !!updateAgeOnHas; - this.ttlResolution = isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1; - this.ttlAutopurge = !!ttlAutopurge; - this.ttl = ttl || 0; - if (this.ttl) { - if (!isPosInt(this.ttl)) { - throw new TypeError("ttl must be a positive integer if specified"); - } - this.#initializeTTLTracking(); - } - if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) { - throw new TypeError("At least one of max, maxSize, or ttl is required"); - } - if (!this.ttlAutopurge && !this.#max && !this.#maxSize) { - const code = "LRU_CACHE_UNBOUNDED"; - if (shouldWarn(code)) { - warned.add(code); - const msg = "TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption."; - emitWarning(msg, "UnboundedCacheWarning", code, _LRUCache); - } - } - } - /** - * Return the number of ms left in the item's TTL. If item is not in cache, - * returns `0`. Returns `Infinity` if item is in cache without a defined TTL. - */ - getRemainingTTL(key) { - return this.#keyMap.has(key) ? Infinity : 0; - } - #initializeTTLTracking() { - const ttls = new ZeroArray(this.#max); - const starts = new ZeroArray(this.#max); - this.#ttls = ttls; - this.#starts = starts; - this.#setItemTTL = (index2, ttl, start = perf.now()) => { - starts[index2] = ttl !== 0 ? start : 0; - ttls[index2] = ttl; - if (ttl !== 0 && this.ttlAutopurge) { - const t = setTimeout(() => { - if (this.#isStale(index2)) { - this.#delete(this.#keyList[index2], "expire"); - } - }, ttl + 1); - if (t.unref) { - t.unref(); - } - } - }; - this.#updateItemAge = (index2) => { - starts[index2] = ttls[index2] !== 0 ? perf.now() : 0; - }; - this.#statusTTL = (status, index2) => { - if (ttls[index2]) { - const ttl = ttls[index2]; - const start = starts[index2]; - if (!ttl || !start) - return; - status.ttl = ttl; - status.start = start; - status.now = cachedNow || getNow(); - const age = status.now - start; - status.remainingTTL = ttl - age; - } - }; - let cachedNow = 0; - const getNow = () => { - const n = perf.now(); - if (this.ttlResolution > 0) { - cachedNow = n; - const t = setTimeout(() => cachedNow = 0, this.ttlResolution); - if (t.unref) { - t.unref(); - } - } - return n; - }; - this.getRemainingTTL = (key) => { - const index2 = this.#keyMap.get(key); - if (index2 === void 0) { - return 0; - } - const ttl = ttls[index2]; - const start = starts[index2]; - if (!ttl || !start) { - return Infinity; - } - const age = (cachedNow || getNow()) - start; - return ttl - age; - }; - this.#isStale = (index2) => { - const s = starts[index2]; - const t = ttls[index2]; - return !!t && !!s && (cachedNow || getNow()) - s > t; - }; - } - // conditionally set private methods related to TTL - #updateItemAge = () => { - }; - #statusTTL = () => { - }; - #setItemTTL = () => { - }; - /* c8 ignore stop */ - #isStale = () => false; - #initializeSizeTracking() { - const sizes = new ZeroArray(this.#max); - this.#calculatedSize = 0; - this.#sizes = sizes; - this.#removeItemSize = (index2) => { - this.#calculatedSize -= sizes[index2]; - sizes[index2] = 0; - }; - this.#requireSize = (k, v, size, sizeCalculation) => { - if (this.#isBackgroundFetch(v)) { - return 0; - } - if (!isPosInt(size)) { - if (sizeCalculation) { - if (typeof sizeCalculation !== "function") { - throw new TypeError("sizeCalculation must be a function"); - } - size = sizeCalculation(v, k); - if (!isPosInt(size)) { - throw new TypeError("sizeCalculation return invalid (expect positive integer)"); - } - } else { - throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set."); - } - } - return size; - }; - this.#addItemSize = (index2, size, status) => { - sizes[index2] = size; - if (this.#maxSize) { - const maxSize = this.#maxSize - sizes[index2]; - while (this.#calculatedSize > maxSize) { - this.#evict(true); - } - } - this.#calculatedSize += sizes[index2]; - if (status) { - status.entrySize = size; - status.totalCalculatedSize = this.#calculatedSize; - } - }; - } - #removeItemSize = (_i) => { - }; - #addItemSize = (_i, _s, _st) => { - }; - #requireSize = (_k, _v, size, sizeCalculation) => { - if (size || sizeCalculation) { - throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache"); - } - return 0; - }; - *#indexes({ allowStale = this.allowStale } = {}) { - if (this.#size) { - for (let i = this.#tail; true; ) { - if (!this.#isValidIndex(i)) { - break; - } - if (allowStale || !this.#isStale(i)) { - yield i; - } - if (i === this.#head) { - break; - } else { - i = this.#prev[i]; - } - } - } - } - *#rindexes({ allowStale = this.allowStale } = {}) { - if (this.#size) { - for (let i = this.#head; true; ) { - if (!this.#isValidIndex(i)) { - break; - } - if (allowStale || !this.#isStale(i)) { - yield i; - } - if (i === this.#tail) { - break; - } else { - i = this.#next[i]; - } - } - } - } - #isValidIndex(index2) { - return index2 !== void 0 && this.#keyMap.get(this.#keyList[index2]) === index2; - } - /** - * Return a generator yielding `[key, value]` pairs, - * in order from most recently used to least recently used. - */ - *entries() { - for (const i of this.#indexes()) { - if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { - yield [this.#keyList[i], this.#valList[i]]; - } - } - } - /** - * Inverse order version of {@link LRUCache.entries} - * - * Return a generator yielding `[key, value]` pairs, - * in order from least recently used to most recently used. - */ - *rentries() { - for (const i of this.#rindexes()) { - if (this.#valList[i] !== void 0 && this.#keyList[i] !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { - yield [this.#keyList[i], this.#valList[i]]; - } - } - } - /** - * Return a generator yielding the keys in the cache, - * in order from most recently used to least recently used. - */ - *keys() { - for (const i of this.#indexes()) { - const k = this.#keyList[i]; - if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { - yield k; - } - } - } - /** - * Inverse order version of {@link LRUCache.keys} - * - * Return a generator yielding the keys in the cache, - * in order from least recently used to most recently used. - */ - *rkeys() { - for (const i of this.#rindexes()) { - const k = this.#keyList[i]; - if (k !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { - yield k; - } - } - } - /** - * Return a generator yielding the values in the cache, - * in order from most recently used to least recently used. - */ - *values() { - for (const i of this.#indexes()) { - const v = this.#valList[i]; - if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { - yield this.#valList[i]; - } - } - } - /** - * Inverse order version of {@link LRUCache.values} - * - * Return a generator yielding the values in the cache, - * in order from least recently used to most recently used. - */ - *rvalues() { - for (const i of this.#rindexes()) { - const v = this.#valList[i]; - if (v !== void 0 && !this.#isBackgroundFetch(this.#valList[i])) { - yield this.#valList[i]; - } - } - } - /** - * Iterating over the cache itself yields the same results as - * {@link LRUCache.entries} - */ - [Symbol.iterator]() { - return this.entries(); - } - /** - * A String value that is used in the creation of the default string - * description of an object. Called by the built-in method - * `Object.prototype.toString`. - */ - [Symbol.toStringTag] = "LRUCache"; - /** - * Find a value for which the supplied fn method returns a truthy value, - * similar to `Array.find()`. fn is called as `fn(value, key, cache)`. - */ - find(fn, getOptions = {}) { - for (const i of this.#indexes()) { - const v = this.#valList[i]; - const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; - if (value === void 0) - continue; - if (fn(value, this.#keyList[i], this)) { - return this.get(this.#keyList[i], getOptions); - } - } - } - /** - * Call the supplied function on each item in the cache, in order from most - * recently used to least recently used. - * - * `fn` is called as `fn(value, key, cache)`. - * - * If `thisp` is provided, function will be called in the `this`-context of - * the provided object, or the cache if no `thisp` object is provided. - * - * Does not update age or recenty of use, or iterate over stale values. - */ - forEach(fn, thisp = this) { - for (const i of this.#indexes()) { - const v = this.#valList[i]; - const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; - if (value === void 0) - continue; - fn.call(thisp, value, this.#keyList[i], this); - } - } - /** - * The same as {@link LRUCache.forEach} but items are iterated over in - * reverse order. (ie, less recently used items are iterated over first.) - */ - rforEach(fn, thisp = this) { - for (const i of this.#rindexes()) { - const v = this.#valList[i]; - const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; - if (value === void 0) - continue; - fn.call(thisp, value, this.#keyList[i], this); - } - } - /** - * Delete any stale entries. Returns true if anything was removed, - * false otherwise. - */ - purgeStale() { - let deleted = false; - for (const i of this.#rindexes({ allowStale: true })) { - if (this.#isStale(i)) { - this.#delete(this.#keyList[i], "expire"); - deleted = true; - } - } - return deleted; - } - /** - * Get the extended info about a given entry, to get its value, size, and - * TTL info simultaneously. Returns `undefined` if the key is not present. - * - * Unlike {@link LRUCache#dump}, which is designed to be portable and survive - * serialization, the `start` value is always the current timestamp, and the - * `ttl` is a calculated remaining time to live (negative if expired). - * - * Always returns stale values, if their info is found in the cache, so be - * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl}) - * if relevant. - */ - info(key) { - const i = this.#keyMap.get(key); - if (i === void 0) - return void 0; - const v = this.#valList[i]; - const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; - if (value === void 0) - return void 0; - const entry = { value }; - if (this.#ttls && this.#starts) { - const ttl = this.#ttls[i]; - const start = this.#starts[i]; - if (ttl && start) { - const remain = ttl - (perf.now() - start); - entry.ttl = remain; - entry.start = Date.now(); - } - } - if (this.#sizes) { - entry.size = this.#sizes[i]; - } - return entry; - } - /** - * Return an array of [key, {@link LRUCache.Entry}] tuples which can be - * passed to {@link LRUCache#load}. - * - * The `start` fields are calculated relative to a portable `Date.now()` - * timestamp, even if `performance.now()` is available. - * - * Stale entries are always included in the `dump`, even if - * {@link LRUCache.OptionsBase.allowStale} is false. - * - * Note: this returns an actual array, not a generator, so it can be more - * easily passed around. - */ - dump() { - const arr = []; - for (const i of this.#indexes({ allowStale: true })) { - const key = this.#keyList[i]; - const v = this.#valList[i]; - const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; - if (value === void 0 || key === void 0) - continue; - const entry = { value }; - if (this.#ttls && this.#starts) { - entry.ttl = this.#ttls[i]; - const age = perf.now() - this.#starts[i]; - entry.start = Math.floor(Date.now() - age); - } - if (this.#sizes) { - entry.size = this.#sizes[i]; - } - arr.unshift([key, entry]); - } - return arr; - } - /** - * Reset the cache and load in the items in entries in the order listed. - * - * The shape of the resulting cache may be different if the same options are - * not used in both caches. - * - * The `start` fields are assumed to be calculated relative to a portable - * `Date.now()` timestamp, even if `performance.now()` is available. - */ - load(arr) { - this.clear(); - for (const [key, entry] of arr) { - if (entry.start) { - const age = Date.now() - entry.start; - entry.start = perf.now() - age; - } - this.set(key, entry.value, entry); - } - } - /** - * Add a value to the cache. - * - * Note: if `undefined` is specified as a value, this is an alias for - * {@link LRUCache#delete} - * - * Fields on the {@link LRUCache.SetOptions} options param will override - * their corresponding values in the constructor options for the scope - * of this single `set()` operation. - * - * If `start` is provided, then that will set the effective start - * time for the TTL calculation. Note that this must be a previous - * value of `performance.now()` if supported, or a previous value of - * `Date.now()` if not. - * - * Options object may also include `size`, which will prevent - * calling the `sizeCalculation` function and just use the specified - * number if it is a positive integer, and `noDisposeOnSet` which - * will prevent calling a `dispose` function in the case of - * overwrites. - * - * If the `size` (or return value of `sizeCalculation`) for a given - * entry is greater than `maxEntrySize`, then the item will not be - * added to the cache. - * - * Will update the recency of the entry. - * - * If the value is `undefined`, then this is an alias for - * `cache.delete(key)`. `undefined` is never stored in the cache. - */ - set(k, v, setOptions = {}) { - if (v === void 0) { - this.delete(k); - return this; - } - const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status } = setOptions; - let { noUpdateTTL = this.noUpdateTTL } = setOptions; - const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation); - if (this.maxEntrySize && size > this.maxEntrySize) { - if (status) { - status.set = "miss"; - status.maxEntrySizeExceeded = true; - } - this.#delete(k, "set"); - return this; - } - let index2 = this.#size === 0 ? void 0 : this.#keyMap.get(k); - if (index2 === void 0) { - index2 = this.#size === 0 ? this.#tail : this.#free.length !== 0 ? this.#free.pop() : this.#size === this.#max ? this.#evict(false) : this.#size; - this.#keyList[index2] = k; - this.#valList[index2] = v; - this.#keyMap.set(k, index2); - this.#next[this.#tail] = index2; - this.#prev[index2] = this.#tail; - this.#tail = index2; - this.#size++; - this.#addItemSize(index2, size, status); - if (status) - status.set = "add"; - noUpdateTTL = false; - if (this.#hasOnInsert) { - this.#onInsert?.(v, k, "add"); - } - } else { - this.#moveToTail(index2); - const oldVal = this.#valList[index2]; - if (v !== oldVal) { - if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) { - oldVal.__abortController.abort(new Error("replaced")); - const { __staleWhileFetching: s } = oldVal; - if (s !== void 0 && !noDisposeOnSet) { - if (this.#hasDispose) { - this.#dispose?.(s, k, "set"); - } - if (this.#hasDisposeAfter) { - this.#disposed?.push([s, k, "set"]); - } - } - } else if (!noDisposeOnSet) { - if (this.#hasDispose) { - this.#dispose?.(oldVal, k, "set"); - } - if (this.#hasDisposeAfter) { - this.#disposed?.push([oldVal, k, "set"]); - } - } - this.#removeItemSize(index2); - this.#addItemSize(index2, size, status); - this.#valList[index2] = v; - if (status) { - status.set = "replace"; - const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ? oldVal.__staleWhileFetching : oldVal; - if (oldValue !== void 0) - status.oldValue = oldValue; - } - } else if (status) { - status.set = "update"; - } - if (this.#hasOnInsert) { - this.onInsert?.(v, k, v === oldVal ? "update" : "replace"); - } - } - if (ttl !== 0 && !this.#ttls) { - this.#initializeTTLTracking(); - } - if (this.#ttls) { - if (!noUpdateTTL) { - this.#setItemTTL(index2, ttl, start); - } - if (status) - this.#statusTTL(status, index2); - } - if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) { - const dt = this.#disposed; - let task; - while (task = dt?.shift()) { - this.#disposeAfter?.(...task); - } - } - return this; - } - /** - * Evict the least recently used item, returning its value or - * `undefined` if cache is empty. - */ - pop() { - try { - while (this.#size) { - const val = this.#valList[this.#head]; - this.#evict(true); - if (this.#isBackgroundFetch(val)) { - if (val.__staleWhileFetching) { - return val.__staleWhileFetching; - } - } else if (val !== void 0) { - return val; - } - } - } finally { - if (this.#hasDisposeAfter && this.#disposed) { - const dt = this.#disposed; - let task; - while (task = dt?.shift()) { - this.#disposeAfter?.(...task); - } - } - } - } - #evict(free) { - const head = this.#head; - const k = this.#keyList[head]; - const v = this.#valList[head]; - if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) { - v.__abortController.abort(new Error("evicted")); - } else if (this.#hasDispose || this.#hasDisposeAfter) { - if (this.#hasDispose) { - this.#dispose?.(v, k, "evict"); - } - if (this.#hasDisposeAfter) { - this.#disposed?.push([v, k, "evict"]); - } - } - this.#removeItemSize(head); - if (free) { - this.#keyList[head] = void 0; - this.#valList[head] = void 0; - this.#free.push(head); - } - if (this.#size === 1) { - this.#head = this.#tail = 0; - this.#free.length = 0; - } else { - this.#head = this.#next[head]; - } - this.#keyMap.delete(k); - this.#size--; - return head; - } - /** - * Check if a key is in the cache, without updating the recency of use. - * Will return false if the item is stale, even though it is technically - * in the cache. - * - * Check if a key is in the cache, without updating the recency of - * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set - * to `true` in either the options or the constructor. - * - * Will return `false` if the item is stale, even though it is technically in - * the cache. The difference can be determined (if it matters) by using a - * `status` argument, and inspecting the `has` field. - * - * Will not update item age unless - * {@link LRUCache.OptionsBase.updateAgeOnHas} is set. - */ - has(k, hasOptions = {}) { - const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions; - const index2 = this.#keyMap.get(k); - if (index2 !== void 0) { - const v = this.#valList[index2]; - if (this.#isBackgroundFetch(v) && v.__staleWhileFetching === void 0) { - return false; - } - if (!this.#isStale(index2)) { - if (updateAgeOnHas) { - this.#updateItemAge(index2); - } - if (status) { - status.has = "hit"; - this.#statusTTL(status, index2); - } - return true; - } else if (status) { - status.has = "stale"; - this.#statusTTL(status, index2); - } - } else if (status) { - status.has = "miss"; - } - return false; - } - /** - * Like {@link LRUCache#get} but doesn't update recency or delete stale - * items. - * - * Returns `undefined` if the item is stale, unless - * {@link LRUCache.OptionsBase.allowStale} is set. - */ - peek(k, peekOptions = {}) { - const { allowStale = this.allowStale } = peekOptions; - const index2 = this.#keyMap.get(k); - if (index2 === void 0 || !allowStale && this.#isStale(index2)) { - return; - } - const v = this.#valList[index2]; - return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; - } - #backgroundFetch(k, index2, options, context5) { - const v = index2 === void 0 ? void 0 : this.#valList[index2]; - if (this.#isBackgroundFetch(v)) { - return v; - } - const ac = new AC(); - const { signal } = options; - signal?.addEventListener("abort", () => ac.abort(signal.reason), { - signal: ac.signal - }); - const fetchOpts = { - signal: ac.signal, - options, - context: context5 - }; - const cb = (v2, updateCache = false) => { - const { aborted } = ac.signal; - const ignoreAbort = options.ignoreFetchAbort && v2 !== void 0; - if (options.status) { - if (aborted && !updateCache) { - options.status.fetchAborted = true; - options.status.fetchError = ac.signal.reason; - if (ignoreAbort) - options.status.fetchAbortIgnored = true; - } else { - options.status.fetchResolved = true; - } - } - if (aborted && !ignoreAbort && !updateCache) { - return fetchFail(ac.signal.reason); - } - const bf2 = p; - if (this.#valList[index2] === p) { - if (v2 === void 0) { - if (bf2.__staleWhileFetching) { - this.#valList[index2] = bf2.__staleWhileFetching; - } else { - this.#delete(k, "fetch"); - } - } else { - if (options.status) - options.status.fetchUpdated = true; - this.set(k, v2, fetchOpts.options); - } - } - return v2; - }; - const eb = (er) => { - if (options.status) { - options.status.fetchRejected = true; - options.status.fetchError = er; - } - return fetchFail(er); - }; - const fetchFail = (er) => { - const { aborted } = ac.signal; - const allowStaleAborted = aborted && options.allowStaleOnFetchAbort; - const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection; - const noDelete = allowStale || options.noDeleteOnFetchRejection; - const bf2 = p; - if (this.#valList[index2] === p) { - const del = !noDelete || bf2.__staleWhileFetching === void 0; - if (del) { - this.#delete(k, "fetch"); - } else if (!allowStaleAborted) { - this.#valList[index2] = bf2.__staleWhileFetching; - } - } - if (allowStale) { - if (options.status && bf2.__staleWhileFetching !== void 0) { - options.status.returnedStale = true; - } - return bf2.__staleWhileFetching; - } else if (bf2.__returned === bf2) { - throw er; - } - }; - const pcall = (res, rej) => { - const fmp = this.#fetchMethod?.(k, v, fetchOpts); - if (fmp && fmp instanceof Promise) { - fmp.then((v2) => res(v2 === void 0 ? void 0 : v2), rej); - } - ac.signal.addEventListener("abort", () => { - if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) { - res(void 0); - if (options.allowStaleOnFetchAbort) { - res = (v2) => cb(v2, true); - } - } - }); - }; - if (options.status) - options.status.fetchDispatched = true; - const p = new Promise(pcall).then(cb, eb); - const bf = Object.assign(p, { - __abortController: ac, - __staleWhileFetching: v, - __returned: void 0 - }); - if (index2 === void 0) { - this.set(k, bf, { ...fetchOpts.options, status: void 0 }); - index2 = this.#keyMap.get(k); - } else { - this.#valList[index2] = bf; - } - return bf; - } - #isBackgroundFetch(p) { - if (!this.#hasFetchMethod) - return false; - const b = p; - return !!b && b instanceof Promise && b.hasOwnProperty("__staleWhileFetching") && b.__abortController instanceof AC; - } - async fetch(k, fetchOptions = {}) { - const { - // get options - allowStale = this.allowStale, - updateAgeOnGet = this.updateAgeOnGet, - noDeleteOnStaleGet = this.noDeleteOnStaleGet, - // set options - ttl = this.ttl, - noDisposeOnSet = this.noDisposeOnSet, - size = 0, - sizeCalculation = this.sizeCalculation, - noUpdateTTL = this.noUpdateTTL, - // fetch exclusive options - noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, - allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, - ignoreFetchAbort = this.ignoreFetchAbort, - allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, - context: context5, - forceRefresh = false, - status, - signal - } = fetchOptions; - if (!this.#hasFetchMethod) { - if (status) - status.fetch = "get"; - return this.get(k, { - allowStale, - updateAgeOnGet, - noDeleteOnStaleGet, - status - }); - } - const options = { - allowStale, - updateAgeOnGet, - noDeleteOnStaleGet, - ttl, - noDisposeOnSet, - size, - sizeCalculation, - noUpdateTTL, - noDeleteOnFetchRejection, - allowStaleOnFetchRejection, - allowStaleOnFetchAbort, - ignoreFetchAbort, - status, - signal - }; - let index2 = this.#keyMap.get(k); - if (index2 === void 0) { - if (status) - status.fetch = "miss"; - const p = this.#backgroundFetch(k, index2, options, context5); - return p.__returned = p; - } else { - const v = this.#valList[index2]; - if (this.#isBackgroundFetch(v)) { - const stale = allowStale && v.__staleWhileFetching !== void 0; - if (status) { - status.fetch = "inflight"; - if (stale) - status.returnedStale = true; - } - return stale ? v.__staleWhileFetching : v.__returned = v; - } - const isStale = this.#isStale(index2); - if (!forceRefresh && !isStale) { - if (status) - status.fetch = "hit"; - this.#moveToTail(index2); - if (updateAgeOnGet) { - this.#updateItemAge(index2); - } - if (status) - this.#statusTTL(status, index2); - return v; - } - const p = this.#backgroundFetch(k, index2, options, context5); - const hasStale = p.__staleWhileFetching !== void 0; - const staleVal = hasStale && allowStale; - if (status) { - status.fetch = isStale ? "stale" : "refresh"; - if (staleVal && isStale) - status.returnedStale = true; - } - return staleVal ? p.__staleWhileFetching : p.__returned = p; - } - } - async forceFetch(k, fetchOptions = {}) { - const v = await this.fetch(k, fetchOptions); - if (v === void 0) - throw new Error("fetch() returned undefined"); - return v; - } - memo(k, memoOptions = {}) { - const memoMethod = this.#memoMethod; - if (!memoMethod) { - throw new Error("no memoMethod provided to constructor"); - } - const { context: context5, forceRefresh, ...options } = memoOptions; - const v = this.get(k, options); - if (!forceRefresh && v !== void 0) - return v; - const vv = memoMethod(k, v, { - options, - context: context5 - }); - this.set(k, vv, options); - return vv; - } - /** - * Return a value from the cache. Will update the recency of the cache - * entry found. - * - * If the key is not found, get() will return `undefined`. - */ - get(k, getOptions = {}) { - const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status } = getOptions; - const index2 = this.#keyMap.get(k); - if (index2 !== void 0) { - const value = this.#valList[index2]; - const fetching = this.#isBackgroundFetch(value); - if (status) - this.#statusTTL(status, index2); - if (this.#isStale(index2)) { - if (status) - status.get = "stale"; - if (!fetching) { - if (!noDeleteOnStaleGet) { - this.#delete(k, "expire"); - } - if (status && allowStale) - status.returnedStale = true; - return allowStale ? value : void 0; - } else { - if (status && allowStale && value.__staleWhileFetching !== void 0) { - status.returnedStale = true; - } - return allowStale ? value.__staleWhileFetching : void 0; - } - } else { - if (status) - status.get = "hit"; - if (fetching) { - return value.__staleWhileFetching; - } - this.#moveToTail(index2); - if (updateAgeOnGet) { - this.#updateItemAge(index2); - } - return value; - } - } else if (status) { - status.get = "miss"; - } - } - #connect(p, n) { - this.#prev[n] = p; - this.#next[p] = n; - } - #moveToTail(index2) { - if (index2 !== this.#tail) { - if (index2 === this.#head) { - this.#head = this.#next[index2]; - } else { - this.#connect(this.#prev[index2], this.#next[index2]); - } - this.#connect(this.#tail, index2); - this.#tail = index2; - } - } - /** - * Deletes a key out of the cache. - * - * Returns true if the key was deleted, false otherwise. - */ - delete(k) { - return this.#delete(k, "delete"); - } - #delete(k, reason) { - let deleted = false; - if (this.#size !== 0) { - const index2 = this.#keyMap.get(k); - if (index2 !== void 0) { - deleted = true; - if (this.#size === 1) { - this.#clear(reason); - } else { - this.#removeItemSize(index2); - const v = this.#valList[index2]; - if (this.#isBackgroundFetch(v)) { - v.__abortController.abort(new Error("deleted")); - } else if (this.#hasDispose || this.#hasDisposeAfter) { - if (this.#hasDispose) { - this.#dispose?.(v, k, reason); - } - if (this.#hasDisposeAfter) { - this.#disposed?.push([v, k, reason]); - } - } - this.#keyMap.delete(k); - this.#keyList[index2] = void 0; - this.#valList[index2] = void 0; - if (index2 === this.#tail) { - this.#tail = this.#prev[index2]; - } else if (index2 === this.#head) { - this.#head = this.#next[index2]; - } else { - const pi = this.#prev[index2]; - this.#next[pi] = this.#next[index2]; - const ni = this.#next[index2]; - this.#prev[ni] = this.#prev[index2]; - } - this.#size--; - this.#free.push(index2); - } - } - } - if (this.#hasDisposeAfter && this.#disposed?.length) { - const dt = this.#disposed; - let task; - while (task = dt?.shift()) { - this.#disposeAfter?.(...task); - } - } - return deleted; - } - /** - * Clear the cache entirely, throwing away all values. - */ - clear() { - return this.#clear("delete"); - } - #clear(reason) { - for (const index2 of this.#rindexes({ allowStale: true })) { - const v = this.#valList[index2]; - if (this.#isBackgroundFetch(v)) { - v.__abortController.abort(new Error("deleted")); - } else { - const k = this.#keyList[index2]; - if (this.#hasDispose) { - this.#dispose?.(v, k, reason); - } - if (this.#hasDisposeAfter) { - this.#disposed?.push([v, k, reason]); - } - } - } - this.#keyMap.clear(); - this.#valList.fill(void 0); - this.#keyList.fill(void 0); - if (this.#ttls && this.#starts) { - this.#ttls.fill(0); - this.#starts.fill(0); - } - if (this.#sizes) { - this.#sizes.fill(0); - } - this.#head = 0; - this.#tail = 0; - this.#free.length = 0; - this.#calculatedSize = 0; - this.#size = 0; - if (this.#hasDisposeAfter && this.#disposed) { - const dt = this.#disposed; - let task; - while (task = dt?.shift()) { - this.#disposeAfter?.(...task); - } - } - } - }; - exports2.LRUCache = LRUCache; - } -}); - -// node_modules/minipass/dist/commonjs/index.js -var require_commonjs22 = __commonJS({ - "node_modules/minipass/dist/commonjs/index.js"(exports2) { - "use strict"; - var __importDefault2 = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { "default": mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Minipass = exports2.isWritable = exports2.isReadable = exports2.isStream = void 0; - var proc = typeof process === "object" && process ? process : { - stdout: null, - stderr: null - }; - var node_events_1 = require("node:events"); - var node_stream_1 = __importDefault2(require("node:stream")); - var node_string_decoder_1 = require("node:string_decoder"); - var isStream2 = (s) => !!s && typeof s === "object" && (s instanceof Minipass || s instanceof node_stream_1.default || (0, exports2.isReadable)(s) || (0, exports2.isWritable)(s)); - exports2.isStream = isStream2; - var isReadable = (s) => !!s && typeof s === "object" && s instanceof node_events_1.EventEmitter && typeof s.pipe === "function" && // node core Writable streams have a pipe() method, but it throws - s.pipe !== node_stream_1.default.Writable.prototype.pipe; - exports2.isReadable = isReadable; - var isWritable = (s) => !!s && typeof s === "object" && s instanceof node_events_1.EventEmitter && typeof s.write === "function" && typeof s.end === "function"; - exports2.isWritable = isWritable; - var EOF2 = /* @__PURE__ */ Symbol("EOF"); - var MAYBE_EMIT_END = /* @__PURE__ */ Symbol("maybeEmitEnd"); - var EMITTED_END = /* @__PURE__ */ Symbol("emittedEnd"); - var EMITTING_END = /* @__PURE__ */ Symbol("emittingEnd"); - var EMITTED_ERROR = /* @__PURE__ */ Symbol("emittedError"); - var CLOSED = /* @__PURE__ */ Symbol("closed"); - var READ = /* @__PURE__ */ Symbol("read"); - var FLUSH = /* @__PURE__ */ Symbol("flush"); - var FLUSHCHUNK = /* @__PURE__ */ Symbol("flushChunk"); - var ENCODING = /* @__PURE__ */ Symbol("encoding"); - var DECODER = /* @__PURE__ */ Symbol("decoder"); - var FLOWING = /* @__PURE__ */ Symbol("flowing"); - var PAUSED = /* @__PURE__ */ Symbol("paused"); - var RESUME = /* @__PURE__ */ Symbol("resume"); - var BUFFER = /* @__PURE__ */ Symbol("buffer"); - var PIPES = /* @__PURE__ */ Symbol("pipes"); - var BUFFERLENGTH = /* @__PURE__ */ Symbol("bufferLength"); - var BUFFERPUSH = /* @__PURE__ */ Symbol("bufferPush"); - var BUFFERSHIFT = /* @__PURE__ */ Symbol("bufferShift"); - var OBJECTMODE = /* @__PURE__ */ Symbol("objectMode"); - var DESTROYED = /* @__PURE__ */ Symbol("destroyed"); - var ERROR = /* @__PURE__ */ Symbol("error"); - var EMITDATA = /* @__PURE__ */ Symbol("emitData"); - var EMITEND = /* @__PURE__ */ Symbol("emitEnd"); - var EMITEND2 = /* @__PURE__ */ Symbol("emitEnd2"); - var ASYNC = /* @__PURE__ */ Symbol("async"); - var ABORT = /* @__PURE__ */ Symbol("abort"); - var ABORTED = /* @__PURE__ */ Symbol("aborted"); - var SIGNAL = /* @__PURE__ */ Symbol("signal"); - var DATALISTENERS = /* @__PURE__ */ Symbol("dataListeners"); - var DISCARDED = /* @__PURE__ */ Symbol("discarded"); - var defer = (fn) => Promise.resolve().then(fn); - var nodefer = (fn) => fn(); - var isEndish = (ev) => ev === "end" || ev === "finish" || ev === "prefinish"; - var isArrayBufferLike = (b) => b instanceof ArrayBuffer || !!b && typeof b === "object" && b.constructor && b.constructor.name === "ArrayBuffer" && b.byteLength >= 0; - var isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b); - var Pipe = class { - src; - dest; - opts; - ondrain; - constructor(src, dest, opts) { - this.src = src; - this.dest = dest; - this.opts = opts; - this.ondrain = () => src[RESUME](); - this.dest.on("drain", this.ondrain); - } - unpipe() { - this.dest.removeListener("drain", this.ondrain); - } - // only here for the prototype - /* c8 ignore start */ - proxyErrors(_er) { - } - /* c8 ignore stop */ - end() { - this.unpipe(); - if (this.opts.end) - this.dest.end(); - } - }; - var PipeProxyErrors = class extends Pipe { - unpipe() { - this.src.removeListener("error", this.proxyErrors); - super.unpipe(); - } - constructor(src, dest, opts) { - super(src, dest, opts); - this.proxyErrors = (er) => dest.emit("error", er); - src.on("error", this.proxyErrors); - } - }; - var isObjectModeOptions = (o) => !!o.objectMode; - var isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== "buffer"; - var Minipass = class extends node_events_1.EventEmitter { - [FLOWING] = false; - [PAUSED] = false; - [PIPES] = []; - [BUFFER] = []; - [OBJECTMODE]; - [ENCODING]; - [ASYNC]; - [DECODER]; - [EOF2] = false; - [EMITTED_END] = false; - [EMITTING_END] = false; - [CLOSED] = false; - [EMITTED_ERROR] = null; - [BUFFERLENGTH] = 0; - [DESTROYED] = false; - [SIGNAL]; - [ABORTED] = false; - [DATALISTENERS] = 0; - [DISCARDED] = false; - /** - * true if the stream can be written - */ - writable = true; - /** - * true if the stream can be read - */ - readable = true; - /** - * If `RType` is Buffer, then options do not need to be provided. - * Otherwise, an options object must be provided to specify either - * {@link Minipass.SharedOptions.objectMode} or - * {@link Minipass.SharedOptions.encoding}, as appropriate. - */ - constructor(...args) { - const options = args[0] || {}; - super(); - if (options.objectMode && typeof options.encoding === "string") { - throw new TypeError("Encoding and objectMode may not be used together"); - } - if (isObjectModeOptions(options)) { - this[OBJECTMODE] = true; - this[ENCODING] = null; - } else if (isEncodingOptions(options)) { - this[ENCODING] = options.encoding; - this[OBJECTMODE] = false; - } else { - this[OBJECTMODE] = false; - this[ENCODING] = null; - } - this[ASYNC] = !!options.async; - this[DECODER] = this[ENCODING] ? new node_string_decoder_1.StringDecoder(this[ENCODING]) : null; - if (options && options.debugExposeBuffer === true) { - Object.defineProperty(this, "buffer", { get: () => this[BUFFER] }); - } - if (options && options.debugExposePipes === true) { - Object.defineProperty(this, "pipes", { get: () => this[PIPES] }); - } - const { signal } = options; - if (signal) { - this[SIGNAL] = signal; - if (signal.aborted) { - this[ABORT](); - } else { - signal.addEventListener("abort", () => this[ABORT]()); - } - } - } - /** - * The amount of data stored in the buffer waiting to be read. - * - * For Buffer strings, this will be the total byte length. - * For string encoding streams, this will be the string character length, - * according to JavaScript's `string.length` logic. - * For objectMode streams, this is a count of the items waiting to be - * emitted. - */ - get bufferLength() { - return this[BUFFERLENGTH]; - } - /** - * The `BufferEncoding` currently in use, or `null` - */ - get encoding() { - return this[ENCODING]; - } - /** - * @deprecated - This is a read only property - */ - set encoding(_enc) { - throw new Error("Encoding must be set at instantiation time"); - } - /** - * @deprecated - Encoding may only be set at instantiation time - */ - setEncoding(_enc) { - throw new Error("Encoding must be set at instantiation time"); - } - /** - * True if this is an objectMode stream - */ - get objectMode() { - return this[OBJECTMODE]; - } - /** - * @deprecated - This is a read-only property - */ - set objectMode(_om) { - throw new Error("objectMode must be set at instantiation time"); - } - /** - * true if this is an async stream - */ - get ["async"]() { - return this[ASYNC]; - } - /** - * Set to true to make this stream async. - * - * Once set, it cannot be unset, as this would potentially cause incorrect - * behavior. Ie, a sync stream can be made async, but an async stream - * cannot be safely made sync. - */ - set ["async"](a) { - this[ASYNC] = this[ASYNC] || !!a; - } - // drop everything and get out of the flow completely - [ABORT]() { - this[ABORTED] = true; - this.emit("abort", this[SIGNAL]?.reason); - this.destroy(this[SIGNAL]?.reason); - } - /** - * True if the stream has been aborted. - */ - get aborted() { - return this[ABORTED]; - } - /** - * No-op setter. Stream aborted status is set via the AbortSignal provided - * in the constructor options. - */ - set aborted(_2) { - } - write(chunk, encoding, cb) { - if (this[ABORTED]) - return false; - if (this[EOF2]) - throw new Error("write after end"); - if (this[DESTROYED]) { - this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" })); - return true; - } - if (typeof encoding === "function") { - cb = encoding; - encoding = "utf8"; - } - if (!encoding) - encoding = "utf8"; - const fn = this[ASYNC] ? defer : nodefer; - if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { - if (isArrayBufferView(chunk)) { - chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength); - } else if (isArrayBufferLike(chunk)) { - chunk = Buffer.from(chunk); - } else if (typeof chunk !== "string") { - throw new Error("Non-contiguous data written to non-objectMode stream"); - } - } - if (this[OBJECTMODE]) { - if (this[FLOWING] && this[BUFFERLENGTH] !== 0) - this[FLUSH](true); - if (this[FLOWING]) - this.emit("data", chunk); - else - this[BUFFERPUSH](chunk); - if (this[BUFFERLENGTH] !== 0) - this.emit("readable"); - if (cb) - fn(cb); - return this[FLOWING]; - } - if (!chunk.length) { - if (this[BUFFERLENGTH] !== 0) - this.emit("readable"); - if (cb) - fn(cb); - return this[FLOWING]; - } - if (typeof chunk === "string" && // unless it is a string already ready for us to use - !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) { - chunk = Buffer.from(chunk, encoding); - } - if (Buffer.isBuffer(chunk) && this[ENCODING]) { - chunk = this[DECODER].write(chunk); - } - if (this[FLOWING] && this[BUFFERLENGTH] !== 0) - this[FLUSH](true); - if (this[FLOWING]) - this.emit("data", chunk); - else - this[BUFFERPUSH](chunk); - if (this[BUFFERLENGTH] !== 0) - this.emit("readable"); - if (cb) - fn(cb); - return this[FLOWING]; - } - /** - * Low-level explicit read method. - * - * In objectMode, the argument is ignored, and one item is returned if - * available. - * - * `n` is the number of bytes (or in the case of encoding streams, - * characters) to consume. If `n` is not provided, then the entire buffer - * is returned, or `null` is returned if no data is available. - * - * If `n` is greater that the amount of data in the internal buffer, - * then `null` is returned. - */ - read(n) { - if (this[DESTROYED]) - return null; - this[DISCARDED] = false; - if (this[BUFFERLENGTH] === 0 || n === 0 || n && n > this[BUFFERLENGTH]) { - this[MAYBE_EMIT_END](); - return null; - } - if (this[OBJECTMODE]) - n = null; - if (this[BUFFER].length > 1 && !this[OBJECTMODE]) { - this[BUFFER] = [ - this[ENCODING] ? this[BUFFER].join("") : Buffer.concat(this[BUFFER], this[BUFFERLENGTH]) - ]; - } - const ret = this[READ](n || null, this[BUFFER][0]); - this[MAYBE_EMIT_END](); - return ret; - } - [READ](n, chunk) { - if (this[OBJECTMODE]) - this[BUFFERSHIFT](); - else { - const c = chunk; - if (n === c.length || n === null) - this[BUFFERSHIFT](); - else if (typeof c === "string") { - this[BUFFER][0] = c.slice(n); - chunk = c.slice(0, n); - this[BUFFERLENGTH] -= n; - } else { - this[BUFFER][0] = c.subarray(n); - chunk = c.subarray(0, n); - this[BUFFERLENGTH] -= n; - } - } - this.emit("data", chunk); - if (!this[BUFFER].length && !this[EOF2]) - this.emit("drain"); - return chunk; - } - end(chunk, encoding, cb) { - if (typeof chunk === "function") { - cb = chunk; - chunk = void 0; - } - if (typeof encoding === "function") { - cb = encoding; - encoding = "utf8"; - } - if (chunk !== void 0) - this.write(chunk, encoding); - if (cb) - this.once("end", cb); - this[EOF2] = true; - this.writable = false; - if (this[FLOWING] || !this[PAUSED]) - this[MAYBE_EMIT_END](); - return this; - } - // don't let the internal resume be overwritten - [RESUME]() { - if (this[DESTROYED]) - return; - if (!this[DATALISTENERS] && !this[PIPES].length) { - this[DISCARDED] = true; - } - this[PAUSED] = false; - this[FLOWING] = true; - this.emit("resume"); - if (this[BUFFER].length) - this[FLUSH](); - else if (this[EOF2]) - this[MAYBE_EMIT_END](); - else - this.emit("drain"); - } - /** - * Resume the stream if it is currently in a paused state - * - * If called when there are no pipe destinations or `data` event listeners, - * this will place the stream in a "discarded" state, where all data will - * be thrown away. The discarded state is removed if a pipe destination or - * data handler is added, if pause() is called, or if any synchronous or - * asynchronous iteration is started. - */ - resume() { - return this[RESUME](); - } - /** - * Pause the stream - */ - pause() { - this[FLOWING] = false; - this[PAUSED] = true; - this[DISCARDED] = false; - } - /** - * true if the stream has been forcibly destroyed - */ - get destroyed() { - return this[DESTROYED]; - } - /** - * true if the stream is currently in a flowing state, meaning that - * any writes will be immediately emitted. - */ - get flowing() { - return this[FLOWING]; - } - /** - * true if the stream is currently in a paused state - */ - get paused() { - return this[PAUSED]; - } - [BUFFERPUSH](chunk) { - if (this[OBJECTMODE]) - this[BUFFERLENGTH] += 1; - else - this[BUFFERLENGTH] += chunk.length; - this[BUFFER].push(chunk); - } - [BUFFERSHIFT]() { - if (this[OBJECTMODE]) - this[BUFFERLENGTH] -= 1; - else - this[BUFFERLENGTH] -= this[BUFFER][0].length; - return this[BUFFER].shift(); - } - [FLUSH](noDrain = false) { - do { - } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && this[BUFFER].length); - if (!noDrain && !this[BUFFER].length && !this[EOF2]) - this.emit("drain"); - } - [FLUSHCHUNK](chunk) { - this.emit("data", chunk); - return this[FLOWING]; - } - /** - * Pipe all data emitted by this stream into the destination provided. - * - * Triggers the flow of data. - */ - pipe(dest, opts) { - if (this[DESTROYED]) - return dest; - this[DISCARDED] = false; - const ended = this[EMITTED_END]; - opts = opts || {}; - if (dest === proc.stdout || dest === proc.stderr) - opts.end = false; - else - opts.end = opts.end !== false; - opts.proxyErrors = !!opts.proxyErrors; - if (ended) { - if (opts.end) - dest.end(); - } else { - this[PIPES].push(!opts.proxyErrors ? new Pipe(this, dest, opts) : new PipeProxyErrors(this, dest, opts)); - if (this[ASYNC]) - defer(() => this[RESUME]()); - else - this[RESUME](); - } - return dest; - } - /** - * Fully unhook a piped destination stream. - * - * If the destination stream was the only consumer of this stream (ie, - * there are no other piped destinations or `'data'` event listeners) - * then the flow of data will stop until there is another consumer or - * {@link Minipass#resume} is explicitly called. - */ - unpipe(dest) { - const p = this[PIPES].find((p2) => p2.dest === dest); - if (p) { - if (this[PIPES].length === 1) { - if (this[FLOWING] && this[DATALISTENERS] === 0) { - this[FLOWING] = false; - } - this[PIPES] = []; - } else - this[PIPES].splice(this[PIPES].indexOf(p), 1); - p.unpipe(); - } - } - /** - * Alias for {@link Minipass#on} - */ - addListener(ev, handler2) { - return this.on(ev, handler2); - } - /** - * Mostly identical to `EventEmitter.on`, with the following - * behavior differences to prevent data loss and unnecessary hangs: - * - * - Adding a 'data' event handler will trigger the flow of data - * - * - Adding a 'readable' event handler when there is data waiting to be read - * will cause 'readable' to be emitted immediately. - * - * - Adding an 'endish' event handler ('end', 'finish', etc.) which has - * already passed will cause the event to be emitted immediately and all - * handlers removed. - * - * - Adding an 'error' event handler after an error has been emitted will - * cause the event to be re-emitted immediately with the error previously - * raised. - */ - on(ev, handler2) { - const ret = super.on(ev, handler2); - if (ev === "data") { - this[DISCARDED] = false; - this[DATALISTENERS]++; - if (!this[PIPES].length && !this[FLOWING]) { - this[RESUME](); - } - } else if (ev === "readable" && this[BUFFERLENGTH] !== 0) { - super.emit("readable"); - } else if (isEndish(ev) && this[EMITTED_END]) { - super.emit(ev); - this.removeAllListeners(ev); - } else if (ev === "error" && this[EMITTED_ERROR]) { - const h = handler2; - if (this[ASYNC]) - defer(() => h.call(this, this[EMITTED_ERROR])); - else - h.call(this, this[EMITTED_ERROR]); - } - return ret; - } - /** - * Alias for {@link Minipass#off} - */ - removeListener(ev, handler2) { - return this.off(ev, handler2); - } - /** - * Mostly identical to `EventEmitter.off` - * - * If a 'data' event handler is removed, and it was the last consumer - * (ie, there are no pipe destinations or other 'data' event listeners), - * then the flow of data will stop until there is another consumer or - * {@link Minipass#resume} is explicitly called. - */ - off(ev, handler2) { - const ret = super.off(ev, handler2); - if (ev === "data") { - this[DATALISTENERS] = this.listeners("data").length; - if (this[DATALISTENERS] === 0 && !this[DISCARDED] && !this[PIPES].length) { - this[FLOWING] = false; - } - } - return ret; - } - /** - * Mostly identical to `EventEmitter.removeAllListeners` - * - * If all 'data' event handlers are removed, and they were the last consumer - * (ie, there are no pipe destinations), then the flow of data will stop - * until there is another consumer or {@link Minipass#resume} is explicitly - * called. - */ - removeAllListeners(ev) { - const ret = super.removeAllListeners(ev); - if (ev === "data" || ev === void 0) { - this[DATALISTENERS] = 0; - if (!this[DISCARDED] && !this[PIPES].length) { - this[FLOWING] = false; - } - } - return ret; - } - /** - * true if the 'end' event has been emitted - */ - get emittedEnd() { - return this[EMITTED_END]; - } - [MAYBE_EMIT_END]() { - if (!this[EMITTING_END] && !this[EMITTED_END] && !this[DESTROYED] && this[BUFFER].length === 0 && this[EOF2]) { - this[EMITTING_END] = true; - this.emit("end"); - this.emit("prefinish"); - this.emit("finish"); - if (this[CLOSED]) - this.emit("close"); - this[EMITTING_END] = false; - } - } - /** - * Mostly identical to `EventEmitter.emit`, with the following - * behavior differences to prevent data loss and unnecessary hangs: - * - * If the stream has been destroyed, and the event is something other - * than 'close' or 'error', then `false` is returned and no handlers - * are called. - * - * If the event is 'end', and has already been emitted, then the event - * is ignored. If the stream is in a paused or non-flowing state, then - * the event will be deferred until data flow resumes. If the stream is - * async, then handlers will be called on the next tick rather than - * immediately. - * - * If the event is 'close', and 'end' has not yet been emitted, then - * the event will be deferred until after 'end' is emitted. - * - * If the event is 'error', and an AbortSignal was provided for the stream, - * and there are no listeners, then the event is ignored, matching the - * behavior of node core streams in the presense of an AbortSignal. - * - * If the event is 'finish' or 'prefinish', then all listeners will be - * removed after emitting the event, to prevent double-firing. - */ - emit(ev, ...args) { - const data = args[0]; - if (ev !== "error" && ev !== "close" && ev !== DESTROYED && this[DESTROYED]) { - return false; - } else if (ev === "data") { - return !this[OBJECTMODE] && !data ? false : this[ASYNC] ? (defer(() => this[EMITDATA](data)), true) : this[EMITDATA](data); - } else if (ev === "end") { - return this[EMITEND](); - } else if (ev === "close") { - this[CLOSED] = true; - if (!this[EMITTED_END] && !this[DESTROYED]) - return false; - const ret2 = super.emit("close"); - this.removeAllListeners("close"); - return ret2; - } else if (ev === "error") { - this[EMITTED_ERROR] = data; - super.emit(ERROR, data); - const ret2 = !this[SIGNAL] || this.listeners("error").length ? super.emit("error", data) : false; - this[MAYBE_EMIT_END](); - return ret2; - } else if (ev === "resume") { - const ret2 = super.emit("resume"); - this[MAYBE_EMIT_END](); - return ret2; - } else if (ev === "finish" || ev === "prefinish") { - const ret2 = super.emit(ev); - this.removeAllListeners(ev); - return ret2; - } - const ret = super.emit(ev, ...args); - this[MAYBE_EMIT_END](); - return ret; - } - [EMITDATA](data) { - for (const p of this[PIPES]) { - if (p.dest.write(data) === false) - this.pause(); - } - const ret = this[DISCARDED] ? false : super.emit("data", data); - this[MAYBE_EMIT_END](); - return ret; - } - [EMITEND]() { - if (this[EMITTED_END]) - return false; - this[EMITTED_END] = true; - this.readable = false; - return this[ASYNC] ? (defer(() => this[EMITEND2]()), true) : this[EMITEND2](); - } - [EMITEND2]() { - if (this[DECODER]) { - const data = this[DECODER].end(); - if (data) { - for (const p of this[PIPES]) { - p.dest.write(data); - } - if (!this[DISCARDED]) - super.emit("data", data); - } - } - for (const p of this[PIPES]) { - p.end(); - } - const ret = super.emit("end"); - this.removeAllListeners("end"); - return ret; - } - /** - * Return a Promise that resolves to an array of all emitted data once - * the stream ends. - */ - async collect() { - const buf = Object.assign([], { - dataLength: 0 - }); - if (!this[OBJECTMODE]) - buf.dataLength = 0; - const p = this.promise(); - this.on("data", (c) => { - buf.push(c); - if (!this[OBJECTMODE]) - buf.dataLength += c.length; - }); - await p; - return buf; - } - /** - * Return a Promise that resolves to the concatenation of all emitted data - * once the stream ends. - * - * Not allowed on objectMode streams. - */ - async concat() { - if (this[OBJECTMODE]) { - throw new Error("cannot concat in objectMode"); - } - const buf = await this.collect(); - return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength); - } - /** - * Return a void Promise that resolves once the stream ends. - */ - async promise() { - return new Promise((resolve14, reject) => { - this.on(DESTROYED, () => reject(new Error("stream destroyed"))); - this.on("error", (er) => reject(er)); - this.on("end", () => resolve14()); - }); - } - /** - * Asynchronous `for await of` iteration. - * - * This will continue emitting all chunks until the stream terminates. - */ - [Symbol.asyncIterator]() { - this[DISCARDED] = false; - let stopped = false; - const stop = async () => { - this.pause(); - stopped = true; - return { value: void 0, done: true }; - }; - const next = () => { - if (stopped) - return stop(); - const res = this.read(); - if (res !== null) - return Promise.resolve({ done: false, value: res }); - if (this[EOF2]) - return stop(); - let resolve14; - let reject; - const onerr = (er) => { - this.off("data", ondata); - this.off("end", onend); - this.off(DESTROYED, ondestroy); - stop(); - reject(er); - }; - const ondata = (value) => { - this.off("error", onerr); - this.off("end", onend); - this.off(DESTROYED, ondestroy); - this.pause(); - resolve14({ value, done: !!this[EOF2] }); - }; - const onend = () => { - this.off("error", onerr); - this.off("data", ondata); - this.off(DESTROYED, ondestroy); - stop(); - resolve14({ done: true, value: void 0 }); - }; - const ondestroy = () => onerr(new Error("stream destroyed")); - return new Promise((res2, rej) => { - reject = rej; - resolve14 = res2; - this.once(DESTROYED, ondestroy); - this.once("error", onerr); - this.once("end", onend); - this.once("data", ondata); - }); - }; - return { - next, - throw: stop, - return: stop, - [Symbol.asyncIterator]() { - return this; - } - }; - } - /** - * Synchronous `for of` iteration. - * - * The iteration will terminate when the internal buffer runs out, even - * if the stream has not yet terminated. - */ - [Symbol.iterator]() { - this[DISCARDED] = false; - let stopped = false; - const stop = () => { - this.pause(); - this.off(ERROR, stop); - this.off(DESTROYED, stop); - this.off("end", stop); - stopped = true; - return { done: true, value: void 0 }; - }; - const next = () => { - if (stopped) - return stop(); - const value = this.read(); - return value === null ? stop() : { done: false, value }; - }; - this.once("end", stop); - this.once(ERROR, stop); - this.once(DESTROYED, stop); - return { - next, - throw: stop, - return: stop, - [Symbol.iterator]() { - return this; - } - }; - } - /** - * Destroy a stream, preventing it from being used for any further purpose. - * - * If the stream has a `close()` method, then it will be called on - * destruction. - * - * After destruction, any attempt to write data, read data, or emit most - * events will be ignored. - * - * If an error argument is provided, then it will be emitted in an - * 'error' event. - */ - destroy(er) { - if (this[DESTROYED]) { - if (er) - this.emit("error", er); - else - this.emit(DESTROYED); - return this; - } - this[DESTROYED] = true; - this[DISCARDED] = true; - this[BUFFER].length = 0; - this[BUFFERLENGTH] = 0; - const wc = this; - if (typeof wc.close === "function" && !this[CLOSED]) - wc.close(); - if (er) - this.emit("error", er); - else - this.emit(DESTROYED); - return this; - } - /** - * Alias for {@link isStream} - * - * Former export location, maintained for backwards compatibility. - * - * @deprecated - */ - static get isStream() { - return exports2.isStream; - } - }; - exports2.Minipass = Minipass; - } -}); - -// node_modules/path-scurry/dist/commonjs/index.js -var require_commonjs23 = __commonJS({ - "node_modules/path-scurry/dist/commonjs/index.js"(exports2) { - "use strict"; - var __createBinding2 = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; - o[k2] = m[k]; - })); - var __setModuleDefault2 = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - }) : function(o, v) { - o["default"] = v; }); - var __importStar2 = exports2 && exports2.__importStar || function(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) { - for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding2(result, mod, k); - } - __setModuleDefault2(result, mod); - return result; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.PathScurry = exports2.Path = exports2.PathScurryDarwin = exports2.PathScurryPosix = exports2.PathScurryWin32 = exports2.PathScurryBase = exports2.PathPosix = exports2.PathWin32 = exports2.PathBase = exports2.ChildrenCache = exports2.ResolveCache = void 0; - var lru_cache_1 = require_commonjs21(); - var node_path_1 = require("node:path"); - var node_url_1 = require("node:url"); - var fs_1 = require("fs"); - var actualFS = __importStar2(require("node:fs")); - var realpathSync = fs_1.realpathSync.native; - var promises_1 = require("node:fs/promises"); - var minipass_1 = require_commonjs22(); - var defaultFS = { - lstatSync: fs_1.lstatSync, - readdir: fs_1.readdir, - readdirSync: fs_1.readdirSync, - readlinkSync: fs_1.readlinkSync, - realpathSync, - promises: { - lstat: promises_1.lstat, - readdir: promises_1.readdir, - readlink: promises_1.readlink, - realpath: promises_1.realpath - } - }; - var fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS ? defaultFS : { - ...defaultFS, - ...fsOption, - promises: { - ...defaultFS.promises, - ...fsOption.promises || {} - } - }; - var uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i; - var uncToDrive = (rootPath) => rootPath.replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\"); - var eitherSep = /[\\\/]/; - var UNKNOWN = 0; - var IFIFO = 1; - var IFCHR = 2; - var IFDIR = 4; - var IFBLK = 6; - var IFREG = 8; - var IFLNK = 10; - var IFSOCK = 12; - var IFMT = 15; - var IFMT_UNKNOWN = ~IFMT; - var READDIR_CALLED = 16; - var LSTAT_CALLED = 32; - var ENOTDIR = 64; - var ENOENT = 128; - var ENOREADLINK = 256; - var ENOREALPATH = 512; - var ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH; - var TYPEMASK = 1023; - var entToType = (s) => s.isFile() ? IFREG : s.isDirectory() ? IFDIR : s.isSymbolicLink() ? IFLNK : s.isCharacterDevice() ? IFCHR : s.isBlockDevice() ? IFBLK : s.isSocket() ? IFSOCK : s.isFIFO() ? IFIFO : UNKNOWN; - var normalizeCache = /* @__PURE__ */ new Map(); - var normalize3 = (s) => { - const c = normalizeCache.get(s); - if (c) - return c; - const n = s.normalize("NFKD"); - normalizeCache.set(s, n); - return n; - }; - var normalizeNocaseCache = /* @__PURE__ */ new Map(); - var normalizeNocase = (s) => { - const c = normalizeNocaseCache.get(s); - if (c) - return c; - const n = normalize3(s.toLowerCase()); - normalizeNocaseCache.set(s, n); - return n; - }; - var ResolveCache = class extends lru_cache_1.LRUCache { - constructor() { - super({ max: 256 }); - } - }; - exports2.ResolveCache = ResolveCache; - var ChildrenCache = class extends lru_cache_1.LRUCache { - constructor(maxSize = 16 * 1024) { - super({ - maxSize, - // parent + children - sizeCalculation: (a) => a.length + 1 - }); - } - }; - exports2.ChildrenCache = ChildrenCache; - var setAsCwd = /* @__PURE__ */ Symbol("PathScurry setAsCwd"); - var PathBase = class { - /** - * the basename of this path - * - * **Important**: *always* test the path name against any test string - * usingthe {@link isNamed} method, and not by directly comparing this - * string. Otherwise, unicode path strings that the system sees as identical - * will not be properly treated as the same path, leading to incorrect - * behavior and possible security issues. - */ - name; - /** - * the Path entry corresponding to the path root. - * - * @internal - */ - root; - /** - * All roots found within the current PathScurry family - * - * @internal - */ - roots; - /** - * a reference to the parent path, or undefined in the case of root entries - * - * @internal - */ - parent; - /** - * boolean indicating whether paths are compared case-insensitively - * @internal - */ - nocase; - /** - * boolean indicating that this path is the current working directory - * of the PathScurry collection that contains it. - */ - isCWD = false; - // potential default fs override - #fs; - // Stats fields - #dev; - get dev() { - return this.#dev; - } - #mode; - get mode() { - return this.#mode; - } - #nlink; - get nlink() { - return this.#nlink; - } - #uid; - get uid() { - return this.#uid; - } - #gid; - get gid() { - return this.#gid; - } - #rdev; - get rdev() { - return this.#rdev; - } - #blksize; - get blksize() { - return this.#blksize; - } - #ino; - get ino() { - return this.#ino; - } - #size; - get size() { - return this.#size; - } - #blocks; - get blocks() { - return this.#blocks; - } - #atimeMs; - get atimeMs() { - return this.#atimeMs; - } - #mtimeMs; - get mtimeMs() { - return this.#mtimeMs; - } - #ctimeMs; - get ctimeMs() { - return this.#ctimeMs; - } - #birthtimeMs; - get birthtimeMs() { - return this.#birthtimeMs; - } - #atime; - get atime() { - return this.#atime; - } - #mtime; - get mtime() { - return this.#mtime; - } - #ctime; - get ctime() { - return this.#ctime; - } - #birthtime; - get birthtime() { - return this.#birthtime; - } - #matchName; - #depth; - #fullpath; - #fullpathPosix; - #relative; - #relativePosix; - #type; - #children; - #linkTarget; - #realpath; - /** - * This property is for compatibility with the Dirent class as of - * Node v20, where Dirent['parentPath'] refers to the path of the - * directory that was passed to readdir. For root entries, it's the path - * to the entry itself. - */ - get parentPath() { - return (this.parent || this).fullpath(); - } - /** - * Deprecated alias for Dirent['parentPath'] Somewhat counterintuitively, - * this property refers to the *parent* path, not the path object itself. - * - * @deprecated - */ - get path() { - return this.parentPath; - } - /** - * Do not create new Path objects directly. They should always be accessed - * via the PathScurry class or other methods on the Path class. - * - * @internal - */ - constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) { - this.name = name; - this.#matchName = nocase ? normalizeNocase(name) : normalize3(name); - this.#type = type & TYPEMASK; - this.nocase = nocase; - this.roots = roots; - this.root = root || this; - this.#children = children; - this.#fullpath = opts.fullpath; - this.#relative = opts.relative; - this.#relativePosix = opts.relativePosix; - this.parent = opts.parent; - if (this.parent) { - this.#fs = this.parent.#fs; - } else { - this.#fs = fsFromOption(opts.fs); - } - } - /** - * Returns the depth of the Path object from its root. - * - * For example, a path at `/foo/bar` would have a depth of 2. - */ - depth() { - if (this.#depth !== void 0) - return this.#depth; - if (!this.parent) - return this.#depth = 0; - return this.#depth = this.parent.depth() + 1; - } - /** - * @internal - */ - childrenCache() { - return this.#children; - } - /** - * Get the Path object referenced by the string path, resolved from this Path - */ - resolve(path29) { - if (!path29) { - return this; - } - const rootPath = this.getRootString(path29); - const dir = path29.substring(rootPath.length); - const dirParts = dir.split(this.splitSep); - const result = rootPath ? this.getRoot(rootPath).#resolveParts(dirParts) : this.#resolveParts(dirParts); - return result; - } - #resolveParts(dirParts) { - let p = this; - for (const part of dirParts) { - p = p.child(part); - } - return p; - } - /** - * Returns the cached children Path objects, if still available. If they - * have fallen out of the cache, then returns an empty array, and resets the - * READDIR_CALLED bit, so that future calls to readdir() will require an fs - * lookup. - * - * @internal - */ - children() { - const cached = this.#children.get(this); - if (cached) { - return cached; - } - const children = Object.assign([], { provisional: 0 }); - this.#children.set(this, children); - this.#type &= ~READDIR_CALLED; - return children; - } - /** - * Resolves a path portion and returns or creates the child Path. - * - * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is - * `'..'`. - * - * This should not be called directly. If `pathPart` contains any path - * separators, it will lead to unsafe undefined behavior. - * - * Use `Path.resolve()` instead. - * - * @internal - */ - child(pathPart, opts) { - if (pathPart === "" || pathPart === ".") { - return this; - } - if (pathPart === "..") { - return this.parent || this; - } - const children = this.children(); - const name = this.nocase ? normalizeNocase(pathPart) : normalize3(pathPart); - for (const p of children) { - if (p.#matchName === name) { - return p; - } - } - const s = this.parent ? this.sep : ""; - const fullpath = this.#fullpath ? this.#fullpath + s + pathPart : void 0; - const pchild = this.newChild(pathPart, UNKNOWN, { - ...opts, - parent: this, - fullpath - }); - if (!this.canReaddir()) { - pchild.#type |= ENOENT; - } - children.push(pchild); - return pchild; - } - /** - * The relative path from the cwd. If it does not share an ancestor with - * the cwd, then this ends up being equivalent to the fullpath() - */ - relative() { - if (this.isCWD) - return ""; - if (this.#relative !== void 0) { - return this.#relative; - } - const name = this.name; - const p = this.parent; - if (!p) { - return this.#relative = this.name; - } - const pv = p.relative(); - return pv + (!pv || !p.parent ? "" : this.sep) + name; - } - /** - * The relative path from the cwd, using / as the path separator. - * If it does not share an ancestor with - * the cwd, then this ends up being equivalent to the fullpathPosix() - * On posix systems, this is identical to relative(). - */ - relativePosix() { - if (this.sep === "/") - return this.relative(); - if (this.isCWD) - return ""; - if (this.#relativePosix !== void 0) - return this.#relativePosix; - const name = this.name; - const p = this.parent; - if (!p) { - return this.#relativePosix = this.fullpathPosix(); - } - const pv = p.relativePosix(); - return pv + (!pv || !p.parent ? "" : "/") + name; - } - /** - * The fully resolved path string for this Path entry - */ - fullpath() { - if (this.#fullpath !== void 0) { - return this.#fullpath; - } - const name = this.name; - const p = this.parent; - if (!p) { - return this.#fullpath = this.name; - } - const pv = p.fullpath(); - const fp = pv + (!p.parent ? "" : this.sep) + name; - return this.#fullpath = fp; - } - /** - * On platforms other than windows, this is identical to fullpath. - * - * On windows, this is overridden to return the forward-slash form of the - * full UNC path. - */ - fullpathPosix() { - if (this.#fullpathPosix !== void 0) - return this.#fullpathPosix; - if (this.sep === "/") - return this.#fullpathPosix = this.fullpath(); - if (!this.parent) { - const p2 = this.fullpath().replace(/\\/g, "/"); - if (/^[a-z]:\//i.test(p2)) { - return this.#fullpathPosix = `//?/${p2}`; - } else { - return this.#fullpathPosix = p2; - } - } - const p = this.parent; - const pfpp = p.fullpathPosix(); - const fpp = pfpp + (!pfpp || !p.parent ? "" : "/") + this.name; - return this.#fullpathPosix = fpp; - } - /** - * Is the Path of an unknown type? - * - * Note that we might know *something* about it if there has been a previous - * filesystem operation, for example that it does not exist, or is not a - * link, or whether it has child entries. - */ - isUnknown() { - return (this.#type & IFMT) === UNKNOWN; - } - isType(type) { - return this[`is${type}`](); - } - getType() { - return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : ( - /* c8 ignore start */ - this.isSocket() ? "Socket" : "Unknown" - ); - } - /** - * Is the Path a regular file? - */ - isFile() { - return (this.#type & IFMT) === IFREG; - } - /** - * Is the Path a directory? - */ - isDirectory() { - return (this.#type & IFMT) === IFDIR; - } - /** - * Is the path a character device? - */ - isCharacterDevice() { - return (this.#type & IFMT) === IFCHR; - } - /** - * Is the path a block device? - */ - isBlockDevice() { - return (this.#type & IFMT) === IFBLK; - } - /** - * Is the path a FIFO pipe? - */ - isFIFO() { - return (this.#type & IFMT) === IFIFO; - } - /** - * Is the path a socket? - */ - isSocket() { - return (this.#type & IFMT) === IFSOCK; - } - /** - * Is the path a symbolic link? - */ - isSymbolicLink() { - return (this.#type & IFLNK) === IFLNK; - } - /** - * Return the entry if it has been subject of a successful lstat, or - * undefined otherwise. - * - * Does not read the filesystem, so an undefined result *could* simply - * mean that we haven't called lstat on it. - */ - lstatCached() { - return this.#type & LSTAT_CALLED ? this : void 0; - } - /** - * Return the cached link target if the entry has been the subject of a - * successful readlink, or undefined otherwise. - * - * Does not read the filesystem, so an undefined result *could* just mean we - * don't have any cached data. Only use it if you are very sure that a - * readlink() has been called at some point. - */ - readlinkCached() { - return this.#linkTarget; - } - /** - * Returns the cached realpath target if the entry has been the subject - * of a successful realpath, or undefined otherwise. - * - * Does not read the filesystem, so an undefined result *could* just mean we - * don't have any cached data. Only use it if you are very sure that a - * realpath() has been called at some point. - */ - realpathCached() { - return this.#realpath; - } - /** - * Returns the cached child Path entries array if the entry has been the - * subject of a successful readdir(), or [] otherwise. - * - * Does not read the filesystem, so an empty array *could* just mean we - * don't have any cached data. Only use it if you are very sure that a - * readdir() has been called recently enough to still be valid. - */ - readdirCached() { - const children = this.children(); - return children.slice(0, children.provisional); - } - /** - * Return true if it's worth trying to readlink. Ie, we don't (yet) have - * any indication that readlink will definitely fail. - * - * Returns false if the path is known to not be a symlink, if a previous - * readlink failed, or if the entry does not exist. - */ - canReadlink() { - if (this.#linkTarget) - return true; - if (!this.parent) - return false; - const ifmt = this.#type & IFMT; - return !(ifmt !== UNKNOWN && ifmt !== IFLNK || this.#type & ENOREADLINK || this.#type & ENOENT); - } - /** - * Return true if readdir has previously been successfully called on this - * path, indicating that cachedReaddir() is likely valid. - */ - calledReaddir() { - return !!(this.#type & READDIR_CALLED); - } - /** - * Returns true if the path is known to not exist. That is, a previous lstat - * or readdir failed to verify its existence when that would have been - * expected, or a parent entry was marked either enoent or enotdir. - */ - isENOENT() { - return !!(this.#type & ENOENT); - } - /** - * Return true if the path is a match for the given path name. This handles - * case sensitivity and unicode normalization. - * - * Note: even on case-sensitive systems, it is **not** safe to test the - * equality of the `.name` property to determine whether a given pathname - * matches, due to unicode normalization mismatches. - * - * Always use this method instead of testing the `path.name` property - * directly. - */ - isNamed(n) { - return !this.nocase ? this.#matchName === normalize3(n) : this.#matchName === normalizeNocase(n); - } - /** - * Return the Path object corresponding to the target of a symbolic link. - * - * If the Path is not a symbolic link, or if the readlink call fails for any - * reason, `undefined` is returned. - * - * Result is cached, and thus may be outdated if the filesystem is mutated. - */ - async readlink() { - const target = this.#linkTarget; - if (target) { - return target; - } - if (!this.canReadlink()) { - return void 0; - } - if (!this.parent) { - return void 0; - } - try { - const read = await this.#fs.promises.readlink(this.fullpath()); - const linkTarget = (await this.parent.realpath())?.resolve(read); - if (linkTarget) { - return this.#linkTarget = linkTarget; - } - } catch (er) { - this.#readlinkFail(er.code); - return void 0; - } - } - /** - * Synchronous {@link PathBase.readlink} - */ - readlinkSync() { - const target = this.#linkTarget; - if (target) { - return target; - } - if (!this.canReadlink()) { - return void 0; - } - if (!this.parent) { - return void 0; - } - try { - const read = this.#fs.readlinkSync(this.fullpath()); - const linkTarget = this.parent.realpathSync()?.resolve(read); - if (linkTarget) { - return this.#linkTarget = linkTarget; - } - } catch (er) { - this.#readlinkFail(er.code); - return void 0; - } - } - #readdirSuccess(children) { - this.#type |= READDIR_CALLED; - for (let p = children.provisional; p < children.length; p++) { - const c = children[p]; - if (c) - c.#markENOENT(); - } - } - #markENOENT() { - if (this.#type & ENOENT) - return; - this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN; - this.#markChildrenENOENT(); - } - #markChildrenENOENT() { - const children = this.children(); - children.provisional = 0; - for (const p of children) { - p.#markENOENT(); - } - } - #markENOREALPATH() { - this.#type |= ENOREALPATH; - this.#markENOTDIR(); - } - // save the information when we know the entry is not a dir - #markENOTDIR() { - if (this.#type & ENOTDIR) - return; - let t = this.#type; - if ((t & IFMT) === IFDIR) - t &= IFMT_UNKNOWN; - this.#type = t | ENOTDIR; - this.#markChildrenENOENT(); - } - #readdirFail(code = "") { - if (code === "ENOTDIR" || code === "EPERM") { - this.#markENOTDIR(); - } else if (code === "ENOENT") { - this.#markENOENT(); - } else { - this.children().provisional = 0; - } - } - #lstatFail(code = "") { - if (code === "ENOTDIR") { - const p = this.parent; - p.#markENOTDIR(); - } else if (code === "ENOENT") { - this.#markENOENT(); - } - } - #readlinkFail(code = "") { - let ter = this.#type; - ter |= ENOREADLINK; - if (code === "ENOENT") - ter |= ENOENT; - if (code === "EINVAL" || code === "UNKNOWN") { - ter &= IFMT_UNKNOWN; - } - this.#type = ter; - if (code === "ENOTDIR" && this.parent) { - this.parent.#markENOTDIR(); - } - } - #readdirAddChild(e, c) { - return this.#readdirMaybePromoteChild(e, c) || this.#readdirAddNewChild(e, c); - } - #readdirAddNewChild(e, c) { - const type = entToType(e); - const child = this.newChild(e.name, type, { parent: this }); - const ifmt = child.#type & IFMT; - if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) { - child.#type |= ENOTDIR; - } - c.unshift(child); - c.provisional++; - return child; - } - #readdirMaybePromoteChild(e, c) { - for (let p = c.provisional; p < c.length; p++) { - const pchild = c[p]; - const name = this.nocase ? normalizeNocase(e.name) : normalize3(e.name); - if (name !== pchild.#matchName) { + var Xe = R((Ct) => { + "use strict"; + Object.defineProperty(Ct, "__esModule", { value: true }); + Ct.assertValidPattern = void 0; + var hi = 1024 * 64, oi = (n) => { + if (typeof n != "string") throw new TypeError("invalid pattern"); + if (n.length > hi) throw new TypeError("pattern is too long"); + }; + Ct.assertValidPattern = oi; + }); + var Je = R((Rt) => { + "use strict"; + Object.defineProperty(Rt, "__esModule", { value: true }); + Rt.parseClass = void 0; + var ai = { "[: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] }, ot = (n) => n.replace(/[[\]\\-]/g, "\\$&"), li = (n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), Ye = (n) => n.join(""), ci = (n, t) => { + let e = t; + if (n.charAt(e) !== "[") throw new Error("not in a brace expression"); + let s = [], i = [], r = e + 1, h = false, o = false, a = false, l = false, f = e, c = ""; + t: for (; r < n.length; ) { + let p = n.charAt(r); + if ((p === "!" || p === "^") && r === e + 1) { + l = true, r++; continue; } - return this.#readdirPromoteChild(e, pchild, p, c); - } - } - #readdirPromoteChild(e, p, index2, c) { - const v = p.name; - p.#type = p.#type & IFMT_UNKNOWN | entToType(e); - if (v !== e.name) - p.name = e.name; - if (index2 !== c.provisional) { - if (index2 === c.length - 1) - c.pop(); - else - c.splice(index2, 1); - c.unshift(p); - } - c.provisional++; - return p; - } - /** - * Call lstat() on this Path, and update all known information that can be - * determined. - * - * Note that unlike `fs.lstat()`, the returned value does not contain some - * information, such as `mode`, `dev`, `nlink`, and `ino`. If that - * information is required, you will need to call `fs.lstat` yourself. - * - * If the Path refers to a nonexistent file, or if the lstat call fails for - * any reason, `undefined` is returned. Otherwise the updated Path object is - * returned. - * - * Results are cached, and thus may be out of date if the filesystem is - * mutated. - */ - async lstat() { - if ((this.#type & ENOENT) === 0) { - try { - this.#applyStat(await this.#fs.promises.lstat(this.fullpath())); - return this; - } catch (er) { - this.#lstatFail(er.code); + if (p === "]" && h && !a) { + f = r + 1; + break; } - } - } - /** - * synchronous {@link PathBase.lstat} - */ - lstatSync() { - if ((this.#type & ENOENT) === 0) { - try { - this.#applyStat(this.#fs.lstatSync(this.fullpath())); - return this; - } catch (er) { - this.#lstatFail(er.code); + if (h = true, p === "\\" && !a) { + a = true, r++; + continue; } - } - } - #applyStat(st) { - const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid } = st; - this.#atime = atime; - this.#atimeMs = atimeMs; - this.#birthtime = birthtime; - this.#birthtimeMs = birthtimeMs; - this.#blksize = blksize; - this.#blocks = blocks; - this.#ctime = ctime; - this.#ctimeMs = ctimeMs; - this.#dev = dev; - this.#gid = gid; - this.#ino = ino; - this.#mode = mode; - this.#mtime = mtime; - this.#mtimeMs = mtimeMs; - this.#nlink = nlink; - this.#rdev = rdev; - this.#size = size; - this.#uid = uid; - const ifmt = entToType(st); - this.#type = this.#type & IFMT_UNKNOWN | ifmt | LSTAT_CALLED; - if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) { - this.#type |= ENOTDIR; - } - } - #onReaddirCB = []; - #readdirCBInFlight = false; - #callOnReaddirCB(children) { - this.#readdirCBInFlight = false; - const cbs = this.#onReaddirCB.slice(); - this.#onReaddirCB.length = 0; - cbs.forEach((cb) => cb(null, children)); - } - /** - * Standard node-style callback interface to get list of directory entries. - * - * If the Path cannot or does not contain any children, then an empty array - * is returned. - * - * Results are cached, and thus may be out of date if the filesystem is - * mutated. - * - * @param cb The callback called with (er, entries). Note that the `er` - * param is somewhat extraneous, as all readdir() errors are handled and - * simply result in an empty set of entries being returned. - * @param allowZalgo Boolean indicating that immediately known results should - * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release - * zalgo at your peril, the dark pony lord is devious and unforgiving. - */ - readdirCB(cb, allowZalgo = false) { - if (!this.canReaddir()) { - if (allowZalgo) - cb(null, []); - else - queueMicrotask(() => cb(null, [])); - return; - } - const children = this.children(); - if (this.calledReaddir()) { - const c = children.slice(0, children.provisional); - if (allowZalgo) - cb(null, c); - else - queueMicrotask(() => cb(null, c)); - return; - } - this.#onReaddirCB.push(cb); - if (this.#readdirCBInFlight) { - return; - } - this.#readdirCBInFlight = true; - const fullpath = this.fullpath(); - this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => { - if (er) { - this.#readdirFail(er.code); - children.provisional = 0; - } else { - for (const e of entries) { - this.#readdirAddChild(e, children); + if (p === "[" && !a) { + for (let [b, [w, v, E]] of Object.entries(ai)) if (n.startsWith(b, r)) { + if (c) return ["$.", false, n.length - e, true]; + r += b.length, E ? i.push(w) : s.push(w), o = o || v; + continue t; } - this.#readdirSuccess(children); } - this.#callOnReaddirCB(children.slice(0, children.provisional)); - return; - }); + if (a = false, c) { + p > c ? s.push(ot(c) + "-" + ot(p)) : p === c && s.push(ot(p)), c = "", r++; + continue; + } + if (n.startsWith("-]", r + 1)) { + s.push(ot(p + "-")), r += 2; + continue; + } + if (n.startsWith("-", r + 1)) { + c = p, r += 2; + continue; + } + s.push(ot(p)), r++; + } + if (f < r) return ["", false, 0, false]; + if (!s.length && !i.length) return ["$.", false, n.length - e, true]; + if (i.length === 0 && s.length === 1 && /^\\?.$/.test(s[0]) && !l) { + let p = s[0].length === 2 ? s[0].slice(-1) : s[0]; + return [li(p), false, f - e, false]; + } + let d = "[" + (l ? "^" : "") + Ye(s) + "]", u = "[" + (l ? "" : "^") + Ye(i) + "]"; + return [s.length && i.length ? "(" + d + "|" + u + ")" : s.length ? d : u, o, f - e, true]; + }; + Rt.parseClass = ci; + }); + var kt = R((At) => { + "use strict"; + Object.defineProperty(At, "__esModule", { value: true }); + At.unescape = void 0; + var ui = (n, { windowsPathsNoEscape: t = false, magicalBraces: e = true } = {}) => e ? t ? n.replace(/\[([^\/\\])\]/g, "$1") : n.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1") : t ? n.replace(/\[([^\/\\{}])\]/g, "$1") : n.replace(/((?!\\).|^)\[([^\/\\{}])\]/g, "$1$2").replace(/\\([^\/{}])/g, "$1"); + At.unescape = ui; + }); + var pe = R((Dt) => { + "use strict"; + Object.defineProperty(Dt, "__esModule", { value: true }); + Dt.AST = void 0; + var fi = Je(), Mt = kt(), di = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]), Ze = (n) => di.has(n), pi = "(?!(?:^|/)\\.\\.?(?:$|/))", Pt = "(?!\\.)", mi = /* @__PURE__ */ new Set(["[", "."]), gi = /* @__PURE__ */ new Set(["..", "."]), wi = new Set("().*{}+?[]^$\\!"), bi = (n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), de = "[^/]", Qe = de + "*?", ts = de + "+?", fe = class n { + type; + #t; + #s; + #n = false; + #r = []; + #h; + #S; + #w; + #c = false; + #o; + #f; + #u = false; + constructor(t, e, s = {}) { + this.type = t, t && (this.#s = true), this.#h = e, this.#t = this.#h ? this.#h.#t : this, this.#o = this.#t === this ? s : this.#t.#o, this.#w = this.#t === this ? [] : this.#t.#w, t === "!" && !this.#t.#c && this.#w.push(this), this.#S = this.#h ? this.#h.#r.length : 0; + } + get hasMagic() { + if (this.#s !== void 0) return this.#s; + for (let t of this.#r) if (typeof t != "string" && (t.type || t.hasMagic)) return this.#s = true; + return this.#s; + } + toString() { + return this.#f !== void 0 ? this.#f : this.type ? this.#f = this.type + "(" + this.#r.map((t) => String(t)).join("|") + ")" : this.#f = this.#r.map((t) => String(t)).join(""); + } + #a() { + if (this !== this.#t) throw new Error("should only call on root"); + if (this.#c) return this; + this.toString(), this.#c = true; + let t; + for (; t = this.#w.pop(); ) { + if (t.type !== "!") continue; + let e = t, s = e.#h; + for (; s; ) { + for (let i = e.#S + 1; !s.type && i < s.#r.length; i++) for (let r of t.#r) { + if (typeof r == "string") throw new Error("string part in extglob AST??"); + r.copyIn(s.#r[i]); + } + e = s, s = e.#h; + } + } + return this; + } + push(...t) { + for (let e of t) if (e !== "") { + if (typeof e != "string" && !(e instanceof n && e.#h === this)) throw new Error("invalid part: " + e); + this.#r.push(e); + } + } + toJSON() { + let t = this.type === null ? this.#r.slice().map((e) => typeof e == "string" ? e : e.toJSON()) : [this.type, ...this.#r.map((e) => e.toJSON())]; + return this.isStart() && !this.type && t.unshift([]), this.isEnd() && (this === this.#t || this.#t.#c && this.#h?.type === "!") && t.push({}), t; + } + isStart() { + if (this.#t === this) return true; + if (!this.#h?.isStart()) return false; + if (this.#S === 0) return true; + let t = this.#h; + for (let e = 0; e < this.#S; e++) { + let s = t.#r[e]; + if (!(s instanceof n && s.type === "!")) return false; + } + return true; + } + isEnd() { + if (this.#t === this || this.#h?.type === "!") return true; + if (!this.#h?.isEnd()) return false; + if (!this.type) return this.#h?.isEnd(); + let t = this.#h ? this.#h.#r.length : 0; + return this.#S === t - 1; + } + copyIn(t) { + typeof t == "string" ? this.push(t) : this.push(t.clone(this)); + } + clone(t) { + let e = new n(this.type, t); + for (let s of this.#r) e.copyIn(s); + return e; + } + static #i(t, e, s, i) { + let r = false, h = false, o = -1, a = false; + if (e.type === null) { + let u = s, m = ""; + for (; u < t.length; ) { + let p = t.charAt(u++); + if (r || p === "\\") { + r = !r, m += p; + continue; + } + if (h) { + u === o + 1 ? (p === "^" || p === "!") && (a = true) : p === "]" && !(u === o + 2 && a) && (h = false), m += p; + continue; + } else if (p === "[") { + h = true, o = u, a = false, m += p; + continue; + } + if (!i.noext && Ze(p) && t.charAt(u) === "(") { + e.push(m), m = ""; + let b = new n(p, e); + u = n.#i(t, b, u, i), e.push(b); + continue; + } + m += p; + } + return e.push(m), u; + } + let l = s + 1, f = new n(null, e), c = [], d = ""; + for (; l < t.length; ) { + let u = t.charAt(l++); + if (r || u === "\\") { + r = !r, d += u; + continue; + } + if (h) { + l === o + 1 ? (u === "^" || u === "!") && (a = true) : u === "]" && !(l === o + 2 && a) && (h = false), d += u; + continue; + } else if (u === "[") { + h = true, o = l, a = false, d += u; + continue; + } + if (Ze(u) && t.charAt(l) === "(") { + f.push(d), d = ""; + let m = new n(u, f); + f.push(m), l = n.#i(t, m, l, i); + continue; + } + if (u === "|") { + f.push(d), d = "", c.push(f), f = new n(null, e); + continue; + } + if (u === ")") return d === "" && e.#r.length === 0 && (e.#u = true), f.push(d), d = "", e.push(...c, f), l; + d += u; + } + return e.type = null, e.#s = void 0, e.#r = [t.substring(s - 1)], l; + } + static fromGlob(t, e = {}) { + let s = new n(null, void 0, e); + return n.#i(t, s, 0, e), s; + } + toMMPattern() { + if (this !== this.#t) return this.#t.toMMPattern(); + let t = this.toString(), [e, s, i, r] = this.toRegExpSource(); + if (!(i || this.#s || this.#o.nocase && !this.#o.nocaseMagicOnly && t.toUpperCase() !== t.toLowerCase())) return s; + let o = (this.#o.nocase ? "i" : "") + (r ? "u" : ""); + return Object.assign(new RegExp(`^${e}$`, o), { _src: e, _glob: t }); + } + get options() { + return this.#o; + } + toRegExpSource(t) { + let e = t ?? !!this.#o.dot; + if (this.#t === this && this.#a(), !this.type) { + let a = this.isStart() && this.isEnd() && !this.#r.some((u) => typeof u != "string"), l = this.#r.map((u) => { + let [m, p, b, w] = typeof u == "string" ? n.#v(u, this.#s, a) : u.toRegExpSource(t); + return this.#s = this.#s || b, this.#n = this.#n || w, m; + }).join(""), f = ""; + if (this.isStart() && typeof this.#r[0] == "string" && !(this.#r.length === 1 && gi.has(this.#r[0]))) { + let m = mi, p = e && m.has(l.charAt(0)) || l.startsWith("\\.") && m.has(l.charAt(2)) || l.startsWith("\\.\\.") && m.has(l.charAt(4)), b = !e && !t && m.has(l.charAt(0)); + f = p ? pi : b ? Pt : ""; + } + let c = ""; + return this.isEnd() && this.#t.#c && this.#h?.type === "!" && (c = "(?:$|\\/)"), [f + l + c, (0, Mt.unescape)(l), this.#s = !!this.#s, this.#n]; + } + let s = this.type === "*" || this.type === "+", i = this.type === "!" ? "(?:(?!(?:" : "(?:", r = this.#d(e); + if (this.isStart() && this.isEnd() && !r && this.type !== "!") { + let a = this.toString(); + return this.#r = [a], this.type = null, this.#s = void 0, [a, (0, Mt.unescape)(this.toString()), false, false]; + } + let h = !s || t || e || !Pt ? "" : this.#d(true); + h === r && (h = ""), h && (r = `(?:${r})(?:${h})*?`); + let o = ""; + if (this.type === "!" && this.#u) o = (this.isStart() && !e ? Pt : "") + ts; + else { + let a = this.type === "!" ? "))" + (this.isStart() && !e && !t ? Pt : "") + Qe + ")" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && h ? ")" : this.type === "*" && h ? ")?" : `)${this.type}`; + o = i + r + a; + } + return [o, (0, Mt.unescape)(r), this.#s = !!this.#s, this.#n]; + } + #d(t) { + return this.#r.map((e) => { + if (typeof e == "string") throw new Error("string type in extglob ast??"); + let [s, i, r, h] = e.toRegExpSource(t); + return this.#n = this.#n || h, s; + }).filter((e) => !(this.isStart() && this.isEnd()) || !!e).join("|"); + } + static #v(t, e, s = false) { + let i = false, r = "", h = false, o = false; + for (let a = 0; a < t.length; a++) { + let l = t.charAt(a); + if (i) { + i = false, r += (wi.has(l) ? "\\" : "") + l; + continue; + } + if (l === "*") { + if (o) continue; + o = true, r += s && /^[*]+$/.test(t) ? ts : Qe, e = true; + continue; + } else o = false; + if (l === "\\") { + a === t.length - 1 ? r += "\\\\" : i = true; + continue; + } + if (l === "[") { + let [f, c, d, u] = (0, fi.parseClass)(t, a); + if (d) { + r += f, h = h || c, a += d - 1, e = e || u; + continue; + } + } + if (l === "?") { + r += de, e = true; + continue; + } + r += bi(l); + } + return [r, (0, Mt.unescape)(t), !!e, h]; + } + }; + Dt.AST = fe; + }); + var me = R((Ft) => { + "use strict"; + Object.defineProperty(Ft, "__esModule", { value: true }); + Ft.escape = void 0; + var yi = (n, { windowsPathsNoEscape: t = false, magicalBraces: e = false } = {}) => e ? t ? n.replace(/[?*()[\]{}]/g, "[$&]") : n.replace(/[?*()[\]\\{}]/g, "\\$&") : t ? n.replace(/[?*()[\]]/g, "[$&]") : n.replace(/[?*()[\]\\]/g, "\\$&"); + Ft.escape = yi; + }); + var H = R((g) => { + "use strict"; + Object.defineProperty(g, "__esModule", { value: true }); + g.unescape = g.escape = g.AST = g.Minimatch = g.match = g.makeRe = g.braceExpand = g.defaults = g.filter = g.GLOBSTAR = g.sep = g.minimatch = void 0; + var Si = Ke(), jt = Xe(), is = pe(), vi = me(), Ei = kt(), _i = (n, t, e = {}) => ((0, jt.assertValidPattern)(t), !e.nocomment && t.charAt(0) === "#" ? false : new J(t, e).match(n)); + g.minimatch = _i; + var Oi = /^\*+([^+@!?\*\[\(]*)$/, xi = (n) => (t) => !t.startsWith(".") && t.endsWith(n), Ti = (n) => (t) => t.endsWith(n), Ci = (n) => (n = n.toLowerCase(), (t) => !t.startsWith(".") && t.toLowerCase().endsWith(n)), Ri = (n) => (n = n.toLowerCase(), (t) => t.toLowerCase().endsWith(n)), Ai = /^\*+\.\*+$/, ki = (n) => !n.startsWith(".") && n.includes("."), Mi = (n) => n !== "." && n !== ".." && n.includes("."), Pi = /^\.\*+$/, Di = (n) => n !== "." && n !== ".." && n.startsWith("."), Fi = /^\*+$/, ji = (n) => n.length !== 0 && !n.startsWith("."), Ni = (n) => n.length !== 0 && n !== "." && n !== "..", Li = /^\?+([^+@!?\*\[\(]*)?$/, Wi = ([n, t = ""]) => { + let e = rs([n]); + return t ? (t = t.toLowerCase(), (s) => e(s) && s.toLowerCase().endsWith(t)) : e; + }, Bi = ([n, t = ""]) => { + let e = ns([n]); + return t ? (t = t.toLowerCase(), (s) => e(s) && s.toLowerCase().endsWith(t)) : e; + }, Ii = ([n, t = ""]) => { + let e = ns([n]); + return t ? (s) => e(s) && s.endsWith(t) : e; + }, Gi = ([n, t = ""]) => { + let e = rs([n]); + return t ? (s) => e(s) && s.endsWith(t) : e; + }, rs = ([n]) => { + let t = n.length; + return (e) => e.length === t && !e.startsWith("."); + }, ns = ([n]) => { + let t = n.length; + return (e) => e.length === t && e !== "." && e !== ".."; + }, hs = typeof process == "object" && process ? typeof process.env == "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix", es = { win32: { sep: "\\" }, posix: { sep: "/" } }; + g.sep = hs === "win32" ? es.win32.sep : es.posix.sep; + g.minimatch.sep = g.sep; + g.GLOBSTAR = /* @__PURE__ */ Symbol("globstar **"); + g.minimatch.GLOBSTAR = g.GLOBSTAR; + var zi = "[^/]", Ui = zi + "*?", $i = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?", qi = "(?:(?!(?:\\/|^)\\.).)*?", Hi = (n, t = {}) => (e) => (0, g.minimatch)(e, n, t); + g.filter = Hi; + g.minimatch.filter = g.filter; + var F = (n, t = {}) => Object.assign({}, n, t), Vi = (n) => { + if (!n || typeof n != "object" || !Object.keys(n).length) return g.minimatch; + let t = g.minimatch; + return Object.assign((s, i, r = {}) => t(s, i, F(n, r)), { Minimatch: class extends t.Minimatch { + constructor(i, r = {}) { + super(i, F(n, r)); + } + static defaults(i) { + return t.defaults(F(n, i)).Minimatch; + } + }, AST: class extends t.AST { + constructor(i, r, h = {}) { + super(i, r, F(n, h)); + } + static fromGlob(i, r = {}) { + return t.AST.fromGlob(i, F(n, r)); + } + }, unescape: (s, i = {}) => t.unescape(s, F(n, i)), escape: (s, i = {}) => t.escape(s, F(n, i)), filter: (s, i = {}) => t.filter(s, F(n, i)), defaults: (s) => t.defaults(F(n, s)), makeRe: (s, i = {}) => t.makeRe(s, F(n, i)), braceExpand: (s, i = {}) => t.braceExpand(s, F(n, i)), match: (s, i, r = {}) => t.match(s, i, F(n, r)), sep: t.sep, GLOBSTAR: g.GLOBSTAR }); + }; + g.defaults = Vi; + g.minimatch.defaults = g.defaults; + var Ki = (n, t = {}) => ((0, jt.assertValidPattern)(n), t.nobrace || !/\{(?:(?!\{).)*\}/.test(n) ? [n] : (0, Si.expand)(n, { max: t.braceExpandMax })); + g.braceExpand = Ki; + g.minimatch.braceExpand = g.braceExpand; + var Xi = (n, t = {}) => new J(n, t).makeRe(); + g.makeRe = Xi; + g.minimatch.makeRe = g.makeRe; + var Yi = (n, t, e = {}) => { + let s = new J(t, e); + return n = n.filter((i) => s.match(i)), s.options.nonull && !n.length && n.push(t), n; + }; + g.match = Yi; + g.minimatch.match = g.match; + var ss = /[?*]|[+@!]\(.*?\)|\[|\]/, Ji = (n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), J = class { + options; + set; + pattern; + windowsPathsNoEscape; + nonegate; + negate; + comment; + empty; + preserveMultipleSlashes; + partial; + globSet; + globParts; + nocase; + isWindows; + platform; + windowsNoMagicRoot; + regexp; + constructor(t, e = {}) { + (0, jt.assertValidPattern)(t), e = e || {}, this.options = e, this.pattern = t, this.platform = e.platform || hs, this.isWindows = this.platform === "win32"; + let s = "allowWindowsEscape"; + this.windowsPathsNoEscape = !!e.windowsPathsNoEscape || e[s] === false, this.windowsPathsNoEscape && (this.pattern = this.pattern.replace(/\\/g, "/")), this.preserveMultipleSlashes = !!e.preserveMultipleSlashes, this.regexp = null, this.negate = false, this.nonegate = !!e.nonegate, this.comment = false, this.empty = false, this.partial = !!e.partial, this.nocase = !!this.options.nocase, this.windowsNoMagicRoot = e.windowsNoMagicRoot !== void 0 ? e.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 (let t of this.set) for (let e of t) if (typeof e != "string") return true; + return false; + } + debug(...t) { + } + make() { + let t = this.pattern, e = this.options; + if (!e.nocomment && t.charAt(0) === "#") { + this.comment = true; + return; + } + if (!t) { + this.empty = true; + return; + } + this.parseNegate(), this.globSet = [...new Set(this.braceExpand())], e.debug && (this.debug = (...r) => console.error(...r)), this.debug(this.pattern, this.globSet); + let s = this.globSet.map((r) => this.slashSplit(r)); + this.globParts = this.preprocess(s), this.debug(this.pattern, this.globParts); + let i = this.globParts.map((r, h, o) => { + if (this.isWindows && this.windowsNoMagicRoot) { + let a = r[0] === "" && r[1] === "" && (r[2] === "?" || !ss.test(r[2])) && !ss.test(r[3]), l = /^[a-z]:/i.test(r[0]); + if (a) return [...r.slice(0, 4), ...r.slice(4).map((f) => this.parse(f))]; + if (l) return [r[0], ...r.slice(1).map((f) => this.parse(f))]; + } + return r.map((a) => this.parse(a)); + }); + if (this.debug(this.pattern, i), this.set = i.filter((r) => r.indexOf(false) === -1), this.isWindows) for (let r = 0; r < this.set.length; r++) { + let h = this.set[r]; + h[0] === "" && h[1] === "" && this.globParts[r][2] === "?" && typeof h[3] == "string" && /^[a-z]:$/i.test(h[3]) && (h[2] = "?"); + } + this.debug(this.pattern, this.set); + } + preprocess(t) { + if (this.options.noglobstar) for (let s = 0; s < t.length; s++) for (let i = 0; i < t[s].length; i++) t[s][i] === "**" && (t[s][i] = "*"); + let { optimizationLevel: e = 1 } = this.options; + return e >= 2 ? (t = this.firstPhasePreProcess(t), t = this.secondPhasePreProcess(t)) : e >= 1 ? t = this.levelOneOptimize(t) : t = this.adjascentGlobstarOptimize(t), t; + } + adjascentGlobstarOptimize(t) { + return t.map((e) => { + let s = -1; + for (; (s = e.indexOf("**", s + 1)) !== -1; ) { + let i = s; + for (; e[i + 1] === "**"; ) i++; + i !== s && e.splice(s, i - s); + } + return e; + }); + } + levelOneOptimize(t) { + return t.map((e) => (e = e.reduce((s, i) => { + let r = s[s.length - 1]; + return i === "**" && r === "**" ? s : i === ".." && r && r !== ".." && r !== "." && r !== "**" ? (s.pop(), s) : (s.push(i), s); + }, []), e.length === 0 ? [""] : e)); + } + levelTwoFileOptimize(t) { + Array.isArray(t) || (t = this.slashSplit(t)); + let e = false; + do { + if (e = false, !this.preserveMultipleSlashes) { + for (let i = 1; i < t.length - 1; i++) { + let r = t[i]; + i === 1 && r === "" && t[0] === "" || (r === "." || r === "") && (e = true, t.splice(i, 1), i--); + } + t[0] === "." && t.length === 2 && (t[1] === "." || t[1] === "") && (e = true, t.pop()); + } + let s = 0; + for (; (s = t.indexOf("..", s + 1)) !== -1; ) { + let i = t[s - 1]; + i && i !== "." && i !== ".." && i !== "**" && (e = true, t.splice(s - 1, 2), s -= 2); + } + } while (e); + return t.length === 0 ? [""] : t; + } + firstPhasePreProcess(t) { + let e = false; + do { + e = false; + for (let s of t) { + let i = -1; + for (; (i = s.indexOf("**", i + 1)) !== -1; ) { + let h = i; + for (; s[h + 1] === "**"; ) h++; + h > i && s.splice(i + 1, h - i); + let o = s[i + 1], a = s[i + 2], l = s[i + 3]; + if (o !== ".." || !a || a === "." || a === ".." || !l || l === "." || l === "..") continue; + e = true, s.splice(i, 1); + let f = s.slice(0); + f[i] = "**", t.push(f), i--; + } + if (!this.preserveMultipleSlashes) { + for (let h = 1; h < s.length - 1; h++) { + let o = s[h]; + h === 1 && o === "" && s[0] === "" || (o === "." || o === "") && (e = true, s.splice(h, 1), h--); + } + s[0] === "." && s.length === 2 && (s[1] === "." || s[1] === "") && (e = true, s.pop()); + } + let r = 0; + for (; (r = s.indexOf("..", r + 1)) !== -1; ) { + let h = s[r - 1]; + if (h && h !== "." && h !== ".." && h !== "**") { + e = true; + let a = r === 1 && s[r + 1] === "**" ? ["."] : []; + s.splice(r - 1, 2, ...a), s.length === 0 && s.push(""), r -= 2; + } + } + } + } while (e); + return t; + } + secondPhasePreProcess(t) { + for (let e = 0; e < t.length - 1; e++) for (let s = e + 1; s < t.length; s++) { + let i = this.partsMatch(t[e], t[s], !this.preserveMultipleSlashes); + if (i) { + t[e] = [], t[s] = i; + break; + } + } + return t.filter((e) => e.length); + } + partsMatch(t, e, s = false) { + let i = 0, r = 0, h = [], o = ""; + for (; i < t.length && r < e.length; ) if (t[i] === e[r]) h.push(o === "b" ? e[r] : t[i]), i++, r++; + else if (s && t[i] === "**" && e[r] === t[i + 1]) h.push(t[i]), i++; + else if (s && e[r] === "**" && t[i] === e[r + 1]) h.push(e[r]), r++; + else if (t[i] === "*" && e[r] && (this.options.dot || !e[r].startsWith(".")) && e[r] !== "**") { + if (o === "b") return false; + o = "a", h.push(t[i]), i++, r++; + } else if (e[r] === "*" && t[i] && (this.options.dot || !t[i].startsWith(".")) && t[i] !== "**") { + if (o === "a") return false; + o = "b", h.push(e[r]), i++, r++; + } else return false; + return t.length === e.length && h; + } + parseNegate() { + if (this.nonegate) return; + let t = this.pattern, e = false, s = 0; + for (let i = 0; i < t.length && t.charAt(i) === "!"; i++) e = !e, s++; + s && (this.pattern = t.slice(s)), this.negate = e; + } + matchOne(t, e, s = false) { + let i = this.options; + if (this.isWindows) { + let p = typeof t[0] == "string" && /^[a-z]:$/i.test(t[0]), b = !p && t[0] === "" && t[1] === "" && t[2] === "?" && /^[a-z]:$/i.test(t[3]), w = typeof e[0] == "string" && /^[a-z]:$/i.test(e[0]), v = !w && e[0] === "" && e[1] === "" && e[2] === "?" && typeof e[3] == "string" && /^[a-z]:$/i.test(e[3]), E = b ? 3 : p ? 0 : void 0, y = v ? 3 : w ? 0 : void 0; + if (typeof E == "number" && typeof y == "number") { + let [S, B] = [t[E], e[y]]; + S.toLowerCase() === B.toLowerCase() && (e[y] = S, y > E ? e = e.slice(y) : E > y && (t = t.slice(E))); + } + } + let { optimizationLevel: r = 1 } = this.options; + r >= 2 && (t = this.levelTwoFileOptimize(t)), this.debug("matchOne", this, { file: t, pattern: e }), this.debug("matchOne", t.length, e.length); + for (var h = 0, o = 0, a = t.length, l = e.length; h < a && o < l; h++, o++) { + this.debug("matchOne loop"); + var f = e[o], c = t[h]; + if (this.debug(e, f, c), f === false) return false; + if (f === g.GLOBSTAR) { + this.debug("GLOBSTAR", [e, f, c]); + var d = h, u = o + 1; + if (u === l) { + for (this.debug("** at the end"); h < a; h++) if (t[h] === "." || t[h] === ".." || !i.dot && t[h].charAt(0) === ".") return false; + return true; + } + for (; d < a; ) { + var m = t[d]; + if (this.debug(` +globstar while`, t, d, e, u, m), this.matchOne(t.slice(d), e.slice(u), s)) return this.debug("globstar found match!", d, a, m), true; + if (m === "." || m === ".." || !i.dot && m.charAt(0) === ".") { + this.debug("dot detected!", t, d, e, u); + break; + } + this.debug("globstar swallow a segment, and continue"), d++; + } + return !!(s && (this.debug(` +>>> no match, partial?`, t, d, e, u), d === a)); + } + let p; + if (typeof f == "string" ? (p = c === f, this.debug("string match", f, c, p)) : (p = f.test(c), this.debug("pattern match", f, c, p)), !p) return false; + } + if (h === a && o === l) return true; + if (h === a) return s; + if (o === l) return h === a - 1 && t[h] === ""; + throw new Error("wtf?"); + } + braceExpand() { + return (0, g.braceExpand)(this.pattern, this.options); + } + parse(t) { + (0, jt.assertValidPattern)(t); + let e = this.options; + if (t === "**") return g.GLOBSTAR; + if (t === "") return ""; + let s, i = null; + (s = t.match(Fi)) ? i = e.dot ? Ni : ji : (s = t.match(Oi)) ? i = (e.nocase ? e.dot ? Ri : Ci : e.dot ? Ti : xi)(s[1]) : (s = t.match(Li)) ? i = (e.nocase ? e.dot ? Bi : Wi : e.dot ? Ii : Gi)(s) : (s = t.match(Ai)) ? i = e.dot ? Mi : ki : (s = t.match(Pi)) && (i = Di); + let r = is.AST.fromGlob(t, this.options).toMMPattern(); + return i && typeof r == "object" && Reflect.defineProperty(r, "test", { value: i }), r; + } + makeRe() { + if (this.regexp || this.regexp === false) return this.regexp; + let t = this.set; + if (!t.length) return this.regexp = false, this.regexp; + let e = this.options, s = e.noglobstar ? Ui : e.dot ? $i : qi, i = new Set(e.nocase ? ["i"] : []), r = t.map((a) => { + let l = a.map((c) => { + if (c instanceof RegExp) for (let d of c.flags.split("")) i.add(d); + return typeof c == "string" ? Ji(c) : c === g.GLOBSTAR ? g.GLOBSTAR : c._src; + }); + l.forEach((c, d) => { + let u = l[d + 1], m = l[d - 1]; + c !== g.GLOBSTAR || m === g.GLOBSTAR || (m === void 0 ? u !== void 0 && u !== g.GLOBSTAR ? l[d + 1] = "(?:\\/|" + s + "\\/)?" + u : l[d] = s : u === void 0 ? l[d - 1] = m + "(?:\\/|\\/" + s + ")?" : u !== g.GLOBSTAR && (l[d - 1] = m + "(?:\\/|\\/" + s + "\\/)" + u, l[d + 1] = g.GLOBSTAR)); + }); + let f = l.filter((c) => c !== g.GLOBSTAR); + if (this.partial && f.length >= 1) { + let c = []; + for (let d = 1; d <= f.length; d++) c.push(f.slice(0, d).join("/")); + return "(?:" + c.join("|") + ")"; + } + return f.join("/"); + }).join("|"), [h, o] = t.length > 1 ? ["(?:", ")"] : ["", ""]; + r = "^" + h + r + o + "$", this.partial && (r = "^(?:\\/|" + h + r.slice(1, -1) + o + ")$"), this.negate && (r = "^(?!" + r + ").+$"); + try { + this.regexp = new RegExp(r, [...i].join("")); + } catch { + this.regexp = false; + } + return this.regexp; + } + slashSplit(t) { + return this.preserveMultipleSlashes ? t.split("/") : this.isWindows && /^\/\/[^\/]+/.test(t) ? ["", ...t.split(/\/+/)] : t.split(/\/+/); + } + match(t, e = this.partial) { + if (this.debug("match", t, this.pattern), this.comment) return false; + if (this.empty) return t === ""; + if (t === "/" && e) return true; + let s = this.options; + this.isWindows && (t = t.split("\\").join("/")); + let i = this.slashSplit(t); + this.debug(this.pattern, "split", i); + let r = this.set; + this.debug(this.pattern, "set", r); + let h = i[i.length - 1]; + if (!h) for (let o = i.length - 2; !h && o >= 0; o--) h = i[o]; + for (let o = 0; o < r.length; o++) { + let a = r[o], l = i; + if (s.matchBase && a.length === 1 && (l = [h]), this.matchOne(l, a, e)) return s.flipNegate ? true : !this.negate; + } + return s.flipNegate ? false : this.negate; + } + static defaults(t) { + return g.minimatch.defaults(t).Minimatch; + } + }; + g.Minimatch = J; + var Zi = pe(); + Object.defineProperty(g, "AST", { enumerable: true, get: function() { + return Zi.AST; + } }); + var Qi = me(); + Object.defineProperty(g, "escape", { enumerable: true, get: function() { + return Qi.escape; + } }); + var tr = kt(); + Object.defineProperty(g, "unescape", { enumerable: true, get: function() { + return tr.unescape; + } }); + g.minimatch.AST = is.AST; + g.minimatch.Minimatch = J; + g.minimatch.escape = vi.escape; + g.minimatch.unescape = Ei.unescape; + }); + var fs31 = R((Wt) => { + "use strict"; + Object.defineProperty(Wt, "__esModule", { value: true }); + Wt.LRUCache = void 0; + var er = typeof performance == "object" && performance && typeof performance.now == "function" ? performance : Date, as = /* @__PURE__ */ new Set(), ge = typeof process == "object" && process ? process : {}, ls = (n, t, e, s) => { + typeof ge.emitWarning == "function" ? ge.emitWarning(n, t, e, s) : console.error(`[${e}] ${t}: ${n}`); + }, Lt = globalThis.AbortController, os7 = globalThis.AbortSignal; + if (typeof Lt > "u") { + os7 = class { + onabort; + _onabort = []; + reason; + aborted = false; + addEventListener(e, s) { + this._onabort.push(s); + } + }, Lt = class { + constructor() { + t(); + } + signal = new os7(); + abort(e) { + if (!this.signal.aborted) { + this.signal.reason = e, this.signal.aborted = true; + for (let s of this.signal._onabort) s(e); + this.signal.onabort?.(e); + } + } + }; + let n = ge.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1", t = () => { + n && (n = false, ls("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", t)); + }; } - #asyncReaddirInFlight; - /** - * Return an array of known child entries. - * - * If the Path cannot or does not contain any children, then an empty array - * is returned. - * - * Results are cached, and thus may be out of date if the filesystem is - * mutated. - */ - async readdir() { - if (!this.canReaddir()) { - return []; + var sr = (n) => !as.has(n), V = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n), cs = (n) => V(n) ? n <= Math.pow(2, 8) ? Uint8Array : n <= Math.pow(2, 16) ? Uint16Array : n <= Math.pow(2, 32) ? Uint32Array : n <= Number.MAX_SAFE_INTEGER ? Nt : null : null, Nt = class extends Array { + constructor(n) { + super(n), this.fill(0); } - const children = this.children(); - if (this.calledReaddir()) { - return children.slice(0, children.provisional); + }, ir = class at { + heap; + length; + static #t = false; + static create(t) { + let e = cs(t); + if (!e) return []; + at.#t = true; + let s = new at(t, e); + return at.#t = false, s; } - const fullpath = this.fullpath(); - if (this.#asyncReaddirInFlight) { - await this.#asyncReaddirInFlight; - } else { - let resolve14 = () => { + constructor(t, e) { + if (!at.#t) throw new TypeError("instantiate Stack using Stack.create(n)"); + this.heap = new e(t), this.length = 0; + } + push(t) { + this.heap[this.length++] = t; + } + pop() { + return this.heap[--this.length]; + } + }, rr = class us { + #t; + #s; + #n; + #r; + #h; + #S; + #w; + #c; + get perf() { + return this.#c; + } + ttl; + ttlResolution; + ttlAutopurge; + updateAgeOnGet; + updateAgeOnHas; + allowStale; + noDisposeOnSet; + noUpdateTTL; + maxEntrySize; + sizeCalculation; + noDeleteOnFetchRejection; + noDeleteOnStaleGet; + allowStaleOnFetchAbort; + allowStaleOnFetchRejection; + ignoreFetchAbort; + #o; + #f; + #u; + #a; + #i; + #d; + #v; + #y; + #p; + #R; + #m; + #O; + #x; + #g; + #b; + #E; + #T; + #e; + #F; + static unsafeExposeInternals(t) { + return { starts: t.#x, ttls: t.#g, autopurgeTimers: t.#b, sizes: t.#O, keyMap: t.#u, keyList: t.#a, valList: t.#i, next: t.#d, prev: t.#v, get head() { + return t.#y; + }, get tail() { + return t.#p; + }, free: t.#R, isBackgroundFetch: (e) => t.#l(e), backgroundFetch: (e, s, i, r) => t.#z(e, s, i, r), moveToTail: (e) => t.#N(e), indexes: (e) => t.#k(e), rindexes: (e) => t.#M(e), isStale: (e) => t.#_(e) }; + } + get max() { + return this.#t; + } + get maxSize() { + return this.#s; + } + get calculatedSize() { + return this.#f; + } + get size() { + return this.#o; + } + get fetchMethod() { + return this.#S; + } + get memoMethod() { + return this.#w; + } + get dispose() { + return this.#n; + } + get onInsert() { + return this.#r; + } + get disposeAfter() { + return this.#h; + } + constructor(t) { + let { max: e = 0, ttl: s, ttlResolution: i = 1, ttlAutopurge: r, updateAgeOnGet: h, updateAgeOnHas: o, allowStale: a, dispose: l, onInsert: f, disposeAfter: c, noDisposeOnSet: d, noUpdateTTL: u, maxSize: m = 0, maxEntrySize: p = 0, sizeCalculation: b, fetchMethod: w, memoMethod: v, noDeleteOnFetchRejection: E, noDeleteOnStaleGet: y, allowStaleOnFetchRejection: S, allowStaleOnFetchAbort: B, ignoreFetchAbort: U, perf: et } = t; + if (et !== void 0 && typeof et?.now != "function") throw new TypeError("perf option must have a now() method if specified"); + if (this.#c = et ?? er, e !== 0 && !V(e)) throw new TypeError("max option must be a nonnegative integer"); + let st = e ? cs(e) : Array; + if (!st) throw new Error("invalid max value: " + e); + if (this.#t = e, this.#s = m, this.maxEntrySize = p || this.#s, this.sizeCalculation = b, this.sizeCalculation) { + if (!this.#s && !this.maxEntrySize) throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize"); + if (typeof this.sizeCalculation != "function") throw new TypeError("sizeCalculation set to non-function"); + } + if (v !== void 0 && typeof v != "function") throw new TypeError("memoMethod must be a function if defined"); + if (this.#w = v, w !== void 0 && typeof w != "function") throw new TypeError("fetchMethod must be a function if specified"); + if (this.#S = w, this.#T = !!w, this.#u = /* @__PURE__ */ new Map(), this.#a = new Array(e).fill(void 0), this.#i = new Array(e).fill(void 0), this.#d = new st(e), this.#v = new st(e), this.#y = 0, this.#p = 0, this.#R = ir.create(e), this.#o = 0, this.#f = 0, typeof l == "function" && (this.#n = l), typeof f == "function" && (this.#r = f), typeof c == "function" ? (this.#h = c, this.#m = []) : (this.#h = void 0, this.#m = void 0), this.#E = !!this.#n, this.#F = !!this.#r, this.#e = !!this.#h, this.noDisposeOnSet = !!d, this.noUpdateTTL = !!u, this.noDeleteOnFetchRejection = !!E, this.allowStaleOnFetchRejection = !!S, this.allowStaleOnFetchAbort = !!B, this.ignoreFetchAbort = !!U, this.maxEntrySize !== 0) { + if (this.#s !== 0 && !V(this.#s)) throw new TypeError("maxSize must be a positive integer if specified"); + if (!V(this.maxEntrySize)) throw new TypeError("maxEntrySize must be a positive integer if specified"); + this.#$(); + } + if (this.allowStale = !!a, this.noDeleteOnStaleGet = !!y, this.updateAgeOnGet = !!h, this.updateAgeOnHas = !!o, this.ttlResolution = V(i) || i === 0 ? i : 1, this.ttlAutopurge = !!r, this.ttl = s || 0, this.ttl) { + if (!V(this.ttl)) throw new TypeError("ttl must be a positive integer if specified"); + this.#P(); + } + if (this.#t === 0 && this.ttl === 0 && this.#s === 0) throw new TypeError("At least one of max, maxSize, or ttl is required"); + if (!this.ttlAutopurge && !this.#t && !this.#s) { + let le = "LRU_CACHE_UNBOUNDED"; + sr(le) && (as.add(le), ls("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.", "UnboundedCacheWarning", le, us)); + } + } + getRemainingTTL(t) { + return this.#u.has(t) ? 1 / 0 : 0; + } + #P() { + let t = new Nt(this.#t), e = new Nt(this.#t); + this.#g = t, this.#x = e; + let s = this.ttlAutopurge ? new Array(this.#t) : void 0; + this.#b = s, this.#W = (h, o, a = this.#c.now()) => { + if (e[h] = o !== 0 ? a : 0, t[h] = o, s?.[h] && (clearTimeout(s[h]), s[h] = void 0), o !== 0 && s) { + let l = setTimeout(() => { + this.#_(h) && this.#A(this.#a[h], "expire"); + }, o + 1); + l.unref && l.unref(), s[h] = l; + } + }, this.#C = (h) => { + e[h] = t[h] !== 0 ? this.#c.now() : 0; + }, this.#D = (h, o) => { + if (t[o]) { + let a = t[o], l = e[o]; + if (!a || !l) return; + h.ttl = a, h.start = l, h.now = i || r(); + let f = h.now - l; + h.remainingTTL = a - f; + } }; - this.#asyncReaddirInFlight = new Promise((res) => resolve14 = res); - try { - for (const e of await this.#fs.promises.readdir(fullpath, { - withFileTypes: true - })) { - this.#readdirAddChild(e, children); + let i = 0, r = () => { + let h = this.#c.now(); + if (this.ttlResolution > 0) { + i = h; + let o = setTimeout(() => i = 0, this.ttlResolution); + o.unref && o.unref(); } - this.#readdirSuccess(children); - } catch (er) { - this.#readdirFail(er.code); - children.provisional = 0; + return h; + }; + this.getRemainingTTL = (h) => { + let o = this.#u.get(h); + if (o === void 0) return 0; + let a = t[o], l = e[o]; + if (!a || !l) return 1 / 0; + let f = (i || r()) - l; + return a - f; + }, this.#_ = (h) => { + let o = e[h], a = t[h]; + return !!a && !!o && (i || r()) - o > a; + }; + } + #C = () => { + }; + #D = () => { + }; + #W = () => { + }; + #_ = () => false; + #$() { + let t = new Nt(this.#t); + this.#f = 0, this.#O = t, this.#L = (e) => { + this.#f -= t[e], t[e] = 0; + }, this.#B = (e, s, i, r) => { + if (this.#l(s)) return 0; + if (!V(i)) if (r) { + if (typeof r != "function") throw new TypeError("sizeCalculation must be a function"); + if (i = r(s, e), !V(i)) throw new TypeError("sizeCalculation return invalid (expect positive integer)"); + } else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set."); + return i; + }, this.#j = (e, s, i) => { + if (t[e] = s, this.#s) { + let r = this.#s - t[e]; + for (; this.#f > r; ) this.#G(true); + } + this.#f += t[e], i && (i.entrySize = s, i.totalCalculatedSize = this.#f); + }; + } + #L = (t) => { + }; + #j = (t, e, s) => { + }; + #B = (t, e, s, i) => { + if (s || i) throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache"); + return 0; + }; + *#k({ allowStale: t = this.allowStale } = {}) { + if (this.#o) for (let e = this.#p; !(!this.#I(e) || ((t || !this.#_(e)) && (yield e), e === this.#y)); ) e = this.#v[e]; + } + *#M({ allowStale: t = this.allowStale } = {}) { + if (this.#o) for (let e = this.#y; !(!this.#I(e) || ((t || !this.#_(e)) && (yield e), e === this.#p)); ) e = this.#d[e]; + } + #I(t) { + return t !== void 0 && this.#u.get(this.#a[t]) === t; + } + *entries() { + for (let t of this.#k()) this.#i[t] !== void 0 && this.#a[t] !== void 0 && !this.#l(this.#i[t]) && (yield [this.#a[t], this.#i[t]]); + } + *rentries() { + for (let t of this.#M()) this.#i[t] !== void 0 && this.#a[t] !== void 0 && !this.#l(this.#i[t]) && (yield [this.#a[t], this.#i[t]]); + } + *keys() { + for (let t of this.#k()) { + let e = this.#a[t]; + e !== void 0 && !this.#l(this.#i[t]) && (yield e); } - this.#asyncReaddirInFlight = void 0; - resolve14(); } - return children.slice(0, children.provisional); - } - /** - * synchronous {@link PathBase.readdir} - */ - readdirSync() { - if (!this.canReaddir()) { - return []; - } - const children = this.children(); - if (this.calledReaddir()) { - return children.slice(0, children.provisional); - } - const fullpath = this.fullpath(); - try { - for (const e of this.#fs.readdirSync(fullpath, { - withFileTypes: true - })) { - this.#readdirAddChild(e, children); + *rkeys() { + for (let t of this.#M()) { + let e = this.#a[t]; + e !== void 0 && !this.#l(this.#i[t]) && (yield e); } - this.#readdirSuccess(children); - } catch (er) { - this.#readdirFail(er.code); - children.provisional = 0; } - return children.slice(0, children.provisional); - } - canReaddir() { - if (this.#type & ENOCHILD) - return false; - const ifmt = IFMT & this.#type; - if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) { + *values() { + for (let t of this.#k()) this.#i[t] !== void 0 && !this.#l(this.#i[t]) && (yield this.#i[t]); + } + *rvalues() { + for (let t of this.#M()) this.#i[t] !== void 0 && !this.#l(this.#i[t]) && (yield this.#i[t]); + } + [Symbol.iterator]() { + return this.entries(); + } + [Symbol.toStringTag] = "LRUCache"; + find(t, e = {}) { + for (let s of this.#k()) { + let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i; + if (r !== void 0 && t(r, this.#a[s], this)) return this.get(this.#a[s], e); + } + } + forEach(t, e = this) { + for (let s of this.#k()) { + let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i; + r !== void 0 && t.call(e, r, this.#a[s], this); + } + } + rforEach(t, e = this) { + for (let s of this.#M()) { + let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i; + r !== void 0 && t.call(e, r, this.#a[s], this); + } + } + purgeStale() { + let t = false; + for (let e of this.#M({ allowStale: true })) this.#_(e) && (this.#A(this.#a[e], "expire"), t = true); + return t; + } + info(t) { + let e = this.#u.get(t); + if (e === void 0) return; + let s = this.#i[e], i = this.#l(s) ? s.__staleWhileFetching : s; + if (i === void 0) return; + let r = { value: i }; + if (this.#g && this.#x) { + let h = this.#g[e], o = this.#x[e]; + if (h && o) { + let a = h - (this.#c.now() - o); + r.ttl = a, r.start = Date.now(); + } + } + return this.#O && (r.size = this.#O[e]), r; + } + dump() { + let t = []; + for (let e of this.#k({ allowStale: true })) { + let s = this.#a[e], i = this.#i[e], r = this.#l(i) ? i.__staleWhileFetching : i; + if (r === void 0 || s === void 0) continue; + let h = { value: r }; + if (this.#g && this.#x) { + h.ttl = this.#g[e]; + let o = this.#c.now() - this.#x[e]; + h.start = Math.floor(Date.now() - o); + } + this.#O && (h.size = this.#O[e]), t.unshift([s, h]); + } + return t; + } + load(t) { + this.clear(); + for (let [e, s] of t) { + if (s.start) { + let i = Date.now() - s.start; + s.start = this.#c.now() - i; + } + this.set(e, s.value, s); + } + } + set(t, e, s = {}) { + if (e === void 0) return this.delete(t), this; + let { ttl: i = this.ttl, start: r, noDisposeOnSet: h = this.noDisposeOnSet, sizeCalculation: o = this.sizeCalculation, status: a } = s, { noUpdateTTL: l = this.noUpdateTTL } = s, f = this.#B(t, e, s.size || 0, o); + if (this.maxEntrySize && f > this.maxEntrySize) return a && (a.set = "miss", a.maxEntrySizeExceeded = true), this.#A(t, "set"), this; + let c = this.#o === 0 ? void 0 : this.#u.get(t); + if (c === void 0) c = this.#o === 0 ? this.#p : this.#R.length !== 0 ? this.#R.pop() : this.#o === this.#t ? this.#G(false) : this.#o, this.#a[c] = t, this.#i[c] = e, this.#u.set(t, c), this.#d[this.#p] = c, this.#v[c] = this.#p, this.#p = c, this.#o++, this.#j(c, f, a), a && (a.set = "add"), l = false, this.#F && this.#r?.(e, t, "add"); + else { + this.#N(c); + let d = this.#i[c]; + if (e !== d) { + if (this.#T && this.#l(d)) { + d.__abortController.abort(new Error("replaced")); + let { __staleWhileFetching: u } = d; + u !== void 0 && !h && (this.#E && this.#n?.(u, t, "set"), this.#e && this.#m?.push([u, t, "set"])); + } else h || (this.#E && this.#n?.(d, t, "set"), this.#e && this.#m?.push([d, t, "set"])); + if (this.#L(c), this.#j(c, f, a), this.#i[c] = e, a) { + a.set = "replace"; + let u = d && this.#l(d) ? d.__staleWhileFetching : d; + u !== void 0 && (a.oldValue = u); + } + } else a && (a.set = "update"); + this.#F && this.onInsert?.(e, t, e === d ? "update" : "replace"); + } + if (i !== 0 && !this.#g && this.#P(), this.#g && (l || this.#W(c, i, r), a && this.#D(a, c)), !h && this.#e && this.#m) { + let d = this.#m, u; + for (; u = d?.shift(); ) this.#h?.(...u); + } + return this; + } + pop() { + try { + for (; this.#o; ) { + let t = this.#i[this.#y]; + if (this.#G(true), this.#l(t)) { + if (t.__staleWhileFetching) return t.__staleWhileFetching; + } else if (t !== void 0) return t; + } + } finally { + if (this.#e && this.#m) { + let t = this.#m, e; + for (; e = t?.shift(); ) this.#h?.(...e); + } + } + } + #G(t) { + let e = this.#y, s = this.#a[e], i = this.#i[e]; + return this.#T && this.#l(i) ? i.__abortController.abort(new Error("evicted")) : (this.#E || this.#e) && (this.#E && this.#n?.(i, s, "evict"), this.#e && this.#m?.push([i, s, "evict"])), this.#L(e), this.#b?.[e] && (clearTimeout(this.#b[e]), this.#b[e] = void 0), t && (this.#a[e] = void 0, this.#i[e] = void 0, this.#R.push(e)), this.#o === 1 ? (this.#y = this.#p = 0, this.#R.length = 0) : this.#y = this.#d[e], this.#u.delete(s), this.#o--, e; + } + has(t, e = {}) { + let { updateAgeOnHas: s = this.updateAgeOnHas, status: i } = e, r = this.#u.get(t); + if (r !== void 0) { + let h = this.#i[r]; + if (this.#l(h) && h.__staleWhileFetching === void 0) return false; + if (this.#_(r)) i && (i.has = "stale", this.#D(i, r)); + else return s && this.#C(r), i && (i.has = "hit", this.#D(i, r)), true; + } else i && (i.has = "miss"); return false; } - return true; - } - shouldWalk(dirs, walkFilter) { - return (this.#type & IFDIR) === IFDIR && !(this.#type & ENOCHILD) && !dirs.has(this) && (!walkFilter || walkFilter(this)); - } - /** - * Return the Path object corresponding to path as resolved - * by realpath(3). - * - * If the realpath call fails for any reason, `undefined` is returned. - * - * Result is cached, and thus may be outdated if the filesystem is mutated. - * On success, returns a Path object. - */ - async realpath() { - if (this.#realpath) - return this.#realpath; - if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) - return void 0; - try { - const rp = await this.#fs.promises.realpath(this.fullpath()); - return this.#realpath = this.resolve(rp); - } catch (_2) { - this.#markENOREALPATH(); + peek(t, e = {}) { + let { allowStale: s = this.allowStale } = e, i = this.#u.get(t); + if (i === void 0 || !s && this.#_(i)) return; + let r = this.#i[i]; + return this.#l(r) ? r.__staleWhileFetching : r; } - } - /** - * Synchronous {@link realpath} - */ - realpathSync() { - if (this.#realpath) - return this.#realpath; - if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) - return void 0; - try { - const rp = this.#fs.realpathSync(this.fullpath()); - return this.#realpath = this.resolve(rp); - } catch (_2) { - this.#markENOREALPATH(); + #z(t, e, s, i) { + let r = e === void 0 ? void 0 : this.#i[e]; + if (this.#l(r)) return r; + let h = new Lt(), { signal: o } = s; + o?.addEventListener("abort", () => h.abort(o.reason), { signal: h.signal }); + let a = { signal: h.signal, options: s, context: i }, l = (p, b = false) => { + let { aborted: w } = h.signal, v = s.ignoreFetchAbort && p !== void 0, E = s.ignoreFetchAbort || !!(s.allowStaleOnFetchAbort && p !== void 0); + if (s.status && (w && !b ? (s.status.fetchAborted = true, s.status.fetchError = h.signal.reason, v && (s.status.fetchAbortIgnored = true)) : s.status.fetchResolved = true), w && !v && !b) return c(h.signal.reason, E); + let y = u, S = this.#i[e]; + return (S === u || v && b && S === void 0) && (p === void 0 ? y.__staleWhileFetching !== void 0 ? this.#i[e] = y.__staleWhileFetching : this.#A(t, "fetch") : (s.status && (s.status.fetchUpdated = true), this.set(t, p, a.options))), p; + }, f = (p) => (s.status && (s.status.fetchRejected = true, s.status.fetchError = p), c(p, false)), c = (p, b) => { + let { aborted: w } = h.signal, v = w && s.allowStaleOnFetchAbort, E = v || s.allowStaleOnFetchRejection, y = E || s.noDeleteOnFetchRejection, S = u; + if (this.#i[e] === u && (!y || !b && S.__staleWhileFetching === void 0 ? this.#A(t, "fetch") : v || (this.#i[e] = S.__staleWhileFetching)), E) return s.status && S.__staleWhileFetching !== void 0 && (s.status.returnedStale = true), S.__staleWhileFetching; + if (S.__returned === S) throw p; + }, d = (p, b) => { + let w = this.#S?.(t, r, a); + w && w instanceof Promise && w.then((v) => p(v === void 0 ? void 0 : v), b), h.signal.addEventListener("abort", () => { + (!s.ignoreFetchAbort || s.allowStaleOnFetchAbort) && (p(void 0), s.allowStaleOnFetchAbort && (p = (v) => l(v, true))); + }); + }; + s.status && (s.status.fetchDispatched = true); + let u = new Promise(d).then(l, f), m = Object.assign(u, { __abortController: h, __staleWhileFetching: r, __returned: void 0 }); + return e === void 0 ? (this.set(t, m, { ...a.options, status: void 0 }), e = this.#u.get(t)) : this.#i[e] = m, m; } - } - /** - * Internal method to mark this Path object as the scurry cwd, - * called by {@link PathScurry#chdir} - * - * @internal - */ - [setAsCwd](oldCwd) { - if (oldCwd === this) - return; - oldCwd.isCWD = false; - this.isCWD = true; - const changed = /* @__PURE__ */ new Set([]); - let rp = []; - let p = this; - while (p && p.parent) { - changed.add(p); - p.#relative = rp.join(this.sep); - p.#relativePosix = rp.join("/"); - p = p.parent; - rp.push(".."); + #l(t) { + if (!this.#T) return false; + let e = t; + return !!e && e instanceof Promise && e.hasOwnProperty("__staleWhileFetching") && e.__abortController instanceof Lt; } - p = oldCwd; - while (p && p.parent && !changed.has(p)) { - p.#relative = void 0; - p.#relativePosix = void 0; - p = p.parent; + async fetch(t, e = {}) { + let { allowStale: s = this.allowStale, updateAgeOnGet: i = this.updateAgeOnGet, noDeleteOnStaleGet: r = this.noDeleteOnStaleGet, ttl: h = this.ttl, noDisposeOnSet: o = this.noDisposeOnSet, size: a = 0, sizeCalculation: l = this.sizeCalculation, noUpdateTTL: f = this.noUpdateTTL, noDeleteOnFetchRejection: c = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection: d = this.allowStaleOnFetchRejection, ignoreFetchAbort: u = this.ignoreFetchAbort, allowStaleOnFetchAbort: m = this.allowStaleOnFetchAbort, context: p, forceRefresh: b = false, status: w, signal: v } = e; + if (!this.#T) return w && (w.fetch = "get"), this.get(t, { allowStale: s, updateAgeOnGet: i, noDeleteOnStaleGet: r, status: w }); + let E = { allowStale: s, updateAgeOnGet: i, noDeleteOnStaleGet: r, ttl: h, noDisposeOnSet: o, size: a, sizeCalculation: l, noUpdateTTL: f, noDeleteOnFetchRejection: c, allowStaleOnFetchRejection: d, allowStaleOnFetchAbort: m, ignoreFetchAbort: u, status: w, signal: v }, y = this.#u.get(t); + if (y === void 0) { + w && (w.fetch = "miss"); + let S = this.#z(t, y, E, p); + return S.__returned = S; + } else { + let S = this.#i[y]; + if (this.#l(S)) { + let st = s && S.__staleWhileFetching !== void 0; + return w && (w.fetch = "inflight", st && (w.returnedStale = true)), st ? S.__staleWhileFetching : S.__returned = S; + } + let B = this.#_(y); + if (!b && !B) return w && (w.fetch = "hit"), this.#N(y), i && this.#C(y), w && this.#D(w, y), S; + let U = this.#z(t, y, E, p), et = U.__staleWhileFetching !== void 0 && s; + return w && (w.fetch = B ? "stale" : "refresh", et && B && (w.returnedStale = true)), et ? U.__staleWhileFetching : U.__returned = U; + } } - } - }; - exports2.PathBase = PathBase; - var PathWin32 = class _PathWin32 extends PathBase { - /** - * Separator for generating path strings. - */ - sep = "\\"; - /** - * Separator for parsing path strings. - */ - splitSep = eitherSep; - /** - * Do not create new Path objects directly. They should always be accessed - * via the PathScurry class or other methods on the Path class. - * - * @internal - */ - constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) { - super(name, type, root, roots, nocase, children, opts); - } - /** - * @internal - */ - newChild(name, type = UNKNOWN, opts = {}) { - return new _PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts); - } - /** - * @internal - */ - getRootString(path29) { - return node_path_1.win32.parse(path29).root; - } - /** - * @internal - */ - getRoot(rootPath) { - rootPath = uncToDrive(rootPath.toUpperCase()); - if (rootPath === this.root.name) { + async forceFetch(t, e = {}) { + let s = await this.fetch(t, e); + if (s === void 0) throw new Error("fetch() returned undefined"); + return s; + } + memo(t, e = {}) { + let s = this.#w; + if (!s) throw new Error("no memoMethod provided to constructor"); + let { context: i, forceRefresh: r, ...h } = e, o = this.get(t, h); + if (!r && o !== void 0) return o; + let a = s(t, o, { options: h, context: i }); + return this.set(t, a, h), a; + } + get(t, e = {}) { + let { allowStale: s = this.allowStale, updateAgeOnGet: i = this.updateAgeOnGet, noDeleteOnStaleGet: r = this.noDeleteOnStaleGet, status: h } = e, o = this.#u.get(t); + if (o !== void 0) { + let a = this.#i[o], l = this.#l(a); + return h && this.#D(h, o), this.#_(o) ? (h && (h.get = "stale"), l ? (h && s && a.__staleWhileFetching !== void 0 && (h.returnedStale = true), s ? a.__staleWhileFetching : void 0) : (r || this.#A(t, "expire"), h && s && (h.returnedStale = true), s ? a : void 0)) : (h && (h.get = "hit"), l ? a.__staleWhileFetching : (this.#N(o), i && this.#C(o), a)); + } else h && (h.get = "miss"); + } + #U(t, e) { + this.#v[e] = t, this.#d[t] = e; + } + #N(t) { + t !== this.#p && (t === this.#y ? this.#y = this.#d[t] : this.#U(this.#v[t], this.#d[t]), this.#U(this.#p, t), this.#p = t); + } + delete(t) { + return this.#A(t, "delete"); + } + #A(t, e) { + let s = false; + if (this.#o !== 0) { + let i = this.#u.get(t); + if (i !== void 0) if (this.#b?.[i] && (clearTimeout(this.#b?.[i]), this.#b[i] = void 0), s = true, this.#o === 1) this.#q(e); + else { + this.#L(i); + let r = this.#i[i]; + if (this.#l(r) ? r.__abortController.abort(new Error("deleted")) : (this.#E || this.#e) && (this.#E && this.#n?.(r, t, e), this.#e && this.#m?.push([r, t, e])), this.#u.delete(t), this.#a[i] = void 0, this.#i[i] = void 0, i === this.#p) this.#p = this.#v[i]; + else if (i === this.#y) this.#y = this.#d[i]; + else { + let h = this.#v[i]; + this.#d[h] = this.#d[i]; + let o = this.#d[i]; + this.#v[o] = this.#v[i]; + } + this.#o--, this.#R.push(i); + } + } + if (this.#e && this.#m?.length) { + let i = this.#m, r; + for (; r = i?.shift(); ) this.#h?.(...r); + } + return s; + } + clear() { + return this.#q("delete"); + } + #q(t) { + for (let e of this.#M({ allowStale: true })) { + let s = this.#i[e]; + if (this.#l(s)) s.__abortController.abort(new Error("deleted")); + else { + let i = this.#a[e]; + this.#E && this.#n?.(s, i, t), this.#e && this.#m?.push([s, i, t]); + } + } + if (this.#u.clear(), this.#i.fill(void 0), this.#a.fill(void 0), this.#g && this.#x) { + this.#g.fill(0), this.#x.fill(0); + for (let e of this.#b ?? []) e !== void 0 && clearTimeout(e); + this.#b?.fill(void 0); + } + if (this.#O && this.#O.fill(0), this.#y = 0, this.#p = 0, this.#R.length = 0, this.#f = 0, this.#o = 0, this.#e && this.#m) { + let e = this.#m, s; + for (; s = e?.shift(); ) this.#h?.(...s); + } + } + }; + Wt.LRUCache = rr; + }); + var Oe = R((P) => { + "use strict"; + var nr = P && P.__importDefault || function(n) { + return n && n.__esModule ? n : { default: n }; + }; + Object.defineProperty(P, "__esModule", { value: true }); + P.Minipass = P.isWritable = P.isReadable = P.isStream = void 0; + var ds = typeof process == "object" && process ? process : { stdout: null, stderr: null }, _e = require("node:events"), ws = nr(require("node:stream")), hr = require("node:string_decoder"), or2 = (n) => !!n && typeof n == "object" && (n instanceof qt || n instanceof ws.default || (0, P.isReadable)(n) || (0, P.isWritable)(n)); + P.isStream = or2; + var ar = (n) => !!n && typeof n == "object" && n instanceof _e.EventEmitter && typeof n.pipe == "function" && n.pipe !== ws.default.Writable.prototype.pipe; + P.isReadable = ar; + var lr = (n) => !!n && typeof n == "object" && n instanceof _e.EventEmitter && typeof n.write == "function" && typeof n.end == "function"; + P.isWritable = lr; + var $ = /* @__PURE__ */ Symbol("EOF"), q = /* @__PURE__ */ Symbol("maybeEmitEnd"), K = /* @__PURE__ */ Symbol("emittedEnd"), Bt = /* @__PURE__ */ Symbol("emittingEnd"), lt2 = /* @__PURE__ */ Symbol("emittedError"), It = /* @__PURE__ */ Symbol("closed"), ps = /* @__PURE__ */ Symbol("read"), Gt = /* @__PURE__ */ Symbol("flush"), ms = /* @__PURE__ */ Symbol("flushChunk"), L = /* @__PURE__ */ Symbol("encoding"), rt = /* @__PURE__ */ Symbol("decoder"), x = /* @__PURE__ */ Symbol("flowing"), ct = /* @__PURE__ */ Symbol("paused"), nt = /* @__PURE__ */ Symbol("resume"), T = /* @__PURE__ */ Symbol("buffer"), M = /* @__PURE__ */ Symbol("pipes"), C = /* @__PURE__ */ Symbol("bufferLength"), we = /* @__PURE__ */ Symbol("bufferPush"), zt = /* @__PURE__ */ Symbol("bufferShift"), k = /* @__PURE__ */ Symbol("objectMode"), O = /* @__PURE__ */ Symbol("destroyed"), be = /* @__PURE__ */ Symbol("error"), ye = /* @__PURE__ */ Symbol("emitData"), gs = /* @__PURE__ */ Symbol("emitEnd"), Se = /* @__PURE__ */ Symbol("emitEnd2"), I = /* @__PURE__ */ Symbol("async"), ve = /* @__PURE__ */ Symbol("abort"), Ut = /* @__PURE__ */ Symbol("aborted"), ut = /* @__PURE__ */ Symbol("signal"), Z = /* @__PURE__ */ Symbol("dataListeners"), D = /* @__PURE__ */ Symbol("discarded"), ft = (n) => Promise.resolve().then(n), cr2 = (n) => n(), ur = (n) => n === "end" || n === "finish" || n === "prefinish", fr = (n) => n instanceof ArrayBuffer || !!n && typeof n == "object" && n.constructor && n.constructor.name === "ArrayBuffer" && n.byteLength >= 0, dr = (n) => !Buffer.isBuffer(n) && ArrayBuffer.isView(n), $t = class { + src; + dest; + opts; + ondrain; + constructor(t, e, s) { + this.src = t, this.dest = e, this.opts = s, this.ondrain = () => t[nt](), this.dest.on("drain", this.ondrain); + } + unpipe() { + this.dest.removeListener("drain", this.ondrain); + } + proxyErrors(t) { + } + end() { + this.unpipe(), this.opts.end && this.dest.end(); + } + }, Ee = class extends $t { + unpipe() { + this.src.removeListener("error", this.proxyErrors), super.unpipe(); + } + constructor(t, e, s) { + super(t, e, s), this.proxyErrors = (i) => this.dest.emit("error", i), t.on("error", this.proxyErrors); + } + }, pr = (n) => !!n.objectMode, mr = (n) => !n.objectMode && !!n.encoding && n.encoding !== "buffer", qt = class extends _e.EventEmitter { + [x] = false; + [ct] = false; + [M] = []; + [T] = []; + [k]; + [L]; + [I]; + [rt]; + [$] = false; + [K] = false; + [Bt] = false; + [It] = false; + [lt2] = null; + [C] = 0; + [O] = false; + [ut]; + [Ut] = false; + [Z] = 0; + [D] = false; + writable = true; + readable = true; + constructor(...t) { + let e = t[0] || {}; + if (super(), e.objectMode && typeof e.encoding == "string") throw new TypeError("Encoding and objectMode may not be used together"); + pr(e) ? (this[k] = true, this[L] = null) : mr(e) ? (this[L] = e.encoding, this[k] = false) : (this[k] = false, this[L] = null), this[I] = !!e.async, this[rt] = this[L] ? new hr.StringDecoder(this[L]) : null, e && e.debugExposeBuffer === true && Object.defineProperty(this, "buffer", { get: () => this[T] }), e && e.debugExposePipes === true && Object.defineProperty(this, "pipes", { get: () => this[M] }); + let { signal: s } = e; + s && (this[ut] = s, s.aborted ? this[ve]() : s.addEventListener("abort", () => this[ve]())); + } + get bufferLength() { + return this[C]; + } + get encoding() { + return this[L]; + } + set encoding(t) { + throw new Error("Encoding must be set at instantiation time"); + } + setEncoding(t) { + throw new Error("Encoding must be set at instantiation time"); + } + get objectMode() { + return this[k]; + } + set objectMode(t) { + throw new Error("objectMode must be set at instantiation time"); + } + get async() { + return this[I]; + } + set async(t) { + this[I] = this[I] || !!t; + } + [ve]() { + this[Ut] = true, this.emit("abort", this[ut]?.reason), this.destroy(this[ut]?.reason); + } + get aborted() { + return this[Ut]; + } + set aborted(t) { + } + write(t, e, s) { + if (this[Ut]) return false; + if (this[$]) throw new Error("write after end"); + if (this[O]) return this.emit("error", Object.assign(new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" })), true; + typeof e == "function" && (s = e, e = "utf8"), e || (e = "utf8"); + let i = this[I] ? ft : cr2; + if (!this[k] && !Buffer.isBuffer(t)) { + if (dr(t)) t = Buffer.from(t.buffer, t.byteOffset, t.byteLength); + else if (fr(t)) t = Buffer.from(t); + else if (typeof t != "string") throw new Error("Non-contiguous data written to non-objectMode stream"); + } + return this[k] ? (this[x] && this[C] !== 0 && this[Gt](true), this[x] ? this.emit("data", t) : this[we](t), this[C] !== 0 && this.emit("readable"), s && i(s), this[x]) : t.length ? (typeof t == "string" && !(e === this[L] && !this[rt]?.lastNeed) && (t = Buffer.from(t, e)), Buffer.isBuffer(t) && this[L] && (t = this[rt].write(t)), this[x] && this[C] !== 0 && this[Gt](true), this[x] ? this.emit("data", t) : this[we](t), this[C] !== 0 && this.emit("readable"), s && i(s), this[x]) : (this[C] !== 0 && this.emit("readable"), s && i(s), this[x]); + } + read(t) { + if (this[O]) return null; + if (this[D] = false, this[C] === 0 || t === 0 || t && t > this[C]) return this[q](), null; + this[k] && (t = null), this[T].length > 1 && !this[k] && (this[T] = [this[L] ? this[T].join("") : Buffer.concat(this[T], this[C])]); + let e = this[ps](t || null, this[T][0]); + return this[q](), e; + } + [ps](t, e) { + if (this[k]) this[zt](); + else { + let s = e; + t === s.length || t === null ? this[zt]() : typeof s == "string" ? (this[T][0] = s.slice(t), e = s.slice(0, t), this[C] -= t) : (this[T][0] = s.subarray(t), e = s.subarray(0, t), this[C] -= t); + } + return this.emit("data", e), !this[T].length && !this[$] && this.emit("drain"), e; + } + end(t, e, s) { + return typeof t == "function" && (s = t, t = void 0), typeof e == "function" && (s = e, e = "utf8"), t !== void 0 && this.write(t, e), s && this.once("end", s), this[$] = true, this.writable = false, (this[x] || !this[ct]) && this[q](), this; + } + [nt]() { + this[O] || (!this[Z] && !this[M].length && (this[D] = true), this[ct] = false, this[x] = true, this.emit("resume"), this[T].length ? this[Gt]() : this[$] ? this[q]() : this.emit("drain")); + } + resume() { + return this[nt](); + } + pause() { + this[x] = false, this[ct] = true, this[D] = false; + } + get destroyed() { + return this[O]; + } + get flowing() { + return this[x]; + } + get paused() { + return this[ct]; + } + [we](t) { + this[k] ? this[C] += 1 : this[C] += t.length, this[T].push(t); + } + [zt]() { + return this[k] ? this[C] -= 1 : this[C] -= this[T][0].length, this[T].shift(); + } + [Gt](t = false) { + do + ; + while (this[ms](this[zt]()) && this[T].length); + !t && !this[T].length && !this[$] && this.emit("drain"); + } + [ms](t) { + return this.emit("data", t), this[x]; + } + pipe(t, e) { + if (this[O]) return t; + this[D] = false; + let s = this[K]; + return e = e || {}, t === ds.stdout || t === ds.stderr ? e.end = false : e.end = e.end !== false, e.proxyErrors = !!e.proxyErrors, s ? e.end && t.end() : (this[M].push(e.proxyErrors ? new Ee(this, t, e) : new $t(this, t, e)), this[I] ? ft(() => this[nt]()) : this[nt]()), t; + } + unpipe(t) { + let e = this[M].find((s) => s.dest === t); + e && (this[M].length === 1 ? (this[x] && this[Z] === 0 && (this[x] = false), this[M] = []) : this[M].splice(this[M].indexOf(e), 1), e.unpipe()); + } + addListener(t, e) { + return this.on(t, e); + } + on(t, e) { + let s = super.on(t, e); + if (t === "data") this[D] = false, this[Z]++, !this[M].length && !this[x] && this[nt](); + else if (t === "readable" && this[C] !== 0) super.emit("readable"); + else if (ur(t) && this[K]) super.emit(t), this.removeAllListeners(t); + else if (t === "error" && this[lt2]) { + let i = e; + this[I] ? ft(() => i.call(this, this[lt2])) : i.call(this, this[lt2]); + } + return s; + } + removeListener(t, e) { + return this.off(t, e); + } + off(t, e) { + let s = super.off(t, e); + return t === "data" && (this[Z] = this.listeners("data").length, this[Z] === 0 && !this[D] && !this[M].length && (this[x] = false)), s; + } + removeAllListeners(t) { + let e = super.removeAllListeners(t); + return (t === "data" || t === void 0) && (this[Z] = 0, !this[D] && !this[M].length && (this[x] = false)), e; + } + get emittedEnd() { + return this[K]; + } + [q]() { + !this[Bt] && !this[K] && !this[O] && this[T].length === 0 && this[$] && (this[Bt] = true, this.emit("end"), this.emit("prefinish"), this.emit("finish"), this[It] && this.emit("close"), this[Bt] = false); + } + emit(t, ...e) { + let s = e[0]; + if (t !== "error" && t !== "close" && t !== O && this[O]) return false; + if (t === "data") return !this[k] && !s ? false : this[I] ? (ft(() => this[ye](s)), true) : this[ye](s); + if (t === "end") return this[gs](); + if (t === "close") { + if (this[It] = true, !this[K] && !this[O]) return false; + let r = super.emit("close"); + return this.removeAllListeners("close"), r; + } else if (t === "error") { + this[lt2] = s, super.emit(be, s); + let r = !this[ut] || this.listeners("error").length ? super.emit("error", s) : false; + return this[q](), r; + } else if (t === "resume") { + let r = super.emit("resume"); + return this[q](), r; + } else if (t === "finish" || t === "prefinish") { + let r = super.emit(t); + return this.removeAllListeners(t), r; + } + let i = super.emit(t, ...e); + return this[q](), i; + } + [ye](t) { + for (let s of this[M]) s.dest.write(t) === false && this.pause(); + let e = this[D] ? false : super.emit("data", t); + return this[q](), e; + } + [gs]() { + return this[K] ? false : (this[K] = true, this.readable = false, this[I] ? (ft(() => this[Se]()), true) : this[Se]()); + } + [Se]() { + if (this[rt]) { + let e = this[rt].end(); + if (e) { + for (let s of this[M]) s.dest.write(e); + this[D] || super.emit("data", e); + } + } + for (let e of this[M]) e.end(); + let t = super.emit("end"); + return this.removeAllListeners("end"), t; + } + async collect() { + let t = Object.assign([], { dataLength: 0 }); + this[k] || (t.dataLength = 0); + let e = this.promise(); + return this.on("data", (s) => { + t.push(s), this[k] || (t.dataLength += s.length); + }), await e, t; + } + async concat() { + if (this[k]) throw new Error("cannot concat in objectMode"); + let t = await this.collect(); + return this[L] ? t.join("") : Buffer.concat(t, t.dataLength); + } + async promise() { + return new Promise((t, e) => { + this.on(O, () => e(new Error("stream destroyed"))), this.on("error", (s) => e(s)), this.on("end", () => t()); + }); + } + [Symbol.asyncIterator]() { + this[D] = false; + let t = false, e = async () => (this.pause(), t = true, { value: void 0, done: true }); + return { next: () => { + if (t) return e(); + let i = this.read(); + if (i !== null) return Promise.resolve({ done: false, value: i }); + if (this[$]) return e(); + let r, h, o = (c) => { + this.off("data", a), this.off("end", l), this.off(O, f), e(), h(c); + }, a = (c) => { + this.off("error", o), this.off("end", l), this.off(O, f), this.pause(), r({ value: c, done: !!this[$] }); + }, l = () => { + this.off("error", o), this.off("data", a), this.off(O, f), e(), r({ done: true, value: void 0 }); + }, f = () => o(new Error("stream destroyed")); + return new Promise((c, d) => { + h = d, r = c, this.once(O, f), this.once("error", o), this.once("end", l), this.once("data", a); + }); + }, throw: e, return: e, [Symbol.asyncIterator]() { + return this; + }, [Symbol.asyncDispose]: async () => { + } }; + } + [Symbol.iterator]() { + this[D] = false; + let t = false, e = () => (this.pause(), this.off(be, e), this.off(O, e), this.off("end", e), t = true, { done: true, value: void 0 }), s = () => { + if (t) return e(); + let i = this.read(); + return i === null ? e() : { done: false, value: i }; + }; + return this.once("end", e), this.once(be, e), this.once(O, e), { next: s, throw: e, return: e, [Symbol.iterator]() { + return this; + }, [Symbol.dispose]: () => { + } }; + } + destroy(t) { + if (this[O]) return t ? this.emit("error", t) : this.emit(O), this; + this[O] = true, this[D] = true, this[T].length = 0, this[C] = 0; + let e = this; + return typeof e.close == "function" && !this[It] && e.close(), t ? this.emit("error", t) : this.emit(O), this; + } + static get isStream() { + return P.isStream; + } + }; + P.Minipass = qt; + }); + var Ms = R((_2) => { + "use strict"; + var gr = _2 && _2.__createBinding || (Object.create ? (function(n, t, e, s) { + s === void 0 && (s = e); + var i = Object.getOwnPropertyDescriptor(t, e); + (!i || ("get" in i ? !t.__esModule : i.writable || i.configurable)) && (i = { enumerable: true, get: function() { + return t[e]; + } }), Object.defineProperty(n, s, i); + }) : (function(n, t, e, s) { + s === void 0 && (s = e), n[s] = t[e]; + })), wr = _2 && _2.__setModuleDefault || (Object.create ? (function(n, t) { + Object.defineProperty(n, "default", { enumerable: true, value: t }); + }) : function(n, t) { + n.default = t; + }), br = _2 && _2.__importStar || function(n) { + if (n && n.__esModule) return n; + var t = {}; + if (n != null) for (var e in n) e !== "default" && Object.prototype.hasOwnProperty.call(n, e) && gr(t, n, e); + return wr(t, n), t; + }; + Object.defineProperty(_2, "__esModule", { value: true }); + _2.PathScurry = _2.Path = _2.PathScurryDarwin = _2.PathScurryPosix = _2.PathScurryWin32 = _2.PathScurryBase = _2.PathPosix = _2.PathWin32 = _2.PathBase = _2.ChildrenCache = _2.ResolveCache = void 0; + var Qt = fs31(), Yt = require("node:path"), yr = require("node:url"), pt = require("fs"), Sr = br(require("node:fs")), vr = pt.realpathSync.native, Ht = require("node:fs/promises"), bs = Oe(), mt = { lstatSync: pt.lstatSync, readdir: pt.readdir, readdirSync: pt.readdirSync, readlinkSync: pt.readlinkSync, realpathSync: vr, promises: { lstat: Ht.lstat, readdir: Ht.readdir, readlink: Ht.readlink, realpath: Ht.realpath } }, _s = (n) => !n || n === mt || n === Sr ? mt : { ...mt, ...n, promises: { ...mt.promises, ...n.promises || {} } }, Os = /^\\\\\?\\([a-z]:)\\?$/i, Er = (n) => n.replace(/\//g, "\\").replace(Os, "$1\\"), _r = /[\\\/]/, N = 0, xs = 1, Ts = 2, G = 4, Cs = 6, Rs = 8, Q = 10, As = 12, j = 15, dt = ~j, xe = 16, ys = 32, gt = 64, W = 128, Vt = 256, Xt = 512, Ss = gt | W | Xt, Or = 1023, Te = (n) => n.isFile() ? Rs : n.isDirectory() ? G : n.isSymbolicLink() ? Q : n.isCharacterDevice() ? Ts : n.isBlockDevice() ? Cs : n.isSocket() ? As : n.isFIFO() ? xs : N, vs = new Qt.LRUCache({ max: 2 ** 12 }), wt = (n) => { + let t = vs.get(n); + if (t) return t; + let e = n.normalize("NFKD"); + return vs.set(n, e), e; + }, Es = new Qt.LRUCache({ max: 2 ** 12 }), Kt = (n) => { + let t = Es.get(n); + if (t) return t; + let e = wt(n.toLowerCase()); + return Es.set(n, e), e; + }, bt = class extends Qt.LRUCache { + constructor() { + super({ max: 256 }); + } + }; + _2.ResolveCache = bt; + var Jt = class extends Qt.LRUCache { + constructor(t = 16 * 1024) { + super({ maxSize: t, sizeCalculation: (e) => e.length + 1 }); + } + }; + _2.ChildrenCache = Jt; + var ks = /* @__PURE__ */ Symbol("PathScurry setAsCwd"), A = class { + name; + root; + roots; + parent; + nocase; + isCWD = false; + #t; + #s; + get dev() { + return this.#s; + } + #n; + get mode() { + return this.#n; + } + #r; + get nlink() { + return this.#r; + } + #h; + get uid() { + return this.#h; + } + #S; + get gid() { + return this.#S; + } + #w; + get rdev() { + return this.#w; + } + #c; + get blksize() { + return this.#c; + } + #o; + get ino() { + return this.#o; + } + #f; + get size() { + return this.#f; + } + #u; + get blocks() { + return this.#u; + } + #a; + get atimeMs() { + return this.#a; + } + #i; + get mtimeMs() { + return this.#i; + } + #d; + get ctimeMs() { + return this.#d; + } + #v; + get birthtimeMs() { + return this.#v; + } + #y; + get atime() { + return this.#y; + } + #p; + get mtime() { + return this.#p; + } + #R; + get ctime() { + return this.#R; + } + #m; + get birthtime() { + return this.#m; + } + #O; + #x; + #g; + #b; + #E; + #T; + #e; + #F; + #P; + #C; + get parentPath() { + return (this.parent || this).fullpath(); + } + get path() { + return this.parentPath; + } + constructor(t, e = N, s, i, r, h, o) { + this.name = t, this.#O = r ? Kt(t) : wt(t), this.#e = e & Or, this.nocase = r, this.roots = i, this.root = s || this, this.#F = h, this.#g = o.fullpath, this.#E = o.relative, this.#T = o.relativePosix, this.parent = o.parent, this.parent ? this.#t = this.parent.#t : this.#t = _s(o.fs); + } + depth() { + return this.#x !== void 0 ? this.#x : this.parent ? this.#x = this.parent.depth() + 1 : this.#x = 0; + } + childrenCache() { + return this.#F; + } + resolve(t) { + if (!t) return this; + let e = this.getRootString(t), i = t.substring(e.length).split(this.splitSep); + return e ? this.getRoot(e).#D(i) : this.#D(i); + } + #D(t) { + let e = this; + for (let s of t) e = e.child(s); + return e; + } + children() { + let t = this.#F.get(this); + if (t) return t; + let e = Object.assign([], { provisional: 0 }); + return this.#F.set(this, e), this.#e &= ~xe, e; + } + child(t, e) { + if (t === "" || t === ".") return this; + if (t === "..") return this.parent || this; + let s = this.children(), i = this.nocase ? Kt(t) : wt(t); + for (let a of s) if (a.#O === i) return a; + let r = this.parent ? this.sep : "", h = this.#g ? this.#g + r + t : void 0, o = this.newChild(t, N, { ...e, parent: this, fullpath: h }); + return this.canReaddir() || (o.#e |= W), s.push(o), o; + } + relative() { + if (this.isCWD) return ""; + if (this.#E !== void 0) return this.#E; + let t = this.name, e = this.parent; + if (!e) return this.#E = this.name; + let s = e.relative(); + return s + (!s || !e.parent ? "" : this.sep) + t; + } + relativePosix() { + if (this.sep === "/") return this.relative(); + if (this.isCWD) return ""; + if (this.#T !== void 0) return this.#T; + let t = this.name, e = this.parent; + if (!e) return this.#T = this.fullpathPosix(); + let s = e.relativePosix(); + return s + (!s || !e.parent ? "" : "/") + t; + } + fullpath() { + if (this.#g !== void 0) return this.#g; + let t = this.name, e = this.parent; + if (!e) return this.#g = this.name; + let i = e.fullpath() + (e.parent ? this.sep : "") + t; + return this.#g = i; + } + fullpathPosix() { + if (this.#b !== void 0) return this.#b; + if (this.sep === "/") return this.#b = this.fullpath(); + if (!this.parent) { + let i = this.fullpath().replace(/\\/g, "/"); + return /^[a-z]:\//i.test(i) ? this.#b = `//?/${i}` : this.#b = i; + } + let t = this.parent, e = t.fullpathPosix(), s = e + (!e || !t.parent ? "" : "/") + this.name; + return this.#b = s; + } + isUnknown() { + return (this.#e & j) === N; + } + isType(t) { + return this[`is${t}`](); + } + getType() { + return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : this.isSocket() ? "Socket" : "Unknown"; + } + isFile() { + return (this.#e & j) === Rs; + } + isDirectory() { + return (this.#e & j) === G; + } + isCharacterDevice() { + return (this.#e & j) === Ts; + } + isBlockDevice() { + return (this.#e & j) === Cs; + } + isFIFO() { + return (this.#e & j) === xs; + } + isSocket() { + return (this.#e & j) === As; + } + isSymbolicLink() { + return (this.#e & Q) === Q; + } + lstatCached() { + return this.#e & ys ? this : void 0; + } + readlinkCached() { + return this.#P; + } + realpathCached() { + return this.#C; + } + readdirCached() { + let t = this.children(); + return t.slice(0, t.provisional); + } + canReadlink() { + if (this.#P) return true; + if (!this.parent) return false; + let t = this.#e & j; + return !(t !== N && t !== Q || this.#e & Vt || this.#e & W); + } + calledReaddir() { + return !!(this.#e & xe); + } + isENOENT() { + return !!(this.#e & W); + } + isNamed(t) { + return this.nocase ? this.#O === Kt(t) : this.#O === wt(t); + } + async readlink() { + let t = this.#P; + if (t) return t; + if (this.canReadlink() && this.parent) try { + let e = await this.#t.promises.readlink(this.fullpath()), s = (await this.parent.realpath())?.resolve(e); + if (s) return this.#P = s; + } catch (e) { + this.#M(e.code); + return; + } + } + readlinkSync() { + let t = this.#P; + if (t) return t; + if (this.canReadlink() && this.parent) try { + let e = this.#t.readlinkSync(this.fullpath()), s = this.parent.realpathSync()?.resolve(e); + if (s) return this.#P = s; + } catch (e) { + this.#M(e.code); + return; + } + } + #W(t) { + this.#e |= xe; + for (let e = t.provisional; e < t.length; e++) { + let s = t[e]; + s && s.#_(); + } + } + #_() { + this.#e & W || (this.#e = (this.#e | W) & dt, this.#$()); + } + #$() { + let t = this.children(); + t.provisional = 0; + for (let e of t) e.#_(); + } + #L() { + this.#e |= Xt, this.#j(); + } + #j() { + if (this.#e & gt) return; + let t = this.#e; + (t & j) === G && (t &= dt), this.#e = t | gt, this.#$(); + } + #B(t = "") { + t === "ENOTDIR" || t === "EPERM" ? this.#j() : t === "ENOENT" ? this.#_() : this.children().provisional = 0; + } + #k(t = "") { + t === "ENOTDIR" ? this.parent.#j() : t === "ENOENT" && this.#_(); + } + #M(t = "") { + let e = this.#e; + e |= Vt, t === "ENOENT" && (e |= W), (t === "EINVAL" || t === "UNKNOWN") && (e &= dt), this.#e = e, t === "ENOTDIR" && this.parent && this.parent.#j(); + } + #I(t, e) { + return this.#z(t, e) || this.#G(t, e); + } + #G(t, e) { + let s = Te(t), i = this.newChild(t.name, s, { parent: this }), r = i.#e & j; + return r !== G && r !== Q && r !== N && (i.#e |= gt), e.unshift(i), e.provisional++, i; + } + #z(t, e) { + for (let s = e.provisional; s < e.length; s++) { + let i = e[s]; + if ((this.nocase ? Kt(t.name) : wt(t.name)) === i.#O) return this.#l(t, i, s, e); + } + } + #l(t, e, s, i) { + let r = e.name; + return e.#e = e.#e & dt | Te(t), r !== t.name && (e.name = t.name), s !== i.provisional && (s === i.length - 1 ? i.pop() : i.splice(s, 1), i.unshift(e)), i.provisional++, e; + } + async lstat() { + if ((this.#e & W) === 0) try { + return this.#U(await this.#t.promises.lstat(this.fullpath())), this; + } catch (t) { + this.#k(t.code); + } + } + lstatSync() { + if ((this.#e & W) === 0) try { + return this.#U(this.#t.lstatSync(this.fullpath())), this; + } catch (t) { + this.#k(t.code); + } + } + #U(t) { + let { atime: e, atimeMs: s, birthtime: i, birthtimeMs: r, blksize: h, blocks: o, ctime: a, ctimeMs: l, dev: f, gid: c, ino: d, mode: u, mtime: m, mtimeMs: p, nlink: b, rdev: w, size: v, uid: E } = t; + this.#y = e, this.#a = s, this.#m = i, this.#v = r, this.#c = h, this.#u = o, this.#R = a, this.#d = l, this.#s = f, this.#S = c, this.#o = d, this.#n = u, this.#p = m, this.#i = p, this.#r = b, this.#w = w, this.#f = v, this.#h = E; + let y = Te(t); + this.#e = this.#e & dt | y | ys, y !== N && y !== G && y !== Q && (this.#e |= gt); + } + #N = []; + #A = false; + #q(t) { + this.#A = false; + let e = this.#N.slice(); + this.#N.length = 0, e.forEach((s) => s(null, t)); + } + readdirCB(t, e = false) { + if (!this.canReaddir()) { + e ? t(null, []) : queueMicrotask(() => t(null, [])); + return; + } + let s = this.children(); + if (this.calledReaddir()) { + let r = s.slice(0, s.provisional); + e ? t(null, r) : queueMicrotask(() => t(null, r)); + return; + } + if (this.#N.push(t), this.#A) return; + this.#A = true; + let i = this.fullpath(); + this.#t.readdir(i, { withFileTypes: true }, (r, h) => { + if (r) this.#B(r.code), s.provisional = 0; + else { + for (let o of h) this.#I(o, s); + this.#W(s); + } + this.#q(s.slice(0, s.provisional)); + }); + } + #H; + async readdir() { + if (!this.canReaddir()) return []; + let t = this.children(); + if (this.calledReaddir()) return t.slice(0, t.provisional); + let e = this.fullpath(); + if (this.#H) await this.#H; + else { + let s = () => { + }; + this.#H = new Promise((i) => s = i); + try { + for (let i of await this.#t.promises.readdir(e, { withFileTypes: true })) this.#I(i, t); + this.#W(t); + } catch (i) { + this.#B(i.code), t.provisional = 0; + } + this.#H = void 0, s(); + } + return t.slice(0, t.provisional); + } + readdirSync() { + if (!this.canReaddir()) return []; + let t = this.children(); + if (this.calledReaddir()) return t.slice(0, t.provisional); + let e = this.fullpath(); + try { + for (let s of this.#t.readdirSync(e, { withFileTypes: true })) this.#I(s, t); + this.#W(t); + } catch (s) { + this.#B(s.code), t.provisional = 0; + } + return t.slice(0, t.provisional); + } + canReaddir() { + if (this.#e & Ss) return false; + let t = j & this.#e; + return t === N || t === G || t === Q; + } + shouldWalk(t, e) { + return (this.#e & G) === G && !(this.#e & Ss) && !t.has(this) && (!e || e(this)); + } + async realpath() { + if (this.#C) return this.#C; + if (!((Xt | Vt | W) & this.#e)) try { + let t = await this.#t.promises.realpath(this.fullpath()); + return this.#C = this.resolve(t); + } catch { + this.#L(); + } + } + realpathSync() { + if (this.#C) return this.#C; + if (!((Xt | Vt | W) & this.#e)) try { + let t = this.#t.realpathSync(this.fullpath()); + return this.#C = this.resolve(t); + } catch { + this.#L(); + } + } + [ks](t) { + if (t === this) return; + t.isCWD = false, this.isCWD = true; + let e = /* @__PURE__ */ new Set([]), s = [], i = this; + for (; i && i.parent; ) e.add(i), i.#E = s.join(this.sep), i.#T = s.join("/"), i = i.parent, s.push(".."); + for (i = t; i && i.parent && !e.has(i); ) i.#E = void 0, i.#T = void 0, i = i.parent; + } + }; + _2.PathBase = A; + var yt = class n extends A { + sep = "\\"; + splitSep = _r; + constructor(t, e = N, s, i, r, h, o) { + super(t, e, s, i, r, h, o); + } + newChild(t, e = N, s = {}) { + return new n(t, e, this.root, this.roots, this.nocase, this.childrenCache(), s); + } + getRootString(t) { + return Yt.win32.parse(t).root; + } + getRoot(t) { + if (t = Er(t.toUpperCase()), t === this.root.name) return this.root; + for (let [e, s] of Object.entries(this.roots)) if (this.sameRoot(t, e)) return this.roots[t] = s; + return this.roots[t] = new Et(t, this).root; + } + sameRoot(t, e = this.root.name) { + return t = t.toUpperCase().replace(/\//g, "\\").replace(Os, "$1\\"), t === e; + } + }; + _2.PathWin32 = yt; + var St = class n extends A { + splitSep = "/"; + sep = "/"; + constructor(t, e = N, s, i, r, h, o) { + super(t, e, s, i, r, h, o); + } + getRootString(t) { + return t.startsWith("/") ? "/" : ""; + } + getRoot(t) { return this.root; } - for (const [compare3, root] of Object.entries(this.roots)) { - if (this.sameRoot(rootPath, compare3)) { - return this.roots[rootPath] = root; + newChild(t, e = N, s = {}) { + return new n(t, e, this.root, this.roots, this.nocase, this.childrenCache(), s); + } + }; + _2.PathPosix = St; + var vt = class { + root; + rootPath; + roots; + cwd; + #t; + #s; + #n; + nocase; + #r; + constructor(t = process.cwd(), e, s, { nocase: i, childrenCacheSize: r = 16 * 1024, fs: h = mt } = {}) { + this.#r = _s(h), (t instanceof URL || t.startsWith("file://")) && (t = (0, yr.fileURLToPath)(t)); + let o = e.resolve(t); + this.roots = /* @__PURE__ */ Object.create(null), this.rootPath = this.parseRootPath(o), this.#t = new bt(), this.#s = new bt(), this.#n = new Jt(r); + let a = o.substring(this.rootPath.length).split(s); + if (a.length === 1 && !a[0] && a.pop(), i === void 0) throw new TypeError("must provide nocase setting to PathScurryBase ctor"); + this.nocase = i, this.root = this.newRoot(this.#r), this.roots[this.rootPath] = this.root; + let l = this.root, f = a.length - 1, c = e.sep, d = this.rootPath, u = false; + for (let m of a) { + let p = f--; + l = l.child(m, { relative: new Array(p).fill("..").join(c), relativePosix: new Array(p).fill("..").join("/"), fullpath: d += (u ? "" : c) + m }), u = true; } + this.cwd = l; } - return this.roots[rootPath] = new PathScurryWin32(rootPath, this).root; - } - /** - * @internal - */ - sameRoot(rootPath, compare3 = this.root.name) { - rootPath = rootPath.toUpperCase().replace(/\//g, "\\").replace(uncDriveRegexp, "$1\\"); - return rootPath === compare3; - } - }; - exports2.PathWin32 = PathWin32; - var PathPosix = class _PathPosix extends PathBase { - /** - * separator for parsing path strings - */ - splitSep = "/"; - /** - * separator for generating path strings - */ - sep = "/"; - /** - * Do not create new Path objects directly. They should always be accessed - * via the PathScurry class or other methods on the Path class. - * - * @internal - */ - constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) { - super(name, type, root, roots, nocase, children, opts); - } - /** - * @internal - */ - getRootString(path29) { - return path29.startsWith("/") ? "/" : ""; - } - /** - * @internal - */ - getRoot(_rootPath) { - return this.root; - } - /** - * @internal - */ - newChild(name, type = UNKNOWN, opts = {}) { - return new _PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts); - } - }; - exports2.PathPosix = PathPosix; - var PathScurryBase = class { - /** - * The root Path entry for the current working directory of this Scurry - */ - root; - /** - * The string path for the root of this Scurry's current working directory - */ - rootPath; - /** - * A collection of all roots encountered, referenced by rootPath - */ - roots; - /** - * The Path entry corresponding to this PathScurry's current working directory. - */ - cwd; - #resolveCache; - #resolvePosixCache; - #children; - /** - * Perform path comparisons case-insensitively. - * - * Defaults true on Darwin and Windows systems, false elsewhere. - */ - nocase; - #fs; - /** - * This class should not be instantiated directly. - * - * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry - * - * @internal - */ - constructor(cwd = process.cwd(), pathImpl, sep7, { nocase, childrenCacheSize = 16 * 1024, fs: fs31 = defaultFS } = {}) { - this.#fs = fsFromOption(fs31); - if (cwd instanceof URL || cwd.startsWith("file://")) { - cwd = (0, node_url_1.fileURLToPath)(cwd); + depth(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), t.depth(); } - const cwdPath = pathImpl.resolve(cwd); - this.roots = /* @__PURE__ */ Object.create(null); - this.rootPath = this.parseRootPath(cwdPath); - this.#resolveCache = new ResolveCache(); - this.#resolvePosixCache = new ResolveCache(); - this.#children = new ChildrenCache(childrenCacheSize); - const split = cwdPath.substring(this.rootPath.length).split(sep7); - if (split.length === 1 && !split[0]) { - split.pop(); + childrenCache() { + return this.#n; } - if (nocase === void 0) { - throw new TypeError("must provide nocase setting to PathScurryBase ctor"); + resolve(...t) { + let e = ""; + for (let r = t.length - 1; r >= 0; r--) { + let h = t[r]; + if (!(!h || h === ".") && (e = e ? `${h}/${e}` : h, this.isAbsolute(h))) break; + } + let s = this.#t.get(e); + if (s !== void 0) return s; + let i = this.cwd.resolve(e).fullpath(); + return this.#t.set(e, i), i; } - this.nocase = nocase; - this.root = this.newRoot(this.#fs); - this.roots[this.rootPath] = this.root; - let prev = this.root; - let len = split.length - 1; - const joinSep = pathImpl.sep; - let abs = this.rootPath; - let sawFirst = false; - for (const part of split) { - const l = len--; - prev = prev.child(part, { - relative: new Array(l).fill("..").join(joinSep), - relativePosix: new Array(l).fill("..").join("/"), - fullpath: abs += (sawFirst ? "" : joinSep) + part + resolvePosix(...t) { + let e = ""; + for (let r = t.length - 1; r >= 0; r--) { + let h = t[r]; + if (!(!h || h === ".") && (e = e ? `${h}/${e}` : h, this.isAbsolute(h))) break; + } + let s = this.#s.get(e); + if (s !== void 0) return s; + let i = this.cwd.resolve(e).fullpathPosix(); + return this.#s.set(e, i), i; + } + relative(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), t.relative(); + } + relativePosix(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), t.relativePosix(); + } + basename(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), t.name; + } + dirname(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), (t.parent || t).fullpath(); + } + async readdir(t = this.cwd, e = { withFileTypes: true }) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s } = e; + if (t.canReaddir()) { + let i = await t.readdir(); + return s ? i : i.map((r) => r.name); + } else return []; + } + readdirSync(t = this.cwd, e = { withFileTypes: true }) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s = true } = e; + return t.canReaddir() ? s ? t.readdirSync() : t.readdirSync().map((i) => i.name) : []; + } + async lstat(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), t.lstat(); + } + lstatSync(t = this.cwd) { + return typeof t == "string" && (t = this.cwd.resolve(t)), t.lstatSync(); + } + async readlink(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd); + let s = await t.readlink(); + return e ? s : s?.fullpath(); + } + readlinkSync(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd); + let s = t.readlinkSync(); + return e ? s : s?.fullpath(); + } + async realpath(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd); + let s = await t.realpath(); + return e ? s : s?.fullpath(); + } + realpathSync(t = this.cwd, { withFileTypes: e } = { withFileTypes: false }) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd); + let s = t.realpathSync(); + return e ? s : s?.fullpath(); + } + async walk(t = this.cwd, e = {}) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = []; + (!r || r(t)) && o.push(s ? t : t.fullpath()); + let a = /* @__PURE__ */ new Set(), l = (c, d) => { + a.add(c), c.readdirCB((u, m) => { + if (u) return d(u); + let p = m.length; + if (!p) return d(); + let b = () => { + --p === 0 && d(); + }; + for (let w of m) (!r || r(w)) && o.push(s ? w : w.fullpath()), i && w.isSymbolicLink() ? w.realpath().then((v) => v?.isUnknown() ? v.lstat() : v).then((v) => v?.shouldWalk(a, h) ? l(v, b) : b()) : w.shouldWalk(a, h) ? l(w, b) : b(); + }, true); + }, f = t; + return new Promise((c, d) => { + l(f, (u) => { + if (u) return d(u); + c(o); + }); }); - sawFirst = true; } - this.cwd = prev; - } - /** - * Get the depth of a provided path, string, or the cwd - */ - depth(path29 = this.cwd) { - if (typeof path29 === "string") { - path29 = this.cwd.resolve(path29); - } - return path29.depth(); - } - /** - * Return the cache of child entries. Exposed so subclasses can create - * child Path objects in a platform-specific way. - * - * @internal - */ - childrenCache() { - return this.#children; - } - /** - * Resolve one or more path strings to a resolved string - * - * Same interface as require('path').resolve. - * - * Much faster than path.resolve() when called multiple times for the same - * path, because the resolved Path objects are cached. Much slower - * otherwise. - */ - resolve(...paths) { - let r = ""; - for (let i = paths.length - 1; i >= 0; i--) { - const p = paths[i]; - if (!p || p === ".") - continue; - r = r ? `${p}/${r}` : p; - if (this.isAbsolute(p)) { - break; - } - } - const cached = this.#resolveCache.get(r); - if (cached !== void 0) { - return cached; - } - const result = this.cwd.resolve(r).fullpath(); - this.#resolveCache.set(r, result); - return result; - } - /** - * Resolve one or more path strings to a resolved string, returning - * the posix path. Identical to .resolve() on posix systems, but on - * windows will return a forward-slash separated UNC path. - * - * Same interface as require('path').resolve. - * - * Much faster than path.resolve() when called multiple times for the same - * path, because the resolved Path objects are cached. Much slower - * otherwise. - */ - resolvePosix(...paths) { - let r = ""; - for (let i = paths.length - 1; i >= 0; i--) { - const p = paths[i]; - if (!p || p === ".") - continue; - r = r ? `${p}/${r}` : p; - if (this.isAbsolute(p)) { - break; - } - } - const cached = this.#resolvePosixCache.get(r); - if (cached !== void 0) { - return cached; - } - const result = this.cwd.resolve(r).fullpathPosix(); - this.#resolvePosixCache.set(r, result); - return result; - } - /** - * find the relative path from the cwd to the supplied path string or entry - */ - relative(entry = this.cwd) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } - return entry.relative(); - } - /** - * find the relative path from the cwd to the supplied path string or - * entry, using / as the path delimiter, even on Windows. - */ - relativePosix(entry = this.cwd) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } - return entry.relativePosix(); - } - /** - * Return the basename for the provided string or Path object - */ - basename(entry = this.cwd) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } - return entry.name; - } - /** - * Return the dirname for the provided string or Path object - */ - dirname(entry = this.cwd) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } - return (entry.parent || entry).fullpath(); - } - async readdir(entry = this.cwd, opts = { - withFileTypes: true - }) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; - } - const { withFileTypes } = opts; - if (!entry.canReaddir()) { - return []; - } else { - const p = await entry.readdir(); - return withFileTypes ? p : p.map((e) => e.name); - } - } - readdirSync(entry = this.cwd, opts = { - withFileTypes: true - }) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; - } - const { withFileTypes = true } = opts; - if (!entry.canReaddir()) { - return []; - } else if (withFileTypes) { - return entry.readdirSync(); - } else { - return entry.readdirSync().map((e) => e.name); - } - } - /** - * Call lstat() on the string or Path object, and update all known - * information that can be determined. - * - * Note that unlike `fs.lstat()`, the returned value does not contain some - * information, such as `mode`, `dev`, `nlink`, and `ino`. If that - * information is required, you will need to call `fs.lstat` yourself. - * - * If the Path refers to a nonexistent file, or if the lstat call fails for - * any reason, `undefined` is returned. Otherwise the updated Path object is - * returned. - * - * Results are cached, and thus may be out of date if the filesystem is - * mutated. - */ - async lstat(entry = this.cwd) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } - return entry.lstat(); - } - /** - * synchronous {@link PathScurryBase.lstat} - */ - lstatSync(entry = this.cwd) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } - return entry.lstatSync(); - } - async readlink(entry = this.cwd, { withFileTypes } = { - withFileTypes: false - }) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - withFileTypes = entry.withFileTypes; - entry = this.cwd; - } - const e = await entry.readlink(); - return withFileTypes ? e : e?.fullpath(); - } - readlinkSync(entry = this.cwd, { withFileTypes } = { - withFileTypes: false - }) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - withFileTypes = entry.withFileTypes; - entry = this.cwd; - } - const e = entry.readlinkSync(); - return withFileTypes ? e : e?.fullpath(); - } - async realpath(entry = this.cwd, { withFileTypes } = { - withFileTypes: false - }) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - withFileTypes = entry.withFileTypes; - entry = this.cwd; - } - const e = await entry.realpath(); - return withFileTypes ? e : e?.fullpath(); - } - realpathSync(entry = this.cwd, { withFileTypes } = { - withFileTypes: false - }) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - withFileTypes = entry.withFileTypes; - entry = this.cwd; - } - const e = entry.realpathSync(); - return withFileTypes ? e : e?.fullpath(); - } - async walk(entry = this.cwd, opts = {}) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; - } - const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts; - const results = []; - if (!filter2 || filter2(entry)) { - results.push(withFileTypes ? entry : entry.fullpath()); - } - const dirs = /* @__PURE__ */ new Set(); - const walk = (dir, cb) => { - dirs.add(dir); - dir.readdirCB((er, entries) => { - if (er) { - return cb(er); - } - let len = entries.length; - if (!len) - return cb(); - const next = () => { - if (--len === 0) { - cb(); - } - }; - for (const e of entries) { - if (!filter2 || filter2(e)) { - results.push(withFileTypes ? e : e.fullpath()); - } - if (follow && e.isSymbolicLink()) { - e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r).then((r) => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next()); - } else { - if (e.shouldWalk(dirs, walkFilter)) { - walk(e, next); - } else { - next(); - } + walkSync(t = this.cwd, e = {}) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = []; + (!r || r(t)) && o.push(s ? t : t.fullpath()); + let a = /* @__PURE__ */ new Set([t]); + for (let l of a) { + let f = l.readdirSync(); + for (let c of f) { + (!r || r(c)) && o.push(s ? c : c.fullpath()); + let d = c; + if (c.isSymbolicLink()) { + if (!(i && (d = c.realpathSync()))) continue; + d.isUnknown() && d.lstatSync(); } + d.shouldWalk(a, h) && a.add(d); } - }, true); - }; - const start = entry; - return new Promise((res, rej) => { - walk(start, (er) => { - if (er) - return rej(er); - res(results); - }); - }); - } - walkSync(entry = this.cwd, opts = {}) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; + } + return o; } - const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts; - const results = []; - if (!filter2 || filter2(entry)) { - results.push(withFileTypes ? entry : entry.fullpath()); + [Symbol.asyncIterator]() { + return this.iterate(); } - const dirs = /* @__PURE__ */ new Set([entry]); - for (const dir of dirs) { - const entries = dir.readdirSync(); - for (const e of entries) { - if (!filter2 || filter2(e)) { - results.push(withFileTypes ? e : e.fullpath()); - } - let r = e; - if (e.isSymbolicLink()) { - if (!(follow && (r = e.realpathSync()))) - continue; - if (r.isUnknown()) - r.lstatSync(); - } - if (r.shouldWalk(dirs, walkFilter)) { - dirs.add(r); + iterate(t = this.cwd, e = {}) { + return typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd), this.stream(t, e)[Symbol.asyncIterator](); + } + [Symbol.iterator]() { + return this.iterateSync(); + } + *iterateSync(t = this.cwd, e = {}) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e; + (!r || r(t)) && (yield s ? t : t.fullpath()); + let o = /* @__PURE__ */ new Set([t]); + for (let a of o) { + let l = a.readdirSync(); + for (let f of l) { + (!r || r(f)) && (yield s ? f : f.fullpath()); + let c = f; + if (f.isSymbolicLink()) { + if (!(i && (c = f.realpathSync()))) continue; + c.isUnknown() && c.lstatSync(); + } + c.shouldWalk(o, h) && o.add(c); } } } - return results; - } - /** - * Support for `for await` - * - * Alias for {@link PathScurryBase.iterate} - * - * Note: As of Node 19, this is very slow, compared to other methods of - * walking. Consider using {@link PathScurryBase.stream} if memory overhead - * and backpressure are concerns, or {@link PathScurryBase.walk} if not. - */ - [Symbol.asyncIterator]() { - return this.iterate(); - } - iterate(entry = this.cwd, options = {}) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - options = entry; - entry = this.cwd; - } - return this.stream(entry, options)[Symbol.asyncIterator](); - } - /** - * Iterating over a PathScurry performs a synchronous walk. - * - * Alias for {@link PathScurryBase.iterateSync} - */ - [Symbol.iterator]() { - return this.iterateSync(); - } - *iterateSync(entry = this.cwd, opts = {}) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; - } - const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts; - if (!filter2 || filter2(entry)) { - yield withFileTypes ? entry : entry.fullpath(); - } - const dirs = /* @__PURE__ */ new Set([entry]); - for (const dir of dirs) { - const entries = dir.readdirSync(); - for (const e of entries) { - if (!filter2 || filter2(e)) { - yield withFileTypes ? e : e.fullpath(); - } - let r = e; - if (e.isSymbolicLink()) { - if (!(follow && (r = e.realpathSync()))) - continue; - if (r.isUnknown()) - r.lstatSync(); - } - if (r.shouldWalk(dirs, walkFilter)) { - dirs.add(r); - } - } - } - } - stream(entry = this.cwd, opts = {}) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; - } - const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts; - const results = new minipass_1.Minipass({ objectMode: true }); - if (!filter2 || filter2(entry)) { - results.write(withFileTypes ? entry : entry.fullpath()); - } - const dirs = /* @__PURE__ */ new Set(); - const queue2 = [entry]; - let processing = 0; - const process2 = () => { - let paused = false; - while (!paused) { - const dir = queue2.shift(); - if (!dir) { - if (processing === 0) - results.end(); - return; - } - processing++; - dirs.add(dir); - const onReaddir = (er, entries, didRealpaths = false) => { - if (er) - return results.emit("error", er); - if (follow && !didRealpaths) { - const promises6 = []; - for (const e of entries) { - if (e.isSymbolicLink()) { - promises6.push(e.realpath().then((r) => r?.isUnknown() ? r.lstat() : r)); + stream(t = this.cwd, e = {}) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = new bs.Minipass({ objectMode: true }); + (!r || r(t)) && o.write(s ? t : t.fullpath()); + let a = /* @__PURE__ */ new Set(), l = [t], f = 0, c = () => { + let d = false; + for (; !d; ) { + let u = l.shift(); + if (!u) { + f === 0 && o.end(); + return; + } + f++, a.add(u); + let m = (b, w, v = false) => { + if (b) return o.emit("error", b); + if (i && !v) { + let E = []; + for (let y of w) y.isSymbolicLink() && E.push(y.realpath().then((S) => S?.isUnknown() ? S.lstat() : S)); + if (E.length) { + Promise.all(E).then(() => m(null, w, true)); + return; } } - if (promises6.length) { - Promise.all(promises6).then(() => onReaddir(null, entries, true)); - return; + for (let E of w) E && (!r || r(E)) && (o.write(s ? E : E.fullpath()) || (d = true)); + f--; + for (let E of w) { + let y = E.realpathCached() || E; + y.shouldWalk(a, h) && l.push(y); } - } - for (const e of entries) { - if (e && (!filter2 || filter2(e))) { - if (!results.write(withFileTypes ? e : e.fullpath())) { - paused = true; - } - } - } - processing--; - for (const e of entries) { - const r = e.realpathCached() || e; - if (r.shouldWalk(dirs, walkFilter)) { - queue2.push(r); - } - } - if (paused && !results.flowing) { - results.once("drain", process2); - } else if (!sync) { - process2(); - } - }; - let sync = true; - dir.readdirCB(onReaddir, true); - sync = false; - } - }; - process2(); - return results; - } - streamSync(entry = this.cwd, opts = {}) { - if (typeof entry === "string") { - entry = this.cwd.resolve(entry); - } else if (!(entry instanceof PathBase)) { - opts = entry; - entry = this.cwd; - } - const { withFileTypes = true, follow = false, filter: filter2, walkFilter } = opts; - const results = new minipass_1.Minipass({ objectMode: true }); - const dirs = /* @__PURE__ */ new Set(); - if (!filter2 || filter2(entry)) { - results.write(withFileTypes ? entry : entry.fullpath()); - } - const queue2 = [entry]; - let processing = 0; - const process2 = () => { - let paused = false; - while (!paused) { - const dir = queue2.shift(); - if (!dir) { - if (processing === 0) - results.end(); - return; + d && !o.flowing ? o.once("drain", c) : p || c(); + }, p = true; + u.readdirCB(m, true), p = false; } - processing++; - dirs.add(dir); - const entries = dir.readdirSync(); - for (const e of entries) { - if (!filter2 || filter2(e)) { - if (!results.write(withFileTypes ? e : e.fullpath())) { - paused = true; + }; + return c(), o; + } + streamSync(t = this.cwd, e = {}) { + typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd); + let { withFileTypes: s = true, follow: i = false, filter: r, walkFilter: h } = e, o = new bs.Minipass({ objectMode: true }), a = /* @__PURE__ */ new Set(); + (!r || r(t)) && o.write(s ? t : t.fullpath()); + let l = [t], f = 0, c = () => { + let d = false; + for (; !d; ) { + let u = l.shift(); + if (!u) { + f === 0 && o.end(); + return; + } + f++, a.add(u); + let m = u.readdirSync(); + for (let p of m) (!r || r(p)) && (o.write(s ? p : p.fullpath()) || (d = true)); + f--; + for (let p of m) { + let b = p; + if (p.isSymbolicLink()) { + if (!(i && (b = p.realpathSync()))) continue; + b.isUnknown() && b.lstatSync(); } + b.shouldWalk(a, h) && l.push(b); } } - processing--; - for (const e of entries) { - let r = e; - if (e.isSymbolicLink()) { - if (!(follow && (r = e.realpathSync()))) - continue; - if (r.isUnknown()) - r.lstatSync(); - } - if (r.shouldWalk(dirs, walkFilter)) { - queue2.push(r); - } + d && !o.flowing && o.once("drain", c); + }; + return c(), o; + } + chdir(t = this.cwd) { + let e = this.cwd; + this.cwd = typeof t == "string" ? this.cwd.resolve(t) : t, this.cwd[ks](e); + } + }; + _2.PathScurryBase = vt; + var Et = class extends vt { + sep = "\\"; + constructor(t = process.cwd(), e = {}) { + let { nocase: s = true } = e; + super(t, Yt.win32, "\\", { ...e, nocase: s }), this.nocase = s; + for (let i = this.cwd; i; i = i.parent) i.nocase = this.nocase; + } + parseRootPath(t) { + return Yt.win32.parse(t).root.toUpperCase(); + } + newRoot(t) { + return new yt(this.rootPath, G, void 0, this.roots, this.nocase, this.childrenCache(), { fs: t }); + } + isAbsolute(t) { + return t.startsWith("/") || t.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(t); + } + }; + _2.PathScurryWin32 = Et; + var _t = class extends vt { + sep = "/"; + constructor(t = process.cwd(), e = {}) { + let { nocase: s = false } = e; + super(t, Yt.posix, "/", { ...e, nocase: s }), this.nocase = s; + } + parseRootPath(t) { + return "/"; + } + newRoot(t) { + return new St(this.rootPath, G, void 0, this.roots, this.nocase, this.childrenCache(), { fs: t }); + } + isAbsolute(t) { + return t.startsWith("/"); + } + }; + _2.PathScurryPosix = _t; + var Zt = class extends _t { + constructor(t = process.cwd(), e = {}) { + let { nocase: s = true } = e; + super(t, { ...e, nocase: s }); + } + }; + _2.PathScurryDarwin = Zt; + _2.Path = process.platform === "win32" ? yt : St; + _2.PathScurry = process.platform === "win32" ? Et : process.platform === "darwin" ? Zt : _t; + }); + var Re = R((te) => { + "use strict"; + Object.defineProperty(te, "__esModule", { value: true }); + te.Pattern = void 0; + var xr = H(), Tr = (n) => n.length >= 1, Cr = (n) => n.length >= 1, Rr = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom"), Ce = class n { + #t; + #s; + #n; + length; + #r; + #h; + #S; + #w; + #c; + #o; + #f = true; + constructor(t, e, s, i) { + if (!Tr(t)) throw new TypeError("empty pattern list"); + if (!Cr(e)) throw new TypeError("empty glob list"); + if (e.length !== t.length) throw new TypeError("mismatched pattern list and glob list lengths"); + if (this.length = t.length, s < 0 || s >= this.length) throw new TypeError("index out of range"); + if (this.#t = t, this.#s = e, this.#n = s, this.#r = i, this.#n === 0) { + if (this.isUNC()) { + let [r, h, o, a, ...l] = this.#t, [f, c, d, u, ...m] = this.#s; + l[0] === "" && (l.shift(), m.shift()); + let p = [r, h, o, a, ""].join("/"), b = [f, c, d, u, ""].join("/"); + this.#t = [p, ...l], this.#s = [b, ...m], this.length = this.#t.length; + } else if (this.isDrive() || this.isAbsolute()) { + let [r, ...h] = this.#t, [o, ...a] = this.#s; + h[0] === "" && (h.shift(), a.shift()); + let l = r + "/", f = o + "/"; + this.#t = [l, ...h], this.#s = [f, ...a], this.length = this.#t.length; } } - if (paused && !results.flowing) - results.once("drain", process2); - }; - process2(); - return results; - } - chdir(path29 = this.cwd) { - const oldCwd = this.cwd; - this.cwd = typeof path29 === "string" ? this.cwd.resolve(path29) : path29; - this.cwd[setAsCwd](oldCwd); - } - }; - exports2.PathScurryBase = PathScurryBase; - var PathScurryWin32 = class extends PathScurryBase { - /** - * separator for generating path strings - */ - sep = "\\"; - constructor(cwd = process.cwd(), opts = {}) { - const { nocase = true } = opts; - super(cwd, node_path_1.win32, "\\", { ...opts, nocase }); - this.nocase = nocase; - for (let p = this.cwd; p; p = p.parent) { - p.nocase = this.nocase; } - } - /** - * @internal - */ - parseRootPath(dir) { - return node_path_1.win32.parse(dir).root.toUpperCase(); - } - /** - * @internal - */ - newRoot(fs31) { - return new PathWin32(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs31 }); - } - /** - * Return true if the provided path string is an absolute path - */ - isAbsolute(p) { - return p.startsWith("/") || p.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(p); - } - }; - exports2.PathScurryWin32 = PathScurryWin32; - var PathScurryPosix = class extends PathScurryBase { - /** - * separator for generating path strings - */ - sep = "/"; - constructor(cwd = process.cwd(), opts = {}) { - const { nocase = false } = opts; - super(cwd, node_path_1.posix, "/", { ...opts, nocase }); - this.nocase = nocase; - } - /** - * @internal - */ - parseRootPath(_dir) { - return "/"; - } - /** - * @internal - */ - newRoot(fs31) { - return new PathPosix(this.rootPath, IFDIR, void 0, this.roots, this.nocase, this.childrenCache(), { fs: fs31 }); - } - /** - * Return true if the provided path string is an absolute path - */ - isAbsolute(p) { - return p.startsWith("/"); - } - }; - exports2.PathScurryPosix = PathScurryPosix; - var PathScurryDarwin = class extends PathScurryPosix { - constructor(cwd = process.cwd(), opts = {}) { - const { nocase = true } = opts; - super(cwd, { ...opts, nocase }); - } - }; - exports2.PathScurryDarwin = PathScurryDarwin; - exports2.Path = process.platform === "win32" ? PathWin32 : PathPosix; - exports2.PathScurry = process.platform === "win32" ? PathScurryWin32 : process.platform === "darwin" ? PathScurryDarwin : PathScurryPosix; - } -}); - -// node_modules/glob/dist/commonjs/pattern.js -var require_pattern = __commonJS({ - "node_modules/glob/dist/commonjs/pattern.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Pattern = void 0; - var minimatch_1 = require_commonjs20(); - var isPatternList = (pl) => pl.length >= 1; - var isGlobList = (gl) => gl.length >= 1; - var Pattern = class _Pattern { - #patternList; - #globList; - #index; - length; - #platform; - #rest; - #globString; - #isDrive; - #isUNC; - #isAbsolute; - #followGlobstar = true; - constructor(patternList, globList, index2, platform2) { - if (!isPatternList(patternList)) { - throw new TypeError("empty pattern list"); + [Rr]() { + return "Pattern <" + this.#s.slice(this.#n).join("/") + ">"; } - if (!isGlobList(globList)) { - throw new TypeError("empty glob list"); + pattern() { + return this.#t[this.#n]; } - if (globList.length !== patternList.length) { - throw new TypeError("mismatched pattern list and glob list lengths"); + isString() { + return typeof this.#t[this.#n] == "string"; } - this.length = patternList.length; - if (index2 < 0 || index2 >= this.length) { - throw new TypeError("index out of range"); + isGlobstar() { + return this.#t[this.#n] === xr.GLOBSTAR; } - this.#patternList = patternList; - this.#globList = globList; - this.#index = index2; - this.#platform = platform2; - if (this.#index === 0) { - if (this.isUNC()) { - const [p0, p1, p2, p3, ...prest] = this.#patternList; - const [g0, g1, g2, g3, ...grest] = this.#globList; - if (prest[0] === "") { - prest.shift(); - grest.shift(); - } - const p = [p0, p1, p2, p3, ""].join("/"); - const g = [g0, g1, g2, g3, ""].join("/"); - this.#patternList = [p, ...prest]; - this.#globList = [g, ...grest]; - this.length = this.#patternList.length; - } else if (this.isDrive() || this.isAbsolute()) { - const [p1, ...prest] = this.#patternList; - const [g1, ...grest] = this.#globList; - if (prest[0] === "") { - prest.shift(); - grest.shift(); - } - const p = p1 + "/"; - const g = g1 + "/"; - this.#patternList = [p, ...prest]; - this.#globList = [g, ...grest]; - this.length = this.#patternList.length; + isRegExp() { + return this.#t[this.#n] instanceof RegExp; + } + globString() { + return this.#S = this.#S || (this.#n === 0 ? this.isAbsolute() ? this.#s[0] + this.#s.slice(1).join("/") : this.#s.join("/") : this.#s.slice(this.#n).join("/")); + } + hasMore() { + return this.length > this.#n + 1; + } + rest() { + return this.#h !== void 0 ? this.#h : this.hasMore() ? (this.#h = new n(this.#t, this.#s, this.#n + 1, this.#r), this.#h.#o = this.#o, this.#h.#c = this.#c, this.#h.#w = this.#w, this.#h) : this.#h = null; + } + isUNC() { + let t = this.#t; + return this.#c !== void 0 ? this.#c : this.#c = this.#r === "win32" && this.#n === 0 && t[0] === "" && t[1] === "" && typeof t[2] == "string" && !!t[2] && typeof t[3] == "string" && !!t[3]; + } + isDrive() { + let t = this.#t; + return this.#w !== void 0 ? this.#w : this.#w = this.#r === "win32" && this.#n === 0 && this.length > 1 && typeof t[0] == "string" && /^[a-z]:$/i.test(t[0]); + } + isAbsolute() { + let t = this.#t; + return this.#o !== void 0 ? this.#o : this.#o = t[0] === "" && t.length > 1 || this.isDrive() || this.isUNC(); + } + root() { + let t = this.#t[0]; + return typeof t == "string" && this.isAbsolute() && this.#n === 0 ? t : ""; + } + checkFollowGlobstar() { + return !(this.#n === 0 || !this.isGlobstar() || !this.#f); + } + markFollowGlobstar() { + return this.#n === 0 || !this.isGlobstar() || !this.#f ? false : (this.#f = false, true); + } + }; + te.Pattern = Ce; + }); + var ke = R((ee) => { + "use strict"; + Object.defineProperty(ee, "__esModule", { value: true }); + ee.Ignore = void 0; + var Ps = H(), Ar = Re(), kr = typeof process == "object" && process && typeof process.platform == "string" ? process.platform : "linux", Ae = class { + relative; + relativeChildren; + absolute; + absoluteChildren; + platform; + mmopts; + constructor(t, { nobrace: e, nocase: s, noext: i, noglobstar: r, platform: h = kr }) { + this.relative = [], this.absolute = [], this.relativeChildren = [], this.absoluteChildren = [], this.platform = h, this.mmopts = { dot: true, nobrace: e, nocase: s, noext: i, noglobstar: r, optimizationLevel: 2, platform: h, nocomment: true, nonegate: true }; + for (let o of t) this.add(o); + } + add(t) { + let e = new Ps.Minimatch(t, this.mmopts); + for (let s = 0; s < e.set.length; s++) { + let i = e.set[s], r = e.globParts[s]; + if (!i || !r) throw new Error("invalid pattern object"); + for (; i[0] === "." && r[0] === "."; ) i.shift(), r.shift(); + let h = new Ar.Pattern(i, r, 0, this.platform), o = new Ps.Minimatch(h.globString(), this.mmopts), a = r[r.length - 1] === "**", l = h.isAbsolute(); + l ? this.absolute.push(o) : this.relative.push(o), a && (l ? this.absoluteChildren.push(o) : this.relativeChildren.push(o)); } } - } - /** - * The first entry in the parsed list of patterns - */ - pattern() { - return this.#patternList[this.#index]; - } - /** - * true of if pattern() returns a string - */ - isString() { - return typeof this.#patternList[this.#index] === "string"; - } - /** - * true of if pattern() returns GLOBSTAR - */ - isGlobstar() { - return this.#patternList[this.#index] === minimatch_1.GLOBSTAR; - } - /** - * true if pattern() returns a regexp - */ - isRegExp() { - return this.#patternList[this.#index] instanceof RegExp; - } - /** - * The /-joined set of glob parts that make up this pattern - */ - globString() { - return this.#globString = this.#globString || (this.#index === 0 ? this.isAbsolute() ? this.#globList[0] + this.#globList.slice(1).join("/") : this.#globList.join("/") : this.#globList.slice(this.#index).join("/")); - } - /** - * true if there are more pattern parts after this one - */ - hasMore() { - return this.length > this.#index + 1; - } - /** - * The rest of the pattern after this part, or null if this is the end - */ - rest() { - if (this.#rest !== void 0) - return this.#rest; - if (!this.hasMore()) - return this.#rest = null; - this.#rest = new _Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform); - this.#rest.#isAbsolute = this.#isAbsolute; - this.#rest.#isUNC = this.#isUNC; - this.#rest.#isDrive = this.#isDrive; - return this.#rest; - } - /** - * true if the pattern represents a //unc/path/ on windows - */ - isUNC() { - const pl = this.#patternList; - return this.#isUNC !== void 0 ? this.#isUNC : this.#isUNC = this.#platform === "win32" && this.#index === 0 && pl[0] === "" && pl[1] === "" && typeof pl[2] === "string" && !!pl[2] && typeof pl[3] === "string" && !!pl[3]; - } - // pattern like C:/... - // split = ['C:', ...] - // XXX: would be nice to handle patterns like `c:*` to test the cwd - // in c: for *, but I don't know of a way to even figure out what that - // cwd is without actually chdir'ing into it? - /** - * True if the pattern starts with a drive letter on Windows - */ - isDrive() { - const pl = this.#patternList; - return this.#isDrive !== void 0 ? this.#isDrive : this.#isDrive = this.#platform === "win32" && this.#index === 0 && this.length > 1 && typeof pl[0] === "string" && /^[a-z]:$/i.test(pl[0]); - } - // pattern = '/' or '/...' or '/x/...' - // split = ['', ''] or ['', ...] or ['', 'x', ...] - // Drive and UNC both considered absolute on windows - /** - * True if the pattern is rooted on an absolute path - */ - isAbsolute() { - const pl = this.#patternList; - return this.#isAbsolute !== void 0 ? this.#isAbsolute : this.#isAbsolute = pl[0] === "" && pl.length > 1 || this.isDrive() || this.isUNC(); - } - /** - * consume the root of the pattern, and return it - */ - root() { - const p = this.#patternList[0]; - return typeof p === "string" && this.isAbsolute() && this.#index === 0 ? p : ""; - } - /** - * Check to see if the current globstar pattern is allowed to follow - * a symbolic link. - */ - checkFollowGlobstar() { - return !(this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar); - } - /** - * Mark that the current globstar pattern is following a symbolic link - */ - markFollowGlobstar() { - if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar) + ignored(t) { + let e = t.fullpath(), s = `${e}/`, i = t.relative() || ".", r = `${i}/`; + for (let h of this.relative) if (h.match(i) || h.match(r)) return true; + for (let h of this.absolute) if (h.match(e) || h.match(s)) return true; return false; - this.#followGlobstar = false; - return true; - } - }; - exports2.Pattern = Pattern; - } -}); - -// node_modules/glob/dist/commonjs/ignore.js -var require_ignore = __commonJS({ - "node_modules/glob/dist/commonjs/ignore.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Ignore = void 0; - var minimatch_1 = require_commonjs20(); - var pattern_js_1 = require_pattern(); - var defaultPlatform2 = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux"; - var Ignore = class { - relative; - relativeChildren; - absolute; - absoluteChildren; - platform; - mmopts; - constructor(ignored, { nobrace, nocase, noext, noglobstar, platform: platform2 = defaultPlatform2 }) { - this.relative = []; - this.absolute = []; - this.relativeChildren = []; - this.absoluteChildren = []; - this.platform = platform2; - this.mmopts = { - dot: true, - nobrace, - nocase, - noext, - noglobstar, - optimizationLevel: 2, - platform: platform2, - nocomment: true, - nonegate: true - }; - for (const ign of ignored) - this.add(ign); - } - add(ign) { - const mm = new minimatch_1.Minimatch(ign, this.mmopts); - for (let i = 0; i < mm.set.length; i++) { - const parsed = mm.set[i]; - const globParts = mm.globParts[i]; - if (!parsed || !globParts) { - throw new Error("invalid pattern object"); - } - while (parsed[0] === "." && globParts[0] === ".") { - parsed.shift(); - globParts.shift(); - } - const p = new pattern_js_1.Pattern(parsed, globParts, 0, this.platform); - const m = new minimatch_1.Minimatch(p.globString(), this.mmopts); - const children = globParts[globParts.length - 1] === "**"; - const absolute = p.isAbsolute(); - if (absolute) - this.absolute.push(m); - else - this.relative.push(m); - if (children) { - if (absolute) - this.absoluteChildren.push(m); - else - this.relativeChildren.push(m); - } } - } - ignored(p) { - const fullpath = p.fullpath(); - const fullpaths = `${fullpath}/`; - const relative3 = p.relative() || "."; - const relatives = `${relative3}/`; - for (const m of this.relative) { - if (m.match(relative3) || m.match(relatives)) - return true; + childrenIgnored(t) { + let e = t.fullpath() + "/", s = (t.relative() || ".") + "/"; + for (let i of this.relativeChildren) if (i.match(s)) return true; + for (let i of this.absoluteChildren) if (i.match(e)) return true; + return false; } - for (const m of this.absolute) { - if (m.match(fullpath) || m.match(fullpaths)) - return true; + }; + ee.Ignore = Ae; + }); + var Fs = R((z) => { + "use strict"; + Object.defineProperty(z, "__esModule", { value: true }); + z.Processor = z.SubWalks = z.MatchRecord = z.HasWalkedCache = void 0; + var Ds = H(), se = class n { + store; + constructor(t = /* @__PURE__ */ new Map()) { + this.store = t; } - return false; - } - childrenIgnored(p) { - const fullpath = p.fullpath() + "/"; - const relative3 = (p.relative() || ".") + "/"; - for (const m of this.relativeChildren) { - if (m.match(relative3)) - return true; + copy() { + return new n(new Map(this.store)); } - for (const m of this.absoluteChildren) { - if (m.match(fullpath)) - return true; + hasWalked(t, e) { + return this.store.get(t.fullpath())?.has(e.globString()); } - return false; - } - }; - exports2.Ignore = Ignore; - } -}); - -// node_modules/glob/dist/commonjs/processor.js -var require_processor = __commonJS({ - "node_modules/glob/dist/commonjs/processor.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Processor = exports2.SubWalks = exports2.MatchRecord = exports2.HasWalkedCache = void 0; - var minimatch_1 = require_commonjs20(); - var HasWalkedCache = class _HasWalkedCache { - store; - constructor(store = /* @__PURE__ */ new Map()) { - this.store = store; - } - copy() { - return new _HasWalkedCache(new Map(this.store)); - } - hasWalked(target, pattern) { - return this.store.get(target.fullpath())?.has(pattern.globString()); - } - storeWalked(target, pattern) { - const fullpath = target.fullpath(); - const cached = this.store.get(fullpath); - if (cached) - cached.add(pattern.globString()); - else - this.store.set(fullpath, /* @__PURE__ */ new Set([pattern.globString()])); - } - }; - exports2.HasWalkedCache = HasWalkedCache; - var MatchRecord = class { - store = /* @__PURE__ */ new Map(); - add(target, absolute, ifDir) { - const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0); - const current = this.store.get(target); - this.store.set(target, current === void 0 ? n : n & current); - } - // match, absolute, ifdir - entries() { - return [...this.store.entries()].map(([path29, n]) => [ - path29, - !!(n & 2), - !!(n & 1) - ]); - } - }; - exports2.MatchRecord = MatchRecord; - var SubWalks = class { - store = /* @__PURE__ */ new Map(); - add(target, pattern) { - if (!target.canReaddir()) { - return; + storeWalked(t, e) { + let s = t.fullpath(), i = this.store.get(s); + i ? i.add(e.globString()) : this.store.set(s, /* @__PURE__ */ new Set([e.globString()])); } - const subs = this.store.get(target); - if (subs) { - if (!subs.find((p) => p.globString() === pattern.globString())) { - subs.push(pattern); - } - } else - this.store.set(target, [pattern]); - } - get(target) { - const subs = this.store.get(target); - if (!subs) { - throw new Error("attempting to walk unknown path"); + }; + z.HasWalkedCache = se; + var ie = class { + store = /* @__PURE__ */ new Map(); + add(t, e, s) { + let i = (e ? 2 : 0) | (s ? 1 : 0), r = this.store.get(t); + this.store.set(t, r === void 0 ? i : i & r); } - return subs; - } - entries() { - return this.keys().map((k) => [k, this.store.get(k)]); - } - keys() { - return [...this.store.keys()].filter((t) => t.canReaddir()); - } - }; - exports2.SubWalks = SubWalks; - var Processor = class _Processor { - hasWalkedCache; - matches = new MatchRecord(); - subwalks = new SubWalks(); - patterns; - follow; - dot; - opts; - constructor(opts, hasWalkedCache) { - this.opts = opts; - this.follow = !!opts.follow; - this.dot = !!opts.dot; - this.hasWalkedCache = hasWalkedCache ? hasWalkedCache.copy() : new HasWalkedCache(); - } - processPatterns(target, patterns) { - this.patterns = patterns; - const processingSet = patterns.map((p) => [target, p]); - for (let [t, pattern] of processingSet) { - this.hasWalkedCache.storeWalked(t, pattern); - const root = pattern.root(); - const absolute = pattern.isAbsolute() && this.opts.absolute !== false; - if (root) { - t = t.resolve(root === "/" && this.opts.root !== void 0 ? this.opts.root : root); - const rest2 = pattern.rest(); - if (!rest2) { - this.matches.add(t, true, false); - continue; - } else { - pattern = rest2; - } - } - if (t.isENOENT()) - continue; - let p; - let rest; - let changed = false; - while (typeof (p = pattern.pattern()) === "string" && (rest = pattern.rest())) { - const c = t.resolve(p); - t = c; - pattern = rest; - changed = true; - } - p = pattern.pattern(); - rest = pattern.rest(); - if (changed) { - if (this.hasWalkedCache.hasWalked(t, pattern)) - continue; - this.hasWalkedCache.storeWalked(t, pattern); - } - if (typeof p === "string") { - const ifDir = p === ".." || p === "" || p === "."; - this.matches.add(t.resolve(p), absolute, ifDir); - continue; - } else if (p === minimatch_1.GLOBSTAR) { - if (!t.isSymbolicLink() || this.follow || pattern.checkFollowGlobstar()) { - this.subwalks.add(t, pattern); - } - const rp = rest?.pattern(); - const rrest = rest?.rest(); - if (!rest || (rp === "" || rp === ".") && !rrest) { - this.matches.add(t, absolute, rp === "" || rp === "."); - } else { - if (rp === "..") { - const tp = t.parent || t; - if (!rrest) - this.matches.add(tp, absolute, true); - else if (!this.hasWalkedCache.hasWalked(tp, rrest)) { - this.subwalks.add(tp, rrest); - } + entries() { + return [...this.store.entries()].map(([t, e]) => [t, !!(e & 2), !!(e & 1)]); + } + }; + z.MatchRecord = ie; + var re = class { + store = /* @__PURE__ */ new Map(); + add(t, e) { + if (!t.canReaddir()) return; + let s = this.store.get(t); + s ? s.find((i) => i.globString() === e.globString()) || s.push(e) : this.store.set(t, [e]); + } + get(t) { + let e = this.store.get(t); + if (!e) throw new Error("attempting to walk unknown path"); + return e; + } + entries() { + return this.keys().map((t) => [t, this.store.get(t)]); + } + keys() { + return [...this.store.keys()].filter((t) => t.canReaddir()); + } + }; + z.SubWalks = re; + var Me = class n { + hasWalkedCache; + matches = new ie(); + subwalks = new re(); + patterns; + follow; + dot; + opts; + constructor(t, e) { + this.opts = t, this.follow = !!t.follow, this.dot = !!t.dot, this.hasWalkedCache = e ? e.copy() : new se(); + } + processPatterns(t, e) { + this.patterns = e; + let s = e.map((i) => [t, i]); + for (let [i, r] of s) { + this.hasWalkedCache.storeWalked(i, r); + let h = r.root(), o = r.isAbsolute() && this.opts.absolute !== false; + if (h) { + i = i.resolve(h === "/" && this.opts.root !== void 0 ? this.opts.root : h); + let c = r.rest(); + if (c) r = c; + else { + this.matches.add(i, true, false); + continue; } } - } else if (p instanceof RegExp) { - this.subwalks.add(t, pattern); - } - } - return this; - } - subwalkTargets() { - return this.subwalks.keys(); - } - child() { - return new _Processor(this.opts, this.hasWalkedCache); - } - // return a new Processor containing the subwalks for each - // child entry, and a set of matches, and - // a hasWalkedCache that's a copy of this one - // then we're going to call - filterEntries(parent, entries) { - const patterns = this.subwalks.get(parent); - const results = this.child(); - for (const e of entries) { - for (const pattern of patterns) { - const absolute = pattern.isAbsolute(); - const p = pattern.pattern(); - const rest = pattern.rest(); - if (p === minimatch_1.GLOBSTAR) { - results.testGlobstar(e, pattern, rest, absolute); - } else if (p instanceof RegExp) { - results.testRegExp(e, p, rest, absolute); - } else { - results.testString(e, p, rest, absolute); + if (i.isENOENT()) continue; + let a, l, f = false; + for (; typeof (a = r.pattern()) == "string" && (l = r.rest()); ) i = i.resolve(a), r = l, f = true; + if (a = r.pattern(), l = r.rest(), f) { + if (this.hasWalkedCache.hasWalked(i, r)) continue; + this.hasWalkedCache.storeWalked(i, r); } - } - } - return results; - } - testGlobstar(e, pattern, rest, absolute) { - if (this.dot || !e.name.startsWith(".")) { - if (!pattern.hasMore()) { - this.matches.add(e, absolute, false); - } - if (e.canReaddir()) { - if (this.follow || !e.isSymbolicLink()) { - this.subwalks.add(e, pattern); - } else if (e.isSymbolicLink()) { - if (rest && pattern.checkFollowGlobstar()) { - this.subwalks.add(e, rest); - } else if (pattern.markFollowGlobstar()) { - this.subwalks.add(e, pattern); + if (typeof a == "string") { + let c = a === ".." || a === "" || a === "."; + this.matches.add(i.resolve(a), o, c); + continue; + } else if (a === Ds.GLOBSTAR) { + (!i.isSymbolicLink() || this.follow || r.checkFollowGlobstar()) && this.subwalks.add(i, r); + let c = l?.pattern(), d = l?.rest(); + if (!l || (c === "" || c === ".") && !d) this.matches.add(i, o, c === "" || c === "."); + else if (c === "..") { + let u = i.parent || i; + d ? this.hasWalkedCache.hasWalked(u, d) || this.subwalks.add(u, d) : this.matches.add(u, o, true); } - } + } else a instanceof RegExp && this.subwalks.add(i, r); + } + return this; + } + subwalkTargets() { + return this.subwalks.keys(); + } + child() { + return new n(this.opts, this.hasWalkedCache); + } + filterEntries(t, e) { + let s = this.subwalks.get(t), i = this.child(); + for (let r of e) for (let h of s) { + let o = h.isAbsolute(), a = h.pattern(), l = h.rest(); + a === Ds.GLOBSTAR ? i.testGlobstar(r, h, l, o) : a instanceof RegExp ? i.testRegExp(r, a, l, o) : i.testString(r, a, l, o); + } + return i; + } + testGlobstar(t, e, s, i) { + if ((this.dot || !t.name.startsWith(".")) && (e.hasMore() || this.matches.add(t, i, false), t.canReaddir() && (this.follow || !t.isSymbolicLink() ? this.subwalks.add(t, e) : t.isSymbolicLink() && (s && e.checkFollowGlobstar() ? this.subwalks.add(t, s) : e.markFollowGlobstar() && this.subwalks.add(t, e)))), s) { + let r = s.pattern(); + if (typeof r == "string" && r !== ".." && r !== "" && r !== ".") this.testString(t, r, s.rest(), i); + else if (r === "..") { + let h = t.parent || t; + this.subwalks.add(h, s); + } else r instanceof RegExp && this.testRegExp(t, r, s.rest(), i); } } - if (rest) { - const rp = rest.pattern(); - if (typeof rp === "string" && // dots and empty were handled already - rp !== ".." && rp !== "" && rp !== ".") { - this.testString(e, rp, rest.rest(), absolute); - } else if (rp === "..") { - const ep = e.parent || e; - this.subwalks.add(ep, rest); - } else if (rp instanceof RegExp) { - this.testRegExp(e, rp, rest.rest(), absolute); + testRegExp(t, e, s, i) { + e.test(t.name) && (s ? this.subwalks.add(t, s) : this.matches.add(t, i, false)); + } + testString(t, e, s, i) { + t.isNamed(e) && (s ? this.subwalks.add(t, s) : this.matches.add(t, i, false)); + } + }; + z.Processor = Me; + }); + var Ls = R((X) => { + "use strict"; + Object.defineProperty(X, "__esModule", { value: true }); + X.GlobStream = X.GlobWalker = X.GlobUtil = void 0; + var Mr = Oe(), js = ke(), Ns = Fs(), Pr = (n, t) => typeof n == "string" ? new js.Ignore([n], t) : Array.isArray(n) ? new js.Ignore(n, t) : n, Ot = class { + path; + patterns; + opts; + seen = /* @__PURE__ */ new Set(); + paused = false; + aborted = false; + #t = []; + #s; + #n; + signal; + maxDepth; + includeChildMatches; + constructor(t, e, s) { + if (this.patterns = t, this.path = e, this.opts = s, this.#n = !s.posix && s.platform === "win32" ? "\\" : "/", this.includeChildMatches = s.includeChildMatches !== false, (s.ignore || !this.includeChildMatches) && (this.#s = Pr(s.ignore ?? [], s), !this.includeChildMatches && typeof this.#s.add != "function")) { + let i = "cannot ignore child matches, ignore lacks add() method."; + throw new Error(i); + } + this.maxDepth = s.maxDepth || 1 / 0, s.signal && (this.signal = s.signal, this.signal.addEventListener("abort", () => { + this.#t.length = 0; + })); + } + #r(t) { + return this.seen.has(t) || !!this.#s?.ignored?.(t); + } + #h(t) { + return !!this.#s?.childrenIgnored?.(t); + } + pause() { + this.paused = true; + } + resume() { + if (this.signal?.aborted) return; + this.paused = false; + let t; + for (; !this.paused && (t = this.#t.shift()); ) t(); + } + onResume(t) { + this.signal?.aborted || (this.paused ? this.#t.push(t) : t()); + } + async matchCheck(t, e) { + if (e && this.opts.nodir) return; + let s; + if (this.opts.realpath) { + if (s = t.realpathCached() || await t.realpath(), !s) return; + t = s; + } + let r = t.isUnknown() || this.opts.stat ? await t.lstat() : t; + if (this.opts.follow && this.opts.nodir && r?.isSymbolicLink()) { + let h = await r.realpath(); + h && (h.isUnknown() || this.opts.stat) && await h.lstat(); + } + return this.matchCheckTest(r, e); + } + matchCheckTest(t, e) { + return t && (this.maxDepth === 1 / 0 || t.depth() <= this.maxDepth) && (!e || t.canReaddir()) && (!this.opts.nodir || !t.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !t.isSymbolicLink() || !t.realpathCached()?.isDirectory()) && !this.#r(t) ? t : void 0; + } + matchCheckSync(t, e) { + if (e && this.opts.nodir) return; + let s; + if (this.opts.realpath) { + if (s = t.realpathCached() || t.realpathSync(), !s) return; + t = s; + } + let r = t.isUnknown() || this.opts.stat ? t.lstatSync() : t; + if (this.opts.follow && this.opts.nodir && r?.isSymbolicLink()) { + let h = r.realpathSync(); + h && (h?.isUnknown() || this.opts.stat) && h.lstatSync(); + } + return this.matchCheckTest(r, e); + } + matchFinish(t, e) { + if (this.#r(t)) return; + if (!this.includeChildMatches && this.#s?.add) { + let r = `${t.relativePosix()}/**`; + this.#s.add(r); + } + let s = this.opts.absolute === void 0 ? e : this.opts.absolute; + this.seen.add(t); + let i = this.opts.mark && t.isDirectory() ? this.#n : ""; + if (this.opts.withFileTypes) this.matchEmit(t); + else if (s) { + let r = this.opts.posix ? t.fullpathPosix() : t.fullpath(); + this.matchEmit(r + i); + } else { + let r = this.opts.posix ? t.relativePosix() : t.relative(), h = this.opts.dotRelative && !r.startsWith(".." + this.#n) ? "." + this.#n : ""; + this.matchEmit(r ? h + r + i : "." + i); } } - } - testRegExp(e, p, rest, absolute) { - if (!p.test(e.name)) - return; - if (!rest) { - this.matches.add(e, absolute, false); - } else { - this.subwalks.add(e, rest); + async match(t, e, s) { + let i = await this.matchCheck(t, s); + i && this.matchFinish(i, e); } - } - testString(e, p, rest, absolute) { - if (!e.isNamed(p)) - return; - if (!rest) { - this.matches.add(e, absolute, false); - } else { - this.subwalks.add(e, rest); + matchSync(t, e, s) { + let i = this.matchCheckSync(t, s); + i && this.matchFinish(i, e); } - } - }; - exports2.Processor = Processor; - } -}); - -// node_modules/glob/dist/commonjs/walker.js -var require_walker = __commonJS({ - "node_modules/glob/dist/commonjs/walker.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.GlobStream = exports2.GlobWalker = exports2.GlobUtil = void 0; - var minipass_1 = require_commonjs22(); - var ignore_js_1 = require_ignore(); - var processor_js_1 = require_processor(); - var makeIgnore = (ignore, opts) => typeof ignore === "string" ? new ignore_js_1.Ignore([ignore], opts) : Array.isArray(ignore) ? new ignore_js_1.Ignore(ignore, opts) : ignore; - var GlobUtil = class { - path; - patterns; - opts; - seen = /* @__PURE__ */ new Set(); - paused = false; - aborted = false; - #onResume = []; - #ignore; - #sep; - signal; - maxDepth; - includeChildMatches; - constructor(patterns, path29, opts) { - this.patterns = patterns; - this.path = path29; - this.opts = opts; - this.#sep = !opts.posix && opts.platform === "win32" ? "\\" : "/"; - this.includeChildMatches = opts.includeChildMatches !== false; - if (opts.ignore || !this.includeChildMatches) { - this.#ignore = makeIgnore(opts.ignore ?? [], opts); - if (!this.includeChildMatches && typeof this.#ignore.add !== "function") { - const m = "cannot ignore child matches, ignore lacks add() method."; - throw new Error(m); + walkCB(t, e, s) { + this.signal?.aborted && s(), this.walkCB2(t, e, new Ns.Processor(this.opts), s); + } + walkCB2(t, e, s, i) { + if (this.#h(t)) return i(); + if (this.signal?.aborted && i(), this.paused) { + this.onResume(() => this.walkCB2(t, e, s, i)); + return; } + s.processPatterns(t, e); + let r = 1, h = () => { + --r === 0 && i(); + }; + for (let [o, a, l] of s.matches.entries()) this.#r(o) || (r++, this.match(o, a, l).then(() => h())); + for (let o of s.subwalkTargets()) { + if (this.maxDepth !== 1 / 0 && o.depth() >= this.maxDepth) continue; + r++; + let a = o.readdirCached(); + o.calledReaddir() ? this.walkCB3(o, a, s, h) : o.readdirCB((l, f) => this.walkCB3(o, f, s, h), true); + } + h(); } - this.maxDepth = opts.maxDepth || Infinity; - if (opts.signal) { - this.signal = opts.signal; - this.signal.addEventListener("abort", () => { - this.#onResume.length = 0; + walkCB3(t, e, s, i) { + s = s.filterEntries(t, e); + let r = 1, h = () => { + --r === 0 && i(); + }; + for (let [o, a, l] of s.matches.entries()) this.#r(o) || (r++, this.match(o, a, l).then(() => h())); + for (let [o, a] of s.subwalks.entries()) r++, this.walkCB2(o, a, s.child(), h); + h(); + } + walkCBSync(t, e, s) { + this.signal?.aborted && s(), this.walkCB2Sync(t, e, new Ns.Processor(this.opts), s); + } + walkCB2Sync(t, e, s, i) { + if (this.#h(t)) return i(); + if (this.signal?.aborted && i(), this.paused) { + this.onResume(() => this.walkCB2Sync(t, e, s, i)); + return; + } + s.processPatterns(t, e); + let r = 1, h = () => { + --r === 0 && i(); + }; + for (let [o, a, l] of s.matches.entries()) this.#r(o) || this.matchSync(o, a, l); + for (let o of s.subwalkTargets()) { + if (this.maxDepth !== 1 / 0 && o.depth() >= this.maxDepth) continue; + r++; + let a = o.readdirSync(); + this.walkCB3Sync(o, a, s, h); + } + h(); + } + walkCB3Sync(t, e, s, i) { + s = s.filterEntries(t, e); + let r = 1, h = () => { + --r === 0 && i(); + }; + for (let [o, a, l] of s.matches.entries()) this.#r(o) || this.matchSync(o, a, l); + for (let [o, a] of s.subwalks.entries()) r++, this.walkCB2Sync(o, a, s.child(), h); + h(); + } + }; + X.GlobUtil = Ot; + var Pe = class extends Ot { + matches = /* @__PURE__ */ new Set(); + constructor(t, e, s) { + super(t, e, s); + } + matchEmit(t) { + this.matches.add(t); + } + async walk() { + if (this.signal?.aborted) throw this.signal.reason; + return this.path.isUnknown() && await this.path.lstat(), await new Promise((t, e) => { + this.walkCB(this.path, this.patterns, () => { + this.signal?.aborted ? e(this.signal.reason) : t(this.matches); + }); + }), this.matches; + } + walkSync() { + if (this.signal?.aborted) throw this.signal.reason; + return this.path.isUnknown() && this.path.lstatSync(), this.walkCBSync(this.path, this.patterns, () => { + if (this.signal?.aborted) throw this.signal.reason; + }), this.matches; + } + }; + X.GlobWalker = Pe; + var De = class extends Ot { + results; + constructor(t, e, s) { + super(t, e, s), this.results = new Mr.Minipass({ signal: this.signal, objectMode: true }), this.results.on("drain", () => this.resume()), this.results.on("resume", () => this.resume()); + } + matchEmit(t) { + this.results.write(t), this.results.flowing || this.pause(); + } + stream() { + let t = this.path; + return t.isUnknown() ? t.lstat().then(() => { + this.walkCB(t, this.patterns, () => this.results.end()); + }) : this.walkCB(t, this.patterns, () => this.results.end()), this.results; + } + streamSync() { + return this.path.isUnknown() && this.path.lstatSync(), this.walkCBSync(this.path, this.patterns, () => this.results.end()), this.results; + } + }; + X.GlobStream = De; + }); + var je = R((oe) => { + "use strict"; + Object.defineProperty(oe, "__esModule", { value: true }); + oe.Glob = void 0; + var Dr = H(), Fr = require("node:url"), ne = Ms(), jr = Re(), he = Ls(), Nr = typeof process == "object" && process && typeof process.platform == "string" ? process.platform : "linux", Fe = class { + absolute; + cwd; + root; + dot; + dotRelative; + follow; + ignore; + magicalBraces; + mark; + matchBase; + maxDepth; + nobrace; + nocase; + nodir; + noext; + noglobstar; + pattern; + platform; + realpath; + scurry; + stat; + signal; + windowsPathsNoEscape; + withFileTypes; + includeChildMatches; + opts; + patterns; + constructor(t, e) { + if (!e) throw new TypeError("glob options required"); + if (this.withFileTypes = !!e.withFileTypes, this.signal = e.signal, this.follow = !!e.follow, this.dot = !!e.dot, this.dotRelative = !!e.dotRelative, this.nodir = !!e.nodir, this.mark = !!e.mark, e.cwd ? (e.cwd instanceof URL || e.cwd.startsWith("file://")) && (e.cwd = (0, Fr.fileURLToPath)(e.cwd)) : this.cwd = "", this.cwd = e.cwd || "", this.root = e.root, this.magicalBraces = !!e.magicalBraces, this.nobrace = !!e.nobrace, this.noext = !!e.noext, this.realpath = !!e.realpath, this.absolute = e.absolute, this.includeChildMatches = e.includeChildMatches !== false, this.noglobstar = !!e.noglobstar, this.matchBase = !!e.matchBase, this.maxDepth = typeof e.maxDepth == "number" ? e.maxDepth : 1 / 0, this.stat = !!e.stat, this.ignore = e.ignore, this.withFileTypes && this.absolute !== void 0) throw new Error("cannot set absolute and withFileTypes:true"); + if (typeof t == "string" && (t = [t]), this.windowsPathsNoEscape = !!e.windowsPathsNoEscape || e.allowWindowsEscape === false, this.windowsPathsNoEscape && (t = t.map((a) => a.replace(/\\/g, "/"))), this.matchBase) { + if (e.noglobstar) throw new TypeError("base matching requires globstar"); + t = t.map((a) => a.includes("/") ? a : `./**/${a}`); + } + if (this.pattern = t, this.platform = e.platform || Nr, this.opts = { ...e, platform: this.platform }, e.scurry) { + if (this.scurry = e.scurry, e.nocase !== void 0 && e.nocase !== e.scurry.nocase) throw new Error("nocase option contradicts provided scurry option"); + } else { + let a = e.platform === "win32" ? ne.PathScurryWin32 : e.platform === "darwin" ? ne.PathScurryDarwin : e.platform ? ne.PathScurryPosix : ne.PathScurry; + this.scurry = new a(this.cwd, { nocase: e.nocase, fs: e.fs }); + } + this.nocase = this.scurry.nocase; + let s = this.platform === "darwin" || this.platform === "win32", i = { braceExpandMax: 1e4, ...e, dot: this.dot, matchBase: this.matchBase, nobrace: this.nobrace, nocase: this.nocase, nocaseMagicOnly: s, nocomment: true, noext: this.noext, nonegate: true, optimizationLevel: 2, platform: this.platform, windowsPathsNoEscape: this.windowsPathsNoEscape, debug: !!this.opts.debug }, r = this.pattern.map((a) => new Dr.Minimatch(a, i)), [h, o] = r.reduce((a, l) => (a[0].push(...l.set), a[1].push(...l.globParts), a), [[], []]); + this.patterns = h.map((a, l) => { + let f = o[l]; + if (!f) throw new Error("invalid pattern object"); + return new jr.Pattern(a, f, 0, this.platform); }); } - } - #ignored(path29) { - return this.seen.has(path29) || !!this.#ignore?.ignored?.(path29); - } - #childrenIgnored(path29) { - return !!this.#ignore?.childrenIgnored?.(path29); - } - // backpressure mechanism - pause() { - this.paused = true; - } - resume() { - if (this.signal?.aborted) - return; - this.paused = false; - let fn = void 0; - while (!this.paused && (fn = this.#onResume.shift())) { - fn(); + async walk() { + return [...await new he.GlobWalker(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).walk()]; } - } - onResume(fn) { - if (this.signal?.aborted) - return; - if (!this.paused) { - fn(); - } else { - this.#onResume.push(fn); + walkSync() { + return [...new he.GlobWalker(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).walkSync()]; } - } - // do the requisite realpath/stat checking, and return the path - // to add or undefined to filter it out. - async matchCheck(e, ifDir) { - if (ifDir && this.opts.nodir) - return void 0; - let rpc; - if (this.opts.realpath) { - rpc = e.realpathCached() || await e.realpath(); - if (!rpc) - return void 0; - e = rpc; + stream() { + return new he.GlobStream(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).stream(); } - const needStat = e.isUnknown() || this.opts.stat; - const s = needStat ? await e.lstat() : e; - if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) { - const target = await s.realpath(); - if (target && (target.isUnknown() || this.opts.stat)) { - await target.lstat(); - } + streamSync() { + return new he.GlobStream(this.patterns, this.scurry.cwd, { ...this.opts, maxDepth: this.maxDepth !== 1 / 0 ? this.maxDepth + this.scurry.cwd.depth() : 1 / 0, platform: this.platform, nocase: this.nocase, includeChildMatches: this.includeChildMatches }).streamSync(); } - return this.matchCheckTest(s, ifDir); - } - matchCheckTest(e, ifDir) { - return e && (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && (!ifDir || e.canReaddir()) && (!this.opts.nodir || !e.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !e.isSymbolicLink() || !e.realpathCached()?.isDirectory()) && !this.#ignored(e) ? e : void 0; - } - matchCheckSync(e, ifDir) { - if (ifDir && this.opts.nodir) - return void 0; - let rpc; - if (this.opts.realpath) { - rpc = e.realpathCached() || e.realpathSync(); - if (!rpc) - return void 0; - e = rpc; + iterateSync() { + return this.streamSync()[Symbol.iterator](); } - const needStat = e.isUnknown() || this.opts.stat; - const s = needStat ? e.lstatSync() : e; - if (this.opts.follow && this.opts.nodir && s?.isSymbolicLink()) { - const target = s.realpathSync(); - if (target && (target?.isUnknown() || this.opts.stat)) { - target.lstatSync(); - } + [Symbol.iterator]() { + return this.iterateSync(); } - return this.matchCheckTest(s, ifDir); - } - matchFinish(e, absolute) { - if (this.#ignored(e)) - return; - if (!this.includeChildMatches && this.#ignore?.add) { - const ign = `${e.relativePosix()}/**`; - this.#ignore.add(ign); + iterate() { + return this.stream()[Symbol.asyncIterator](); } - const abs = this.opts.absolute === void 0 ? absolute : this.opts.absolute; - this.seen.add(e); - const mark = this.opts.mark && e.isDirectory() ? this.#sep : ""; - if (this.opts.withFileTypes) { - this.matchEmit(e); - } else if (abs) { - const abs2 = this.opts.posix ? e.fullpathPosix() : e.fullpath(); - this.matchEmit(abs2 + mark); - } else { - const rel = this.opts.posix ? e.relativePosix() : e.relative(); - const pre = this.opts.dotRelative && !rel.startsWith(".." + this.#sep) ? "." + this.#sep : ""; - this.matchEmit(!rel ? "." + mark : pre + rel + mark); + [Symbol.asyncIterator]() { + return this.iterate(); } - } - async match(e, absolute, ifDir) { - const p = await this.matchCheck(e, ifDir); - if (p) - this.matchFinish(p, absolute); - } - matchSync(e, absolute, ifDir) { - const p = this.matchCheckSync(e, ifDir); - if (p) - this.matchFinish(p, absolute); - } - walkCB(target, patterns, cb) { - if (this.signal?.aborted) - cb(); - this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb); - } - walkCB2(target, patterns, processor, cb) { - if (this.#childrenIgnored(target)) - return cb(); - if (this.signal?.aborted) - cb(); - if (this.paused) { - this.onResume(() => this.walkCB2(target, patterns, processor, cb)); - return; - } - processor.processPatterns(target, patterns); - let tasks = 1; - const next = () => { - if (--tasks === 0) - cb(); - }; - for (const [m, absolute, ifDir] of processor.matches.entries()) { - if (this.#ignored(m)) - continue; - tasks++; - this.match(m, absolute, ifDir).then(() => next()); - } - for (const t of processor.subwalkTargets()) { - if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { - continue; - } - tasks++; - const childrenCached = t.readdirCached(); - if (t.calledReaddir()) - this.walkCB3(t, childrenCached, processor, next); - else { - t.readdirCB((_2, entries) => this.walkCB3(t, entries, processor, next), true); - } - } - next(); - } - walkCB3(target, entries, processor, cb) { - processor = processor.filterEntries(target, entries); - let tasks = 1; - const next = () => { - if (--tasks === 0) - cb(); - }; - for (const [m, absolute, ifDir] of processor.matches.entries()) { - if (this.#ignored(m)) - continue; - tasks++; - this.match(m, absolute, ifDir).then(() => next()); - } - for (const [target2, patterns] of processor.subwalks.entries()) { - tasks++; - this.walkCB2(target2, patterns, processor.child(), next); - } - next(); - } - walkCBSync(target, patterns, cb) { - if (this.signal?.aborted) - cb(); - this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb); - } - walkCB2Sync(target, patterns, processor, cb) { - if (this.#childrenIgnored(target)) - return cb(); - if (this.signal?.aborted) - cb(); - if (this.paused) { - this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb)); - return; - } - processor.processPatterns(target, patterns); - let tasks = 1; - const next = () => { - if (--tasks === 0) - cb(); - }; - for (const [m, absolute, ifDir] of processor.matches.entries()) { - if (this.#ignored(m)) - continue; - this.matchSync(m, absolute, ifDir); - } - for (const t of processor.subwalkTargets()) { - if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { - continue; - } - tasks++; - const children = t.readdirSync(); - this.walkCB3Sync(t, children, processor, next); - } - next(); - } - walkCB3Sync(target, entries, processor, cb) { - processor = processor.filterEntries(target, entries); - let tasks = 1; - const next = () => { - if (--tasks === 0) - cb(); - }; - for (const [m, absolute, ifDir] of processor.matches.entries()) { - if (this.#ignored(m)) - continue; - this.matchSync(m, absolute, ifDir); - } - for (const [target2, patterns] of processor.subwalks.entries()) { - tasks++; - this.walkCB2Sync(target2, patterns, processor.child(), next); - } - next(); - } - }; - exports2.GlobUtil = GlobUtil; - var GlobWalker = class extends GlobUtil { - matches = /* @__PURE__ */ new Set(); - constructor(patterns, path29, opts) { - super(patterns, path29, opts); - } - matchEmit(e) { - this.matches.add(e); - } - async walk() { - if (this.signal?.aborted) - throw this.signal.reason; - if (this.path.isUnknown()) { - await this.path.lstat(); - } - await new Promise((res, rej) => { - this.walkCB(this.path, this.patterns, () => { - if (this.signal?.aborted) { - rej(this.signal.reason); - } else { - res(this.matches); - } - }); - }); - return this.matches; - } - walkSync() { - if (this.signal?.aborted) - throw this.signal.reason; - if (this.path.isUnknown()) { - this.path.lstatSync(); - } - this.walkCBSync(this.path, this.patterns, () => { - if (this.signal?.aborted) - throw this.signal.reason; - }); - return this.matches; - } - }; - exports2.GlobWalker = GlobWalker; - var GlobStream = class extends GlobUtil { - results; - constructor(patterns, path29, opts) { - super(patterns, path29, opts); - this.results = new minipass_1.Minipass({ - signal: this.signal, - objectMode: true - }); - this.results.on("drain", () => this.resume()); - this.results.on("resume", () => this.resume()); - } - matchEmit(e) { - this.results.write(e); - if (!this.results.flowing) - this.pause(); - } - stream() { - const target = this.path; - if (target.isUnknown()) { - target.lstat().then(() => { - this.walkCB(target, this.patterns, () => this.results.end()); - }); - } else { - this.walkCB(target, this.patterns, () => this.results.end()); - } - return this.results; - } - streamSync() { - if (this.path.isUnknown()) { - this.path.lstatSync(); - } - this.walkCBSync(this.path, this.patterns, () => this.results.end()); - return this.results; - } - }; - exports2.GlobStream = GlobStream; - } -}); - -// node_modules/glob/dist/commonjs/glob.js -var require_glob2 = __commonJS({ - "node_modules/glob/dist/commonjs/glob.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Glob = void 0; - var minimatch_1 = require_commonjs20(); - var node_url_1 = require("node:url"); - var path_scurry_1 = require_commonjs23(); - var pattern_js_1 = require_pattern(); - var walker_js_1 = require_walker(); - var defaultPlatform2 = typeof process === "object" && process && typeof process.platform === "string" ? process.platform : "linux"; - var Glob = class { - absolute; - cwd; - root; - dot; - dotRelative; - follow; - ignore; - magicalBraces; - mark; - matchBase; - maxDepth; - nobrace; - nocase; - nodir; - noext; - noglobstar; - pattern; - platform; - realpath; - scurry; - stat; - signal; - windowsPathsNoEscape; - withFileTypes; - includeChildMatches; - /** - * The options provided to the constructor. - */ - opts; - /** - * An array of parsed immutable {@link Pattern} objects. - */ - patterns; - /** - * All options are stored as properties on the `Glob` object. - * - * See {@link GlobOptions} for full options descriptions. - * - * Note that a previous `Glob` object can be passed as the - * `GlobOptions` to another `Glob` instantiation to re-use settings - * and caches with a new pattern. - * - * Traversal functions can be called multiple times to run the walk - * again. - */ - constructor(pattern, opts) { - if (!opts) - throw new TypeError("glob options required"); - this.withFileTypes = !!opts.withFileTypes; - this.signal = opts.signal; - this.follow = !!opts.follow; - this.dot = !!opts.dot; - this.dotRelative = !!opts.dotRelative; - this.nodir = !!opts.nodir; - this.mark = !!opts.mark; - if (!opts.cwd) { - this.cwd = ""; - } else if (opts.cwd instanceof URL || opts.cwd.startsWith("file://")) { - opts.cwd = (0, node_url_1.fileURLToPath)(opts.cwd); - } - this.cwd = opts.cwd || ""; - this.root = opts.root; - this.magicalBraces = !!opts.magicalBraces; - this.nobrace = !!opts.nobrace; - this.noext = !!opts.noext; - this.realpath = !!opts.realpath; - this.absolute = opts.absolute; - this.includeChildMatches = opts.includeChildMatches !== false; - this.noglobstar = !!opts.noglobstar; - this.matchBase = !!opts.matchBase; - this.maxDepth = typeof opts.maxDepth === "number" ? opts.maxDepth : Infinity; - this.stat = !!opts.stat; - this.ignore = opts.ignore; - if (this.withFileTypes && this.absolute !== void 0) { - throw new Error("cannot set absolute and withFileTypes:true"); - } - if (typeof pattern === "string") { - pattern = [pattern]; - } - this.windowsPathsNoEscape = !!opts.windowsPathsNoEscape || opts.allowWindowsEscape === false; - if (this.windowsPathsNoEscape) { - pattern = pattern.map((p) => p.replace(/\\/g, "/")); - } - if (this.matchBase) { - if (opts.noglobstar) { - throw new TypeError("base matching requires globstar"); - } - pattern = pattern.map((p) => p.includes("/") ? p : `./**/${p}`); - } - this.pattern = pattern; - this.platform = opts.platform || defaultPlatform2; - this.opts = { ...opts, platform: this.platform }; - if (opts.scurry) { - this.scurry = opts.scurry; - if (opts.nocase !== void 0 && opts.nocase !== opts.scurry.nocase) { - throw new Error("nocase option contradicts provided scurry option"); - } - } else { - const Scurry = opts.platform === "win32" ? path_scurry_1.PathScurryWin32 : opts.platform === "darwin" ? path_scurry_1.PathScurryDarwin : opts.platform ? path_scurry_1.PathScurryPosix : path_scurry_1.PathScurry; - this.scurry = new Scurry(this.cwd, { - nocase: opts.nocase, - fs: opts.fs - }); - } - this.nocase = this.scurry.nocase; - const nocaseMagicOnly = this.platform === "darwin" || this.platform === "win32"; - const mmo = { - // default nocase based on platform - ...opts, - dot: this.dot, - matchBase: this.matchBase, - nobrace: this.nobrace, - nocase: this.nocase, - nocaseMagicOnly, - nocomment: true, - noext: this.noext, - nonegate: true, - optimizationLevel: 2, - platform: this.platform, - windowsPathsNoEscape: this.windowsPathsNoEscape, - debug: !!this.opts.debug - }; - const mms = this.pattern.map((p) => new minimatch_1.Minimatch(p, mmo)); - const [matchSet, globParts] = mms.reduce((set, m) => { - set[0].push(...m.set); - set[1].push(...m.globParts); - return set; - }, [[], []]); - this.patterns = matchSet.map((set, i) => { - const g = globParts[i]; - if (!g) - throw new Error("invalid pattern object"); - return new pattern_js_1.Pattern(set, g, 0, this.platform); - }); - } - async walk() { - return [ - ...await new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, { - ...this.opts, - maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity, - platform: this.platform, - nocase: this.nocase, - includeChildMatches: this.includeChildMatches - }).walk() - ]; - } - walkSync() { - return [ - ...new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, { - ...this.opts, - maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity, - platform: this.platform, - nocase: this.nocase, - includeChildMatches: this.includeChildMatches - }).walkSync() - ]; - } - stream() { - return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, { - ...this.opts, - maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity, - platform: this.platform, - nocase: this.nocase, - includeChildMatches: this.includeChildMatches - }).stream(); - } - streamSync() { - return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, { - ...this.opts, - maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity, - platform: this.platform, - nocase: this.nocase, - includeChildMatches: this.includeChildMatches - }).streamSync(); - } - /** - * Default sync iteration function. Returns a Generator that - * iterates over the results. - */ - iterateSync() { - return this.streamSync()[Symbol.iterator](); - } - [Symbol.iterator]() { - return this.iterateSync(); - } - /** - * Default async iteration function. Returns an AsyncGenerator that - * iterates over the results. - */ - iterate() { - return this.stream()[Symbol.asyncIterator](); - } - [Symbol.asyncIterator]() { - return this.iterate(); - } - }; - exports2.Glob = Glob; - } -}); - -// node_modules/glob/dist/commonjs/has-magic.js -var require_has_magic = __commonJS({ - "node_modules/glob/dist/commonjs/has-magic.js"(exports2) { - "use strict"; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.hasMagic = void 0; - var minimatch_1 = require_commonjs20(); - var hasMagic = (pattern, options = {}) => { - if (!Array.isArray(pattern)) { - pattern = [pattern]; - } - for (const p of pattern) { - if (new minimatch_1.Minimatch(p, options).hasMagic()) - return true; - } - return false; - }; - exports2.hasMagic = hasMagic; - } -}); - -// node_modules/glob/dist/commonjs/index.js -var require_commonjs24 = __commonJS({ - "node_modules/glob/dist/commonjs/index.js"(exports2) { - "use strict"; + }; + oe.Glob = Fe; + }); + var Ne = R((ae) => { + "use strict"; + Object.defineProperty(ae, "__esModule", { value: true }); + ae.hasMagic = void 0; + var Lr = H(), Wr = (n, t = {}) => { + Array.isArray(n) || (n = [n]); + for (let e of n) if (new Lr.Minimatch(e, t).hasMagic()) return true; + return false; + }; + ae.hasMagic = Wr; + }); Object.defineProperty(exports2, "__esModule", { value: true }); exports2.glob = exports2.sync = exports2.iterate = exports2.iterateSync = exports2.stream = exports2.streamSync = exports2.Ignore = exports2.hasMagic = exports2.Glob = exports2.unescape = exports2.escape = void 0; - exports2.globStreamSync = globStreamSync; - exports2.globStream = globStream; - exports2.globSync = globSync; - exports2.globIterateSync = globIterateSync; - exports2.globIterate = globIterate; - var minimatch_1 = require_commonjs20(); - var glob_js_1 = require_glob2(); - var has_magic_js_1 = require_has_magic(); - var minimatch_2 = require_commonjs20(); + exports2.globStreamSync = xt; + exports2.globStream = Le; + exports2.globSync = We; + exports2.globIterateSync = Tt; + exports2.globIterate = Be; + var Ws = H(); + var tt = je(); + var Br = Ne(); + var Is = H(); Object.defineProperty(exports2, "escape", { enumerable: true, get: function() { - return minimatch_2.escape; + return Is.escape; } }); Object.defineProperty(exports2, "unescape", { enumerable: true, get: function() { - return minimatch_2.unescape; + return Is.unescape; } }); - var glob_js_2 = require_glob2(); + var Ir = je(); Object.defineProperty(exports2, "Glob", { enumerable: true, get: function() { - return glob_js_2.Glob; + return Ir.Glob; } }); - var has_magic_js_2 = require_has_magic(); + var Gr = Ne(); Object.defineProperty(exports2, "hasMagic", { enumerable: true, get: function() { - return has_magic_js_2.hasMagic; + return Gr.hasMagic; } }); - var ignore_js_1 = require_ignore(); + var zr = ke(); Object.defineProperty(exports2, "Ignore", { enumerable: true, get: function() { - return ignore_js_1.Ignore; + return zr.Ignore; } }); - function globStreamSync(pattern, options = {}) { - return new glob_js_1.Glob(pattern, options).streamSync(); + function xt(n, t = {}) { + return new tt.Glob(n, t).streamSync(); } - function globStream(pattern, options = {}) { - return new glob_js_1.Glob(pattern, options).stream(); + function Le(n, t = {}) { + return new tt.Glob(n, t).stream(); } - function globSync(pattern, options = {}) { - return new glob_js_1.Glob(pattern, options).walkSync(); + function We(n, t = {}) { + return new tt.Glob(n, t).walkSync(); } - async function glob_(pattern, options = {}) { - return new glob_js_1.Glob(pattern, options).walk(); + async function Bs(n, t = {}) { + return new tt.Glob(n, t).walk(); } - function globIterateSync(pattern, options = {}) { - return new glob_js_1.Glob(pattern, options).iterateSync(); + function Tt(n, t = {}) { + return new tt.Glob(n, t).iterateSync(); } - function globIterate(pattern, options = {}) { - return new glob_js_1.Glob(pattern, options).iterate(); + function Be(n, t = {}) { + return new tt.Glob(n, t).iterate(); } - exports2.streamSync = globStreamSync; - exports2.stream = Object.assign(globStream, { sync: globStreamSync }); - exports2.iterateSync = globIterateSync; - exports2.iterate = Object.assign(globIterate, { - sync: globIterateSync - }); - exports2.sync = Object.assign(globSync, { - stream: globStreamSync, - iterate: globIterateSync - }); - exports2.glob = Object.assign(glob_, { - glob: glob_, - globSync, - sync: exports2.sync, - globStream, - stream: exports2.stream, - globStreamSync, - streamSync: exports2.streamSync, - globIterate, - iterate: exports2.iterate, - globIterateSync, - iterateSync: exports2.iterateSync, - Glob: glob_js_1.Glob, - hasMagic: has_magic_js_1.hasMagic, - escape: minimatch_1.escape, - unescape: minimatch_1.unescape - }); + exports2.streamSync = xt; + exports2.stream = Object.assign(Le, { sync: xt }); + exports2.iterateSync = Tt; + exports2.iterate = Object.assign(Be, { sync: Tt }); + exports2.sync = Object.assign(We, { stream: xt, iterate: Tt }); + exports2.glob = Object.assign(Bs, { glob: Bs, globSync: We, sync: exports2.sync, globStream: Le, stream: exports2.stream, globStreamSync: xt, streamSync: exports2.streamSync, globIterate: Be, iterate: exports2.iterate, globIterateSync: Tt, iterateSync: exports2.iterateSync, Glob: tt.Glob, hasMagic: Br.hasMagic, escape: Ws.escape, unescape: Ws.unescape }); exports2.glob.glob = exports2.glob; } }); @@ -109581,7 +105505,7 @@ var require_file3 = __commonJS({ var difference = require_difference(); var union = require_union(); var isPlainObject4 = require_isPlainObject(); - var glob2 = require_commonjs24(); + var glob2 = require_index_min(); var file = module2.exports = {}; var pathSeparatorRe = /[\/\\]/g; var processPatterns = function(patterns, fn) { @@ -114395,7 +110319,7 @@ var require_zip2 = __commonJS({ var stream2 = __importStar2(require("stream")); var promises_1 = require("fs/promises"); var archiver = __importStar2(require_archiver()); - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var config_1 = require_config2(); exports2.DEFAULT_COMPRESSION_LEVEL = 6; var ZipUploadStream = class extends stream2.Transform { @@ -114412,7 +110336,7 @@ var require_zip2 = __commonJS({ exports2.ZipUploadStream = ZipUploadStream; function createZipUploadStream(uploadSpecification_1) { return __awaiter2(this, arguments, void 0, function* (uploadSpecification, compressionLevel = exports2.DEFAULT_COMPRESSION_LEVEL) { - core30.debug(`Creating Artifact archive with compressionLevel: ${compressionLevel}`); + core31.debug(`Creating Artifact archive with compressionLevel: ${compressionLevel}`); const zip = archiver.create("zip", { highWaterMark: (0, config_1.getUploadChunkSize)(), zlib: { level: compressionLevel } @@ -114436,8 +110360,8 @@ var require_zip2 = __commonJS({ } const bufferSize = (0, config_1.getUploadChunkSize)(); const zipUploadStream = new ZipUploadStream(bufferSize); - core30.debug(`Zip write high watermark value ${zipUploadStream.writableHighWaterMark}`); - core30.debug(`Zip read high watermark value ${zipUploadStream.readableHighWaterMark}`); + core31.debug(`Zip write high watermark value ${zipUploadStream.writableHighWaterMark}`); + core31.debug(`Zip read high watermark value ${zipUploadStream.readableHighWaterMark}`); zip.pipe(zipUploadStream); zip.finalize(); return zipUploadStream; @@ -114445,24 +110369,24 @@ var require_zip2 = __commonJS({ } exports2.createZipUploadStream = createZipUploadStream; var zipErrorCallback = (error3) => { - core30.error("An error has occurred while creating the zip file for upload"); - core30.info(error3); + core31.error("An error has occurred while creating the zip file for upload"); + core31.info(error3); throw new Error("An error has occurred during zip creation for the artifact"); }; var zipWarningCallback = (error3) => { if (error3.code === "ENOENT") { - core30.warning("ENOENT warning during artifact zip creation. No such file or directory"); - core30.info(error3); + core31.warning("ENOENT warning during artifact zip creation. No such file or directory"); + core31.info(error3); } else { - core30.warning(`A non-blocking warning has occurred during artifact zip creation: ${error3.code}`); - core30.info(error3); + core31.warning(`A non-blocking warning has occurred during artifact zip creation: ${error3.code}`); + core31.info(error3); } }; var zipFinishCallback = () => { - core30.debug("Zip stream for upload has finished."); + core31.debug("Zip stream for upload has finished."); }; var zipEndCallback = () => { - core30.debug("Zip stream for upload has ended."); + core31.debug("Zip stream for upload has ended."); }; } }); @@ -114527,7 +110451,7 @@ var require_upload_artifact = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.uploadArtifact = void 0; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var retention_1 = require_retention(); var path_and_artifact_name_validation_1 = require_path_and_artifact_name_validation(); var artifact_twirp_client_1 = require_artifact_twirp_client2(); @@ -114574,13 +110498,13 @@ var require_upload_artifact = __commonJS({ value: `sha256:${uploadResult.sha256Hash}` }); } - core30.info(`Finalizing artifact upload`); + core31.info(`Finalizing artifact upload`); const finalizeArtifactResp = yield artifactClient.FinalizeArtifact(finalizeArtifactReq); if (!finalizeArtifactResp.ok) { throw new errors_1.InvalidResponseError("FinalizeArtifact: response from backend was not ok"); } const artifactId = BigInt(finalizeArtifactResp.artifactId); - core30.info(`Artifact ${name}.zip successfully finalized. Artifact ID ${artifactId}`); + core31.info(`Artifact ${name}.zip successfully finalized. Artifact ID ${artifactId}`); return { size: uploadResult.uploadSize, digest: uploadResult.sha256Hash, @@ -119399,9 +115323,9 @@ var require_traverse = __commonJS({ this.value = walk(this.value, cb, false); return this.value; }; - Traverse.prototype.reduce = function(cb, init) { + Traverse.prototype.reduce = function(cb, init2) { var skip = arguments.length === 1; - var acc = skip ? this.value : init; + var acc = skip ? this.value : init2; this.forEach(function(x) { if (!this.isRoot || !skip) { acc = cb.call(this, acc, x); @@ -121304,7 +117228,7 @@ var require_download_artifact = __commonJS({ var crypto3 = __importStar2(require("crypto")); var stream2 = __importStar2(require("stream")); var github5 = __importStar2(require_github2()); - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var httpClient = __importStar2(require_lib()); var unzip_stream_1 = __importDefault2(require_unzip()); var user_agent_1 = require_user_agent2(); @@ -121340,7 +117264,7 @@ var require_download_artifact = __commonJS({ return yield streamExtractExternal(url2, directory); } catch (error3) { retryCount++; - core30.debug(`Failed to download artifact after ${retryCount} retries due to ${error3.message}. Retrying in 5 seconds...`); + core31.debug(`Failed to download artifact after ${retryCount} retries due to ${error3.message}. Retrying in 5 seconds...`); yield new Promise((resolve14) => setTimeout(resolve14, 5e3)); } } @@ -121370,7 +117294,7 @@ var require_download_artifact = __commonJS({ extractStream.on("data", () => { timer.refresh(); }).on("error", (error3) => { - core30.debug(`response.message: Artifact download failed: ${error3.message}`); + core31.debug(`response.message: Artifact download failed: ${error3.message}`); clearTimeout(timer); reject(error3); }).pipe(unzip_stream_1.default.Extract({ path: directory })).on("close", () => { @@ -121378,7 +117302,7 @@ var require_download_artifact = __commonJS({ if (hashStream) { hashStream.end(); sha256Digest = hashStream.read(); - core30.info(`SHA256 digest of downloaded artifact is ${sha256Digest}`); + core31.info(`SHA256 digest of downloaded artifact is ${sha256Digest}`); } resolve14({ sha256Digest: `sha256:${sha256Digest}` }); }).on("error", (error3) => { @@ -121393,7 +117317,7 @@ var require_download_artifact = __commonJS({ const downloadPath = yield resolveOrCreateDirectory(options === null || options === void 0 ? void 0 : options.path); const api = github5.getOctokit(token); let digestMismatch = false; - core30.info(`Downloading artifact '${artifactId}' from '${repositoryOwner}/${repositoryName}'`); + core31.info(`Downloading artifact '${artifactId}' from '${repositoryOwner}/${repositoryName}'`); const { headers, status } = yield api.rest.actions.downloadArtifact({ owner: repositoryOwner, repo: repositoryName, @@ -121410,16 +117334,16 @@ var require_download_artifact = __commonJS({ if (!location) { throw new Error(`Unable to redirect to artifact download url`); } - core30.info(`Redirecting to blob download url: ${scrubQueryParameters(location)}`); + core31.info(`Redirecting to blob download url: ${scrubQueryParameters(location)}`); try { - core30.info(`Starting download of artifact to: ${downloadPath}`); + core31.info(`Starting download of artifact to: ${downloadPath}`); const extractResponse = yield streamExtract(location, downloadPath); - core30.info(`Artifact download completed successfully.`); + core31.info(`Artifact download completed successfully.`); if (options === null || options === void 0 ? void 0 : options.expectedHash) { if ((options === null || options === void 0 ? void 0 : options.expectedHash) !== extractResponse.sha256Digest) { digestMismatch = true; - core30.debug(`Computed digest: ${extractResponse.sha256Digest}`); - core30.debug(`Expected digest: ${options.expectedHash}`); + core31.debug(`Computed digest: ${extractResponse.sha256Digest}`); + core31.debug(`Expected digest: ${options.expectedHash}`); } } } catch (error3) { @@ -121446,7 +117370,7 @@ var require_download_artifact = __commonJS({ Are you trying to download from a different run? Try specifying a github-token with \`actions:read\` scope.`); } if (artifacts.length > 1) { - core30.warning("Multiple artifacts found, defaulting to first."); + core31.warning("Multiple artifacts found, defaulting to first."); } const signedReq = { workflowRunBackendId: artifacts[0].workflowRunBackendId, @@ -121454,16 +117378,16 @@ Are you trying to download from a different run? Try specifying a github-token w name: artifacts[0].name }; const { signedUrl } = yield artifactClient.GetSignedArtifactURL(signedReq); - core30.info(`Redirecting to blob download url: ${scrubQueryParameters(signedUrl)}`); + core31.info(`Redirecting to blob download url: ${scrubQueryParameters(signedUrl)}`); try { - core30.info(`Starting download of artifact to: ${downloadPath}`); + core31.info(`Starting download of artifact to: ${downloadPath}`); const extractResponse = yield streamExtract(signedUrl, downloadPath); - core30.info(`Artifact download completed successfully.`); + core31.info(`Artifact download completed successfully.`); if (options === null || options === void 0 ? void 0 : options.expectedHash) { if ((options === null || options === void 0 ? void 0 : options.expectedHash) !== extractResponse.sha256Digest) { digestMismatch = true; - core30.debug(`Computed digest: ${extractResponse.sha256Digest}`); - core30.debug(`Expected digest: ${options.expectedHash}`); + core31.debug(`Computed digest: ${extractResponse.sha256Digest}`); + core31.debug(`Expected digest: ${options.expectedHash}`); } } } catch (error3) { @@ -121476,10 +117400,10 @@ Are you trying to download from a different run? Try specifying a github-token w function resolveOrCreateDirectory() { return __awaiter2(this, arguments, void 0, function* (downloadPath = (0, config_1.getGitHubWorkspaceDir)()) { if (!(yield exists(downloadPath))) { - core30.debug(`Artifact destination folder does not exist, creating: ${downloadPath}`); + core31.debug(`Artifact destination folder does not exist, creating: ${downloadPath}`); yield promises_1.default.mkdir(downloadPath, { recursive: true }); } else { - core30.debug(`Artifact destination folder already exists: ${downloadPath}`); + core31.debug(`Artifact destination folder already exists: ${downloadPath}`); } return downloadPath; }); @@ -121520,7 +117444,7 @@ var require_retry_options = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.getRetryOptions = void 0; - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var defaultMaxRetryNumber = 5; var defaultExemptStatusCodes = [400, 401, 403, 404, 422]; function getRetryOptions(defaultOptions, retries = defaultMaxRetryNumber, exemptStatusCodes = defaultExemptStatusCodes) { @@ -121535,7 +117459,7 @@ var require_retry_options = __commonJS({ retryOptions.doNotRetry = exemptStatusCodes; } const requestOptions = Object.assign(Object.assign({}, defaultOptions.request), { retries }); - core30.debug(`GitHub client configured with: (retries: ${requestOptions.retries}, retry-exempt-status-code: ${(_a2 = retryOptions.doNotRetry) !== null && _a2 !== void 0 ? _a2 : "octokit default: [400, 401, 403, 404, 422]"})`); + core31.debug(`GitHub client configured with: (retries: ${requestOptions.retries}, retry-exempt-status-code: ${(_a2 = retryOptions.doNotRetry) !== null && _a2 !== void 0 ? _a2 : "octokit default: [400, 401, 403, 404, 422]"})`); return [retryOptions, requestOptions]; } exports2.getRetryOptions = getRetryOptions; @@ -121692,7 +117616,7 @@ var require_get_artifact = __commonJS({ exports2.getArtifactInternal = exports2.getArtifactPublic = void 0; var github_1 = require_github2(); var plugin_retry_1 = require_dist_node12(); - var core30 = __importStar2(require_core()); + var core31 = __importStar2(require_core()); var utils_1 = require_utils9(); var retry_options_1 = require_retry_options(); var plugin_request_log_1 = require_dist_node11(); @@ -121730,7 +117654,7 @@ var require_get_artifact = __commonJS({ let artifact2 = getArtifactResp.data.artifacts[0]; if (getArtifactResp.data.artifacts.length > 1) { artifact2 = getArtifactResp.data.artifacts.sort((a, b) => b.id - a.id)[0]; - core30.debug(`More than one artifact found for a single name, returning newest (id: ${artifact2.id})`); + core31.debug(`More than one artifact found for a single name, returning newest (id: ${artifact2.id})`); } return { artifact: { @@ -121763,7 +117687,7 @@ var require_get_artifact = __commonJS({ let artifact2 = res.artifacts[0]; if (res.artifacts.length > 1) { artifact2 = res.artifacts.sort((a, b) => Number(b.databaseId) - Number(a.databaseId))[0]; - core30.debug(`More than one artifact found for a single name, returning newest (id: ${artifact2.databaseId})`); + core31.debug(`More than one artifact found for a single name, returning newest (id: ${artifact2.databaseId})`); } return { artifact: { @@ -124939,11 +120863,11 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); (0, command_1.issue)("echo", enabled ? "on" : "off"); } exports2.setCommandEcho = setCommandEcho; - function setFailed12(message) { + function setFailed13(message) { process.exitCode = ExitCode.Failure; error3(message); } - exports2.setFailed = setFailed12; + exports2.setFailed = setFailed13; function isDebug5() { return process.env["RUNNER_DEBUG"] === "1"; } @@ -126517,7 +122441,7 @@ var require_requestUtils2 = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.retryHttpClientRequest = exports2.retry = void 0; var utils_1 = require_utils11(); - var core30 = __importStar2(require_core3()); + var core31 = __importStar2(require_core3()); var config_variables_1 = require_config_variables(); function retry2(name, operation, customErrorMessages, maxAttempts) { return __awaiter2(this, void 0, void 0, function* () { @@ -126544,13 +122468,13 @@ var require_requestUtils2 = __commonJS({ errorMessage = error3.message; } if (!isRetryable) { - core30.info(`${name} - Error is not retryable`); + core31.info(`${name} - Error is not retryable`); if (response) { (0, utils_1.displayHttpDiagnostics)(response); } break; } - core30.info(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`); + core31.info(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`); yield (0, utils_1.sleep)((0, utils_1.getExponentialRetryTimeInMilliseconds)(attempt)); attempt++; } @@ -126634,7 +122558,7 @@ var require_upload_http_client = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.UploadHttpClient = void 0; var fs31 = __importStar2(require("fs")); - var core30 = __importStar2(require_core3()); + var core31 = __importStar2(require_core3()); var tmp = __importStar2(require_tmp_promise()); var stream2 = __importStar2(require("stream")); var utils_1 = require_utils11(); @@ -126699,7 +122623,7 @@ var require_upload_http_client = __commonJS({ return __awaiter2(this, void 0, void 0, function* () { const FILE_CONCURRENCY = (0, config_variables_1.getUploadFileConcurrency)(); const MAX_CHUNK_SIZE = (0, config_variables_1.getUploadChunkSize)(); - core30.debug(`File Concurrency: ${FILE_CONCURRENCY}, and Chunk Size: ${MAX_CHUNK_SIZE}`); + core31.debug(`File Concurrency: ${FILE_CONCURRENCY}, and Chunk Size: ${MAX_CHUNK_SIZE}`); const parameters = []; let continueOnError = true; if (options) { @@ -126736,15 +122660,15 @@ var require_upload_http_client = __commonJS({ } const startTime = perf_hooks_1.performance.now(); const uploadFileResult = yield this.uploadFileAsync(index2, currentFileParameters); - if (core30.isDebug()) { - core30.debug(`File: ${++completedFiles}/${filesToUpload.length}. ${currentFileParameters.file} took ${(perf_hooks_1.performance.now() - startTime).toFixed(3)} milliseconds to finish upload`); + if (core31.isDebug()) { + core31.debug(`File: ${++completedFiles}/${filesToUpload.length}. ${currentFileParameters.file} took ${(perf_hooks_1.performance.now() - startTime).toFixed(3)} milliseconds to finish upload`); } uploadFileSize += uploadFileResult.successfulUploadSize; totalFileSize += uploadFileResult.totalSize; if (uploadFileResult.isSuccess === false) { failedItemsToReport.push(currentFileParameters.file); if (!continueOnError) { - core30.error(`aborting artifact upload`); + core31.error(`aborting artifact upload`); abortPendingFileUploads = true; } } @@ -126753,7 +122677,7 @@ var require_upload_http_client = __commonJS({ }))); this.statusReporter.stop(); this.uploadHttpManager.disposeAndReplaceAllClients(); - core30.info(`Total size of all the files uploaded is ${uploadFileSize} bytes`); + core31.info(`Total size of all the files uploaded is ${uploadFileSize} bytes`); return { uploadSize: uploadFileSize, totalSize: totalFileSize, @@ -126779,16 +122703,16 @@ var require_upload_http_client = __commonJS({ let uploadFileSize = 0; let isGzip = true; if (!isFIFO && totalFileSize < 65536) { - core30.debug(`${parameters.file} is less than 64k in size. Creating a gzip file in-memory to potentially reduce the upload size`); + core31.debug(`${parameters.file} is less than 64k in size. Creating a gzip file in-memory to potentially reduce the upload size`); const buffer = yield (0, upload_gzip_1.createGZipFileInBuffer)(parameters.file); let openUploadStream; if (totalFileSize < buffer.byteLength) { - core30.debug(`The gzip file created for ${parameters.file} did not help with reducing the size of the file. The original file will be uploaded as-is`); + core31.debug(`The gzip file created for ${parameters.file} did not help with reducing the size of the file. The original file will be uploaded as-is`); openUploadStream = () => fs31.createReadStream(parameters.file); isGzip = false; uploadFileSize = totalFileSize; } else { - core30.debug(`A gzip file created for ${parameters.file} helped with reducing the size of the original file. The file will be uploaded using gzip.`); + core31.debug(`A gzip file created for ${parameters.file} helped with reducing the size of the original file. The file will be uploaded using gzip.`); openUploadStream = () => { const passThrough = new stream2.PassThrough(); passThrough.end(buffer); @@ -126800,7 +122724,7 @@ var require_upload_http_client = __commonJS({ if (!result) { isUploadSuccessful = false; failedChunkSizes += uploadFileSize; - core30.warning(`Aborting upload for ${parameters.file} due to failure`); + core31.warning(`Aborting upload for ${parameters.file} due to failure`); } return { isSuccess: isUploadSuccessful, @@ -126809,16 +122733,16 @@ var require_upload_http_client = __commonJS({ }; } else { const tempFile = yield tmp.file(); - core30.debug(`${parameters.file} is greater than 64k in size. Creating a gzip file on-disk ${tempFile.path} to potentially reduce the upload size`); + core31.debug(`${parameters.file} is greater than 64k in size. Creating a gzip file on-disk ${tempFile.path} to potentially reduce the upload size`); uploadFileSize = yield (0, upload_gzip_1.createGZipFileOnDisk)(parameters.file, tempFile.path); let uploadFilePath = tempFile.path; if (!isFIFO && totalFileSize < uploadFileSize) { - core30.debug(`The gzip file created for ${parameters.file} did not help with reducing the size of the file. The original file will be uploaded as-is`); + core31.debug(`The gzip file created for ${parameters.file} did not help with reducing the size of the file. The original file will be uploaded as-is`); uploadFileSize = totalFileSize; uploadFilePath = parameters.file; isGzip = false; } else { - core30.debug(`The gzip file created for ${parameters.file} is smaller than the original file. The file will be uploaded using gzip.`); + core31.debug(`The gzip file created for ${parameters.file} is smaller than the original file. The file will be uploaded using gzip.`); } let abortFileUpload = false; while (offset < uploadFileSize) { @@ -126838,7 +122762,7 @@ var require_upload_http_client = __commonJS({ if (!result) { isUploadSuccessful = false; failedChunkSizes += chunkSize; - core30.warning(`Aborting upload for ${parameters.file} due to failure`); + core31.warning(`Aborting upload for ${parameters.file} due to failure`); abortFileUpload = true; } else { if (uploadFileSize > 8388608) { @@ -126846,7 +122770,7 @@ var require_upload_http_client = __commonJS({ } } } - core30.debug(`deleting temporary gzip file ${tempFile.path}`); + core31.debug(`deleting temporary gzip file ${tempFile.path}`); yield tempFile.cleanup(); return { isSuccess: isUploadSuccessful, @@ -126885,7 +122809,7 @@ var require_upload_http_client = __commonJS({ if (response) { (0, utils_1.displayHttpDiagnostics)(response); } - core30.info(`Retry limit has been reached for chunk at offset ${start} to ${resourceUrl}`); + core31.info(`Retry limit has been reached for chunk at offset ${start} to ${resourceUrl}`); return true; } return false; @@ -126893,14 +122817,14 @@ var require_upload_http_client = __commonJS({ const backOff = (retryAfterValue) => __awaiter2(this, void 0, void 0, function* () { this.uploadHttpManager.disposeAndReplaceClient(httpClientIndex); if (retryAfterValue) { - core30.info(`Backoff due to too many requests, retry #${retryCount}. Waiting for ${retryAfterValue} milliseconds before continuing the upload`); + core31.info(`Backoff due to too many requests, retry #${retryCount}. Waiting for ${retryAfterValue} milliseconds before continuing the upload`); yield (0, utils_1.sleep)(retryAfterValue); } else { const backoffTime = (0, utils_1.getExponentialRetryTimeInMilliseconds)(retryCount); - core30.info(`Exponential backoff for retry #${retryCount}. Waiting for ${backoffTime} milliseconds before continuing the upload at offset ${start}`); + core31.info(`Exponential backoff for retry #${retryCount}. Waiting for ${backoffTime} milliseconds before continuing the upload at offset ${start}`); yield (0, utils_1.sleep)(backoffTime); } - core30.info(`Finished backoff for retry #${retryCount}, continuing with upload`); + core31.info(`Finished backoff for retry #${retryCount}, continuing with upload`); return; }); while (retryCount <= retryLimit) { @@ -126908,7 +122832,7 @@ var require_upload_http_client = __commonJS({ try { response = yield uploadChunkRequest(); } catch (error3) { - core30.info(`An error has been caught http-client index ${httpClientIndex}, retrying the upload`); + core31.info(`An error has been caught http-client index ${httpClientIndex}, retrying the upload`); console.log(error3); if (incrementAndCheckRetryLimit()) { return false; @@ -126920,13 +122844,13 @@ var require_upload_http_client = __commonJS({ if ((0, utils_1.isSuccessStatusCode)(response.message.statusCode)) { return true; } else if ((0, utils_1.isRetryableStatusCode)(response.message.statusCode)) { - core30.info(`A ${response.message.statusCode} status code has been received, will attempt to retry the upload`); + core31.info(`A ${response.message.statusCode} status code has been received, will attempt to retry the upload`); if (incrementAndCheckRetryLimit(response)) { return false; } (0, utils_1.isThrottledStatusCode)(response.message.statusCode) ? yield backOff((0, utils_1.tryGetRetryAfterValueTimeInMilliseconds)(response.message.headers)) : yield backOff(); } else { - core30.error(`Unexpected response. Unable to upload chunk to ${resourceUrl}`); + core31.error(`Unexpected response. Unable to upload chunk to ${resourceUrl}`); (0, utils_1.displayHttpDiagnostics)(response); return false; } @@ -126944,7 +122868,7 @@ var require_upload_http_client = __commonJS({ resourceUrl.searchParams.append("artifactName", artifactName); const parameters = { Size: size }; const data = JSON.stringify(parameters, null, 2); - core30.debug(`URL is ${resourceUrl.toString()}`); + core31.debug(`URL is ${resourceUrl.toString()}`); const client = this.uploadHttpManager.getClient(0); const headers = (0, utils_1.getUploadHeaders)("application/json", false); const customErrorMessages = /* @__PURE__ */ new Map([ @@ -126957,7 +122881,7 @@ var require_upload_http_client = __commonJS({ return client.patch(resourceUrl.toString(), data, headers); }), customErrorMessages); yield response.readBody(); - core30.debug(`Artifact ${artifactName} has been successfully uploaded, total size in bytes: ${size}`); + core31.debug(`Artifact ${artifactName} has been successfully uploaded, total size in bytes: ${size}`); }); } }; @@ -127026,7 +122950,7 @@ var require_download_http_client = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.DownloadHttpClient = void 0; var fs31 = __importStar2(require("fs")); - var core30 = __importStar2(require_core3()); + var core31 = __importStar2(require_core3()); var zlib3 = __importStar2(require("zlib")); var utils_1 = require_utils11(); var url_1 = require("url"); @@ -127080,11 +123004,11 @@ var require_download_http_client = __commonJS({ downloadSingleArtifact(downloadItems) { return __awaiter2(this, void 0, void 0, function* () { const DOWNLOAD_CONCURRENCY = (0, config_variables_1.getDownloadFileConcurrency)(); - core30.debug(`Download file concurrency is set to ${DOWNLOAD_CONCURRENCY}`); + core31.debug(`Download file concurrency is set to ${DOWNLOAD_CONCURRENCY}`); const parallelDownloads = [...new Array(DOWNLOAD_CONCURRENCY).keys()]; let currentFile = 0; let downloadedFiles = 0; - core30.info(`Total number of files that will be downloaded: ${downloadItems.length}`); + core31.info(`Total number of files that will be downloaded: ${downloadItems.length}`); this.statusReporter.setTotalNumberOfFilesToProcess(downloadItems.length); this.statusReporter.start(); yield Promise.all(parallelDownloads.map((index2) => __awaiter2(this, void 0, void 0, function* () { @@ -127093,8 +123017,8 @@ var require_download_http_client = __commonJS({ currentFile += 1; const startTime = perf_hooks_1.performance.now(); yield this.downloadIndividualFile(index2, currentFileToDownload.sourceLocation, currentFileToDownload.targetPath); - if (core30.isDebug()) { - core30.debug(`File: ${++downloadedFiles}/${downloadItems.length}. ${currentFileToDownload.targetPath} took ${(perf_hooks_1.performance.now() - startTime).toFixed(3)} milliseconds to finish downloading`); + if (core31.isDebug()) { + core31.debug(`File: ${++downloadedFiles}/${downloadItems.length}. ${currentFileToDownload.targetPath} took ${(perf_hooks_1.performance.now() - startTime).toFixed(3)} milliseconds to finish downloading`); } this.statusReporter.incrementProcessedCount(); } @@ -127132,19 +123056,19 @@ var require_download_http_client = __commonJS({ } else { this.downloadHttpManager.disposeAndReplaceClient(httpClientIndex); if (retryAfterValue) { - core30.info(`Backoff due to too many requests, retry #${retryCount}. Waiting for ${retryAfterValue} milliseconds before continuing the download`); + core31.info(`Backoff due to too many requests, retry #${retryCount}. Waiting for ${retryAfterValue} milliseconds before continuing the download`); yield (0, utils_1.sleep)(retryAfterValue); } else { const backoffTime = (0, utils_1.getExponentialRetryTimeInMilliseconds)(retryCount); - core30.info(`Exponential backoff for retry #${retryCount}. Waiting for ${backoffTime} milliseconds before continuing the download`); + core31.info(`Exponential backoff for retry #${retryCount}. Waiting for ${backoffTime} milliseconds before continuing the download`); yield (0, utils_1.sleep)(backoffTime); } - core30.info(`Finished backoff for retry #${retryCount}, continuing with download`); + core31.info(`Finished backoff for retry #${retryCount}, continuing with download`); } }); const isAllBytesReceived = (expected, received) => { if (!expected || !received || process.env["ACTIONS_ARTIFACT_SKIP_DOWNLOAD_VALIDATION"]) { - core30.info("Skipping download validation."); + core31.info("Skipping download validation."); return true; } return parseInt(expected) === received; @@ -127165,7 +123089,7 @@ var require_download_http_client = __commonJS({ try { response = yield makeDownloadRequest(); } catch (error3) { - core30.info("An error occurred while attempting to download a file"); + core31.info("An error occurred while attempting to download a file"); console.log(error3); yield backOff(); continue; @@ -127185,7 +123109,7 @@ var require_download_http_client = __commonJS({ } } if (forceRetry || (0, utils_1.isRetryableStatusCode)(response.message.statusCode)) { - core30.info(`A ${response.message.statusCode} response code has been received while attempting to download an artifact`); + core31.info(`A ${response.message.statusCode} response code has been received while attempting to download an artifact`); resetDestinationStream(downloadPath); (0, utils_1.isThrottledStatusCode)(response.message.statusCode) ? yield backOff((0, utils_1.tryGetRetryAfterValueTimeInMilliseconds)(response.message.headers)) : yield backOff(); } else { @@ -127207,29 +123131,29 @@ var require_download_http_client = __commonJS({ if (isGzip) { const gunzip = zlib3.createGunzip(); response.message.on("error", (error3) => { - core30.info(`An error occurred while attempting to read the response stream`); + core31.info(`An error occurred while attempting to read the response stream`); gunzip.close(); destinationStream.close(); reject(error3); }).pipe(gunzip).on("error", (error3) => { - core30.info(`An error occurred while attempting to decompress the response stream`); + core31.info(`An error occurred while attempting to decompress the response stream`); destinationStream.close(); reject(error3); }).pipe(destinationStream).on("close", () => { resolve14(); }).on("error", (error3) => { - core30.info(`An error occurred while writing a downloaded file to ${destinationStream.path}`); + core31.info(`An error occurred while writing a downloaded file to ${destinationStream.path}`); reject(error3); }); } else { response.message.on("error", (error3) => { - core30.info(`An error occurred while attempting to read the response stream`); + core31.info(`An error occurred while attempting to read the response stream`); destinationStream.close(); reject(error3); }).pipe(destinationStream).on("close", () => { resolve14(); }).on("error", (error3) => { - core30.info(`An error occurred while writing a downloaded file to ${destinationStream.path}`); + core31.info(`An error occurred while writing a downloaded file to ${destinationStream.path}`); reject(error3); }); } @@ -127368,7 +123292,7 @@ var require_artifact_client = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.DefaultArtifactClient = void 0; - var core30 = __importStar2(require_core3()); + var core31 = __importStar2(require_core3()); var upload_specification_1 = require_upload_specification(); var upload_http_client_1 = require_upload_http_client(); var utils_1 = require_utils11(); @@ -127389,7 +123313,7 @@ var require_artifact_client = __commonJS({ */ uploadArtifact(name, files, rootDirectory, options) { return __awaiter2(this, void 0, void 0, function* () { - core30.info(`Starting artifact upload + core31.info(`Starting artifact upload For more detailed logs during the artifact upload process, enable step-debugging: https://docs.github.com/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging`); (0, path_and_artifact_name_validation_1.checkArtifactName)(name); const uploadSpecification = (0, upload_specification_1.getUploadSpecification)(name, rootDirectory, files); @@ -127401,24 +123325,24 @@ For more detailed logs during the artifact upload process, enable step-debugging }; const uploadHttpClient = new upload_http_client_1.UploadHttpClient(); if (uploadSpecification.length === 0) { - core30.warning(`No files found that can be uploaded`); + core31.warning(`No files found that can be uploaded`); } else { const response = yield uploadHttpClient.createArtifactInFileContainer(name, options); if (!response.fileContainerResourceUrl) { - core30.debug(response.toString()); + core31.debug(response.toString()); throw new Error("No URL provided by the Artifact Service to upload an artifact to"); } - core30.debug(`Upload Resource URL: ${response.fileContainerResourceUrl}`); - core30.info(`Container for artifact "${name}" successfully created. Starting upload of file(s)`); + core31.debug(`Upload Resource URL: ${response.fileContainerResourceUrl}`); + core31.info(`Container for artifact "${name}" successfully created. Starting upload of file(s)`); const uploadResult = yield uploadHttpClient.uploadArtifactToFileContainer(response.fileContainerResourceUrl, uploadSpecification, options); - core30.info(`File upload process has finished. Finalizing the artifact upload`); + core31.info(`File upload process has finished. Finalizing the artifact upload`); yield uploadHttpClient.patchArtifactSize(uploadResult.totalSize, name); if (uploadResult.failedItems.length > 0) { - core30.info(`Upload finished. There were ${uploadResult.failedItems.length} items that failed to upload`); + core31.info(`Upload finished. There were ${uploadResult.failedItems.length} items that failed to upload`); } else { - core30.info(`Artifact has been finalized. All files have been successfully uploaded!`); + core31.info(`Artifact has been finalized. All files have been successfully uploaded!`); } - core30.info(` + core31.info(` The raw size of all the files that were specified for upload is ${uploadResult.totalSize} bytes The size of all the files that were uploaded is ${uploadResult.uploadSize} bytes. This takes into account any gzip compression used to reduce the upload size, time and storage @@ -127452,10 +123376,10 @@ Note: The size of downloaded zips can differ significantly from the reported siz path29 = (0, path_1.resolve)(path29); const downloadSpecification = (0, download_specification_1.getDownloadSpecification)(name, items.value, path29, (options === null || options === void 0 ? void 0 : options.createArtifactFolder) || false); if (downloadSpecification.filesToDownload.length === 0) { - core30.info(`No downloadable files were found for the artifact: ${artifactToDownload.name}`); + core31.info(`No downloadable files were found for the artifact: ${artifactToDownload.name}`); } else { yield (0, utils_1.createDirectoriesForArtifact)(downloadSpecification.directoryStructure); - core30.info("Directory structure has been set up for the artifact"); + core31.info("Directory structure has been set up for the artifact"); yield (0, utils_1.createEmptyFilesForArtifact)(downloadSpecification.emptyFilesToCreate); yield downloadHttpClient.downloadSingleArtifact(downloadSpecification.filesToDownload); } @@ -127471,7 +123395,7 @@ Note: The size of downloaded zips can differ significantly from the reported siz const response = []; const artifacts = yield downloadHttpClient.listArtifacts(); if (artifacts.count === 0) { - core30.info("Unable to find any artifacts for the associated workflow"); + core31.info("Unable to find any artifacts for the associated workflow"); return response; } if (!path29) { @@ -127483,11 +123407,11 @@ Note: The size of downloaded zips can differ significantly from the reported siz while (downloadedArtifacts < artifacts.count) { const currentArtifactToDownload = artifacts.value[downloadedArtifacts]; downloadedArtifacts += 1; - core30.info(`starting download of artifact ${currentArtifactToDownload.name} : ${downloadedArtifacts}/${artifacts.count}`); + core31.info(`starting download of artifact ${currentArtifactToDownload.name} : ${downloadedArtifacts}/${artifacts.count}`); const items = yield downloadHttpClient.getContainerItems(currentArtifactToDownload.name, currentArtifactToDownload.fileContainerResourceUrl); const downloadSpecification = (0, download_specification_1.getDownloadSpecification)(currentArtifactToDownload.name, items.value, path29, true); if (downloadSpecification.filesToDownload.length === 0) { - core30.info(`No downloadable files were found for any artifact ${currentArtifactToDownload.name}`); + core31.info(`No downloadable files were found for any artifact ${currentArtifactToDownload.name}`); } else { yield (0, utils_1.createDirectoriesForArtifact)(downloadSpecification.directoryStructure); yield (0, utils_1.createEmptyFilesForArtifact)(downloadSpecification.emptyFilesToCreate); @@ -129839,7 +125763,7 @@ var require_aes = __commonJS({ }); }; forge.aes.Algorithm = function(name, mode) { - if (!init) { + if (!init2) { initialize(); } var self2 = this; @@ -129892,7 +125816,7 @@ var require_aes = __commonJS({ this._init = true; }; forge.aes._expandKey = function(key, decrypt) { - if (!init) { + if (!init2) { initialize(); } return _expandKey(key, decrypt); @@ -129910,7 +125834,7 @@ var require_aes = __commonJS({ }; forge.cipher.registerAlgorithm(name, factory); } - var init = false; + var init2 = false; var Nb = 4; var sbox; var isbox; @@ -129918,7 +125842,7 @@ var require_aes = __commonJS({ var mix; var imix; function initialize() { - init = true; + init2 = true; rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; var xtime = new Array(256); for (var i = 0; i < 128; ++i) { @@ -143508,11 +139432,11 @@ var require_ed25519 = __commonJS({ q[i] ^= t; } } - function gf(init) { + function gf(init2) { var i, r = new Float64Array(16); - if (init) { - for (i = 0; i < init.length; ++i) { - r[i] = init[i]; + if (init2) { + for (i = 0; i < init2.length; ++i) { + r[i] = init2[i]; } } return r; @@ -145367,7 +141291,10 @@ module.exports = __toCommonJS(entry_points_exports); var fs22 = __toESM(require("fs")); var import_path4 = __toESM(require("path")); var import_perf_hooks4 = require("perf_hooks"); -var core15 = __toESM(require_core()); +var core16 = __toESM(require_core()); + +// src/action-common.ts +var core8 = __toESM(require_core()); // src/actions-util.ts var fs2 = __toESM(require("fs")); @@ -145457,6 +141384,7 @@ function defineScalarTag(tagName, options) { }; } function defineSequenceTag(tagName, options) { + const carrierIsResult = options.finalize === void 0; return { tagName, nodeKind: "sequence", @@ -145464,12 +141392,15 @@ function defineSequenceTag(tagName, options) { matchByTagPrefix: options.matchByTagPrefix ?? false, create: options.create, addItem: options.addItem, + finalize: options.finalize ?? ((carrier) => carrier), + carrierIsResult, identify: options.identify ?? null, represent: options.represent ?? ((data) => data), representTagName: options.representTagName ?? null }; } function defineMappingTag(tagName, options) { + const carrierIsResult = options.finalize === void 0; return { tagName, nodeKind: "mapping", @@ -145480,6 +141411,8 @@ function defineMappingTag(tagName, options) { has: options.has, keys: options.keys, get: options.get, + finalize: options.finalize ?? ((carrier) => carrier), + carrierIsResult, identify: options.identify ?? null, represent: options.represent ?? ((data) => data), representTagName: options.representTagName ?? null @@ -146535,6 +142468,14 @@ function eventPosition$1(event) { function throwError$1(state, message) { throwErrorAt(state.source, state.position, message, state.filename); } +function finalizeCollection(state, position, tag, carrier) { + try { + return tag.finalize(carrier); + } catch (error3) { + if (error3 instanceof YAMLException) throw error3; + throwErrorAt(state.source, position, error3 instanceof Error ? error3.message : String(error3), state.filename); + } +} function lookupTag(exact, prefix, tagName) { const exactTag = exact[tagName]; if (exactTag) return exactTag; @@ -146567,8 +142508,9 @@ function constructScalar(state, event) { const collectionTagDef = lookupTag(state.schema.exact.mapping, state.schema.prefix.mapping, tagName) ?? lookupTag(state.schema.exact.sequence, state.schema.prefix.sequence, tagName); if (collectionTagDef) { if (source !== "") throwError$1(state, `cannot resolve a node with !<${tagName}> explicit tag`); + const carrier = collectionTagDef.create(tagName); return { - value: collectionTagDef.create(tagName), + value: collectionTagDef.carrierIsResult ? carrier : finalizeCollection(state, state.position, collectionTagDef, carrier), tag: collectionTagDef }; } @@ -146654,11 +142596,17 @@ function addValue(state, value, tag) { frame.hasKey = true; } } -function storeAnchor(state, event, value, tag) { - if (event.anchorStart !== NO_RANGE$2) state.anchors.set(state.source.slice(event.anchorStart, event.anchorEnd), { - value, - tag - }); +function storeAnchor(state, event, value, tag, isValueFinal) { + if (event.anchorStart !== NO_RANGE$2) { + const anchor = { + value, + tag, + isValueFinal + }; + state.anchors.set(state.source.slice(event.anchorStart, event.anchorEnd), anchor); + return anchor; + } + return null; } function constructFromEvents(events, options) { const state = { @@ -146689,14 +142637,14 @@ function constructFromEvents(events, options) { break; case 4: { const { value, tag } = constructScalar(state, event); - storeAnchor(state, event, value, tag); + storeAnchor(state, event, value, tag, true); addValue(state, value, tag); break; } case 2: { const definition = collectionTag(state, event, state.schema.exact.sequence, state.schema.prefix.sequence, "tag:yaml.org,2002:seq", "sequence"); const value = definition.tag.create(definition.tagName); - storeAnchor(state, event, value, definition.tag); + const anchor = storeAnchor(state, event, value, definition.tag, definition.tag.carrierIsResult); const parent = state.frames[state.frames.length - 1]; const merge2 = parent !== void 0 && parent.kind === "mapping" && parent.hasKey && parent.key === MERGE_KEY; state.frames.push({ @@ -146704,6 +142652,7 @@ function constructFromEvents(events, options) { position: state.position, value, tag: definition.tag, + anchor, index: 0, merge: merge2 }); @@ -146712,12 +142661,13 @@ function constructFromEvents(events, options) { case 3: { const definition = collectionTag(state, event, state.schema.exact.mapping, state.schema.prefix.mapping, "tag:yaml.org,2002:map", "mapping"); const value = definition.tag.create(definition.tagName); - storeAnchor(state, event, value, definition.tag); + const anchor = storeAnchor(state, event, value, definition.tag, definition.tag.carrierIsResult); state.frames.push({ kind: "mapping", position: state.position, value, tag: definition.tag, + anchor, key: void 0, keyPosition: state.position, hasKey: false, @@ -146729,13 +142679,21 @@ function constructFromEvents(events, options) { const name = state.source.slice(event.anchorStart, event.anchorEnd); const anchor = state.anchors.get(name); if (!anchor) throwError$1(state, `unidentified alias "${name}"`); + if (!anchor.isValueFinal) throwError$1(state, `recursive alias "${name}" is not supported for tag ${anchor.tag.tagName} because it uses finalize()`); addValue(state, anchor.value, anchor.tag); break; } case 6: { const frame = state.frames.pop(); if (frame.kind === "document") state.documents.push(frame.value); - else addValue(state, frame.value, frame.tag); + else { + const value = frame.tag.carrierIsResult ? frame.value : finalizeCollection(state, frame.position, frame.tag, frame.value); + if (frame.anchor) { + frame.anchor.value = value; + frame.anchor.isValueFinal = true; + } + addValue(state, value, frame.tag); + } break; } } @@ -147805,7 +143763,8 @@ var DEFAULT_PRESENTER_OPTIONS = { flowSkipCommaSpace: false, flowSkipColonSpace: false, quoteFlowKeys: false, - quoteStyle: "auto", + quoteStyle: "single", + forceQuotes: false, tagBeforeAnchor: false }; function nodeTagShort(node) { @@ -147920,9 +143879,8 @@ var STYLE_SINGLE = 2; var STYLE_LITERAL = 3; var STYLE_FOLDED = 4; var STYLE_DOUBLE = 5; -function chooseScalarStyle(state, string2, layout, singleLineOnly, inblock) { +function chooseScalarStyle(state, string2, layout, singleLineOnly, forceQuote, inblock) { const { blockIndent, lineWidth } = layout; - const forceQuote = state.quoteStyle !== "auto"; let i; let char = 0; let prevChar = -1; @@ -147984,11 +143942,11 @@ function resolveScalarStyle(state, node, layout, iskey, inblock) { } const string2 = node.value; if (string2.length === 0) { - if (state.quoteStyle === "auto" && (node.style.tagged || resolveImplicitTag(state, string2) === node.tag)) return STYLE_PLAIN; + if (node.style.tagged || resolveImplicitTag(state, string2) === node.tag) return STYLE_PLAIN; return state.quoteStyle === "double" ? STYLE_DOUBLE : STYLE_SINGLE; } - const style = chooseScalarStyle(state, string2, layout, singleLineOnly, inblock); - if (style === STYLE_PLAIN && !node.style.tagged && resolveImplicitTag(state, string2) !== node.tag) return STYLE_SINGLE; + const style = chooseScalarStyle(state, string2, layout, singleLineOnly, state.forceQuotes && !iskey, inblock); + if (style === STYLE_PLAIN && !node.style.tagged && resolveImplicitTag(state, string2) !== node.tag) return state.quoteStyle === "double" ? STYLE_DOUBLE : STYLE_SINGLE; return style; } function blockHeader(string2, indentPerLevel) { @@ -148108,7 +144066,7 @@ function writeFlowMapping(state, level, node) { for (const { key, value } of items) { let pairBuffer = ""; if (result !== "") pairBuffer += `,${!state.flowSkipCommaSpace ? " " : ""}`; - const keyText = writeNode(state, level, key, {}); + const keyText = writeNode(state, level, key, { iskey: true }); const explicitPair = keyText.length > 1024; if (explicitPair) pairBuffer += "? "; else if (state.quoteFlowKeys) pairBuffer += '"'; @@ -149044,7 +145002,7 @@ function getDiffRangesJsonFilePath() { return path2.join(getTemporaryDirectory(), PR_DIFF_RANGE_JSON_FILENAME); } function getActionVersion() { - return "4.36.3"; + return "4.36.4"; } function getWorkflowEventName() { return getRequiredEnvParam("GITHUB_EVENT_NAME" /* GITHUB_EVENT_NAME */); @@ -149320,13 +145278,53 @@ function fixCodeQualityCategory(logger, category) { return category; } -// src/feature-flags.ts -var fs5 = __toESM(require("fs")); -var path5 = __toESM(require("path")); -var semver4 = __toESM(require_semver2()); +// src/logging.ts +var core4 = __toESM(require_core()); +function getActionsLogger() { + return { + debug: core4.debug, + info: core4.info, + warning: core4.warning, + error: core4.error, + isDebug: core4.isDebug, + startGroup: core4.startGroup, + endGroup: core4.endGroup + }; +} +function withGroup(groupName, f) { + core4.startGroup(groupName); + try { + return f(); + } finally { + core4.endGroup(); + } +} +async function withGroupAsync(groupName, f) { + core4.startGroup(groupName); + try { + return await f(); + } finally { + core4.endGroup(); + } +} +function formatDuration(durationMs) { + if (durationMs < 1e3) { + return `${durationMs}ms`; + } + if (durationMs < 60 * 1e3) { + return `${(durationMs / 1e3).toFixed(1)}s`; + } + const minutes = Math.floor(durationMs / (60 * 1e3)); + const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); + return `${minutes}m${seconds}s`; +} + +// src/status-report.ts +var os3 = __toESM(require("os")); +var core7 = __toESM(require_core()); // src/api-client.ts -var core4 = __toESM(require_core()); +var core5 = __toESM(require_core()); var githubUtils = __toESM(require_utils4()); // node_modules/@octokit/plugin-retry/dist-bundle/index.js @@ -149439,10 +145437,10 @@ function createApiClientWithDetails(apiDetails, { allowExternal = false } = {}) baseUrl: apiDetails.apiURL, userAgent: `CodeQL-Action/${getActionVersion()}`, log: { - debug: core4.debug, - info: core4.info, - warn: core4.warning, - error: core4.error + debug: core5.debug, + info: core5.info, + warn: core5.warning, + error: core5.error }, retry: { doNotRetry: DO_NOT_RETRY_STATUSES @@ -149523,7 +145521,7 @@ async function getAnalysisKey() { const workflowPath = await getWorkflowRelativePath(); const jobName = getRequiredEnvParam("GITHUB_JOB"); analysisKey = `${workflowPath}:${jobName}`; - core4.exportVariable("CODEQL_ACTION_ANALYSIS_KEY" /* ANALYSIS_KEY */, analysisKey); + core5.exportVariable("CODEQL_ACTION_ANALYSIS_KEY" /* ANALYSIS_KEY */, analysisKey); return analysisKey; } async function getAutomationID() { @@ -149575,7 +145573,8 @@ function isEnablementError(msg) { return [ /Code Security must be enabled/i, /Advanced Security must be enabled/i, - /Code Scanning is not enabled/i + /Code Scanning is not enabled/i, + /Code Quality is not enabled/i ].some((pattern) => pattern.test(msg)); } function getFeatureEnablementError(message) { @@ -149609,19 +145608,28 @@ function wrapApiConfigurationError(e) { return e; } -// src/defaults.json -var bundleVersion = "codeql-bundle-v2.25.6"; -var cliVersion = "2.25.6"; - -// src/overlay/index.ts -var fs4 = __toESM(require("fs")); -var path4 = __toESM(require("path")); +// src/config/pack-registries.ts +function parseRegistries(registriesInput) { + try { + return registriesInput ? load(registriesInput) : void 0; + } catch { + throw new ConfigurationError( + "Invalid registries input. Must be a YAML string." + ); + } +} +function parseRegistriesWithoutCredentials(registriesInput) { + return parseRegistries(registriesInput)?.map((r) => { + const { url: url2, packages, kind } = r; + return { url: url2, packages, kind }; + }); +} // src/git-utils.ts var fs3 = __toESM(require("fs")); var os2 = __toESM(require("os")); var path3 = __toESM(require("path")); -var core5 = __toESM(require_core()); +var core6 = __toESM(require_core()); var toolrunner2 = __toESM(require_toolrunner()); var io3 = __toESM(require_io()); var semver2 = __toESM(require_semver2()); @@ -149652,7 +145660,7 @@ async function getGitVersionOrThrow() { var runGitCommand = async function(workingDirectory, args, customErrorMessage, options) { let stdout = ""; let stderr = ""; - core5.debug(`Running git command: git ${args.join(" ")}`); + core6.debug(`Running git command: git ${args.join(" ")}`); try { await new toolrunner2.ToolRunner(await io3.which("git", true), args, { silent: true, @@ -149673,7 +145681,7 @@ var runGitCommand = async function(workingDirectory, args, customErrorMessage, o if (stderr.includes("not a git repository")) { reason = "The checkout path provided to the action does not appear to be a git repository."; } - core5.info(`git call failed. ${customErrorMessage} Error: ${reason}`); + core6.info(`git call failed. ${customErrorMessage} Error: ${reason}`); throw error3; } }; @@ -149836,7 +145844,7 @@ async function getRef() { ) !== head; if (hasChangedRef) { const newRef = ref.replace(pull_ref_regex, "refs/pull/$1/head"); - core5.debug( + core6.debug( `No longer on merge commit, rewriting ref from ${ref} to ${newRef}.` ); return newRef; @@ -149887,7 +145895,321 @@ async function getGeneratedFiles(workingDirectory) { return generatedFiles; } +// src/status-report.ts +function getDisplayActionName(actionName) { + if (actionName === "finish" /* Analyze */) { + return "analyze"; + } + return actionName; +} +function isFirstPartyAnalysis(actionName) { + if (actionName !== "upload-sarif" /* UploadSarif */) { + return true; + } + return process.env["CODEQL_ACTION_INIT_HAS_RUN" /* INIT_ACTION_HAS_RUN */] === "true"; +} +function isThirdPartyAnalysis(actionName) { + return !isFirstPartyAnalysis(actionName); +} +var JobStatus = /* @__PURE__ */ ((JobStatus2) => { + JobStatus2["UnknownStatus"] = "JOB_STATUS_UNKNOWN"; + JobStatus2["SuccessStatus"] = "JOB_STATUS_SUCCESS"; + JobStatus2["FailureStatus"] = "JOB_STATUS_FAILURE"; + JobStatus2["ConfigErrorStatus"] = "JOB_STATUS_CONFIGURATION_ERROR"; + return JobStatus2; +})(JobStatus || {}); +function getActionsStatus(error3, otherFailureCause) { + if (error3 || otherFailureCause) { + return error3 instanceof ConfigurationError ? "user-error" : "failure"; + } else { + return "success"; + } +} +function getJobStatusDisplayName(status) { + switch (status) { + case "JOB_STATUS_SUCCESS" /* SuccessStatus */: + return "success"; + case "JOB_STATUS_FAILURE" /* FailureStatus */: + return "failure"; + case "JOB_STATUS_CONFIGURATION_ERROR" /* ConfigErrorStatus */: + return "configuration error"; + case "JOB_STATUS_UNKNOWN" /* UnknownStatus */: + return "unknown"; + default: + assertNever(status); + } +} +function setJobStatusIfUnsuccessful(actionStatus) { + if (actionStatus === "user-error") { + core7.exportVariable( + "CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, + process.env["CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */] ?? "JOB_STATUS_CONFIGURATION_ERROR" /* ConfigErrorStatus */ + ); + } else if (actionStatus === "failure" || actionStatus === "aborted") { + core7.exportVariable( + "CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, + process.env["CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */] ?? "JOB_STATUS_FAILURE" /* FailureStatus */ + ); + } +} +async function createStatusReportBase(actionName, status, actionStartedAt, config, diskInfo, logger, cause, exception) { + try { + const commitOid = getOptionalInput("sha") || process.env["GITHUB_SHA"] || ""; + const ref = await getRef(); + const jobRunUUID = process.env["JOB_RUN_UUID" /* JOB_RUN_UUID */] || ""; + const workflowRunID = getWorkflowRunID(); + const workflowRunAttempt = getWorkflowRunAttempt(); + const workflowName = process.env["GITHUB_WORKFLOW"] || ""; + const jobName = process.env["GITHUB_JOB"] || ""; + const analysis_key = await getAnalysisKey(); + let workflowStartedAt = process.env["CODEQL_WORKFLOW_STARTED_AT" /* WORKFLOW_STARTED_AT */]; + if (workflowStartedAt === void 0) { + workflowStartedAt = actionStartedAt.toISOString(); + core7.exportVariable("CODEQL_WORKFLOW_STARTED_AT" /* WORKFLOW_STARTED_AT */, workflowStartedAt); + } + const runnerOs = getRequiredEnvParam("RUNNER_OS"); + const codeQlCliVersion = getCachedCodeQlVersion(); + const actionRef = process.env["GITHUB_ACTION_REF"] || ""; + const testingEnvironment = getTestingEnvironment(); + if (testingEnvironment) { + core7.exportVariable("CODEQL_ACTION_TESTING_ENVIRONMENT" /* TESTING_ENVIRONMENT */, testingEnvironment); + } + const isSteadyStateDefaultSetupRun = process.env["CODE_SCANNING_IS_STEADY_STATE_DEFAULT_SETUP"] === "true"; + const statusReport = { + action_name: actionName, + action_oid: "unknown", + // TODO decide if it's possible to fill this in + action_ref: actionRef, + action_started_at: actionStartedAt.toISOString(), + action_version: getActionVersion(), + analysis_kinds: config?.analysisKinds?.join(","), + analysis_key, + build_mode: config?.buildMode, + commit_oid: commitOid, + first_party_analysis: isFirstPartyAnalysis(actionName), + job_name: jobName, + job_run_uuid: jobRunUUID, + ref, + runner_os: runnerOs, + started_at: workflowStartedAt, + status, + steady_state_default_setup: isSteadyStateDefaultSetupRun, + testing_environment: testingEnvironment || "", + workflow_name: workflowName, + workflow_run_attempt: workflowRunAttempt, + workflow_run_id: workflowRunID + }; + try { + statusReport.actions_event_name = getWorkflowEventName(); + } catch (e) { + logger.warning( + `Could not determine the workflow event name: ${getErrorMessage(e)}.` + ); + } + if (config) { + statusReport.languages = config.languages?.join(","); + } + if (diskInfo) { + statusReport.runner_available_disk_space_bytes = diskInfo.numAvailableBytes; + statusReport.runner_total_disk_space_bytes = diskInfo.numTotalBytes; + } + if (cause) { + statusReport.cause = cause; + } + if (exception) { + statusReport.exception = exception; + } + if (status === "success" || status === "failure" || status === "aborted" || status === "user-error") { + statusReport.completed_at = (/* @__PURE__ */ new Date()).toISOString(); + } + const matrix = getRequiredInput("matrix"); + if (matrix) { + statusReport.matrix_vars = matrix; + } + if ("RUNNER_ARCH" in process.env) { + statusReport.runner_arch = process.env["RUNNER_ARCH"]; + } + if (!(runnerOs === "Linux" && isSelfHostedRunner())) { + statusReport.runner_os_release = os3.release(); + } + if (codeQlCliVersion !== void 0) { + statusReport.codeql_version = codeQlCliVersion.version; + } + const imageVersion = process.env["ImageVersion"]; + if (imageVersion) { + statusReport.runner_image_version = imageVersion; + } + return statusReport; + } catch (e) { + logger.warning( + `Failed to gather information for telemetry: ${getErrorMessage(e)}. Will skip sending status report.` + ); + if (isInTestMode()) { + throw e; + } + return void 0; + } +} +var OUT_OF_DATE_MSG = "CodeQL Action is out-of-date. Please upgrade to the latest version of `codeql-action`."; +var INCOMPATIBLE_MSG = "CodeQL Action version is incompatible with the API endpoint. Please update to a compatible version of `codeql-action`."; +async function sendStatusReport(statusReport) { + setJobStatusIfUnsuccessful(statusReport.status); + const statusReportJSON = JSON.stringify(statusReport); + core7.debug(`Sending status report: ${statusReportJSON}`); + if (isInTestMode()) { + core7.debug("In test mode. Status reports are not uploaded."); + return; + } + const nwo = getRepositoryNwo(); + const client = getApiClient(); + try { + await client.request( + "PUT /repos/:owner/:repo/code-scanning/analysis/status", + { + owner: nwo.owner, + repo: nwo.repo, + data: statusReportJSON + } + ); + } catch (e) { + const httpError = asHTTPError(e); + if (httpError !== void 0) { + switch (httpError.status) { + case 403: + if (getWorkflowEventName() === "push" && process.env["GITHUB_ACTOR"] === "dependabot[bot]") { + core7.warning( + `Workflows triggered by Dependabot on the "push" event run with read-only access. Uploading CodeQL results requires write access. To use CodeQL with Dependabot, please ensure you are using the "pull_request" event for this workflow and avoid triggering on the "push" event for Dependabot branches. See ${"https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#scanning-on-push" /* SCANNING_ON_PUSH */} for more information on how to configure these events.` + ); + } else { + core7.warning( + `This run of the CodeQL Action does not have permission to access the CodeQL Action API endpoints. This could be because the Action is running on a pull request from a fork. If not, please ensure the workflow has at least the 'security-events: read' permission. Details: ${httpError.message}` + ); + } + return; + case 404: + core7.warning(httpError.message); + return; + case 422: + if (getRequiredEnvParam("GITHUB_SERVER_URL") !== GITHUB_DOTCOM_URL) { + core7.debug(INCOMPATIBLE_MSG); + } else { + core7.debug(OUT_OF_DATE_MSG); + } + return; + } + } + core7.warning( + `An unexpected error occurred when sending a status report: ${getErrorMessage( + e + )}` + ); + } +} +async function createInitWithConfigStatusReport(config, initStatusReport, configFile, totalCacheSize, overlayBaseDatabaseStats, dependencyCachingResults) { + const languages = config.languages.join(","); + const paths = (config.originalUserInput.paths || []).join(","); + const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join( + "," + ); + const disableDefaultQueries = config.originalUserInput["disable-default-queries"] ? languages : ""; + const queries = []; + let queriesInput = getOptionalInput("queries")?.trim(); + if (queriesInput === void 0 || queriesInput.startsWith("+")) { + queries.push( + ...(config.originalUserInput.queries || []).map((q) => q.uses) + ); + } + if (queriesInput !== void 0) { + queriesInput = queriesInput.startsWith("+") ? queriesInput.slice(1) : queriesInput; + queries.push(...queriesInput.split(",")); + } + let packs = {}; + if (Array.isArray(config.computedConfig.packs)) { + packs[config.languages[0]] = config.computedConfig.packs; + } else if (config.computedConfig.packs !== void 0) { + packs = config.computedConfig.packs; + } + return { + ...initStatusReport, + config_file: configFile ?? "", + disable_default_queries: disableDefaultQueries, + paths, + paths_ignore: pathsIgnore, + queries: queries.join(","), + packs: JSON.stringify(packs), + trap_cache_languages: Object.keys(config.trapCaches).join(","), + trap_cache_download_size_bytes: totalCacheSize, + trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime), + overlay_base_database_download_size_bytes: overlayBaseDatabaseStats?.databaseSizeBytes, + overlay_base_database_download_duration_ms: overlayBaseDatabaseStats?.databaseDownloadDurationMs, + dependency_caching_restore_results: dependencyCachingResults, + query_filters: JSON.stringify( + config.originalUserInput["query-filters"] ?? [] + ), + registries: JSON.stringify( + parseRegistriesWithoutCredentials(getOptionalInput("registries")) ?? [] + ) + }; +} +async function sendUnhandledErrorStatusReport(actionName, actionStartedAt, error3, logger) { + try { + const statusReport = await createStatusReportBase( + actionName, + "failure", + actionStartedAt, + void 0, + void 0, + logger, + `Unhandled CodeQL Action error: ${getErrorMessage(error3)}`, + error3 instanceof Error ? error3.stack : void 0 + ); + if (statusReport !== void 0) { + await sendStatusReport(statusReport); + } + } catch (e) { + logger.warning( + `Failed to send the unhandled error status report: ${getErrorMessage(e)}.` + ); + if (isInTestMode()) { + throw e; + } + } +} + +// src/action-common.ts +async function runInActions(action) { + const startedAt = /* @__PURE__ */ new Date(); + const logger = getActionsLogger(); + const env = getEnv(); + const actionsEnv = getActionsEnv(); + try { + await action.run({ + name: action.name, + startedAt, + logger, + env, + actions: actionsEnv + }); + } catch (error3) { + core8.setFailed( + `${getDisplayActionName(action.name)} action failed: ${getErrorMessage(error3)}` + ); + await sendUnhandledErrorStatusReport(action.name, startedAt, error3, logger); + } +} + +// src/feature-flags.ts +var fs5 = __toESM(require("fs")); +var path5 = __toESM(require("path")); +var semver4 = __toESM(require_semver2()); + +// src/defaults.json +var bundleVersion = "codeql-bundle-v2.25.6"; +var cliVersion = "2.25.6"; + // src/overlay/index.ts +var fs4 = __toESM(require("fs")); +var path4 = __toESM(require("path")); var CODEQL_OVERLAY_MINIMUM_VERSION = "2.23.8"; var CODEQL_OVERLAY_MINIMUM_VERSION_CPP = "2.25.0"; var CODEQL_OVERLAY_MINIMUM_VERSION_CSHARP = "2.24.1"; @@ -150032,6 +146354,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_CLEANUP_TRAP_CACHES", minimumVersion: void 0 }, + ["config_file_repository_property" /* ConfigFileRepositoryProperty */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_CONFIG_FILE_REPOSITORY_PROPERTY", + minimumVersion: void 0 + }, ["cpp_dependency_installation_enabled" /* CppDependencyInstallation */]: { defaultValue: false, envVar: "CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES", @@ -150724,12 +147051,12 @@ var import_perf_hooks3 = require("perf_hooks"); var io5 = __toESM(require_io()); // src/autobuild.ts -var core11 = __toESM(require_core()); +var core13 = __toESM(require_core()); // src/codeql.ts var fs15 = __toESM(require("fs")); var path14 = __toESM(require("path")); -var core10 = __toESM(require_core()); +var core12 = __toESM(require_core()); var toolrunner3 = __toESM(require_toolrunner()); // src/cli-errors.ts @@ -150984,11 +147311,11 @@ function wrapCliConfigurationError(cliError) { var fs9 = __toESM(require("fs")); var path10 = __toESM(require("path")); var import_perf_hooks = require("perf_hooks"); -var core8 = __toESM(require_core()); +var core10 = __toESM(require_core()); // src/caching-utils.ts var crypto2 = __toESM(require("crypto")); -var core6 = __toESM(require_core()); +var core9 = __toESM(require_core()); async function getTotalCacheSize(paths, logger, quiet = false) { const sizes = await Promise.all( paths.map((cacheDir2) => tryGetFolderBytes(cacheDir2, logger, quiet)) @@ -151017,7 +147344,7 @@ function getCachingKind(input) { case "restore": return "restore" /* Restore */; default: - core6.warning( + core9.warning( `Unrecognized 'dependency-caching' input: ${input}. Defaulting to 'none'.` ); return "none" /* None */; @@ -151512,7 +147839,11 @@ async function parseRemoteFileAddress(actionState, configFile) { } // src/config/file.ts -function getConfigFileInput(logger, actions, repositoryProperties) { +async function getConfigFileInput({ + logger, + actions, + features +}, repositoryProperties) { const input = actions.getOptionalInput("config-file"); if (input !== void 0) { logger.info(`Using configuration file input from workflow: ${input}`); @@ -151520,10 +147851,19 @@ function getConfigFileInput(logger, actions, repositoryProperties) { } const propertyValue = repositoryProperties["github-codeql-config-file" /* CONFIG_FILE */]; if (propertyValue !== void 0 && propertyValue.trim().length > 0) { - logger.info( - `Using configuration file input from repository property: ${propertyValue}` + const useRepositoryProperty = await features.getValue( + "config_file_repository_property" /* ConfigFileRepositoryProperty */ ); - return propertyValue; + if (useRepositoryProperty) { + logger.info( + `Using configuration file input from repository property: ${propertyValue}` + ); + return propertyValue; + } else { + logger.info( + "Ignoring configuration file input from repository property, because the corresponding feature flag is disabled." + ); + } } return void 0; } @@ -151558,69 +147898,9 @@ async function getRemoteConfig(actionState, configFile, apiDetails) { ); } -// src/config/pack-registries.ts -function parseRegistries(registriesInput) { - try { - return registriesInput ? load(registriesInput) : void 0; - } catch { - throw new ConfigurationError( - "Invalid registries input. Must be a YAML string." - ); - } -} -function parseRegistriesWithoutCredentials(registriesInput) { - return parseRegistries(registriesInput)?.map((r) => { - const { url: url2, packages, kind } = r; - return { url: url2, packages, kind }; - }); -} - // src/diagnostics.ts var import_fs = require("fs"); var import_path = __toESM(require("path")); - -// src/logging.ts -var core7 = __toESM(require_core()); -function getActionsLogger() { - return { - debug: core7.debug, - info: core7.info, - warning: core7.warning, - error: core7.error, - isDebug: core7.isDebug, - startGroup: core7.startGroup, - endGroup: core7.endGroup - }; -} -function withGroup(groupName, f) { - core7.startGroup(groupName); - try { - return f(); - } finally { - core7.endGroup(); - } -} -async function withGroupAsync(groupName, f) { - core7.startGroup(groupName); - try { - return await f(); - } finally { - core7.endGroup(); - } -} -function formatDuration(durationMs) { - if (durationMs < 1e3) { - return `${durationMs}ms`; - } - if (durationMs < 60 * 1e3) { - return `${(durationMs / 1e3).toFixed(1)}s`; - } - const minutes = Math.floor(durationMs / (60 * 1e3)); - const seconds = Math.floor(durationMs % (60 * 1e3) / 1e3); - return `${minutes}m${seconds}s`; -} - -// src/diagnostics.ts var unwrittenDiagnostics = []; var unwrittenDefaultLanguageDiagnostics = []; var diagnosticCounter = 0; @@ -152810,10 +149090,10 @@ async function setCppTrapCachingEnvironmentVariables(config, logger) { ); } else if (config.trapCaches["cpp" /* cpp */]) { logger.info("Enabling TRAP caching for C/C++."); - core8.exportVariable(envVar, "true"); + core10.exportVariable(envVar, "true"); } else { logger.debug(`Disabling TRAP caching for C/C++.`); - core8.exportVariable(envVar, "false"); + core10.exportVariable(envVar, "false"); } } } @@ -153692,10 +149972,10 @@ function inferCompressionMethod(tarPath) { // src/tools-download.ts var fs12 = __toESM(require("fs")); -var os3 = __toESM(require("os")); +var os4 = __toESM(require("os")); var path11 = __toESM(require("path")); var import_perf_hooks2 = require("perf_hooks"); -var core9 = __toESM(require_core()); +var core11 = __toESM(require_core()); var import_http_client = __toESM(require_lib()); var toolcache2 = __toESM(require_tool_cache()); var import_follow_redirects = __toESM(require_follow_redirects()); @@ -153749,10 +150029,10 @@ async function downloadAndExtract(codeqlURL, compressionMethod, dest, authorizat }; } } catch (e) { - core9.warning( + core11.warning( `Failed to download and extract CodeQL bundle using streaming with error: ${getErrorMessage(e)}` ); - core9.warning(`Falling back to downloading the bundle before extracting.`); + core11.warning(`Falling back to downloading the bundle before extracting.`); await cleanUpPath(dest, "CodeQL bundle", logger); } const toolsDownloadStart = import_perf_hooks2.performance.now(); @@ -153830,7 +150110,7 @@ function getToolcacheDirectory(version) { getRequiredEnvParam("RUNNER_TOOL_CACHE"), TOOLCACHE_TOOL_NAME, semver8.clean(version) || version, - os3.arch() || "" + os4.arch() || "" ); } function writeToolcacheMarkerFile(extractedPath, logger) { @@ -154644,22 +150924,19 @@ async function getCodeQLForCmd(cmd, checkVersion) { async getVersion() { let result = getCachedCodeQlVersion(cmd); if (result === void 0) { - const output = await runCli(cmd, ["version", "--format=json"], { - noStreamStdout: true - }); - try { - result = JSON.parse(output); - } catch { - throw Error( - `Invalid JSON output from \`version --format=json\`: ${output}` - ); - } + result = await runCliJson( + cmd, + ["version", "--format=json"], + { + noStreamStdout: true + } + ); cacheCodeQlVersion(cmd, result); } return result; }, async printVersion() { - core10.info(JSON.stringify(await this.getVersion(), null, 2)); + core12.info(JSON.stringify(await this.getVersion(), null, 2)); }, async supportsFeature(feature) { return isSupportedToolsFeature(await this.getVersion(), feature); @@ -154813,23 +151090,18 @@ async function getCodeQLForCmd(cmd, checkVersion) { async resolveLanguages({ filterToLanguagesWithQueries } = { filterToLanguagesWithQueries: false }) { - const codeqlArgs = [ + return runCliJson(cmd, [ "resolve", "languages", "--format=betterjson", "--extractor-options-verbosity=4", "--extractor-include-aliases", + // TODO: Unconditionally include `--filter-to-languages-with-queries` + // once CODEQL_MINIMUM_VERSION is at least v2.23.0 + // — the first version to support this flag. ...filterToLanguagesWithQueries ? ["--filter-to-languages-with-queries"] : [], ...getExtraOptionsFromEnv(["resolve", "languages"]) - ]; - const output = await runCli(cmd, codeqlArgs); - try { - return JSON.parse(output); - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve languages with --format=betterjson: ${e}` - ); - } + ]); }, async resolveBuildEnvironment(workingDir, language) { const codeqlArgs = [ @@ -154842,15 +151114,7 @@ async function getCodeQLForCmd(cmd, checkVersion) { if (workingDir !== void 0) { codeqlArgs.push("--working-dir", workingDir); } - const output = await runCli(cmd, codeqlArgs); - try { - return JSON.parse(output); - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve build-environment: ${e} in -${output}` - ); - } + return await runCliJson(cmd, codeqlArgs); }, async databaseRunQueries(databasePath, flags, queries = []) { const codeqlArgs = [ @@ -155016,14 +151280,9 @@ ${output}` ...getExtraOptionsFromEnv(["resolve", "queries"]), ...queries ]; - const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true }); - try { - return JSON.parse(output); - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve queries --format=startingpacks: ${e}` - ); - } + return await runCliJson(cmd, codeqlArgs, { + noStreamStdout: true + }); }, async resolveDatabase(databasePath) { const codeqlArgs = [ @@ -155033,14 +151292,9 @@ ${output}` "--format=json", ...getExtraOptionsFromEnv(["resolve", "database"]) ]; - const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true }); - try { - return JSON.parse(output); - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve database --format=json: ${e}` - ); - } + return await runCliJson(cmd, codeqlArgs, { + noStreamStdout: true + }); }, async mergeResults(sarifFiles, outputFile, { mergeRunsFromEqualCategory = false @@ -155067,12 +151321,12 @@ ${output}` ); } else if (checkVersion && process.env["CODEQL_ACTION_SUPPRESS_DEPRECATED_SOON_WARNING" /* SUPPRESS_DEPRECATED_SOON_WARNING */] !== "true" && !await codeQlVersionAtLeast(codeql, CODEQL_NEXT_MINIMUM_VERSION)) { const result = await codeql.getVersion(); - core10.warning( + core12.warning( `CodeQL CLI version ${result.version} was discontinued on ${GHES_MOST_RECENT_DEPRECATION_DATE} alongside GitHub Enterprise Server ${GHES_VERSION_MOST_RECENTLY_DEPRECATED} and will not be supported by the next minor release of the CodeQL Action. Please update to CodeQL CLI version ${CODEQL_NEXT_MINIMUM_VERSION} or later. For instance, if you have specified a custom version of the CLI using the 'tools' input to the 'init' Action, you can remove this input to use the default version. Alternatively, if you want to continue using CodeQL CLI version ${result.version}, you can replace 'github/codeql-action/*@v${getActionVersion().split(".")[0]}' by 'github/codeql-action/*@v${getActionVersion()}' in your code scanning workflow to continue using this version of the CodeQL Action.` ); - core10.exportVariable("CODEQL_ACTION_SUPPRESS_DEPRECATED_SOON_WARNING" /* SUPPRESS_DEPRECATED_SOON_WARNING */, "true"); + core12.exportVariable("CODEQL_ACTION_SUPPRESS_DEPRECATED_SOON_WARNING" /* SUPPRESS_DEPRECATED_SOON_WARNING */, "true"); } return codeql; } @@ -155122,6 +151376,16 @@ async function runCli(cmd, args = [], opts = {}) { throw e; } } +async function runCliJson(cmd, args = [], opts = {}) { + const output = await runCli(cmd, args, opts); + try { + return JSON.parse(output); + } catch (e) { + throw Error( + `Unexpected output from codeql ${args.join(" ")}: ${getErrorMessage(e)}` + ); + } +} async function writeCodeScanningConfigFile(config, logger) { const codeScanningConfigFile = getGeneratedCodeScanningConfigPath(config); const augmentedConfig = appendExtraQueryExclusions( @@ -155231,16 +151495,16 @@ async function setupCppAutobuild(codeql, logger) { logger.info( `Disabling ${featureName} as we are on a self-hosted runner.${getWorkflowEventName() !== "dynamic" ? ` To override this, set the ${envVar} environment variable to 'true' in your workflow. See ${"https://docs.github.com/en/actions/learn-github-actions/variables#defining-environment-variables-for-a-single-workflow" /* DEFINE_ENV_VARIABLES */} for more information.` : ""}` ); - core11.exportVariable(envVar, "false"); + core13.exportVariable(envVar, "false"); } else { logger.info( `Enabling ${featureName}. This can be disabled by setting the ${envVar} environment variable to 'false'. See ${"https://docs.github.com/en/actions/learn-github-actions/variables#defining-environment-variables-for-a-single-workflow" /* DEFINE_ENV_VARIABLES */} for more information.` ); - core11.exportVariable(envVar, "true"); + core13.exportVariable(envVar, "true"); } } else { logger.info(`Disabling ${featureName}.`); - core11.exportVariable(envVar, "false"); + core13.exportVariable(envVar, "false"); } } async function runAutobuild(config, language, logger) { @@ -155255,13 +151519,13 @@ async function runAutobuild(config, language, logger) { await codeQL.runAutobuild(config, language); } if (language === "go" /* go */) { - core11.exportVariable("CODEQL_ACTION_DID_AUTOBUILD_GOLANG" /* DID_AUTOBUILD_GOLANG */, "true"); + core13.exportVariable("CODEQL_ACTION_DID_AUTOBUILD_GOLANG" /* DID_AUTOBUILD_GOLANG */, "true"); } logger.endGroup(); } // src/dependency-caching.ts -var os4 = __toESM(require("os")); +var os5 = __toESM(require("os")); var import_path2 = require("path"); var actionsCache4 = __toESM(require_cache4()); var glob = __toESM(require_glob()); @@ -155273,9 +151537,9 @@ function getJavaTempDependencyDir() { async function getJavaDependencyDirs() { return [ // Maven - (0, import_path2.join)(os4.homedir(), ".m2", "repository"), + (0, import_path2.join)(os5.homedir(), ".m2", "repository"), // Gradle - (0, import_path2.join)(os4.homedir(), ".gradle", "caches"), + (0, import_path2.join)(os5.homedir(), ".gradle", "caches"), // CodeQL Java build-mode: none getJavaTempDependencyDir() ]; @@ -155286,7 +151550,7 @@ function getCsharpTempDependencyDir() { async function getCsharpDependencyDirs(codeql, features) { const dirs = [ // Nuget - (0, import_path2.join)(os4.homedir(), ".nuget", "packages") + (0, import_path2.join)(os5.homedir(), ".nuget", "packages") ]; if (await features.getValue("csharp_cache_bmn" /* CsharpCacheBuildModeNone */, codeql)) { dirs.push(getCsharpTempDependencyDir()); @@ -155341,7 +151605,7 @@ var defaultCacheConfigs = { getHashPatterns: getCsharpHashPatterns }, go: { - getDependencyPaths: async () => [(0, import_path2.join)(os4.homedir(), "go", "pkg", "mod")], + getDependencyPaths: async () => [(0, import_path2.join)(os5.homedir(), "go", "pkg", "mod")], getHashPatterns: async () => internal.makePatternCheck(["**/go.sum"]) } }; @@ -155666,7 +151930,7 @@ extensions: `; let data = ranges.map((range2) => { const filename = path15.join(checkoutPath, range2.path).replaceAll(path15.sep, "/"); - return ` - [${dump(filename, { quoteStyle: "single" }).trim()}, ${range2.startLine}, ${range2.endLine}] + return ` - [${dump(filename, { forceQuotes: true, quoteStyle: "single" }).trim()}, ${range2.startLine}, ${range2.endLine}] `; }).join(""); if (!data) { @@ -156006,8 +152270,48 @@ async function cleanupAndUploadDatabases(repositoryNwo, codeql, config, apiDetai }); } } + if (shouldUploadOverlayBase && !config.debugMode) { + await withGroupAsync( + "Measuring database size at the clear cleanup level", + () => recordClearCleanupSizes(codeql, config, reports, logger) + ); + } return reports; } +async function recordClearCleanupSizes(codeql, config, reports, logger) { + const startTime = performance.now(); + try { + await codeql.databaseCleanupCluster(config, "clear" /* Clear */); + } catch (e) { + logger.warning( + `Failed to clean up databases at the '${"clear" /* Clear */}' level for size measurement: ${getErrorMessage(e)}` + ); + return; + } + for (const language of config.languages) { + const report = reports.find((r) => r.language === language); + if (report === void 0) { + continue; + } + try { + const bundledDb = await bundleDb(config, language, codeql, language, { + includeDiagnostics: false + }); + report.clear_cleanup_zipped_size_bytes = fs17.statSync(bundledDb).size; + logger.debug( + `Database for ${language} is ${report.clear_cleanup_zipped_size_bytes} bytes zipped at the '${"clear" /* Clear */}' cleanup level (vs. ${report.zipped_upload_size_bytes ?? "unknown"} bytes at the '${"overlay" /* Overlay */}' level).` + ); + } catch (e) { + logger.warning( + `Failed to measure the '${"clear" /* Clear */}' cleanup database size for ${language}: ${getErrorMessage(e)}` + ); + } + } + const durationMs = performance.now() - startTime; + for (const report of reports) { + report.clear_cleanup_measurement_duration_ms = durationMs; + } +} async function uploadBundledDatabase(repositoryNwo, language, commitOid, bundledDb, bundledDbSize, apiDetails) { const client = getApiClient(); const uploadsUrl = new URL(parseGitHubUrl(apiDetails.url)); @@ -156046,283 +152350,6 @@ async function uploadBundledDatabase(repositoryNwo, language, commitOid, bundled } } -// src/status-report.ts -var os5 = __toESM(require("os")); -var core12 = __toESM(require_core()); -function isFirstPartyAnalysis(actionName) { - if (actionName !== "upload-sarif" /* UploadSarif */) { - return true; - } - return process.env["CODEQL_ACTION_INIT_HAS_RUN" /* INIT_ACTION_HAS_RUN */] === "true"; -} -function isThirdPartyAnalysis(actionName) { - return !isFirstPartyAnalysis(actionName); -} -var JobStatus = /* @__PURE__ */ ((JobStatus2) => { - JobStatus2["UnknownStatus"] = "JOB_STATUS_UNKNOWN"; - JobStatus2["SuccessStatus"] = "JOB_STATUS_SUCCESS"; - JobStatus2["FailureStatus"] = "JOB_STATUS_FAILURE"; - JobStatus2["ConfigErrorStatus"] = "JOB_STATUS_CONFIGURATION_ERROR"; - return JobStatus2; -})(JobStatus || {}); -function getActionsStatus(error3, otherFailureCause) { - if (error3 || otherFailureCause) { - return error3 instanceof ConfigurationError ? "user-error" : "failure"; - } else { - return "success"; - } -} -function getJobStatusDisplayName(status) { - switch (status) { - case "JOB_STATUS_SUCCESS" /* SuccessStatus */: - return "success"; - case "JOB_STATUS_FAILURE" /* FailureStatus */: - return "failure"; - case "JOB_STATUS_CONFIGURATION_ERROR" /* ConfigErrorStatus */: - return "configuration error"; - case "JOB_STATUS_UNKNOWN" /* UnknownStatus */: - return "unknown"; - default: - assertNever(status); - } -} -function setJobStatusIfUnsuccessful(actionStatus) { - if (actionStatus === "user-error") { - core12.exportVariable( - "CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, - process.env["CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */] ?? "JOB_STATUS_CONFIGURATION_ERROR" /* ConfigErrorStatus */ - ); - } else if (actionStatus === "failure" || actionStatus === "aborted") { - core12.exportVariable( - "CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, - process.env["CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */] ?? "JOB_STATUS_FAILURE" /* FailureStatus */ - ); - } -} -async function createStatusReportBase(actionName, status, actionStartedAt, config, diskInfo, logger, cause, exception) { - try { - const commitOid = getOptionalInput("sha") || process.env["GITHUB_SHA"] || ""; - const ref = await getRef(); - const jobRunUUID = process.env["JOB_RUN_UUID" /* JOB_RUN_UUID */] || ""; - const workflowRunID = getWorkflowRunID(); - const workflowRunAttempt = getWorkflowRunAttempt(); - const workflowName = process.env["GITHUB_WORKFLOW"] || ""; - const jobName = process.env["GITHUB_JOB"] || ""; - const analysis_key = await getAnalysisKey(); - let workflowStartedAt = process.env["CODEQL_WORKFLOW_STARTED_AT" /* WORKFLOW_STARTED_AT */]; - if (workflowStartedAt === void 0) { - workflowStartedAt = actionStartedAt.toISOString(); - core12.exportVariable("CODEQL_WORKFLOW_STARTED_AT" /* WORKFLOW_STARTED_AT */, workflowStartedAt); - } - const runnerOs = getRequiredEnvParam("RUNNER_OS"); - const codeQlCliVersion = getCachedCodeQlVersion(); - const actionRef = process.env["GITHUB_ACTION_REF"] || ""; - const testingEnvironment = getTestingEnvironment(); - if (testingEnvironment) { - core12.exportVariable("CODEQL_ACTION_TESTING_ENVIRONMENT" /* TESTING_ENVIRONMENT */, testingEnvironment); - } - const isSteadyStateDefaultSetupRun = process.env["CODE_SCANNING_IS_STEADY_STATE_DEFAULT_SETUP"] === "true"; - const statusReport = { - action_name: actionName, - action_oid: "unknown", - // TODO decide if it's possible to fill this in - action_ref: actionRef, - action_started_at: actionStartedAt.toISOString(), - action_version: getActionVersion(), - analysis_kinds: config?.analysisKinds?.join(","), - analysis_key, - build_mode: config?.buildMode, - commit_oid: commitOid, - first_party_analysis: isFirstPartyAnalysis(actionName), - job_name: jobName, - job_run_uuid: jobRunUUID, - ref, - runner_os: runnerOs, - started_at: workflowStartedAt, - status, - steady_state_default_setup: isSteadyStateDefaultSetupRun, - testing_environment: testingEnvironment || "", - workflow_name: workflowName, - workflow_run_attempt: workflowRunAttempt, - workflow_run_id: workflowRunID - }; - try { - statusReport.actions_event_name = getWorkflowEventName(); - } catch (e) { - logger.warning( - `Could not determine the workflow event name: ${getErrorMessage(e)}.` - ); - } - if (config) { - statusReport.languages = config.languages?.join(","); - } - if (diskInfo) { - statusReport.runner_available_disk_space_bytes = diskInfo.numAvailableBytes; - statusReport.runner_total_disk_space_bytes = diskInfo.numTotalBytes; - } - if (cause) { - statusReport.cause = cause; - } - if (exception) { - statusReport.exception = exception; - } - if (status === "success" || status === "failure" || status === "aborted" || status === "user-error") { - statusReport.completed_at = (/* @__PURE__ */ new Date()).toISOString(); - } - const matrix = getRequiredInput("matrix"); - if (matrix) { - statusReport.matrix_vars = matrix; - } - if ("RUNNER_ARCH" in process.env) { - statusReport.runner_arch = process.env["RUNNER_ARCH"]; - } - if (!(runnerOs === "Linux" && isSelfHostedRunner())) { - statusReport.runner_os_release = os5.release(); - } - if (codeQlCliVersion !== void 0) { - statusReport.codeql_version = codeQlCliVersion.version; - } - const imageVersion = process.env["ImageVersion"]; - if (imageVersion) { - statusReport.runner_image_version = imageVersion; - } - return statusReport; - } catch (e) { - logger.warning( - `Failed to gather information for telemetry: ${getErrorMessage(e)}. Will skip sending status report.` - ); - if (isInTestMode()) { - throw e; - } - return void 0; - } -} -var OUT_OF_DATE_MSG = "CodeQL Action is out-of-date. Please upgrade to the latest version of `codeql-action`."; -var INCOMPATIBLE_MSG = "CodeQL Action version is incompatible with the API endpoint. Please update to a compatible version of `codeql-action`."; -async function sendStatusReport(statusReport) { - setJobStatusIfUnsuccessful(statusReport.status); - const statusReportJSON = JSON.stringify(statusReport); - core12.debug(`Sending status report: ${statusReportJSON}`); - if (isInTestMode()) { - core12.debug("In test mode. Status reports are not uploaded."); - return; - } - const nwo = getRepositoryNwo(); - const client = getApiClient(); - try { - await client.request( - "PUT /repos/:owner/:repo/code-scanning/analysis/status", - { - owner: nwo.owner, - repo: nwo.repo, - data: statusReportJSON - } - ); - } catch (e) { - const httpError = asHTTPError(e); - if (httpError !== void 0) { - switch (httpError.status) { - case 403: - if (getWorkflowEventName() === "push" && process.env["GITHUB_ACTOR"] === "dependabot[bot]") { - core12.warning( - `Workflows triggered by Dependabot on the "push" event run with read-only access. Uploading CodeQL results requires write access. To use CodeQL with Dependabot, please ensure you are using the "pull_request" event for this workflow and avoid triggering on the "push" event for Dependabot branches. See ${"https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#scanning-on-push" /* SCANNING_ON_PUSH */} for more information on how to configure these events.` - ); - } else { - core12.warning( - `This run of the CodeQL Action does not have permission to access the CodeQL Action API endpoints. This could be because the Action is running on a pull request from a fork. If not, please ensure the workflow has at least the 'security-events: read' permission. Details: ${httpError.message}` - ); - } - return; - case 404: - core12.warning(httpError.message); - return; - case 422: - if (getRequiredEnvParam("GITHUB_SERVER_URL") !== GITHUB_DOTCOM_URL) { - core12.debug(INCOMPATIBLE_MSG); - } else { - core12.debug(OUT_OF_DATE_MSG); - } - return; - } - } - core12.warning( - `An unexpected error occurred when sending a status report: ${getErrorMessage( - e - )}` - ); - } -} -async function createInitWithConfigStatusReport(config, initStatusReport, configFile, totalCacheSize, overlayBaseDatabaseStats, dependencyCachingResults) { - const languages = config.languages.join(","); - const paths = (config.originalUserInput.paths || []).join(","); - const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join( - "," - ); - const disableDefaultQueries = config.originalUserInput["disable-default-queries"] ? languages : ""; - const queries = []; - let queriesInput = getOptionalInput("queries")?.trim(); - if (queriesInput === void 0 || queriesInput.startsWith("+")) { - queries.push( - ...(config.originalUserInput.queries || []).map((q) => q.uses) - ); - } - if (queriesInput !== void 0) { - queriesInput = queriesInput.startsWith("+") ? queriesInput.slice(1) : queriesInput; - queries.push(...queriesInput.split(",")); - } - let packs = {}; - if (Array.isArray(config.computedConfig.packs)) { - packs[config.languages[0]] = config.computedConfig.packs; - } else if (config.computedConfig.packs !== void 0) { - packs = config.computedConfig.packs; - } - return { - ...initStatusReport, - config_file: configFile ?? "", - disable_default_queries: disableDefaultQueries, - paths, - paths_ignore: pathsIgnore, - queries: queries.join(","), - packs: JSON.stringify(packs), - trap_cache_languages: Object.keys(config.trapCaches).join(","), - trap_cache_download_size_bytes: totalCacheSize, - trap_cache_download_duration_ms: Math.round(config.trapCacheDownloadTime), - overlay_base_database_download_size_bytes: overlayBaseDatabaseStats?.databaseSizeBytes, - overlay_base_database_download_duration_ms: overlayBaseDatabaseStats?.databaseDownloadDurationMs, - dependency_caching_restore_results: dependencyCachingResults, - query_filters: JSON.stringify( - config.originalUserInput["query-filters"] ?? [] - ), - registries: JSON.stringify( - parseRegistriesWithoutCredentials(getOptionalInput("registries")) ?? [] - ) - }; -} -async function sendUnhandledErrorStatusReport(actionName, actionStartedAt, error3, logger) { - try { - const statusReport = await createStatusReportBase( - actionName, - "failure", - actionStartedAt, - void 0, - void 0, - logger, - `Unhandled CodeQL Action error: ${getErrorMessage(error3)}`, - error3 instanceof Error ? error3.stack : void 0 - ); - if (statusReport !== void 0) { - await sendStatusReport(statusReport); - } - } catch (e) { - logger.warning( - `Failed to send the unhandled error status report: ${getErrorMessage(e)}.` - ); - if (isInTestMode()) { - throw e; - } - } -} - // src/upload-lib.ts var upload_lib_exports = {}; __export(upload_lib_exports, { @@ -156349,7 +152376,7 @@ var fs21 = __toESM(require("fs")); var path18 = __toESM(require("path")); var url = __toESM(require("url")); var import_zlib = __toESM(require("zlib")); -var core14 = __toESM(require_core()); +var core15 = __toESM(require_core()); var jsonschema2 = __toESM(require_lib2()); // src/fingerprints.ts @@ -157477,7 +153504,7 @@ async function addFingerprints(sarifLog, sourceRoot, logger) { // src/init.ts var fs19 = __toESM(require("fs")); var path17 = __toESM(require("path")); -var core13 = __toESM(require_core()); +var core14 = __toESM(require_core()); var toolrunner4 = __toESM(require_toolrunner()); var github2 = __toESM(require_github()); var io6 = __toESM(require_io()); @@ -157707,7 +153734,7 @@ To opt out of this change, switch to an advanced setup workflow and ${envVarOptO To opt out of this change, ${envVarOptOut}`; } logger.warning(message); - core13.exportVariable("CODEQL_ACTION_DID_LOG_FILE_COVERAGE_ON_PRS_DEPRECATION" /* DID_LOG_FILE_COVERAGE_ON_PRS_DEPRECATION */, "true"); + core14.exportVariable("CODEQL_ACTION_DID_LOG_FILE_COVERAGE_ON_PRS_DEPRECATION" /* DID_LOG_FILE_COVERAGE_ON_PRS_DEPRECATION */, "true"); } // src/sarif/index.ts @@ -157821,7 +153848,7 @@ async function combineSarifFilesUsingCLI(sarifFiles, gitHubVersion, features, lo logger.warning( `Uploading multiple SARIF runs with the same category is deprecated ${deprecationWarningMessage}. Please update your workflow to upload a single run per category. ${deprecationMoreInformationMessage}` ); - core14.exportVariable("CODEQL_MERGE_SARIF_DEPRECATION_WARNING", "true"); + core15.exportVariable("CODEQL_MERGE_SARIF_DEPRECATION_WARNING", "true"); } return combineSarifFiles(sarifFiles, logger); } @@ -157922,13 +153949,13 @@ async function uploadPayload(payload, repositoryNwo, logger, analysis) { if (httpError !== void 0) { switch (httpError.status) { case 403: - core14.warning(httpError.message || GENERIC_403_MSG); + core15.warning(httpError.message || GENERIC_403_MSG); break; case 404: - core14.warning(httpError.message || GENERIC_404_MSG); + core15.warning(httpError.message || GENERIC_404_MSG); break; default: - core14.warning(httpError.message); + core15.warning(httpError.message); break; } } @@ -158366,7 +154393,7 @@ function validateUniqueCategory(sarifLog, sentinelPrefix) { `Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job per tool/category. The easiest fix is to specify a unique value for the \`category\` input. If .runs[].automationDetails.id is specified in the sarif file, that will take precedence over your configured \`category\`. Category: (${id ? id : "none"}) Tool: (${tool ? tool : "none"})` ); } - core14.exportVariable(sentinelEnvVar, sentinelEnvVar); + core15.exportVariable(sentinelEnvVar, sentinelEnvVar); } } function sanitize(str) { @@ -158536,7 +154563,7 @@ async function runAutobuildIfLegacyGoWorkflow(config, logger) { ); await runAutobuild(config, "go" /* go */, logger); } -async function run(startedAt) { +async function run({ startedAt, logger }) { let uploadResults = void 0; let runStats = void 0; let config = void 0; @@ -158546,7 +154573,6 @@ async function run(startedAt) { let didUploadTrapCaches = false; let dependencyCacheResults; let databaseUploadResults = []; - const logger = getActionsLogger(); try { initializeEnvironment(getActionVersion()); persistInputs(); @@ -158585,7 +154611,7 @@ async function run(startedAt) { } const apiDetails = getApiDetails(); const outputDir = getRequiredInput("output"); - core15.exportVariable("CODEQL_ACTION_SARIF_RESULTS_OUTPUT_DIR" /* SARIF_RESULTS_OUTPUT_DIR */, outputDir); + core16.exportVariable("CODEQL_ACTION_SARIF_RESULTS_OUTPUT_DIR" /* SARIF_RESULTS_OUTPUT_DIR */, outputDir); const threads = getThreadsFlag( getOptionalInput("threads") || process.env["CODEQL_THREADS"], logger @@ -158637,8 +154663,8 @@ async function run(startedAt) { for (const language of config.languages) { dbLocations[language] = getCodeQLDatabasePath(config, language); } - core15.setOutput("db-locations", dbLocations); - core15.setOutput("sarif-output", import_path4.default.resolve(outputDir)); + core16.setOutput("db-locations", dbLocations); + core16.setOutput("sarif-output", import_path4.default.resolve(outputDir)); const uploadKind = getUploadValue( getOptionalInput("upload") ); @@ -158655,13 +154681,13 @@ async function run(startedAt) { getOptionalInput("post-processed-sarif-path") ); if (uploadResults["code-scanning" /* CodeScanning */] !== void 0) { - core15.setOutput( + core16.setOutput( "sarif-id", uploadResults["code-scanning" /* CodeScanning */].sarifID ); } if (uploadResults["code-quality" /* CodeQuality */] !== void 0) { - core15.setOutput( + core16.setOutput( "quality-sarif-id", uploadResults["code-quality" /* CodeQuality */].sarifID ); @@ -158704,15 +154730,15 @@ async function run(startedAt) { ); } if (getOptionalInput("expect-error") === "true") { - core15.setFailed( + core16.setFailed( `expect-error input was set to true but no error was thrown.` ); } - core15.exportVariable("CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */, "true"); + core16.exportVariable("CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */, "true"); } catch (unwrappedError) { const error3 = wrapError(unwrappedError); if (getOptionalInput("expect-error") !== "true" || hasBadExpectErrorInput()) { - core15.setFailed(error3.message); + core16.setFailed(error3.message); } await sendStatusReport2( startedAt, @@ -158776,33 +154802,25 @@ async function run(startedAt) { ); } } +var analyze = { + name: "finish" /* Analyze */, + run +}; async function runWrapper() { - const startedAt = /* @__PURE__ */ new Date(); - const logger = getActionsLogger(); - try { - await run(startedAt); - } catch (error3) { - core15.setFailed(`analyze action failed: ${getErrorMessage(error3)}`); - await sendUnhandledErrorStatusReport( - "finish" /* Analyze */, - startedAt, - error3, - logger - ); - } + await runInActions(analyze); await checkForTimeout(); } // src/analyze-action-post.ts var fs26 = __toESM(require("fs")); -var core17 = __toESM(require_core()); +var core18 = __toESM(require_core()); // src/debug-artifacts.ts var fs25 = __toESM(require("fs")); var path22 = __toESM(require("path")); var artifact = __toESM(require_artifact2()); var artifactLegacy = __toESM(require_artifact_client2()); -var core16 = __toESM(require_core()); +var core17 = __toESM(require_core()); // node_modules/archiver/lib/core.js var import_fs2 = require("fs"); @@ -160815,7 +156833,7 @@ var import_async = __toESM(require_async(), 1); var import_path6 = require("path"); // node_modules/archiver/lib/error.js -var import_util31 = __toESM(require("util"), 1); +var import_util32 = __toESM(require("util"), 1); var ERROR_CODES = { ABORTED: "archive was aborted", DIRECTORYDIRPATHREQUIRED: "diretory dirpath argument must be a non-empty string value", @@ -160840,7 +156858,7 @@ function ArchiverError(code, data) { this.code = code; this.data = data; } -import_util31.default.inherits(ArchiverError, Error); +import_util32.default.inherits(ArchiverError, Error); // node_modules/archiver/lib/core.js var import_readable_stream2 = __toESM(require_ours(), 1); @@ -163535,10 +159553,10 @@ function getArtifactSuffix(matrix) { for (const matrixKey of Object.keys(matrixObject).sort()) suffix += `-${matrixObject[matrixKey]}`; } else { - core16.warning("User-specified `matrix` input is not an object."); + core17.warning("User-specified `matrix` input is not an object."); } } catch { - core16.warning( + core17.warning( "Could not parse user-specified `matrix` input into JSON. The debug artifact will not be named with the user's `matrix` input." ); } @@ -163548,7 +159566,7 @@ function getArtifactSuffix(matrix) { async function uploadDebugArtifacts(logger, toUpload, rootDir, artifactName, ghVariant, codeQlVersion) { const uploadSupported = isSafeArtifactUpload(codeQlVersion); if (!uploadSupported) { - core16.info( + core17.info( `Skipping debug artifact upload because the current CLI does not support safe upload. Please upgrade to CLI v${SafeArtifactUploadVersion} or later.` ); return "upload-not-supported"; @@ -163561,7 +159579,7 @@ async function uploadArtifacts(logger, toUpload, rootDir, artifactName, ghVarian } if (isInTestMode()) { await scanArtifactsForTokens(toUpload, logger); - core16.exportVariable("CODEQL_ACTION_ARTIFACT_SCAN_FINISHED", "true"); + core17.exportVariable("CODEQL_ACTION_ARTIFACT_SCAN_FINISHED", "true"); } const suffix = getArtifactSuffix(getOptionalInput("matrix")); const artifactUploader = await getArtifactUploaderClient(logger, ghVariant); @@ -163577,7 +159595,7 @@ async function uploadArtifacts(logger, toUpload, rootDir, artifactName, ghVarian ); return "upload-successful"; } catch (e) { - core16.warning(`Failed to upload debug artifacts: ${e}`); + core17.warning(`Failed to upload debug artifacts: ${e}`); return "upload-failed"; } } @@ -163600,7 +159618,7 @@ async function createPartialDatabaseBundle(config, language) { config.dbLocation, `${config.debugDatabaseName}-${language}-partial.zip` ); - core16.info( + core17.info( `${config.debugDatabaseName}-${language} is not finalized. Uploading partial database bundle at ${databaseBundlePath}...` ); if (fs25.existsSync(databaseBundlePath)) { @@ -163670,14 +159688,14 @@ async function runWrapper2() { } } } catch (error3) { - core17.setFailed( + core18.setFailed( `analyze post-action step failed: ${getErrorMessage(error3)}` ); } } // src/autobuild-action.ts -var core18 = __toESM(require_core()); +var core19 = __toESM(require_core()); async function sendCompletedStatusReport(config, logger, startedAt, allLanguages, failingLanguage, cause) { initializeEnvironment(getActionVersion()); const status = getActionsStatus(cause, failingLanguage); @@ -163700,8 +159718,7 @@ async function sendCompletedStatusReport(config, logger, startedAt, allLanguages await sendStatusReport(statusReport); } } -async function run2(startedAt) { - const logger = getActionsLogger(); +async function run2({ startedAt, logger }) { let config; let currentLanguage; let languages; @@ -163744,7 +159761,7 @@ async function run2(startedAt) { await endTracingForCluster(codeql, config, logger); } catch (unwrappedError) { const error3 = wrapError(unwrappedError); - core18.setFailed( + core19.setFailed( `We were unable to automatically build your code. Please replace the call to the autobuild action with your custom build steps. ${error3.message}` ); await sendCompletedStatusReport( @@ -163757,29 +159774,21 @@ async function run2(startedAt) { ); return; } - core18.exportVariable("CODEQL_ACTION_AUTOBUILD_DID_COMPLETE_SUCCESSFULLY" /* AUTOBUILD_DID_COMPLETE_SUCCESSFULLY */, "true"); + core19.exportVariable("CODEQL_ACTION_AUTOBUILD_DID_COMPLETE_SUCCESSFULLY" /* AUTOBUILD_DID_COMPLETE_SUCCESSFULLY */, "true"); await sendCompletedStatusReport(config, logger, startedAt, languages ?? []); } +var autobuild = { + name: "autobuild" /* Autobuild */, + run: run2 +}; async function runWrapper3() { - const startedAt = /* @__PURE__ */ new Date(); - const logger = getActionsLogger(); - try { - await run2(startedAt); - } catch (error3) { - core18.setFailed(`autobuild action failed. ${getErrorMessage(error3)}`); - await sendUnhandledErrorStatusReport( - "autobuild" /* Autobuild */, - startedAt, - error3, - logger - ); - } + await runInActions(autobuild); } // src/init-action.ts var fs28 = __toESM(require("fs")); var path24 = __toESM(require("path")); -var core20 = __toESM(require_core()); +var core21 = __toESM(require_core()); var github3 = __toESM(require_github()); var io7 = __toESM(require_io()); var semver10 = __toESM(require_semver2()); @@ -163788,7 +159797,7 @@ var semver10 = __toESM(require_semver2()); var fs27 = __toESM(require("fs")); var path23 = __toESM(require("path")); var import_zlib3 = __toESM(require("zlib")); -var core19 = __toESM(require_core()); +var core20 = __toESM(require_core()); function toCodedErrors(errors) { return Object.entries(errors).reduce( (acc, [code, message]) => { @@ -163911,7 +159920,7 @@ async function validateWorkflow(codeql, logger) { } catch (e) { return `error: formatWorkflowErrors() failed: ${String(e)}`; } - core19.warning(message); + core20.warning(message); } return formatWorkflowCause(workflowErrors); } @@ -164040,7 +160049,7 @@ function getCheckoutPathInputOrThrow(workflow, jobName, matrixVars) { } async function checkWorkflow(logger, codeql) { if (!isDynamicWorkflow() && process.env["CODEQL_ACTION_SKIP_WORKFLOW_VALIDATION" /* SKIP_WORKFLOW_VALIDATION */] !== "true") { - core19.startGroup("Validating workflow"); + core20.startGroup("Validating workflow"); const validateWorkflowResult = await internal2.validateWorkflow( codeql, logger @@ -164052,7 +160061,7 @@ async function checkWorkflow(logger, codeql) { `Unable to validate code scanning workflow: ${validateWorkflowResult}` ); } - core19.endGroup(); + core20.endGroup(); } } var internal2 = { @@ -164122,9 +160131,9 @@ async function sendCompletedStatusReport2(startedAt, config, configFile, toolsDo await sendStatusReport({ ...initStatusReport, ...initToolsDownloadFields }); } } -async function run3(startedAt) { - const logger = getActionsLogger(); - const actionsEnv = getActionsEnv(); +async function run3(actionState) { + const startedAt = actionState.startedAt; + const logger = actionState.logger; let apiDetails; let config; let configFile; @@ -164162,9 +160171,13 @@ async function run3(startedAt) { const repositoryProperties = repositoryPropertiesResult.orElse({}); const jobRunUuid = v4_default(); logger.info(`Job run UUID is ${jobRunUuid}.`); - core20.exportVariable("JOB_RUN_UUID" /* JOB_RUN_UUID */, jobRunUuid); - core20.exportVariable("CODEQL_ACTION_INIT_HAS_RUN" /* INIT_ACTION_HAS_RUN */, "true"); - configFile = getConfigFileInput(logger, actionsEnv, repositoryProperties); + core21.exportVariable("JOB_RUN_UUID" /* JOB_RUN_UUID */, jobRunUuid); + core21.exportVariable("CODEQL_ACTION_INIT_HAS_RUN" /* INIT_ACTION_HAS_RUN */, "true"); + const actionStateWithFeatures = { ...actionState, features }; + configFile = await getConfigFileInput( + actionStateWithFeatures, + repositoryProperties + ); sourceRoot = path24.resolve( getRequiredEnvParam("GITHUB_WORKSPACE"), getOptionalInput("source-root") || "" @@ -164220,20 +160233,19 @@ async function run3(startedAt) { ); } if (semver10.lt(actualVer, publicPreview)) { - core20.exportVariable("CODEQL_ENABLE_EXPERIMENTAL_FEATURES" /* EXPERIMENTAL_FEATURES */, "true"); + core21.exportVariable("CODEQL_ENABLE_EXPERIMENTAL_FEATURES" /* EXPERIMENTAL_FEATURES */, "true"); logger.info("Experimental Rust analysis enabled"); } } analysisKinds = await getAnalysisKinds(logger, features); - const debugMode = getOptionalInput("debug") === "true" || core20.isDebug(); + const debugMode = getOptionalInput("debug") === "true" || core21.isDebug(); const fileCoverageResult = await getFileCoverageInformationEnabled( debugMode, codeql, features, repositoryProperties ); - const actionState = { logger, env: getEnv(), features }; - config = await initConfig2(actionState, { + config = await initConfig2(actionStateWithFeatures, { analysisKinds, languagesInput: getOptionalInput("languages"), queriesInput: getOptionalInput("queries"), @@ -164296,7 +160308,7 @@ async function run3(startedAt) { await checkInstallPython311(config.languages, codeql); } catch (unwrappedError) { const error3 = wrapError(unwrappedError); - core20.setFailed(error3.message); + core21.setFailed(error3.message); const statusReportBase = await createStatusReportBase( "init" /* Init */, error3 instanceof ConfigurationError ? "user-error" : "aborted", @@ -164351,8 +160363,8 @@ async function run3(startedAt) { } const goFlags = process.env["GOFLAGS"]; if (goFlags) { - core20.exportVariable("GOFLAGS", goFlags); - core20.warning( + core21.exportVariable("GOFLAGS", goFlags); + core21.warning( "Passing the GOFLAGS env parameter to the init action is deprecated. Please move this to the analyze action." ); } @@ -164371,7 +160383,7 @@ async function run3(startedAt) { "bin" ); fs28.mkdirSync(tempBinPath, { recursive: true }); - core20.addPath(tempBinPath); + core21.addPath(tempBinPath); const goWrapperPath = path24.resolve(tempBinPath, "go"); fs28.writeFileSync( goWrapperPath, @@ -164380,14 +160392,14 @@ async function run3(startedAt) { exec ${goBinaryPath} "$@"` ); fs28.chmodSync(goWrapperPath, "755"); - core20.exportVariable("CODEQL_ACTION_GO_BINARY" /* GO_BINARY_LOCATION */, goWrapperPath); + core21.exportVariable("CODEQL_ACTION_GO_BINARY" /* GO_BINARY_LOCATION */, goWrapperPath); } catch (e) { logger.warning( `Analyzing Go on Linux, but failed to install wrapper script. Tracing custom builds may fail: ${e}` ); } } else { - core20.exportVariable("CODEQL_ACTION_GO_BINARY" /* GO_BINARY_LOCATION */, goBinaryPath); + core21.exportVariable("CODEQL_ACTION_GO_BINARY" /* GO_BINARY_LOCATION */, goBinaryPath); } } catch (e) { logger.warning( @@ -164414,23 +160426,23 @@ exec ${goBinaryPath} "$@"` } } } - core20.exportVariable( + core21.exportVariable( "CODEQL_RAM", process.env["CODEQL_RAM"] || getCodeQLMemoryLimit(getOptionalInput("ram"), logger).toString() ); - core20.exportVariable( + core21.exportVariable( "CODEQL_THREADS", process.env["CODEQL_THREADS"] || getThreadsFlagValue(getOptionalInput("threads"), logger).toString() ); if (await features.getValue("disable_kotlin_analysis_enabled" /* DisableKotlinAnalysisEnabled */)) { - core20.exportVariable("CODEQL_EXTRACTOR_JAVA_AGENT_DISABLE_KOTLIN", "true"); + core21.exportVariable("CODEQL_EXTRACTOR_JAVA_AGENT_DISABLE_KOTLIN", "true"); } if (await features.getValue("force_jgit" /* ForceJGit */)) { - core20.exportVariable("CODEQL_GIT_BACKEND", "jgit"); + core21.exportVariable("CODEQL_GIT_BACKEND", "jgit"); } const kotlinLimitVar = "CODEQL_EXTRACTOR_KOTLIN_OVERRIDE_MAXIMUM_VERSION_LIMIT"; if (await codeQlVersionAtLeast(codeql, "2.20.3") && !await codeQlVersionAtLeast(codeql, "2.20.4")) { - core20.exportVariable(kotlinLimitVar, "2.1.20"); + core21.exportVariable(kotlinLimitVar, "2.1.20"); } if (shouldRestoreCache(config.dependencyCachingEnabled)) { const dependencyCachingResult = await downloadDependencyCaches( @@ -164457,7 +160469,7 @@ exec ${goBinaryPath} "$@"` `${"CODEQL_EXTRACTOR_JAVA_OPTION_MINIMIZE_DEPENDENCY_JARS" /* JAVA_EXTRACTOR_MINIMIZE_DEPENDENCY_JARS */} is already set to '${process.env["CODEQL_EXTRACTOR_JAVA_OPTION_MINIMIZE_DEPENDENCY_JARS" /* JAVA_EXTRACTOR_MINIMIZE_DEPENDENCY_JARS */]}', so the Action will not override it.` ); } else if (await codeQlVersionAtLeast(codeql, CODEQL_VERSION_JAR_MINIMIZATION) && config.dependencyCachingEnabled && config.buildMode === "none" /* None */ && config.languages.includes("java" /* java */)) { - core20.exportVariable( + core21.exportVariable( "CODEQL_EXTRACTOR_JAVA_OPTION_MINIMIZE_DEPENDENCY_JARS" /* JAVA_EXTRACTOR_MINIMIZE_DEPENDENCY_JARS */, "true" ); @@ -164501,23 +160513,23 @@ exec ${goBinaryPath} "$@"` const tracerConfig = await getCombinedTracerConfig(codeql, config); if (tracerConfig !== void 0) { for (const [key, value] of Object.entries(tracerConfig.env)) { - core20.exportVariable(key, value); + core21.exportVariable(key, value); } } if (await features.getValue("java_network_debugging" /* JavaNetworkDebugging */)) { const existingJavaToolOptions = getOptionalEnvVar("JAVA_TOOL_OPTIONS" /* JAVA_TOOL_OPTIONS */) || ""; - core20.exportVariable( + core21.exportVariable( "JAVA_TOOL_OPTIONS" /* JAVA_TOOL_OPTIONS */, `${existingJavaToolOptions} -Djavax.net.debug=all` ); } flushDiagnostics(config); await saveConfig(config, logger); - core20.setOutput("codeql-path", config.codeQLCmd); - core20.setOutput("codeql-version", (await codeql.getVersion()).version); + core21.setOutput("codeql-path", config.codeQLCmd); + core21.setOutput("codeql-version", (await codeql.getVersion()).version); } catch (unwrappedError) { const error3 = wrapError(unwrappedError); - core20.setFailed(error3.message); + core21.setFailed(error3.message); await sendCompletedStatusReport2( startedAt, config, @@ -164579,25 +160591,17 @@ async function recordZstdAvailability(config, zstdAvailability) { ) ); } +var init = { + name: "init" /* Init */, + run: run3 +}; async function runWrapper4() { - const startedAt = /* @__PURE__ */ new Date(); - const logger = getActionsLogger(); - try { - await run3(startedAt); - } catch (error3) { - core20.setFailed(`init action failed: ${getErrorMessage(error3)}`); - await sendUnhandledErrorStatusReport( - "init" /* Init */, - startedAt, - error3, - logger - ); - } + await runInActions(init); await checkForTimeout(); } // src/init-action-post.ts -var core21 = __toESM(require_core()); +var core22 = __toESM(require_core()); // src/init-action-post-helper.ts var fs29 = __toESM(require("fs")); @@ -164945,7 +160949,7 @@ async function run4(startedAt) { } } catch (unwrappedError) { const error3 = wrapError(unwrappedError); - core21.setFailed(error3.message); + core22.setFailed(error3.message); const statusReportBase2 = await createStatusReportBase( "init-post" /* InitPost */, getActionsStatus(error3), @@ -164990,14 +160994,14 @@ function getFinalJobStatus(config) { } let jobStatus; if (process.env["CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */] === "true") { - core21.exportVariable("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, "JOB_STATUS_SUCCESS" /* SuccessStatus */); + core22.exportVariable("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, "JOB_STATUS_SUCCESS" /* SuccessStatus */); jobStatus = "JOB_STATUS_SUCCESS" /* SuccessStatus */; } else if (config !== void 0) { jobStatus = "JOB_STATUS_CONFIGURATION_ERROR" /* ConfigErrorStatus */; } else { jobStatus = "JOB_STATUS_UNKNOWN" /* UnknownStatus */; } - core21.exportVariable("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, jobStatus); + core22.exportVariable("CODEQL_ACTION_JOB_STATUS" /* JOB_STATUS */, jobStatus); return jobStatus; } function getJobStatusFromEnvironment() { @@ -165016,7 +161020,7 @@ async function runWrapper5() { try { await run4(startedAt); } catch (error3) { - core21.setFailed(`init post action failed: ${wrapError(error3).message}`); + core22.setFailed(`init post action failed: ${wrapError(error3).message}`); await sendUnhandledErrorStatusReport( "init-post" /* InitPost */, startedAt, @@ -165027,7 +161031,7 @@ async function runWrapper5() { } // src/resolve-environment-action.ts -var core22 = __toESM(require_core()); +var core23 = __toESM(require_core()); // src/resolve-environment.ts async function runResolveBuildEnvironment(cmd, logger, workingDir, language) { @@ -165074,16 +161078,16 @@ async function run5(startedAt) { workingDirectory, getRequiredInput("language") ); - core22.setOutput(ENVIRONMENT_OUTPUT_NAME, result); + core23.setOutput(ENVIRONMENT_OUTPUT_NAME, result); } catch (unwrappedError) { const error3 = wrapError(unwrappedError); if (error3 instanceof CliError) { - core22.setOutput(ENVIRONMENT_OUTPUT_NAME, {}); + core23.setOutput(ENVIRONMENT_OUTPUT_NAME, {}); logger.warning( `Failed to resolve a build environment suitable for automatically building your code. ${error3.message}` ); } else { - core22.setFailed( + core23.setFailed( `Failed to resolve a build environment suitable for automatically building your code. ${error3.message}` ); const statusReportBase2 = await createStatusReportBase( @@ -165120,7 +161124,7 @@ async function runWrapper6() { try { await run5(startedAt); } catch (error3) { - core22.setFailed( + core23.setFailed( `${"resolve-environment" /* ResolveEnvironment */} action failed: ${getErrorMessage( error3 )}` @@ -165136,7 +161140,7 @@ async function runWrapper6() { } // src/setup-codeql-action.ts -var core23 = __toESM(require_core()); +var core24 = __toESM(require_core()); async function sendCompletedStatusReport3(startedAt, toolsDownloadStatusReport, toolsFeatureFlagsValid, toolsSource, toolsVersion, logger, error3) { const statusReportBase = await createStatusReportBase( "setup-codeql" /* SetupCodeQL */, @@ -165167,8 +161171,10 @@ async function sendCompletedStatusReport3(startedAt, toolsDownloadStatusReport, } await sendStatusReport({ ...initStatusReport, ...initToolsDownloadFields }); } -async function run6(startedAt) { - const logger = getActionsLogger(); +async function run6({ + startedAt, + logger +}) { let codeql; let toolsDownloadStatusReport; let toolsFeatureFlagsValid; @@ -165194,7 +161200,7 @@ async function run6(startedAt) { ); const jobRunUuid = v4_default(); logger.info(`Job run UUID is ${jobRunUuid}.`); - core23.exportVariable("JOB_RUN_UUID" /* JOB_RUN_UUID */, jobRunUuid); + core24.exportVariable("JOB_RUN_UUID" /* JOB_RUN_UUID */, jobRunUuid); const statusReportBase = await createStatusReportBase( "setup-codeql" /* SetupCodeQL */, "starting", @@ -165227,12 +161233,12 @@ async function run6(startedAt) { toolsDownloadStatusReport = initCodeQLResult.toolsDownloadStatusReport; toolsVersion = initCodeQLResult.toolsVersion; toolsSource = initCodeQLResult.toolsSource; - core23.setOutput("codeql-path", codeql.getPath()); - core23.setOutput("codeql-version", (await codeql.getVersion()).version); - core23.exportVariable("CODEQL_ACTION_SETUP_CODEQL_HAS_RUN" /* SETUP_CODEQL_ACTION_HAS_RUN */, "true"); + core24.setOutput("codeql-path", codeql.getPath()); + core24.setOutput("codeql-version", (await codeql.getVersion()).version); + core24.exportVariable("CODEQL_ACTION_SETUP_CODEQL_HAS_RUN" /* SETUP_CODEQL_ACTION_HAS_RUN */, "true"); } catch (unwrappedError) { const error3 = wrapError(unwrappedError); - core23.setFailed(error3.message); + core24.setFailed(error3.message); const statusReportBase = await createStatusReportBase( "setup-codeql" /* SetupCodeQL */, error3 instanceof ConfigurationError ? "user-error" : "failure", @@ -165257,31 +161263,23 @@ async function run6(startedAt) { logger ); } +var setupCodeQL2 = { + name: "setup-codeql" /* SetupCodeQL */, + run: run6 +}; async function runWrapper7() { - const startedAt = /* @__PURE__ */ new Date(); - const logger = getActionsLogger(); - try { - await run6(startedAt); - } catch (error3) { - core23.setFailed(`setup-codeql action failed: ${getErrorMessage(error3)}`); - await sendUnhandledErrorStatusReport( - "setup-codeql" /* SetupCodeQL */, - startedAt, - error3, - logger - ); - } + await runInActions(setupCodeQL2); await checkForTimeout(); } // src/start-proxy-action.ts var import_child_process2 = require("child_process"); var path28 = __toESM(require("path")); -var core26 = __toESM(require_core()); +var core27 = __toESM(require_core()); // src/start-proxy.ts var path26 = __toESM(require("path")); -var core25 = __toESM(require_core()); +var core26 = __toESM(require_core()); var toolcache4 = __toESM(require_tool_cache()); // src/start-proxy/types.ts @@ -165421,7 +161419,7 @@ function getAddressString(address) { } // src/start-proxy/validation.ts -var core24 = __toESM(require_core()); +var core25 = __toESM(require_core()); function cloneCredential(schema, obj) { const result = {}; for (const key of Object.keys(schema)) { @@ -165440,14 +161438,14 @@ function getAuthConfig(config) { } if (isToken(config)) { if (isDefined2(config.token)) { - core24.setSecret(config.token); + core25.setSecret(config.token); } return cloneCredential(tokenSchema, config); } else { let username = void 0; let password = void 0; if ("password" in config && isString(config.password)) { - core24.setSecret(config.password); + core25.setSecret(config.password); password = config.password; } if ("username" in config && isString(config.username)) { @@ -165503,7 +161501,7 @@ function getSafeErrorMessage(error3) { } async function sendFailedStatusReport(logger, startedAt, language, unwrappedError) { const error3 = wrapError(unwrappedError); - core25.setFailed(`start-proxy action failed: ${error3.message}`); + core26.setFailed(`start-proxy action failed: ${error3.message}`); const statusReportMessage = getSafeErrorMessage(error3); const errorStatusReportBase = await createStatusReportBase( "start-proxy" /* StartProxy */, @@ -166072,7 +162070,7 @@ async function run7(startedAt) { persistInputs(); const tempDir = getTemporaryDirectory(); const proxyLogFilePath = path28.resolve(tempDir, "proxy.log"); - core26.saveState("proxy-log-file", proxyLogFilePath); + core27.saveState("proxy-log-file", proxyLogFilePath); const repositoryNwo = getRepositoryNwo(); const gitHubVersion = await getGitHubVersion(); features = initFeatures( @@ -166097,7 +162095,7 @@ async function run7(startedAt) { `Credentials loaded for the following registries: ${credentials.map((c) => credentialToStr(c)).join("\n")}` ); - if (core26.isDebug() || isInTestMode()) { + if (core27.isDebug() || isInTestMode()) { try { await checkProxyEnvironment(logger, language); } catch (err) { @@ -166137,7 +162135,7 @@ async function runWrapper8() { try { await run7(startedAt); } catch (error3) { - core26.setFailed(`start-proxy action failed: ${getErrorMessage(error3)}`); + core27.setFailed(`start-proxy action failed: ${getErrorMessage(error3)}`); await sendUnhandledErrorStatusReport( "start-proxy" /* StartProxy */, startedAt, @@ -166163,7 +162161,7 @@ async function startProxy(binPath, config, logFilePath, logger) { ); subprocess.unref(); if (subprocess.pid) { - core26.saveState("proxy-process-pid", `${subprocess.pid}`); + core27.saveState("proxy-process-pid", `${subprocess.pid}`); } subprocess.on("error", (error3) => { subprocessError = error3; @@ -166182,25 +162180,25 @@ async function startProxy(binPath, config, logFilePath, logger) { throw subprocessError; } logger.info(`Proxy started on ${host}:${port}`); - core26.setOutput("proxy_host", host); - core26.setOutput("proxy_port", port.toString()); - core26.setOutput("proxy_ca_certificate", config.ca.cert); + core27.setOutput("proxy_host", host); + core27.setOutput("proxy_port", port.toString()); + core27.setOutput("proxy_ca_certificate", config.ca.cert); const registry_urls = config.all_credentials.filter((credential) => credential.url !== void 0).map((credential) => ({ type: credential.type, url: credential.url, "replaces-base": credential["replaces-base"] })); - core26.setOutput("proxy_urls", JSON.stringify(registry_urls)); + core27.setOutput("proxy_urls", JSON.stringify(registry_urls)); return { host, port, cert: config.ca.cert, registries: registry_urls }; } // src/start-proxy-action-post.ts -var core27 = __toESM(require_core()); +var core28 = __toESM(require_core()); async function runWrapper9() { const logger = getActionsLogger(); try { restoreInputs(); - const pid = core27.getState("proxy-process-pid"); + const pid = core28.getState("proxy-process-pid"); if (pid) { process.kill(Number(pid)); } @@ -166208,8 +162206,8 @@ async function runWrapper9() { getTemporaryDirectory(), logger ); - if (config?.debugMode || core27.isDebug()) { - const logFilePath = core27.getState("proxy-log-file"); + if (config?.debugMode || core28.isDebug()) { + const logFilePath = core28.getState("proxy-log-file"); logger.info( "Debug mode is on. Uploading proxy log as Actions debugging artifact..." ); @@ -166237,7 +162235,7 @@ async function runWrapper9() { } // src/upload-sarif-action.ts -var core28 = __toESM(require_core()); +var core29 = __toESM(require_core()); async function sendSuccessStatusReport2(startedAt, uploadStats, logger) { const statusReportBase = await createStatusReportBase( "upload-sarif" /* UploadSarif */, @@ -166255,8 +162253,7 @@ async function sendSuccessStatusReport2(startedAt, uploadStats, logger) { await sendStatusReport(statusReport); } } -async function run8(startedAt) { - const logger = getActionsLogger(); +async function run8({ startedAt, logger }) { try { initializeEnvironment(getActionVersion()); const gitHubVersion = await getGitHubVersion(); @@ -166298,11 +162295,11 @@ async function run8(startedAt) { } const codeScanningResult = uploadResults["code-scanning" /* CodeScanning */]; if (codeScanningResult !== void 0) { - core28.setOutput("sarif-id", codeScanningResult.sarifID); + core29.setOutput("sarif-id", codeScanningResult.sarifID); } - core28.setOutput("sarif-ids", JSON.stringify(uploadResults)); + core29.setOutput("sarif-ids", JSON.stringify(uploadResults)); if (shouldSkipSarifUpload()) { - core28.debug( + core29.debug( "SARIF upload disabled by an environment variable. Waiting for processing is disabled." ); } else if (getRequiredInput("wait-for-processing") === "true") { @@ -166322,7 +162319,7 @@ async function run8(startedAt) { } catch (unwrappedError) { const error3 = isThirdPartyAnalysis("upload-sarif" /* UploadSarif */) && unwrappedError instanceof InvalidSarifUploadError ? new ConfigurationError(unwrappedError.message) : wrapError(unwrappedError); const message = error3.message; - core28.setFailed(message); + core29.setFailed(message); const errorStatusReportBase = await createStatusReportBase( "upload-sarif" /* UploadSarif */, getActionsStatus(error3), @@ -166339,26 +162336,16 @@ async function run8(startedAt) { return; } } +var uploadSarif = { + name: "upload-sarif" /* UploadSarif */, + run: run8 +}; async function runWrapper10() { - const startedAt = /* @__PURE__ */ new Date(); - const logger = getActionsLogger(); - try { - await run8(startedAt); - } catch (error3) { - core28.setFailed( - `codeql/upload-sarif action failed: ${getErrorMessage(error3)}` - ); - await sendUnhandledErrorStatusReport( - "upload-sarif" /* UploadSarif */, - startedAt, - error3, - logger - ); - } + await runInActions(uploadSarif); } // src/upload-sarif-action-post.ts -var core29 = __toESM(require_core()); +var core30 = __toESM(require_core()); async function runWrapper11() { try { restoreInputs(); @@ -166367,7 +162354,7 @@ async function runWrapper11() { checkGitHubVersionInRange(gitHubVersion, logger); if (process.env["CODEQL_ACTION_INIT_HAS_RUN" /* INIT_ACTION_HAS_RUN */] !== "true") { if (gitHubVersion.type === void 0) { - core29.warning( + core30.warning( `Did not upload debug artifacts because cannot determine the GitHub variant running.` ); return; @@ -166384,7 +162371,7 @@ async function runWrapper11() { ); } } catch (error3) { - core29.setFailed( + core30.setFailed( `upload-sarif post-action step failed: ${getErrorMessage(error3)}` ); } @@ -166537,7 +162524,7 @@ tmp/lib/tmp.js: *) js-yaml/dist/js-yaml.mjs: - (*! js-yaml 5.0.0 https://github.com/nodeca/js-yaml @license MIT *) + (*! js-yaml 5.1.0 https://github.com/nodeca/js-yaml @license MIT *) long/index.js: (** diff --git a/package-lock.json b/package-lock.json index 95ac61f15..ef78f95bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codeql", - "version": "4.36.3", + "version": "4.36.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codeql", - "version": "4.36.3", + "version": "4.36.4", "license": "MIT", "workspaces": [ "pr-checks" @@ -14,7 +14,7 @@ "dependencies": { "@actions/artifact": "^5.0.3", "@actions/artifact-legacy": "npm:@actions/artifact@^1.1.2", - "@actions/cache": "^5.0.5", + "@actions/cache": "^5.1.0", "@actions/core": "^2.0.3", "@actions/exec": "^2.0.0", "@actions/github": "^8.0.1", @@ -28,12 +28,12 @@ "follow-redirects": "^1.16.0", "get-folder-size": "^5.0.0", "https-proxy-agent": "^7.0.6", - "js-yaml": "^5.0.0", + "js-yaml": "^5.1.0", "jsonschema": "1.5.0", "long": "^5.3.2", "node-forge": "^1.4.0", - "semver": "^7.8.4", - "uuid": "^14.0.0" + "semver": "^7.8.5", + "uuid": "^14.0.1" }, "devDependencies": { "@ava/typescript": "6.0.0", @@ -43,7 +43,7 @@ "@types/archiver": "^8.0.0", "@types/follow-redirects": "^1.14.4", "@types/js-yaml": "^4.0.9", - "@types/node": "^20.19.42", + "@types/node": "^20.19.43", "@types/node-forge": "^1.3.14", "@types/sarif": "^2.1.7", "@types/semver": "^7.7.1", @@ -53,15 +53,15 @@ "eslint": "^9.39.4", "eslint-import-resolver-typescript": "^4.4.5", "eslint-plugin-github": "^6.0.0", - "eslint-plugin-import-x": "^4.16.2", + "eslint-plugin-import-x": "^4.17.0", "eslint-plugin-jsdoc": "^62.9.0", "eslint-plugin-no-async-foreach": "^0.1.1", - "glob": "^11.1.0", - "globals": "^17.6.0", + "glob": "^13.0.6", + "globals": "^17.7.0", "nock": "^14.0.15", "sinon": "^22.0.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.61.0" + "typescript-eslint": "^8.62.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -455,9 +455,9 @@ } }, "node_modules/@actions/cache": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-5.0.5.tgz", - "integrity": "sha512-jiQSg0gfd+C2KPgcmdCOq7dCuCIQQWQ4b1YfGIRaaA9w7PJbRwTOcCz4LiFEUnqZGf0ha/8OKL3BeNwetHzYsQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-5.1.0.tgz", + "integrity": "sha512-kTIj4YPrjjRPKSGlj7f8eq+Pijoy/SKBEbJcAwNsQTFGEF29NGqj1mqD02/PmhV6r4bRAixycexAWpmUJ2aCwg==", "license": "MIT", "dependencies": { "@actions/core": "^2.0.0", @@ -1681,90 +1681,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", - "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", @@ -2358,13 +2274,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@package-json/types": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@package-json/types/-/types-0.0.12.tgz", - "integrity": "sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==", - "dev": true, - "license": "MIT" - }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -2619,9 +2528,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.42.tgz", - "integrity": "sha512-5L7SUaFC1RyDraj2yRhyBzHTobyXHmohD100CChNtyPyleoq37Mqab5Gn8XEKI04dfN/oqPdpHk38MgcQWHbZg==", + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", "dev": true, "license": "MIT", "dependencies": { @@ -2678,17 +2587,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.0.tgz", - "integrity": "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.0.tgz", + "integrity": "sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/type-utils": "8.61.0", - "@typescript-eslint/utils": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/type-utils": "8.62.0", + "@typescript-eslint/utils": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -2701,7 +2610,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.61.0", + "@typescript-eslint/parser": "^8.62.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -2717,16 +2626,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.0.tgz", - "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.0.tgz", + "integrity": "sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3" }, "engines": { @@ -2760,14 +2669,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.0.tgz", - "integrity": "sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.0.tgz", + "integrity": "sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.61.0", - "@typescript-eslint/types": "^8.61.0", + "@typescript-eslint/tsconfig-utils": "^8.62.0", + "@typescript-eslint/types": "^8.62.0", "debug": "^4.4.3" }, "engines": { @@ -2800,14 +2709,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.0.tgz", - "integrity": "sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", + "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0" + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2818,9 +2727,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.0.tgz", - "integrity": "sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz", + "integrity": "sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==", "dev": true, "license": "MIT", "engines": { @@ -2835,15 +2744,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.0.tgz", - "integrity": "sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.0.tgz", + "integrity": "sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/utils": "8.61.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -2878,9 +2787,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.0.tgz", - "integrity": "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", + "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", "dev": true, "license": "MIT", "engines": { @@ -2892,16 +2801,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.0.tgz", - "integrity": "sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", + "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.61.0", - "@typescript-eslint/tsconfig-utils": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", + "@typescript-eslint/project-service": "8.62.0", + "@typescript-eslint/tsconfig-utils": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -2930,9 +2839,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -2977,16 +2886,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.0.tgz", - "integrity": "sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", + "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0" + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3001,13 +2910,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.0.tgz", - "integrity": "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", + "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/types": "8.62.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3441,6 +3350,7 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3450,6 +3360,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4299,6 +4210,7 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4309,6 +4221,7 @@ }, "node_modules/color-name": { "version": "1.1.4", + "dev": true, "license": "MIT" }, "node_modules/comment-parser": { @@ -4420,6 +4333,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4618,12 +4532,6 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.68", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.68.tgz", @@ -4645,6 +4553,7 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "license": "MIT" }, "node_modules/es-abstract": { @@ -5216,13 +5125,12 @@ } }, "node_modules/eslint-plugin-import-x": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.16.2.tgz", - "integrity": "sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.17.0.tgz", + "integrity": "sha512-aM7V25Bg6YuYxtEhwjafzfS0NTMds1D2PMQI0K4KqJxQJRtkP4CO+MQTWRdBq2qAnmPxTxLevhXUBtByxJqS1w==", "dev": true, "license": "MIT", "dependencies": { - "@package-json/types": "^0.0.12", "@typescript-eslint/types": "^8.56.0", "comment-parser": "^1.4.1", "debug": "^4.4.1", @@ -5976,22 +5884,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -6177,23 +6069,17 @@ } }, "node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6249,9 +6135,9 @@ } }, "node_modules/globals": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", - "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", + "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", "dev": true, "license": "MIT", "engines": { @@ -6768,6 +6654,7 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7078,23 +6965,9 @@ }, "node_modules/isexe": { "version": "2.0.0", + "dev": true, "license": "ISC" }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -7105,9 +6978,9 @@ } }, "node_modules/js-yaml": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.0.0.tgz", - "integrity": "sha512-GSvaPUbk1U+FMZ7rJzF+F8e5YVtu7KnD40et/5rBXXRBv2jCO9L3qCewvIDDdudC0QycTFlf6EAA+h3kxBsuUw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.1.0.tgz", + "integrity": "sha512-s8VA5jkR8f22S3NAXmhKPFqGUduqZGlsufabVOgN14iTdw/RXcym7bKkbwjxLK9Yw2lEvvmJjFp119+KPeo8Kg==", "funding": [ { "type": "github", @@ -7365,10 +7238,10 @@ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" }, "node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "license": "ISC", + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -7509,10 +7382,10 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -7907,12 +7780,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "license": "BlueOak-1.0.0" - }, "node_modules/parent-module": { "version": "1.0.1", "dev": true, @@ -7980,6 +7847,7 @@ }, "node_modules/path-key": { "version": "3.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7991,16 +7859,16 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8491,9 +8359,9 @@ } }, "node_modules/semver": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", - "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8579,6 +8447,7 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -8589,6 +8458,7 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8674,6 +8544,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -8849,21 +8720,7 @@ }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -8949,19 +8806,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9472,16 +9317,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.61.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.0.tgz", - "integrity": "sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.0.tgz", + "integrity": "sha512-8QxXi+ZACKX0kaqO4gY8kn0RSD9gFfaHDWwjqtEN48aWCBkX4MJaufWN+c3BzlrXLOxfywDL8CaoqUwcRq4j4Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.61.0", - "@typescript-eslint/parser": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/utils": "8.61.0" + "@typescript-eslint/eslint-plugin": "8.62.0", + "@typescript-eslint/parser": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9645,9 +9490,9 @@ "license": "MIT" }, "node_modules/uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -9686,6 +9531,7 @@ }, "node_modules/which": { "version": "2.0.2", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -9804,39 +9650,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9997,11 +9810,11 @@ "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": ">=9.2.2", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", - "semver": "^7.8.0", + "semver": "^7.8.5", "yaml": "^2.9.0" }, "devDependencies": { - "@types/node": "^20.19.42", + "@types/node": "^20.19.43", "tsx": "^4.22.4" } } diff --git a/package.json b/package.json index 1f0dd37a2..32088c506 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "codeql", - "version": "4.36.3", + "version": "4.36.4", "private": true, "description": "CodeQL action", "scripts": { @@ -22,7 +22,7 @@ "dependencies": { "@actions/artifact": "^5.0.3", "@actions/artifact-legacy": "npm:@actions/artifact@^1.1.2", - "@actions/cache": "^5.0.5", + "@actions/cache": "^5.1.0", "@actions/core": "^2.0.3", "@actions/exec": "^2.0.0", "@actions/github": "^8.0.1", @@ -36,12 +36,12 @@ "follow-redirects": "^1.16.0", "get-folder-size": "^5.0.0", "https-proxy-agent": "^7.0.6", - "js-yaml": "^5.0.0", + "js-yaml": "^5.1.0", "jsonschema": "1.5.0", "long": "^5.3.2", "node-forge": "^1.4.0", - "semver": "^7.8.4", - "uuid": "^14.0.0" + "semver": "^7.8.5", + "uuid": "^14.0.1" }, "devDependencies": { "@ava/typescript": "6.0.0", @@ -51,7 +51,7 @@ "@types/archiver": "^8.0.0", "@types/follow-redirects": "^1.14.4", "@types/js-yaml": "^4.0.9", - "@types/node": "^20.19.42", + "@types/node": "^20.19.43", "@types/node-forge": "^1.3.14", "@types/sarif": "^2.1.7", "@types/semver": "^7.7.1", @@ -61,15 +61,15 @@ "eslint": "^9.39.4", "eslint-import-resolver-typescript": "^4.4.5", "eslint-plugin-github": "^6.0.0", - "eslint-plugin-import-x": "^4.16.2", + "eslint-plugin-import-x": "^4.17.0", "eslint-plugin-jsdoc": "^62.9.0", "eslint-plugin-no-async-foreach": "^0.1.1", - "glob": "^11.1.0", - "globals": "^17.6.0", + "glob": "^13.0.6", + "globals": "^17.7.0", "nock": "^14.0.15", "sinon": "^22.0.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.61.0" + "typescript-eslint": "^8.62.0" }, "overrides": { "@actions/tool-cache": { @@ -90,7 +90,7 @@ "eslint-plugin-jsx-a11y": { "semver": ">=6.3.1" }, - "glob": "^11.1.0", + "glob": "^13.0.6", "undici": "^6.24.0" } } diff --git a/pr-checks/checks/go-indirect-tracing-workaround-diagnostic.yml b/pr-checks/checks/go-indirect-tracing-workaround-diagnostic.yml index 69f9b4762..895dba2b6 100644 --- a/pr-checks/checks/go-indirect-tracing-workaround-diagnostic.yml +++ b/pr-checks/checks/go-indirect-tracing-workaround-diagnostic.yml @@ -12,7 +12,7 @@ steps: languages: go tools: ${{ steps.prepare-test.outputs.tools-url }} # Deliberately change Go after the `init` step - - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 with: go-version: "1.20" - name: Build code diff --git a/pr-checks/checks/multi-language-autodetect.yml b/pr-checks/checks/multi-language-autodetect.yml index 1608fcc6b..801f4521a 100644 --- a/pr-checks/checks/multi-language-autodetect.yml +++ b/pr-checks/checks/multi-language-autodetect.yml @@ -23,7 +23,7 @@ steps: # We need Python 3.13 for older CLI versions because they are not compatible with Python 3.14 or newer. # See https://github.com/github/codeql-action/pull/3212 if: matrix.version != 'nightly-latest' && matrix.version != 'linked' - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: "3.13" diff --git a/pr-checks/checks/rubocop-multi-language.yml b/pr-checks/checks/rubocop-multi-language.yml index 182816cb3..dd9c21828 100644 --- a/pr-checks/checks/rubocop-multi-language.yml +++ b/pr-checks/checks/rubocop-multi-language.yml @@ -5,7 +5,7 @@ versions: - default steps: - name: Set up Ruby - uses: ruby/setup-ruby@12fd324f1d0b43274fdc8130f6980590a667c455 # v1.312.0 + uses: ruby/setup-ruby@9eb537ca036ebaed86729dcb9309076e4c5c3b74 # v1.314.0 with: ruby-version: 2.6 - name: Install Code Scanning integration diff --git a/pr-checks/checks/submit-sarif-failure.yml b/pr-checks/checks/submit-sarif-failure.yml index 2bba971d7..9212a5dc7 100644 --- a/pr-checks/checks/submit-sarif-failure.yml +++ b/pr-checks/checks/submit-sarif-failure.yml @@ -21,7 +21,7 @@ permissions: security-events: write # needed to upload the SARIF file steps: - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: ./init with: languages: javascript diff --git a/pr-checks/checks/with-checkout-path.yml b/pr-checks/checks/with-checkout-path.yml index e91066e18..7a5866b78 100644 --- a/pr-checks/checks/with-checkout-path.yml +++ b/pr-checks/checks/with-checkout-path.yml @@ -14,7 +14,7 @@ steps: rm -rf ./* .github .git # Check out the actions repo again, but at a different location. # choose an arbitrary SHA so that we can later test that the commit_oid is not from main - - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: 474bbf07f9247ffe1856c6a0f94aeeb10e7afee6 path: x/y/z/some-path diff --git a/pr-checks/package.json b/pr-checks/package.json index 649b14795..e5a119ff1 100644 --- a/pr-checks/package.json +++ b/pr-checks/package.json @@ -7,11 +7,11 @@ "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": ">=9.2.2", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", - "semver": "^7.8.0", + "semver": "^7.8.5", "yaml": "^2.9.0" }, "devDependencies": { - "@types/node": "^20.19.42", + "@types/node": "^20.19.43", "tsx": "^4.22.4" } } diff --git a/pr-checks/sync.ts b/pr-checks/sync.ts index 035f5b34d..cc4f66946 100755 --- a/pr-checks/sync.ts +++ b/pr-checks/sync.ts @@ -233,8 +233,8 @@ const languageSetups: LanguageSetups = { name: "Install Go", uses: pinnedUses( "actions/setup-go", - "4a3601121dd01d1626a1e23e37211e3254c1c06c", - "v6.4.0", + "924ae3a1cded613372ab5595356fb5720e22ba16", + "v6.5.0", ), with: { "go-version": `\${{ inputs.go-version || '${defaultLanguageVersions.go}' }}`, @@ -253,8 +253,8 @@ const languageSetups: LanguageSetups = { name: "Install Java", uses: pinnedUses( "actions/setup-java", - "ad2b38190b15e4d6bdf0c97fb4fca8412226d287", - "v5.3.0", + "1bcf9fb12cf4aa7d266a90ae39939e61372fe520", + "v5.4.0", ), with: { "java-version": `\${{ inputs.java-version || '${defaultLanguageVersions.java}' }}`, @@ -271,8 +271,8 @@ const languageSetups: LanguageSetups = { name: "Install Python", uses: pinnedUses( "actions/setup-python", - "a309ff8b426b58ec0e2a45f0f869d46889d02405", - "v6.2.0", + "ece7cb06caefa5fff74198d8649806c4678c61a1", + "v6.3.0", ), with: { "python-version": `\${{ inputs.python-version || '${defaultLanguageVersions.python}' }}`, @@ -288,8 +288,8 @@ const languageSetups: LanguageSetups = { name: "Install .NET", uses: pinnedUses( "actions/setup-dotnet", - "9a946fdbd5fb07b82b2f5a4466058b876ab72bb2", - "v5.3.0", + "26b0ec14cb23fa6904739307f278c14f94c95bf1", + "v5.4.0", ), with: { "dotnet-version": `\${{ inputs.dotnet-version || '${defaultLanguageVersions.csharp}' }}`, @@ -529,8 +529,8 @@ function generateJob( name: "Check out repository", uses: pinnedUses( "actions/checkout", - "df4cb1c069e1874edd31b4311f1884172cec0e10", - "v6.0.3", + "9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0", + "v7.0.0", ), }, ...setupInfo.steps, @@ -765,9 +765,7 @@ function main(): void { push: { branches: ["main", "releases/v*"], }, - pull_request: { - types: ["opened", "synchronize", "reopened", "ready_for_review"], - }, + pull_request: {}, merge_group: { types: ["checks_requested"], }, diff --git a/src/action-common.ts b/src/action-common.ts index 5af58f08b..dc76e9fdb 100644 --- a/src/action-common.ts +++ b/src/action-common.ts @@ -1,6 +1,23 @@ +import * as core from "@actions/core"; + +import { ActionsEnv, getActionsEnv } from "./actions-util"; import { Env } from "./environment"; import { FeatureEnablement } from "./feature-flags"; -import { Logger } from "./logging"; +import { getActionsLogger, Logger } from "./logging"; +import { + ActionName, + getDisplayActionName, + sendUnhandledErrorStatusReport, +} from "./status-report"; +import { getEnv, getErrorMessage } from "./util"; + +/** Common state that is always available in `ActionState`. */ +export interface BaseState { + /** The name of the Action. */ + name: ActionName; + /** When the Action was started. */ + startedAt: Date; +} /** Describes different state features that an Action may have. */ export interface FeatureState { @@ -12,6 +29,10 @@ export interface FeatureState { /** Information about environment variables. */ env: Env; }; + Actions: { + /** Access to Actions-related functionality. */ + actions: ActionsEnv; + }; FeatureFlags: { /** Information about enabled feature flags. */ features: FeatureEnablement; @@ -21,17 +42,54 @@ export interface FeatureState { /** Identifies a type of state an Action may have. */ export type StateFeature = keyof FeatureState; -/** Constructs the union of all state types identifies by `Fs`. */ -export type FieldsOf = Fs extends [ - infer Head extends StateFeature, -] - ? FeatureState[Head] +/** Constructs the intersection of all state types identifies by `Fs`. */ +export type FieldsOf = Fs extends [] + ? BaseState : Fs extends [ infer Head extends StateFeature, - ...infer Tail extends StateFeature[], + ...infer Tail extends readonly StateFeature[], ] ? FeatureState[Head] & FieldsOf : never; /** Describes the state of an Action that has access to the state corresponding to `Fs`. */ export type ActionState = FieldsOf ; + +/** The type of an Action's main entry point. This is a function that is provided + * with a basic `ActionState` object with features that are always available. + * Each Action can then augment the `state` further if additional features are required. + */ +export type ActionMain = ( + state: ActionState<["Logger", "Env", "Actions"]>, +) => Promise ; + +/** A specification for a CodeQL Action step. */ +export interface Action { + /** The name of the Action. */ + name: ActionName; + /** The entry point for the Action. */ + run: ActionMain; +} + +/** A generic entry point that sets up the basic environment for the `action` and runs it. */ +export async function runInActions(action: Action) { + const startedAt = new Date(); + const logger = getActionsLogger(); + const env = getEnv(); + const actionsEnv = getActionsEnv(); + + try { + await action.run({ + name: action.name, + startedAt, + logger, + env, + actions: actionsEnv, + }); + } catch (error) { + core.setFailed( + `${getDisplayActionName(action.name)} action failed: ${getErrorMessage(error)}`, + ); + await sendUnhandledErrorStatusReport(action.name, startedAt, error, logger); + } +} diff --git a/src/analyze-action.ts b/src/analyze-action.ts index cc2777bc5..f7cbbaabe 100644 --- a/src/analyze-action.ts +++ b/src/analyze-action.ts @@ -4,6 +4,7 @@ import { performance } from "perf_hooks"; import * as core from "@actions/core"; +import { Action, ActionState, runInActions } from "./action-common"; import * as actionsUtil from "./actions-util"; import * as analyses from "./analyses"; import { @@ -40,7 +41,6 @@ import { createStatusReportBase, DatabaseCreationTimings, getActionsStatus, - sendUnhandledErrorStatusReport, StatusReportBase, } from "./status-report"; import { @@ -212,7 +212,7 @@ async function runAutobuildIfLegacyGoWorkflow(config: Config, logger: Logger) { await runAutobuild(config, BuiltInLanguage.go, logger); } -async function run(startedAt: Date) { +async function run({ startedAt, logger }: ActionState<["Logger"]>) { // To capture errors appropriately, keep as much code within the try-catch as // possible, and only use safe functions outside. @@ -228,7 +228,6 @@ async function run(startedAt: Date) { let didUploadTrapCaches = false; let dependencyCacheResults: DependencyCacheUploadStatusReport | undefined; let databaseUploadResults: DatabaseUploadResult[] = []; - const logger = getActionsLogger(); try { util.initializeEnvironment(actionsUtil.getActionVersion()); @@ -523,19 +522,13 @@ async function run(startedAt: Date) { } } +/** Defines the `analyze` Action. */ +const analyze: Action = { + name: ActionName.Analyze, + run, +}; + export async function runWrapper() { - const startedAt = new Date(); - const logger = getActionsLogger(); - try { - await run(startedAt); - } catch (error) { - core.setFailed(`analyze action failed: ${util.getErrorMessage(error)}`); - await sendUnhandledErrorStatusReport( - ActionName.Analyze, - startedAt, - error, - logger, - ); - } + await runInActions(analyze); await util.checkForTimeout(); } diff --git a/src/analyze.ts b/src/analyze.ts index 6a668f19a..411477b59 100644 --- a/src/analyze.ts +++ b/src/analyze.ts @@ -285,7 +285,7 @@ extensions: // characters are escaped, and that the path is always rendered as a // quoted string on a single line. return ( - ` - [${yaml.dump(filename, { quoteStyle: "single" }).trim()}, ` + + ` - [${yaml.dump(filename, { forceQuotes: true, quoteStyle: "single" }).trim()}, ` + `${range.startLine}, ${range.endLine}]\n` ); }) diff --git a/src/api-client.test.ts b/src/api-client.test.ts index f8846e768..29cad338f 100644 --- a/src/api-client.test.ts +++ b/src/api-client.test.ts @@ -181,6 +181,7 @@ test.serial( "Code Security must be enabled for this repository to use code scanning", "Advanced Security must be enabled for this repository to use code scanning", "Code Scanning is not enabled for this repository. Please enable code scanning in the repository settings.", + "Code quality is not enabled for this repository. Please enable code quality in the repository settings.", ]; const transforms = [ (msg: string) => msg, diff --git a/src/api-client.ts b/src/api-client.ts index 16714b480..16e4082e9 100644 --- a/src/api-client.ts +++ b/src/api-client.ts @@ -315,6 +315,7 @@ function isEnablementError(msg: string) { /Code Security must be enabled/i, /Advanced Security must be enabled/i, /Code Scanning is not enabled/i, + /Code Quality is not enabled/i, ].some((pattern) => pattern.test(msg)); } diff --git a/src/autobuild-action.ts b/src/autobuild-action.ts index dc2021137..afda0e236 100644 --- a/src/autobuild-action.ts +++ b/src/autobuild-action.ts @@ -1,5 +1,6 @@ import * as core from "@actions/core"; +import { Action, ActionState, runInActions } from "./action-common"; import { getActionVersion, getOptionalInput, @@ -11,13 +12,12 @@ import { getCodeQL } from "./codeql"; import { Config, getConfig } from "./config-utils"; import { EnvVar } from "./environment"; import { Language } from "./languages"; -import { Logger, getActionsLogger } from "./logging"; +import { Logger } from "./logging"; import { StatusReportBase, getActionsStatus, createStatusReportBase, sendStatusReport, - sendUnhandledErrorStatusReport, ActionName, } from "./status-report"; import { endTracingForCluster } from "./tracer-config"; @@ -26,7 +26,6 @@ import { checkDiskUsage, checkGitHubVersionInRange, ConfigurationError, - getErrorMessage, initializeEnvironment, wrapError, } from "./util"; @@ -69,11 +68,10 @@ async function sendCompletedStatusReport( } } -async function run(startedAt: Date) { +async function run({ startedAt, logger }: ActionState<["Logger"]>) { // To capture errors appropriately, keep as much code within the try-catch as // possible, and only use safe functions outside. - const logger = getActionsLogger(); let config: Config | undefined; let currentLanguage: Language | undefined; let languages: Language[] | undefined; @@ -142,18 +140,12 @@ async function run(startedAt: Date) { await sendCompletedStatusReport(config, logger, startedAt, languages ?? []); } +/** Defines the `autobuild` Action. */ +const autobuild: Action = { + name: ActionName.Autobuild, + run, +}; + export async function runWrapper() { - const startedAt = new Date(); - const logger = getActionsLogger(); - try { - await run(startedAt); - } catch (error) { - core.setFailed(`autobuild action failed. ${getErrorMessage(error)}`); - await sendUnhandledErrorStatusReport( - ActionName.Autobuild, - startedAt, - error, - logger, - ); - } + await runInActions(autobuild); } diff --git a/src/codeql.ts b/src/codeql.ts index 5d78337d2..bb6c0fb55 100644 --- a/src/codeql.ts +++ b/src/codeql.ts @@ -514,16 +514,13 @@ async function getCodeQLForCmd( async getVersion() { let result = util.getCachedCodeQlVersion(cmd); if (result === undefined) { - const output = await runCli(cmd, ["version", "--format=json"], { - noStreamStdout: true, - }); - try { - result = JSON.parse(output) as VersionInfo; - } catch { - throw Error( - `Invalid JSON output from \`version --format=json\`: ${output}`, - ); - } + result = await runCliJson ( + cmd, + ["version", "--format=json"], + { + noStreamStdout: true, + }, + ); util.cacheCodeQlVersion(cmd, result); } return result; @@ -731,26 +728,20 @@ async function getCodeQLForCmd( filterToLanguagesWithQueries: boolean; } = { filterToLanguagesWithQueries: false }, ) { - const codeqlArgs = [ + return runCliJson (cmd, [ "resolve", "languages", "--format=betterjson", "--extractor-options-verbosity=4", "--extractor-include-aliases", + // TODO: Unconditionally include `--filter-to-languages-with-queries` + // once CODEQL_MINIMUM_VERSION is at least v2.23.0 + // — the first version to support this flag. ...(filterToLanguagesWithQueries ? ["--filter-to-languages-with-queries"] : []), ...getExtraOptionsFromEnv(["resolve", "languages"]), - ]; - const output = await runCli(cmd, codeqlArgs); - - try { - return JSON.parse(output) as ResolveLanguagesOutput; - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve languages with --format=betterjson: ${e}`, - ); - } + ]); }, async resolveBuildEnvironment( workingDir: string | undefined, @@ -766,15 +757,7 @@ async function getCodeQLForCmd( if (workingDir !== undefined) { codeqlArgs.push("--working-dir", workingDir); } - const output = await runCli(cmd, codeqlArgs); - - try { - return JSON.parse(output) as ResolveBuildEnvironmentOutput; - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve build-environment: ${e} in\n${output}`, - ); - } + return await runCliJson (cmd, codeqlArgs); }, async databaseRunQueries( databasePath: string, @@ -976,15 +959,9 @@ async function getCodeQLForCmd( ...getExtraOptionsFromEnv(["resolve", "queries"]), ...queries, ]; - const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true }); - - try { - return JSON.parse(output) as string[]; - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve queries --format=startingpacks: ${e}`, - ); - } + return await runCliJson (cmd, codeqlArgs, { + noStreamStdout: true, + }); }, async resolveDatabase( databasePath: string, @@ -996,15 +973,9 @@ async function getCodeQLForCmd( "--format=json", ...getExtraOptionsFromEnv(["resolve", "database"]), ]; - const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true }); - - try { - return JSON.parse(output) as ResolveDatabaseOutput; - } catch (e) { - throw new Error( - `Unexpected output from codeql resolve database --format=json: ${e}`, - ); - } + return await runCliJson (cmd, codeqlArgs, { + noStreamStdout: true, + }); }, async mergeResults( sarifFiles: string[], @@ -1160,6 +1131,30 @@ async function runCli( } } +/** + * Wraps the command executor {@link runCli} and tries to parse the output as JSON. + * @param cmd The command to run. + * @param args The arguments to pass to the command. + * @param opts The options for running the command. + * @param opts.stdin Optional string to pass to the command's standard input. + * @param opts.noStreamStdout Optional boolean to indicate whether to stream the command's standard output. + * @returns The parsed JSON output from the command. + */ +async function runCliJson ( + cmd: string, + args: string[] = [], + opts: { stdin?: string; noStreamStdout?: boolean } = {}, +): Promise { + const output = await runCli(cmd, args, opts); + try { + return JSON.parse(output) as T; + } catch (e) { + throw Error( + `Unexpected output from codeql ${args.join(" ")}: ${getErrorMessage(e)}`, + ); + } +} + /** * Writes the code scanning configuration that is to be used by the CLI. * diff --git a/src/config/file.test.ts b/src/config/file.test.ts index 4c511c1a7..3362d26c6 100644 --- a/src/config/file.test.ts +++ b/src/config/file.test.ts @@ -1,22 +1,19 @@ import test from "ava"; import sinon from "sinon"; +import { Feature } from "../feature-flags"; import { RepositoryPropertyName } from "../feature-flags/properties"; -import { - getTestActionsEnv, - RecordingLogger, - setupTests, -} from "../testing-utils"; +import { callee, setupTests } from "../testing-utils"; import { getConfigFileInput } from "./file"; setupTests(test); test("getConfigFileInput returns undefined by default", async (t) => { - const logger = new RecordingLogger(); - const actionsEnv = getTestActionsEnv(); - const result = getConfigFileInput(logger, actionsEnv, {}); - t.is(result, undefined); + await callee(getConfigFileInput) + .withArgs({}) + .withFeatures([Feature.ConfigFileRepositoryProperty]) + .passes(async (fn) => t.is(await fn(), undefined)); }); const repositoryProperties = { @@ -24,9 +21,12 @@ const repositoryProperties = { }; test("getConfigFileInput returns input value", async (t) => { - const logger = new RecordingLogger(); - const actionsEnv = getTestActionsEnv(); const testInput = "/some/path"; + const target = callee(getConfigFileInput).withFeatures([ + Feature.ConfigFileRepositoryProperty, + ]); + + const actionsEnv = target.getState().actions; sinon .stub(actionsEnv, "getOptionalInput") .withArgs("config-file") @@ -34,36 +34,63 @@ test("getConfigFileInput returns input value", async (t) => { // Even though both an input and repository property are configured, // we prefer the direct input to the Action. - const result = getConfigFileInput(logger, actionsEnv, repositoryProperties); - t.is(result, testInput); - - // Check for the expected log message. - t.true(logger.hasMessage("Using configuration file input from workflow")); -}); - -test("getConfigFileInput returns repository property value", async (t) => { - const logger = new RecordingLogger(); - const actionsEnv = getTestActionsEnv(); - - // Since there is no direct input, we should use the repository property. - const result = getConfigFileInput(logger, actionsEnv, repositoryProperties); - t.is(result, repositoryProperties[RepositoryPropertyName.CONFIG_FILE]); + const targetWithArgs = target + .withActions(actionsEnv) + .withArgs(repositoryProperties); + await targetWithArgs.passes(async (fn) => t.is(await fn(), testInput)); // Check for the expected log message. t.true( - logger.hasMessage( - "Using configuration file input from repository property", - ), + targetWithArgs + .getLogger() + .hasMessage("Using configuration file input from workflow"), + ); +}); + +test("getConfigFileInput returns repository property value", async (t) => { + // Since there is no direct input, we should use the repository property. + const target = callee(getConfigFileInput) + .withFeatures([Feature.ConfigFileRepositoryProperty]) + .withArgs(repositoryProperties); + + await target.passes(async (fn) => + t.is(await fn(), repositoryProperties[RepositoryPropertyName.CONFIG_FILE]), + ); + + // Check for the expected log message. + t.true( + target + .getLogger() + .hasMessage("Using configuration file input from repository property"), ); }); test("getConfigFileInput ignores empty repository property value", async (t) => { - const logger = new RecordingLogger(); - const actionsEnv = getTestActionsEnv(); - // Since the repository property value is an empty/whitespace string, we should ignore it. - const result = getConfigFileInput(logger, actionsEnv, { - [RepositoryPropertyName.CONFIG_FILE]: " ", - }); - t.is(result, undefined); + await callee(getConfigFileInput) + .withFeatures([Feature.ConfigFileRepositoryProperty]) + .withArgs({ [RepositoryPropertyName.CONFIG_FILE]: " " }) + .passes(async (fn) => t.is(await fn(), undefined)); +}); + +test("getConfigFileInput ignores repository property value when FF is off", async (t) => { + // Since the FF is off, we should ignore the repository property value. + const target = callee(getConfigFileInput) + .withFeatures([]) + .withArgs(repositoryProperties); + + await target.passes(async (fn) => t.is(await fn(), undefined)); + + t.false( + target + .getLogger() + .hasMessage("Using configuration file input from repository property"), + ); + t.true( + target + .getLogger() + .hasMessage( + "Ignoring configuration file input from repository property, because the corresponding feature flag is disabled.", + ), + ); }); diff --git a/src/config/file.ts b/src/config/file.ts index 66257a5bf..5ff2dee08 100644 --- a/src/config/file.ts +++ b/src/config/file.ts @@ -1,5 +1,4 @@ import { ActionState } from "../action-common"; -import { ActionsEnv } from "../actions-util"; import * as api from "../api-client"; import * as errorMessages from "../error-messages"; import { Feature } from "../feature-flags"; @@ -7,7 +6,6 @@ import { RepositoryProperties, RepositoryPropertyName, } from "../feature-flags/properties"; -import { Logger } from "../logging"; import { ConfigurationError } from "../util"; import { parseUserConfig, UserConfig } from "./db-config"; @@ -16,11 +14,14 @@ import { parseRemoteFileAddress } from "./remote-file"; /** * Gets the value that is configured for the configuration file, if any. */ -export function getConfigFileInput( - logger: Logger, - actions: ActionsEnv, +export async function getConfigFileInput( + { + logger, + actions, + features, + }: ActionState<["Logger", "Actions", "FeatureFlags"]>, repositoryProperties: Partial , -): string | undefined { +): Promise { const input = actions.getOptionalInput("config-file"); if (input !== undefined) { @@ -32,10 +33,21 @@ export function getConfigFileInput( repositoryProperties[RepositoryPropertyName.CONFIG_FILE]; if (propertyValue !== undefined && propertyValue.trim().length > 0) { - logger.info( - `Using configuration file input from repository property: ${propertyValue}`, + // Only use the repository property value if the FF is enabled. + const useRepositoryProperty = await features.getValue( + Feature.ConfigFileRepositoryProperty, ); - return propertyValue; + + if (useRepositoryProperty) { + logger.info( + `Using configuration file input from repository property: ${propertyValue}`, + ); + return propertyValue; + } else { + logger.info( + "Ignoring configuration file input from repository property, because the corresponding feature flag is disabled.", + ); + } } return undefined; diff --git a/src/database-upload.test.ts b/src/database-upload.test.ts index 1cfbaecad..bcaf9f1c9 100644 --- a/src/database-upload.test.ts +++ b/src/database-upload.test.ts @@ -11,8 +11,10 @@ import * as apiClient from "./api-client"; import { createStubCodeQL } from "./codeql"; import { Config } from "./config-utils"; import { cleanupAndUploadDatabases } from "./database-upload"; +import { Feature } from "./feature-flags"; import * as gitUtils from "./git-utils"; import { BuiltInLanguage } from "./languages"; +import { OverlayDatabaseMode } from "./overlay/overlay-database-mode"; import { RepositoryNwo } from "./repository"; import { checkExpectedLogMessages, @@ -24,6 +26,7 @@ import { setupTests, } from "./testing-utils"; import { + CleanupLevel, GitHubVariant, HTTPError, initializeEnvironment, @@ -335,3 +338,191 @@ test.serial("Successfully uploading a database to GHEC-DR", async (t) => { ); }); }); + +test.serial( + "Records overlay and clear cleanup sizes when uploading an overlay-base database", + async (t) => { + await withTmpDir(async (tmpDir) => { + setupActionsVars(tmpDir, tmpDir); + sinon + .stub(actionsUtil, "getRequiredInput") + .withArgs("upload-database") + .returns("true"); + sinon.stub(gitUtils, "isAnalyzingDefaultBranch").resolves(true); + + await mockHttpRequests(201); + + // Track the cleanup level passed to each cleanup so that the database + // bundle stub can write a differently-sized bundle for each level. + const cleanupLevels: CleanupLevel[] = []; + let lastCleanupLevel: CleanupLevel | undefined; + const overlaySizeBytes = 100; + const clearSizeBytes = 50; + const codeql = createStubCodeQL({ + async databaseCleanupCluster(_config, cleanupLevel) { + cleanupLevels.push(cleanupLevel); + lastCleanupLevel = cleanupLevel; + }, + async databaseBundle(_databasePath, outputFilePath) { + const sizeBytes = + lastCleanupLevel === CleanupLevel.Overlay + ? overlaySizeBytes + : clearSizeBytes; + fs.writeFileSync(outputFilePath, "x".repeat(sizeBytes)); + }, + }); + + const config = getTestConfig(tmpDir); + config.overlayDatabaseMode = OverlayDatabaseMode.OverlayBase; + + const loggedMessages: LoggedMessage[] = []; + const results = await cleanupAndUploadDatabases( + testRepoName, + codeql, + config, + testApiDetails, + createFeatures([Feature.UploadOverlayDbToApi]), + getRecordingLogger(loggedMessages), + ); + + // The database should be cleaned up at the `overlay` level for the upload + // and then re-cleaned at the `clear` level to measure its size. + t.deepEqual(cleanupLevels, [CleanupLevel.Overlay, CleanupLevel.Clear]); + + t.is(results.length, 1); + t.is(results[0].is_overlay_base, true); + t.is(results[0].zipped_upload_size_bytes, overlaySizeBytes); + t.is(results[0].clear_cleanup_zipped_size_bytes, clearSizeBytes); + t.is(typeof results[0].clear_cleanup_measurement_duration_ms, "number"); + }); + }, +); + +test.serial( + "Does not measure clear cleanup size for a regular (non-overlay-base) upload", + async (t) => { + await withTmpDir(async (tmpDir) => { + setupActionsVars(tmpDir, tmpDir); + sinon + .stub(actionsUtil, "getRequiredInput") + .withArgs("upload-database") + .returns("true"); + sinon.stub(gitUtils, "isAnalyzingDefaultBranch").resolves(true); + + await mockHttpRequests(201); + + const cleanupLevels: CleanupLevel[] = []; + const codeql = createStubCodeQL({ + async databaseCleanupCluster(_config, cleanupLevel) { + cleanupLevels.push(cleanupLevel); + }, + async databaseBundle(_databasePath, outputFilePath) { + fs.writeFileSync(outputFilePath, ""); + }, + }); + + const results = await cleanupAndUploadDatabases( + testRepoName, + codeql, + getTestConfig(tmpDir), + testApiDetails, + createFeatures([Feature.UploadOverlayDbToApi]), + getRecordingLogger([]), + ); + + // A regular upload is cleaned only once, at the `clear` level. + t.deepEqual(cleanupLevels, [CleanupLevel.Clear]); + t.is(results[0].is_overlay_base, false); + t.is(results[0].clear_cleanup_zipped_size_bytes, undefined); + t.is(results[0].clear_cleanup_measurement_duration_ms, undefined); + }); + }, +); + +test.serial("Does not measure clear cleanup size in debug mode", async (t) => { + await withTmpDir(async (tmpDir) => { + setupActionsVars(tmpDir, tmpDir); + sinon + .stub(actionsUtil, "getRequiredInput") + .withArgs("upload-database") + .returns("true"); + sinon.stub(gitUtils, "isAnalyzingDefaultBranch").resolves(true); + + await mockHttpRequests(201); + + const cleanupLevels: CleanupLevel[] = []; + const codeql = createStubCodeQL({ + async databaseCleanupCluster(_config, cleanupLevel) { + cleanupLevels.push(cleanupLevel); + }, + async databaseBundle(_databasePath, outputFilePath) { + fs.writeFileSync(outputFilePath, ""); + }, + }); + + const config = getTestConfig(tmpDir); + config.overlayDatabaseMode = OverlayDatabaseMode.OverlayBase; + config.debugMode = true; + + const results = await cleanupAndUploadDatabases( + testRepoName, + codeql, + config, + testApiDetails, + createFeatures([Feature.UploadOverlayDbToApi]), + getRecordingLogger([]), + ); + + // In debug mode we clean up at the `overlay` level for the upload but skip + // the additional `clear` cleanup, to preserve the database for debugging. + t.deepEqual(cleanupLevels, [CleanupLevel.Overlay]); + t.is(results[0].is_overlay_base, true); + t.is(results[0].clear_cleanup_zipped_size_bytes, undefined); + t.is(results[0].clear_cleanup_measurement_duration_ms, undefined); + }); +}); + +test.serial( + "Does not record a clear cleanup duration when the clear cleanup fails", + async (t) => { + await withTmpDir(async (tmpDir) => { + setupActionsVars(tmpDir, tmpDir); + sinon + .stub(actionsUtil, "getRequiredInput") + .withArgs("upload-database") + .returns("true"); + sinon.stub(gitUtils, "isAnalyzingDefaultBranch").resolves(true); + + await mockHttpRequests(201); + + const codeql = createStubCodeQL({ + async databaseCleanupCluster(_config, cleanupLevel) { + if (cleanupLevel === CleanupLevel.Clear) { + throw new Error("clear cleanup failed"); + } + }, + async databaseBundle(_databasePath, outputFilePath) { + fs.writeFileSync(outputFilePath, "x".repeat(100)); + }, + }); + + const config = getTestConfig(tmpDir); + config.overlayDatabaseMode = OverlayDatabaseMode.OverlayBase; + + const results = await cleanupAndUploadDatabases( + testRepoName, + codeql, + config, + testApiDetails, + createFeatures([Feature.UploadOverlayDbToApi]), + getRecordingLogger([]), + ); + + // When the `clear` cleanup fails, no size is measured, so we should not + // report a measurement duration either. + t.is(results[0].is_overlay_base, true); + t.is(results[0].clear_cleanup_zipped_size_bytes, undefined); + t.is(results[0].clear_cleanup_measurement_duration_ms, undefined); + }); + }, +); diff --git a/src/database-upload.ts b/src/database-upload.ts index 9869f3803..0189bef1e 100644 --- a/src/database-upload.ts +++ b/src/database-upload.ts @@ -25,6 +25,19 @@ export interface DatabaseUploadResult { zipped_upload_size_bytes?: number; /** Whether the uploaded database is an overlay base. */ is_overlay_base?: boolean; + /** + * For overlay-base uploads only: the size in bytes that the zipped database + * would have been if it had been cleaned at the `clear` cleanup level instead + * of the `overlay` level. + */ + clear_cleanup_zipped_size_bytes?: number; + /** + * For overlay-base uploads only: the time in milliseconds spent measuring the + * `clear` cleanup size (cleaning up the cluster at the `clear` level and + * bundling each database). This is a cluster-wide measurement, so it is the + * same for every language in a run. + */ + clear_cleanup_measurement_duration_ms?: number; /** Time taken to upload database in milliseconds. */ upload_duration_ms?: number; /** If there was an error during database upload, this is its message. */ @@ -156,9 +169,89 @@ export async function cleanupAndUploadDatabases( }); } } + + // When we upload an overlay-base database, we cleaned the databases at the `overlay` level, which + // retains more data than the `clear` level used for regular uploads. Measure what the zipped size + // would have been at the `clear` level too, so we can compare the storage cost of overlay-base + // databases against regular databases for the same repository. + // + // We skip this in debug mode, where the databases are preserved and uploaded as debug artifacts, + // since cleaning them up at the `clear` level would discard data that is useful for debugging. + if (shouldUploadOverlayBase && !config.debugMode) { + await withGroupAsync( + "Measuring database size at the clear cleanup level", + () => recordClearCleanupSizes(codeql, config, reports, logger), + ); + } + return reports; } +/** + * Cleans up the databases at the `clear` cleanup level and records the resulting zipped size for + * each language in `clear_cleanup_zipped_size_bytes`. If the cleanup succeeds, also records the + * time spent taking the measurement in `clear_cleanup_measurement_duration_ms`. + * + * This mutates the entries of `reports` in place. It must run only after all overlay-base uploads + * have completed, since the `clear` cleanup discards overlay data that the uploaded database + * depends on. + * + * Failures here are non-fatal: this is telemetry-only, so we log and move on rather than failing + * the workflow. + */ +async function recordClearCleanupSizes( + codeql: CodeQL, + config: Config, + reports: DatabaseUploadResult[], + logger: Logger, +): Promise { + // Include both the cleanup and the re-bundling to record how much time taking this measurement adds + // to the run. + const startTime = performance.now(); + + try { + await codeql.databaseCleanupCluster(config, CleanupLevel.Clear); + } catch (e) { + // The cleanup didn't run, so there are no sizes to measure. Return without recording a + // duration, so that we don't report a measurement duration with no accompanying sizes. + logger.warning( + `Failed to clean up databases at the '${CleanupLevel.Clear}' level for ` + + `size measurement: ${util.getErrorMessage(e)}`, + ); + return; + } + + for (const language of config.languages) { + const report = reports.find((r) => r.language === language); + if (report === undefined) { + continue; + } + try { + const bundledDb = await bundleDb(config, language, codeql, language, { + includeDiagnostics: false, + }); + report.clear_cleanup_zipped_size_bytes = fs.statSync(bundledDb).size; + logger.debug( + `Database for ${language} is ` + + `${report.clear_cleanup_zipped_size_bytes} bytes zipped at the ` + + `'${CleanupLevel.Clear}' cleanup level ` + + `(vs. ${report.zipped_upload_size_bytes ?? "unknown"} bytes at the ` + + `'${CleanupLevel.Overlay}' level).`, + ); + } catch (e) { + logger.warning( + `Failed to measure the '${CleanupLevel.Clear}' cleanup database size ` + + `for ${language}: ${util.getErrorMessage(e)}`, + ); + } + } + + const durationMs = performance.now() - startTime; + for (const report of reports) { + report.clear_cleanup_measurement_duration_ms = durationMs; + } +} + /** * Uploads a bundled database to the GitHub API. * diff --git a/src/feature-flags.ts b/src/feature-flags.ts index 30358c3e2..dcc5c9d7b 100644 --- a/src/feature-flags.ts +++ b/src/feature-flags.ts @@ -74,6 +74,8 @@ export enum Feature { AllowMultipleAnalysisKinds = "allow_multiple_analysis_kinds", AllowToolcacheInput = "allow_toolcache_input", CleanupTrapCaches = "cleanup_trap_caches", + /** Whether to allow the `config-file` input to be specified via a repository property. */ + ConfigFileRepositoryProperty = "config_file_repository_property", CppDependencyInstallation = "cpp_dependency_installation_enabled", CsharpCacheBuildModeNone = "csharp_cache_bmn", CsharpNewCacheKey = "csharp_new_cache_key", @@ -186,6 +188,11 @@ export const featureConfig = { envVar: "CODEQL_ACTION_CLEANUP_TRAP_CACHES", minimumVersion: undefined, }, + [Feature.ConfigFileRepositoryProperty]: { + defaultValue: false, + envVar: "CODEQL_ACTION_CONFIG_FILE_REPOSITORY_PROPERTY", + minimumVersion: undefined, + }, [Feature.CppDependencyInstallation]: { defaultValue: false, envVar: "CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES", diff --git a/src/init-action.ts b/src/init-action.ts index 2908c69e4..acaba701b 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -7,9 +7,9 @@ import * as io from "@actions/io"; import * as semver from "semver"; import { v4 as uuidV4 } from "uuid"; +import { Action, ActionState, runInActions } from "./action-common"; import { FileCmdNotFoundError, - getActionsEnv, getActionVersion, getFileType, getOptionalInput, @@ -56,7 +56,7 @@ import { runDatabaseInitCluster, } from "./init"; import { JavaEnvVars, BuiltInLanguage } from "./languages"; -import { getActionsLogger, Logger, withGroupAsync } from "./logging"; +import { Logger, withGroupAsync } from "./logging"; import { downloadOverlayBaseDatabaseFromCache, OverlayBaseDatabaseDownloadStats, @@ -73,7 +73,6 @@ import { createStatusReportBase, getActionsStatus, sendStatusReport, - sendUnhandledErrorStatusReport, } from "./status-report"; import { ZstdAvailability } from "./tar"; import { ToolsDownloadStatusReport } from "./tools-download"; @@ -99,7 +98,6 @@ import { getOptionalEnvVar, Success, Failure, - getEnv, } from "./util"; import { checkWorkflow } from "./workflow"; @@ -205,12 +203,12 @@ async function sendCompletedStatusReport( } } -async function run(startedAt: Date) { +async function run(actionState: ActionState<["Logger", "Env", "Actions"]>) { // To capture errors appropriately, keep as much code within the try-catch as // possible, and only use safe functions outside. - const logger = getActionsLogger(); - const actionsEnv = getActionsEnv(); + const startedAt = actionState.startedAt; + const logger = actionState.logger; let apiDetails: GitHubApiCombinedDetails; let config: configUtils.Config | undefined; @@ -264,7 +262,11 @@ async function run(startedAt: Date) { core.exportVariable(EnvVar.INIT_ACTION_HAS_RUN, "true"); - configFile = getConfigFileInput(logger, actionsEnv, repositoryProperties); + const actionStateWithFeatures = { ...actionState, features }; + configFile = await getConfigFileInput( + actionStateWithFeatures, + repositoryProperties, + ); // path.resolve() respects the intended semantics of source-root. If // source-root is relative, it is relative to the GITHUB_WORKSPACE. If @@ -362,8 +364,7 @@ async function run(startedAt: Date) { repositoryProperties, ); - const actionState = { logger, env: getEnv(), features }; - config = await initConfig(actionState, { + config = await initConfig(actionStateWithFeatures, { analysisKinds, languagesInput: getOptionalInput("languages"), queriesInput: getOptionalInput("queries"), @@ -848,19 +849,13 @@ async function recordZstdAvailability( ); } +/** Defines the `init` Action. */ +const init: Action = { + name: ActionName.Init, + run, +}; + export async function runWrapper() { - const startedAt = new Date(); - const logger = getActionsLogger(); - try { - await run(startedAt); - } catch (error) { - core.setFailed(`init action failed: ${getErrorMessage(error)}`); - await sendUnhandledErrorStatusReport( - ActionName.Init, - startedAt, - error, - logger, - ); - } + await runInActions(init); await checkForTimeout(); } diff --git a/src/setup-codeql-action.ts b/src/setup-codeql-action.ts index d3e0e7dbc..a6b5f83f5 100644 --- a/src/setup-codeql-action.ts +++ b/src/setup-codeql-action.ts @@ -1,6 +1,7 @@ import * as core from "@actions/core"; import { v4 as uuidV4 } from "uuid"; +import { Action, ActionState, runInActions } from "./action-common"; import { getActionVersion, getOptionalInput, @@ -14,7 +15,7 @@ import { getRawLanguagesNoAutodetect } from "./config-utils"; import { EnvVar } from "./environment"; import { initFeatures } from "./feature-flags"; import { initCodeQL } from "./init"; -import { getActionsLogger, Logger } from "./logging"; +import { Logger } from "./logging"; import { getRepositoryNwo } from "./repository"; import { ToolsSource } from "./setup-codeql"; import { @@ -24,7 +25,6 @@ import { createStatusReportBase, getActionsStatus, sendStatusReport, - sendUnhandledErrorStatusReport, } from "./status-report"; import { ToolsDownloadStatusReport } from "./tools-download"; import { @@ -36,7 +36,6 @@ import { ConfigurationError, wrapError, checkActionVersion, - getErrorMessage, } from "./util"; /** @@ -88,12 +87,13 @@ async function sendCompletedStatusReport( } /** The main behaviour of this action. */ -async function run(startedAt: Date): Promise { +async function run({ + startedAt, + logger, +}: ActionState<["Logger"]>): Promise { // To capture errors appropriately, keep as much code within the try-catch as // possible, and only use safe functions outside. - const logger = getActionsLogger(); - let codeql: CodeQL; let toolsDownloadStatusReport: ToolsDownloadStatusReport | undefined; let toolsFeatureFlagsValid: boolean | undefined; @@ -195,20 +195,14 @@ async function run(startedAt: Date): Promise { ); } +/** Defines the `setup-codeql` Action. */ +const setupCodeQL: Action = { + name: ActionName.SetupCodeQL, + run, +}; + /** Run the action and catch any unhandled errors. */ export async function runWrapper(): Promise { - const startedAt = new Date(); - const logger = getActionsLogger(); - try { - await run(startedAt); - } catch (error) { - core.setFailed(`setup-codeql action failed: ${getErrorMessage(error)}`); - await sendUnhandledErrorStatusReport( - ActionName.SetupCodeQL, - startedAt, - error, - logger, - ); - } + await runInActions(setupCodeQL); await checkForTimeout(); } diff --git a/src/status-report.ts b/src/status-report.ts index a4193540c..a0c0b3ab4 100644 --- a/src/status-report.ts +++ b/src/status-report.ts @@ -47,6 +47,17 @@ export enum ActionName { UploadSarif = "upload-sarif", } +/** + * Maps an `ActionName` to its display name. Usually that is the same, except + * for `ActionName.Analyze` where it is `"analyze"` instead of `"finish"`. + */ +export function getDisplayActionName(actionName: ActionName): string { + if (actionName === ActionName.Analyze) { + return "analyze"; + } + return actionName; +} + /** * @returns a boolean indicating whether the analysis is considered to be first party. * diff --git a/src/testing-utils.ts b/src/testing-utils.ts index 7971f3102..748ce40ea 100644 --- a/src/testing-utils.ts +++ b/src/testing-utils.ts @@ -28,6 +28,7 @@ import { } from "./feature-flags"; import { Logger } from "./logging"; import { OverlayDatabaseMode } from "./overlay/overlay-database-mode"; +import { ActionName } from "./status-report"; import { DEFAULT_DEBUG_ARTIFACT_NAME, DEFAULT_DEBUG_DATABASE_NAME, @@ -190,22 +191,25 @@ export function getTestActionsEnv(): ActionsEnv { } /** For testing purposes, we make all available state features accessible in `TestEnv`. */ -type AllState = ["Logger", "Env", "FeatureFlags"]; +type AllState = ["Logger", "Env", "Actions", "FeatureFlags"]; /** Initialise a fresh `ActionState ` value. */ export function initAllState( overrides?: Partial >, ): ActionState { return { + name: ActionName.Init, + startedAt: new Date(), logger: new RecordingLogger(), env: getTestEnv(), + actions: getTestActionsEnv(), features: createFeatures([]), ...overrides, }; } /** - * Wraps a function that accepts an `ActionEnv` for testing in different environments. + * Wraps a function that accepts an `ActionState` for testing in different environments. */ export class TestEnv< Args extends readonly any[], @@ -214,20 +218,28 @@ export class TestEnv< > { private readonly fn: (state: ActionState , ...args: Args) => R; private args?: Args; + private logger: RecordingLogger; private state: ActionState ; constructor( fn: (state: ActionState , ...args: Args) => R, - args?: Args, - initialState?: ActionState , + cloneFrom?: TestEnv , ) { this.fn = fn; - this.args = args; - this.state = initialState || initAllState(); + this.args = cloneFrom?.args; + this.logger = new RecordingLogger(); + this.state = + cloneFrom !== undefined + ? { ...cloneFrom.state, logger: this.logger } + : initAllState({ logger: this.logger }); } private clone(): TestEnv { - return new TestEnv(this.fn, this.args, { ...this.state }); + return new TestEnv(this.fn, this); + } + + public getLogger(): RecordingLogger { + return this.logger; } public getState(): ActionState { @@ -256,11 +268,17 @@ export class TestEnv< return result; } + public withActions(actions: ActionsEnv): TestEnv { + const result = this.clone(); + result.state.actions = actions; + return result; + } + call(): R { if (!this.args) { throw new Error("Trying to call function in TestEnv without arguments."); } - return this.fn(this.state as ActionState , ...this.args); + return this.fn(this.state as unknown as ActionState , ...this.args); } public passes ( diff --git a/src/upload-sarif-action.ts b/src/upload-sarif-action.ts index bd190f031..214f3bf98 100644 --- a/src/upload-sarif-action.ts +++ b/src/upload-sarif-action.ts @@ -1,17 +1,17 @@ import * as core from "@actions/core"; +import { Action, ActionState, runInActions } from "./action-common"; import * as actionsUtil from "./actions-util"; import { getActionVersion, getTemporaryDirectory } from "./actions-util"; import * as analyses from "./analyses"; import { getGitHubVersion } from "./api-client"; import { initFeatures } from "./feature-flags"; -import { Logger, getActionsLogger } from "./logging"; +import { Logger } from "./logging"; import { getRepositoryNwo } from "./repository"; import { InvalidSarifUploadError } from "./sarif"; import { createStatusReportBase, sendStatusReport, - sendUnhandledErrorStatusReport, StatusReportBase, getActionsStatus, ActionName, @@ -23,7 +23,6 @@ import { ConfigurationError, checkActionVersion, checkDiskUsage, - getErrorMessage, initializeEnvironment, shouldSkipSarifUpload, wrapError, @@ -55,12 +54,9 @@ async function sendSuccessStatusReport( } } -async function run(startedAt: Date) { +async function run({ startedAt, logger }: ActionState<["Logger"]>) { // To capture errors appropriately, keep as much code within the try-catch as // possible, and only use safe functions outside. - - const logger = getActionsLogger(); - try { initializeEnvironment(getActionVersion()); @@ -165,20 +161,12 @@ async function run(startedAt: Date) { } } +/** Defines the `upload-sarif` Action. */ +const uploadSarif: Action = { + name: ActionName.UploadSarif, + run, +}; + export async function runWrapper() { - const startedAt = new Date(); - const logger = getActionsLogger(); - try { - await run(startedAt); - } catch (error) { - core.setFailed( - `codeql/upload-sarif action failed: ${getErrorMessage(error)}`, - ); - await sendUnhandledErrorStatusReport( - ActionName.UploadSarif, - startedAt, - error, - logger, - ); - } + await runInActions(uploadSarif); } diff --git a/src/util.ts b/src/util.ts index ed8daaa08..7f5245660 100644 --- a/src/util.ts +++ b/src/util.ts @@ -740,7 +740,13 @@ export function getBaseDatabaseOidsFilePath(config: Config): string { return path.join(config.dbLocation, BASE_DATABASE_OIDS_FILE_NAME); } -// Create a bundle for the given DB, if it doesn't already exist +/** + * Bundles the database for the given language into a `.zip` file, returning the path to it. + * + * If a bundle for `dbName` already exists (e.g. from an earlier call), it is deleted and + * re-created, so each call produces a fresh bundle reflecting the current database contents and the + * given `includeDiagnostics` value. + */ export async function bundleDb( config: Config, language: Language,