mirror of
https://gitea.com/actions/setup-node.git
synced 2026-08-16 02:21:41 +08:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
395ad32622 | ||
|
|
a4d2e2bbca | ||
|
|
b9b25d45f7 | ||
|
|
633bb92bc0 | ||
|
|
dda4788290 | ||
|
|
2028fbc5c2 | ||
|
|
13427813f7 | ||
|
|
89d709d423 | ||
|
|
cd2651c462 | ||
|
|
a0853c2454 | ||
|
|
b7234cc9fe | ||
|
|
d7a11313b5 | ||
|
|
5e2628c959 |
@@ -16,4 +16,4 @@ jobs:
|
|||||||
name: Basic validation
|
name: Basic validation
|
||||||
uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main
|
uses: actions/reusable-workflows/.github/workflows/basic-validation.yml@main
|
||||||
with:
|
with:
|
||||||
node-version: '20.x'
|
node-version: '24.x'
|
||||||
|
|||||||
@@ -16,4 +16,4 @@ jobs:
|
|||||||
name: Check dist/
|
name: Check dist/
|
||||||
uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main
|
uses: actions/reusable-workflows/.github/workflows/check-dist.yml@main
|
||||||
with:
|
with:
|
||||||
node-version: '20.x'
|
node-version: '24.x'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
- '**.md'
|
- '**.md'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- test-macos-x64-runner
|
- main
|
||||||
- releases/*
|
- releases/*
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Clean global cache
|
- name: Clean global cache
|
||||||
run: npm cache clean --force
|
run: npm cache clean --force
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
@@ -77,7 +77,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Yarn version
|
- name: Yarn version
|
||||||
run: yarn --version
|
run: yarn --version
|
||||||
- name: Generate yarn file
|
- name: Generate yarn file
|
||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Update yarn
|
- name: Update yarn
|
||||||
run: yarn set version 3.6.4
|
run: yarn set version 3.6.4
|
||||||
- name: Yarn version
|
- name: Yarn version
|
||||||
@@ -143,7 +143,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: prepare sub-projects
|
- name: prepare sub-projects
|
||||||
run: __tests__/prepare-yarn-subprojects.sh yarn1
|
run: __tests__/prepare-yarn-subprojects.sh yarn1
|
||||||
@@ -170,7 +170,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: prepare sub-projects
|
- name: prepare sub-projects
|
||||||
run: __tests__/prepare-yarn-subprojects.sh keepcache keepcache
|
run: __tests__/prepare-yarn-subprojects.sh keepcache keepcache
|
||||||
@@ -197,7 +197,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: prepare sub-projects
|
- name: prepare sub-projects
|
||||||
run: __tests__/prepare-yarn-subprojects.sh global
|
run: __tests__/prepare-yarn-subprojects.sh global
|
||||||
@@ -224,7 +224,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: prepare sub-projects
|
- name: prepare sub-projects
|
||||||
run: /bin/bash __tests__/prepare-yarn-subprojects.sh keepcache
|
run: /bin/bash __tests__/prepare-yarn-subprojects.sh keepcache
|
||||||
@@ -253,7 +253,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Create package.json with packageManager field
|
- name: Create package.json with packageManager field
|
||||||
run: |
|
run: |
|
||||||
echo '{ "name": "test-project", "version": "1.0.0", "packageManager": "npm@8.0.0" }' > package.json
|
echo '{ "name": "test-project", "version": "1.0.0", "packageManager": "npm@8.0.0" }' > package.json
|
||||||
@@ -278,7 +278,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Create package.json with devEngines field
|
- name: Create package.json with devEngines field
|
||||||
run: |
|
run: |
|
||||||
echo '{
|
echo '{
|
||||||
|
|||||||
@@ -25,15 +25,15 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
https_proxy: http://squid-proxy:3128
|
https_proxy: http://squid-proxy:3128
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Clear tool cache
|
- name: Clear tool cache
|
||||||
run: rm -rf $RUNNER_TOOL_CACHE/*
|
run: rm -rf $RUNNER_TOOL_CACHE/*
|
||||||
- name: Setup node 14
|
- name: Setup node 24
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
node-version: 14.x
|
node-version: 24.x
|
||||||
- name: Verify node and npm
|
- name: Verify node and npm
|
||||||
run: __tests__/verify-node.sh 14
|
run: __tests__/verify-node.sh 24
|
||||||
|
|
||||||
test-bypass-proxy:
|
test-bypass-proxy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -41,12 +41,12 @@ jobs:
|
|||||||
https_proxy: http://no-such-proxy:3128
|
https_proxy: http://no-such-proxy:3128
|
||||||
no_proxy: api.github.com,github.com,nodejs.org,registry.npmjs.org,*.s3.amazonaws.com,s3.amazonaws.com
|
no_proxy: api.github.com,github.com,nodejs.org,registry.npmjs.org,*.s3.amazonaws.com,s3.amazonaws.com
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Clear tool cache
|
- name: Clear tool cache
|
||||||
run: rm -rf $RUNNER_TOOL_CACHE/*
|
run: rm -rf $RUNNER_TOOL_CACHE/*
|
||||||
- name: Setup node 11
|
- name: Setup node 24
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
node-version: 11
|
node-version: 24
|
||||||
- name: Verify node and npm
|
- name: Verify node and npm
|
||||||
run: __tests__/verify-node.sh 11
|
run: __tests__/verify-node.sh 24
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checking out
|
- name: Checking out
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Publish
|
- name: Publish
|
||||||
id: publish
|
id: publish
|
||||||
uses: actions/publish-immutable-action@v0.0.4
|
uses: actions/publish-immutable-action@v0.0.4
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Update the ${{ env.TAG_NAME }} tag
|
- name: Update the ${{ env.TAG_NAME }} tag
|
||||||
uses: actions/publish-action@v0.3.0
|
uses: actions/publish-action@v0.4.0
|
||||||
with:
|
with:
|
||||||
source-tag: ${{ env.TAG_NAME }}
|
source-tag: ${{ env.TAG_NAME }}
|
||||||
slack-webhook: ${{ secrets.SLACK_WEBHOOK }}
|
slack-webhook: ${{ secrets.SLACK_WEBHOOK }}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
- '**.md'
|
- '**.md'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- test-macos-x64-runner
|
- main
|
||||||
- releases/*
|
- releases/*
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -37,7 +37,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest-large]
|
||||||
node-version: [lts/dubnium, lts/erbium, lts/fermium, lts/*, lts/-1]
|
node-version: [lts/dubnium, lts/erbium, lts/fermium, lts/*, lts/-1]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
'20.0.0-v8-canary20221101e50e45c9f8'
|
'20.0.0-v8-canary20221101e50e45c9f8'
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -84,7 +84,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20-nightly, 25-nightly, 24.0.0-nightly]
|
node-version: [20-nightly, 25-nightly, 24.0.0-nightly]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -104,7 +104,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20.0.0-rc.1, 22.14.0-rc.1, 24.0.0-rc.4]
|
node-version: [20.0.0-rc.1, 22.14.0-rc.1, 24.0.0-rc.4]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -124,7 +124,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20.10.0, 22.0.0, 24.9.0]
|
node-version: [20.10.0, 22.0.0, 24.9.0]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -141,7 +141,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [20, 22, 24]
|
node-version: [20, 22, 24]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node and check latest
|
- name: Setup Node and check latest
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -160,7 +160,7 @@ jobs:
|
|||||||
node-version-file:
|
node-version-file:
|
||||||
[.nvmrc, .tool-versions, .tool-versions-node, package.json]
|
[.nvmrc, .tool-versions, .tool-versions-node, package.json]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup node from node version file
|
- name: Setup node from node version file
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -175,7 +175,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup node from node version file
|
- name: Setup node from node version file
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -190,7 +190,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup node from node version file
|
- name: Setup node from node version file
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -206,7 +206,7 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest, macos-latest-large]
|
||||||
node-version: [17, 19]
|
node-version: [17, 19]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node from dist
|
- name: Setup Node from dist
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -222,7 +222,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest-large]
|
os: [ubuntu-latest, windows-latest, macos-latest-large]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
# test old versions which didn't have npm and layout different
|
# test old versions which didn't have npm and layout different
|
||||||
- name: Setup node 0.12.18 from dist
|
- name: Setup node 0.12.18 from dist
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -235,7 +235,7 @@ jobs:
|
|||||||
arch:
|
arch:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup node 20 x86 from dist
|
- name: Setup node 20 x86 from dist
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -259,7 +259,7 @@ jobs:
|
|||||||
echo "LATEST_NODE_VERSION=$latestNodeVersion" >> $GITHUB_OUTPUT
|
echo "LATEST_NODE_VERSION=$latestNodeVersion" >> $GITHUB_OUTPUT
|
||||||
id: version
|
id: version
|
||||||
shell: bash
|
shell: bash
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
|
|||||||
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
@@ -12,13 +12,29 @@ This action provides the following functionality for GitHub Actions users:
|
|||||||
- Registering problem matchers for error output
|
- Registering problem matchers for error output
|
||||||
- Configuring authentication for GPR or npm
|
- Configuring authentication for GPR or npm
|
||||||
|
|
||||||
|
## Breaking changes in V6
|
||||||
|
|
||||||
|
- Caching is now automatically enabled for npm projects when either the `devEngines.packageManager` field or the top-level `packageManager` field in `package.json` is set to `npm`. For other package managers, such as Yarn and pnpm, caching is disabled by default and must be configured manually using the `cache` input.
|
||||||
|
|
||||||
|
- The `always-auth` input has been removed, as it is deprecated and will no longer be supported in future npm releases. To ensure your workflows continue to run without warnings or errors, please remove any references to `always-auth` from your configuration.
|
||||||
|
|
||||||
|
## Breaking changes in V5
|
||||||
|
|
||||||
|
- Enabled caching by default with package manager detection if no cache input is provided.
|
||||||
|
> For workflows with elevated privileges or access to sensitive information, we recommend disabling automatic caching by setting `package-manager-cache: false` when caching is not needed for secure operation.
|
||||||
|
|
||||||
|
- Upgraded action from node20 to node24.
|
||||||
|
> Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release. [See Release Notes](https://github.com/actions/runner/releases/tag/v2.327.1)
|
||||||
|
|
||||||
|
For more details, see the full release notes on the [releases page](https://github.com/actions/setup-node/releases/v5.0.0)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
See [action.yml](action.yml)
|
See [action.yml](action.yml)
|
||||||
|
|
||||||
<!-- start usage -->
|
<!-- start usage -->
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
# Version Spec of the version to use in SemVer notation.
|
# Version Spec of the version to use in SemVer notation.
|
||||||
# It also admits such aliases as lts/*, latest, nightly and canary builds
|
# It also admits such aliases as lts/*, latest, nightly and canary builds
|
||||||
@@ -57,6 +73,11 @@ See [action.yml](action.yml)
|
|||||||
# Default: ''
|
# Default: ''
|
||||||
cache: ''
|
cache: ''
|
||||||
|
|
||||||
|
# Controls automatic caching for npm. By default, caching for npm is enabled if either the devEngines.packageManager field or the top-level packageManager field in package.json specifies npm and no explicit cache input is provided.
|
||||||
|
# To disable automatic caching for npm, set package-manager-cache to false.
|
||||||
|
# default: true
|
||||||
|
package-manager-cache: true
|
||||||
|
|
||||||
# Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc.
|
# Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc.
|
||||||
# It will generate hash from the target file for primary key. It works only If cache is specified.
|
# It will generate hash from the target file for primary key. It works only If cache is specified.
|
||||||
# Supports wildcards or a list of file names for caching multiple dependencies.
|
# Supports wildcards or a list of file names for caching multiple dependencies.
|
||||||
@@ -73,10 +94,6 @@ See [action.yml](action.yml)
|
|||||||
# Default: ''
|
# Default: ''
|
||||||
scope: ''
|
scope: ''
|
||||||
|
|
||||||
# Set always-auth option in npmrc file.
|
|
||||||
# Default: ''
|
|
||||||
always-auth: ''
|
|
||||||
|
|
||||||
# Optional mirror to download binaries from.
|
# Optional mirror to download binaries from.
|
||||||
# Artifacts need to match the official Node.js
|
# Artifacts need to match the official Node.js
|
||||||
# Example:
|
# Example:
|
||||||
@@ -98,10 +115,10 @@ See [action.yml](action.yml)
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 24
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -118,9 +135,9 @@ The `node-version` input supports the Semantic Versioning Specification, for mor
|
|||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
- Major versions: `18`, `20`
|
- Major versions: `22`, `24`
|
||||||
- More specific versions: `10.15`, `16.15.1` , `18.4.0`
|
- More specific versions: `20.19`, `22.17.1` , `24.8.0`
|
||||||
- NVM LTS syntax: `lts/erbium`, `lts/fermium`, `lts/*`, `lts/-n`
|
- NVM LTS syntax: `lts/iron`, `lts/jod`, `lts/*`, `lts/-n`
|
||||||
- Latest release: `*` or `latest`/`current`/`node`
|
- Latest release: `*` or `latest`/`current`/`node`
|
||||||
|
|
||||||
**Note:** Like the other values, `*` will get the latest [locally-cached Node.js version](https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md#nodejs), or the latest version from [actions/node-versions](https://github.com/actions/node-versions/blob/main/versions-manifest.json), depending on the [`check-latest`](docs/advanced-usage.md#check-latest-version) input.
|
**Note:** Like the other values, `*` will get the latest [locally-cached Node.js version](https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md#nodejs), or the latest version from [actions/node-versions](https://github.com/actions/node-versions/blob/main/versions-manifest.json), depending on the [`check-latest`](docs/advanced-usage.md#check-latest-version) input.
|
||||||
@@ -135,7 +152,7 @@ It's **always** recommended to commit the lockfile of your package manager for s
|
|||||||
|
|
||||||
## Caching global packages data
|
## Caching global packages data
|
||||||
|
|
||||||
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under the hood for caching global packages data but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+). The `cache` input is optional, and caching is turned off by default.
|
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under the hood for caching global packages data but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+). The `cache` input is optional.
|
||||||
|
|
||||||
The action defaults to search for the dependency file (`package-lock.json`, `npm-shrinkwrap.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
|
The action defaults to search for the dependency file (`package-lock.json`, `npm-shrinkwrap.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
|
||||||
|
|
||||||
@@ -147,10 +164,10 @@ See the examples of using cache for `yarn`/`pnpm` and `cache-dependency-path` in
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 24
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
@@ -160,16 +177,30 @@ steps:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 24
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
cache-dependency-path: subdir/package-lock.json
|
cache-dependency-path: subdir/package-lock.json
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Caching for npm dependencies is automatically enabled when your `package.json` contains either `devEngines.packageManager` field or top-level `packageManager` field set to `npm`, and no explicit cache input is provided.
|
||||||
|
|
||||||
|
This behavior is controlled by the `package-manager-cache` input, which defaults to `true`. To turn off automatic caching, set `package-manager-cache` to `false`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
package-manager-cache: false
|
||||||
|
- run: npm ci
|
||||||
|
```
|
||||||
|
> If your `package.json` file does not include a `packageManager` field set to `npm`, caching will be disabled unless you explicitly enable it. For workflows with elevated privileges or access to sensitive information, we recommend disabling automatic caching for npm by setting `package-manager-cache: false` when caching is not required for secure operation.
|
||||||
|
|
||||||
## Matrix Testing
|
## Matrix Testing
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -178,12 +209,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node: [ 14, 16, 18 ]
|
node: [ 20, 22, 24 ]
|
||||||
name: Node ${{ matrix.node }} sample
|
name: Node ${{ matrix.node }} sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup node
|
- name: Setup node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node }}
|
node-version: ${{ matrix.node }}
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
@@ -197,10 +228,10 @@ jobs:
|
|||||||
To get a higher rate limit, you can [generate a personal access token on github.com](https://github.com/settings/tokens/new) and pass it as the `token` input for the action:
|
To get a higher rate limit, you can [generate a personal access token on github.com](https://github.com/settings/tokens/new) and pass it as the `token` input for the action:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_DOTCOM_TOKEN }}
|
token: ${{ secrets.GH_DOTCOM_TOKEN }}
|
||||||
node-version: 20
|
node-version: 24
|
||||||
```
|
```
|
||||||
|
|
||||||
If the runner is not able to access github.com, any Nodejs versions requested during a workflow run must come from the runner's tool cache. See "[Setting up the tool cache on self-hosted runners without internet access](https://docs.github.com/en/enterprise-server@3.2/admin/github-actions/managing-access-to-actions-from-githubcom/setting-up-the-tool-cache-on-self-hosted-runners-without-internet-access)" for more information.
|
If the runner is not able to access github.com, any Nodejs versions requested during a workflow run must come from the runner's tool cache. See "[Setting up the tool cache on self-hosted runners without internet access](https://docs.github.com/en/enterprise-server@3.2/admin/github-actions/managing-access-to-actions-from-githubcom/setting-up-the-tool-cache-on-self-hosted-runners-without-internet-access)" for more information.
|
||||||
|
|||||||
+21
-34
@@ -76,115 +76,102 @@ describe('authutil tests', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
it('Sets up npmrc for npmjs', async () => {
|
it('Sets up npmrc for npmjs', async () => {
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'false');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
expect(fs.statSync(rcFile)).toBeDefined();
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
const rc = readRcFile(rcFile);
|
const rc = readRcFile(rcFile);
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Appends trailing slash to registry', async () => {
|
it('Appends trailing slash to registry', async () => {
|
||||||
await auth.configAuthentication('https://registry.npmjs.org', 'false');
|
await auth.configAuthentication('https://registry.npmjs.org');
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
expect(fs.statSync(rcFile)).toBeDefined();
|
||||||
const rc = readRcFile(rcFile);
|
const rc = readRcFile(rcFile);
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Configures scoped npm registries', async () => {
|
it('Configures scoped npm registries', async () => {
|
||||||
process.env['INPUT_SCOPE'] = 'myScope';
|
process.env['INPUT_SCOPE'] = 'myScope';
|
||||||
await auth.configAuthentication('https://registry.npmjs.org', 'false');
|
await auth.configAuthentication('https://registry.npmjs.org');
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
expect(fs.statSync(rcFile)).toBeDefined();
|
||||||
const rc = readRcFile(rcFile);
|
const rc = readRcFile(rcFile);
|
||||||
expect(rc['@myscope:registry']).toBe('https://registry.npmjs.org/');
|
expect(rc['@myscope:registry']).toBe('https://registry.npmjs.org/');
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Automatically configures GPR scope', async () => {
|
it('Automatically configures GPR scope', async () => {
|
||||||
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
await auth.configAuthentication('npm.pkg.github.com');
|
||||||
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
expect(fs.statSync(rcFile)).toBeDefined();
|
||||||
const rc = readRcFile(rcFile);
|
const rc = readRcFile(rcFile);
|
||||||
expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/');
|
expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/');
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Sets up npmrc for always-auth true', async () => {
|
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
|
||||||
const rc = readRcFile(rcFile);
|
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
|
||||||
expect(rc['always-auth']).toBe('true');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('is already set the NODE_AUTH_TOKEN export it', async () => {
|
it('is already set the NODE_AUTH_TOKEN export it', async () => {
|
||||||
process.env.NODE_AUTH_TOKEN = 'foobar';
|
process.env.NODE_AUTH_TOKEN = 'foobar';
|
||||||
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
await auth.configAuthentication('npm.pkg.github.com');
|
||||||
expect(fs.statSync(rcFile)).toBeDefined();
|
expect(fs.statSync(rcFile)).toBeDefined();
|
||||||
const rc = readRcFile(rcFile);
|
const rc = readRcFile(rcFile);
|
||||||
expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/');
|
expect(rc['@ownername:registry']).toBe('npm.pkg.github.com/');
|
||||||
expect(rc['always-auth']).toBe('false');
|
|
||||||
expect(process.env.NODE_AUTH_TOKEN).toEqual('foobar');
|
expect(process.env.NODE_AUTH_TOKEN).toEqual('foobar');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should overwrite non-scoped with non-scoped', async () => {
|
it('configAuthentication should overwrite non-scoped with non-scoped', async () => {
|
||||||
fs.writeFileSync(rcFile, 'registry=NNN');
|
fs.writeFileSync(rcFile, 'registry=NNN');
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should overwrite only non-scoped', async () => {
|
it('configAuthentication should overwrite only non-scoped', async () => {
|
||||||
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`@myscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`@myscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should add non-scoped to scoped', async () => {
|
it('configAuthentication should add non-scoped to scoped', async () => {
|
||||||
fs.writeFileSync(rcFile, '@myscope:registry=NNN');
|
fs.writeFileSync(rcFile, '@myscope:registry=NNN');
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`@myscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`@myscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should overwrite scoped with scoped', async () => {
|
it('configAuthentication should overwrite scoped with scoped', async () => {
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
fs.writeFileSync(rcFile, `@myscope:registry=NNN`);
|
fs.writeFileSync(rcFile, `@myscope:registry=NNN`);
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should overwrite only scoped', async () => {
|
it('configAuthentication should overwrite only scoped', async () => {
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should add scoped to non-scoped', async () => {
|
it('configAuthentication should add scoped to non-scoped', async () => {
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
fs.writeFileSync(rcFile, `registry=MMM`);
|
fs.writeFileSync(rcFile, `registry=MMM`);
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -194,20 +181,20 @@ describe('authutil tests', () => {
|
|||||||
rcFile,
|
rcFile,
|
||||||
`@otherscope:registry=NNN${os.EOL}@myscope:registry=MMM`
|
`@otherscope:registry=NNN${os.EOL}@myscope:registry=MMM`
|
||||||
);
|
);
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`@otherscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`@otherscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('configAuthentication should add scoped to another scoped', async () => {
|
it('configAuthentication should add scoped to another scoped', async () => {
|
||||||
process.env['INPUT_SCOPE'] = 'myscope';
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
fs.writeFileSync(rcFile, `@otherscope:registry=MMM`);
|
fs.writeFileSync(rcFile, `@otherscope:registry=MMM`);
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
await auth.configAuthentication('https://registry.npmjs.org/');
|
||||||
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
const contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
expect(contents).toBe(
|
expect(contents).toBe(
|
||||||
`@otherscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
`@otherscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -227,7 +227,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '11.15.0';
|
const versionSpec = '11.15.0';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -283,7 +282,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '19.0.0-v8-canary';
|
const versionSpec = '19.0.0-v8-canary';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
findSpy.mockImplementation(() => '');
|
||||||
@@ -324,7 +322,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = version;
|
inputs['node-version'] = version;
|
||||||
inputs['architecture'] = arch;
|
inputs['architecture'] = arch;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
const expectedUrl = `https://nodejs.org/download/v8-canary/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
const expectedUrl = `https://nodejs.org/download/v8-canary/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
||||||
@@ -569,7 +566,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = 'v20-v8-canary';
|
const versionSpec = 'v20-v8-canary';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
os.platform = 'linux';
|
os.platform = 'linux';
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v20
|
v24
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
nodejs 20.0.0
|
nodejs 24.0.0
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
node 20.0.0
|
node 24.0.0
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
"node": "^14.0.0"
|
"node": "^14.0.0"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "20.0.0"
|
"node": "24.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^20.0.0"
|
"node": "^24.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ describe('main tests', () => {
|
|||||||
|
|
||||||
let infoSpy: jest.SpyInstance;
|
let infoSpy: jest.SpyInstance;
|
||||||
let warningSpy: jest.SpyInstance;
|
let warningSpy: jest.SpyInstance;
|
||||||
|
let saveStateSpy: jest.SpyInstance;
|
||||||
let inSpy: jest.SpyInstance;
|
let inSpy: jest.SpyInstance;
|
||||||
let setOutputSpy: jest.SpyInstance;
|
let setOutputSpy: jest.SpyInstance;
|
||||||
let startGroupSpy: jest.SpyInstance;
|
let startGroupSpy: jest.SpyInstance;
|
||||||
@@ -53,6 +54,8 @@ describe('main tests', () => {
|
|||||||
setOutputSpy.mockImplementation(() => {});
|
setOutputSpy.mockImplementation(() => {});
|
||||||
warningSpy = jest.spyOn(core, 'warning');
|
warningSpy = jest.spyOn(core, 'warning');
|
||||||
warningSpy.mockImplementation(() => {});
|
warningSpy.mockImplementation(() => {});
|
||||||
|
saveStateSpy = jest.spyOn(core, 'saveState');
|
||||||
|
saveStateSpy.mockImplementation(() => {});
|
||||||
startGroupSpy = jest.spyOn(core, 'startGroup');
|
startGroupSpy = jest.spyOn(core, 'startGroup');
|
||||||
startGroupSpy.mockImplementation(() => {});
|
startGroupSpy.mockImplementation(() => {});
|
||||||
endGroupSpy = jest.spyOn(core, 'endGroup');
|
endGroupSpy = jest.spyOn(core, 'endGroup');
|
||||||
@@ -280,4 +283,149 @@ describe('main tests', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('cache feature tests', () => {
|
||||||
|
it('Should enable caching when packageManager is npm and cache input is not provided', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
isCacheActionAvailable.mockImplementation(() => true);
|
||||||
|
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
packageManager: 'npm@10.8.2'
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).toHaveBeenCalledWith(expect.anything(), 'npm');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should enable caching when devEngines.packageManager.name is "npm" and cache input is not provided', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
isCacheActionAvailable.mockImplementation(() => true);
|
||||||
|
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
devEngines: {
|
||||||
|
packageManager: {name: 'npm'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).toHaveBeenCalledWith(expect.anything(), 'npm');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should enable caching when devEngines.packageManager is array and one entry has name "npm"', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
isCacheActionAvailable.mockImplementation(() => true);
|
||||||
|
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
devEngines: {
|
||||||
|
packageManager: [{name: 'pnpm'}, {name: 'npm'}]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).toHaveBeenCalledWith(expect.anything(), 'npm');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should not enable caching if packageManager is "pnpm@8.0.0" and cache input is not provided', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
packageManager: 'pnpm@8.0.0'
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should not enable caching if devEngines.packageManager.name is "pnpm"', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
devEngines: {
|
||||||
|
packageManager: {name: 'pnpm'}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should not enable caching if devEngines.packageManager is array without "npm"', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
devEngines: {
|
||||||
|
packageManager: [{name: 'pnpm'}, {name: 'yarn'}]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should not enable caching if packageManager field is missing in package.json and cache input is not provided', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
const readFileSpy = jest.spyOn(fs, 'readFileSync');
|
||||||
|
readFileSpy.mockImplementation(() =>
|
||||||
|
JSON.stringify({
|
||||||
|
// packageManager field is not present
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
await main.run();
|
||||||
|
|
||||||
|
expect(saveStateSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should skip caching when package-manager-cache is false', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'false';
|
||||||
|
inputs['cache'] = '';
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
await main.run();
|
||||||
|
expect(saveStateSpy).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should enable caching with cache input explicitly provided', async () => {
|
||||||
|
inputs['package-manager-cache'] = 'true';
|
||||||
|
inputs['cache'] = 'npm';
|
||||||
|
inSpy.mockImplementation(name => inputs[name]);
|
||||||
|
isCacheActionAvailable.mockImplementation(() => true);
|
||||||
|
await main.run();
|
||||||
|
expect(saveStateSpy).toHaveBeenCalledWith(expect.anything(), 'npm');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -255,7 +255,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '13.13.1-nightly20200415947ddec091';
|
const versionSpec = '13.13.1-nightly20200415947ddec091';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -291,7 +290,6 @@ describe('setup-node', () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -333,7 +331,6 @@ describe('setup-node', () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -389,7 +386,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '18.0.0-nightly202204180699150267';
|
const versionSpec = '18.0.0-nightly202204180699150267';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
findSpy.mockImplementation(() => '');
|
||||||
@@ -427,7 +423,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = version;
|
inputs['node-version'] = version;
|
||||||
inputs['architecture'] = arch;
|
inputs['architecture'] = arch;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
const expectedUrl = `https://nodejs.org/download/nightly/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
const expectedUrl = `https://nodejs.org/download/nightly/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
||||||
@@ -473,7 +468,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = version;
|
inputs['node-version'] = version;
|
||||||
inputs['architecture'] = arch;
|
inputs['architecture'] = arch;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
inputs['mirror'] = 'https://my-mirror.org';
|
inputs['mirror'] = 'https://my-mirror.org';
|
||||||
inputs['mirror-token'] = 'my-mirror-token';
|
inputs['mirror-token'] = 'my-mirror-token';
|
||||||
|
|||||||
@@ -235,7 +235,6 @@ describe('setup-node', () => {
|
|||||||
const resolvedVersion = versionSpec;
|
const resolvedVersion = versionSpec;
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
const expectedUrl =
|
const expectedUrl =
|
||||||
@@ -290,7 +289,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '11.15.0';
|
const versionSpec = '11.15.0';
|
||||||
const mirror = 'https://my_mirror_url';
|
const mirror = 'https://my_mirror_url';
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
inputs['mirror'] = mirror;
|
inputs['mirror'] = mirror;
|
||||||
inputs['mirror-token'] = 'faketoken';
|
inputs['mirror-token'] = 'faketoken';
|
||||||
@@ -327,7 +325,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '11.15.0';
|
const versionSpec = '11.15.0';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -385,7 +382,6 @@ describe('setup-node', () => {
|
|||||||
const resolvedVersion = versionSpec;
|
const resolvedVersion = versionSpec;
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
findSpy.mockImplementation(() => '');
|
||||||
@@ -405,7 +401,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '11.15.0';
|
const versionSpec = '11.15.0';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -448,7 +443,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = version;
|
inputs['node-version'] = version;
|
||||||
inputs['architecture'] = arch;
|
inputs['architecture'] = arch;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
const expectedUrl =
|
const expectedUrl =
|
||||||
@@ -560,7 +554,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['check-latest'] = 'true';
|
inputs['check-latest'] = 'true';
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -602,7 +595,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['check-latest'] = 'true';
|
inputs['check-latest'] = 'true';
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -882,7 +874,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = version;
|
inputs['node-version'] = version;
|
||||||
inputs['architecture'] = arch;
|
inputs['architecture'] = arch;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
inputs['mirror'] = 'https://my_mirror_url';
|
inputs['mirror'] = 'https://my_mirror_url';
|
||||||
inputs['mirror-token'] = 'faketoken';
|
inputs['mirror-token'] = 'faketoken';
|
||||||
|
|||||||
@@ -194,7 +194,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '13.0.0-rc.0';
|
const versionSpec = '13.0.0-rc.0';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
// ... but not in the local cache
|
// ... but not in the local cache
|
||||||
@@ -239,7 +238,6 @@ describe('setup-node', () => {
|
|||||||
const versionSpec = '14.7.0-rc.1';
|
const versionSpec = '14.7.0-rc.1';
|
||||||
|
|
||||||
inputs['node-version'] = versionSpec;
|
inputs['node-version'] = versionSpec;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
findSpy.mockImplementation(() => '');
|
findSpy.mockImplementation(() => '');
|
||||||
@@ -268,7 +266,6 @@ describe('setup-node', () => {
|
|||||||
|
|
||||||
inputs['node-version'] = version;
|
inputs['node-version'] = version;
|
||||||
inputs['architecture'] = arch;
|
inputs['architecture'] = arch;
|
||||||
inputs['always-auth'] = false;
|
|
||||||
inputs['token'] = 'faketoken';
|
inputs['token'] = 'faketoken';
|
||||||
|
|
||||||
const expectedUrl = `https://nodejs.org/download/rc/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
const expectedUrl = `https://nodejs.org/download/rc/v${version}/node-v${version}-${platform}-${arch}.${fileExtension}`;
|
||||||
|
|||||||
@@ -7,8 +7,13 @@ fi
|
|||||||
|
|
||||||
node_version="$(node --version)"
|
node_version="$(node --version)"
|
||||||
echo "Found node version '$node_version'"
|
echo "Found node version '$node_version'"
|
||||||
if [ -z "$(echo $node_version | grep --fixed-strings v$1)" ]; then
|
|
||||||
echo "Unexpected version"
|
# Extract the major version from the node version (remove the 'v' prefix)
|
||||||
|
actual_major_version=$(echo $node_version | sed -E 's/^v([0-9]+)\..*/\1/')
|
||||||
|
expected_major_version=$(echo $1 | sed -E 's/^([0-9]+)\..*/\1/') # Extract major version from argument
|
||||||
|
|
||||||
|
if [ "$actual_major_version" != "$expected_major_version" ]; then
|
||||||
|
echo "Expected Node.js $expected_major_version.x.x but found $node_version"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -2,9 +2,6 @@ name: 'Setup Node.js environment'
|
|||||||
description: 'Setup a Node.js environment by adding problem matchers and optionally downloading and adding it to the PATH.'
|
description: 'Setup a Node.js environment by adding problem matchers and optionally downloading and adding it to the PATH.'
|
||||||
author: 'GitHub'
|
author: 'GitHub'
|
||||||
inputs:
|
inputs:
|
||||||
always-auth:
|
|
||||||
description: 'Set always-auth in npmrc.'
|
|
||||||
default: 'false'
|
|
||||||
node-version:
|
node-version:
|
||||||
description: 'Version Spec of the version to use. Examples: 12.x, 10.15.1, >=10.15.0.'
|
description: 'Version Spec of the version to use. Examples: 12.x, 10.15.1, >=10.15.0.'
|
||||||
node-version-file:
|
node-version-file:
|
||||||
@@ -23,6 +20,9 @@ inputs:
|
|||||||
default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
||||||
cache:
|
cache:
|
||||||
description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.'
|
description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.'
|
||||||
|
package-manager-cache:
|
||||||
|
description: 'Set to false to disable automatic caching. By default, caching is enabled when either devEngines.packageManager or the top-level packageManager field in package.json specifies npm as the package manager.'
|
||||||
|
default: true
|
||||||
cache-dependency-path:
|
cache-dependency-path:
|
||||||
description: 'Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies.'
|
description: 'Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies.'
|
||||||
mirror:
|
mirror:
|
||||||
@@ -37,7 +37,7 @@ outputs:
|
|||||||
node-version:
|
node-version:
|
||||||
description: 'The installed node version.'
|
description: 'The installed node version.'
|
||||||
runs:
|
runs:
|
||||||
using: 'node20'
|
using: 'node24'
|
||||||
main: 'dist/setup/index.js'
|
main: 'dist/setup/index.js'
|
||||||
post: 'dist/cache-save/index.js'
|
post: 'dist/cache-save/index.js'
|
||||||
post-if: success()
|
post-if: success()
|
||||||
|
|||||||
Vendored
+1306
-161
@@ -39,7 +39,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.saveCache = exports.restoreCache = exports.isFeatureAvailable = exports.ReserveCacheError = exports.ValidationError = void 0;
|
exports.saveCache = exports.restoreCache = exports.isFeatureAvailable = exports.FinalizeCacheError = exports.ReserveCacheError = exports.ValidationError = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(7484));
|
const core = __importStar(__nccwpck_require__(7484));
|
||||||
const path = __importStar(__nccwpck_require__(6928));
|
const path = __importStar(__nccwpck_require__(6928));
|
||||||
const utils = __importStar(__nccwpck_require__(680));
|
const utils = __importStar(__nccwpck_require__(680));
|
||||||
@@ -47,7 +47,7 @@ const cacheHttpClient = __importStar(__nccwpck_require__(5552));
|
|||||||
const cacheTwirpClient = __importStar(__nccwpck_require__(6819));
|
const cacheTwirpClient = __importStar(__nccwpck_require__(6819));
|
||||||
const config_1 = __nccwpck_require__(7606);
|
const config_1 = __nccwpck_require__(7606);
|
||||||
const tar_1 = __nccwpck_require__(5321);
|
const tar_1 = __nccwpck_require__(5321);
|
||||||
const constants_1 = __nccwpck_require__(8287);
|
const http_client_1 = __nccwpck_require__(4844);
|
||||||
class ValidationError extends Error {
|
class ValidationError extends Error {
|
||||||
constructor(message) {
|
constructor(message) {
|
||||||
super(message);
|
super(message);
|
||||||
@@ -64,6 +64,14 @@ class ReserveCacheError extends Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.ReserveCacheError = ReserveCacheError;
|
exports.ReserveCacheError = ReserveCacheError;
|
||||||
|
class FinalizeCacheError extends Error {
|
||||||
|
constructor(message) {
|
||||||
|
super(message);
|
||||||
|
this.name = 'FinalizeCacheError';
|
||||||
|
Object.setPrototypeOf(this, FinalizeCacheError.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.FinalizeCacheError = FinalizeCacheError;
|
||||||
function checkPaths(paths) {
|
function checkPaths(paths) {
|
||||||
if (!paths || paths.length === 0) {
|
if (!paths || paths.length === 0) {
|
||||||
throw new ValidationError(`Path Validation Error: At least one directory or file path is required`);
|
throw new ValidationError(`Path Validation Error: At least one directory or file path is required`);
|
||||||
@@ -84,7 +92,17 @@ function checkKey(key) {
|
|||||||
* @returns boolean return true if Actions cache service feature is available, otherwise false
|
* @returns boolean return true if Actions cache service feature is available, otherwise false
|
||||||
*/
|
*/
|
||||||
function isFeatureAvailable() {
|
function isFeatureAvailable() {
|
||||||
|
const cacheServiceVersion = (0, config_1.getCacheServiceVersion)();
|
||||||
|
// Check availability based on cache service version
|
||||||
|
switch (cacheServiceVersion) {
|
||||||
|
case 'v2':
|
||||||
|
// For v2, we need ACTIONS_RESULTS_URL
|
||||||
|
return !!process.env['ACTIONS_RESULTS_URL'];
|
||||||
|
case 'v1':
|
||||||
|
default:
|
||||||
|
// For v1, we only need ACTIONS_CACHE_URL
|
||||||
return !!process.env['ACTIONS_CACHE_URL'];
|
return !!process.env['ACTIONS_CACHE_URL'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exports.isFeatureAvailable = isFeatureAvailable;
|
exports.isFeatureAvailable = isFeatureAvailable;
|
||||||
/**
|
/**
|
||||||
@@ -169,10 +187,18 @@ function restoreCacheV1(paths, primaryKey, restoreKeys, options, enableCrossOsAr
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Supress all non-validation cache related errors because caching should be optional
|
// warn on cache restore failure and continue build
|
||||||
|
// Log server errors (5xx) as errors, all other errors as warnings
|
||||||
|
if (typedError instanceof http_client_1.HttpClientError &&
|
||||||
|
typeof typedError.statusCode === 'number' &&
|
||||||
|
typedError.statusCode >= 500) {
|
||||||
|
core.error(`Failed to restore: ${error.message}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
core.warning(`Failed to restore: ${error.message}`);
|
core.warning(`Failed to restore: ${error.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
finally {
|
finally {
|
||||||
// Try to delete the archive to save space
|
// Try to delete the archive to save space
|
||||||
try {
|
try {
|
||||||
@@ -223,7 +249,13 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr
|
|||||||
core.debug(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`);
|
core.debug(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
core.info(`Cache hit for: ${request.key}`);
|
const isRestoreKeyMatch = request.key !== response.matchedKey;
|
||||||
|
if (isRestoreKeyMatch) {
|
||||||
|
core.info(`Cache hit for restore-key: ${response.matchedKey}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
core.info(`Cache hit for: ${response.matchedKey}`);
|
||||||
|
}
|
||||||
if (options === null || options === void 0 ? void 0 : options.lookupOnly) {
|
if (options === null || options === void 0 ? void 0 : options.lookupOnly) {
|
||||||
core.info('Lookup only - skipping download');
|
core.info('Lookup only - skipping download');
|
||||||
return response.matchedKey;
|
return response.matchedKey;
|
||||||
@@ -248,9 +280,17 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Supress all non-validation cache related errors because caching should be optional
|
// Supress all non-validation cache related errors because caching should be optional
|
||||||
|
// Log server errors (5xx) as errors, all other errors as warnings
|
||||||
|
if (typedError instanceof http_client_1.HttpClientError &&
|
||||||
|
typeof typedError.statusCode === 'number' &&
|
||||||
|
typedError.statusCode >= 500) {
|
||||||
|
core.error(`Failed to restore: ${error.message}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
core.warning(`Failed to restore: ${error.message}`);
|
core.warning(`Failed to restore: ${error.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
finally {
|
finally {
|
||||||
try {
|
try {
|
||||||
if (archivePath) {
|
if (archivePath) {
|
||||||
@@ -350,10 +390,18 @@ function saveCacheV1(paths, key, options, enableCrossOsArchive = false) {
|
|||||||
else if (typedError.name === ReserveCacheError.name) {
|
else if (typedError.name === ReserveCacheError.name) {
|
||||||
core.info(`Failed to save: ${typedError.message}`);
|
core.info(`Failed to save: ${typedError.message}`);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// Log server errors (5xx) as errors, all other errors as warnings
|
||||||
|
if (typedError instanceof http_client_1.HttpClientError &&
|
||||||
|
typeof typedError.statusCode === 'number' &&
|
||||||
|
typedError.statusCode >= 500) {
|
||||||
|
core.error(`Failed to save: ${typedError.message}`);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
core.warning(`Failed to save: ${typedError.message}`);
|
core.warning(`Failed to save: ${typedError.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
finally {
|
finally {
|
||||||
// Try to delete the archive to save space
|
// Try to delete the archive to save space
|
||||||
try {
|
try {
|
||||||
@@ -400,10 +448,6 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) {
|
|||||||
}
|
}
|
||||||
const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath);
|
const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath);
|
||||||
core.debug(`File Size: ${archiveFileSize}`);
|
core.debug(`File Size: ${archiveFileSize}`);
|
||||||
// For GHES, this check will take place in ReserveCache API with enterprise file size limit
|
|
||||||
if (archiveFileSize > constants_1.CacheFileSizeLimit && !(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.`);
|
|
||||||
}
|
|
||||||
// Set the archive size in the options, will be used to display the upload progress
|
// Set the archive size in the options, will be used to display the upload progress
|
||||||
options.archiveSizeBytes = archiveFileSize;
|
options.archiveSizeBytes = archiveFileSize;
|
||||||
core.debug('Reserving Cache');
|
core.debug('Reserving Cache');
|
||||||
@@ -416,7 +460,10 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) {
|
|||||||
try {
|
try {
|
||||||
const response = yield twirpClient.CreateCacheEntry(request);
|
const response = yield twirpClient.CreateCacheEntry(request);
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error('Response was not ok');
|
if (response.message) {
|
||||||
|
core.warning(`Cache reservation failed: ${response.message}`);
|
||||||
|
}
|
||||||
|
throw new Error(response.message || 'Response was not ok');
|
||||||
}
|
}
|
||||||
signedUploadUrl = response.signedUploadUrl;
|
signedUploadUrl = response.signedUploadUrl;
|
||||||
}
|
}
|
||||||
@@ -434,6 +481,9 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) {
|
|||||||
const finalizeResponse = yield twirpClient.FinalizeCacheEntryUpload(finalizeRequest);
|
const finalizeResponse = yield twirpClient.FinalizeCacheEntryUpload(finalizeRequest);
|
||||||
core.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`);
|
core.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`);
|
||||||
if (!finalizeResponse.ok) {
|
if (!finalizeResponse.ok) {
|
||||||
|
if (finalizeResponse.message) {
|
||||||
|
throw new FinalizeCacheError(finalizeResponse.message);
|
||||||
|
}
|
||||||
throw new Error(`Unable to finalize cache with key ${key}, another job may be finalizing this cache.`);
|
throw new Error(`Unable to finalize cache with key ${key}, another job may be finalizing this cache.`);
|
||||||
}
|
}
|
||||||
cacheId = parseInt(finalizeResponse.entryId);
|
cacheId = parseInt(finalizeResponse.entryId);
|
||||||
@@ -446,10 +496,21 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) {
|
|||||||
else if (typedError.name === ReserveCacheError.name) {
|
else if (typedError.name === ReserveCacheError.name) {
|
||||||
core.info(`Failed to save: ${typedError.message}`);
|
core.info(`Failed to save: ${typedError.message}`);
|
||||||
}
|
}
|
||||||
|
else if (typedError.name === FinalizeCacheError.name) {
|
||||||
|
core.warning(typedError.message);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Log server errors (5xx) as errors, all other errors as warnings
|
||||||
|
if (typedError instanceof http_client_1.HttpClientError &&
|
||||||
|
typeof typedError.statusCode === 'number' &&
|
||||||
|
typedError.statusCode >= 500) {
|
||||||
|
core.error(`Failed to save: ${typedError.message}`);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
core.warning(`Failed to save: ${typedError.message}`);
|
core.warning(`Failed to save: ${typedError.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
finally {
|
finally {
|
||||||
// Try to delete the archive to save space
|
// Try to delete the archive to save space
|
||||||
try {
|
try {
|
||||||
@@ -549,11 +610,12 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super("github.actions.results.api.v1.CreateCacheEntryResponse", [
|
super("github.actions.results.api.v1.CreateCacheEntryResponse", [
|
||||||
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
||||||
{ no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
|
{ no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
||||||
|
{ no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
create(value) {
|
create(value) {
|
||||||
const message = { ok: false, signedUploadUrl: "" };
|
const message = { ok: false, signedUploadUrl: "", message: "" };
|
||||||
globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this });
|
globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this });
|
||||||
if (value !== undefined)
|
if (value !== undefined)
|
||||||
(0, runtime_3.reflectionMergePartial)(this, message, value);
|
(0, runtime_3.reflectionMergePartial)(this, message, value);
|
||||||
@@ -570,6 +632,9 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType {
|
|||||||
case /* string signed_upload_url */ 2:
|
case /* string signed_upload_url */ 2:
|
||||||
message.signedUploadUrl = reader.string();
|
message.signedUploadUrl = reader.string();
|
||||||
break;
|
break;
|
||||||
|
case /* string message */ 3:
|
||||||
|
message.message = reader.string();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
let u = options.readUnknownField;
|
let u = options.readUnknownField;
|
||||||
if (u === "throw")
|
if (u === "throw")
|
||||||
@@ -588,6 +653,9 @@ class CreateCacheEntryResponse$Type extends runtime_5.MessageType {
|
|||||||
/* string signed_upload_url = 2; */
|
/* string signed_upload_url = 2; */
|
||||||
if (message.signedUploadUrl !== "")
|
if (message.signedUploadUrl !== "")
|
||||||
writer.tag(2, runtime_1.WireType.LengthDelimited).string(message.signedUploadUrl);
|
writer.tag(2, runtime_1.WireType.LengthDelimited).string(message.signedUploadUrl);
|
||||||
|
/* string message = 3; */
|
||||||
|
if (message.message !== "")
|
||||||
|
writer.tag(3, runtime_1.WireType.LengthDelimited).string(message.message);
|
||||||
let u = options.writeUnknownFields;
|
let u = options.writeUnknownFields;
|
||||||
if (u !== false)
|
if (u !== false)
|
||||||
(u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
(u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||||
@@ -671,11 +739,12 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super("github.actions.results.api.v1.FinalizeCacheEntryUploadResponse", [
|
super("github.actions.results.api.v1.FinalizeCacheEntryUploadResponse", [
|
||||||
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
|
||||||
{ no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ }
|
{ no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ },
|
||||||
|
{ no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
create(value) {
|
create(value) {
|
||||||
const message = { ok: false, entryId: "0" };
|
const message = { ok: false, entryId: "0", message: "" };
|
||||||
globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this });
|
globalThis.Object.defineProperty(message, runtime_4.MESSAGE_TYPE, { enumerable: false, value: this });
|
||||||
if (value !== undefined)
|
if (value !== undefined)
|
||||||
(0, runtime_3.reflectionMergePartial)(this, message, value);
|
(0, runtime_3.reflectionMergePartial)(this, message, value);
|
||||||
@@ -692,6 +761,9 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType {
|
|||||||
case /* int64 entry_id */ 2:
|
case /* int64 entry_id */ 2:
|
||||||
message.entryId = reader.int64().toString();
|
message.entryId = reader.int64().toString();
|
||||||
break;
|
break;
|
||||||
|
case /* string message */ 3:
|
||||||
|
message.message = reader.string();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
let u = options.readUnknownField;
|
let u = options.readUnknownField;
|
||||||
if (u === "throw")
|
if (u === "throw")
|
||||||
@@ -710,6 +782,9 @@ class FinalizeCacheEntryUploadResponse$Type extends runtime_5.MessageType {
|
|||||||
/* int64 entry_id = 2; */
|
/* int64 entry_id = 2; */
|
||||||
if (message.entryId !== "0")
|
if (message.entryId !== "0")
|
||||||
writer.tag(2, runtime_1.WireType.Varint).int64(message.entryId);
|
writer.tag(2, runtime_1.WireType.Varint).int64(message.entryId);
|
||||||
|
/* string message = 3; */
|
||||||
|
if (message.message !== "")
|
||||||
|
writer.tag(3, runtime_1.WireType.LengthDelimited).string(message.message);
|
||||||
let u = options.writeUnknownFields;
|
let u = options.writeUnknownFields;
|
||||||
if (u !== false)
|
if (u !== false)
|
||||||
(u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
(u == true ? runtime_2.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||||
@@ -2204,7 +2279,7 @@ const cacheUtils_1 = __nccwpck_require__(680);
|
|||||||
const auth_1 = __nccwpck_require__(4552);
|
const auth_1 = __nccwpck_require__(4552);
|
||||||
const http_client_1 = __nccwpck_require__(4844);
|
const http_client_1 = __nccwpck_require__(4844);
|
||||||
const cache_twirp_client_1 = __nccwpck_require__(1486);
|
const cache_twirp_client_1 = __nccwpck_require__(1486);
|
||||||
const util_1 = __nccwpck_require__(7564);
|
const util_1 = __nccwpck_require__(5183);
|
||||||
/**
|
/**
|
||||||
* This class is a wrapper around the CacheServiceClientJSON class generated by Twirp.
|
* This class is a wrapper around the CacheServiceClientJSON class generated by Twirp.
|
||||||
*
|
*
|
||||||
@@ -2446,7 +2521,7 @@ exports.getUserAgentString = getUserAgentString;
|
|||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 7564:
|
/***/ 5183:
|
||||||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
@@ -16140,6 +16215,9 @@ exports.userAgentPolicy = userAgentPolicy;
|
|||||||
/***/ 7791:
|
/***/ 7791:
|
||||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
var CombinedStream = __nccwpck_require__(5630);
|
var CombinedStream = __nccwpck_require__(5630);
|
||||||
var util = __nccwpck_require__(9023);
|
var util = __nccwpck_require__(9023);
|
||||||
var path = __nccwpck_require__(6928);
|
var path = __nccwpck_require__(6928);
|
||||||
@@ -16148,23 +16226,20 @@ var https = __nccwpck_require__(5692);
|
|||||||
var parseUrl = (__nccwpck_require__(7016).parse);
|
var parseUrl = (__nccwpck_require__(7016).parse);
|
||||||
var fs = __nccwpck_require__(9896);
|
var fs = __nccwpck_require__(9896);
|
||||||
var Stream = (__nccwpck_require__(2203).Stream);
|
var Stream = (__nccwpck_require__(2203).Stream);
|
||||||
|
var crypto = __nccwpck_require__(6982);
|
||||||
var mime = __nccwpck_require__(4096);
|
var mime = __nccwpck_require__(4096);
|
||||||
var asynckit = __nccwpck_require__(1324);
|
var asynckit = __nccwpck_require__(1324);
|
||||||
|
var setToStringTag = __nccwpck_require__(8700);
|
||||||
|
var hasOwn = __nccwpck_require__(4076);
|
||||||
var populate = __nccwpck_require__(2209);
|
var populate = __nccwpck_require__(2209);
|
||||||
|
|
||||||
// Public API
|
|
||||||
module.exports = FormData;
|
|
||||||
|
|
||||||
// make it a Stream
|
|
||||||
util.inherits(FormData, CombinedStream);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create readable "multipart/form-data" streams.
|
* Create readable "multipart/form-data" streams.
|
||||||
* Can be used to submit forms
|
* Can be used to submit forms
|
||||||
* and file uploads to other web applications.
|
* and file uploads to other web applications.
|
||||||
*
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
|
* @param {object} options - Properties to be added/overriden for FormData and CombinedStream
|
||||||
*/
|
*/
|
||||||
function FormData(options) {
|
function FormData(options) {
|
||||||
if (!(this instanceof FormData)) {
|
if (!(this instanceof FormData)) {
|
||||||
@@ -16177,35 +16252,39 @@ function FormData(options) {
|
|||||||
|
|
||||||
CombinedStream.call(this);
|
CombinedStream.call(this);
|
||||||
|
|
||||||
options = options || {};
|
options = options || {}; // eslint-disable-line no-param-reassign
|
||||||
for (var option in options) {
|
for (var option in options) { // eslint-disable-line no-restricted-syntax
|
||||||
this[option] = options[option];
|
this[option] = options[option];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make it a Stream
|
||||||
|
util.inherits(FormData, CombinedStream);
|
||||||
|
|
||||||
FormData.LINE_BREAK = '\r\n';
|
FormData.LINE_BREAK = '\r\n';
|
||||||
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
|
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
|
||||||
|
|
||||||
FormData.prototype.append = function(field, value, options) {
|
FormData.prototype.append = function (field, value, options) {
|
||||||
|
options = options || {}; // eslint-disable-line no-param-reassign
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
// allow filename as single option
|
// allow filename as single option
|
||||||
if (typeof options == 'string') {
|
if (typeof options === 'string') {
|
||||||
options = {filename: options};
|
options = { filename: options }; // eslint-disable-line no-param-reassign
|
||||||
}
|
}
|
||||||
|
|
||||||
var append = CombinedStream.prototype.append.bind(this);
|
var append = CombinedStream.prototype.append.bind(this);
|
||||||
|
|
||||||
// all that streamy business can't handle numbers
|
// all that streamy business can't handle numbers
|
||||||
if (typeof value == 'number') {
|
if (typeof value === 'number' || value == null) {
|
||||||
value = '' + value;
|
value = String(value); // eslint-disable-line no-param-reassign
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://github.com/felixge/node-form-data/issues/38
|
// https://github.com/felixge/node-form-data/issues/38
|
||||||
if (util.isArray(value)) {
|
if (Array.isArray(value)) {
|
||||||
// Please convert your array into string
|
/*
|
||||||
// the way web server expects it
|
* Please convert your array into string
|
||||||
|
* the way web server expects it
|
||||||
|
*/
|
||||||
this._error(new Error('Arrays are not supported.'));
|
this._error(new Error('Arrays are not supported.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -16221,15 +16300,17 @@ FormData.prototype.append = function(field, value, options) {
|
|||||||
this._trackLength(header, value, options);
|
this._trackLength(header, value, options);
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._trackLength = function(header, value, options) {
|
FormData.prototype._trackLength = function (header, value, options) {
|
||||||
var valueLength = 0;
|
var valueLength = 0;
|
||||||
|
|
||||||
// used w/ getLengthSync(), when length is known.
|
/*
|
||||||
// e.g. for streaming directly from a remote server,
|
* used w/ getLengthSync(), when length is known.
|
||||||
// w/ a known file a size, and not wanting to wait for
|
* e.g. for streaming directly from a remote server,
|
||||||
// incoming file to finish to get its size.
|
* w/ a known file a size, and not wanting to wait for
|
||||||
|
* incoming file to finish to get its size.
|
||||||
|
*/
|
||||||
if (options.knownLength != null) {
|
if (options.knownLength != null) {
|
||||||
valueLength += +options.knownLength;
|
valueLength += Number(options.knownLength);
|
||||||
} else if (Buffer.isBuffer(value)) {
|
} else if (Buffer.isBuffer(value)) {
|
||||||
valueLength = value.length;
|
valueLength = value.length;
|
||||||
} else if (typeof value === 'string') {
|
} else if (typeof value === 'string') {
|
||||||
@@ -16239,12 +16320,10 @@ FormData.prototype._trackLength = function(header, value, options) {
|
|||||||
this._valueLength += valueLength;
|
this._valueLength += valueLength;
|
||||||
|
|
||||||
// @check why add CRLF? does this account for custom/multiple CRLFs?
|
// @check why add CRLF? does this account for custom/multiple CRLFs?
|
||||||
this._overheadLength +=
|
this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length;
|
||||||
Buffer.byteLength(header) +
|
|
||||||
FormData.LINE_BREAK.length;
|
|
||||||
|
|
||||||
// empty or either doesn't have path or not an http response or not a stream
|
// empty or either doesn't have path or not an http response or not a stream
|
||||||
if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {
|
if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16254,10 +16333,8 @@ FormData.prototype._trackLength = function(header, value, options) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._lengthRetriever = function(value, callback) {
|
FormData.prototype._lengthRetriever = function (value, callback) {
|
||||||
|
if (hasOwn(value, 'fd')) {
|
||||||
if (value.hasOwnProperty('fd')) {
|
|
||||||
|
|
||||||
// take read range into a account
|
// take read range into a account
|
||||||
// `end` = Infinity –> read file till the end
|
// `end` = Infinity –> read file till the end
|
||||||
//
|
//
|
||||||
@@ -16266,54 +16343,52 @@ FormData.prototype._lengthRetriever = function(value, callback) {
|
|||||||
// Fix it when node fixes it.
|
// Fix it when node fixes it.
|
||||||
// https://github.com/joyent/node/issues/7819
|
// https://github.com/joyent/node/issues/7819
|
||||||
if (value.end != undefined && value.end != Infinity && value.start != undefined) {
|
if (value.end != undefined && value.end != Infinity && value.start != undefined) {
|
||||||
|
|
||||||
// when end specified
|
// when end specified
|
||||||
// no need to calculate range
|
// no need to calculate range
|
||||||
// inclusive, starts with 0
|
// inclusive, starts with 0
|
||||||
callback(null, value.end + 1 - (value.start ? value.start : 0));
|
callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return
|
||||||
|
|
||||||
// not that fast snoopy
|
// not that fast snoopy
|
||||||
} else {
|
} else {
|
||||||
// still need to fetch file size from fs
|
// still need to fetch file size from fs
|
||||||
fs.stat(value.path, function(err, stat) {
|
fs.stat(value.path, function (err, stat) {
|
||||||
|
|
||||||
var fileSize;
|
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
callback(err);
|
callback(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update final size based on the range options
|
// update final size based on the range options
|
||||||
fileSize = stat.size - (value.start ? value.start : 0);
|
var fileSize = stat.size - (value.start ? value.start : 0);
|
||||||
callback(null, fileSize);
|
callback(null, fileSize);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// or http response
|
// or http response
|
||||||
} else if (value.hasOwnProperty('httpVersion')) {
|
} else if (hasOwn(value, 'httpVersion')) {
|
||||||
callback(null, +value.headers['content-length']);
|
callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return
|
||||||
|
|
||||||
// or request stream http://github.com/mikeal/request
|
// or request stream http://github.com/mikeal/request
|
||||||
} else if (value.hasOwnProperty('httpModule')) {
|
} else if (hasOwn(value, 'httpModule')) {
|
||||||
// wait till response come back
|
// wait till response come back
|
||||||
value.on('response', function(response) {
|
value.on('response', function (response) {
|
||||||
value.pause();
|
value.pause();
|
||||||
callback(null, +response.headers['content-length']);
|
callback(null, Number(response.headers['content-length']));
|
||||||
});
|
});
|
||||||
value.resume();
|
value.resume();
|
||||||
|
|
||||||
// something else
|
// something else
|
||||||
} else {
|
} else {
|
||||||
callback('Unknown stream');
|
callback('Unknown stream'); // eslint-disable-line callback-return
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._multiPartHeader = function(field, value, options) {
|
FormData.prototype._multiPartHeader = function (field, value, options) {
|
||||||
// custom header specified (as string)?
|
/*
|
||||||
// it becomes responsible for boundary
|
* custom header specified (as string)?
|
||||||
// (e.g. to handle extra CRLFs on .NET servers)
|
* it becomes responsible for boundary
|
||||||
if (typeof options.header == 'string') {
|
* (e.g. to handle extra CRLFs on .NET servers)
|
||||||
|
*/
|
||||||
|
if (typeof options.header === 'string') {
|
||||||
return options.header;
|
return options.header;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16329,18 +16404,18 @@ FormData.prototype._multiPartHeader = function(field, value, options) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// allow custom headers.
|
// allow custom headers.
|
||||||
if (typeof options.header == 'object') {
|
if (typeof options.header === 'object') {
|
||||||
populate(headers, options.header);
|
populate(headers, options.header);
|
||||||
}
|
}
|
||||||
|
|
||||||
var header;
|
var header;
|
||||||
for (var prop in headers) {
|
for (var prop in headers) { // eslint-disable-line no-restricted-syntax
|
||||||
if (!headers.hasOwnProperty(prop)) continue;
|
if (hasOwn(headers, prop)) {
|
||||||
header = headers[prop];
|
header = headers[prop];
|
||||||
|
|
||||||
// skip nullish headers.
|
// skip nullish headers.
|
||||||
if (header == null) {
|
if (header == null) {
|
||||||
continue;
|
continue; // eslint-disable-line no-restricted-syntax, no-continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert all headers to arrays.
|
// convert all headers to arrays.
|
||||||
@@ -16353,53 +16428,50 @@ FormData.prototype._multiPartHeader = function(field, value, options) {
|
|||||||
contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
|
contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
|
return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._getContentDisposition = function(value, options) {
|
FormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return
|
||||||
|
var filename;
|
||||||
var filename
|
|
||||||
, contentDisposition
|
|
||||||
;
|
|
||||||
|
|
||||||
if (typeof options.filepath === 'string') {
|
if (typeof options.filepath === 'string') {
|
||||||
// custom filepath for relative paths
|
// custom filepath for relative paths
|
||||||
filename = path.normalize(options.filepath).replace(/\\/g, '/');
|
filename = path.normalize(options.filepath).replace(/\\/g, '/');
|
||||||
} else if (options.filename || value.name || value.path) {
|
} else if (options.filename || (value && (value.name || value.path))) {
|
||||||
// custom filename take precedence
|
/*
|
||||||
// formidable and the browser add a name property
|
* custom filename take precedence
|
||||||
// fs- and request- streams have path property
|
* formidable and the browser add a name property
|
||||||
filename = path.basename(options.filename || value.name || value.path);
|
* fs- and request- streams have path property
|
||||||
} else if (value.readable && value.hasOwnProperty('httpVersion')) {
|
*/
|
||||||
|
filename = path.basename(options.filename || (value && (value.name || value.path)));
|
||||||
|
} else if (value && value.readable && hasOwn(value, 'httpVersion')) {
|
||||||
// or try http response
|
// or try http response
|
||||||
filename = path.basename(value.client._httpMessage.path || '');
|
filename = path.basename(value.client._httpMessage.path || '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
contentDisposition = 'filename="' + filename + '"';
|
return 'filename="' + filename + '"';
|
||||||
}
|
}
|
||||||
|
|
||||||
return contentDisposition;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._getContentType = function(value, options) {
|
FormData.prototype._getContentType = function (value, options) {
|
||||||
|
|
||||||
// use custom content-type above all
|
// use custom content-type above all
|
||||||
var contentType = options.contentType;
|
var contentType = options.contentType;
|
||||||
|
|
||||||
// or try `name` from formidable, browser
|
// or try `name` from formidable, browser
|
||||||
if (!contentType && value.name) {
|
if (!contentType && value && value.name) {
|
||||||
contentType = mime.lookup(value.name);
|
contentType = mime.lookup(value.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// or try `path` from fs-, request- streams
|
// or try `path` from fs-, request- streams
|
||||||
if (!contentType && value.path) {
|
if (!contentType && value && value.path) {
|
||||||
contentType = mime.lookup(value.path);
|
contentType = mime.lookup(value.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// or if it's http-reponse
|
// or if it's http-reponse
|
||||||
if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
|
if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) {
|
||||||
contentType = value.headers['content-type'];
|
contentType = value.headers['content-type'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16409,18 +16481,18 @@ FormData.prototype._getContentType = function(value, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fallback to the default content type if `value` is not simple value
|
// fallback to the default content type if `value` is not simple value
|
||||||
if (!contentType && typeof value == 'object') {
|
if (!contentType && value && typeof value === 'object') {
|
||||||
contentType = FormData.DEFAULT_CONTENT_TYPE;
|
contentType = FormData.DEFAULT_CONTENT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return contentType;
|
return contentType;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._multiPartFooter = function() {
|
FormData.prototype._multiPartFooter = function () {
|
||||||
return function(next) {
|
return function (next) {
|
||||||
var footer = FormData.LINE_BREAK;
|
var footer = FormData.LINE_BREAK;
|
||||||
|
|
||||||
var lastPart = (this._streams.length === 0);
|
var lastPart = this._streams.length === 0;
|
||||||
if (lastPart) {
|
if (lastPart) {
|
||||||
footer += this._lastBoundary();
|
footer += this._lastBoundary();
|
||||||
}
|
}
|
||||||
@@ -16429,18 +16501,18 @@ FormData.prototype._multiPartFooter = function() {
|
|||||||
}.bind(this);
|
}.bind(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._lastBoundary = function() {
|
FormData.prototype._lastBoundary = function () {
|
||||||
return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
|
return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype.getHeaders = function(userHeaders) {
|
FormData.prototype.getHeaders = function (userHeaders) {
|
||||||
var header;
|
var header;
|
||||||
var formHeaders = {
|
var formHeaders = {
|
||||||
'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
|
'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
|
||||||
};
|
};
|
||||||
|
|
||||||
for (header in userHeaders) {
|
for (header in userHeaders) { // eslint-disable-line no-restricted-syntax
|
||||||
if (userHeaders.hasOwnProperty(header)) {
|
if (hasOwn(userHeaders, header)) {
|
||||||
formHeaders[header.toLowerCase()] = userHeaders[header];
|
formHeaders[header.toLowerCase()] = userHeaders[header];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16448,11 +16520,14 @@ FormData.prototype.getHeaders = function(userHeaders) {
|
|||||||
return formHeaders;
|
return formHeaders;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype.setBoundary = function(boundary) {
|
FormData.prototype.setBoundary = function (boundary) {
|
||||||
|
if (typeof boundary !== 'string') {
|
||||||
|
throw new TypeError('FormData boundary must be a string');
|
||||||
|
}
|
||||||
this._boundary = boundary;
|
this._boundary = boundary;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype.getBoundary = function() {
|
FormData.prototype.getBoundary = function () {
|
||||||
if (!this._boundary) {
|
if (!this._boundary) {
|
||||||
this._generateBoundary();
|
this._generateBoundary();
|
||||||
}
|
}
|
||||||
@@ -16460,60 +16535,55 @@ FormData.prototype.getBoundary = function() {
|
|||||||
return this._boundary;
|
return this._boundary;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype.getBuffer = function() {
|
FormData.prototype.getBuffer = function () {
|
||||||
var dataBuffer = new Buffer.alloc( 0 );
|
var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap
|
||||||
var boundary = this.getBoundary();
|
var boundary = this.getBoundary();
|
||||||
|
|
||||||
// Create the form content. Add Line breaks to the end of data.
|
// Create the form content. Add Line breaks to the end of data.
|
||||||
for (var i = 0, len = this._streams.length; i < len; i++) {
|
for (var i = 0, len = this._streams.length; i < len; i++) {
|
||||||
if (typeof this._streams[i] !== 'function') {
|
if (typeof this._streams[i] !== 'function') {
|
||||||
|
|
||||||
// Add content to the buffer.
|
// Add content to the buffer.
|
||||||
if(Buffer.isBuffer(this._streams[i])) {
|
if (Buffer.isBuffer(this._streams[i])) {
|
||||||
dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
|
dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);
|
||||||
}else {
|
} else {
|
||||||
dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
|
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add break after content.
|
// Add break after content.
|
||||||
if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
|
if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) {
|
||||||
dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
|
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the footer and return the Buffer object.
|
// Add the footer and return the Buffer object.
|
||||||
return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
|
return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._generateBoundary = function() {
|
FormData.prototype._generateBoundary = function () {
|
||||||
// This generates a 50 character boundary similar to those used by Firefox.
|
// This generates a 50 character boundary similar to those used by Firefox.
|
||||||
// They are optimized for boyer-moore parsing.
|
|
||||||
var boundary = '--------------------------';
|
|
||||||
for (var i = 0; i < 24; i++) {
|
|
||||||
boundary += Math.floor(Math.random() * 10).toString(16);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._boundary = boundary;
|
// They are optimized for boyer-moore parsing.
|
||||||
|
this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex');
|
||||||
};
|
};
|
||||||
|
|
||||||
// Note: getLengthSync DOESN'T calculate streams length
|
// Note: getLengthSync DOESN'T calculate streams length
|
||||||
// As workaround one can calculate file size manually
|
// As workaround one can calculate file size manually and add it as knownLength option
|
||||||
// and add it as knownLength option
|
FormData.prototype.getLengthSync = function () {
|
||||||
FormData.prototype.getLengthSync = function() {
|
|
||||||
var knownLength = this._overheadLength + this._valueLength;
|
var knownLength = this._overheadLength + this._valueLength;
|
||||||
|
|
||||||
// Don't get confused, there are 3 "internal" streams for each keyval pair
|
// Don't get confused, there are 3 "internal" streams for each keyval pair so it basically checks if there is any value added to the form
|
||||||
// so it basically checks if there is any value added to the form
|
|
||||||
if (this._streams.length) {
|
if (this._streams.length) {
|
||||||
knownLength += this._lastBoundary().length;
|
knownLength += this._lastBoundary().length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://github.com/form-data/form-data/issues/40
|
// https://github.com/form-data/form-data/issues/40
|
||||||
if (!this.hasKnownLength()) {
|
if (!this.hasKnownLength()) {
|
||||||
// Some async length retrievers are present
|
/*
|
||||||
// therefore synchronous length calculation is false.
|
* Some async length retrievers are present
|
||||||
// Please use getLength(callback) to get proper length
|
* therefore synchronous length calculation is false.
|
||||||
|
* Please use getLength(callback) to get proper length
|
||||||
|
*/
|
||||||
this._error(new Error('Cannot calculate proper length in synchronous way.'));
|
this._error(new Error('Cannot calculate proper length in synchronous way.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16523,7 +16593,7 @@ FormData.prototype.getLengthSync = function() {
|
|||||||
// Public API to check if length of added values is known
|
// Public API to check if length of added values is known
|
||||||
// https://github.com/form-data/form-data/issues/196
|
// https://github.com/form-data/form-data/issues/196
|
||||||
// https://github.com/form-data/form-data/issues/262
|
// https://github.com/form-data/form-data/issues/262
|
||||||
FormData.prototype.hasKnownLength = function() {
|
FormData.prototype.hasKnownLength = function () {
|
||||||
var hasKnownLength = true;
|
var hasKnownLength = true;
|
||||||
|
|
||||||
if (this._valuesToMeasure.length) {
|
if (this._valuesToMeasure.length) {
|
||||||
@@ -16533,7 +16603,7 @@ FormData.prototype.hasKnownLength = function() {
|
|||||||
return hasKnownLength;
|
return hasKnownLength;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype.getLength = function(cb) {
|
FormData.prototype.getLength = function (cb) {
|
||||||
var knownLength = this._overheadLength + this._valueLength;
|
var knownLength = this._overheadLength + this._valueLength;
|
||||||
|
|
||||||
if (this._streams.length) {
|
if (this._streams.length) {
|
||||||
@@ -16545,13 +16615,13 @@ FormData.prototype.getLength = function(cb) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
|
asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) {
|
||||||
if (err) {
|
if (err) {
|
||||||
cb(err);
|
cb(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
values.forEach(function(length) {
|
values.forEach(function (length) {
|
||||||
knownLength += length;
|
knownLength += length;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -16559,31 +16629,26 @@ FormData.prototype.getLength = function(cb) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype.submit = function(params, cb) {
|
FormData.prototype.submit = function (params, cb) {
|
||||||
var request
|
var request;
|
||||||
, options
|
var options;
|
||||||
, defaults = {method: 'post'}
|
var defaults = { method: 'post' };
|
||||||
;
|
|
||||||
|
|
||||||
// parse provided url if it's string
|
// parse provided url if it's string or treat it as options object
|
||||||
// or treat it as options object
|
if (typeof params === 'string') {
|
||||||
if (typeof params == 'string') {
|
params = parseUrl(params); // eslint-disable-line no-param-reassign
|
||||||
|
/* eslint sort-keys: 0 */
|
||||||
params = parseUrl(params);
|
|
||||||
options = populate({
|
options = populate({
|
||||||
port: params.port,
|
port: params.port,
|
||||||
path: params.pathname,
|
path: params.pathname,
|
||||||
host: params.hostname,
|
host: params.hostname,
|
||||||
protocol: params.protocol
|
protocol: params.protocol
|
||||||
}, defaults);
|
}, defaults);
|
||||||
|
} else { // use custom params
|
||||||
// use custom params
|
|
||||||
} else {
|
|
||||||
|
|
||||||
options = populate(params, defaults);
|
options = populate(params, defaults);
|
||||||
// if no port provided use default one
|
// if no port provided use default one
|
||||||
if (!options.port) {
|
if (!options.port) {
|
||||||
options.port = options.protocol == 'https:' ? 443 : 80;
|
options.port = options.protocol === 'https:' ? 443 : 80;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16591,14 +16656,14 @@ FormData.prototype.submit = function(params, cb) {
|
|||||||
options.headers = this.getHeaders(params.headers);
|
options.headers = this.getHeaders(params.headers);
|
||||||
|
|
||||||
// https if specified, fallback to http in any other case
|
// https if specified, fallback to http in any other case
|
||||||
if (options.protocol == 'https:') {
|
if (options.protocol === 'https:') {
|
||||||
request = https.request(options);
|
request = https.request(options);
|
||||||
} else {
|
} else {
|
||||||
request = http.request(options);
|
request = http.request(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get content length and fire away
|
// get content length and fire away
|
||||||
this.getLength(function(err, length) {
|
this.getLength(function (err, length) {
|
||||||
if (err && err !== 'Unknown stream') {
|
if (err && err !== 'Unknown stream') {
|
||||||
this._error(err);
|
this._error(err);
|
||||||
return;
|
return;
|
||||||
@@ -16617,7 +16682,7 @@ FormData.prototype.submit = function(params, cb) {
|
|||||||
request.removeListener('error', callback);
|
request.removeListener('error', callback);
|
||||||
request.removeListener('response', onResponse);
|
request.removeListener('response', onResponse);
|
||||||
|
|
||||||
return cb.call(this, error, responce);
|
return cb.call(this, error, responce); // eslint-disable-line no-invalid-this
|
||||||
};
|
};
|
||||||
|
|
||||||
onResponse = callback.bind(this, null);
|
onResponse = callback.bind(this, null);
|
||||||
@@ -16630,7 +16695,7 @@ FormData.prototype.submit = function(params, cb) {
|
|||||||
return request;
|
return request;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormData.prototype._error = function(err) {
|
FormData.prototype._error = function (err) {
|
||||||
if (!this.error) {
|
if (!this.error) {
|
||||||
this.error = err;
|
this.error = err;
|
||||||
this.pause();
|
this.pause();
|
||||||
@@ -16641,6 +16706,10 @@ FormData.prototype._error = function(err) {
|
|||||||
FormData.prototype.toString = function () {
|
FormData.prototype.toString = function () {
|
||||||
return '[object FormData]';
|
return '[object FormData]';
|
||||||
};
|
};
|
||||||
|
setToStringTag(FormData, 'FormData');
|
||||||
|
|
||||||
|
// Public API
|
||||||
|
module.exports = FormData;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
@@ -16648,12 +16717,13 @@ FormData.prototype.toString = function () {
|
|||||||
/***/ 2209:
|
/***/ 2209:
|
||||||
/***/ ((module) => {
|
/***/ ((module) => {
|
||||||
|
|
||||||
// populates missing values
|
"use strict";
|
||||||
module.exports = function(dst, src) {
|
|
||||||
|
|
||||||
Object.keys(src).forEach(function(prop)
|
|
||||||
{
|
// populates missing values
|
||||||
dst[prop] = dst[prop] || src[prop];
|
module.exports = function (dst, src) {
|
||||||
|
Object.keys(src).forEach(function (prop) {
|
||||||
|
dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign
|
||||||
});
|
});
|
||||||
|
|
||||||
return dst;
|
return dst;
|
||||||
@@ -47833,6 +47903,10 @@ class RpcOutputStreamController {
|
|||||||
cmp: [],
|
cmp: [],
|
||||||
};
|
};
|
||||||
this._closed = false;
|
this._closed = false;
|
||||||
|
// --- RpcOutputStream async iterator API
|
||||||
|
// iterator state.
|
||||||
|
// is undefined when no iterator has been acquired yet.
|
||||||
|
this._itState = { q: [] };
|
||||||
}
|
}
|
||||||
// --- RpcOutputStream callback API
|
// --- RpcOutputStream callback API
|
||||||
onNext(callback) {
|
onNext(callback) {
|
||||||
@@ -47932,10 +48006,6 @@ class RpcOutputStreamController {
|
|||||||
* messages are queued.
|
* messages are queued.
|
||||||
*/
|
*/
|
||||||
[Symbol.asyncIterator]() {
|
[Symbol.asyncIterator]() {
|
||||||
// init the iterator state, enabling pushIt()
|
|
||||||
if (!this._itState) {
|
|
||||||
this._itState = { q: [] };
|
|
||||||
}
|
|
||||||
// if we are closed, we are definitely not receiving any more messages.
|
// if we are closed, we are definitely not receiving any more messages.
|
||||||
// but we can't let the iterator get stuck. we want to either:
|
// but we can't let the iterator get stuck. we want to either:
|
||||||
// a) finish the new iterator immediately, because we are completed
|
// a) finish the new iterator immediately, because we are completed
|
||||||
@@ -47968,8 +48038,6 @@ class RpcOutputStreamController {
|
|||||||
// this either resolves a pending promise, or enqueues the result.
|
// this either resolves a pending promise, or enqueues the result.
|
||||||
pushIt(result) {
|
pushIt(result) {
|
||||||
let state = this._itState;
|
let state = this._itState;
|
||||||
if (!state)
|
|
||||||
return;
|
|
||||||
// is the consumer waiting for us?
|
// is the consumer waiting for us?
|
||||||
if (state.p) {
|
if (state.p) {
|
||||||
// yes, consumer is waiting for this promise.
|
// yes, consumer is waiting for this promise.
|
||||||
@@ -49881,6 +49949,7 @@ const reflection_equals_1 = __nccwpck_require__(4827);
|
|||||||
const binary_writer_1 = __nccwpck_require__(3957);
|
const binary_writer_1 = __nccwpck_require__(3957);
|
||||||
const binary_reader_1 = __nccwpck_require__(2889);
|
const binary_reader_1 = __nccwpck_require__(2889);
|
||||||
const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({}));
|
const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({}));
|
||||||
|
const messageTypeDescriptor = baseDescriptors[message_type_contract_1.MESSAGE_TYPE] = {};
|
||||||
/**
|
/**
|
||||||
* This standard message type provides reflection-based
|
* This standard message type provides reflection-based
|
||||||
* operations to work with a message.
|
* operations to work with a message.
|
||||||
@@ -49891,7 +49960,8 @@ class MessageType {
|
|||||||
this.typeName = name;
|
this.typeName = name;
|
||||||
this.fields = fields.map(reflection_info_1.normalizeFieldInfo);
|
this.fields = fields.map(reflection_info_1.normalizeFieldInfo);
|
||||||
this.options = options !== null && options !== void 0 ? options : {};
|
this.options = options !== null && options !== void 0 ? options : {};
|
||||||
this.messagePrototype = Object.create(null, Object.assign(Object.assign({}, baseDescriptors), { [message_type_contract_1.MESSAGE_TYPE]: { value: this } }));
|
messageTypeDescriptor.value = this;
|
||||||
|
this.messagePrototype = Object.create(null, baseDescriptors);
|
||||||
this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this);
|
this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this);
|
||||||
this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this);
|
this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this);
|
||||||
this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this);
|
this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this);
|
||||||
@@ -52855,7 +52925,7 @@ function expand(str, isTop) {
|
|||||||
var isOptions = m.body.indexOf(',') >= 0;
|
var isOptions = m.body.indexOf(',') >= 0;
|
||||||
if (!isSequence && !isOptions) {
|
if (!isSequence && !isOptions) {
|
||||||
// {a},b}
|
// {a},b}
|
||||||
if (m.post.match(/,.*\}/)) {
|
if (m.post.match(/,(?!,).*\}/)) {
|
||||||
str = m.pre + '{' + m.body + escClose + m.post;
|
str = m.pre + '{' + m.body + escClose + m.post;
|
||||||
return expand(str);
|
return expand(str);
|
||||||
}
|
}
|
||||||
@@ -52947,6 +53017,83 @@ function expand(str, isTop) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 2639:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var bind = __nccwpck_require__(7564);
|
||||||
|
|
||||||
|
var $apply = __nccwpck_require__(3945);
|
||||||
|
var $call = __nccwpck_require__(8093);
|
||||||
|
var $reflectApply = __nccwpck_require__(1330);
|
||||||
|
|
||||||
|
/** @type {import('./actualApply')} */
|
||||||
|
module.exports = $reflectApply || bind.call($call, $apply);
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 3945:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./functionApply')} */
|
||||||
|
module.exports = Function.prototype.apply;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 8093:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./functionCall')} */
|
||||||
|
module.exports = Function.prototype.call;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 8705:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var bind = __nccwpck_require__(7564);
|
||||||
|
var $TypeError = __nccwpck_require__(3314);
|
||||||
|
|
||||||
|
var $call = __nccwpck_require__(8093);
|
||||||
|
var $actualApply = __nccwpck_require__(2639);
|
||||||
|
|
||||||
|
/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */
|
||||||
|
module.exports = function callBindBasic(args) {
|
||||||
|
if (args.length < 1 || typeof args[0] !== 'function') {
|
||||||
|
throw new $TypeError('a function is required');
|
||||||
|
}
|
||||||
|
return $actualApply(bind, $call, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1330:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./reflectApply')} */
|
||||||
|
module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 5630:
|
/***/ 5630:
|
||||||
@@ -53296,6 +53443,1004 @@ DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 6669:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var callBind = __nccwpck_require__(8705);
|
||||||
|
var gOPD = __nccwpck_require__(3170);
|
||||||
|
|
||||||
|
var hasProtoAccessor;
|
||||||
|
try {
|
||||||
|
// eslint-disable-next-line no-extra-parens, no-proto
|
||||||
|
hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;
|
||||||
|
} catch (e) {
|
||||||
|
if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-extra-parens
|
||||||
|
var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));
|
||||||
|
|
||||||
|
var $Object = Object;
|
||||||
|
var $getPrototypeOf = $Object.getPrototypeOf;
|
||||||
|
|
||||||
|
/** @type {import('./get')} */
|
||||||
|
module.exports = desc && typeof desc.get === 'function'
|
||||||
|
? callBind([desc.get])
|
||||||
|
: typeof $getPrototypeOf === 'function'
|
||||||
|
? /** @type {import('./get')} */ function getDunder(value) {
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
return $getPrototypeOf(value == null ? value : $Object(value));
|
||||||
|
}
|
||||||
|
: false;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 9094:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
var $defineProperty = Object.defineProperty || false;
|
||||||
|
if ($defineProperty) {
|
||||||
|
try {
|
||||||
|
$defineProperty({}, 'a', { value: 1 });
|
||||||
|
} catch (e) {
|
||||||
|
// IE 8 has a broken defineProperty
|
||||||
|
$defineProperty = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = $defineProperty;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 3056:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./eval')} */
|
||||||
|
module.exports = EvalError;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1620:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = Error;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 4585:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./range')} */
|
||||||
|
module.exports = RangeError;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 6905:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./ref')} */
|
||||||
|
module.exports = ReferenceError;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 105:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./syntax')} */
|
||||||
|
module.exports = SyntaxError;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 3314:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./type')} */
|
||||||
|
module.exports = TypeError;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 2578:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./uri')} */
|
||||||
|
module.exports = URIError;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 5399:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = Object;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 8700:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var GetIntrinsic = __nccwpck_require__(470);
|
||||||
|
|
||||||
|
var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
|
||||||
|
|
||||||
|
var hasToStringTag = __nccwpck_require__(5479)();
|
||||||
|
var hasOwn = __nccwpck_require__(4076);
|
||||||
|
var $TypeError = __nccwpck_require__(3314);
|
||||||
|
|
||||||
|
var toStringTag = hasToStringTag ? Symbol.toStringTag : null;
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = function setToStringTag(object, value) {
|
||||||
|
var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;
|
||||||
|
var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;
|
||||||
|
if (
|
||||||
|
(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')
|
||||||
|
|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')
|
||||||
|
) {
|
||||||
|
throw new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');
|
||||||
|
}
|
||||||
|
if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {
|
||||||
|
if ($defineProperty) {
|
||||||
|
$defineProperty(object, toStringTag, {
|
||||||
|
configurable: !nonConfigurable,
|
||||||
|
enumerable: false,
|
||||||
|
value: value,
|
||||||
|
writable: false
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
object[toStringTag] = value; // eslint-disable-line no-param-reassign
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 9808:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/* eslint no-invalid-this: 1 */
|
||||||
|
|
||||||
|
var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
|
||||||
|
var toStr = Object.prototype.toString;
|
||||||
|
var max = Math.max;
|
||||||
|
var funcType = '[object Function]';
|
||||||
|
|
||||||
|
var concatty = function concatty(a, b) {
|
||||||
|
var arr = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < a.length; i += 1) {
|
||||||
|
arr[i] = a[i];
|
||||||
|
}
|
||||||
|
for (var j = 0; j < b.length; j += 1) {
|
||||||
|
arr[j + a.length] = b[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
};
|
||||||
|
|
||||||
|
var slicy = function slicy(arrLike, offset) {
|
||||||
|
var arr = [];
|
||||||
|
for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
|
||||||
|
arr[j] = arrLike[i];
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
};
|
||||||
|
|
||||||
|
var joiny = function (arr, joiner) {
|
||||||
|
var str = '';
|
||||||
|
for (var i = 0; i < arr.length; i += 1) {
|
||||||
|
str += arr[i];
|
||||||
|
if (i + 1 < arr.length) {
|
||||||
|
str += joiner;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = function bind(that) {
|
||||||
|
var target = this;
|
||||||
|
if (typeof target !== 'function' || toStr.apply(target) !== funcType) {
|
||||||
|
throw new TypeError(ERROR_MESSAGE + target);
|
||||||
|
}
|
||||||
|
var args = slicy(arguments, 1);
|
||||||
|
|
||||||
|
var bound;
|
||||||
|
var binder = function () {
|
||||||
|
if (this instanceof bound) {
|
||||||
|
var result = target.apply(
|
||||||
|
this,
|
||||||
|
concatty(args, arguments)
|
||||||
|
);
|
||||||
|
if (Object(result) === result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return target.apply(
|
||||||
|
that,
|
||||||
|
concatty(args, arguments)
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
var boundLength = max(0, target.length - args.length);
|
||||||
|
var boundArgs = [];
|
||||||
|
for (var i = 0; i < boundLength; i++) {
|
||||||
|
boundArgs[i] = '$' + i;
|
||||||
|
}
|
||||||
|
|
||||||
|
bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);
|
||||||
|
|
||||||
|
if (target.prototype) {
|
||||||
|
var Empty = function Empty() {};
|
||||||
|
Empty.prototype = target.prototype;
|
||||||
|
bound.prototype = new Empty();
|
||||||
|
Empty.prototype = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bound;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 7564:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var implementation = __nccwpck_require__(9808);
|
||||||
|
|
||||||
|
module.exports = Function.prototype.bind || implementation;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 470:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var undefined;
|
||||||
|
|
||||||
|
var $Object = __nccwpck_require__(5399);
|
||||||
|
|
||||||
|
var $Error = __nccwpck_require__(1620);
|
||||||
|
var $EvalError = __nccwpck_require__(3056);
|
||||||
|
var $RangeError = __nccwpck_require__(4585);
|
||||||
|
var $ReferenceError = __nccwpck_require__(6905);
|
||||||
|
var $SyntaxError = __nccwpck_require__(105);
|
||||||
|
var $TypeError = __nccwpck_require__(3314);
|
||||||
|
var $URIError = __nccwpck_require__(2578);
|
||||||
|
|
||||||
|
var abs = __nccwpck_require__(5641);
|
||||||
|
var floor = __nccwpck_require__(6171);
|
||||||
|
var max = __nccwpck_require__(7147);
|
||||||
|
var min = __nccwpck_require__(1017);
|
||||||
|
var pow = __nccwpck_require__(6947);
|
||||||
|
var round = __nccwpck_require__(2621);
|
||||||
|
var sign = __nccwpck_require__(156);
|
||||||
|
|
||||||
|
var $Function = Function;
|
||||||
|
|
||||||
|
// eslint-disable-next-line consistent-return
|
||||||
|
var getEvalledConstructor = function (expressionSyntax) {
|
||||||
|
try {
|
||||||
|
return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
|
||||||
|
} catch (e) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
var $gOPD = __nccwpck_require__(3170);
|
||||||
|
var $defineProperty = __nccwpck_require__(9094);
|
||||||
|
|
||||||
|
var throwTypeError = function () {
|
||||||
|
throw new $TypeError();
|
||||||
|
};
|
||||||
|
var ThrowTypeError = $gOPD
|
||||||
|
? (function () {
|
||||||
|
try {
|
||||||
|
// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
|
||||||
|
arguments.callee; // IE 8 does not throw here
|
||||||
|
return throwTypeError;
|
||||||
|
} catch (calleeThrows) {
|
||||||
|
try {
|
||||||
|
// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
|
||||||
|
return $gOPD(arguments, 'callee').get;
|
||||||
|
} catch (gOPDthrows) {
|
||||||
|
return throwTypeError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}())
|
||||||
|
: throwTypeError;
|
||||||
|
|
||||||
|
var hasSymbols = __nccwpck_require__(3336)();
|
||||||
|
|
||||||
|
var getProto = __nccwpck_require__(1967);
|
||||||
|
var $ObjectGPO = __nccwpck_require__(1311);
|
||||||
|
var $ReflectGPO = __nccwpck_require__(8681);
|
||||||
|
|
||||||
|
var $apply = __nccwpck_require__(3945);
|
||||||
|
var $call = __nccwpck_require__(8093);
|
||||||
|
|
||||||
|
var needsEval = {};
|
||||||
|
|
||||||
|
var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);
|
||||||
|
|
||||||
|
var INTRINSICS = {
|
||||||
|
__proto__: null,
|
||||||
|
'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
|
||||||
|
'%Array%': Array,
|
||||||
|
'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
|
||||||
|
'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,
|
||||||
|
'%AsyncFromSyncIteratorPrototype%': undefined,
|
||||||
|
'%AsyncFunction%': needsEval,
|
||||||
|
'%AsyncGenerator%': needsEval,
|
||||||
|
'%AsyncGeneratorFunction%': needsEval,
|
||||||
|
'%AsyncIteratorPrototype%': needsEval,
|
||||||
|
'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
|
||||||
|
'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
|
||||||
|
'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,
|
||||||
|
'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,
|
||||||
|
'%Boolean%': Boolean,
|
||||||
|
'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
|
||||||
|
'%Date%': Date,
|
||||||
|
'%decodeURI%': decodeURI,
|
||||||
|
'%decodeURIComponent%': decodeURIComponent,
|
||||||
|
'%encodeURI%': encodeURI,
|
||||||
|
'%encodeURIComponent%': encodeURIComponent,
|
||||||
|
'%Error%': $Error,
|
||||||
|
'%eval%': eval, // eslint-disable-line no-eval
|
||||||
|
'%EvalError%': $EvalError,
|
||||||
|
'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,
|
||||||
|
'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
|
||||||
|
'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
|
||||||
|
'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
|
||||||
|
'%Function%': $Function,
|
||||||
|
'%GeneratorFunction%': needsEval,
|
||||||
|
'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
|
||||||
|
'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
|
||||||
|
'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
|
||||||
|
'%isFinite%': isFinite,
|
||||||
|
'%isNaN%': isNaN,
|
||||||
|
'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,
|
||||||
|
'%JSON%': typeof JSON === 'object' ? JSON : undefined,
|
||||||
|
'%Map%': typeof Map === 'undefined' ? undefined : Map,
|
||||||
|
'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),
|
||||||
|
'%Math%': Math,
|
||||||
|
'%Number%': Number,
|
||||||
|
'%Object%': $Object,
|
||||||
|
'%Object.getOwnPropertyDescriptor%': $gOPD,
|
||||||
|
'%parseFloat%': parseFloat,
|
||||||
|
'%parseInt%': parseInt,
|
||||||
|
'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
|
||||||
|
'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
|
||||||
|
'%RangeError%': $RangeError,
|
||||||
|
'%ReferenceError%': $ReferenceError,
|
||||||
|
'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
|
||||||
|
'%RegExp%': RegExp,
|
||||||
|
'%Set%': typeof Set === 'undefined' ? undefined : Set,
|
||||||
|
'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),
|
||||||
|
'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
|
||||||
|
'%String%': String,
|
||||||
|
'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,
|
||||||
|
'%Symbol%': hasSymbols ? Symbol : undefined,
|
||||||
|
'%SyntaxError%': $SyntaxError,
|
||||||
|
'%ThrowTypeError%': ThrowTypeError,
|
||||||
|
'%TypedArray%': TypedArray,
|
||||||
|
'%TypeError%': $TypeError,
|
||||||
|
'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
|
||||||
|
'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
|
||||||
|
'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
|
||||||
|
'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
|
||||||
|
'%URIError%': $URIError,
|
||||||
|
'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
|
||||||
|
'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
|
||||||
|
'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,
|
||||||
|
|
||||||
|
'%Function.prototype.call%': $call,
|
||||||
|
'%Function.prototype.apply%': $apply,
|
||||||
|
'%Object.defineProperty%': $defineProperty,
|
||||||
|
'%Object.getPrototypeOf%': $ObjectGPO,
|
||||||
|
'%Math.abs%': abs,
|
||||||
|
'%Math.floor%': floor,
|
||||||
|
'%Math.max%': max,
|
||||||
|
'%Math.min%': min,
|
||||||
|
'%Math.pow%': pow,
|
||||||
|
'%Math.round%': round,
|
||||||
|
'%Math.sign%': sign,
|
||||||
|
'%Reflect.getPrototypeOf%': $ReflectGPO
|
||||||
|
};
|
||||||
|
|
||||||
|
if (getProto) {
|
||||||
|
try {
|
||||||
|
null.error; // eslint-disable-line no-unused-expressions
|
||||||
|
} catch (e) {
|
||||||
|
// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229
|
||||||
|
var errorProto = getProto(getProto(e));
|
||||||
|
INTRINSICS['%Error.prototype%'] = errorProto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var doEval = function doEval(name) {
|
||||||
|
var value;
|
||||||
|
if (name === '%AsyncFunction%') {
|
||||||
|
value = getEvalledConstructor('async function () {}');
|
||||||
|
} else if (name === '%GeneratorFunction%') {
|
||||||
|
value = getEvalledConstructor('function* () {}');
|
||||||
|
} else if (name === '%AsyncGeneratorFunction%') {
|
||||||
|
value = getEvalledConstructor('async function* () {}');
|
||||||
|
} else if (name === '%AsyncGenerator%') {
|
||||||
|
var fn = doEval('%AsyncGeneratorFunction%');
|
||||||
|
if (fn) {
|
||||||
|
value = fn.prototype;
|
||||||
|
}
|
||||||
|
} else if (name === '%AsyncIteratorPrototype%') {
|
||||||
|
var gen = doEval('%AsyncGenerator%');
|
||||||
|
if (gen && getProto) {
|
||||||
|
value = getProto(gen.prototype);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
INTRINSICS[name] = value;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
var LEGACY_ALIASES = {
|
||||||
|
__proto__: null,
|
||||||
|
'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
|
||||||
|
'%ArrayPrototype%': ['Array', 'prototype'],
|
||||||
|
'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
|
||||||
|
'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
|
||||||
|
'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
|
||||||
|
'%ArrayProto_values%': ['Array', 'prototype', 'values'],
|
||||||
|
'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
|
||||||
|
'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
|
||||||
|
'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
|
||||||
|
'%BooleanPrototype%': ['Boolean', 'prototype'],
|
||||||
|
'%DataViewPrototype%': ['DataView', 'prototype'],
|
||||||
|
'%DatePrototype%': ['Date', 'prototype'],
|
||||||
|
'%ErrorPrototype%': ['Error', 'prototype'],
|
||||||
|
'%EvalErrorPrototype%': ['EvalError', 'prototype'],
|
||||||
|
'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
|
||||||
|
'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
|
||||||
|
'%FunctionPrototype%': ['Function', 'prototype'],
|
||||||
|
'%Generator%': ['GeneratorFunction', 'prototype'],
|
||||||
|
'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
|
||||||
|
'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
|
||||||
|
'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
|
||||||
|
'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
|
||||||
|
'%JSONParse%': ['JSON', 'parse'],
|
||||||
|
'%JSONStringify%': ['JSON', 'stringify'],
|
||||||
|
'%MapPrototype%': ['Map', 'prototype'],
|
||||||
|
'%NumberPrototype%': ['Number', 'prototype'],
|
||||||
|
'%ObjectPrototype%': ['Object', 'prototype'],
|
||||||
|
'%ObjProto_toString%': ['Object', 'prototype', 'toString'],
|
||||||
|
'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
|
||||||
|
'%PromisePrototype%': ['Promise', 'prototype'],
|
||||||
|
'%PromiseProto_then%': ['Promise', 'prototype', 'then'],
|
||||||
|
'%Promise_all%': ['Promise', 'all'],
|
||||||
|
'%Promise_reject%': ['Promise', 'reject'],
|
||||||
|
'%Promise_resolve%': ['Promise', 'resolve'],
|
||||||
|
'%RangeErrorPrototype%': ['RangeError', 'prototype'],
|
||||||
|
'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
|
||||||
|
'%RegExpPrototype%': ['RegExp', 'prototype'],
|
||||||
|
'%SetPrototype%': ['Set', 'prototype'],
|
||||||
|
'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
|
||||||
|
'%StringPrototype%': ['String', 'prototype'],
|
||||||
|
'%SymbolPrototype%': ['Symbol', 'prototype'],
|
||||||
|
'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
|
||||||
|
'%TypedArrayPrototype%': ['TypedArray', 'prototype'],
|
||||||
|
'%TypeErrorPrototype%': ['TypeError', 'prototype'],
|
||||||
|
'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
|
||||||
|
'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
|
||||||
|
'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
|
||||||
|
'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
|
||||||
|
'%URIErrorPrototype%': ['URIError', 'prototype'],
|
||||||
|
'%WeakMapPrototype%': ['WeakMap', 'prototype'],
|
||||||
|
'%WeakSetPrototype%': ['WeakSet', 'prototype']
|
||||||
|
};
|
||||||
|
|
||||||
|
var bind = __nccwpck_require__(7564);
|
||||||
|
var hasOwn = __nccwpck_require__(4076);
|
||||||
|
var $concat = bind.call($call, Array.prototype.concat);
|
||||||
|
var $spliceApply = bind.call($apply, Array.prototype.splice);
|
||||||
|
var $replace = bind.call($call, String.prototype.replace);
|
||||||
|
var $strSlice = bind.call($call, String.prototype.slice);
|
||||||
|
var $exec = bind.call($call, RegExp.prototype.exec);
|
||||||
|
|
||||||
|
/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
|
||||||
|
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
|
||||||
|
var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
|
||||||
|
var stringToPath = function stringToPath(string) {
|
||||||
|
var first = $strSlice(string, 0, 1);
|
||||||
|
var last = $strSlice(string, -1);
|
||||||
|
if (first === '%' && last !== '%') {
|
||||||
|
throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
|
||||||
|
} else if (last === '%' && first !== '%') {
|
||||||
|
throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
|
||||||
|
}
|
||||||
|
var result = [];
|
||||||
|
$replace(string, rePropName, function (match, number, quote, subString) {
|
||||||
|
result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
/* end adaptation */
|
||||||
|
|
||||||
|
var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
|
||||||
|
var intrinsicName = name;
|
||||||
|
var alias;
|
||||||
|
if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
|
||||||
|
alias = LEGACY_ALIASES[intrinsicName];
|
||||||
|
intrinsicName = '%' + alias[0] + '%';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasOwn(INTRINSICS, intrinsicName)) {
|
||||||
|
var value = INTRINSICS[intrinsicName];
|
||||||
|
if (value === needsEval) {
|
||||||
|
value = doEval(intrinsicName);
|
||||||
|
}
|
||||||
|
if (typeof value === 'undefined' && !allowMissing) {
|
||||||
|
throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
alias: alias,
|
||||||
|
name: intrinsicName,
|
||||||
|
value: value
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = function GetIntrinsic(name, allowMissing) {
|
||||||
|
if (typeof name !== 'string' || name.length === 0) {
|
||||||
|
throw new $TypeError('intrinsic name must be a non-empty string');
|
||||||
|
}
|
||||||
|
if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
|
||||||
|
throw new $TypeError('"allowMissing" argument must be a boolean');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($exec(/^%?[^%]*%?$/, name) === null) {
|
||||||
|
throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');
|
||||||
|
}
|
||||||
|
var parts = stringToPath(name);
|
||||||
|
var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
|
||||||
|
|
||||||
|
var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
|
||||||
|
var intrinsicRealName = intrinsic.name;
|
||||||
|
var value = intrinsic.value;
|
||||||
|
var skipFurtherCaching = false;
|
||||||
|
|
||||||
|
var alias = intrinsic.alias;
|
||||||
|
if (alias) {
|
||||||
|
intrinsicBaseName = alias[0];
|
||||||
|
$spliceApply(parts, $concat([0, 1], alias));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 1, isOwn = true; i < parts.length; i += 1) {
|
||||||
|
var part = parts[i];
|
||||||
|
var first = $strSlice(part, 0, 1);
|
||||||
|
var last = $strSlice(part, -1);
|
||||||
|
if (
|
||||||
|
(
|
||||||
|
(first === '"' || first === "'" || first === '`')
|
||||||
|
|| (last === '"' || last === "'" || last === '`')
|
||||||
|
)
|
||||||
|
&& first !== last
|
||||||
|
) {
|
||||||
|
throw new $SyntaxError('property names with quotes must have matching quotes');
|
||||||
|
}
|
||||||
|
if (part === 'constructor' || !isOwn) {
|
||||||
|
skipFurtherCaching = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
intrinsicBaseName += '.' + part;
|
||||||
|
intrinsicRealName = '%' + intrinsicBaseName + '%';
|
||||||
|
|
||||||
|
if (hasOwn(INTRINSICS, intrinsicRealName)) {
|
||||||
|
value = INTRINSICS[intrinsicRealName];
|
||||||
|
} else if (value != null) {
|
||||||
|
if (!(part in value)) {
|
||||||
|
if (!allowMissing) {
|
||||||
|
throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
|
||||||
|
}
|
||||||
|
return void undefined;
|
||||||
|
}
|
||||||
|
if ($gOPD && (i + 1) >= parts.length) {
|
||||||
|
var desc = $gOPD(value, part);
|
||||||
|
isOwn = !!desc;
|
||||||
|
|
||||||
|
// By convention, when a data property is converted to an accessor
|
||||||
|
// property to emulate a data property that does not suffer from
|
||||||
|
// the override mistake, that accessor's getter is marked with
|
||||||
|
// an `originalValue` property. Here, when we detect this, we
|
||||||
|
// uphold the illusion by pretending to see that original data
|
||||||
|
// property, i.e., returning the value rather than the getter
|
||||||
|
// itself.
|
||||||
|
if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
|
||||||
|
value = desc.get;
|
||||||
|
} else {
|
||||||
|
value = value[part];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
isOwn = hasOwn(value, part);
|
||||||
|
value = value[part];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isOwn && !skipFurtherCaching) {
|
||||||
|
INTRINSICS[intrinsicRealName] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1311:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var $Object = __nccwpck_require__(5399);
|
||||||
|
|
||||||
|
/** @type {import('./Object.getPrototypeOf')} */
|
||||||
|
module.exports = $Object.getPrototypeOf || null;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 8681:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./Reflect.getPrototypeOf')} */
|
||||||
|
module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1967:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var reflectGetProto = __nccwpck_require__(8681);
|
||||||
|
var originalGetProto = __nccwpck_require__(1311);
|
||||||
|
|
||||||
|
var getDunderProto = __nccwpck_require__(6669);
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = reflectGetProto
|
||||||
|
? function getProto(O) {
|
||||||
|
// @ts-expect-error TS can't narrow inside a closure, for some reason
|
||||||
|
return reflectGetProto(O);
|
||||||
|
}
|
||||||
|
: originalGetProto
|
||||||
|
? function getProto(O) {
|
||||||
|
if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
|
||||||
|
throw new TypeError('getProto: not an object');
|
||||||
|
}
|
||||||
|
// @ts-expect-error TS can't narrow inside a closure, for some reason
|
||||||
|
return originalGetProto(O);
|
||||||
|
}
|
||||||
|
: getDunderProto
|
||||||
|
? function getProto(O) {
|
||||||
|
// @ts-expect-error TS can't narrow inside a closure, for some reason
|
||||||
|
return getDunderProto(O);
|
||||||
|
}
|
||||||
|
: null;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1174:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./gOPD')} */
|
||||||
|
module.exports = Object.getOwnPropertyDescriptor;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 3170:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
var $gOPD = __nccwpck_require__(1174);
|
||||||
|
|
||||||
|
if ($gOPD) {
|
||||||
|
try {
|
||||||
|
$gOPD([], 'length');
|
||||||
|
} catch (e) {
|
||||||
|
// IE 8 has a broken gOPD
|
||||||
|
$gOPD = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = $gOPD;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 3336:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var origSymbol = typeof Symbol !== 'undefined' && Symbol;
|
||||||
|
var hasSymbolSham = __nccwpck_require__(1114);
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = function hasNativeSymbols() {
|
||||||
|
if (typeof origSymbol !== 'function') { return false; }
|
||||||
|
if (typeof Symbol !== 'function') { return false; }
|
||||||
|
if (typeof origSymbol('foo') !== 'symbol') { return false; }
|
||||||
|
if (typeof Symbol('bar') !== 'symbol') { return false; }
|
||||||
|
|
||||||
|
return hasSymbolSham();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1114:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./shams')} */
|
||||||
|
/* eslint complexity: [2, 18], max-statements: [2, 33] */
|
||||||
|
module.exports = function hasSymbols() {
|
||||||
|
if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
|
||||||
|
if (typeof Symbol.iterator === 'symbol') { return true; }
|
||||||
|
|
||||||
|
/** @type {{ [k in symbol]?: unknown }} */
|
||||||
|
var obj = {};
|
||||||
|
var sym = Symbol('test');
|
||||||
|
var symObj = Object(sym);
|
||||||
|
if (typeof sym === 'string') { return false; }
|
||||||
|
|
||||||
|
if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
|
||||||
|
if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
|
||||||
|
|
||||||
|
// temp disabled per https://github.com/ljharb/object.assign/issues/17
|
||||||
|
// if (sym instanceof Symbol) { return false; }
|
||||||
|
// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
|
||||||
|
// if (!(symObj instanceof Symbol)) { return false; }
|
||||||
|
|
||||||
|
// if (typeof Symbol.prototype.toString !== 'function') { return false; }
|
||||||
|
// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
|
||||||
|
|
||||||
|
var symVal = 42;
|
||||||
|
obj[sym] = symVal;
|
||||||
|
for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
|
||||||
|
if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
|
||||||
|
|
||||||
|
if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
|
||||||
|
|
||||||
|
var syms = Object.getOwnPropertySymbols(obj);
|
||||||
|
if (syms.length !== 1 || syms[0] !== sym) { return false; }
|
||||||
|
|
||||||
|
if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
|
||||||
|
|
||||||
|
if (typeof Object.getOwnPropertyDescriptor === 'function') {
|
||||||
|
// eslint-disable-next-line no-extra-parens
|
||||||
|
var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));
|
||||||
|
if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 5479:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var hasSymbols = __nccwpck_require__(1114);
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = function hasToStringTagShams() {
|
||||||
|
return hasSymbols() && !!Symbol.toStringTag;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 4076:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var call = Function.prototype.call;
|
||||||
|
var $hasOwn = Object.prototype.hasOwnProperty;
|
||||||
|
var bind = __nccwpck_require__(7564);
|
||||||
|
|
||||||
|
/** @type {import('.')} */
|
||||||
|
module.exports = bind.call(call, $hasOwn);
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 5641:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./abs')} */
|
||||||
|
module.exports = Math.abs;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 6171:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./floor')} */
|
||||||
|
module.exports = Math.floor;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 7044:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./isNaN')} */
|
||||||
|
module.exports = Number.isNaN || function isNaN(a) {
|
||||||
|
return a !== a;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 7147:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./max')} */
|
||||||
|
module.exports = Math.max;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 1017:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./min')} */
|
||||||
|
module.exports = Math.min;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 6947:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./pow')} */
|
||||||
|
module.exports = Math.pow;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 2621:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {import('./round')} */
|
||||||
|
module.exports = Math.round;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 156:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
var $isNaN = __nccwpck_require__(7044);
|
||||||
|
|
||||||
|
/** @type {import('./sign')} */
|
||||||
|
module.exports = function sign(number) {
|
||||||
|
if ($isNaN(number) || number === 0) {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
return number < 0 ? -1 : +1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 9829:
|
/***/ 9829:
|
||||||
@@ -90317,7 +91462,7 @@ module.exports = parseParams
|
|||||||
/***/ ((module) => {
|
/***/ ((module) => {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.0.3","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","directories":{"lib":"lib","test":"__tests__"},"files":["lib","!.DS_Store"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/actions/toolkit.git","directory":"packages/cache"},"scripts":{"audit-moderate":"npm install && npm audit --json --audit-level=moderate > audit.json","test":"echo \\"Error: run tests from root\\" && exit 1","tsc":"tsc"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","@protobuf-ts/plugin":"^2.9.4","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","typescript":"^5.2.2"}}');
|
module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.1.0","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","directories":{"lib":"lib","test":"__tests__"},"files":["lib","!.DS_Store"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/actions/toolkit.git","directory":"packages/cache"},"scripts":{"audit-moderate":"npm install && npm audit --json --audit-level=moderate > audit.json","test":"echo \\"Error: run tests from root\\" && exit 1","tsc":"tsc"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@protobuf-ts/runtime-rpc":"^2.11.1","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","@protobuf-ts/plugin":"^2.9.4","typescript":"^5.2.2"}}');
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
|
|||||||
Vendored
+3095
-1764
File diff suppressed because one or more lines are too long
+98
-71
@@ -45,10 +45,10 @@ If `check-latest` is set to `true`, the action first checks if the cached versio
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '16'
|
node-version: '24'
|
||||||
check-latest: true
|
check-latest: true
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
@@ -63,8 +63,8 @@ See [supported version syntax](https://github.com/actions/setup-node#supported-v
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version-file: '.nvmrc'
|
node-version-file: '.nvmrc'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
@@ -97,10 +97,10 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '24'
|
||||||
architecture: 'x64' # optional, x64 or x86. If not specified, x64 will be used by default
|
architecture: 'x64' # optional, x64 or x86. If not specified, x64 will be used by default
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
@@ -118,10 +118,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '20.0.0-v8-canary' # it will install the latest v8 canary release for node 20.0.0
|
node-version: '24.0.0-v8-canary' # it will install the latest v8 canary release for node 24.0.0
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -133,10 +133,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '20-v8-canary' # it will install the latest v8 canary release for node 20
|
node-version: '24-v8-canary' # it will install the latest v8 canary release for node 24
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -149,10 +149,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 'v20.1.1-v8-canary20221103f7e2421e91'
|
node-version: 'v24.0.0-v8-canary2025030537242e55ac'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -169,10 +169,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '16-nightly' # it will install the latest nightly release for node 16
|
node-version: '24-nightly' # it will install the latest nightly release for node 24
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -185,10 +185,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '16.0.0-nightly' # it will install the latest nightly release for node 16.0.0
|
node-version: '24.0.0-nightly' # it will install the latest nightly release for node 24.0.0
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -201,10 +201,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '16.0.0-nightly20210420a0261d231c'
|
node-version: '24.0.0-nightly202505066102159fa1'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
@@ -219,27 +219,28 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Node sample
|
name: Node sample
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '16.0.0-rc.1'
|
node-version: '24.0.0-rc.4'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note:** Unlike nightly versions, which support version range specifiers, you must specify the exact version for a release candidate: `16.0.0-rc.1`.
|
**Note:** Unlike nightly versions, which support version range specifiers, you must specify the exact version for a release candidate: `24.0.0-rc.4`.
|
||||||
|
|
||||||
## Caching packages data
|
## Caching packages data
|
||||||
The action follows [actions/cache](https://github.com/actions/cache/blob/main/examples.md#node---npm) guidelines, and caches global cache on the machine instead of `node_modules`, so cache can be reused between different Node.js versions.
|
The action follows [actions/cache](https://github.com/actions/cache/blob/main/examples.md#node---npm) guidelines, and caches global cache on the machine instead of `node_modules`, so cache can be reused between different Node.js versions.
|
||||||
|
|
||||||
**Caching yarn dependencies:**
|
**Caching yarn dependencies:**
|
||||||
Yarn caching handles both yarn versions: 1 or 2.
|
Yarn caching handles both Yarn Classic (v1) and Yarn Berry (v2, v3, v4+).
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '24'
|
||||||
cache: 'yarn'
|
cache: 'yarn'
|
||||||
- run: yarn install --frozen-lockfile # optional, --immutable
|
- run: yarn install --frozen-lockfile # optional, --immutable
|
||||||
- run: yarn test
|
- run: yarn test
|
||||||
@@ -255,13 +256,13 @@ steps:
|
|||||||
# NOTE: pnpm caching support requires pnpm version >= 6.10.0
|
# NOTE: pnpm caching support requires pnpm version >= 6.10.0
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: pnpm/action-setup@v2
|
- uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 6.32.9
|
version: 10
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '24'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
- run: pnpm install
|
- run: pnpm install
|
||||||
- run: pnpm test
|
- run: pnpm test
|
||||||
@@ -274,10 +275,10 @@ steps:
|
|||||||
**Using wildcard patterns to cache dependencies**
|
**Using wildcard patterns to cache dependencies**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '24'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/package-lock.json'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
@@ -287,10 +288,10 @@ steps:
|
|||||||
**Using a list of file paths to cache dependencies**
|
**Using a list of file paths to cache dependencies**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14'
|
node-version: '24'
|
||||||
cache: 'npm'
|
cache: 'npm'
|
||||||
cache-dependency-path: |
|
cache-dependency-path: |
|
||||||
server/app/package-lock.json
|
server/app/package-lock.json
|
||||||
@@ -299,6 +300,35 @@ steps:
|
|||||||
- run: npm test
|
- run: npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Restore-Only Cache**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
## In some workflows, you may want to restore a cache without saving it. This can help reduce cache writes and storage usage in workflows that only need to read from cache
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
# Restore Node.js modules cache (restore-only)
|
||||||
|
- name: Restore Node modules cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
id: cache-node-modules
|
||||||
|
with:
|
||||||
|
path: ~/.npm
|
||||||
|
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-node-
|
||||||
|
# Setup Node.js
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: '24'
|
||||||
|
# Install dependencies
|
||||||
|
- run: npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
> For more details related to cache scenarios, please refer [Node – npm](https://github.com/actions/cache/blob/main/examples.md#node---npm).
|
||||||
|
|
||||||
## Multiple Operating Systems and Architectures
|
## Multiple Operating Systems and Architectures
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -312,21 +342,21 @@ jobs:
|
|||||||
- macos-latest
|
- macos-latest
|
||||||
- windows-latest
|
- windows-latest
|
||||||
node_version:
|
node_version:
|
||||||
- 12
|
- 20
|
||||||
- 14
|
- 22
|
||||||
- 16
|
- 24
|
||||||
architecture:
|
architecture:
|
||||||
- x64
|
- x64
|
||||||
# an extra windows-x86 run:
|
# an extra windows-x86 run:
|
||||||
include:
|
include:
|
||||||
- os: windows-2016
|
- os: windows-latest
|
||||||
node_version: 12
|
node_version: 24
|
||||||
architecture: x86
|
architecture: x86
|
||||||
name: Node ${{ matrix.node_version }} - ${{ matrix.architecture }} on ${{ matrix.os }}
|
name: Node ${{ matrix.node_version }} - ${{ matrix.architecture }} on ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Setup node
|
- name: Setup node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node_version }}
|
node-version: ${{ matrix.node_version }}
|
||||||
architecture: ${{ matrix.architecture }}
|
architecture: ${{ matrix.architecture }}
|
||||||
@@ -337,16 +367,16 @@ jobs:
|
|||||||
## Publish to npmjs and GPR with npm
|
## Publish to npmjs and GPR with npm
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14.x'
|
node-version: '24.x'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm publish
|
- run: npm publish
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
registry-url: 'https://npm.pkg.github.com'
|
registry-url: 'https://npm.pkg.github.com'
|
||||||
- run: npm publish
|
- run: npm publish
|
||||||
@@ -357,16 +387,16 @@ steps:
|
|||||||
## Publish to npmjs and GPR with yarn
|
## Publish to npmjs and GPR with yarn
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14.x'
|
node-version: '24.x'
|
||||||
registry-url: <registry url>
|
registry-url: <registry url>
|
||||||
- run: yarn install --frozen-lockfile
|
- run: yarn install --frozen-lockfile
|
||||||
- run: yarn publish
|
- run: yarn publish
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }}
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
registry-url: 'https://npm.pkg.github.com'
|
registry-url: 'https://npm.pkg.github.com'
|
||||||
- run: yarn publish
|
- run: yarn publish
|
||||||
@@ -377,10 +407,10 @@ steps:
|
|||||||
## Use private packages
|
## Use private packages
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14.x'
|
node-version: '24.x'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
# Skip post-install scripts here, as a malicious
|
# Skip post-install scripts here, as a malicious
|
||||||
# script could steal NODE_AUTH_TOKEN.
|
# script could steal NODE_AUTH_TOKEN.
|
||||||
@@ -397,10 +427,10 @@ Below you can find a sample "Setup .yarnrc.yml" step, that is going to allow you
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14.x'
|
node-version: '24.x'
|
||||||
- name: Setup .yarnrc.yml
|
- name: Setup .yarnrc.yml
|
||||||
run: |
|
run: |
|
||||||
yarn config set npmScopes.my-org.npmRegistryServer "https://npm.pkg.github.com"
|
yarn config set npmScopes.my-org.npmRegistryServer "https://npm.pkg.github.com"
|
||||||
@@ -416,9 +446,6 @@ To access private GitHub Packages within the same organization, go to "Manage Ac
|
|||||||
|
|
||||||
Please refer to the [Ensuring workflow access to your package - Configuring a package's access control and visibility](https://docs.github.com/en/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package) for more details.
|
Please refer to the [Ensuring workflow access to your package - Configuring a package's access control and visibility](https://docs.github.com/en/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package) for more details.
|
||||||
|
|
||||||
### always-auth input
|
|
||||||
The always-auth input sets `always-auth=true` in .npmrc file. With this option set [npm](https://docs.npmjs.com/cli/v6/using-npm/config#always-auth)/yarn sends the authentication credentials when making a request to the registries.
|
|
||||||
|
|
||||||
## Use private mirror
|
## Use private mirror
|
||||||
|
|
||||||
It is possible to use a private mirror hosting Node.js binaries. This mirror must be a full mirror of the official Node.js distribution.
|
It is possible to use a private mirror hosting Node.js binaries. This mirror must be a full mirror of the official Node.js distribution.
|
||||||
@@ -427,9 +454,9 @@ It is possible to specify a token to authenticate with the mirror using the `mir
|
|||||||
The token will be passed as a bearer token in the `Authorization` header.
|
The token will be passed as a bearer token in the `Authorization` header.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '14.x'
|
node-version: '24.x'
|
||||||
mirror: 'https://nodejs.org/dist'
|
mirror: 'https://nodejs.org/dist'
|
||||||
mirror-token: 'your-mirror-token'
|
mirror-token: 'your-mirror-token'
|
||||||
```
|
```
|
||||||
|
|||||||
Generated
+143
-114
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-node",
|
"name": "setup-node",
|
||||||
"version": "4.0.0",
|
"version": "6.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "setup-node",
|
"name": "setup-node",
|
||||||
"version": "4.0.0",
|
"version": "6.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^4.0.3",
|
"@actions/cache": "^4.1.0",
|
||||||
"@actions/core": "^1.11.1",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^6.0.1",
|
"@actions/github": "^6.0.1",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^20.11.25",
|
"@types/node": "^24.1.0",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
||||||
"@typescript-eslint/parser": "^5.54.0",
|
"@typescript-eslint/parser": "^5.54.0",
|
||||||
@@ -34,9 +34,12 @@
|
|||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-circus": "^29.7.0",
|
"jest-circus": "^29.7.0",
|
||||||
"jest-each": "^29.7.0",
|
"jest-each": "^29.7.0",
|
||||||
"prettier": "^2.8.4",
|
"prettier": "^3.6.2",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^29.4.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=24.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@aashutoshrathi/word-wrap": {
|
"node_modules/@aashutoshrathi/word-wrap": {
|
||||||
@@ -49,9 +52,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/cache": {
|
"node_modules/@actions/cache": {
|
||||||
"version": "4.0.3",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-4.1.0.tgz",
|
||||||
"integrity": "sha512-SvrqFtYJ7I48A/uXNkoJrnukx5weQv1fGquhs3+4nkByZThBH109KTIqj5x/cGV7JGNvb8dLPVywUOqX1fjiXg==",
|
"integrity": "sha512-z3Opg+P4Y7baq+g1dODXgdtsvPLSewr3ZKpp3U0HQR1A/vWCoJFS52XSezjdngo4SIOdR5oHtyK3a3Arar+X9A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.11.1",
|
"@actions/core": "^1.11.1",
|
||||||
@@ -62,7 +65,7 @@
|
|||||||
"@azure/abort-controller": "^1.1.0",
|
"@azure/abort-controller": "^1.1.0",
|
||||||
"@azure/ms-rest-js": "^2.6.0",
|
"@azure/ms-rest-js": "^2.6.0",
|
||||||
"@azure/storage-blob": "^12.13.0",
|
"@azure/storage-blob": "^12.13.0",
|
||||||
"@protobuf-ts/plugin": "^2.9.4",
|
"@protobuf-ts/runtime-rpc": "^2.11.1",
|
||||||
"semver": "^6.3.1"
|
"semver": "^6.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -991,10 +994,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
|
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
|
||||||
"version": "3.14.1",
|
"version": "3.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
|
||||||
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
|
"integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"argparse": "^1.0.7",
|
"argparse": "^1.0.7",
|
||||||
"esprima": "^4.0.0"
|
"esprima": "^4.0.0"
|
||||||
@@ -1587,81 +1591,19 @@
|
|||||||
"node": ">=8.0.0"
|
"node": ">=8.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@protobuf-ts/plugin": {
|
|
||||||
"version": "2.9.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@protobuf-ts/plugin/-/plugin-2.9.5.tgz",
|
|
||||||
"integrity": "sha512-KCzNRTFye837XdfPjS85gGzxgPGVDR3W8Px2G3etXuouNog9W+Cr+U0IBTFADrRWXC2x+OSNjXxrdZEiw+H5Cw==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@protobuf-ts/plugin-framework": "^2.9.5",
|
|
||||||
"@protobuf-ts/protoc": "^2.9.5",
|
|
||||||
"@protobuf-ts/runtime": "^2.9.5",
|
|
||||||
"@protobuf-ts/runtime-rpc": "^2.9.5",
|
|
||||||
"typescript": "^3.9"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"protoc-gen-dump": "bin/protoc-gen-dump",
|
|
||||||
"protoc-gen-ts": "bin/protoc-gen-ts"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@protobuf-ts/plugin-framework": {
|
|
||||||
"version": "2.9.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@protobuf-ts/plugin-framework/-/plugin-framework-2.9.5.tgz",
|
|
||||||
"integrity": "sha512-DYNQ8Ga3xwPZMfaZGRCnDOcEdQZK9MorTXngVoFLnHWEE8zLhUjFVtdkChZtTih6rl8Z6akyA7hRgj/GrJF58Q==",
|
|
||||||
"license": "(Apache-2.0 AND BSD-3-Clause)",
|
|
||||||
"dependencies": {
|
|
||||||
"@protobuf-ts/runtime": "^2.9.5",
|
|
||||||
"typescript": "^3.9"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@protobuf-ts/plugin-framework/node_modules/typescript": {
|
|
||||||
"version": "3.9.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
|
|
||||||
"integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bin": {
|
|
||||||
"tsc": "bin/tsc",
|
|
||||||
"tsserver": "bin/tsserver"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@protobuf-ts/plugin/node_modules/typescript": {
|
|
||||||
"version": "3.9.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
|
|
||||||
"integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bin": {
|
|
||||||
"tsc": "bin/tsc",
|
|
||||||
"tsserver": "bin/tsserver"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@protobuf-ts/protoc": {
|
|
||||||
"version": "2.9.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@protobuf-ts/protoc/-/protoc-2.9.5.tgz",
|
|
||||||
"integrity": "sha512-n6a7OHfr/Ubw483L6kNJB0wBCe/Ops0A652zB6J6nR2x1o+pjVFrMCeeQQsqxkYpQwQ8FCIETSxrMpfOBKTIvQ==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bin": {
|
|
||||||
"protoc": "protoc.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@protobuf-ts/runtime": {
|
"node_modules/@protobuf-ts/runtime": {
|
||||||
"version": "2.9.5",
|
"version": "2.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.9.5.tgz",
|
"resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.11.1.tgz",
|
||||||
"integrity": "sha512-SsumigRe3IqNTCQvVZUqDQExsKF72eyAMiWlYb5Jwj3eU4z8UH7JLlSfb/Wjidz4b/chTN6zh5AXBSKl0Asm3A==",
|
"integrity": "sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==",
|
||||||
"license": "(Apache-2.0 AND BSD-3-Clause)"
|
"license": "(Apache-2.0 AND BSD-3-Clause)"
|
||||||
},
|
},
|
||||||
"node_modules/@protobuf-ts/runtime-rpc": {
|
"node_modules/@protobuf-ts/runtime-rpc": {
|
||||||
"version": "2.9.5",
|
"version": "2.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.5.tgz",
|
"resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz",
|
||||||
"integrity": "sha512-NWAb1TaV4CR+BknZr1WRVT5Ws2AupVwGgRNes4oPAFrgLNXQotDFl2E6pmsjPwME8sAgJVzeSr7bUqQVyoAK2A==",
|
"integrity": "sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@protobuf-ts/runtime": "^2.9.5"
|
"@protobuf-ts/runtime": "^2.11.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sinclair/typebox": {
|
"node_modules/@sinclair/typebox": {
|
||||||
@@ -1780,11 +1722,12 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.11.25",
|
"version": "24.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz",
|
||||||
"integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
|
"integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.26.4"
|
"undici-types": "~7.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node-fetch": {
|
"node_modules/@types/node-fetch": {
|
||||||
@@ -3500,6 +3443,28 @@
|
|||||||
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/handlebars": {
|
||||||
|
"version": "4.7.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
|
||||||
|
"integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"minimist": "^1.2.5",
|
||||||
|
"neo-async": "^2.6.2",
|
||||||
|
"source-map": "^0.6.1",
|
||||||
|
"wordwrap": "^1.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"handlebars": "bin/handlebars"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.7"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"uglify-js": "^3.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/has-flag": {
|
"node_modules/has-flag": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
@@ -4351,10 +4316,11 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
|
||||||
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"argparse": "^2.0.1"
|
"argparse": "^2.0.1"
|
||||||
},
|
},
|
||||||
@@ -4597,6 +4563,16 @@
|
|||||||
"node": "*"
|
"node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/minimist": {
|
||||||
|
"version": "1.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||||
|
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ms": {
|
"node_modules/ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
@@ -4615,6 +4591,13 @@
|
|||||||
"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
|
"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/neo-async": {
|
||||||
|
"version": "2.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
|
||||||
|
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||||
@@ -4919,15 +4902,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prettier": {
|
"node_modules/prettier": {
|
||||||
"version": "2.8.8",
|
"version": "3.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
|
||||||
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
|
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"prettier": "bin-prettier.js"
|
"prettier": "bin/prettier.cjs"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.13.0"
|
"node": ">=14"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||||
@@ -5181,9 +5165,9 @@
|
|||||||
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
|
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.6.3",
|
"version": "7.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||||
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
@@ -5417,37 +5401,44 @@
|
|||||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||||
},
|
},
|
||||||
"node_modules/ts-jest": {
|
"node_modules/ts-jest": {
|
||||||
"version": "29.1.2",
|
"version": "29.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz",
|
||||||
"integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==",
|
"integrity": "sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bs-logger": "0.x",
|
"bs-logger": "^0.2.6",
|
||||||
"fast-json-stable-stringify": "2.x",
|
"fast-json-stable-stringify": "^2.1.0",
|
||||||
"jest-util": "^29.0.0",
|
"handlebars": "^4.7.8",
|
||||||
"json5": "^2.2.3",
|
"json5": "^2.2.3",
|
||||||
"lodash.memoize": "4.x",
|
"lodash.memoize": "^4.1.2",
|
||||||
"make-error": "1.x",
|
"make-error": "^1.3.6",
|
||||||
"semver": "^7.5.3",
|
"semver": "^7.7.2",
|
||||||
"yargs-parser": "^21.0.1"
|
"type-fest": "^4.41.0",
|
||||||
|
"yargs-parser": "^21.1.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"ts-jest": "cli.js"
|
"ts-jest": "cli.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^16.10.0 || ^18.0.0 || >=20.0.0"
|
"node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@babel/core": ">=7.0.0-beta.0 <8",
|
"@babel/core": ">=7.0.0-beta.0 <8",
|
||||||
"@jest/types": "^29.0.0",
|
"@jest/transform": "^29.0.0 || ^30.0.0",
|
||||||
"babel-jest": "^29.0.0",
|
"@jest/types": "^29.0.0 || ^30.0.0",
|
||||||
"jest": "^29.0.0",
|
"babel-jest": "^29.0.0 || ^30.0.0",
|
||||||
|
"jest": "^29.0.0 || ^30.0.0",
|
||||||
|
"jest-util": "^29.0.0 || ^30.0.0",
|
||||||
"typescript": ">=4.3 <6"
|
"typescript": ">=4.3 <6"
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
"@babel/core": {
|
"@babel/core": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"@jest/transform": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"@jest/types": {
|
"@jest/types": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
@@ -5456,9 +5447,25 @@
|
|||||||
},
|
},
|
||||||
"esbuild": {
|
"esbuild": {
|
||||||
"optional": true
|
"optional": true
|
||||||
|
},
|
||||||
|
"jest-util": {
|
||||||
|
"optional": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ts-jest/node_modules/type-fest": {
|
||||||
|
"version": "4.41.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
|
||||||
|
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "(MIT OR CC0-1.0)",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tslib": {
|
"node_modules/tslib": {
|
||||||
"version": "2.6.2",
|
"version": "2.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
|
||||||
@@ -5539,6 +5546,20 @@
|
|||||||
"node": ">=14.17"
|
"node": ">=14.17"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/uglify-js": {
|
||||||
|
"version": "3.19.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
|
||||||
|
"integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
|
"optional": true,
|
||||||
|
"bin": {
|
||||||
|
"uglifyjs": "bin/uglifyjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/undici": {
|
"node_modules/undici": {
|
||||||
"version": "5.29.0",
|
"version": "5.29.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
|
"resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
|
||||||
@@ -5552,9 +5573,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici-types": {
|
"node_modules/undici-types": {
|
||||||
"version": "5.26.5",
|
"version": "7.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
|
||||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
|
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
||||||
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/universal-user-agent": {
|
"node_modules/universal-user-agent": {
|
||||||
"version": "6.0.1",
|
"version": "6.0.1",
|
||||||
@@ -5666,6 +5688,13 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wordwrap": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/wrap-ansi": {
|
"node_modules/wrap-ansi": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||||
|
|||||||
+8
-5
@@ -1,9 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-node",
|
"name": "setup-node",
|
||||||
"version": "4.0.0",
|
"version": "6.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "setup node action",
|
"description": "setup node action",
|
||||||
"main": "lib/setup-node.js",
|
"main": "lib/setup-node.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=24.0.0"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "ncc build -o dist/setup src/setup-node.ts && ncc build -o dist/cache-save src/cache-save.ts",
|
"build": "ncc build -o dist/setup src/setup-node.ts && ncc build -o dist/cache-save src/cache-save.ts",
|
||||||
"format": "prettier --no-error-on-unmatched-pattern --config ./.prettierrc.js --write \"**/*.{ts,yml,yaml}\"",
|
"format": "prettier --no-error-on-unmatched-pattern --config ./.prettierrc.js --write \"**/*.{ts,yml,yaml}\"",
|
||||||
@@ -25,7 +28,7 @@
|
|||||||
"author": "GitHub",
|
"author": "GitHub",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^4.0.3",
|
"@actions/cache": "^4.1.0",
|
||||||
"@actions/core": "^1.11.1",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^6.0.1",
|
"@actions/github": "^6.0.1",
|
||||||
@@ -38,7 +41,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.14",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^20.11.25",
|
"@types/node": "^24.1.0",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
||||||
"@typescript-eslint/parser": "^5.54.0",
|
"@typescript-eslint/parser": "^5.54.0",
|
||||||
@@ -50,8 +53,8 @@
|
|||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-circus": "^29.7.0",
|
"jest-circus": "^29.7.0",
|
||||||
"jest-each": "^29.7.0",
|
"jest-each": "^29.7.0",
|
||||||
"prettier": "^2.8.4",
|
"prettier": "^3.6.2",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^29.4.1",
|
||||||
"typescript": "^5.4.2"
|
"typescript": "^5.4.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-9
@@ -4,7 +4,7 @@ import * as path from 'path';
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as github from '@actions/github';
|
import * as github from '@actions/github';
|
||||||
|
|
||||||
export function configAuthentication(registryUrl: string, alwaysAuth: string) {
|
export function configAuthentication(registryUrl: string) {
|
||||||
const npmrc: string = path.resolve(
|
const npmrc: string = path.resolve(
|
||||||
process.env['RUNNER_TEMP'] || process.cwd(),
|
process.env['RUNNER_TEMP'] || process.cwd(),
|
||||||
'.npmrc'
|
'.npmrc'
|
||||||
@@ -13,14 +13,10 @@ export function configAuthentication(registryUrl: string, alwaysAuth: string) {
|
|||||||
registryUrl += '/';
|
registryUrl += '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
|
writeRegistryToFile(registryUrl, npmrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeRegistryToFile(
|
function writeRegistryToFile(registryUrl: string, fileLocation: string) {
|
||||||
registryUrl: string,
|
|
||||||
fileLocation: string,
|
|
||||||
alwaysAuth: string
|
|
||||||
) {
|
|
||||||
let scope: string = core.getInput('scope');
|
let scope: string = core.getInput('scope');
|
||||||
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
|
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
|
||||||
scope = github.context.repo.owner;
|
scope = github.context.repo.owner;
|
||||||
@@ -47,8 +43,7 @@ function writeRegistryToFile(
|
|||||||
const authString: string =
|
const authString: string =
|
||||||
registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
|
registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
|
||||||
const registryString = `${scope}registry=${registryUrl}`;
|
const registryString = `${scope}registry=${registryUrl}`;
|
||||||
const alwaysAuthString = `always-auth=${alwaysAuth}`;
|
newContents += `${authString}${os.EOL}${registryString}`;
|
||||||
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
|
||||||
fs.writeFileSync(fileLocation, newContents);
|
fs.writeFileSync(fileLocation, newContents);
|
||||||
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
|
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
|
||||||
// Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it
|
// Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {getPackageManagerInfo} from './cache-utils';
|
|||||||
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
|
||||||
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
|
||||||
// throw an uncaught exception. Instead of failing this action, just warn.
|
// throw an uncaught exception. Instead of failing this action, just warn.
|
||||||
|
|
||||||
process.on('uncaughtException', e => {
|
process.on('uncaughtException', e => {
|
||||||
const warningPrefix = '[warning]';
|
const warningPrefix = '[warning]';
|
||||||
core.info(`${warningPrefix}${e.message}`);
|
core.info(`${warningPrefix}${e.message}`);
|
||||||
|
|||||||
+4
-6
@@ -167,14 +167,12 @@ const getCacheDirectoriesFromCacheDependencyPath = async (
|
|||||||
packageManagerInfo: PackageManagerInfo,
|
packageManagerInfo: PackageManagerInfo,
|
||||||
cacheDependencyPath: string
|
cacheDependencyPath: string
|
||||||
): Promise<string[]> => {
|
): Promise<string[]> => {
|
||||||
const projectDirectories = await getProjectDirectoriesFromCacheDependencyPath(
|
const projectDirectories =
|
||||||
cacheDependencyPath
|
await getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath);
|
||||||
);
|
|
||||||
const cacheFoldersPaths = await Promise.all(
|
const cacheFoldersPaths = await Promise.all(
|
||||||
projectDirectories.map(async projectDirectory => {
|
projectDirectories.map(async projectDirectory => {
|
||||||
const cacheFolderPath = await packageManagerInfo.getCacheFolderPath(
|
const cacheFolderPath =
|
||||||
projectDirectory
|
await packageManagerInfo.getCacheFolderPath(projectDirectory);
|
||||||
);
|
|
||||||
core.debug(
|
core.debug(
|
||||||
`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the directory "${projectDirectory}"`
|
`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the directory "${projectDirectory}"`
|
||||||
);
|
);
|
||||||
|
|||||||
+53
-4
@@ -1,6 +1,7 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
import * as auth from './authutil';
|
import * as auth from './authutil';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
@@ -20,6 +21,9 @@ export async function run() {
|
|||||||
|
|
||||||
let arch = core.getInput('architecture');
|
let arch = core.getInput('architecture');
|
||||||
const cache = core.getInput('cache');
|
const cache = core.getInput('cache');
|
||||||
|
const packagemanagercache =
|
||||||
|
(core.getInput('package-manager-cache') || 'true').toUpperCase() ===
|
||||||
|
'TRUE';
|
||||||
|
|
||||||
// if architecture supplied but node-version is not
|
// if architecture supplied but node-version is not
|
||||||
// if we don't throw a warning, the already installed x64 node will be used which is not probably what user meant.
|
// if we don't throw a warning, the already installed x64 node will be used which is not probably what user meant.
|
||||||
@@ -58,15 +62,29 @@ export async function run() {
|
|||||||
await printEnvDetailsAndSetOutput();
|
await printEnvDetailsAndSetOutput();
|
||||||
|
|
||||||
const registryUrl: string = core.getInput('registry-url');
|
const registryUrl: string = core.getInput('registry-url');
|
||||||
const alwaysAuth: string = core.getInput('always-auth');
|
|
||||||
if (registryUrl) {
|
if (registryUrl) {
|
||||||
auth.configAuthentication(registryUrl, alwaysAuth);
|
auth.configAuthentication(registryUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cache && isCacheFeatureAvailable()) {
|
|
||||||
core.saveState(State.CachePackageManager, cache);
|
|
||||||
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
||||||
|
|
||||||
|
if (isCacheFeatureAvailable()) {
|
||||||
|
// if the cache input is provided, use it for caching.
|
||||||
|
if (cache) {
|
||||||
|
core.saveState(State.CachePackageManager, cache);
|
||||||
await restoreCache(cache, cacheDependencyPath);
|
await restoreCache(cache, cacheDependencyPath);
|
||||||
|
// package manager npm is detected from package.json, enable auto-caching for npm.
|
||||||
|
} else if (packagemanagercache) {
|
||||||
|
const resolvedPackageManager = getNameFromPackageManagerField();
|
||||||
|
if (resolvedPackageManager) {
|
||||||
|
core.info(
|
||||||
|
"Detected npm as the package manager from package.json's packageManager field. " +
|
||||||
|
'Auto caching has been enabled for npm. If you want to disable it, set package-manager-cache input to false'
|
||||||
|
);
|
||||||
|
core.saveState(State.CachePackageManager, resolvedPackageManager);
|
||||||
|
await restoreCache(resolvedPackageManager, cacheDependencyPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const matchersPath = path.join(__dirname, '../..', '.github');
|
const matchersPath = path.join(__dirname, '../..', '.github');
|
||||||
@@ -117,3 +135,34 @@ function resolveVersionInput(): string {
|
|||||||
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getNameFromPackageManagerField(): string | undefined {
|
||||||
|
const npmRegex = /^(\^)?npm(@.*)?$/; // matches "npm", "npm@...", "^npm@..."
|
||||||
|
try {
|
||||||
|
const packageJson = JSON.parse(
|
||||||
|
fs.readFileSync(
|
||||||
|
path.join(process.env.GITHUB_WORKSPACE!, 'package.json'),
|
||||||
|
'utf-8'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Check devEngines.packageManager first (object or array)
|
||||||
|
const devPM = packageJson?.devEngines?.packageManager;
|
||||||
|
const devPMArray = devPM ? (Array.isArray(devPM) ? devPM : [devPM]) : [];
|
||||||
|
for (const obj of devPMArray) {
|
||||||
|
if (typeof obj?.name === 'string' && npmRegex.test(obj.name)) {
|
||||||
|
return 'npm';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check top-level packageManager
|
||||||
|
const topLevelPM = packageJson?.packageManager;
|
||||||
|
if (typeof topLevelPM === 'string' && npmRegex.test(topLevelPM)) {
|
||||||
|
return 'npm';
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
} catch {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user