mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-12 04:22:14 +00:00
Compare commits
111 Commits
@vercel/py
...
@vercel/no
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66cd626d1c | ||
|
|
0861dc8fbc | ||
|
|
7b553c7032 | ||
|
|
644b8a52cb | ||
|
|
33cc8e0acf | ||
|
|
c0efce29ad | ||
|
|
b4d115b24a | ||
|
|
34dd9c0918 | ||
|
|
f5296c3c06 | ||
|
|
d9065c2102 | ||
|
|
0ad37829da | ||
|
|
67748b5207 | ||
|
|
306f653da9 | ||
|
|
9e2120a325 | ||
|
|
a6463d2636 | ||
|
|
429a111b50 | ||
|
|
431dde5fa8 | ||
|
|
1f09979c6f | ||
|
|
fc90a3dc0b | ||
|
|
57541e230d | ||
|
|
efd3cc05dc | ||
|
|
a732b64c02 | ||
|
|
f8320417a8 | ||
|
|
50791803b6 | ||
|
|
7504bfbe26 | ||
|
|
7fa08088ea | ||
|
|
5d40da17ba | ||
|
|
de84743e10 | ||
|
|
39ce9166ba | ||
|
|
ce54ca631b | ||
|
|
d6ca05d975 | ||
|
|
f8c893bb15 | ||
|
|
5e6ef3d569 | ||
|
|
88715ad598 | ||
|
|
ed19b26603 | ||
|
|
9c4589ed28 | ||
|
|
da300030c9 | ||
|
|
90b14b689d | ||
|
|
e0ed2d1e76 | ||
|
|
e7516f8002 | ||
|
|
9e9fac0191 | ||
|
|
00f26b3571 | ||
|
|
68b4516722 | ||
|
|
7bf7591dd3 | ||
|
|
a012a1e749 | ||
|
|
6dbeb5c3ee | ||
|
|
853a570384 | ||
|
|
353a7ddfcd | ||
|
|
6fcbdb90c7 | ||
|
|
80a6960dc9 | ||
|
|
b52741b1bb | ||
|
|
1d4c86d0f8 | ||
|
|
913608de4d | ||
|
|
d595db6294 | ||
|
|
ae489687d2 | ||
|
|
6fc2872794 | ||
|
|
6697a0e846 | ||
|
|
ed9ef486a8 | ||
|
|
213ec69db3 | ||
|
|
7512bf64b1 | ||
|
|
00e12792d8 | ||
|
|
469d38aad8 | ||
|
|
0e84a6775d | ||
|
|
3029af5a2b | ||
|
|
4422eee5c4 | ||
|
|
222710f612 | ||
|
|
d8179032e2 | ||
|
|
f2d7f3f444 | ||
|
|
60929bb1af | ||
|
|
4ef0b19508 | ||
|
|
6041a3f6c8 | ||
|
|
5ee94e0dce | ||
|
|
9bc5bb4afc | ||
|
|
cf6152d16b | ||
|
|
0f5ec80cc6 | ||
|
|
c523a755f8 | ||
|
|
fa8e313222 | ||
|
|
0c1603f41b | ||
|
|
18b04b3589 | ||
|
|
58215906f9 | ||
|
|
1feb4d797e | ||
|
|
45ae16e371 | ||
|
|
ce7e82fa7a | ||
|
|
e9026c7a69 | ||
|
|
a18ed98f2d | ||
|
|
09f1bbfa41 | ||
|
|
13efc4f04f | ||
|
|
08c5a9b0fc | ||
|
|
5349fb9181 | ||
|
|
2f51171a17 | ||
|
|
63c010a7f4 | ||
|
|
7128a65ccd | ||
|
|
d402c4350a | ||
|
|
f88afba733 | ||
|
|
ea5bc88062 | ||
|
|
eb06bd262b | ||
|
|
cb37ff2c89 | ||
|
|
2f5b0aeeb1 | ||
|
|
ab01608785 | ||
|
|
905c7b6ad4 | ||
|
|
717dd82c51 | ||
|
|
a4996e1c5a | ||
|
|
c147ead1bc | ||
|
|
2ab5ce5d90 | ||
|
|
33e43e103a | ||
|
|
3dbc75580d | ||
|
|
f6e863d4bb | ||
|
|
9f63ca60ad | ||
|
|
873327e9bd | ||
|
|
e3f9faf513 | ||
|
|
1a5bd6c5b9 |
20
.github/CODEOWNERS
vendored
20
.github/CODEOWNERS
vendored
@@ -2,19 +2,17 @@
|
|||||||
# https://help.github.com/en/articles/about-code-owners
|
# https://help.github.com/en/articles/about-code-owners
|
||||||
|
|
||||||
# Restricted Paths
|
# Restricted Paths
|
||||||
* @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek
|
* @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek
|
||||||
/.github/workflows @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek @ijjk
|
/.github/workflows @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek @ijjk
|
||||||
/packages/fs-detectors @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek @agadzik @chloetedder
|
/packages/fs-detectors @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek @agadzik @chloetedder
|
||||||
/packages/next @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek @ijjk @ztanner
|
/packages/next @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek @ijjk @ztanner
|
||||||
/packages/routing-utils @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek @ijjk
|
/packages/routing-utils @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek @ijjk
|
||||||
/packages/edge @vercel/compute
|
/packages/static-build @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek
|
||||||
|
/packages/edge @vercel/compute @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek
|
||||||
/examples @leerob
|
/examples @leerob
|
||||||
/examples/create-react-app @Timer
|
/examples/create-react-app @Timer
|
||||||
/examples/nextjs @timneutkens @ijjk @styfle @ztanner @huozhi
|
/examples/nextjs @timneutkens @ijjk @ztanner @huozhi
|
||||||
/examples/hugo @styfle
|
/packages/node @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek @Kikobeats
|
||||||
/examples/jekyll @styfle
|
|
||||||
/examples/zola @styfle
|
|
||||||
/packages/node @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek @Kikobeats
|
|
||||||
|
|
||||||
# Unrestricted Paths
|
# Unrestricted Paths
|
||||||
.changeset/
|
.changeset/
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 14
|
node-version: 16
|
||||||
- name: Enable corepack
|
- name: Enable corepack
|
||||||
run: corepack enable pnpm
|
run: corepack enable pnpm
|
||||||
- name: Update Gatsby Fixtures
|
- name: Update Gatsby Fixtures
|
||||||
|
|||||||
2
.github/workflows/test-lint.yml
vendored
2
.github/workflows/test-lint.yml
vendored
@@ -49,3 +49,5 @@ jobs:
|
|||||||
- run: pnpm install
|
- run: pnpm install
|
||||||
- run: pnpm run lint
|
- run: pnpm run lint
|
||||||
- run: pnpm run prettier-check
|
- run: pnpm run prettier-check
|
||||||
|
- run: pnpm run build
|
||||||
|
- run: pnpm run type-check
|
||||||
|
|||||||
7
.github/workflows/test.yml
vendored
7
.github/workflows/test.yml
vendored
@@ -64,7 +64,7 @@ jobs:
|
|||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: ${{ env.NODE_VERSION }}
|
node-version: ${{ matrix.nodeVersion || env.NODE_VERSION }}
|
||||||
|
|
||||||
- name: Install Hugo
|
- name: Install Hugo
|
||||||
if: matrix.runner == 'macos-latest'
|
if: matrix.runner == 'macos-latest'
|
||||||
@@ -91,7 +91,8 @@ jobs:
|
|||||||
VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }}
|
VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }}
|
||||||
VERCEL_TEST_REGISTRATION_URL: ${{ secrets.VERCEL_TEST_REGISTRATION_URL }}
|
VERCEL_TEST_REGISTRATION_URL: ${{ secrets.VERCEL_TEST_REGISTRATION_URL }}
|
||||||
FORCE_COLOR: '1'
|
FORCE_COLOR: '1'
|
||||||
- name: 'Determing Turbo HIT or MISS'
|
- name: 'Determine Turbo HIT or MISS'
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
id: turbo-summary
|
id: turbo-summary
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
@@ -102,7 +103,7 @@ jobs:
|
|||||||
if: matrix.runner != 'windows-latest'
|
if: matrix.runner != 'windows-latest'
|
||||||
run: echo | openssl s_client -showcerts -servername 'api.vercel.com' -connect 76.76.21.21:443
|
run: echo | openssl s_client -showcerts -servername 'api.vercel.com' -connect 76.76.21.21:443
|
||||||
- name: 'Upload Test Report to Datadog'
|
- name: 'Upload Test Report to Datadog'
|
||||||
if: ${{ steps['turbo-summary'].outputs.misses != '0' }}
|
if: ${{ steps['turbo-summary'].outputs.misses != '0' && !cancelled() }}
|
||||||
run: 'npx @datadog/datadog-ci@2.18.1 junit upload --service vercel-cli .junit-reports'
|
run: 'npx @datadog/datadog-ci@2.18.1 junit upload --service vercel-cli .junit-reports'
|
||||||
env:
|
env:
|
||||||
DATADOG_API_KEY: ${{secrets.DATADOG_API_KEY_CLI}}
|
DATADOG_API_KEY: ${{secrets.DATADOG_API_KEY_CLI}}
|
||||||
|
|||||||
2
.github/workflows/update-remix-run-dev.yml
vendored
2
.github/workflows/update-remix-run-dev.yml
vendored
@@ -17,6 +17,8 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup node
|
- name: Setup node
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
- name: Enable corepack
|
- name: Enable corepack
|
||||||
run: corepack enable pnpm
|
run: corepack enable pnpm
|
||||||
- name: Update @remix-run/dev
|
- name: Update @remix-run/dev
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy angular', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('angular');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy astro', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('astro');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy blitzjs', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('blitzjs');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy brunch', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('brunch');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy create-react-app', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('create-react-app');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy docusaurus-2', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('docusaurus-2');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy docusaurus', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('docusaurus');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy dojo', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('dojo');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy eleventy', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('eleventy');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy ember', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('ember');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy gatsby', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('gatsby');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy gridsome', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('gridsome');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy hexo', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('hexo');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy hugo', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('hugo');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy hydrogen-2', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('hydrogen-2');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy hydrogen', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('hydrogen');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy ionic-angular', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('ionic-angular');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy ionic-react', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('ionic-react');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy jekyll', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('jekyll');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy middleman', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('middleman');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy nextjs', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('nextjs');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy node_modules', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('node_modules');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy nuxtjs', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('nuxtjs');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy parcel', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('parcel');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy polymer', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('polymer');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy preact', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('preact');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy redwoodjs', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('redwoodjs');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy remix', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('remix');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy saber', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('saber');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy sanity', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('sanity');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy sapper', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('sapper');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy scully', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('scully');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy solidstart', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('solidstart');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy stencil', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('stencil');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy storybook', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('storybook');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy svelte', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('svelte');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy sveltekit-1', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('sveltekit-1');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy sveltekit', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('sveltekit');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy umijs', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('umijs');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy vite', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('vite');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy vitepress', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('vitepress');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy vue', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('vue');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy vuepress', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('vuepress');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { deployExample } from '../test-utils';
|
import { deployExample } from '../test-utils';
|
||||||
it('should deploy', async () => {
|
it('[examples] should deploy zola', async () => {
|
||||||
await deployExample(__filename);
|
await deployExample('zola');
|
||||||
});
|
});
|
||||||
|
|
||||||
7992
examples/hydrogen/package-lock.json
generated
Normal file
7992
examples/hydrogen/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1
examples/nextjs/.gitignore
vendored
1
examples/nextjs/.gitignore
vendored
@@ -4,6 +4,7 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
/.pnp
|
/.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
|
.yarn/install-state.gz
|
||||||
|
|
||||||
# testing
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import './globals.css'
|
|
||||||
import type { Metadata } from 'next'
|
import type { Metadata } from 'next'
|
||||||
import { Inter } from 'next/font/google'
|
import { Inter } from 'next/font/google'
|
||||||
|
import './globals.css'
|
||||||
|
|
||||||
const inter = Inter({ subsets: ['latin'] })
|
const inter = Inter({ subsets: ['latin'] })
|
||||||
|
|
||||||
|
|||||||
1005
examples/nextjs/package-lock.json
generated
1005
examples/nextjs/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,17 +9,19 @@
|
|||||||
"lint": "next lint"
|
"lint": "next lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "20.6.3",
|
"react": "^18",
|
||||||
"@types/react": "18.2.22",
|
"react-dom": "^18",
|
||||||
"@types/react-dom": "18.2.7",
|
"next": "14.0.0"
|
||||||
"autoprefixer": "10.4.15",
|
},
|
||||||
"eslint": "8.49.0",
|
"devDependencies": {
|
||||||
"eslint-config-next": "13.5.2",
|
"typescript": "^5",
|
||||||
"next": "13.5.2",
|
"@types/node": "^20",
|
||||||
"postcss": "8.4.30",
|
"@types/react": "^18",
|
||||||
"react": "18.2.0",
|
"@types/react-dom": "^18",
|
||||||
"react-dom": "18.2.0",
|
"autoprefixer": "^10",
|
||||||
"tailwindcss": "3.3.3",
|
"postcss": "^8",
|
||||||
"typescript": "5.2.2"
|
"tailwindcss": "^3",
|
||||||
|
"eslint": "^8",
|
||||||
|
"eslint-config-next": "14.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
2
examples/package.json
vendored
2
examples/package.json
vendored
@@ -9,7 +9,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "27.4.1",
|
"@types/jest": "27.4.1",
|
||||||
"@vercel/frameworks": "2.0.2"
|
"@vercel/frameworks": "2.0.3"
|
||||||
},
|
},
|
||||||
"version": null
|
"version": null
|
||||||
}
|
}
|
||||||
|
|||||||
7906
examples/saber/package-lock.json
generated
Normal file
7906
examples/saber/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
31785
examples/sanity/package-lock.json
generated
Normal file
31785
examples/sanity/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,26 @@
|
|||||||
# @vercel-internals/types
|
# @vercel-internals/types
|
||||||
|
|
||||||
|
## 1.0.14
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`0861dc8fb`](https://github.com/vercel/vercel/commit/0861dc8fbcea1037626b00664a4b6c22f1b0a7ed)]:
|
||||||
|
- @vercel/build-utils@7.2.3
|
||||||
|
|
||||||
|
## 1.0.13
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`9e9fac019`](https://github.com/vercel/vercel/commit/9e9fac0191cb1428ac9e5479c3d5c8afd7b7d357)]:
|
||||||
|
- @vercel/routing-utils@3.1.0
|
||||||
|
|
||||||
|
## 1.0.12
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`2f5b0aeeb`](https://github.com/vercel/vercel/commit/2f5b0aeeb183ed3ea8cbc68cb3bc3c949c486ada)]:
|
||||||
|
- @vercel/build-utils@7.2.2
|
||||||
|
|
||||||
## 1.0.11
|
## 1.0.11
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "@vercel-internals/types",
|
"name": "@vercel-internals/types",
|
||||||
"version": "1.0.11",
|
"version": "1.0.14",
|
||||||
"types": "index.d.ts",
|
"types": "index.d.ts",
|
||||||
"main": "index.d.ts",
|
"main": "index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "14.14.31",
|
"@types/node": "14.14.31",
|
||||||
"@vercel-internals/constants": "1.0.4",
|
"@vercel-internals/constants": "1.0.4",
|
||||||
"@vercel/build-utils": "7.2.1",
|
"@vercel/build-utils": "7.2.3",
|
||||||
"@vercel/routing-utils": "3.0.0"
|
"@vercel/routing-utils": "3.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vercel-internals/tsconfig": "1.0.0",
|
"@vercel-internals/tsconfig": "1.0.0",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"@typescript-eslint/eslint-plugin": "5.21.0",
|
"@typescript-eslint/eslint-plugin": "5.21.0",
|
||||||
"@typescript-eslint/parser": "5.21.0",
|
"@typescript-eslint/parser": "5.21.0",
|
||||||
"@vercel/build-utils": "*",
|
"@vercel/build-utils": "*",
|
||||||
"@vercel/ncc": "0.24.0",
|
"@vercel/style-guide": "4.0.2",
|
||||||
"async-retry": "1.2.3",
|
"async-retry": "1.2.3",
|
||||||
"buffer-replace": "1.0.0",
|
"buffer-replace": "1.0.0",
|
||||||
"create-svelte": "2.0.1",
|
"create-svelte": "2.0.1",
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
"source-map-support": "0.5.12",
|
"source-map-support": "0.5.12",
|
||||||
"ts-eager": "2.0.2",
|
"ts-eager": "2.0.2",
|
||||||
"ts-jest": "29.1.0",
|
"ts-jest": "29.1.0",
|
||||||
"turbo": "1.10.14",
|
"turbo": "1.10.16",
|
||||||
"typescript": "4.9.5"
|
"typescript": "4.9.5"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -50,7 +50,8 @@
|
|||||||
"prepare": "husky install",
|
"prepare": "husky install",
|
||||||
"pack": "cd utils && node -r ts-eager/register ./pack.ts",
|
"pack": "cd utils && node -r ts-eager/register ./pack.ts",
|
||||||
"ci:version": "changeset version && pnpm install --no-frozen-lockfile",
|
"ci:version": "changeset version && pnpm install --no-frozen-lockfile",
|
||||||
"ci:publish": "pnpm publish -r && node utils/update-canary-tags.mjs && changeset tag"
|
"ci:publish": "pnpm publish -r && node utils/update-canary-tags.mjs && changeset tag",
|
||||||
|
"type-check": "turbo type-check --concurrency=12 --output-logs=errors-only --summarize --continue"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"./{*,{api,packages,test,utils}/**/*}.{js,ts}": [
|
"./{*,{api,packages,test,utils}/**/*}.{js,ts}": [
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
# @vercel/build-utils
|
# @vercel/build-utils
|
||||||
|
|
||||||
|
## 7.2.3
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Add experimental flag to allow Node.js v20 ([#10802](https://github.com/vercel/vercel/pull/10802))
|
||||||
|
|
||||||
|
## 7.2.2
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [cli] Update bun detection and add tests for projects with both bunlock binary and yarn.lock text files ([#10583](https://github.com/vercel/vercel/pull/10583))
|
||||||
|
|
||||||
## 7.2.1
|
## 7.2.1
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vercel/build-utils",
|
"name": "@vercel/build-utils",
|
||||||
"version": "7.2.1",
|
"version": "7.2.3",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"types": "./dist/index.d.js",
|
"types": "./dist/index.d.js",
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
"build": "node build.mjs",
|
"build": "node build.mjs",
|
||||||
"test": "jest --reporters=default --reporters=jest-junit --env node --verbose --runInBand --bail",
|
"test": "jest --reporters=default --reporters=jest-junit --env node --verbose --runInBand --bail",
|
||||||
"test-unit": "pnpm test test/unit.*test.*",
|
"test-unit": "pnpm test test/unit.*test.*",
|
||||||
"test-e2e": "pnpm test test/integration.test.ts"
|
"test-e2e": "pnpm test test/integration.test.ts",
|
||||||
|
"type-check": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@iarna/toml": "2.2.3",
|
"@iarna/toml": "2.2.3",
|
||||||
@@ -32,8 +33,7 @@
|
|||||||
"@types/node-fetch": "^2.1.6",
|
"@types/node-fetch": "^2.1.6",
|
||||||
"@types/semver": "6.0.0",
|
"@types/semver": "6.0.0",
|
||||||
"@types/yazl": "2.4.2",
|
"@types/yazl": "2.4.2",
|
||||||
"@vercel/error-utils": "2.0.1",
|
"@vercel/error-utils": "2.0.2",
|
||||||
"@vercel/ncc": "0.24.0",
|
|
||||||
"aggregate-error": "3.0.1",
|
"aggregate-error": "3.0.1",
|
||||||
"async-retry": "1.2.3",
|
"async-retry": "1.2.3",
|
||||||
"async-sema": "2.1.4",
|
"async-sema": "2.1.4",
|
||||||
|
|||||||
@@ -37,6 +37,12 @@ function getOptions() {
|
|||||||
discontinueDate: new Date('2020-01-06'),
|
discontinueDate: new Date('2020-01-06'),
|
||||||
},
|
},
|
||||||
] as const;
|
] as const;
|
||||||
|
if (process.env.VERCEL_ALLOW_NODEJS20 === '1') {
|
||||||
|
return [
|
||||||
|
{ major: 20, range: '20.x', runtime: 'nodejs20.x' },
|
||||||
|
...options,
|
||||||
|
] as const;
|
||||||
|
}
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -311,8 +311,13 @@ export async function scanParentDirs(
|
|||||||
bunLockPath ? fs.readFile(bunLockPath, 'utf8') : null,
|
bunLockPath ? fs.readFile(bunLockPath, 'utf8') : null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Priority order is Yarn > pnpm > npm > bun
|
// Priority order is bun with yarn lock > yarn > pnpm > npm > bun
|
||||||
if (hasYarnLock) {
|
if (bunLockBin && hasYarnLock) {
|
||||||
|
cliType = 'bun';
|
||||||
|
lockfilePath = bunLockPath;
|
||||||
|
// TODO: read "bun-lockfile-format-v0"
|
||||||
|
lockfileVersion = 0;
|
||||||
|
} else if (hasYarnLock) {
|
||||||
cliType = 'yarn';
|
cliType = 'yarn';
|
||||||
lockfilePath = yarnLockPath;
|
lockfilePath = yarnLockPath;
|
||||||
} else if (pnpmLockYaml) {
|
} else if (pnpmLockYaml) {
|
||||||
|
|||||||
2
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/.gitignore
vendored
Normal file
2
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.vercel
|
||||||
|
public
|
||||||
8
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/build.js
vendored
Normal file
8
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/build.js
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { mkdir, rm, writeFile } from 'node:fs/promises'
|
||||||
|
import { say } from 'cowsay'
|
||||||
|
|
||||||
|
const text = say({ text: `bun version: ${process.versions.bun}` })
|
||||||
|
const content = say({ text })
|
||||||
|
await rm('./public', { recursive: true, force: true })
|
||||||
|
await mkdir('./public', { recursive: true })
|
||||||
|
await writeFile('./public/index.txt', content)
|
||||||
BIN
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/bun.lockb
vendored
Executable file
BIN
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/bun.lockb
vendored
Executable file
Binary file not shown.
9
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/package.json
vendored
Normal file
9
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/package.json
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"build": "bun build.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cowsay": "1.5.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
8
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/probes.json
vendored
Normal file
8
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/probes.json
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"probes": [
|
||||||
|
{
|
||||||
|
"path": "/",
|
||||||
|
"mustContain": "bun version: 1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
221
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/yarn.lock
vendored
Normal file
221
packages/build-utils/test/fixtures/31-bun-v1-with-yarn-lock/yarn.lock
vendored
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
# bun ./bun.lockb --hash: CD5862D9DB80873E-24483eaa80ed0cc4-641E4430BAAAECB3-abebd38edad3b1b9
|
||||||
|
|
||||||
|
|
||||||
|
ansi-regex@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz"
|
||||||
|
integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==
|
||||||
|
|
||||||
|
ansi-regex@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
|
||||||
|
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
||||||
|
|
||||||
|
ansi-styles@^4.0.0:
|
||||||
|
version "4.3.0"
|
||||||
|
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
|
||||||
|
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||||
|
dependencies:
|
||||||
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
|
camelcase@^5.0.0:
|
||||||
|
version "5.3.1"
|
||||||
|
resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
|
||||||
|
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||||
|
|
||||||
|
cliui@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz"
|
||||||
|
integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
|
||||||
|
dependencies:
|
||||||
|
string-width "^4.2.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
wrap-ansi "^6.2.0"
|
||||||
|
|
||||||
|
color-convert@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
|
||||||
|
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
||||||
|
dependencies:
|
||||||
|
color-name "~1.1.4"
|
||||||
|
|
||||||
|
color-name@~1.1.4:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
|
||||||
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
|
cowsay@1.5.0:
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.npmjs.org/cowsay/-/cowsay-1.5.0.tgz"
|
||||||
|
integrity sha512-8Ipzr54Z8zROr/62C8f0PdhQcDusS05gKTS87xxdji8VbWefWly0k8BwGK7+VqamOrkv3eGsCkPtvlHzrhWsCA==
|
||||||
|
dependencies:
|
||||||
|
get-stdin "8.0.0"
|
||||||
|
string-width "~2.1.1"
|
||||||
|
strip-final-newline "2.0.0"
|
||||||
|
yargs "15.4.1"
|
||||||
|
|
||||||
|
decamelize@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
|
||||||
|
integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
|
||||||
|
|
||||||
|
emoji-regex@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
|
||||||
|
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||||
|
|
||||||
|
find-up@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
|
||||||
|
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
|
||||||
|
dependencies:
|
||||||
|
locate-path "^5.0.0"
|
||||||
|
path-exists "^4.0.0"
|
||||||
|
|
||||||
|
get-caller-file@^2.0.1:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
|
||||||
|
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||||
|
|
||||||
|
get-stdin@8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz"
|
||||||
|
integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz"
|
||||||
|
integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
|
||||||
|
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||||
|
|
||||||
|
locate-path@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
|
||||||
|
integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
|
||||||
|
dependencies:
|
||||||
|
p-locate "^4.1.0"
|
||||||
|
|
||||||
|
p-limit@^2.2.0:
|
||||||
|
version "2.3.0"
|
||||||
|
resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
|
||||||
|
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
|
||||||
|
dependencies:
|
||||||
|
p-try "^2.0.0"
|
||||||
|
|
||||||
|
p-locate@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
|
||||||
|
integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
|
||||||
|
dependencies:
|
||||||
|
p-limit "^2.2.0"
|
||||||
|
|
||||||
|
p-try@^2.0.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
|
||||||
|
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||||
|
|
||||||
|
path-exists@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
|
||||||
|
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
|
||||||
|
|
||||||
|
require-directory@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
|
||||||
|
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
|
||||||
|
|
||||||
|
require-main-filename@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"
|
||||||
|
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
|
||||||
|
|
||||||
|
set-blocking@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
|
||||||
|
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
|
||||||
|
|
||||||
|
string-width@~2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"
|
||||||
|
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
|
||||||
|
dependencies:
|
||||||
|
is-fullwidth-code-point "^2.0.0"
|
||||||
|
strip-ansi "^4.0.0"
|
||||||
|
|
||||||
|
string-width@^4.1.0, string-width@^4.2.0:
|
||||||
|
version "4.2.3"
|
||||||
|
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
|
||||||
|
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||||
|
dependencies:
|
||||||
|
emoji-regex "^8.0.0"
|
||||||
|
is-fullwidth-code-point "^3.0.0"
|
||||||
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
|
strip-ansi@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"
|
||||||
|
integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^3.0.0"
|
||||||
|
|
||||||
|
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
||||||
|
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^5.0.1"
|
||||||
|
|
||||||
|
strip-final-newline@2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
|
||||||
|
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
|
||||||
|
|
||||||
|
which-module@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz"
|
||||||
|
integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
|
||||||
|
|
||||||
|
wrap-ansi@^6.2.0:
|
||||||
|
version "6.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz"
|
||||||
|
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.0.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
|
y18n@^4.0.0:
|
||||||
|
version "4.0.3"
|
||||||
|
resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz"
|
||||||
|
integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
|
||||||
|
|
||||||
|
yargs@15.4.1:
|
||||||
|
version "15.4.1"
|
||||||
|
resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"
|
||||||
|
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
|
||||||
|
dependencies:
|
||||||
|
cliui "^6.0.0"
|
||||||
|
decamelize "^1.2.0"
|
||||||
|
find-up "^4.1.0"
|
||||||
|
get-caller-file "^2.0.1"
|
||||||
|
require-directory "^2.1.1"
|
||||||
|
require-main-filename "^2.0.0"
|
||||||
|
set-blocking "^2.0.0"
|
||||||
|
string-width "^4.2.0"
|
||||||
|
which-module "^2.0.0"
|
||||||
|
y18n "^4.0.0"
|
||||||
|
yargs-parser "^18.1.2"
|
||||||
|
|
||||||
|
yargs-parser@^18.1.2:
|
||||||
|
version "18.1.3"
|
||||||
|
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"
|
||||||
|
integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
|
||||||
|
dependencies:
|
||||||
|
camelcase "^5.0.0"
|
||||||
|
decamelize "^1.2.0"
|
||||||
3
packages/build-utils/test/tsconfig.json
vendored
3
packages/build-utils/test/tsconfig.json
vendored
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"sourceMap": true
|
||||||
|
},
|
||||||
"extends": "../tsconfig.json",
|
"extends": "../tsconfig.json",
|
||||||
"include": ["*.test.ts"]
|
"include": ["*.test.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ describe('Test `readConfigFile()`', () => {
|
|||||||
it('should return parsed object when file exists', async () => {
|
it('should return parsed object when file exists', async () => {
|
||||||
expect(await readConfigFile(tsconfig)).toMatchObject({
|
expect(await readConfigFile(tsconfig)).toMatchObject({
|
||||||
compilerOptions: {
|
compilerOptions: {
|
||||||
strict: true,
|
outDir: './dist',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
expect(logMessages).toEqual([]);
|
expect(logMessages).toEqual([]);
|
||||||
@@ -39,7 +39,7 @@ describe('Test `readConfigFile()`', () => {
|
|||||||
const files = [doesnotexist, tsconfig];
|
const files = [doesnotexist, tsconfig];
|
||||||
expect(await readConfigFile(files)).toMatchObject({
|
expect(await readConfigFile(files)).toMatchObject({
|
||||||
compilerOptions: {
|
compilerOptions: {
|
||||||
strict: true,
|
outDir: './dist',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
expect(logMessages).toEqual([]);
|
expect(logMessages).toEqual([]);
|
||||||
@@ -63,7 +63,7 @@ describe('Test `readConfigFile()`', () => {
|
|||||||
await writeFile(invalid, 'borked');
|
await writeFile(invalid, 'borked');
|
||||||
expect(await readConfigFile([invalid, tsconfig])).toMatchObject({
|
expect(await readConfigFile([invalid, tsconfig])).toMatchObject({
|
||||||
compilerOptions: {
|
compilerOptions: {
|
||||||
strict: true,
|
outDir: './dist',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
26
packages/build-utils/test/unit.test.ts
vendored
26
packages/build-utils/test/unit.test.ts
vendored
@@ -313,6 +313,23 @@ it('should warn for deprecated versions, soon to be discontinued', async () => {
|
|||||||
global.Date.now = realDateNow;
|
global.Date.now = realDateNow;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should only allow nodejs20.x when env var is set', async () => {
|
||||||
|
try {
|
||||||
|
expect(getLatestNodeVersion()).toHaveProperty('major', 18);
|
||||||
|
await expect(getSupportedNodeVersion('20.x')).rejects.toThrow();
|
||||||
|
|
||||||
|
process.env.VERCEL_ALLOW_NODEJS20 = '1';
|
||||||
|
|
||||||
|
expect(getLatestNodeVersion()).toHaveProperty('major', 20);
|
||||||
|
expect(await getSupportedNodeVersion('20.x')).toHaveProperty('major', 20);
|
||||||
|
expect(await getSupportedNodeVersion('20')).toHaveProperty('major', 20);
|
||||||
|
expect(await getSupportedNodeVersion('20.1.0')).toHaveProperty('major', 20);
|
||||||
|
expect(await getSupportedNodeVersion('>=16')).toHaveProperty('major', 20);
|
||||||
|
} finally {
|
||||||
|
delete process.env.VERCEL_ALLOW_NODEJS20;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it('should support initialHeaders and initialStatus correctly', async () => {
|
it('should support initialHeaders and initialStatus correctly', async () => {
|
||||||
new Prerender({
|
new Prerender({
|
||||||
expiration: 1,
|
expiration: 1,
|
||||||
@@ -541,6 +558,15 @@ it(
|
|||||||
);
|
);
|
||||||
|
|
||||||
it('should return cliType bun and correct lock file for bun v1', async () => {
|
it('should return cliType bun and correct lock file for bun v1', async () => {
|
||||||
|
const fixture = path.join(__dirname, 'fixtures', '31-bun-v1-with-yarn-lock');
|
||||||
|
const result = await scanParentDirs(fixture);
|
||||||
|
expect(result.cliType).toEqual('bun');
|
||||||
|
expect(result.lockfileVersion).toEqual(0);
|
||||||
|
expect(result.lockfilePath).toEqual(path.join(fixture, 'bun.lockb'));
|
||||||
|
expect(result.packageJsonPath).toEqual(path.join(fixture, 'package.json'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return cliType bun and correct lock file for bun v1 with yarn.lock file', async () => {
|
||||||
const fixture = path.join(__dirname, 'fixtures', '30-bun-v1');
|
const fixture = path.join(__dirname, 'fixtures', '30-bun-v1');
|
||||||
const result = await scanParentDirs(fixture);
|
const result = await scanParentDirs(fixture);
|
||||||
expect(result.cliType).toEqual('bun');
|
expect(result.cliType).toEqual('bun');
|
||||||
|
|||||||
@@ -1,21 +1,9 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"declaration": true,
|
|
||||||
"emitDeclarationOnly": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"lib": ["ES2021"],
|
|
||||||
"module": "commonjs",
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"noEmitOnError": true,
|
|
||||||
"noFallthroughCasesInSwitch": true,
|
|
||||||
"noImplicitReturns": true,
|
|
||||||
"noUnusedLocals": true,
|
|
||||||
"noUnusedParameters": true,
|
|
||||||
"outDir": "./dist",
|
"outDir": "./dist",
|
||||||
"types": ["node", "jest"],
|
"types": ["node", "jest"]
|
||||||
"strict": true,
|
|
||||||
"target": "ES2021"
|
|
||||||
},
|
},
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
"include": ["src/**/*"],
|
"include": ["src/**/*"],
|
||||||
"exclude": ["node_modules"]
|
"exclude": ["node_modules"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,77 @@
|
|||||||
# vercel
|
# vercel
|
||||||
|
|
||||||
|
## 32.5.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Debug log load user exceptions ([#10773](https://github.com/vercel/vercel/pull/10773))
|
||||||
|
|
||||||
|
- bump: edge-runtime ([#10712](https://github.com/vercel/vercel/pull/10712))
|
||||||
|
|
||||||
|
- Updated dependencies [[`fc90a3dc0`](https://github.com/vercel/vercel/commit/fc90a3dc0bd998453f6527c03d211c35bb0d5770), [`644b8a52c`](https://github.com/vercel/vercel/commit/644b8a52cb2cc8f05e215e2230f95f902cdf8ae8), [`0861dc8fb`](https://github.com/vercel/vercel/commit/0861dc8fbcea1037626b00664a4b6c22f1b0a7ed), [`33cc8e0ac`](https://github.com/vercel/vercel/commit/33cc8e0acf1b3466d50d45b2e5bbe66b89a87c14), [`f5296c3c0`](https://github.com/vercel/vercel/commit/f5296c3c06e620a39c5f88287ac94e58703bdaac), [`d9065c210`](https://github.com/vercel/vercel/commit/d9065c2102223e9cdb5b22df14db41c363cf7828)]:
|
||||||
|
- @vercel/next@4.0.12
|
||||||
|
- @vercel/node@3.0.8
|
||||||
|
- @vercel/build-utils@7.2.3
|
||||||
|
- @vercel/remix-builder@2.0.11
|
||||||
|
- @vercel/static-build@2.0.10
|
||||||
|
|
||||||
|
## 32.5.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- Indicates whether @vercel/speed-insights or @vercel/analytics are used ([#10623](https://github.com/vercel/vercel/pull/10623))
|
||||||
|
|
||||||
|
- [cli] update env var validation rule to allow name start with underscore ([#10697](https://github.com/vercel/vercel/pull/10697))
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`da300030c`](https://github.com/vercel/vercel/commit/da300030c999b3555c608a321c9d0a4d36923a5a), [`de84743e1`](https://github.com/vercel/vercel/commit/de84743e10d4c9701d409355c0fe057f35e6e435), [`913608de4`](https://github.com/vercel/vercel/commit/913608de4dd4e37557533d732ca8449a5737d4a6), [`7fa08088e`](https://github.com/vercel/vercel/commit/7fa08088ea0d5df6955ea4af7f08513cf4027bb3)]:
|
||||||
|
- @vercel/next@4.0.11
|
||||||
|
- @vercel/python@4.1.0
|
||||||
|
- @vercel/remix-builder@2.0.10
|
||||||
|
- @vercel/redwood@2.0.5
|
||||||
|
- @vercel/static-build@2.0.9
|
||||||
|
|
||||||
|
## 32.4.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`c523a755f`](https://github.com/vercel/vercel/commit/c523a755f8e4bc41f7c353ebc0b939c21703df00), [`58215906f`](https://github.com/vercel/vercel/commit/58215906f9ee28da3a7f2f3f4aeb862ab53bf55e)]:
|
||||||
|
- @vercel/next@4.0.10
|
||||||
|
|
||||||
|
## 32.4.0
|
||||||
|
|
||||||
|
### Minor Changes
|
||||||
|
|
||||||
|
- Restore unsetting teamId for non-team accounts ([#10612](https://github.com/vercel/vercel/pull/10612))
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- remove unused source map pkg ([#10577](https://github.com/vercel/vercel/pull/10577))
|
||||||
|
|
||||||
|
- disable source map for prod build ([#10575](https://github.com/vercel/vercel/pull/10575))
|
||||||
|
|
||||||
|
- Better rendering upon authentication error in `vc cert ls` ([#10551](https://github.com/vercel/vercel/pull/10551))
|
||||||
|
|
||||||
|
- Updated dependencies [[`e9026c7a6`](https://github.com/vercel/vercel/commit/e9026c7a692937122e60e73b91100cf7009e022d), [`ea5bc8806`](https://github.com/vercel/vercel/commit/ea5bc8806276abf5ba14bdb4a966267497e5d14d), [`a4996e1c5`](https://github.com/vercel/vercel/commit/a4996e1c5a7e6986d5410b662014dc584c0f7c54), [`a18ed98f2`](https://github.com/vercel/vercel/commit/a18ed98f2df78fe1256410ea8676686564ed9b35), [`2f5b0aeeb`](https://github.com/vercel/vercel/commit/2f5b0aeeb183ed3ea8cbc68cb3bc3c949c486ada), [`09f1bbfa4`](https://github.com/vercel/vercel/commit/09f1bbfa41a87cf0063a3fb3022b7531d03862b5), [`ce7e82fa7`](https://github.com/vercel/vercel/commit/ce7e82fa7aa6cec5f5d7b4953353b297b7ad1694)]:
|
||||||
|
- @vercel/next@4.0.9
|
||||||
|
- @vercel/go@3.0.3
|
||||||
|
- @vercel/build-utils@7.2.2
|
||||||
|
- @vercel/node@3.0.7
|
||||||
|
- @vercel/redwood@2.0.4
|
||||||
|
- @vercel/remix-builder@2.0.9
|
||||||
|
- @vercel/static-build@2.0.8
|
||||||
|
|
||||||
|
## 32.3.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Use "esbuild" to build CLI ([#10555](https://github.com/vercel/vercel/pull/10555))
|
||||||
|
|
||||||
|
- Updated dependencies [[`9f63ca60a`](https://github.com/vercel/vercel/commit/9f63ca60ad914af0f7ba18c9bbe1656eeea68a0a), [`e3f9faf51`](https://github.com/vercel/vercel/commit/e3f9faf513bd97900d8966f2f1116fc3ca07221b)]:
|
||||||
|
- @vercel/next@4.0.8
|
||||||
|
- @vercel/remix-builder@2.0.8
|
||||||
|
|
||||||
## 32.3.0
|
## 32.3.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vercel",
|
"name": "vercel",
|
||||||
"version": "32.3.0",
|
"version": "32.5.1",
|
||||||
"preferGlobal": true,
|
"preferGlobal": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"description": "The command-line interface for Vercel",
|
"description": "The command-line interface for Vercel",
|
||||||
@@ -16,35 +16,37 @@
|
|||||||
"test-e2e": "rimraf test/fixtures/integration && pnpm test test/integration-1.test.ts test/integration-2.test.ts test/integration-3.test.ts",
|
"test-e2e": "rimraf test/fixtures/integration && pnpm test test/integration-1.test.ts test/integration-2.test.ts test/integration-3.test.ts",
|
||||||
"test-dev": "pnpm test test/dev/",
|
"test-dev": "pnpm test test/dev/",
|
||||||
"coverage": "codecov",
|
"coverage": "codecov",
|
||||||
"build": "ts-node ./scripts/build.ts",
|
"build": "node scripts/build.mjs",
|
||||||
"dev": "ts-node ./src/index.ts"
|
"dev": "ts-node ./src/index.ts",
|
||||||
|
"type-check": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vc": "./dist/index.js",
|
"vc": "./dist/index.js",
|
||||||
"vercel": "./dist/index.js"
|
"vercel": "./dist/index.js"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist"
|
||||||
"scripts/preinstall.js"
|
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 16"
|
"node": ">= 16"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vercel/build-utils": "7.2.1",
|
"@vercel/build-utils": "7.2.3",
|
||||||
"@vercel/go": "3.0.2",
|
"@vercel/fun": "1.1.0",
|
||||||
|
"@vercel/go": "3.0.3",
|
||||||
"@vercel/hydrogen": "1.0.1",
|
"@vercel/hydrogen": "1.0.1",
|
||||||
"@vercel/next": "4.0.7",
|
"@vercel/next": "4.0.12",
|
||||||
"@vercel/node": "3.0.6",
|
"@vercel/node": "3.0.8",
|
||||||
"@vercel/python": "4.0.2",
|
"@vercel/python": "4.1.0",
|
||||||
"@vercel/redwood": "2.0.3",
|
"@vercel/redwood": "2.0.5",
|
||||||
"@vercel/remix-builder": "2.0.7",
|
"@vercel/remix-builder": "2.0.11",
|
||||||
"@vercel/ruby": "2.0.2",
|
"@vercel/ruby": "2.0.2",
|
||||||
"@vercel/static-build": "2.0.7"
|
"@vercel/static-build": "2.0.10",
|
||||||
|
"chokidar": "3.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@alex_neo/jest-expect-message": "1.0.5",
|
"@alex_neo/jest-expect-message": "1.0.5",
|
||||||
"@edge-runtime/node-utils": "2.2.1",
|
"@edge-runtime/node-utils": "2.2.2",
|
||||||
"@next/env": "11.1.2",
|
"@next/env": "11.1.2",
|
||||||
"@sentry/node": "5.5.0",
|
"@sentry/node": "5.5.0",
|
||||||
"@sindresorhus/slugify": "0.11.0",
|
"@sindresorhus/slugify": "0.11.0",
|
||||||
@@ -86,15 +88,12 @@
|
|||||||
"@types/yauzl-promise": "2.1.0",
|
"@types/yauzl-promise": "2.1.0",
|
||||||
"@vercel-internals/constants": "1.0.4",
|
"@vercel-internals/constants": "1.0.4",
|
||||||
"@vercel-internals/get-package-json": "1.0.0",
|
"@vercel-internals/get-package-json": "1.0.0",
|
||||||
"@vercel-internals/types": "1.0.11",
|
"@vercel-internals/types": "1.0.14",
|
||||||
"@vercel/client": "13.0.4",
|
"@vercel/client": "13.0.7",
|
||||||
"@vercel/error-utils": "2.0.1",
|
"@vercel/error-utils": "2.0.2",
|
||||||
"@vercel/frameworks": "2.0.2",
|
"@vercel/frameworks": "2.0.3",
|
||||||
"@vercel/fs-detectors": "5.1.0",
|
"@vercel/fs-detectors": "5.1.3",
|
||||||
"@vercel/fun": "1.1.0",
|
"@vercel/routing-utils": "3.1.0",
|
||||||
"@vercel/ncc": "0.24.0",
|
|
||||||
"@vercel/routing-utils": "3.0.0",
|
|
||||||
"@zeit/source-map-support": "0.6.2",
|
|
||||||
"ajv": "6.12.2",
|
"ajv": "6.12.2",
|
||||||
"alpha-sort": "2.0.1",
|
"alpha-sort": "2.0.1",
|
||||||
"ansi-escapes": "4.3.2",
|
"ansi-escapes": "4.3.2",
|
||||||
@@ -106,10 +105,8 @@
|
|||||||
"bytes": "3.0.0",
|
"bytes": "3.0.0",
|
||||||
"chalk": "4.1.0",
|
"chalk": "4.1.0",
|
||||||
"chance": "1.1.7",
|
"chance": "1.1.7",
|
||||||
"chokidar": "3.3.1",
|
|
||||||
"cli-table3": "0.6.3",
|
"cli-table3": "0.6.3",
|
||||||
"codecov": "3.8.2",
|
"codecov": "3.8.2",
|
||||||
"cpy": "7.2.0",
|
|
||||||
"date-fns": "1.29.0",
|
"date-fns": "1.29.0",
|
||||||
"debug": "3.1.0",
|
"debug": "3.1.0",
|
||||||
"dot": "1.1.3",
|
"dot": "1.1.3",
|
||||||
@@ -161,7 +158,6 @@
|
|||||||
"strip-ansi": "6.0.1",
|
"strip-ansi": "6.0.1",
|
||||||
"supports-hyperlinks": "3.0.0",
|
"supports-hyperlinks": "3.0.0",
|
||||||
"tar-fs": "1.16.3",
|
"tar-fs": "1.16.3",
|
||||||
"test-listen": "1.1.0",
|
|
||||||
"text-table": "0.2.0",
|
"text-table": "0.2.0",
|
||||||
"title": "3.4.1",
|
"title": "3.4.1",
|
||||||
"tmp-promise": "1.0.3",
|
"tmp-promise": "1.0.3",
|
||||||
|
|||||||
54
packages/cli/scripts/build.mjs
Normal file
54
packages/cli/scripts/build.mjs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import { join } from 'node:path';
|
||||||
|
import { copyFileSync, readFileSync, writeFileSync } from 'node:fs';
|
||||||
|
import { esbuild } from '../../../utils/build.mjs';
|
||||||
|
import { compileDevTemplates } from './compile-templates.mjs';
|
||||||
|
|
||||||
|
const repoRoot = new URL('../', import.meta.url);
|
||||||
|
|
||||||
|
function createConstants() {
|
||||||
|
const filename = new URL('src/util/constants.ts', repoRoot);
|
||||||
|
const contents = `// This file is auto-generated
|
||||||
|
export const GA_TRACKING_ID: string | undefined = ${envToString(
|
||||||
|
'GA_TRACKING_ID'
|
||||||
|
)};
|
||||||
|
export const SENTRY_DSN: string | undefined = ${envToString('SENTRY_DSN')};
|
||||||
|
`;
|
||||||
|
writeFileSync(filename, contents, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
|
function envToString(key) {
|
||||||
|
const value = process.env[key];
|
||||||
|
if (value) {
|
||||||
|
return JSON.stringify(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the secrets from GitHub Actions and generate a file.
|
||||||
|
// During local development, these secrets will be empty.
|
||||||
|
createConstants();
|
||||||
|
|
||||||
|
// Compile the `doT.js` template files for `vercel dev`
|
||||||
|
await compileDevTemplates();
|
||||||
|
|
||||||
|
const pkgPath = join(process.cwd(), 'package.json');
|
||||||
|
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
||||||
|
const externals = Object.keys(pkg.dependencies || {});
|
||||||
|
await esbuild({
|
||||||
|
bundle: true,
|
||||||
|
external: externals,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Copy a few static files into `dist`
|
||||||
|
const distRoot = new URL('dist/', repoRoot);
|
||||||
|
copyFileSync(
|
||||||
|
new URL('src/util/projects/VERCEL_DIR_README.txt', repoRoot),
|
||||||
|
new URL('VERCEL_DIR_README.txt', distRoot)
|
||||||
|
);
|
||||||
|
copyFileSync(
|
||||||
|
new URL('src/util/dev/builder-worker.js', repoRoot),
|
||||||
|
new URL('builder-worker.js', distRoot)
|
||||||
|
);
|
||||||
|
copyFileSync(
|
||||||
|
new URL('src/util/get-latest-version/get-latest-worker.js', repoRoot),
|
||||||
|
new URL('get-latest-worker.js', distRoot)
|
||||||
|
);
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
import cpy from 'cpy';
|
|
||||||
import execa from 'execa';
|
|
||||||
import { join } from 'path';
|
|
||||||
import { remove, readJSON, writeFile } from 'fs-extra';
|
|
||||||
|
|
||||||
const dirRoot = join(__dirname, '..');
|
|
||||||
const distRoot = join(dirRoot, 'dist');
|
|
||||||
|
|
||||||
async function createConstants() {
|
|
||||||
console.log('Creating constants.ts');
|
|
||||||
const filename = join(dirRoot, 'src/util/constants.ts');
|
|
||||||
const contents = `// This file is auto-generated
|
|
||||||
export const GA_TRACKING_ID: string | undefined = ${envToString(
|
|
||||||
'GA_TRACKING_ID'
|
|
||||||
)};
|
|
||||||
export const SENTRY_DSN: string | undefined = ${envToString('SENTRY_DSN')};
|
|
||||||
`;
|
|
||||||
await writeFile(filename, contents, 'utf8');
|
|
||||||
}
|
|
||||||
|
|
||||||
function envToString(key: string) {
|
|
||||||
const value = process.env[key];
|
|
||||||
if (!value) {
|
|
||||||
console.log(`- Constant ${key} is not assigned`);
|
|
||||||
}
|
|
||||||
return JSON.stringify(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
// Read the secrets from GitHub Actions and generate a file.
|
|
||||||
// During local development, these secrets will be empty.
|
|
||||||
await createConstants();
|
|
||||||
|
|
||||||
// `vercel dev` uses chokidar to watch the filesystem, but opts-out of the
|
|
||||||
// `fsevents` feature using `useFsEvents: false`, so delete the module here so
|
|
||||||
// that it is not compiled by ncc, which makes the npm package size larger
|
|
||||||
// than necessary.
|
|
||||||
await remove(join(dirRoot, '../../node_modules/fsevents'));
|
|
||||||
|
|
||||||
// Compile the `doT.js` template files for `vercel dev`
|
|
||||||
console.log();
|
|
||||||
await execa(process.execPath, [join(__dirname, 'compile-templates.js')], {
|
|
||||||
stdio: 'inherit',
|
|
||||||
});
|
|
||||||
|
|
||||||
const pkg = await readJSON(join(dirRoot, 'package.json'));
|
|
||||||
const dependencies = Object.keys(pkg?.dependencies ?? {});
|
|
||||||
// Do the initial `ncc` build
|
|
||||||
console.log('Dependencies:', dependencies);
|
|
||||||
const externs: Array<string> = [];
|
|
||||||
for (const dep of dependencies) {
|
|
||||||
externs.push('--external', dep);
|
|
||||||
}
|
|
||||||
const args = ['ncc', 'build', 'src/index.ts', ...externs];
|
|
||||||
await execa('pnpm', args, { stdio: 'inherit', cwd: dirRoot });
|
|
||||||
|
|
||||||
// `ncc` has some issues with `@vercel/fun`'s runtime files:
|
|
||||||
// - Executable bits on the `bootstrap` files appear to be lost:
|
|
||||||
// https://github.com/vercel/ncc/pull/182
|
|
||||||
// - The `bootstrap.js` asset does not get copied into the output dir:
|
|
||||||
// https://github.com/vercel/ncc/issues/278
|
|
||||||
//
|
|
||||||
// Aside from those issues, all the same files from the `runtimes` directory
|
|
||||||
// should be copied into the output runtimes dir, specifically the `index.js`
|
|
||||||
// files (correctly) do not get copied into the output bundle because they
|
|
||||||
// get compiled into the final ncc bundle file, however, we want them to be
|
|
||||||
// present in the npm package because the contents of those files are involved
|
|
||||||
// with `fun`'s cache invalidation mechanism and they need to be shasum'd.
|
|
||||||
const runtimes = join(dirRoot, 'node_modules/@vercel/fun/dist/src/runtimes');
|
|
||||||
await cpy('**/*', join(distRoot, 'runtimes'), {
|
|
||||||
parents: true,
|
|
||||||
cwd: runtimes,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Band-aid to bundle stuff that `ncc` neglects to bundle
|
|
||||||
await cpy(join(dirRoot, 'src/util/projects/VERCEL_DIR_README.txt'), distRoot);
|
|
||||||
await cpy(join(dirRoot, 'src/util/dev/builder-worker.js'), distRoot);
|
|
||||||
await cpy(
|
|
||||||
join(dirRoot, 'src/util/get-latest-version/get-latest-worker.js'),
|
|
||||||
distRoot
|
|
||||||
);
|
|
||||||
|
|
||||||
console.log('Finished building Vercel CLI');
|
|
||||||
}
|
|
||||||
|
|
||||||
process.on('unhandledRejection', (reason: any, promise: Promise<any>) => {
|
|
||||||
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
process.on('uncaughtException', err => {
|
|
||||||
console.error('Uncaught Exception:');
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
main().catch(err => {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
const execa = require('execa');
|
|
||||||
const { join } = require('path');
|
|
||||||
const { readFile, writeFile, readdir, remove } = require('fs-extra');
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const dirRoot = join(__dirname, '..');
|
|
||||||
|
|
||||||
// Compile the `doT.js` template files for `vercel dev`
|
|
||||||
const templatesDir = join(dirRoot, 'src/util/dev/templates');
|
|
||||||
const dotPacker = join(dirRoot, '../../node_modules/dot/bin/dot-packer');
|
|
||||||
await execa(process.execPath, [dotPacker], {
|
|
||||||
cwd: templatesDir,
|
|
||||||
stdio: 'inherit',
|
|
||||||
});
|
|
||||||
|
|
||||||
const files = await readdir(templatesDir);
|
|
||||||
const compiledFiles = files.filter(f => f.endsWith('.js'));
|
|
||||||
|
|
||||||
// Prettier
|
|
||||||
console.log('\nMaking the compiled template functions prettier...');
|
|
||||||
const prettier = join(dirRoot, '../../node_modules/prettier/bin-prettier.js');
|
|
||||||
await execa(
|
|
||||||
process.execPath,
|
|
||||||
[prettier, '--write', '--single-quote', ...compiledFiles],
|
|
||||||
{
|
|
||||||
cwd: templatesDir,
|
|
||||||
stdio: 'inherit',
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
console.log('\nConverting template functions to TypeScript');
|
|
||||||
for (const file of compiledFiles) {
|
|
||||||
const start = Date.now();
|
|
||||||
const fnPath = join(templatesDir, file);
|
|
||||||
const tsPath = fnPath.replace(/\.js$/, '.ts');
|
|
||||||
const def = await readFile(fnPath.replace(/\.js$/, '.tsdef'), 'utf8');
|
|
||||||
const interfaceName = def.match(/interface (\w+)/)[1];
|
|
||||||
|
|
||||||
const lines = require(fnPath).toString().split('\n');
|
|
||||||
let errorHtmlStart = -1;
|
|
||||||
let errorHtmlEnd = -1;
|
|
||||||
for (let i = 0; i < lines.length; i++) {
|
|
||||||
const line = lines[i];
|
|
||||||
if (errorHtmlStart === -1 && line.includes('encodeHTML')) {
|
|
||||||
errorHtmlStart = i;
|
|
||||||
} else if (errorHtmlEnd === -1 && line.includes(')();')) {
|
|
||||||
errorHtmlEnd = i;
|
|
||||||
}
|
|
||||||
if (/\bvar\b/.test(line)) {
|
|
||||||
lines[i] = line.replace(/\bvar\b/g, 'let');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lines.splice(errorHtmlStart, errorHtmlEnd);
|
|
||||||
|
|
||||||
lines[0] = `export default ${lines[0].replace(
|
|
||||||
'(it)',
|
|
||||||
`(it: ${interfaceName}): string`
|
|
||||||
)}`;
|
|
||||||
|
|
||||||
lines.unshift(
|
|
||||||
"import encodeHTML from 'escape-html';",
|
|
||||||
'',
|
|
||||||
...def.split('\n')
|
|
||||||
);
|
|
||||||
|
|
||||||
await Promise.all([writeFile(tsPath, lines.join('\n')), remove(fnPath)]);
|
|
||||||
console.log(
|
|
||||||
`${file} -> ${file.replace(/\.js$/, '.ts')} (${Date.now() - start}ms)`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
process.on('unhandledRejection', err => {
|
|
||||||
console.error('Unhandled Rejection:');
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
process.on('uncaughtException', err => {
|
|
||||||
console.error('Uncaught Exception:');
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
main().catch(err => {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
43
packages/cli/scripts/compile-templates.mjs
Normal file
43
packages/cli/scripts/compile-templates.mjs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import execa from 'execa';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import { readFile, writeFile, readdir, unlink } from 'node:fs/promises';
|
||||||
|
|
||||||
|
export async function compileDevTemplates() {
|
||||||
|
const dirRoot = new URL('../', import.meta.url);
|
||||||
|
|
||||||
|
// Compile the `doT.js` template files for `vercel dev`
|
||||||
|
const templatesDir = new URL('src/util/dev/templates/', dirRoot);
|
||||||
|
const dotPacker = fileURLToPath(
|
||||||
|
new URL('../../node_modules/dot/bin/dot-packer', dirRoot)
|
||||||
|
);
|
||||||
|
await execa(process.execPath, [dotPacker], {
|
||||||
|
cwd: templatesDir,
|
||||||
|
stdio: ['ignore', 'ignore', 'inherit'],
|
||||||
|
});
|
||||||
|
|
||||||
|
const files = await readdir(templatesDir);
|
||||||
|
const compiledFiles = files.filter(f => f.endsWith('.js'));
|
||||||
|
|
||||||
|
for (const file of compiledFiles) {
|
||||||
|
const fnPath = new URL(file, templatesDir);
|
||||||
|
const tsPath = fnPath.href.replace(/\.js$/, '.ts');
|
||||||
|
const def = await readFile(
|
||||||
|
new URL(fnPath.href.replace(/\.js$/, '.tsdef')),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
const interfaceName = def.match(/interface (\w+)/)[1];
|
||||||
|
|
||||||
|
const { default: fn } = await import(fnPath);
|
||||||
|
|
||||||
|
const contents = `import encodeHTML from 'escape-html';
|
||||||
|
|
||||||
|
${def}
|
||||||
|
export default ${fn
|
||||||
|
.toString()
|
||||||
|
.replace(/var encodeHTML.+\(\)\);/s, '')
|
||||||
|
.replace(/\bvar\b/g, 'let')
|
||||||
|
.replace(/\(it\s*\)/s, `(it: ${interfaceName}): string`)}`;
|
||||||
|
|
||||||
|
await Promise.all([writeFile(new URL(tsPath), contents), unlink(fnPath)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -106,6 +106,10 @@ export interface BuildsManifest {
|
|||||||
argv: string[];
|
argv: string[];
|
||||||
error?: any;
|
error?: any;
|
||||||
builds?: SerializedBuilder[];
|
builds?: SerializedBuilder[];
|
||||||
|
features?: {
|
||||||
|
speedInsightsVersion?: string | undefined;
|
||||||
|
webAnalyticsVersion?: string | undefined;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function main(client: Client): Promise<number> {
|
export default async function main(client: Client): Promise<number> {
|
||||||
@@ -249,7 +253,7 @@ export default async function main(client: Client): Promise<number> {
|
|||||||
output.debug(`Loaded environment variables from "${envPath}"`);
|
output.debug(`Loaded environment variables from "${envPath}"`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// For Vercel Speed Insights support
|
// For Vercel Legacy speed Insights support
|
||||||
if (project.settings.analyticsId) {
|
if (project.settings.analyticsId) {
|
||||||
envToUnset.add('VERCEL_ANALYTICS_ID');
|
envToUnset.add('VERCEL_ANALYTICS_ID');
|
||||||
process.env.VERCEL_ANALYTICS_ID = project.settings.analyticsId;
|
process.env.VERCEL_ANALYTICS_ID = project.settings.analyticsId;
|
||||||
@@ -428,21 +432,27 @@ async function doBuild(
|
|||||||
|
|
||||||
const ops: Promise<Error | void>[] = [];
|
const ops: Promise<Error | void>[] = [];
|
||||||
|
|
||||||
const dependencies = [
|
const dependencyMap = makeDepencyMap(pkg);
|
||||||
...Object.keys(pkg?.dependencies ?? {}),
|
const speedInsighsVersion = dependencyMap.get('@vercel/speed-insights');
|
||||||
...Object.keys(pkg?.devDependencies ?? {}),
|
if (speedInsighsVersion) {
|
||||||
];
|
if (process.env.VERCEL_ANALYTICS_ID) {
|
||||||
|
output.warn(
|
||||||
|
`The \`VERCEL_ANALYTICS_ID\` environment variable is deprecated and will be removed in a future release. Please remove it from your environment variables`
|
||||||
|
);
|
||||||
|
|
||||||
const isUsingSpeedInsights = dependencies.some(
|
delete process.env.VERCEL_ANALYTICS_ID;
|
||||||
d => d === '@vercel/speed-insights'
|
}
|
||||||
);
|
buildsJson.features = {
|
||||||
|
...(buildsJson.features ?? {}),
|
||||||
if (isUsingSpeedInsights && process.env.VERCEL_ANALYTICS_ID) {
|
speedInsightsVersion: speedInsighsVersion,
|
||||||
output.warn(
|
};
|
||||||
`The \`VERCEL_ANALYTICS_ID\` environment variable is deprecated and will be removed in a future release. Please remove it from your environment variables`
|
}
|
||||||
);
|
const webAnalyticsVersion = dependencyMap.get('@vercel/analytics');
|
||||||
|
if (webAnalyticsVersion) {
|
||||||
delete process.env.VERCEL_ANALYTICS_ID;
|
buildsJson.features = {
|
||||||
|
...(buildsJson.features ?? {}),
|
||||||
|
webAnalyticsVersion: webAnalyticsVersion,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the `detectedBuilders` result to output dir
|
// Write the `detectedBuilders` result to output dir
|
||||||
@@ -807,3 +817,10 @@ function mergeFlags(
|
|||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function makeDepencyMap(pkg: PackageJson | null): Map<string, string> {
|
||||||
|
return new Map([
|
||||||
|
...Object.entries(pkg?.devDependencies ?? {}),
|
||||||
|
...Object.entries(pkg?.dependencies ?? {}),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|||||||
@@ -43,10 +43,7 @@ async function ls(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the list of certificates
|
// Get the list of certificates
|
||||||
const { certs, pagination } = await getCerts(
|
const { certs, pagination } = await getCerts(client, ...paginationOptions);
|
||||||
client,
|
|
||||||
...paginationOptions
|
|
||||||
).catch(err => err);
|
|
||||||
|
|
||||||
output.log(
|
output.log(
|
||||||
`${
|
`${
|
||||||
|
|||||||
@@ -17,12 +17,14 @@ type Options = {};
|
|||||||
|
|
||||||
export default async function buy(
|
export default async function buy(
|
||||||
client: Client,
|
client: Client,
|
||||||
opts: Options,
|
opts: Partial<Options>,
|
||||||
args: string[]
|
args: string[]
|
||||||
) {
|
) {
|
||||||
const { output } = client;
|
const { output } = client;
|
||||||
const { contextName } = await getScope(client);
|
const { contextName } = await getScope(client);
|
||||||
|
|
||||||
|
const skipConfirmation = !!process.env.CI;
|
||||||
|
|
||||||
const [domainName] = args;
|
const [domainName] = args;
|
||||||
if (!domainName) {
|
if (!domainName) {
|
||||||
output.error(
|
output.error(
|
||||||
@@ -78,25 +80,31 @@ export default async function buy(
|
|||||||
'available'
|
'available'
|
||||||
)} to buy under ${chalk.bold(contextName)}! ${availableStamp()}`
|
)} to buy under ${chalk.bold(contextName)}! ${availableStamp()}`
|
||||||
);
|
);
|
||||||
if (
|
|
||||||
!(await promptBool(
|
|
||||||
`Buy now for ${chalk.bold(`$${price}`)} (${`${period}yr${
|
|
||||||
period > 1 ? 's' : ''
|
|
||||||
}`})?`,
|
|
||||||
client
|
|
||||||
))
|
|
||||||
) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const autoRenew = await promptBool(
|
let autoRenew;
|
||||||
renewalPrice.period === 1
|
if (skipConfirmation) {
|
||||||
? `Auto renew yearly for ${chalk.bold(`$${price}`)}?`
|
autoRenew = true;
|
||||||
: `Auto renew every ${renewalPrice.period} years for ${chalk.bold(
|
} else {
|
||||||
`$${price}`
|
if (
|
||||||
)}?`,
|
!(await promptBool(
|
||||||
{ ...client, defaultValue: true }
|
`Buy now for ${chalk.bold(`$${price}`)} (${`${period}yr${
|
||||||
);
|
period > 1 ? 's' : ''
|
||||||
|
}`})?`,
|
||||||
|
client
|
||||||
|
))
|
||||||
|
) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
autoRenew = await promptBool(
|
||||||
|
renewalPrice.period === 1
|
||||||
|
? `Auto renew yearly for ${chalk.bold(`$${price}`)}?`
|
||||||
|
: `Auto renew every ${renewalPrice.period} years for ${chalk.bold(
|
||||||
|
`$${price}`
|
||||||
|
)}?`,
|
||||||
|
{ ...client, defaultValue: true }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let buyResult;
|
let buyResult;
|
||||||
const purchaseStamp = stamp();
|
const purchaseStamp = stamp();
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ import { updateCurrentTeamAfterLogin } from '../../util/login/update-current-tea
|
|||||||
export default async function login(client: Client): Promise<number> {
|
export default async function login(client: Client): Promise<number> {
|
||||||
const { output } = client;
|
const { output } = client;
|
||||||
|
|
||||||
|
// user is not currently authenticated on this machine
|
||||||
|
const isInitialLogin = !client.authConfig.token;
|
||||||
|
|
||||||
const argv = getArgs(client.argv.slice(2), {
|
const argv = getArgs(client.argv.slice(2), {
|
||||||
'--oob': Boolean,
|
'--oob': Boolean,
|
||||||
'--github': Boolean,
|
'--github': Boolean,
|
||||||
@@ -68,14 +71,22 @@ export default async function login(client: Client): Promise<number> {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isNewLogin = !client.authConfig.token;
|
|
||||||
|
|
||||||
// Save the user's authentication token to the configuration file.
|
// Save the user's authentication token to the configuration file.
|
||||||
client.authConfig.token = result.token;
|
client.authConfig.token = result.token;
|
||||||
|
|
||||||
// If we have a new login, update `currentTeam`
|
if (result.teamId) {
|
||||||
if (isNewLogin) {
|
client.config.currentTeam = result.teamId;
|
||||||
await updateCurrentTeamAfterLogin(client, output, result.teamId);
|
} else {
|
||||||
|
delete client.config.currentTeam;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we have a brand new login, update `currentTeam`
|
||||||
|
if (isInitialLogin) {
|
||||||
|
await updateCurrentTeamAfterLogin(
|
||||||
|
client,
|
||||||
|
output,
|
||||||
|
client.config.currentTeam
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeToAuthConfigFile(client.authConfig);
|
writeToAuthConfigFile(client.authConfig);
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ try {
|
|||||||
|
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import { existsSync } from 'fs';
|
import { existsSync } from 'fs';
|
||||||
import sourceMap from '@zeit/source-map-support';
|
|
||||||
import { mkdirp } from 'fs-extra';
|
import { mkdirp } from 'fs-extra';
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import epipebomb from 'epipebomb';
|
import epipebomb from 'epipebomb';
|
||||||
@@ -66,8 +65,6 @@ const GLOBAL_COMMANDS = new Set(['help']);
|
|||||||
|
|
||||||
epipebomb();
|
epipebomb();
|
||||||
|
|
||||||
sourceMap.install();
|
|
||||||
|
|
||||||
// Configure the error reporting system
|
// Configure the error reporting system
|
||||||
Sentry.init({
|
Sentry.init({
|
||||||
dsn: SENTRY_DSN,
|
dsn: SENTRY_DSN,
|
||||||
@@ -429,6 +426,10 @@ const main = async () => {
|
|||||||
try {
|
try {
|
||||||
user = await getUser(client);
|
user = await getUser(client);
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
|
if (err instanceof Error) {
|
||||||
|
output.debug(err.stack || err.toString());
|
||||||
|
}
|
||||||
|
|
||||||
if (isErrnoException(err) && err.code === 'NOT_AUTHORIZED') {
|
if (isErrnoException(err) && err.code === 'NOT_AUTHORIZED') {
|
||||||
output.prettyError({
|
output.prettyError({
|
||||||
message: `You do not have access to the specified account`,
|
message: `You do not have access to the specified account`,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import plural from 'pluralize';
|
|||||||
import npa from 'npm-package-arg';
|
import npa from 'npm-package-arg';
|
||||||
import { satisfies } from 'semver';
|
import { satisfies } from 'semver';
|
||||||
import { dirname, join } from 'path';
|
import { dirname, join } from 'path';
|
||||||
|
import { createRequire } from 'module';
|
||||||
import { mkdirp, outputJSON, readJSON, symlink } from 'fs-extra';
|
import { mkdirp, outputJSON, readJSON, symlink } from 'fs-extra';
|
||||||
import { isStaticRuntime } from '@vercel/fs-detectors';
|
import { isStaticRuntime } from '@vercel/fs-detectors';
|
||||||
import { BuilderV2, BuilderV3, PackageJson } from '@vercel/build-utils';
|
import { BuilderV2, BuilderV3, PackageJson } from '@vercel/build-utils';
|
||||||
@@ -28,6 +29,9 @@ type ResolveBuildersResult =
|
|||||||
| { buildersToAdd: Set<string> }
|
| { buildersToAdd: Set<string> }
|
||||||
| { builders: Map<string, BuilderWithPkg> };
|
| { builders: Map<string, BuilderWithPkg> };
|
||||||
|
|
||||||
|
// Get a real `require()` reference that esbuild won't mutate
|
||||||
|
const require_ = createRequire(__filename);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Imports the specified Vercel Builders, installing any missing ones
|
* Imports the specified Vercel Builders, installing any missing ones
|
||||||
* into `.vercel/builders` if necessary.
|
* into `.vercel/builders` if necessary.
|
||||||
@@ -115,10 +119,9 @@ export async function resolveBuilders(
|
|||||||
// If `pkgPath` wasn't found in `.vercel/builders` then try as a CLI local
|
// If `pkgPath` wasn't found in `.vercel/builders` then try as a CLI local
|
||||||
// dependency. `require.resolve()` will throw if the Builder is not a CLI
|
// dependency. `require.resolve()` will throw if the Builder is not a CLI
|
||||||
// dep, in which case we'll install it into `.vercel/builders`.
|
// dep, in which case we'll install it into `.vercel/builders`.
|
||||||
// NOTE: `eval('require')` is necessary to avoid bad transpilation to `__webpack_require__`
|
pkgPath = require_.resolve(`${name}/package.json`, {
|
||||||
pkgPath = eval('require').resolve(`${name}/package.json`, {
|
|
||||||
paths: [__dirname],
|
paths: [__dirname],
|
||||||
}) as string;
|
});
|
||||||
builderPkg = await readJSON(pkgPath);
|
builderPkg = await readJSON(pkgPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,8 +162,7 @@ export async function resolveBuilders(
|
|||||||
|
|
||||||
const path = join(dirname(pkgPath), builderPkg.main || 'index.js');
|
const path = join(dirname(pkgPath), builderPkg.main || 'index.js');
|
||||||
|
|
||||||
// NOTE: `eval('require')` is necessary to avoid bad transpilation to `__webpack_require__`
|
const builder = require_(path);
|
||||||
const builder = eval('require')(path);
|
|
||||||
|
|
||||||
builders.set(spec, {
|
builders.set(spec, {
|
||||||
builder,
|
builder,
|
||||||
|
|||||||
@@ -790,11 +790,10 @@ export default class DevServer {
|
|||||||
|
|
||||||
const merged: Env = { ...env, ...localEnv };
|
const merged: Env = { ...env, ...localEnv };
|
||||||
|
|
||||||
// Validate that the env var name matches what AWS Lambda allows:
|
// Validate that the env var name satisfies what Vercel's platform accepts.
|
||||||
// - https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html
|
|
||||||
let hasInvalidName = false;
|
let hasInvalidName = false;
|
||||||
for (const key of Object.keys(merged)) {
|
for (const key of Object.keys(merged)) {
|
||||||
if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(key)) {
|
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {
|
||||||
this.output.warn(
|
this.output.warn(
|
||||||
`Ignoring ${type
|
`Ignoring ${type
|
||||||
.split('.')
|
.split('.')
|
||||||
@@ -808,7 +807,7 @@ export default class DevServer {
|
|||||||
}
|
}
|
||||||
if (hasInvalidName) {
|
if (hasInvalidName) {
|
||||||
this.output.log(
|
this.output.log(
|
||||||
'Env var names must start with letters, and can only contain alphanumeric characters and underscores'
|
'The name contains invalid characters. Only letters, digits, and underscores are allowed. Furthermore, the name should not start with a digit'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1319,6 +1318,11 @@ export default class DevServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!match && status && phase !== 'miss') {
|
if (!match && status && phase !== 'miss') {
|
||||||
|
if (routeResult.userDest) {
|
||||||
|
// If it's a user defined route then we continue routing
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
this.output.debug(`Route found with with status code ${status}`);
|
this.output.debug(`Route found with with status code ${status}`);
|
||||||
await this.sendError(req, res, requestId, '', status, headers);
|
await this.sendError(req, res, requestId, '', status, headers);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -24,11 +24,7 @@ export function createProxy(client: Client): Server {
|
|||||||
json: false,
|
json: false,
|
||||||
});
|
});
|
||||||
res.statusCode = fetchRes.status;
|
res.statusCode = fetchRes.status;
|
||||||
mergeIntoServerResponse(
|
mergeIntoServerResponse(toOutgoingHeaders(fetchRes.headers), res);
|
||||||
// @ts-expect-error - `node-fetch` Headers is missing `getAll()`
|
|
||||||
toOutgoingHeaders(fetchRes.headers),
|
|
||||||
res
|
|
||||||
);
|
|
||||||
fetchRes.body.pipe(res);
|
fetchRes.body.pipe(res);
|
||||||
} catch (err: unknown) {
|
} catch (err: unknown) {
|
||||||
client.output.prettyError(err);
|
client.output.prettyError(err);
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
* the world, but something to be aware of.
|
* the world, but something to be aware of.
|
||||||
*
|
*
|
||||||
* IMPORTANT! This file must NOT depend on any 3rd party dependencies. This
|
* IMPORTANT! This file must NOT depend on any 3rd party dependencies. This
|
||||||
* file is NOT bundled by `ncc` and thus any 3rd party dependencies will never
|
* file is NOT bundled by `esbuild` and thus any 3rd party dependencies will
|
||||||
* be available.
|
* never be available.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const https = require('https');
|
const https = require('https');
|
||||||
|
|||||||
27
packages/cli/test/dev/fixtures/01-node/package-lock.json
generated
Normal file
27
packages/cli/test/dev/fixtures/01-node/package-lock.json
generated
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "01-node",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"dependencies": {
|
||||||
|
"moment": "^2.24.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/moment": {
|
||||||
|
"version": "2.25.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz",
|
||||||
|
"integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==",
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"moment": {
|
||||||
|
"version": "2.25.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.25.3.tgz",
|
||||||
|
"integrity": "sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
||||||
# yarn lockfile v1
|
|
||||||
|
|
||||||
|
|
||||||
moment@^2.24.0:
|
|
||||||
version "2.25.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.25.3.tgz#252ff41319cf41e47761a1a88cab30edfe9808c0"
|
|
||||||
integrity sha512-PuYv0PHxZvzc15Sp8ybUCoQ+xpyPWvjOuK72a5ovzp2LI32rJXOiIfyoFoYvG3s6EwwrdkMyWuRiEHSZRLJNdg==
|
|
||||||
22237
packages/cli/test/dev/fixtures/02-angular-node/package-lock.json
generated
Normal file
22237
packages/cli/test/dev/fixtures/02-angular-node/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
30372
packages/cli/test/dev/fixtures/03-aurelia/package-lock.json
generated
Normal file
30372
packages/cli/test/dev/fixtures/03-aurelia/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,6 @@
|
|||||||
"aurelia-testing": "1.0.0",
|
"aurelia-testing": "1.0.0",
|
||||||
"aurelia-tools": "2.0.0",
|
"aurelia-tools": "2.0.0",
|
||||||
"aurelia-webpack-plugin": "3.0.0",
|
"aurelia-webpack-plugin": "3.0.0",
|
||||||
"babel-eslint": "10.0.1",
|
|
||||||
"babel-jest": "24.5.0",
|
"babel-jest": "24.5.0",
|
||||||
"babel-loader": "8.0.5",
|
"babel-loader": "8.0.5",
|
||||||
"babel-plugin-istanbul": "5.1.1",
|
"babel-plugin-istanbul": "5.1.1",
|
||||||
@@ -31,7 +30,6 @@
|
|||||||
"css-loader": "1.0.0",
|
"css-loader": "1.0.0",
|
||||||
"del": "3.0.0",
|
"del": "3.0.0",
|
||||||
"duplicate-package-checker-webpack-plugin": "3.0.0",
|
"duplicate-package-checker-webpack-plugin": "3.0.0",
|
||||||
"eslint": "7.0.0",
|
|
||||||
"expose-loader": "0.7.5",
|
"expose-loader": "0.7.5",
|
||||||
"file-loader": "2.0.0",
|
"file-loader": "2.0.0",
|
||||||
"gulp": "4.0.0",
|
"gulp": "4.0.0",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
29180
packages/cli/test/dev/fixtures/04-create-react-app/package-lock.json
generated
Normal file
29180
packages/cli/test/dev/fixtures/04-create-react-app/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user