mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-25 19:00:01 +00:00
Compare commits
31 Commits
@vercel/ne
...
testing_fa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2fa8af9136 | ||
|
|
2090719c39 | ||
|
|
11813250ce | ||
|
|
58bec9aa01 | ||
|
|
dd199896ab | ||
|
|
9ee7d31957 | ||
|
|
1eb76a3ae7 | ||
|
|
ccd7eb1fb7 | ||
|
|
41c44d6594 | ||
|
|
446ac49e2b | ||
|
|
d3c1267e24 | ||
|
|
b09d7b6130 | ||
|
|
f78b315a50 | ||
|
|
ad69454352 | ||
|
|
14059906d3 | ||
|
|
1682ad43d0 | ||
|
|
423630a168 | ||
|
|
2f7a6ed5f9 | ||
|
|
67afc26085 | ||
|
|
c224fb1d2e | ||
|
|
5014b1e82a | ||
|
|
6a8a84907b | ||
|
|
722adf0e10 | ||
|
|
bc5fd41158 | ||
|
|
e87d4c14d0 | ||
|
|
bc95d764b4 | ||
|
|
1b5ce5644f | ||
|
|
18d1703d5b | ||
|
|
5c6f9c0b66 | ||
|
|
809740b385 | ||
|
|
bf9acd023d |
2
.changeset/gorgeous-cycles-sell.md
Normal file
2
.changeset/gorgeous-cycles-sell.md
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
---
|
||||
5
.changeset/lemon-bears-talk.md
Normal file
5
.changeset/lemon-bears-talk.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@vercel/build-utils": patch
|
||||
---
|
||||
|
||||
reject mismatched corepack and detected package managers
|
||||
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@@ -5,13 +5,13 @@
|
||||
* @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads
|
||||
/.github/workflows @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @ijjk
|
||||
/packages/fs-detectors @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @agadzik @chloetedder
|
||||
/packages/next @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood @styfle
|
||||
/packages/next @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood
|
||||
/packages/routing-utils @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @ijjk
|
||||
/packages/static-build @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads
|
||||
/packages/edge @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @vercel/compute
|
||||
/examples @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @leerob
|
||||
/examples/create-react-app @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @Timer
|
||||
/examples/nextjs @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood @styfle
|
||||
/examples/nextjs @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @timneutkens @ijjk @ztanner @huozhi @Ethan-Arrowood
|
||||
/packages/node @TooTallNate @EndangeredMassa @trek @onsclom @jeffsee55 @erikareads @Kikobeats
|
||||
|
||||
# Unrestricted Paths
|
||||
|
||||
124
.github/workflows/test-18.yml
vendored
Normal file
124
.github/workflows/test-18.yml
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
name: Tests Node.js v18
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
tags:
|
||||
- '!*'
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
NODE_VERSION: '18'
|
||||
TURBO_REMOTE_ONLY: 'true'
|
||||
TURBO_TEAM: 'vercel'
|
||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
||||
|
||||
jobs:
|
||||
setup:
|
||||
name: Find Changes
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
tests: ${{ steps['set-tests'].outputs['tests'] }}
|
||||
dplUrl: ${{ steps.waitForTarball.outputs.url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
- name: install pnpm@8.3.1
|
||||
run: npm i -g pnpm@8.3.1
|
||||
- run: pnpm install
|
||||
- id: set-tests
|
||||
run: |
|
||||
TESTS_ARRAY=$(node utils/chunk-tests-18.js $SCRIPT_NAME)
|
||||
echo "Files to test:"
|
||||
echo "$TESTS_ARRAY"
|
||||
echo "tests=$TESTS_ARRAY" >> $GITHUB_OUTPUT
|
||||
- uses: patrickedqvist/wait-for-vercel-preview@bfdff514ff78a669f2536e9f4dd4ef5813a704a2
|
||||
id: waitForTarball
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
max_timeout: 360
|
||||
check_interval: 5
|
||||
test:
|
||||
timeout-minutes: 120
|
||||
runs-on: ${{ matrix.runner }}
|
||||
name: ${{matrix.scriptName}} (${{matrix.packageName}}, ${{matrix.chunkNumber}}, ${{ matrix.runner }})
|
||||
if: ${{ needs.setup.outputs['tests'] != '[]' }}
|
||||
needs:
|
||||
- setup
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include: ${{ fromJson(needs.setup.outputs['tests']) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.nodeVersion || env.NODE_VERSION }}
|
||||
|
||||
# yarn 1.22.21 introduced a Corepack bug when running tests.
|
||||
# this can be removed once https://github.com/yarnpkg/yarn/issues/9015 is resolved
|
||||
- name: install yarn@1.22.19
|
||||
run: npm i -g yarn@1.22.19
|
||||
|
||||
- name: install pnpm@8.3.1
|
||||
run: npm i -g pnpm@8.3.1
|
||||
|
||||
- run: pnpm install
|
||||
|
||||
- name: Build ${{matrix.packageName}} and all its dependencies
|
||||
run: node utils/gen.js && node_modules/.bin/turbo run build --cache-dir=".turbo" --log-order=stream --scope=${{matrix.packageName}} --include-dependencies --no-deps
|
||||
env:
|
||||
FORCE_COLOR: '1'
|
||||
- name: Test ${{matrix.packageName}}
|
||||
run: node utils/gen.js && node_modules/.bin/turbo run ${{matrix.testScript}} --summarize --cache-dir=".turbo" --log-order=stream --scope=${{matrix.packageName}} --no-deps -- ${{ join(matrix.testPaths, ' ') }}
|
||||
shell: bash
|
||||
env:
|
||||
JEST_JUNIT_OUTPUT_FILE: ${{github.workspace}}/.junit-reports/${{matrix.scriptName}}-${{matrix.packageName}}-${{matrix.chunkNumber}}-${{ matrix.runner }}.xml
|
||||
VERCEL_CLI_VERSION: ${{ needs.setup.outputs.dplUrl }}/tarballs/vercel.tgz
|
||||
VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }}
|
||||
VERCEL_TEST_REGISTRATION_URL: ${{ secrets.VERCEL_TEST_REGISTRATION_URL }}
|
||||
FORCE_COLOR: '1'
|
||||
- name: 'Determine Turbo HIT or MISS'
|
||||
if: ${{ !cancelled() }}
|
||||
id: turbo-summary
|
||||
shell: bash
|
||||
run: |
|
||||
TURBO_MISS_COUNT=`node utils/determine-turbo-hit-or-miss.js`
|
||||
echo "MISS COUNT: $TURBO_MISS_COUNT"
|
||||
echo "misses=$TURBO_MISS_COUNT" >> $GITHUB_OUTPUT
|
||||
- name: 'Upload Test Report to Datadog'
|
||||
if: ${{ steps['turbo-summary'].outputs.misses != '0' && !cancelled() }}
|
||||
run: 'npx @datadog/datadog-ci@2.18.1 junit upload --service vercel-cli .junit-reports'
|
||||
env:
|
||||
DATADOG_API_KEY: ${{secrets.DATADOG_API_KEY_CLI}}
|
||||
DD_ENV: ci
|
||||
|
||||
summary:
|
||||
name: Summary
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
if: always()
|
||||
needs:
|
||||
- test
|
||||
steps:
|
||||
- name: Check All
|
||||
run: |-
|
||||
for status in ${{ join(needs.*.result, ' ') }}
|
||||
do
|
||||
if [ "$status" != "success" ] && [ "$status" != "skipped" ]
|
||||
then
|
||||
echo "Some checks failed"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Tests
|
||||
name: Tests Node.js v16
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
2
examples/package.json
vendored
2
examples/package.json
vendored
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "27.4.1",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/frameworks": "3.0.2"
|
||||
},
|
||||
"version": null
|
||||
|
||||
@@ -9,18 +9,18 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@remix-run/node": "^2.8.0",
|
||||
"@remix-run/react": "^2.8.0",
|
||||
"@remix-run/server-runtime": "^2.8.0",
|
||||
"@remix-run/node": "^2.9.2",
|
||||
"@remix-run/react": "^2.9.2",
|
||||
"@remix-run/server-runtime": "^2.9.2",
|
||||
"@vercel/analytics": "^1.2.2",
|
||||
"@vercel/remix": "^2.8.0",
|
||||
"@vercel/remix": "2.9.2-patch.2",
|
||||
"isbot": "^4",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@remix-run/dev": "^2.8.0",
|
||||
"@remix-run/eslint-config": "^2.8.0",
|
||||
"@remix-run/dev": "^2.9.2",
|
||||
"@remix-run/eslint-config": "^2.9.2",
|
||||
"@types/react": "^18.2.20",
|
||||
"@types/react-dom": "^18.2.7",
|
||||
"eslint": "^8.38.0",
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# @vercel-internals/types
|
||||
|
||||
## 1.0.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`d3c1267e2`](https://github.com/vercel/vercel/commit/d3c1267e24082789ea6382cf6af81dd40df288ff), [`ccd7eb1fb`](https://github.com/vercel/vercel/commit/ccd7eb1fb78f7ac9effdbe1935de3bda82c97fe3)]:
|
||||
- @vercel/build-utils@8.2.0
|
||||
|
||||
## 1.0.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`ad6945435`](https://github.com/vercel/vercel/commit/ad69454352b519b2b0ed326f245c779530554bf2)]:
|
||||
- @vercel/build-utils@8.1.3
|
||||
|
||||
## 1.0.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`1682ad43d`](https://github.com/vercel/vercel/commit/1682ad43d0064b22b1248a7e946746b838f00076)]:
|
||||
- @vercel/build-utils@8.1.2
|
||||
|
||||
## 1.0.33
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`2f7a6ed5f`](https://github.com/vercel/vercel/commit/2f7a6ed5f92d454000f92247d3b6548e2064f4e6)]:
|
||||
- @vercel/build-utils@8.1.1
|
||||
|
||||
## 1.0.32
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`5014b1e82`](https://github.com/vercel/vercel/commit/5014b1e82a46181baeb727ffe6d14000b6a4b1d7)]:
|
||||
- @vercel/build-utils@8.1.0
|
||||
|
||||
## 1.0.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "@vercel-internals/types",
|
||||
"version": "1.0.31",
|
||||
"version": "1.0.36",
|
||||
"types": "index.d.ts",
|
||||
"main": "index.d.ts",
|
||||
"files": [
|
||||
@@ -10,7 +10,7 @@
|
||||
"dependencies": {
|
||||
"@types/node": "14.14.31",
|
||||
"@vercel-internals/constants": "1.0.4",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/routing-utils": "3.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# @vercel/build-utils
|
||||
|
||||
## 8.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- fix corepack detection for package manager version determination ([#11596](https://github.com/vercel/vercel/pull/11596))
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Fix triggering of ignored project settings node version warning ([#11550](https://github.com/vercel/vercel/pull/11550))
|
||||
|
||||
## 8.1.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [build-utils] log more around package manager detection ([#11594](https://github.com/vercel/vercel/pull/11594))
|
||||
|
||||
## 8.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- add log to package manager version detection ([#11592](https://github.com/vercel/vercel/pull/11592))
|
||||
|
||||
## 8.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [build-utils] pnpm lockfile testing and fixing ([#11591](https://github.com/vercel/vercel/pull/11591))
|
||||
|
||||
## 8.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- Update pnpm version detection logic ([#11445](https://github.com/vercel/vercel/pull/11445))
|
||||
Add support for pnpm 9
|
||||
|
||||
## 8.0.0
|
||||
|
||||
### Major Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/build-utils",
|
||||
"version": "8.0.0",
|
||||
"version": "8.2.0",
|
||||
"license": "Apache-2.0",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.js",
|
||||
|
||||
@@ -20,6 +20,12 @@ import { cloneEnv } from '../clone-env';
|
||||
// Only allow one `runNpmInstall()` invocation to run concurrently
|
||||
const runNpmInstallSema = new Sema(1);
|
||||
|
||||
const NO_OVERRIDE = {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
};
|
||||
|
||||
export type CliType = 'yarn' | 'npm' | 'pnpm' | 'bun';
|
||||
|
||||
export interface ScanParentDirsResult {
|
||||
@@ -240,38 +246,51 @@ export function getSpawnOptions(
|
||||
|
||||
export async function getNodeVersion(
|
||||
destPath: string,
|
||||
nodeVersionFallback = process.env.VERCEL_PROJECT_SETTINGS_NODE_VERSION,
|
||||
fallbackVersion = process.env.VERCEL_PROJECT_SETTINGS_NODE_VERSION,
|
||||
config: Config = {},
|
||||
meta: Meta = {},
|
||||
availableVersions = getAvailableNodeVersions()
|
||||
): Promise<NodeVersion> {
|
||||
const latest = getLatestNodeVersion(availableVersions);
|
||||
const latestVersion = getLatestNodeVersion(availableVersions);
|
||||
if (meta.isDev) {
|
||||
// Use the system-installed version of `node` in PATH for `vercel dev`
|
||||
return { ...latest, runtime: 'nodejs' };
|
||||
return { ...latestVersion, runtime: 'nodejs' };
|
||||
}
|
||||
const { packageJson } = await scanParentDirs(destPath, true);
|
||||
let nodeVersion = config.nodeVersion || nodeVersionFallback;
|
||||
let isAuto = true;
|
||||
const configuredVersion = config.nodeVersion || fallbackVersion;
|
||||
|
||||
const packageJsonVersion = packageJson?.engines?.node;
|
||||
const supportedNodeVersion = await getSupportedNodeVersion(
|
||||
packageJsonVersion || configuredVersion,
|
||||
!packageJsonVersion,
|
||||
availableVersions
|
||||
);
|
||||
|
||||
if (packageJson?.engines?.node) {
|
||||
const { node } = packageJson.engines;
|
||||
if (nodeVersion && validRange(node) && !intersects(nodeVersion, node)) {
|
||||
if (
|
||||
configuredVersion &&
|
||||
!intersects(configuredVersion, supportedNodeVersion.range)
|
||||
) {
|
||||
console.warn(
|
||||
`Warning: Due to "engines": { "node": "${node}" } in your \`package.json\` file, the Node.js Version defined in your Project Settings ("${nodeVersion}") will not apply. Learn More: http://vercel.link/node-version`
|
||||
`Warning: Due to "engines": { "node": "${node}" } in your \`package.json\` file, the Node.js Version defined in your Project Settings ("${configuredVersion}") will not apply. Learn More: http://vercel.link/node-version`
|
||||
);
|
||||
} else if (coerce(node)?.raw === node) {
|
||||
}
|
||||
|
||||
if (coerce(node)?.raw === node) {
|
||||
console.warn(
|
||||
`Warning: Detected "engines": { "node": "${node}" } in your \`package.json\` with major.minor.patch, but only major Node.js Version can be selected. Learn More: http://vercel.link/node-version`
|
||||
);
|
||||
} else if (validRange(node) && intersects(`${latest.major + 1}.x`, node)) {
|
||||
} else if (
|
||||
validRange(node) &&
|
||||
intersects(`${latestVersion.major + 1}.x`, node)
|
||||
) {
|
||||
console.warn(
|
||||
`Warning: Detected "engines": { "node": "${node}" } in your \`package.json\` that will automatically upgrade when a new major Node.js Version is released. Learn More: http://vercel.link/node-version`
|
||||
);
|
||||
}
|
||||
nodeVersion = node;
|
||||
isAuto = false;
|
||||
}
|
||||
return getSupportedNodeVersion(nodeVersion, isAuto, availableVersions);
|
||||
return supportedNodeVersion;
|
||||
}
|
||||
|
||||
export async function scanParentDirs(
|
||||
@@ -413,9 +432,8 @@ export async function runNpmInstall(
|
||||
|
||||
try {
|
||||
await runNpmInstallSema.acquire();
|
||||
const { cliType, packageJsonPath, lockfileVersion } = await scanParentDirs(
|
||||
destPath
|
||||
);
|
||||
const { cliType, packageJsonPath, packageJson, lockfileVersion } =
|
||||
await scanParentDirs(destPath, true);
|
||||
|
||||
if (!packageJsonPath) {
|
||||
debug(
|
||||
@@ -450,6 +468,7 @@ export async function runNpmInstall(
|
||||
opts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env,
|
||||
});
|
||||
@@ -534,11 +553,13 @@ export async function runNpmInstall(
|
||||
export function getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager,
|
||||
nodeVersion,
|
||||
env,
|
||||
}: {
|
||||
cliType: CliType;
|
||||
lockfileVersion: number | undefined;
|
||||
packageJsonPackageManager?: string | undefined;
|
||||
nodeVersion: NodeVersion | undefined;
|
||||
env: { [x: string]: string | undefined };
|
||||
}) {
|
||||
@@ -546,52 +567,290 @@ export function getEnvForPackageManager({
|
||||
detectedLockfile,
|
||||
detectedPackageManager,
|
||||
path: newPath,
|
||||
yarnNodeLinker,
|
||||
} = getPathForPackageManager({
|
||||
} = getPathOverrideForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
corepackPackageManager: packageJsonPackageManager,
|
||||
nodeVersion,
|
||||
env,
|
||||
});
|
||||
|
||||
const corepackFlagged = env.ENABLE_EXPERIMENTAL_COREPACK === '1';
|
||||
const corepackEnabled = corepackFlagged && Boolean(packageJsonPackageManager);
|
||||
if (corepackEnabled) {
|
||||
debug(
|
||||
`Detected corepack use for "${packageJsonPackageManager}". Not overriding package manager version.`
|
||||
);
|
||||
} else {
|
||||
debug(
|
||||
`Detected ${detectedPackageManager}. Added "${newPath}" to path. Based on assumed package manager "${cliType}", lockfile "${detectedLockfile}", and lockfileVersion "${lockfileVersion}"`
|
||||
);
|
||||
}
|
||||
|
||||
const newEnv: { [x: string]: string | undefined } = {
|
||||
...env,
|
||||
};
|
||||
|
||||
if (newPath) {
|
||||
const alreadyInPath = (newPath: string) => {
|
||||
const oldPath = env.PATH ?? '';
|
||||
return oldPath.split(path.delimiter).includes(newPath);
|
||||
};
|
||||
|
||||
if (newPath && !alreadyInPath(newPath)) {
|
||||
// Ensure that the binaries of the detected package manager are at the
|
||||
// beginning of the `$PATH`.
|
||||
const oldPath = env.PATH + '';
|
||||
newEnv.PATH = `${newPath}${path.delimiter}${oldPath}`;
|
||||
}
|
||||
|
||||
if (yarnNodeLinker) {
|
||||
newEnv.YARN_NODE_LINKER = yarnNodeLinker;
|
||||
}
|
||||
if (detectedLockfile && detectedPackageManager) {
|
||||
// For pnpm we also show the version of the lockfile we found
|
||||
const versionString =
|
||||
cliType === 'pnpm' ? `version ${lockfileVersion} ` : '';
|
||||
|
||||
if (detectedLockfile && detectedPackageManager) {
|
||||
// For pnpm we also show the version of the lockfile we found
|
||||
const versionString =
|
||||
cliType === 'pnpm' ? `version ${lockfileVersion} ` : '';
|
||||
|
||||
console.log(
|
||||
`Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
|
||||
);
|
||||
|
||||
if (cliType === 'bun') {
|
||||
console.warn(
|
||||
'Warning: Bun is used as a package manager at build time only, not at runtime with Functions'
|
||||
console.log(
|
||||
`Detected \`${detectedLockfile}\` ${versionString}generated by ${detectedPackageManager}`
|
||||
);
|
||||
|
||||
if (cliType === 'bun') {
|
||||
console.warn(
|
||||
'Warning: Bun is used as a package manager at build time only, not at runtime with Functions'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cliType === 'yarn' && !env.YARN_NODE_LINKER) {
|
||||
newEnv.YARN_NODE_LINKER = 'node-modules';
|
||||
}
|
||||
|
||||
return newEnv;
|
||||
}
|
||||
|
||||
type DetectedPnpmVersion =
|
||||
| 'not found'
|
||||
| 'pnpm 6'
|
||||
| 'pnpm 7'
|
||||
| 'pnpm 8'
|
||||
| 'pnpm 9'
|
||||
| 'corepack_enabled';
|
||||
|
||||
function detectPnpmVersion(
|
||||
lockfileVersion: number | undefined
|
||||
): DetectedPnpmVersion {
|
||||
switch (true) {
|
||||
case lockfileVersion === undefined:
|
||||
return 'not found';
|
||||
case lockfileVersion === 5.3:
|
||||
return 'pnpm 6';
|
||||
case lockfileVersion === 5.4:
|
||||
return 'pnpm 7';
|
||||
case lockfileVersion === 6.0 || lockfileVersion === 6.1:
|
||||
return 'pnpm 8';
|
||||
case lockfileVersion === 7.0 || lockfileVersion === 9.0:
|
||||
return 'pnpm 9';
|
||||
default:
|
||||
return 'not found';
|
||||
}
|
||||
}
|
||||
|
||||
function shouldUseNpm7(
|
||||
lockfileVersion: number | undefined,
|
||||
nodeVersion: NodeVersion | undefined
|
||||
): boolean {
|
||||
if (lockfileVersion === undefined) return false;
|
||||
return lockfileVersion >= 2 && (nodeVersion?.major || 0) < 16;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to get the binary paths that link to the used package manager.
|
||||
* Note: Make sure it doesn't contain any `console.log` calls.
|
||||
*/
|
||||
export function getPathOverrideForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
corepackPackageManager,
|
||||
nodeVersion,
|
||||
}: {
|
||||
cliType: CliType;
|
||||
lockfileVersion: number | undefined;
|
||||
corepackPackageManager: string | undefined;
|
||||
nodeVersion: NodeVersion | undefined;
|
||||
}): {
|
||||
/**
|
||||
* Which lockfile was detected.
|
||||
*/
|
||||
detectedLockfile: string | undefined;
|
||||
/**
|
||||
* Detected package manager that generated the found lockfile.
|
||||
*/
|
||||
detectedPackageManager: string | undefined;
|
||||
/**
|
||||
* Value of $PATH that includes the binaries for the detected package manager.
|
||||
* `undefined` if no $PATH are necessary.
|
||||
*/
|
||||
path: string | undefined;
|
||||
} {
|
||||
const detectedPackageManger = detectPackageManager(
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
nodeVersion
|
||||
);
|
||||
if (!detectedPackageManger) {
|
||||
return NO_OVERRIDE;
|
||||
}
|
||||
|
||||
if (!corepackPackageManager) {
|
||||
return detectedPackageManger;
|
||||
}
|
||||
|
||||
if (
|
||||
validateVersionOverlap(
|
||||
detectedPackageManger.detectedPackageManager,
|
||||
corepackPackageManager
|
||||
)
|
||||
) {
|
||||
// corepack is going to take care of it; do nothing special
|
||||
return NO_OVERRIDE;
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
`Detected package manager (by lockfile) "${detectedPackageManger.detectedPackageManager}" does not match intended corepack package manager "${corepackPackageManager}". Update your lockfile or "package.json#packageManager" values to match.`
|
||||
);
|
||||
}
|
||||
|
||||
function validateVersionOverlap(
|
||||
detectedPackageManger: string,
|
||||
corepackPackageManager: string
|
||||
) {
|
||||
const validatedDetectedPackageManger = validateVersionSpecifier(
|
||||
detectedPackageManger
|
||||
);
|
||||
if (!validatedDetectedPackageManger) {
|
||||
throw new Error(
|
||||
`Detected package manager "${detectedPackageManger}" is not a valid semver value.`
|
||||
);
|
||||
}
|
||||
|
||||
const validatedCorepackPackageManager = validateVersionSpecifier(
|
||||
corepackPackageManager
|
||||
);
|
||||
if (!validatedCorepackPackageManager) {
|
||||
throw new Error(
|
||||
`Intended corepack defined package manager "${corepackPackageManager}" is not a valid semver value.`
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
validatedDetectedPackageManger.packageName !==
|
||||
validatedCorepackPackageManager.packageName
|
||||
) {
|
||||
throw new Error(
|
||||
`Detected package manager "${validatedDetectedPackageManger.packageName}" does not match intended corepack defined package manager "${validatedCorepackPackageManager.packageName}". Change your lockfile or "package.json#packageManager" value to match.`
|
||||
);
|
||||
}
|
||||
|
||||
return intersects(
|
||||
validatedDetectedPackageManger.packageVersionRange,
|
||||
validatedCorepackPackageManager.packageVersionRange
|
||||
);
|
||||
}
|
||||
|
||||
function validateVersionSpecifier(version: string) {
|
||||
if (!version) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const [before, after, ...extra] = version.split('@');
|
||||
|
||||
if (extra.length) {
|
||||
// should not have more than one `@`
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (!before) {
|
||||
// should have a package before the `@`
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (!after) {
|
||||
// should have a version after the `@`
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (!validRange(after)) {
|
||||
// the version after the `@` should be a valid semver value
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return {
|
||||
packageName: before,
|
||||
packageVersionRange: after,
|
||||
};
|
||||
}
|
||||
|
||||
function detectPackageManager(
|
||||
cliType: CliType,
|
||||
lockfileVersion: number | undefined,
|
||||
nodeVersion: NodeVersion | undefined
|
||||
) {
|
||||
switch (cliType) {
|
||||
case 'npm':
|
||||
switch (true) {
|
||||
case shouldUseNpm7(lockfileVersion, nodeVersion):
|
||||
return {
|
||||
path: '/node16/bin-npm7',
|
||||
detectedLockfile: 'package-lock.json',
|
||||
detectedPackageManager: 'npm@7.x',
|
||||
};
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
case 'pnpm':
|
||||
switch (detectPnpmVersion(lockfileVersion)) {
|
||||
case 'pnpm 7':
|
||||
// pnpm 7
|
||||
return {
|
||||
path: '/pnpm7/node_modules/.bin',
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm@7.x',
|
||||
};
|
||||
case 'pnpm 8':
|
||||
// pnpm 8
|
||||
return {
|
||||
path: '/pnpm8/node_modules/.bin',
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm@8.x',
|
||||
};
|
||||
case 'pnpm 9':
|
||||
// pnpm 9
|
||||
return {
|
||||
path: '/pnpm9/node_modules/.bin',
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm@9.x',
|
||||
};
|
||||
case 'pnpm 6':
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
case 'bun':
|
||||
switch (true) {
|
||||
default:
|
||||
// Bun 1
|
||||
return {
|
||||
path: '/bun1',
|
||||
detectedLockfile: 'bun.lockb',
|
||||
detectedPackageManager: 'bun@1.x',
|
||||
};
|
||||
}
|
||||
case 'yarn':
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to get the binary paths that link to the used package manager.
|
||||
* Note: Make sure it doesn't contain any `console.log` calls.
|
||||
* @deprecated use `getEnvForPackageManager` instead
|
||||
*/
|
||||
export function getPathForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
@@ -622,70 +881,42 @@ export function getPathForPackageManager({
|
||||
*/
|
||||
yarnNodeLinker: string | undefined;
|
||||
} {
|
||||
let detectedLockfile: string | undefined;
|
||||
let detectedPackageManager: string | undefined;
|
||||
let pathValue: string | undefined;
|
||||
let yarnNodeLinker: string | undefined;
|
||||
const oldPath = env.PATH + '';
|
||||
const npm7 = '/node16/bin-npm7';
|
||||
const pnpm7 = '/pnpm7/node_modules/.bin';
|
||||
const pnpm8 = '/pnpm8/node_modules/.bin';
|
||||
const bun1 = '/bun1';
|
||||
// This is not the correct check for whether or not corepack is being used. For that, you'd have to check
|
||||
// the package.json's `packageManager` property. However, this deprecated function is keeping it's old,
|
||||
// broken behavior.
|
||||
const corepackEnabled = env.ENABLE_EXPERIMENTAL_COREPACK === '1';
|
||||
if (cliType === 'npm') {
|
||||
if (
|
||||
typeof lockfileVersion === 'number' &&
|
||||
lockfileVersion >= 2 &&
|
||||
(nodeVersion?.major || 0) < 16 &&
|
||||
!oldPath.includes(npm7) &&
|
||||
!corepackEnabled
|
||||
) {
|
||||
// npm 7
|
||||
pathValue = npm7;
|
||||
detectedLockfile = 'package-lock.json';
|
||||
detectedPackageManager = 'npm 7+';
|
||||
}
|
||||
} else if (cliType === 'pnpm') {
|
||||
if (
|
||||
typeof lockfileVersion === 'number' &&
|
||||
lockfileVersion === 5.4 &&
|
||||
!oldPath.includes(pnpm7) &&
|
||||
!corepackEnabled
|
||||
) {
|
||||
// pnpm 7
|
||||
pathValue = pnpm7;
|
||||
detectedLockfile = 'pnpm-lock.yaml';
|
||||
detectedPackageManager = 'pnpm 7';
|
||||
} else if (
|
||||
typeof lockfileVersion === 'number' &&
|
||||
lockfileVersion >= 6 &&
|
||||
!oldPath.includes(pnpm8) &&
|
||||
!corepackEnabled
|
||||
) {
|
||||
// pnpm 8
|
||||
pathValue = pnpm8;
|
||||
detectedLockfile = 'pnpm-lock.yaml';
|
||||
detectedPackageManager = 'pnpm 8';
|
||||
}
|
||||
} else if (cliType === 'bun') {
|
||||
if (!oldPath.includes(bun1) && !corepackEnabled) {
|
||||
// Bun 1
|
||||
pathValue = bun1;
|
||||
detectedLockfile = 'bun.lockb';
|
||||
detectedPackageManager = 'Bun';
|
||||
}
|
||||
} else {
|
||||
// Yarn v2 PnP mode may be activated, so force "node-modules" linker style
|
||||
if (!env.YARN_NODE_LINKER) {
|
||||
yarnNodeLinker = 'node-modules';
|
||||
}
|
||||
|
||||
let overrides = getPathOverrideForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
corepackPackageManager: undefined,
|
||||
nodeVersion,
|
||||
});
|
||||
|
||||
if (corepackEnabled) {
|
||||
// this is essentially always overriding the value of `override`, but that's what was happening
|
||||
// in this deprecated function before
|
||||
overrides = NO_OVERRIDE;
|
||||
}
|
||||
return {
|
||||
detectedLockfile,
|
||||
detectedPackageManager,
|
||||
path: pathValue,
|
||||
yarnNodeLinker,
|
||||
|
||||
const alreadyInPath = (newPath: string) => {
|
||||
const oldPath = env.PATH ?? '';
|
||||
return oldPath.split(path.delimiter).includes(newPath);
|
||||
};
|
||||
|
||||
switch (true) {
|
||||
case cliType === 'yarn' && !env.YARN_NODE_LINKER:
|
||||
return { ...overrides, yarnNodeLinker: 'node-modules' };
|
||||
case alreadyInPath(overrides.path ?? ''):
|
||||
return {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
yarnNodeLinker: undefined,
|
||||
};
|
||||
default:
|
||||
return { ...overrides, yarnNodeLinker: undefined };
|
||||
}
|
||||
}
|
||||
|
||||
export async function runCustomInstallCommand({
|
||||
@@ -700,10 +931,14 @@ export async function runCustomInstallCommand({
|
||||
spawnOpts?: SpawnOptions;
|
||||
}) {
|
||||
console.log(`Running "install" command: \`${installCommand}\`...`);
|
||||
const { cliType, lockfileVersion } = await scanParentDirs(destPath);
|
||||
const { cliType, lockfileVersion, packageJson } = await scanParentDirs(
|
||||
destPath,
|
||||
true
|
||||
);
|
||||
const env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts?.env || {},
|
||||
});
|
||||
@@ -741,6 +976,7 @@ export async function runPackageJsonScript(
|
||||
env: getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion: undefined,
|
||||
env: cloneEnv(process.env, spawnOpts?.env),
|
||||
}),
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"probes": [
|
||||
{
|
||||
"path": "/",
|
||||
"mustContain": "pnpm version: 6",
|
||||
"mustContain": "pnpm version: 7",
|
||||
"logMustContain": "pnpm run build"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { delimiter } from 'path';
|
||||
import { getEnvForPackageManager, getPathForPackageManager } from '../src';
|
||||
import { getPathOverrideForPackageManager } from '../src/fs/run-user-scripts';
|
||||
|
||||
describe('Test `getEnvForPackageManager()`', () => {
|
||||
let consoleLogSpy: jest.SpyInstance;
|
||||
@@ -34,6 +35,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 1,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -50,6 +52,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -60,7 +63,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
FOO: 'bar',
|
||||
PATH: `/node16/bin-npm7${delimiter}foo`,
|
||||
},
|
||||
consoleLogOutput: 'Detected `package-lock.json` generated by npm 7+',
|
||||
consoleLogOutput: 'Detected `package-lock.json` generated by npm@7.x',
|
||||
consoleWarnOutput: null,
|
||||
},
|
||||
{
|
||||
@@ -68,6 +71,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: 'npm@*',
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -86,6 +90,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -104,6 +109,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -122,6 +128,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'yarn',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -139,6 +146,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'yarn',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -157,6 +165,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 5.4,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -168,7 +177,47 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
PATH: `/pnpm7/node_modules/.bin${delimiter}foo`,
|
||||
},
|
||||
consoleLogOutput:
|
||||
'Detected `pnpm-lock.yaml` version 5.4 generated by pnpm 7',
|
||||
'Detected `pnpm-lock.yaml` version 5.4 generated by pnpm@7.x',
|
||||
consoleWarnOutput: null,
|
||||
},
|
||||
{
|
||||
name: 'should set path if pnpm 8 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 18, range: '18.x', runtime: 'nodejs18.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 6.0,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
FOO: 'bar',
|
||||
PATH: `/pnpm8/node_modules/.bin${delimiter}foo`,
|
||||
},
|
||||
consoleLogOutput:
|
||||
'Detected `pnpm-lock.yaml` version 6 generated by pnpm@8.x',
|
||||
consoleWarnOutput: null,
|
||||
},
|
||||
{
|
||||
name: 'should set path if pnpm 8 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 18, range: '18.x', runtime: 'nodejs18.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 9.0,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
FOO: 'bar',
|
||||
PATH: `/pnpm9/node_modules/.bin${delimiter}foo`,
|
||||
},
|
||||
consoleLogOutput:
|
||||
'Detected `pnpm-lock.yaml` version 9 generated by pnpm@9.x',
|
||||
consoleWarnOutput: null,
|
||||
},
|
||||
{
|
||||
@@ -176,6 +225,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'bun',
|
||||
nodeVersion: { major: 18, range: '18.x', runtime: 'nodejs18.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 0,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -186,7 +236,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
FOO: 'bar',
|
||||
PATH: `/bun1${delimiter}/usr/local/bin`,
|
||||
},
|
||||
consoleLogOutput: 'Detected `bun.lockb` generated by Bun',
|
||||
consoleLogOutput: 'Detected `bun.lockb` generated by bun@1.x',
|
||||
consoleWarnOutput:
|
||||
'Warning: Bun is used as a package manager at build time only, not at runtime with Functions',
|
||||
},
|
||||
@@ -195,6 +245,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: 'pnpm@*',
|
||||
lockfileVersion: 5.4,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -213,6 +264,7 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 5.4,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
@@ -226,27 +278,12 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
consoleLogOutput: null,
|
||||
consoleWarnOutput: null,
|
||||
},
|
||||
{
|
||||
name: 'should not set path if pnpm 6 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
lockfileVersion: 5.3,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
FOO: 'bar',
|
||||
},
|
||||
consoleLogOutput: null,
|
||||
consoleWarnOutput: null,
|
||||
},
|
||||
])('$name', ({ args, want, consoleLogOutput, consoleWarnOutput }) => {
|
||||
expect(
|
||||
getEnvForPackageManager({
|
||||
cliType: args.cliType,
|
||||
lockfileVersion: args.lockfileVersion,
|
||||
packageJsonPackageManager: args.packageJsonPackageManager,
|
||||
nodeVersion: args.nodeVersion,
|
||||
env: args.env,
|
||||
})
|
||||
@@ -268,11 +305,209 @@ describe('Test `getEnvForPackageManager()`', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('Test `getPathForPackageManager()`', () => {
|
||||
describe('Test `getPathOverrideForPackageManager()`', () => {
|
||||
test.each<{
|
||||
name: string;
|
||||
args: Parameters<typeof getEnvForPackageManager>[0];
|
||||
want: unknown;
|
||||
}>([
|
||||
{
|
||||
name: 'should do nothing to env for npm < 6 and node < 16',
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 1,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should set path if npm 7+ is detected and node < 16',
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'package-lock.json',
|
||||
detectedPackageManager: 'npm@7.x',
|
||||
path: '/node16/bin-npm7',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should not set npm path if corepack enabled',
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
packageJsonPackageManager: 'npm@*',
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
ENABLE_EXPERIMENTAL_COREPACK: '1',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: 'should not set path if node is 16 and npm 7+ is detected',
|
||||
args: {
|
||||
cliType: 'npm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 2,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should not set path if pnpm 6 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 5.3, // detects as pnpm@6, which is the default
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should set path if pnpm 7+ is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 5.4,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm@7.x',
|
||||
path: '/pnpm7/node_modules/.bin',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should set path if pnpm 8 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 18, range: '18.x', runtime: 'nodejs18.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 6.1,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm@8.x',
|
||||
path: '/pnpm8/node_modules/.bin',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should set path if pnpm 9 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 18, range: '18.x', runtime: 'nodejs18.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 7.0,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: 'foo',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm@9.x',
|
||||
path: '/pnpm9/node_modules/.bin',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should set path if bun v1 is detected',
|
||||
args: {
|
||||
cliType: 'bun',
|
||||
nodeVersion: { major: 18, range: '18.x', runtime: 'nodejs18.x' },
|
||||
packageJsonPackageManager: undefined,
|
||||
lockfileVersion: 0,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
PATH: '/usr/local/bin',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'bun.lockb',
|
||||
detectedPackageManager: 'bun@1.x',
|
||||
path: '/bun1',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should not set pnpm path if corepack is enabled',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
||||
packageJsonPackageManager: 'pnpm@*',
|
||||
lockfileVersion: 5.4,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
ENABLE_EXPERIMENTAL_COREPACK: '1',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
},
|
||||
},
|
||||
])('$name', ({ args, want }) => {
|
||||
expect(
|
||||
getPathOverrideForPackageManager({
|
||||
cliType: args.cliType,
|
||||
lockfileVersion: args.lockfileVersion,
|
||||
corepackPackageManager: args.packageJsonPackageManager,
|
||||
nodeVersion: args.nodeVersion,
|
||||
})
|
||||
).toStrictEqual(want);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Test `getPathForPackageManager()`', () => {
|
||||
test.each<{
|
||||
name: string;
|
||||
args: Parameters<typeof getPathForPackageManager>[0];
|
||||
want: unknown;
|
||||
}>([
|
||||
{
|
||||
name: 'should do nothing to env for npm < 6 and node < 16',
|
||||
@@ -304,7 +539,7 @@ describe('Test `getPathForPackageManager()`', () => {
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'package-lock.json',
|
||||
detectedPackageManager: 'npm 7+',
|
||||
detectedPackageManager: 'npm@7.x',
|
||||
path: '/node16/bin-npm7',
|
||||
yarnNodeLinker: undefined,
|
||||
},
|
||||
@@ -411,7 +646,7 @@ describe('Test `getPathForPackageManager()`', () => {
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'pnpm-lock.yaml',
|
||||
detectedPackageManager: 'pnpm 7',
|
||||
detectedPackageManager: 'pnpm@7.x',
|
||||
path: '/pnpm7/node_modules/.bin',
|
||||
yarnNodeLinker: undefined,
|
||||
},
|
||||
@@ -429,7 +664,7 @@ describe('Test `getPathForPackageManager()`', () => {
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: 'bun.lockb',
|
||||
detectedPackageManager: 'Bun',
|
||||
detectedPackageManager: 'bun@1.x',
|
||||
path: '/bun1',
|
||||
yarnNodeLinker: undefined,
|
||||
},
|
||||
@@ -470,23 +705,6 @@ describe('Test `getPathForPackageManager()`', () => {
|
||||
yarnNodeLinker: undefined,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'should not set path if pnpm 6 is detected',
|
||||
args: {
|
||||
cliType: 'pnpm',
|
||||
nodeVersion: { major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
||||
lockfileVersion: 5.3,
|
||||
env: {
|
||||
FOO: 'bar',
|
||||
},
|
||||
},
|
||||
want: {
|
||||
detectedLockfile: undefined,
|
||||
detectedPackageManager: undefined,
|
||||
path: undefined,
|
||||
yarnNodeLinker: undefined,
|
||||
},
|
||||
},
|
||||
])('$name', ({ args, want }) => {
|
||||
expect(
|
||||
getPathForPackageManager({
|
||||
|
||||
15
packages/build-utils/test/unit.test.ts
vendored
15
packages/build-utils/test/unit.test.ts
vendored
@@ -221,6 +221,21 @@ it('should warn when package.json engines is greater than', async () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it('should warn when project settings gets overrided', async () => {
|
||||
expect(
|
||||
await getNodeVersion(
|
||||
path.join(__dirname, 'pkg-engine-node-greaterthan'),
|
||||
undefined,
|
||||
{ nodeVersion: '16.x' },
|
||||
{}
|
||||
)
|
||||
).toHaveProperty('range', '20.x');
|
||||
expect(warningMessages).toStrictEqual([
|
||||
'Warning: Due to "engines": { "node": ">=16" } in your `package.json` file, the Node.js Version defined in your Project Settings ("16.x") will not apply. Learn More: http://vercel.link/node-version',
|
||||
'Warning: Detected "engines": { "node": ">=16" } in your `package.json` that will automatically upgrade when a new major Node.js Version is released. Learn More: http://vercel.link/node-version',
|
||||
]);
|
||||
});
|
||||
|
||||
it('should not warn when package.json engines matches project setting from config', async () => {
|
||||
expect(
|
||||
await getNodeVersion(
|
||||
|
||||
@@ -1,5 +1,58 @@
|
||||
# vercel
|
||||
|
||||
## 34.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- Stop sending system environment variables in dev ([#11526](https://github.com/vercel/vercel/pull/11526))
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`d3c1267e2`](https://github.com/vercel/vercel/commit/d3c1267e24082789ea6382cf6af81dd40df288ff), [`ccd7eb1fb`](https://github.com/vercel/vercel/commit/ccd7eb1fb78f7ac9effdbe1935de3bda82c97fe3)]:
|
||||
- @vercel/build-utils@8.2.0
|
||||
- @vercel/node@3.1.5
|
||||
- @vercel/static-build@2.5.9
|
||||
|
||||
## 34.1.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`ad6945435`](https://github.com/vercel/vercel/commit/ad69454352b519b2b0ed326f245c779530554bf2)]:
|
||||
- @vercel/build-utils@8.1.3
|
||||
- @vercel/node@3.1.4
|
||||
- @vercel/static-build@2.5.8
|
||||
|
||||
## 34.1.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`1682ad43d`](https://github.com/vercel/vercel/commit/1682ad43d0064b22b1248a7e946746b838f00076)]:
|
||||
- @vercel/build-utils@8.1.2
|
||||
- @vercel/node@3.1.3
|
||||
- @vercel/static-build@2.5.7
|
||||
|
||||
## 34.1.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`67afc2608`](https://github.com/vercel/vercel/commit/67afc26085e2ebdaa33a8cbce112afec4cb1c4f5), [`2f7a6ed5f`](https://github.com/vercel/vercel/commit/2f7a6ed5f92d454000f92247d3b6548e2064f4e6)]:
|
||||
- @vercel/next@4.2.11
|
||||
- @vercel/build-utils@8.1.1
|
||||
- @vercel/node@3.1.2
|
||||
- @vercel/static-build@2.5.6
|
||||
|
||||
## 34.1.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`5014b1e82`](https://github.com/vercel/vercel/commit/5014b1e82a46181baeb727ffe6d14000b6a4b1d7), [`18d1703d5`](https://github.com/vercel/vercel/commit/18d1703d5b4f2adc61fd56011f874c393fa57d0d), [`e87d4c14d`](https://github.com/vercel/vercel/commit/e87d4c14d0e718281f9ba91c9ec1cc6e142d383d), [`bc5fd4115`](https://github.com/vercel/vercel/commit/bc5fd41158ec9f36e5db1fe749589adcbaec6950)]:
|
||||
- @vercel/build-utils@8.1.0
|
||||
- @vercel/next@4.2.10
|
||||
- @vercel/redwood@2.0.9
|
||||
- @vercel/remix-builder@2.1.6
|
||||
- @vercel/node@3.1.1
|
||||
- @vercel/static-build@2.5.5
|
||||
|
||||
## 34.1.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "vercel",
|
||||
"version": "34.1.10",
|
||||
"version": "34.2.0",
|
||||
"preferGlobal": true,
|
||||
"license": "Apache-2.0",
|
||||
"description": "The command-line interface for Vercel",
|
||||
@@ -32,17 +32,17 @@
|
||||
"node": ">= 16"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/fun": "1.1.0",
|
||||
"@vercel/go": "3.1.1",
|
||||
"@vercel/hydrogen": "1.0.2",
|
||||
"@vercel/next": "4.2.9",
|
||||
"@vercel/node": "3.1.0",
|
||||
"@vercel/next": "4.2.11",
|
||||
"@vercel/node": "3.1.5",
|
||||
"@vercel/python": "4.2.0",
|
||||
"@vercel/redwood": "2.0.8",
|
||||
"@vercel/remix-builder": "2.1.5",
|
||||
"@vercel/redwood": "2.0.9",
|
||||
"@vercel/remix-builder": "2.1.6",
|
||||
"@vercel/ruby": "2.1.0",
|
||||
"@vercel/static-build": "2.5.4",
|
||||
"@vercel/static-build": "2.5.9",
|
||||
"chokidar": "3.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -92,8 +92,8 @@
|
||||
"@types/yauzl-promise": "2.1.0",
|
||||
"@vercel-internals/constants": "1.0.4",
|
||||
"@vercel-internals/get-package-json": "1.0.0",
|
||||
"@vercel-internals/types": "1.0.31",
|
||||
"@vercel/client": "13.2.2",
|
||||
"@vercel-internals/types": "1.0.36",
|
||||
"@vercel/client": "13.2.7",
|
||||
"@vercel/error-utils": "2.0.2",
|
||||
"@vercel/frameworks": "3.0.2",
|
||||
"@vercel/fs-detectors": "5.2.3",
|
||||
|
||||
2
packages/cli/src/util/env/get-env-records.ts
vendored
2
packages/cli/src/util/env/get-env-records.ts
vendored
@@ -70,7 +70,7 @@ export async function pullEnvRecords(
|
||||
);
|
||||
const query = new URLSearchParams();
|
||||
|
||||
let url = `/v1/env/pull/${projectId}`;
|
||||
let url = `/v2/env/pull/${projectId}`;
|
||||
|
||||
if (target) {
|
||||
url += `/${encodeURIComponent(target)}`;
|
||||
|
||||
32
packages/cli/test/fixtures/e2e/cli-extension-exit-code/package-lock.json
generated
vendored
Normal file
32
packages/cli/test/fixtures/e2e/cli-extension-exit-code/package-lock.json
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "cli-extension-exit-code",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"cli-extension-fail": "file:../cli-extension-fail"
|
||||
}
|
||||
},
|
||||
"../cli-extension-fail": {
|
||||
"bin": {
|
||||
"vercel-fail": "bin.js"
|
||||
}
|
||||
},
|
||||
"../cli-extension-whoami": {
|
||||
"extraneous": true,
|
||||
"bin": {
|
||||
"vercel-mywhoami": "bin.js"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-extension-fail": {
|
||||
"resolved": "../cli-extension-fail",
|
||||
"link": true
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"cli-extension-fail": {
|
||||
"version": "file:../cli-extension-fail"
|
||||
}
|
||||
}
|
||||
}
|
||||
6
packages/cli/test/fixtures/e2e/cli-extension-exit-code/package.json
vendored
Normal file
6
packages/cli/test/fixtures/e2e/cli-extension-exit-code/package.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"cli-extension-fail": "file:../cli-extension-fail"
|
||||
}
|
||||
}
|
||||
2
packages/cli/test/fixtures/e2e/cli-extension-fail/bin.js
vendored
Executable file
2
packages/cli/test/fixtures/e2e/cli-extension-fail/bin.js
vendored
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env node
|
||||
process.exit(6);
|
||||
6
packages/cli/test/fixtures/e2e/cli-extension-fail/package.json
vendored
Normal file
6
packages/cli/test/fixtures/e2e/cli-extension-fail/package.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "cli-extension-fail",
|
||||
"bin": {
|
||||
"vercel-fail": "bin.js"
|
||||
}
|
||||
}
|
||||
30
packages/cli/test/integration-1.test.ts
vendored
30
packages/cli/test/integration-1.test.ts
vendored
@@ -917,9 +917,9 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
|
||||
expect(homeJson['MY_STDIN_VAR']).toBe('{"expect":"quotes"}');
|
||||
expect(homeJson['MY_DECRYPTABLE_SECRET_ENV']).toBe('decryptable value');
|
||||
|
||||
// system env vars are automatically exposed
|
||||
expect(apiJson['VERCEL']).toBe('1');
|
||||
expect(homeJson['VERCEL']).toBe('1');
|
||||
// system env vars are hidden in dev
|
||||
expect(apiJson['VERCEL']).toBeUndefined();
|
||||
expect(homeJson['VERCEL']).toBeUndefined();
|
||||
|
||||
// sleep before kill, otherwise the dev process doesn't clean up and exit properly
|
||||
await sleep(100);
|
||||
@@ -949,7 +949,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
|
||||
async function vcEnvPullFetchSystemVars() {
|
||||
const { exitCode, stdout, stderr } = await execCli(
|
||||
binaryPath,
|
||||
['env', 'pull', '-y'],
|
||||
['env', 'pull', '-y', '--environment', 'production'],
|
||||
{
|
||||
cwd: target,
|
||||
}
|
||||
@@ -963,7 +963,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
|
||||
|
||||
expect(lines).toContain('VERCEL="1"');
|
||||
expect(lines).toContain('VERCEL_URL=""');
|
||||
expect(lines).toContain('VERCEL_ENV="development"');
|
||||
expect(lines).toContain('VERCEL_ENV="production"');
|
||||
expect(lines).toContain('VERCEL_GIT_PROVIDER=""');
|
||||
expect(lines).toContain('VERCEL_GIT_REPO_SLUG=""');
|
||||
}
|
||||
@@ -980,22 +980,24 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
|
||||
const localhostNoProtocol = localhost[0].slice('http://'.length);
|
||||
|
||||
const apiJson = await apiRes.json();
|
||||
expect(apiJson['VERCEL']).toBe('1');
|
||||
// environment variables are not set in dev
|
||||
expect(apiJson['VERCEL']).toBeUndefined();
|
||||
expect(apiJson['VERCEL_ENV']).toBeUndefined();
|
||||
expect(apiJson['VERCEL_GIT_PROVIDER']).toBeUndefined();
|
||||
expect(apiJson['VERCEL_GIT_REPO_SLUG']).toBeUndefined();
|
||||
// except for these because vc dev
|
||||
expect(apiJson['VERCEL_URL']).toBe(localhostNoProtocol);
|
||||
expect(apiJson['VERCEL_ENV']).toBe('development');
|
||||
expect(apiJson['VERCEL_REGION']).toBe('dev1');
|
||||
expect(apiJson['VERCEL_GIT_PROVIDER']).toBe('');
|
||||
expect(apiJson['VERCEL_GIT_REPO_SLUG']).toBe('');
|
||||
|
||||
const homeUrl = localhost[0];
|
||||
const homeRes = await fetch(homeUrl);
|
||||
const homeJson = await homeRes.json();
|
||||
expect(homeJson['VERCEL']).toBe('1');
|
||||
expect(homeJson['VERCEL']).toBeUndefined();
|
||||
expect(homeJson['VERCEL_URL']).toBe(localhostNoProtocol);
|
||||
expect(homeJson['VERCEL_ENV']).toBe('development');
|
||||
expect(homeJson['VERCEL_REGION']).toBe(undefined);
|
||||
expect(homeJson['VERCEL_GIT_PROVIDER']).toBe('');
|
||||
expect(homeJson['VERCEL_GIT_REPO_SLUG']).toBe('');
|
||||
expect(homeJson['VERCEL_ENV']).toBeUndefined();
|
||||
expect(homeJson['VERCEL_REGION']).toBeUndefined();
|
||||
expect(homeJson['VERCEL_GIT_PROVIDER']).toBeUndefined();
|
||||
expect(homeJson['VERCEL_GIT_REPO_SLUG']).toBeUndefined();
|
||||
|
||||
// sleep before kill, otherwise the dev process doesn't clean up and exit properly
|
||||
await sleep(100);
|
||||
|
||||
15
packages/cli/test/integration-3.test.ts
vendored
15
packages/cli/test/integration-3.test.ts
vendored
@@ -1255,7 +1255,7 @@ test('fail to deploy a Lambda with an incorrect value for maxDuration', async ()
|
||||
|
||||
expect(output.exitCode, formatOutput(output)).toBe(1);
|
||||
expect(output.stderr).toMatch(
|
||||
/maxDuration must be between 1 second and 10 seconds/gm
|
||||
/maxDuration must be between \d+ second and \d+ seconds/gm
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1327,6 +1327,19 @@ test('should invoke CLI extension', async () => {
|
||||
expect(output.stdout, formatted).toContain(`Username: ${contextName}`);
|
||||
});
|
||||
|
||||
test('should pass through exit code for CLI extension', async () => {
|
||||
const fixture = path.join(__dirname, 'fixtures/e2e/cli-extension-exit-code');
|
||||
|
||||
// Ensure the `.bin` is populated in the fixture
|
||||
await runNpmInstall(fixture);
|
||||
|
||||
const output = await execCli(binaryPath, ['fail'], {
|
||||
cwd: fixture,
|
||||
reject: false,
|
||||
});
|
||||
expect(output.exitCode).toEqual(6);
|
||||
});
|
||||
|
||||
// NOTE: Order matters here. This must be the last test in the file.
|
||||
test('default command should prompt login with empty auth.json', async () => {
|
||||
await clearAuthConfig();
|
||||
|
||||
@@ -216,7 +216,7 @@ export function useProject(
|
||||
res.json(project);
|
||||
});
|
||||
client.scenario.get(
|
||||
`/v1/env/pull/${project.id}/:target?/:gitBranch?`,
|
||||
`/v2/env/pull/${project.id}/:target?/:gitBranch?`,
|
||||
(req, res) => {
|
||||
const target =
|
||||
typeof req.params.target === 'string'
|
||||
@@ -390,7 +390,7 @@ function exposeSystemEnvs(
|
||||
) {
|
||||
const envs: Env = {};
|
||||
|
||||
if (autoExposeSystemEnvs) {
|
||||
if (autoExposeSystemEnvs && target !== 'development') {
|
||||
envs['VERCEL'] = '1';
|
||||
envs['VERCEL_ENV'] = target || 'development';
|
||||
|
||||
|
||||
@@ -205,10 +205,17 @@ describe('env', () => {
|
||||
});
|
||||
const cwd = setupUnitFixture('vercel-env-pull');
|
||||
client.cwd = cwd;
|
||||
client.setArgv('env', 'pull', 'other.env', '--yes');
|
||||
client.setArgv(
|
||||
'env',
|
||||
'pull',
|
||||
'other.env',
|
||||
'--yes',
|
||||
'--environment',
|
||||
'production'
|
||||
);
|
||||
const exitCodePromise = env(client);
|
||||
await expect(client.stderr).toOutput(
|
||||
'Downloading `development` Environment Variables for Project vercel-env-pull'
|
||||
'Downloading `production` Environment Variables for Project vercel-env-pull'
|
||||
);
|
||||
await expect(client.stderr).toOutput('Created other.env file');
|
||||
await expect(client.stderr).not.toOutput('and added it to .gitignore');
|
||||
@@ -218,10 +225,44 @@ describe('env', () => {
|
||||
|
||||
const productionFileHasVercelEnv = rawDevEnv
|
||||
.toString()
|
||||
.includes('VERCEL_ENV="development"');
|
||||
.includes('VERCEL_ENV="production"');
|
||||
expect(productionFileHasVercelEnv).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should not expose system env variables in dev', async () => {
|
||||
useUser();
|
||||
useTeams('team_dummy');
|
||||
useProject({
|
||||
...defaultProject,
|
||||
id: 'vercel-env-pull',
|
||||
name: 'vercel-env-pull',
|
||||
autoExposeSystemEnvs: true,
|
||||
});
|
||||
const cwd = setupUnitFixture('vercel-env-pull');
|
||||
client.cwd = cwd;
|
||||
client.setArgv('env', 'pull', 'other.env', '--yes');
|
||||
const exitCodePromise = env(client);
|
||||
await expect(client.stderr).toOutput(
|
||||
'Downloading `development` Environment Variables for Project vercel-env-pull'
|
||||
);
|
||||
await expect(client.stderr).toOutput('Created other.env file');
|
||||
await expect(client.stderr).not.toOutput('and added it to .gitignore');
|
||||
await expect(exitCodePromise).resolves.toEqual(0);
|
||||
|
||||
const devEnv = (
|
||||
await fs.readFile(path.join(cwd, 'other.env'))
|
||||
).toString();
|
||||
|
||||
const devFileHasVercelEnv = [
|
||||
'VERCEL',
|
||||
'VERCEL_ENV',
|
||||
'VERCEL_URL',
|
||||
'VERCEL_REGION',
|
||||
'VERCEL_DEPLOYMENT_ID',
|
||||
].some(envVar => devEnv.includes(envVar));
|
||||
expect(devFileHasVercelEnv).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should show a delta string', async () => {
|
||||
const cwd = setupUnitFixture('vercel-env-pull-delta');
|
||||
client.cwd = cwd;
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# @vercel/client
|
||||
|
||||
## 13.2.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`d3c1267e2`](https://github.com/vercel/vercel/commit/d3c1267e24082789ea6382cf6af81dd40df288ff), [`ccd7eb1fb`](https://github.com/vercel/vercel/commit/ccd7eb1fb78f7ac9effdbe1935de3bda82c97fe3)]:
|
||||
- @vercel/build-utils@8.2.0
|
||||
|
||||
## 13.2.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`ad6945435`](https://github.com/vercel/vercel/commit/ad69454352b519b2b0ed326f245c779530554bf2)]:
|
||||
- @vercel/build-utils@8.1.3
|
||||
|
||||
## 13.2.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`1682ad43d`](https://github.com/vercel/vercel/commit/1682ad43d0064b22b1248a7e946746b838f00076)]:
|
||||
- @vercel/build-utils@8.1.2
|
||||
|
||||
## 13.2.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`2f7a6ed5f`](https://github.com/vercel/vercel/commit/2f7a6ed5f92d454000f92247d3b6548e2064f4e6)]:
|
||||
- @vercel/build-utils@8.1.1
|
||||
|
||||
## 13.2.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`5014b1e82`](https://github.com/vercel/vercel/commit/5014b1e82a46181baeb727ffe6d14000b6a4b1d7)]:
|
||||
- @vercel/build-utils@8.1.0
|
||||
|
||||
## 13.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/client",
|
||||
"version": "13.2.2",
|
||||
"version": "13.2.7",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
"homepage": "https://vercel.com",
|
||||
@@ -37,7 +37,7 @@
|
||||
"typescript": "4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/error-utils": "2.0.2",
|
||||
"@vercel/routing-utils": "3.1.0",
|
||||
"@zeit/fetch": "5.2.0",
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"@types/minimatch": "3.0.5",
|
||||
"@types/node": "14.18.33",
|
||||
"@types/semver": "7.3.10",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"jest-junit": "16.0.0",
|
||||
"typescript": "4.9.5"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @vercel/functions
|
||||
|
||||
## 1.0.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Convert package to CommonJS ([#11569](https://github.com/vercel/vercel/pull/11569))
|
||||
|
||||
## 1.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
2
packages/functions/index.d.ts
vendored
2
packages/functions/index.d.ts
vendored
@@ -14,4 +14,4 @@
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
export const waitUntil: (promise: Promise<unknown>) => void;
|
||||
export function waitUntil(promise: Promise<unknown>): void;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* global globalThis */
|
||||
|
||||
export const waitUntil = promise => {
|
||||
exports.waitUntil = promise => {
|
||||
if (
|
||||
promise === null ||
|
||||
typeof promise !== 'object' ||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "@vercel/functions",
|
||||
"description": "Runtime functions to be used with your Vercel Functions",
|
||||
"homepage": "https://vercel.com",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"types": "index.d.ts",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# @vercel/gatsby-plugin-vercel-builder
|
||||
|
||||
## 2.0.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`d3c1267e2`](https://github.com/vercel/vercel/commit/d3c1267e24082789ea6382cf6af81dd40df288ff), [`ccd7eb1fb`](https://github.com/vercel/vercel/commit/ccd7eb1fb78f7ac9effdbe1935de3bda82c97fe3)]:
|
||||
- @vercel/build-utils@8.2.0
|
||||
|
||||
## 2.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`ad6945435`](https://github.com/vercel/vercel/commit/ad69454352b519b2b0ed326f245c779530554bf2)]:
|
||||
- @vercel/build-utils@8.1.3
|
||||
|
||||
## 2.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`1682ad43d`](https://github.com/vercel/vercel/commit/1682ad43d0064b22b1248a7e946746b838f00076)]:
|
||||
- @vercel/build-utils@8.1.2
|
||||
|
||||
## 2.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`2f7a6ed5f`](https://github.com/vercel/vercel/commit/2f7a6ed5f92d454000f92247d3b6548e2064f4e6)]:
|
||||
- @vercel/build-utils@8.1.1
|
||||
|
||||
## 2.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`5014b1e82`](https://github.com/vercel/vercel/commit/5014b1e82a46181baeb727ffe6d14000b6a4b1d7)]:
|
||||
- @vercel/build-utils@8.1.0
|
||||
|
||||
## 2.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/gatsby-plugin-vercel-builder",
|
||||
"version": "2.0.26",
|
||||
"version": "2.0.31",
|
||||
"main": "dist/index.js",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -20,7 +20,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sinclair/typebox": "0.25.24",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/routing-utils": "3.1.0",
|
||||
"esbuild": "0.14.47",
|
||||
"etag": "1.8.1",
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"@types/node-fetch": "^2.3.0",
|
||||
"@types/tar": "6.1.5",
|
||||
"@types/yauzl-promise": "2.1.0",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"async-retry": "1.3.3",
|
||||
"execa": "^1.0.0",
|
||||
"fs-extra": "^7.0.0",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"devDependencies": {
|
||||
"@types/jest": "27.5.1",
|
||||
"@types/node": "14.18.33",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"execa": "3.2.0",
|
||||
"fs-extra": "11.1.0",
|
||||
"jest-junit": "16.0.0"
|
||||
|
||||
@@ -51,11 +51,15 @@ export const build: BuildV2 = async ({
|
||||
);
|
||||
|
||||
const spawnOpts = getSpawnOptions(meta, nodeVersion);
|
||||
const { cliType, lockfileVersion } = await scanParentDirs(entrypointDir);
|
||||
const { cliType, lockfileVersion, packageJson } = await scanParentDirs(
|
||||
entrypointDir,
|
||||
true
|
||||
);
|
||||
|
||||
spawnOpts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts.env || {},
|
||||
});
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @vercel/next
|
||||
|
||||
## 4.2.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- normalize source file locations for special metadata files ([#11579](https://github.com/vercel/vercel/pull/11579))
|
||||
|
||||
## 4.2.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- skip action rewrites for RSC requests ([#11576](https://github.com/vercel/vercel/pull/11576))
|
||||
|
||||
- Bump `@vercel/nft@0.27.0` ([#11580](https://github.com/vercel/vercel/pull/11580))
|
||||
|
||||
## 4.2.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/next",
|
||||
"version": "4.2.9",
|
||||
"version": "4.2.11",
|
||||
"license": "Apache-2.0",
|
||||
"main": "./dist/index",
|
||||
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js",
|
||||
@@ -23,7 +23,7 @@
|
||||
"dist"
|
||||
],
|
||||
"dependencies": {
|
||||
"@vercel/nft": "0.26.4"
|
||||
"@vercel/nft": "0.27.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/aws-lambda": "8.10.19",
|
||||
@@ -40,7 +40,7 @@
|
||||
"@types/semver": "6.0.0",
|
||||
"@types/text-table": "0.2.1",
|
||||
"@types/webpack-sources": "3.2.0",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/routing-utils": "3.1.0",
|
||||
"async-sema": "3.0.1",
|
||||
"buffer-crc32": "0.2.13",
|
||||
|
||||
@@ -257,10 +257,15 @@ export const build: BuildV2 = async ({
|
||||
const nextVersionRange = await getNextVersionRange(entryPath);
|
||||
const nodeVersion = await getNodeVersion(entryPath, undefined, config, meta);
|
||||
const spawnOpts = getSpawnOptions(meta, nodeVersion);
|
||||
const { cliType, lockfileVersion } = await scanParentDirs(entryPath);
|
||||
const { cliType, lockfileVersion, packageJson } = await scanParentDirs(
|
||||
entryPath,
|
||||
true
|
||||
);
|
||||
|
||||
spawnOpts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts.env || {},
|
||||
});
|
||||
|
||||
@@ -1956,7 +1956,7 @@ export async function serverBuild({
|
||||
// Also includes separate handling for index routes which should match to /index.action.
|
||||
// This follows the same pattern as the rewrites for .rsc files.
|
||||
{
|
||||
src: `^${path.posix.join('/', entryDirectory, '/')}`,
|
||||
src: `^${path.posix.join('/', entryDirectory, '/?')}`,
|
||||
dest: path.posix.join('/', entryDirectory, '/index.action'),
|
||||
has: [
|
||||
{
|
||||
@@ -1964,6 +1964,12 @@ export async function serverBuild({
|
||||
key: 'next-action',
|
||||
},
|
||||
],
|
||||
missing: [
|
||||
{
|
||||
type: 'header',
|
||||
key: rscHeader,
|
||||
},
|
||||
],
|
||||
continue: true,
|
||||
override: true,
|
||||
},
|
||||
@@ -1980,6 +1986,12 @@ export async function serverBuild({
|
||||
key: 'next-action',
|
||||
},
|
||||
],
|
||||
missing: [
|
||||
{
|
||||
type: 'header',
|
||||
key: rscHeader,
|
||||
},
|
||||
],
|
||||
continue: true,
|
||||
override: true,
|
||||
},
|
||||
|
||||
@@ -1439,6 +1439,13 @@ async function getSourceFilePathFromPage({
|
||||
}
|
||||
}
|
||||
|
||||
// if we got here, and didn't find a source not-found file, then it was the one injected
|
||||
// by Next.js. There's no need to warn or return a source file in this case, as it won't have
|
||||
// any configuration applied to it.
|
||||
if (page === '/_not-found/page') {
|
||||
return '';
|
||||
}
|
||||
|
||||
console.log(
|
||||
`WARNING: Unable to find source file for page ${page} with extensions: ${extensionsToTry.join(
|
||||
', '
|
||||
@@ -1565,15 +1572,13 @@ export async function getPageLambdaGroups({
|
||||
}
|
||||
|
||||
if (config && config.functions) {
|
||||
// `pages` are normalized without route groups (e.g., /app/(group)/page.js).
|
||||
// we keep track of that mapping in `inversedAppPathManifest`
|
||||
// `getSourceFilePathFromPage` needs to use the path from source to properly match the config
|
||||
const pageFromManifest = inversedAppPathManifest?.[routeName];
|
||||
const sourceFile = await getSourceFilePathFromPage({
|
||||
workPath: entryPath,
|
||||
// since this function is used by both `pages` and `app`, the manifest might not be provided
|
||||
// so fallback to normal behavior of just checking the `page`.
|
||||
page: pageFromManifest ?? page,
|
||||
page: normalizeSourceFilePageFromManifest(
|
||||
routeName,
|
||||
page,
|
||||
inversedAppPathManifest
|
||||
),
|
||||
pageExtensions,
|
||||
});
|
||||
|
||||
@@ -1657,6 +1662,43 @@ export async function getPageLambdaGroups({
|
||||
return groups;
|
||||
}
|
||||
|
||||
// `pages` are normalized without route groups (e.g., /app/(group)/page.js).
|
||||
// we keep track of that mapping in `inversedAppPathManifest`
|
||||
// `getSourceFilePathFromPage` needs to use the path from source to properly match the config
|
||||
function normalizeSourceFilePageFromManifest(
|
||||
routeName: string,
|
||||
page: string,
|
||||
inversedAppPathManifest?: Record<string, string>
|
||||
) {
|
||||
const pageFromManifest = inversedAppPathManifest?.[routeName];
|
||||
if (!pageFromManifest) {
|
||||
// since this function is used by both `pages` and `app`, the manifest might not be provided
|
||||
// so fallback to normal behavior of just checking the `page`.
|
||||
return page;
|
||||
}
|
||||
|
||||
const metadataConventions = [
|
||||
'/favicon.',
|
||||
'/icon.',
|
||||
'/apple-icon.',
|
||||
'/opengraph-image.',
|
||||
'/twitter-image.',
|
||||
'/sitemap.',
|
||||
'/robots.',
|
||||
];
|
||||
|
||||
// these special metadata files for will not contain `/route` or `/page` suffix, so return the routeName as-is.
|
||||
const isSpecialFile = metadataConventions.some(convention =>
|
||||
routeName.startsWith(convention)
|
||||
);
|
||||
|
||||
if (isSpecialFile) {
|
||||
return routeName;
|
||||
}
|
||||
|
||||
return pageFromManifest;
|
||||
}
|
||||
|
||||
export const outputFunctionFileSizeInfo = (
|
||||
pages: string[],
|
||||
pseudoLayer: PseudoLayer,
|
||||
|
||||
@@ -249,6 +249,30 @@ describe(`${__dirname.split(path.sep).pop()}`, () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should not match to an action output when the RSC header is present', async () => {
|
||||
const canonicalPath = `${basePath}/client/dynamic/1`;
|
||||
const pagePath = `${basePath}/client/dynamic/[id]`;
|
||||
const actionId = findActionId(pagePath, runtime);
|
||||
|
||||
const res = await fetch(`${ctx.deploymentUrl}${canonicalPath}`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify([1337]),
|
||||
headers: {
|
||||
'Content-Type': 'text/plain;charset=UTF-8',
|
||||
'Next-Action': actionId,
|
||||
'Next-Response': 'rsc',
|
||||
RSC: '1',
|
||||
},
|
||||
});
|
||||
|
||||
expect(res.status).toEqual(200);
|
||||
expect(res.headers.get('x-matched-path')).toBe(pagePath + '.rsc');
|
||||
expect(res.headers.get('content-type')).toBe('text/x-component');
|
||||
const body = await res.text();
|
||||
expect(body).toContain(JSON.stringify(['id', '1', 'd']));
|
||||
expect(body).not.toContain(JSON.stringify(['id', '1.action', 'd']));
|
||||
});
|
||||
});
|
||||
|
||||
describe('pages', () => {
|
||||
|
||||
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/apple-icon.png
vendored
Normal file
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/apple-icon.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/favicon.ico
vendored
Normal file
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/favicon.ico
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/icon.png
vendored
Normal file
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/icon.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@@ -1,3 +1,7 @@
|
||||
export const metadata = {
|
||||
metadataBase: new URL(process.env.VERCEL_PROJECT_PRODUCTION_URL ?? 'http://localhost:3000'),
|
||||
};
|
||||
|
||||
export default function Root({ children }) {
|
||||
return (
|
||||
<html className="this-is-the-document-html">
|
||||
|
||||
1
packages/next/test/fixtures/00-app-dir-no-ppr/app/opengraph-image.alt
vendored
Normal file
1
packages/next/test/fixtures/00-app-dir-no-ppr/app/opengraph-image.alt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Alt text for opengraph-image
|
||||
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/opengraph-image.png
vendored
Normal file
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/opengraph-image.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 582 KiB |
2
packages/next/test/fixtures/00-app-dir-no-ppr/app/robots.txt
vendored
Normal file
2
packages/next/test/fixtures/00-app-dir-no-ppr/app/robots.txt
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
User-Agent: *
|
||||
Disallow:
|
||||
7
packages/next/test/fixtures/00-app-dir-no-ppr/app/sitemap.xml
vendored
Normal file
7
packages/next/test/fixtures/00-app-dir-no-ppr/app/sitemap.xml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://vercel.com/</loc>
|
||||
<lastmod>2023-03-06T18:04:14.008Z</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
1
packages/next/test/fixtures/00-app-dir-no-ppr/app/twitter-image.alt
vendored
Normal file
1
packages/next/test/fixtures/00-app-dir-no-ppr/app/twitter-image.alt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Alt text for twitter image
|
||||
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/twitter-image.png
vendored
Normal file
BIN
packages/next/test/fixtures/00-app-dir-no-ppr/app/twitter-image.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 582 KiB |
@@ -53,10 +53,26 @@ async function hashAllFiles(files) {
|
||||
// experimental appDir currently requires Node.js >= 16
|
||||
if (parseInt(process.versions.node.split('.')[0], 10) >= 16) {
|
||||
it('should build with app-dir correctly', async () => {
|
||||
const origLog = console.log;
|
||||
const origError = console.error;
|
||||
const caughtLogs = [];
|
||||
|
||||
console.log = function (...args) {
|
||||
caughtLogs.push(args.join(' '));
|
||||
origLog.apply(this, args);
|
||||
};
|
||||
console.error = function (...args) {
|
||||
caughtLogs.push(args.join(' '));
|
||||
origError.apply(this, args);
|
||||
};
|
||||
|
||||
const { buildResult } = await runBuildLambda(
|
||||
path.join(__dirname, '../fixtures/00-app-dir-no-ppr')
|
||||
);
|
||||
|
||||
console.log = origLog;
|
||||
console.error = origError;
|
||||
|
||||
const lambdas = new Set();
|
||||
|
||||
for (const key of Object.keys(buildResult.output)) {
|
||||
@@ -123,6 +139,12 @@ if (parseInt(process.versions.node.split('.')[0], 10) >= 16) {
|
||||
expect(buildResult.output['dashboard.rsc'].fallback.fsPath).toMatch(
|
||||
/server\/app\/dashboard\.rsc$/
|
||||
);
|
||||
|
||||
expect(
|
||||
caughtLogs.some(log =>
|
||||
log.includes('WARNING: Unable to find source file for page')
|
||||
)
|
||||
).toBeFalsy();
|
||||
// TODO: re-enable after index/index handling is corrected
|
||||
// expect(buildResult.output['dashboard/index/index'].type).toBe('Prerender');
|
||||
// expect(buildResult.output['dashboard/index/index'].fallback.fsPath).toMatch(
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# @vercel/node
|
||||
|
||||
## 3.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`d3c1267e2`](https://github.com/vercel/vercel/commit/d3c1267e24082789ea6382cf6af81dd40df288ff), [`ccd7eb1fb`](https://github.com/vercel/vercel/commit/ccd7eb1fb78f7ac9effdbe1935de3bda82c97fe3)]:
|
||||
- @vercel/build-utils@8.2.0
|
||||
|
||||
## 3.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`ad6945435`](https://github.com/vercel/vercel/commit/ad69454352b519b2b0ed326f245c779530554bf2)]:
|
||||
- @vercel/build-utils@8.1.3
|
||||
|
||||
## 3.1.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`1682ad43d`](https://github.com/vercel/vercel/commit/1682ad43d0064b22b1248a7e946746b838f00076)]:
|
||||
- @vercel/build-utils@8.1.2
|
||||
|
||||
## 3.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`2f7a6ed5f`](https://github.com/vercel/vercel/commit/2f7a6ed5f92d454000f92247d3b6548e2064f4e6)]:
|
||||
- @vercel/build-utils@8.1.1
|
||||
|
||||
## 3.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Bump `@vercel/nft@0.27.0` ([#11580](https://github.com/vercel/vercel/pull/11580))
|
||||
|
||||
- Updated dependencies [[`5014b1e82`](https://github.com/vercel/vercel/commit/5014b1e82a46181baeb727ffe6d14000b6a4b1d7)]:
|
||||
- @vercel/build-utils@8.1.0
|
||||
|
||||
## 3.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/node",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.5",
|
||||
"license": "Apache-2.0",
|
||||
"main": "./dist/index",
|
||||
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
|
||||
@@ -24,9 +24,9 @@
|
||||
"@edge-runtime/primitives": "4.1.0",
|
||||
"@edge-runtime/vm": "3.2.0",
|
||||
"@types/node": "16.18.11",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/error-utils": "2.0.2",
|
||||
"@vercel/nft": "0.26.4",
|
||||
"@vercel/nft": "0.27.0",
|
||||
"@vercel/static-config": "3.0.0",
|
||||
"async-listen": "3.0.0",
|
||||
"cjs-module-lexer": "1.2.3",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"@types/jest": "27.4.1",
|
||||
"@types/node": "14.18.33",
|
||||
"@types/which": "3.0.0",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"execa": "^1.0.0",
|
||||
"fs-extra": "11.1.1",
|
||||
"jest-junit": "16.0.0",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @vercel/redwood
|
||||
|
||||
## 2.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Bump `@vercel/nft@0.27.0` ([#11580](https://github.com/vercel/vercel/pull/11580))
|
||||
|
||||
## 2.0.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/redwood",
|
||||
"version": "2.0.8",
|
||||
"version": "2.0.9",
|
||||
"main": "./dist/index.js",
|
||||
"license": "Apache-2.0",
|
||||
"homepage": "https://vercel.com/docs",
|
||||
@@ -20,7 +20,7 @@
|
||||
"type-check": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vercel/nft": "0.26.4",
|
||||
"@vercel/nft": "0.27.0",
|
||||
"@vercel/routing-utils": "3.1.0",
|
||||
"semver": "6.3.1"
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"@types/aws-lambda": "8.10.19",
|
||||
"@types/node": "14.18.33",
|
||||
"@types/semver": "6.0.0",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"execa": "3.2.0",
|
||||
"fs-extra": "11.1.0",
|
||||
"jest-junit": "16.0.0"
|
||||
|
||||
@@ -78,13 +78,15 @@ export const build: BuildV2 = async ({
|
||||
if (!spawnOpts.env) {
|
||||
spawnOpts.env = {};
|
||||
}
|
||||
const { cliType, lockfileVersion } = await scanParentDirs(
|
||||
entrypointFsDirname
|
||||
const { cliType, lockfileVersion, packageJson } = await scanParentDirs(
|
||||
entrypointFsDirname,
|
||||
true
|
||||
);
|
||||
|
||||
spawnOpts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts.env || {},
|
||||
});
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @vercel/remix-builder
|
||||
|
||||
## 2.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Bump `@vercel/nft@0.27.0` ([#11580](https://github.com/vercel/vercel/pull/11580))
|
||||
|
||||
- Update `@remix-run/dev` fork to v2.9.2-patch.2 ([#11582](https://github.com/vercel/vercel/pull/11582))
|
||||
|
||||
## 2.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/remix-builder",
|
||||
"version": "2.1.5",
|
||||
"version": "2.1.6",
|
||||
"license": "Apache-2.0",
|
||||
"main": "./dist/index.js",
|
||||
"homepage": "https://vercel.com/docs",
|
||||
@@ -23,16 +23,16 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"@vercel/error-utils": "2.0.2",
|
||||
"@vercel/nft": "0.26.4",
|
||||
"@vercel/nft": "0.27.0",
|
||||
"@vercel/static-config": "3.0.0",
|
||||
"ts-morph": "12.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@remix-run/dev": "npm:@vercel/remix-run-dev@2.8.1",
|
||||
"@remix-run/dev": "npm:@vercel/remix-run-dev@2.9.2-patch.2",
|
||||
"@types/jest": "27.5.1",
|
||||
"@types/node": "14.18.33",
|
||||
"@types/semver": "7.3.13",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"jest-junit": "16.0.0",
|
||||
"path-to-regexp": "6.2.1",
|
||||
"semver": "7.5.2"
|
||||
|
||||
@@ -104,8 +104,13 @@ export const build: BuildV2 = async ({
|
||||
meta
|
||||
);
|
||||
|
||||
const { cliType, packageJsonPath, lockfileVersion, lockfilePath } =
|
||||
await scanParentDirs(entrypointFsDirname);
|
||||
const {
|
||||
cliType,
|
||||
packageJsonPath,
|
||||
packageJson,
|
||||
lockfileVersion,
|
||||
lockfilePath,
|
||||
} = await scanParentDirs(entrypointFsDirname, true);
|
||||
|
||||
if (!packageJsonPath) {
|
||||
throw new Error('Failed to locate `package.json` file in your project');
|
||||
@@ -125,6 +130,7 @@ export const build: BuildV2 = async ({
|
||||
spawnOpts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts.env,
|
||||
});
|
||||
|
||||
@@ -99,6 +99,7 @@ export const build: BuildV2 = async ({
|
||||
spawnOpts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts.env,
|
||||
});
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"@types/fs-extra": "8.0.0",
|
||||
"@types/semver": "6.0.0",
|
||||
"@types/which": "3.0.0",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"execa": "2.0.4",
|
||||
"fs-extra": "^7.0.1",
|
||||
"jest-junit": "16.0.0",
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# @vercel/static-build
|
||||
|
||||
## 2.5.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @vercel/gatsby-plugin-vercel-builder@2.0.31
|
||||
|
||||
## 2.5.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @vercel/gatsby-plugin-vercel-builder@2.0.30
|
||||
|
||||
## 2.5.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @vercel/gatsby-plugin-vercel-builder@2.0.29
|
||||
|
||||
## 2.5.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @vercel/gatsby-plugin-vercel-builder@2.0.28
|
||||
|
||||
## 2.5.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @vercel/gatsby-plugin-vercel-builder@2.0.27
|
||||
|
||||
## 2.5.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@vercel/static-build",
|
||||
"version": "2.5.4",
|
||||
"version": "2.5.9",
|
||||
"license": "Apache-2.0",
|
||||
"main": "./dist/index",
|
||||
"homepage": "https://vercel.com/docs/build-step",
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@vercel/gatsby-plugin-vercel-analytics": "1.0.11",
|
||||
"@vercel/gatsby-plugin-vercel-builder": "2.0.26",
|
||||
"@vercel/gatsby-plugin-vercel-builder": "2.0.31",
|
||||
"@vercel/static-config": "3.0.0",
|
||||
"ts-morph": "12.0.0"
|
||||
},
|
||||
@@ -35,7 +35,7 @@
|
||||
"@types/node-fetch": "2.5.4",
|
||||
"@types/promise-timeout": "1.3.0",
|
||||
"@types/semver": "7.3.13",
|
||||
"@vercel/build-utils": "8.0.0",
|
||||
"@vercel/build-utils": "8.2.0",
|
||||
"@vercel/error-utils": "2.0.2",
|
||||
"@vercel/frameworks": "3.0.2",
|
||||
"@vercel/fs-detectors": "5.2.3",
|
||||
|
||||
@@ -482,11 +482,15 @@ export const build: BuildV2 = async ({
|
||||
spawnOpts.env.CI = 'false';
|
||||
}
|
||||
|
||||
const { cliType, lockfileVersion } = await scanParentDirs(entrypointDir);
|
||||
const { cliType, lockfileVersion, packageJson } = await scanParentDirs(
|
||||
entrypointDir,
|
||||
true
|
||||
);
|
||||
|
||||
spawnOpts.env = getEnvForPackageManager({
|
||||
cliType,
|
||||
lockfileVersion,
|
||||
packageJsonPackageManager: packageJson?.packageManager,
|
||||
nodeVersion,
|
||||
env: spawnOpts.env || {},
|
||||
});
|
||||
|
||||
202
pnpm-lock.yaml
generated
202
pnpm-lock.yaml
generated
@@ -132,7 +132,7 @@ importers:
|
||||
specifier: 27.4.1
|
||||
version: 27.4.1
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../packages/build-utils
|
||||
'@vercel/frameworks':
|
||||
specifier: 3.0.2
|
||||
@@ -189,7 +189,7 @@ importers:
|
||||
specifier: 1.0.4
|
||||
version: link:../constants
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../../packages/build-utils
|
||||
'@vercel/routing-utils':
|
||||
specifier: 3.1.0
|
||||
@@ -313,7 +313,7 @@ importers:
|
||||
packages/cli:
|
||||
dependencies:
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
'@vercel/fun':
|
||||
specifier: 1.1.0
|
||||
@@ -325,25 +325,25 @@ importers:
|
||||
specifier: 1.0.2
|
||||
version: link:../hydrogen
|
||||
'@vercel/next':
|
||||
specifier: 4.2.9
|
||||
specifier: 4.2.11
|
||||
version: link:../next
|
||||
'@vercel/node':
|
||||
specifier: 3.1.0
|
||||
specifier: 3.1.5
|
||||
version: link:../node
|
||||
'@vercel/python':
|
||||
specifier: 4.2.0
|
||||
version: link:../python
|
||||
'@vercel/redwood':
|
||||
specifier: 2.0.8
|
||||
specifier: 2.0.9
|
||||
version: link:../redwood
|
||||
'@vercel/remix-builder':
|
||||
specifier: 2.1.5
|
||||
specifier: 2.1.6
|
||||
version: link:../remix
|
||||
'@vercel/ruby':
|
||||
specifier: 2.1.0
|
||||
version: link:../ruby
|
||||
'@vercel/static-build':
|
||||
specifier: 2.5.4
|
||||
specifier: 2.5.9
|
||||
version: link:../static-build
|
||||
chokidar:
|
||||
specifier: 3.3.1
|
||||
@@ -488,10 +488,10 @@ importers:
|
||||
specifier: 1.0.0
|
||||
version: link:../../internals/get-package-json
|
||||
'@vercel-internals/types':
|
||||
specifier: 1.0.31
|
||||
specifier: 1.0.36
|
||||
version: link:../../internals/types
|
||||
'@vercel/client':
|
||||
specifier: 13.2.2
|
||||
specifier: 13.2.7
|
||||
version: link:../client
|
||||
'@vercel/error-utils':
|
||||
specifier: 2.0.2
|
||||
@@ -737,7 +737,7 @@ importers:
|
||||
packages/client:
|
||||
dependencies:
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
'@vercel/error-utils':
|
||||
specifier: 2.0.2
|
||||
@@ -941,7 +941,7 @@ importers:
|
||||
specifier: 7.3.10
|
||||
version: 7.3.10
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
jest-junit:
|
||||
specifier: 16.0.0
|
||||
@@ -972,7 +972,7 @@ importers:
|
||||
specifier: 0.25.24
|
||||
version: 0.25.24
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
'@vercel/routing-utils':
|
||||
specifier: 3.1.0
|
||||
@@ -1039,7 +1039,7 @@ importers:
|
||||
specifier: 2.1.0
|
||||
version: 2.1.0
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
async-retry:
|
||||
specifier: 1.3.3
|
||||
@@ -1088,7 +1088,7 @@ importers:
|
||||
specifier: 14.18.33
|
||||
version: 14.18.33
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
execa:
|
||||
specifier: 3.2.0
|
||||
@@ -1103,8 +1103,8 @@ importers:
|
||||
packages/next:
|
||||
dependencies:
|
||||
'@vercel/nft':
|
||||
specifier: 0.26.4
|
||||
version: 0.26.4
|
||||
specifier: 0.27.0
|
||||
version: 0.27.0
|
||||
devDependencies:
|
||||
'@types/aws-lambda':
|
||||
specifier: 8.10.19
|
||||
@@ -1149,7 +1149,7 @@ importers:
|
||||
specifier: 3.2.0
|
||||
version: 3.2.0
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
'@vercel/routing-utils':
|
||||
specifier: 3.1.0
|
||||
@@ -1236,14 +1236,14 @@ importers:
|
||||
specifier: 16.18.11
|
||||
version: 16.18.11
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
'@vercel/error-utils':
|
||||
specifier: 2.0.2
|
||||
version: link:../error-utils
|
||||
'@vercel/nft':
|
||||
specifier: 0.26.4
|
||||
version: 0.26.4
|
||||
specifier: 0.27.0
|
||||
version: 0.27.0
|
||||
'@vercel/static-config':
|
||||
specifier: 3.0.0
|
||||
version: link:../static-config
|
||||
@@ -1354,7 +1354,7 @@ importers:
|
||||
specifier: 3.0.0
|
||||
version: 3.0.0
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
execa:
|
||||
specifier: ^1.0.0
|
||||
@@ -1372,8 +1372,8 @@ importers:
|
||||
packages/redwood:
|
||||
dependencies:
|
||||
'@vercel/nft':
|
||||
specifier: 0.26.4
|
||||
version: 0.26.4
|
||||
specifier: 0.27.0
|
||||
version: 0.27.0
|
||||
'@vercel/routing-utils':
|
||||
specifier: 3.1.0
|
||||
version: link:../routing-utils
|
||||
@@ -1391,7 +1391,7 @@ importers:
|
||||
specifier: 6.0.0
|
||||
version: 6.0.0
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
execa:
|
||||
specifier: 3.2.0
|
||||
@@ -1409,8 +1409,8 @@ importers:
|
||||
specifier: 2.0.2
|
||||
version: link:../error-utils
|
||||
'@vercel/nft':
|
||||
specifier: 0.26.4
|
||||
version: 0.26.4
|
||||
specifier: 0.27.0
|
||||
version: 0.27.0
|
||||
'@vercel/static-config':
|
||||
specifier: 3.0.0
|
||||
version: link:../static-config
|
||||
@@ -1419,8 +1419,8 @@ importers:
|
||||
version: 12.0.0
|
||||
devDependencies:
|
||||
'@remix-run/dev':
|
||||
specifier: npm:@vercel/remix-run-dev@2.8.1
|
||||
version: /@vercel/remix-run-dev@2.8.1(@types/node@14.18.33)(typescript@4.9.5)
|
||||
specifier: npm:@vercel/remix-run-dev@2.9.2-patch.2
|
||||
version: /@vercel/remix-run-dev@2.9.2-patch.2(@remix-run/react@2.9.2)(@types/node@14.18.33)(typescript@4.9.5)
|
||||
'@types/jest':
|
||||
specifier: 27.5.1
|
||||
version: 27.5.1
|
||||
@@ -1431,7 +1431,7 @@ importers:
|
||||
specifier: 7.3.13
|
||||
version: 7.3.13
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
jest-junit:
|
||||
specifier: 16.0.0
|
||||
@@ -1478,7 +1478,7 @@ importers:
|
||||
specifier: 3.0.0
|
||||
version: 3.0.0
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
execa:
|
||||
specifier: 2.0.4
|
||||
@@ -1502,7 +1502,7 @@ importers:
|
||||
specifier: 1.0.11
|
||||
version: link:../gatsby-plugin-vercel-analytics
|
||||
'@vercel/gatsby-plugin-vercel-builder':
|
||||
specifier: 2.0.26
|
||||
specifier: 2.0.31
|
||||
version: link:../gatsby-plugin-vercel-builder
|
||||
'@vercel/static-config':
|
||||
specifier: 3.0.0
|
||||
@@ -1539,7 +1539,7 @@ importers:
|
||||
specifier: 7.3.13
|
||||
version: 7.3.13
|
||||
'@vercel/build-utils':
|
||||
specifier: 8.0.0
|
||||
specifier: 8.2.0
|
||||
version: link:../build-utils
|
||||
'@vercel/error-utils':
|
||||
specifier: 2.0.2
|
||||
@@ -3540,8 +3540,8 @@ packages:
|
||||
tslib: 2.5.0
|
||||
dev: true
|
||||
|
||||
/@remix-run/node@2.8.1(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-ddCwBVlfLvRxTQJHPcaM1lhfMjsFYG3EGmYpWJIWnnzDX5EbX9pUNHBWisMuH1eA0c7pbw0PbW0UtCttKYx2qg==}
|
||||
/@remix-run/node@2.9.2(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-2Mt2107pfelz4T+ziDBef3P4A7kgPqCDshnEYCVGxInivJ3HHwAKUcb7MhGa8uMMMA6LMWxbAPYNHPzC3iKv2A==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
peerDependencies:
|
||||
typescript: ^5.1.0
|
||||
@@ -3549,29 +3549,44 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@remix-run/server-runtime': 2.8.1(typescript@4.9.5)
|
||||
'@remix-run/server-runtime': 2.9.2(typescript@4.9.5)
|
||||
'@remix-run/web-fetch': 4.4.2
|
||||
'@remix-run/web-file': 3.1.0
|
||||
'@remix-run/web-stream': 1.1.0
|
||||
'@web3-storage/multipart-parser': 1.0.0
|
||||
cookie-signature: 1.2.1
|
||||
source-map-support: 0.5.21
|
||||
stream-slice: 0.1.2
|
||||
typescript: 4.9.5
|
||||
undici: 6.16.1
|
||||
dev: true
|
||||
|
||||
/@remix-run/router@1.15.3:
|
||||
resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==}
|
||||
/@remix-run/react@2.9.2(react-dom@18.3.1)(react@18.3.1)(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-DcZDzm68MBxGn8hjf/VsuUpjxDYZ8VOOH79P1zWu4hb3hBr90WV1Sa/gIAFUEGpOCcSQ0EG/ci8MaFxcAaPz2Q==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
typescript: ^5.1.0
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@remix-run/router': 1.16.1
|
||||
'@remix-run/server-runtime': 2.9.2(typescript@4.9.5)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react-router: 6.23.1(react@18.3.1)
|
||||
react-router-dom: 6.23.1(react-dom@18.3.1)(react@18.3.1)
|
||||
turbo-stream: 2.0.1
|
||||
typescript: 4.9.5
|
||||
dev: true
|
||||
|
||||
/@remix-run/router@1.16.1:
|
||||
resolution: {integrity: sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
dev: true
|
||||
|
||||
/@remix-run/router@1.15.3-pre.0:
|
||||
resolution: {integrity: sha512-JUQb6sztqJpRbsdKpx3D4+6eaGmHU4Yb/QeKrES/ZbLuijlZMOmZ+gV0ohX5vrRDnJHJmcQPq3Tpk0GGPNM9gg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
dev: true
|
||||
|
||||
/@remix-run/server-runtime@2.8.1(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-fh4SOEoONrN73Kvzc0gMDCmYpVRVbvoj9j3BUXHAcn0An8iX+HD/22gU7nTkIBzExM/F9xgEcwTewOnWqLw0Bg==}
|
||||
/@remix-run/server-runtime@2.9.2(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-dX37FEeMVVg7KUbpRhX4hD0nUY0Sscz/qAjU4lYCdd6IzwJGariTmz+bQTXKCjploZuXj09OQZHSOS/ydkUVDA==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
peerDependencies:
|
||||
typescript: ^5.1.0
|
||||
@@ -3579,12 +3594,13 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@remix-run/router': 1.15.3
|
||||
'@remix-run/router': 1.16.1
|
||||
'@types/cookie': 0.6.0
|
||||
'@web3-storage/multipart-parser': 1.0.0
|
||||
cookie: 0.6.0
|
||||
set-cookie-parser: 2.6.0
|
||||
source-map: 0.7.4
|
||||
turbo-stream: 2.0.1
|
||||
typescript: 4.9.5
|
||||
dev: true
|
||||
|
||||
@@ -5497,15 +5513,15 @@ packages:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@vercel/nft@0.26.4:
|
||||
resolution: {integrity: sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==}
|
||||
/@vercel/nft@0.27.0:
|
||||
resolution: {integrity: sha512-W5pValyhToK9hbgEUAM6sLRUIl1I++RsFnXKHXtND50P1+vZ+OYPCzq1OOz0Ok6ghK6aOwae8G/rEAXkLedC+w==}
|
||||
engines: {node: '>=16'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@mapbox/node-pre-gyp': 1.0.10
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
acorn: 8.8.2
|
||||
acorn-import-attributes: 1.9.2(acorn@8.8.2)
|
||||
acorn: 8.11.3
|
||||
acorn-import-attributes: 1.9.5(acorn@8.11.3)
|
||||
async-sema: 3.1.1
|
||||
bindings: 1.5.0
|
||||
estree-walker: 2.0.2
|
||||
@@ -5519,12 +5535,13 @@ packages:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@vercel/remix-run-dev@2.8.1(@types/node@14.18.33)(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-9EDL0UOr6WKhC80YM4QNvAMudcWfAeVKwwqz1VyRE2odgAlsxy6DoWbUW8rswgY6URLE7AEUkbyUQR4TdCx1uQ==}
|
||||
/@vercel/remix-run-dev@2.9.2-patch.2(@remix-run/react@2.9.2)(@types/node@14.18.33)(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-2drkQ2kE1uG79yZp1ALEe5LVB5QJvhVpoa5o3FtL/FZ+a6EWBGlJWyWa1THDzR1fztx0CHiB3FGsC8EvaxM7lQ==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@remix-run/serve': ^2.8.1
|
||||
'@remix-run/react': ^2.9.2
|
||||
'@remix-run/serve': ^2.9.2
|
||||
typescript: ^5.1.0
|
||||
vite: ^5.1.0
|
||||
wrangler: ^3.28.2
|
||||
@@ -5548,9 +5565,10 @@ packages:
|
||||
'@babel/types': 7.24.0
|
||||
'@mdx-js/mdx': 2.3.0
|
||||
'@npmcli/package-json': 4.0.1
|
||||
'@remix-run/node': 2.8.1(typescript@4.9.5)
|
||||
'@remix-run/router': 1.15.3-pre.0
|
||||
'@remix-run/server-runtime': 2.8.1(typescript@4.9.5)
|
||||
'@remix-run/node': 2.9.2(typescript@4.9.5)
|
||||
'@remix-run/react': 2.9.2(react-dom@18.3.1)(react@18.3.1)(typescript@4.9.5)
|
||||
'@remix-run/router': 1.16.1
|
||||
'@remix-run/server-runtime': 2.9.2(typescript@4.9.5)
|
||||
'@types/mdx': 2.0.12
|
||||
'@vanilla-extract/integration': 6.5.0(@types/node@14.18.33)
|
||||
arg: 5.0.2
|
||||
@@ -5838,12 +5856,12 @@ packages:
|
||||
negotiator: 0.6.3
|
||||
dev: true
|
||||
|
||||
/acorn-import-attributes@1.9.2(acorn@8.8.2):
|
||||
resolution: {integrity: sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==}
|
||||
/acorn-import-attributes@1.9.5(acorn@8.11.3):
|
||||
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
|
||||
peerDependencies:
|
||||
acorn: ^8
|
||||
dependencies:
|
||||
acorn: 8.8.2
|
||||
acorn: 8.11.3
|
||||
dev: false
|
||||
|
||||
/acorn-jsx@5.3.2(acorn@8.11.3):
|
||||
@@ -5867,18 +5885,11 @@ packages:
|
||||
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/acorn@8.8.1:
|
||||
resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
||||
/acorn@8.8.2:
|
||||
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/agent-base@4.3.0:
|
||||
resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
@@ -13495,6 +13506,16 @@ packages:
|
||||
flat: 5.0.2
|
||||
dev: true
|
||||
|
||||
/react-dom@18.3.1(react@18.3.1):
|
||||
resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
|
||||
peerDependencies:
|
||||
react: ^18.3.1
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
react: 18.3.1
|
||||
scheduler: 0.23.2
|
||||
dev: true
|
||||
|
||||
/react-is@16.13.1:
|
||||
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
||||
dev: true
|
||||
@@ -13512,6 +13533,36 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/react-router-dom@6.23.1(react-dom@18.3.1)(react@18.3.1):
|
||||
resolution: {integrity: sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
react: '>=16.8'
|
||||
react-dom: '>=16.8'
|
||||
dependencies:
|
||||
'@remix-run/router': 1.16.1
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react-router: 6.23.1(react@18.3.1)
|
||||
dev: true
|
||||
|
||||
/react-router@6.23.1(react@18.3.1):
|
||||
resolution: {integrity: sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
peerDependencies:
|
||||
react: '>=16.8'
|
||||
dependencies:
|
||||
'@remix-run/router': 1.16.1
|
||||
react: 18.3.1
|
||||
dev: true
|
||||
|
||||
/react@18.3.1:
|
||||
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
dev: true
|
||||
|
||||
/read-pkg-up@7.0.1:
|
||||
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -13896,6 +13947,12 @@ packages:
|
||||
/safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
|
||||
/scheduler@0.23.2:
|
||||
resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
dev: true
|
||||
|
||||
/semver-compare@1.0.0:
|
||||
resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
|
||||
dev: true
|
||||
@@ -15131,6 +15188,10 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/turbo-stream@2.0.1:
|
||||
resolution: {integrity: sha512-sm0ZtcX9YWh28p5X8t5McxC2uthrt9p+g0bGE0KTVFhnhNWefpSVCr+67zRNDUOfo4bpXwiOp7otO+dyQ7/y/A==}
|
||||
dev: true
|
||||
|
||||
/turbo-windows-64@1.13.3:
|
||||
resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==}
|
||||
cpu: [x64]
|
||||
@@ -15313,6 +15374,11 @@ packages:
|
||||
busboy: 1.6.0
|
||||
dev: false
|
||||
|
||||
/undici@6.16.1:
|
||||
resolution: {integrity: sha512-NeNiTT7ixpeiL1qOIU/xTVpHpVP0svmI6PwoCKaMGaI5AsHOaRdwqU/f7Fi9eyU4u03nd5U/BC8wmRMnS9nqoA==}
|
||||
engines: {node: '>=18.17'}
|
||||
dev: true
|
||||
|
||||
/unified@10.1.2:
|
||||
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
|
||||
dependencies:
|
||||
|
||||
@@ -108,6 +108,7 @@ async function runProbe(probe, deploymentId, deploymentUrl, ctx) {
|
||||
found = true;
|
||||
break;
|
||||
} else {
|
||||
ctx.deploymentLogs = null;
|
||||
throw new Error(
|
||||
`Expected deployment logs of ${deploymentId} not to contain ${toCheck}, but found ${log.text}`
|
||||
);
|
||||
@@ -122,9 +123,13 @@ async function runProbe(probe, deploymentId, deploymentUrl, ctx) {
|
||||
deploymentLogs,
|
||||
logLength: deploymentLogs?.length,
|
||||
});
|
||||
throw new Error(
|
||||
ctx.deploymentLogs = null;
|
||||
const error = new Error(
|
||||
`Expected deployment logs of ${deploymentId} to contain ${toCheck}, it was not found`
|
||||
);
|
||||
error.retries = 20;
|
||||
error.retryDelay = 5000; // ms
|
||||
throw error;
|
||||
} else {
|
||||
logWithinTest('finished testing', JSON.stringify(probe));
|
||||
return;
|
||||
@@ -442,24 +447,27 @@ async function testDeployment(fixturePath, opts = {}) {
|
||||
try {
|
||||
await runProbe(probe, deploymentId, deploymentUrl, probeCtx);
|
||||
} catch (err) {
|
||||
if (!probe.retries) {
|
||||
const retries = Math.max(probe.retries || 0, err.retries || 0);
|
||||
if (!retries) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
for (let i = 0; i < probe.retries; i++) {
|
||||
logWithinTest(`re-trying ${i + 1}/${probe.retries}:`, stringifiedProbe);
|
||||
const retryDelay = Math.max(probe.retryDelay || 0, err.retryDelay || 0);
|
||||
|
||||
for (let i = 0; i < retries; i++) {
|
||||
logWithinTest(`re-trying ${i + 1}/${retries}:`, stringifiedProbe);
|
||||
|
||||
try {
|
||||
await runProbe(probe, deploymentId, deploymentUrl, probeCtx);
|
||||
break;
|
||||
} catch (err) {
|
||||
if (i === probe.retries - 1) {
|
||||
if (i === retries - 1) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
if (probe.retryDelay) {
|
||||
logWithinTest(`Waiting ${probe.retryDelay}ms before retrying`);
|
||||
await new Promise(resolve => setTimeout(resolve, probe.retryDelay));
|
||||
if (retryDelay) {
|
||||
logWithinTest(`Waiting ${retryDelay}ms before retrying`);
|
||||
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
46
utils/chunk-tests-18.js
vendored
Normal file
46
utils/chunk-tests-18.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
async function main() {
|
||||
try {
|
||||
console.log(
|
||||
JSON.stringify([
|
||||
{
|
||||
runner: 'ubuntu-latest',
|
||||
packagePath: 'packages/node',
|
||||
packageName: '@vercel/node',
|
||||
scriptName: 'test-unit',
|
||||
testScript: 'test',
|
||||
testPaths: ['test/unit/dev.test.ts'],
|
||||
chunkNumber: 1,
|
||||
allChunksLength: 1,
|
||||
},
|
||||
{
|
||||
runner: 'macos-14',
|
||||
packagePath: 'packages/node',
|
||||
packageName: '@vercel/node',
|
||||
scriptName: 'test-unit',
|
||||
testScript: 'test',
|
||||
testPaths: ['test/unit/dev.test.ts'],
|
||||
chunkNumber: 1,
|
||||
allChunksLength: 1,
|
||||
},
|
||||
{
|
||||
runner: 'windows-latest',
|
||||
packagePath: 'packages/node',
|
||||
packageName: '@vercel/node',
|
||||
scriptName: 'test-unit',
|
||||
testScript: 'test',
|
||||
testPaths: ['test/unit/dev.test.ts'],
|
||||
chunkNumber: 1,
|
||||
allChunksLength: 1,
|
||||
},
|
||||
])
|
||||
);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
process.exitCode = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
if (module === require.main || !module.parent) {
|
||||
main();
|
||||
}
|
||||
Reference in New Issue
Block a user