Compare commits

..

23 Commits

Author SHA1 Message Date
Vercel Release Bot
a92467719b Version Packages (#10528)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## vercel@32.2.5

### Patch Changes

- Updated dependencies
\[[`849eedf0f`](849eedf0f2),
[`f6f16b034`](f6f16b0347),
[`3035e18fb`](3035e18fb6),
[`cb784aeb9`](cb784aeb9c)]:
    -   @vercel/next@4.0.6
    -   @vercel/remix-builder@2.0.6

## @vercel/next@4.0.6

### Patch Changes

- Fix feature flag detection
([#10531](https://github.com/vercel/vercel/pull/10531))

## @vercel/remix-builder@2.0.6

### Patch Changes

- Fix ESM mode for Edge runtime
([#10530](https://github.com/vercel/vercel/pull/10530))

- Update `@remix-run/dev` fork to v2.0.0
([#10526](https://github.com/vercel/vercel/pull/10526))

- Fixes for Remix v2
([#10525](https://github.com/vercel/vercel/pull/10525))
2023-09-18 15:44:07 -03:00
Nathan Rajlich
f6f16b0347 [remix] Fix ESM mode for Edge runtime, add Remix v2 E2E test (#10530)
Similar to the default import fix from #10525 which was for Node runtime, but this one fixes Edge runtime.

Also adds an E2E test for Remix v2, including both a Node route and Edge route.
2023-09-18 18:26:53 +00:00
Trek Glowacki
92ad73b8f3 Restore datadog checking with logs not exit codes (#10527)
Restores DataDog flakey test detection. Briefly disabled because the old method of using exit codes would bail the entire workflow.

Taking the Turbo team's suggestion of looking at `runData.execution` values to avoid an extra loop. Now with unit tests!
2023-09-18 16:43:16 +00:00
Steven
849eedf0f2 [next] fix feature flag detection (#10531)
For feature flags, we use the string `1` for enabled and the string `0` for disabled.

So we need to check the value of the env var, not the presence of the env var.
2023-09-18 16:17:55 +00:00
Vercel Release Bot
848a62e4a5 [tests] Upgrade Turbo to version 1.10.14 (#10529)
This auto-generated PR updates Turbo to version 1.10.14
2023-09-18 15:31:52 +00:00
Nathan Rajlich
cb784aeb9c [remix] Fixes for Remix v2 (#10525)
The Remix v2 template now uses `"type": "module"` by default, so adjust our bundling logic to account for that possibility.
2023-09-18 14:32:08 +00:00
Vercel Release Bot
3035e18fb6 [remix] Update @remix-run/dev to v2.0.0 (#10526)
This auto-generated PR updates `@remix-run/dev` to version 2.0.0.
2023-09-18 14:05:42 +00:00
Vercel Release Bot
eb40c4c4a0 Version Packages (#10514)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @vercel/fs-detectors@5.1.0

### Minor Changes

- Add support for bun detection in monorepo
([#10511](https://github.com/vercel/vercel/pull/10511))

## vercel@32.2.4

### Patch Changes

- Add support for bun detection in monorepo
([#10511](https://github.com/vercel/vercel/pull/10511))

- Updated dependencies
\[[`1b6f3a0f6`](1b6f3a0f65)]:
    -   @vercel/static-build@2.0.6

## @vercel/static-build@2.0.6

### Patch Changes

- Add support for bun detection in monorepo
([#10511](https://github.com/vercel/vercel/pull/10511))

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-09-15 15:13:54 -04:00
Nathan Rajlich
c90ee12b17 Update bun changeset to bump static-build + CLI (#10516)
Also reverts https://github.com/vercel/vercel/pull/10515 since it didn't
work the way we were hoping.
2023-09-15 16:06:32 -03:00
Nathan Rajlich
78be0200b4 Enable changesets experimental updateInternalDependents: 'always' config (#10515)
From the [sounds of
it](https://github.com/changesets/changesets/blob/main/docs/experimental-options.md#updateinternaldependents-type-out-of-range--always),
setting this config value to "always" will make it so that a patch
release will happen for a package that depends on another package which
is being bumped. This would normally happen anyways, but does not happen
when a dependency is a `devDependency` rather than a `dependency` (which
happens for the Builders and CLI, since those packages get bundled and
thus have their deps listed as devDependencies).
2023-09-15 15:54:47 -03:00
Steven
1b6f3a0f65 [fs-detectors] Add support for bun detection in monorepo (#10511)
E2E test looks like:

```sh
bunx create-turbo@canary
cd my-turborepo
gh repo create
vc link --repo
vc deploy
```
2023-09-15 14:13:26 -04:00
Trek Glowacki
eceb15ace9 Revert skipping datadog reports (#10513)
Revert
[.github/workflows/test.yml](https://github.com/vercel/vercel/pull/10513/files#diff-faff1af3d8ff408964a57b2e475f69a6b7c7b71c9978cccc8f471798caac2c88)
to an earlier version.
2023-09-15 13:49:24 -04:00
Vercel Release Bot
fa3f701e05 Version Packages (#10505)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-09-14 16:06:33 -05:00
Trek Glowacki
9953fc765f Complete the error message (#10509) 2023-09-14 11:39:53 -05:00
Trek Glowacki
29ea1af971 Skip DataDog reporting if Turbo cache indicates the uploaded files would be identical (#10501) 2023-09-14 10:47:20 -05:00
Zack Tanner
083aad448e [next] missed a prerender for experimentalBypassFor (#10504)
Missed this in https://github.com/vercel/vercel/pull/10497
2023-09-14 01:19:13 +00:00
Vercel Release Bot
314a105ba1 Version Packages (#10493)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-09-13 17:15:29 -05:00
Ikko Eltociear Ashimine
1abda9ca87 [cli] Fix typo in corepack.ts (#10499)
Co-authored-by: Sean Massa <EndangeredMassa@gmail.com>
2023-09-13 08:26:51 -05:00
Zack Tanner
7a0fed970c [next] provide experimentalBypassFor to prerender from manifest (#10497) 2023-09-12 17:40:49 -05:00
Jimmy Lai
2f461a8b0b next.js: add option to use bundled runtime (#10485)
This PR adds an environment variable that should allow us to test the bundled version for Next.js on Vercel, see https://github.com/vercel/next.js/pull/52997 for reference.

The changes include:
- a new environment variable `VERCEL_NEXT_BUNDLED_SERVER`
- some logic changes that will put app route handlers into their own lambda groups
- extra logic to require early the rendering runtimes (see PR above for details)
2023-09-12 19:45:23 +00:00
Steven
ec894bdf7f [frameworks] Add bun install placeholder (#10492)
<img width="899" alt="image"
src="https://github.com/vercel/vercel/assets/229881/f37a3cfd-bbb9-4c33-88dc-cd19b9855a47">
2023-09-12 11:29:24 -04:00
Andy
009cea6d30 [examples] Use placeholder for API Key (#10490)
The Ionic example has an actual Google Maps API key by default and we'd
like to not have it displayed, so we'll replace it with a placeholder
instead. Considering it's commented out anyways, this will be a no-op.

---------

Co-authored-by: Steven <steven@ceriously.com>
2023-09-12 11:25:02 -04:00
Nathan Rajlich
1bab21026e [remix] Fix usage with bun install (#10489) 2023-09-12 09:55:16 -05:00
60 changed files with 5804 additions and 1367 deletions

View File

@@ -83,7 +83,7 @@ jobs:
env:
FORCE_COLOR: '1'
- name: Test ${{matrix.packageName}}
run: node utils/gen.js && node_modules/.bin/turbo run test --cache-dir=".turbo" --log-order=stream --scope=${{matrix.packageName}} --no-deps -- ${{ join(matrix.testPaths, ' ') }}
run: node utils/gen.js && node_modules/.bin/turbo run test --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
@@ -91,13 +91,18 @@ jobs:
VERCEL_TEST_TOKEN: ${{ secrets.VERCEL_TEST_TOKEN }}
VERCEL_TEST_REGISTRATION_URL: ${{ secrets.VERCEL_TEST_REGISTRATION_URL }}
FORCE_COLOR: '1'
- name: 'Determing Turbo HIT or MISS'
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: fetch ssl certificate after tests (linux, os x)
if: matrix.runner != 'windows-latest'
run: echo | openssl s_client -showcerts -servername 'api.vercel.com' -connect 76.76.21.21:443
- name: 'Upload Test Report to Datadog'
if: always()
if: ${{ steps['turbo-summary'].outputs.misses != '0' }}
run: 'npx @datadog/datadog-ci@2.18.1 junit upload --service vercel-cli .junit-reports'
env:
DATADOG_API_KEY: ${{secrets.DATADOG_API_KEY_CLI}}

View File

@@ -29,7 +29,7 @@
<!-- Replace the API key with your own, see:
https://developers.google.com/maps/documentation/javascript/get-api-key -->
<!-- <script async="" defer="" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB8pf6ZdFQj5qw7rc_HSGrhUwQKfIe9ICw"></script> -->
<!-- <script async="" defer="" src="https://maps.googleapis.com/maps/api/js?key=<YOUR_GOOGLE_MAPS_API_KEY>"></script> -->
<noscript>Please enable JavaScript to continue using this application.</noscript>
</body>

View File

@@ -9,7 +9,7 @@
},
"devDependencies": {
"@types/jest": "27.4.1",
"@vercel/frameworks": "2.0.1"
"@vercel/frameworks": "2.0.2"
},
"version": null
}

View File

@@ -33,7 +33,7 @@
"source-map-support": "0.5.12",
"ts-eager": "2.0.2",
"ts-jest": "29.1.0",
"turbo": "1.10.13",
"turbo": "1.10.14",
"typescript": "4.9.5"
},
"scripts": {

View File

@@ -1,5 +1,37 @@
# vercel
## 32.2.5
### Patch Changes
- Updated dependencies [[`849eedf0f`](https://github.com/vercel/vercel/commit/849eedf0f2841211e4175d374f1cf01330bf9611), [`f6f16b034`](https://github.com/vercel/vercel/commit/f6f16b0347bac9f5c33c79ccb1fb9fd9d254cae5), [`3035e18fb`](https://github.com/vercel/vercel/commit/3035e18fb67dfe7031e235a74136a41948f86d5a), [`cb784aeb9`](https://github.com/vercel/vercel/commit/cb784aeb9c9e4eddf1c65b61849a87edb1117af1)]:
- @vercel/next@4.0.6
- @vercel/remix-builder@2.0.6
## 32.2.4
### Patch Changes
- Add support for bun detection in monorepo ([#10511](https://github.com/vercel/vercel/pull/10511))
- Updated dependencies [[`1b6f3a0f6`](https://github.com/vercel/vercel/commit/1b6f3a0f6534f71c7486a4e33ac199f1da330626)]:
- @vercel/static-build@2.0.6
## 32.2.3
### Patch Changes
- Updated dependencies [[`083aad448`](https://github.com/vercel/vercel/commit/083aad448e45edae296da3201eec9f890a01d22d)]:
- @vercel/next@4.0.5
## 32.2.2
### Patch Changes
- Updated dependencies [[`7a0fed970`](https://github.com/vercel/vercel/commit/7a0fed970c39cb8f4df70544ded3284d3538b06a), [`2f461a8b0`](https://github.com/vercel/vercel/commit/2f461a8b0bcbdd05da0516395c2905c2d0242682), [`1bab21026`](https://github.com/vercel/vercel/commit/1bab21026ec0bb8a4a8fbeac3d6e4a197f1030fd)]:
- @vercel/next@4.0.4
- @vercel/remix-builder@2.0.5
## 32.2.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "32.2.1",
"version": "32.2.5",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -34,13 +34,13 @@
"@vercel/build-utils": "7.2.0",
"@vercel/go": "3.0.1",
"@vercel/hydrogen": "1.0.1",
"@vercel/next": "4.0.3",
"@vercel/next": "4.0.6",
"@vercel/node": "3.0.5",
"@vercel/python": "4.0.1",
"@vercel/redwood": "2.0.2",
"@vercel/remix-builder": "2.0.4",
"@vercel/remix-builder": "2.0.6",
"@vercel/ruby": "2.0.2",
"@vercel/static-build": "2.0.5"
"@vercel/static-build": "2.0.6"
},
"devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5",
@@ -89,8 +89,8 @@
"@vercel-internals/types": "1.0.10",
"@vercel/client": "13.0.3",
"@vercel/error-utils": "2.0.1",
"@vercel/frameworks": "2.0.1",
"@vercel/fs-detectors": "5.0.2",
"@vercel/frameworks": "2.0.2",
"@vercel/fs-detectors": "5.1.0",
"@vercel/fun": "1.1.0",
"@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "3.0.0",

View File

@@ -41,7 +41,7 @@ export async function initCorepack({
const pkgManagerName = pkg.packageManager.split('@')[0];
// We must explicitly call `corepack enable npm` since `corepack enable`
// doesn't work with npm. See https://github.com/nodejs/corepack/pull/24
// Also, `corepack enable` is too broad and will change the verison of
// Also, `corepack enable` is too broad and will change the version of
// yarn & pnpm even though those versions are not specified by the user.
// See https://github.com/nodejs/corepack#known-good-releases
// Finally, we use `--install-directory` so we can cache the result to

View File

@@ -13,8 +13,8 @@ import { setupTmpDir } from '../../helpers/setup-unit-fixture';
describe('link', () => {
it('should prompt for link', async () => {
const cwd = setupTmpDir();
const user = useUser();
const cwd = setupTmpDir();
useTeams('team_dummy');
const { project } = useProject({
...defaultProject,

View File

@@ -1,5 +1,11 @@
# @vercel/frameworks
## 2.0.2
### Patch Changes
- Add `bun install` placeholder ([#10492](https://github.com/vercel/vercel/pull/10492))
## 2.0.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/frameworks",
"version": "2.0.1",
"version": "2.0.2",
"main": "./dist/frameworks.js",
"types": "./dist/frameworks.d.ts",
"files": [

View File

@@ -42,7 +42,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `blitz build`',
@@ -82,7 +83,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `next build`',
@@ -125,7 +127,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `gatsby build`',
@@ -214,7 +217,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
value: 'remix build',
@@ -252,7 +256,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install` or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
value: 'astro build',
@@ -299,7 +304,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `hexo generate`',
@@ -334,7 +340,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `npx @11ty/eleventy`',
@@ -371,7 +378,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `docusaurus build`',
@@ -457,7 +465,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `docusaurus-build`',
@@ -508,7 +517,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `preact build`',
@@ -555,7 +565,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `solid-start build`',
@@ -591,7 +602,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `dojo build`',
@@ -651,7 +663,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `ember build`',
@@ -696,7 +709,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `vue-cli-service build`',
@@ -749,7 +763,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `ng build && scully`',
@@ -784,7 +799,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `ng build`',
@@ -827,7 +843,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `ng build`',
@@ -885,7 +902,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `polymer build`',
@@ -944,7 +962,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `rollup -c`',
@@ -994,7 +1013,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `svelte-kit build`',
@@ -1032,7 +1052,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: 'vite build',
@@ -1066,7 +1087,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `react-scripts build`',
@@ -1129,7 +1151,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `react-scripts build`',
@@ -1188,7 +1211,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `gridsome build`',
@@ -1223,7 +1247,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `umi build`',
@@ -1267,7 +1292,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `sapper export`',
@@ -1302,7 +1328,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `saber build`',
@@ -1351,7 +1378,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `stencil build`',
@@ -1420,7 +1448,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `nuxt generate`',
@@ -1476,7 +1505,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
value: 'yarn rw deploy vercel',
@@ -1606,7 +1636,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `brunch build --production`',
@@ -1717,7 +1748,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
value: 'shopify hydrogen build',
@@ -1753,7 +1785,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `vite build`',
@@ -1787,7 +1820,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `vitepress build docs`',
@@ -1819,7 +1853,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `vuepress build src`',
@@ -1852,7 +1887,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `parcel build`',
@@ -1909,7 +1945,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run build` or `sanity build`',
@@ -1953,7 +1990,8 @@ export const frameworks = [
},
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
value: 'storybook build',
@@ -1975,7 +2013,8 @@ export const frameworks = [
description: 'No framework or an unoptimized framework.',
settings: {
installCommand: {
placeholder: '`yarn install`, `pnpm install`, or `npm install`',
placeholder:
'`yarn install`, `pnpm install`, `npm install`, or `bun install`',
},
buildCommand: {
placeholder: '`npm run vercel-build` or `npm run build`',

View File

@@ -1,5 +1,18 @@
# @vercel/fs-detectors
## 5.1.0
### Minor Changes
- Add support for bun detection in monorepo ([#10511](https://github.com/vercel/vercel/pull/10511))
## 5.0.3
### Patch Changes
- Updated dependencies [[`ec894bdf7`](https://github.com/vercel/vercel/commit/ec894bdf7f167debded37183f11360756f577f14)]:
- @vercel/frameworks@2.0.2
## 5.0.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/fs-detectors",
"version": "5.0.2",
"version": "5.1.0",
"description": "Vercel filesystem detectors",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -21,7 +21,7 @@
},
"dependencies": {
"@vercel/error-utils": "2.0.1",
"@vercel/frameworks": "2.0.1",
"@vercel/frameworks": "2.0.2",
"@vercel/routing-utils": "3.0.0",
"glob": "8.0.3",
"js-yaml": "4.1.0",

View File

@@ -37,6 +37,24 @@ export const packageManagers: Array<
],
},
},
{
name: 'bun',
slug: 'bun',
logo: '',
darkModeLogo: '',
detectors: {
some: [
{
path: 'bun.lockb',
},
{
path: 'package.json',
// Depends on https://github.com/nodejs/corepack/pull/307
matchContent: '"packageManager":\\s*"bun@.*"',
},
],
},
},
{
name: 'yarn',
slug: 'yarn',

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,3 @@
{
"packageManager": "bun@1.0.1"
}

View File

@@ -14,6 +14,8 @@ describe('package-managers', () => {
['54-yarn-with-corepack', 'yarn'],
['55-pnpm-with-lockfile', 'pnpm'],
['56-pnpm-with-corepack', 'pnpm'],
['57-bun-with-lockfile', 'bun'],
['58-bun-with-corepack', 'bun'],
])('with detectFramework', (fixturePath, frameworkSlug) => {
const testName = `should detect package manager '${frameworkSlug}' for ${fixturePath}`;

View File

@@ -1,5 +1,25 @@
# @vercel/next
## 4.0.6
### Patch Changes
- Fix feature flag detection ([#10531](https://github.com/vercel/vercel/pull/10531))
## 4.0.5
### Patch Changes
- missed a prerender for experimentalBypassFor ([#10504](https://github.com/vercel/vercel/pull/10504))
## 4.0.4
### Patch Changes
- provide `experimentalBypassFor` to Prerender from manifest ([#10497](https://github.com/vercel/vercel/pull/10497))
- next.js: move app route handlers in their own lambda grouping, add flag to use bundled runtime ([#10485](https://github.com/vercel/vercel/pull/10485))
## 4.0.3
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/next",
"version": "4.0.3",
"version": "4.0.6",
"license": "Apache-2.0",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js",

View File

@@ -65,6 +65,12 @@ const NEXT_DATA_MIDDLEWARE_RESOLVING_VERSION = 'v12.1.7-canary.33';
const EMPTY_ALLOW_QUERY_FOR_PRERENDERED_VERSION = 'v12.2.0';
const CORRECTED_MANIFESTS_VERSION = 'v12.2.0';
// related PR: https://github.com/vercel/next.js/pull/52997
const BUNDLED_SERVER_NEXT_VERSION = '13.4.20-canary.26';
const BUNDLED_SERVER_NEXT_PATH =
'next/dist/compiled/next-server/server.runtime.prod.js';
export async function serverBuild({
dynamicPages,
pagesDir,
@@ -305,16 +311,32 @@ export async function serverBuild({
let nextServerBuildTrace;
let instrumentationHookBuildTrace;
const useBundledServer =
semver.gte(nextVersion, BUNDLED_SERVER_NEXT_VERSION) &&
process.env.VERCEL_NEXT_BUNDLED_SERVER === '1';
if (useBundledServer) {
debug('Using bundled Next.js server');
}
const nextServerFile = resolveFrom(
projectDir,
`${getNextServerPath(nextVersion)}/next-server.js`
useBundledServer
? BUNDLED_SERVER_NEXT_PATH
: `${getNextServerPath(nextVersion)}/next-server.js`
);
try {
// leverage next-server trace from build if available
nextServerBuildTrace = JSON.parse(
await fs.readFile(
path.join(entryPath, outputDirectory, 'next-server.js.nft.json'),
path.join(
entryPath,
outputDirectory,
useBundledServer
? 'next-minimal-server.js.nft.json'
: 'next-server.js.nft.json'
),
'utf8'
)
);
@@ -407,6 +429,7 @@ export async function serverBuild({
const apiPages: string[] = [];
const nonApiPages: string[] = [];
const appRouterPages: string[] = [];
const appRouteHandlers: string[] = [];
lambdaPageKeys.forEach(page => {
if (
@@ -428,7 +451,11 @@ export async function serverBuild({
}
if (lambdaAppPaths[page]) {
appRouterPages.push(page);
if (lambdaAppPaths[page].fsPath.endsWith('route.js')) {
appRouteHandlers.push(page);
} else {
appRouterPages.push(page);
}
} else if (pageMatchesApi(page)) {
apiPages.push(page);
} else {
@@ -596,7 +623,9 @@ export async function serverBuild({
)
.replace(
'__NEXT_SERVER_PATH__',
`${getNextServerPath(nextVersion)}/next-server.js`
useBundledServer
? BUNDLED_SERVER_NEXT_PATH
: `${getNextServerPath(nextVersion)}/next-server.js`
);
const appLauncher = launcher.replace(
@@ -632,6 +661,7 @@ export async function serverBuild({
const mergedPageKeys = [
...nonApiPages,
...appRouterPages,
...appRouteHandlers,
...apiPages,
...internalPages,
];
@@ -793,6 +823,10 @@ export async function serverBuild({
pageExtensions,
});
for (const group of pageLambdaGroups) {
group.isPages = true;
}
const appRouterLambdaGroups = await getPageLambdaGroups({
entryPath: projectDir,
config,
@@ -809,6 +843,22 @@ export async function serverBuild({
pageExtensions,
});
const appRouteHandlersLambdaGroups = await getPageLambdaGroups({
entryPath: projectDir,
config,
functionsConfigManifest,
pages: appRouteHandlers,
prerenderRoutes,
pageTraces,
compressedPages,
tracedPseudoLayer: tracedPseudoLayer.pseudoLayer,
initialPseudoLayer,
lambdaCompressedByteLimit,
initialPseudoLayerUncompressed: uncompressedInitialSize,
internalPages,
pageExtensions,
});
for (const group of appRouterLambdaGroups) {
if (!group.isPrerenders) {
group.isStreaming = true;
@@ -816,6 +866,14 @@ export async function serverBuild({
group.isAppRouter = true;
}
for (const group of appRouteHandlersLambdaGroups) {
if (!group.isPrerenders) {
group.isStreaming = true;
}
group.isAppRouter = true;
group.isAppRouteHandler = true;
}
const apiLambdaGroups = await getPageLambdaGroups({
entryPath: projectDir,
config,
@@ -857,6 +915,14 @@ export async function serverBuild({
pseudoLayerBytes: group.pseudoLayerBytes,
uncompressedLayerBytes: group.pseudoLayerUncompressedBytes,
})),
appRouteHandlersLambdaGroups: appRouteHandlersLambdaGroups.map(
group => ({
pages: group.pages,
isPrerender: group.isPrerenders,
pseudoLayerBytes: group.pseudoLayerBytes,
uncompressedLayerBytes: group.pseudoLayerUncompressedBytes,
})
),
nextServerLayerSize: initialPseudoLayer.pseudoLayerBytes,
},
null,
@@ -867,6 +933,7 @@ export async function serverBuild({
...pageLambdaGroups,
...appRouterLambdaGroups,
...apiLambdaGroups,
...appRouteHandlersLambdaGroups,
];
await detectLambdaLimitExceeding(

View File

@@ -29,6 +29,7 @@ const nextServer = new NextServer({
minimalMode: true,
customServer: false,
});
const requestHandler = nextServer.getRequestHandler();
module.exports = async (req: IncomingMessage, res: ServerResponse) => {

View File

@@ -856,6 +856,7 @@ export type NextPrerenderedRoutes = {
srcRoute: string | null;
initialStatus?: number;
initialHeaders?: Record<string, string>;
experimentalBypassFor?: HasField;
};
};
@@ -864,6 +865,7 @@ export type NextPrerenderedRoutes = {
routeRegex: string;
dataRoute: string | null;
dataRouteRegex: string | null;
experimentalBypassFor?: HasField;
};
};
@@ -873,6 +875,7 @@ export type NextPrerenderedRoutes = {
routeRegex: string;
dataRoute: string | null;
dataRouteRegex: string | null;
experimentalBypassFor?: HasField;
};
};
@@ -881,6 +884,7 @@ export type NextPrerenderedRoutes = {
routeRegex: string;
dataRoute: string | null;
dataRouteRegex: string | null;
experimentalBypassFor?: HasField;
};
};
@@ -1084,6 +1088,7 @@ export async function getPrerenderManifest(
dataRoute: string | null;
initialStatus?: number;
initialHeaders?: Record<string, string>;
experimentalBypassFor?: HasField;
};
};
dynamicRoutes: {
@@ -1092,6 +1097,7 @@ export async function getPrerenderManifest(
fallback: string | false;
dataRoute: string | null;
dataRouteRegex: string | null;
experimentalBypassFor?: HasField;
};
};
preview: {
@@ -1177,10 +1183,12 @@ export async function getPrerenderManifest(
let initialStatus: undefined | number;
let initialHeaders: undefined | Record<string, string>;
let experimentalBypassFor: undefined | HasField;
if (manifest.version === 4) {
initialStatus = manifest.routes[route].initialStatus;
initialHeaders = manifest.routes[route].initialHeaders;
experimentalBypassFor = manifest.routes[route].experimentalBypassFor;
}
ret.staticRoutes[route] = {
@@ -1192,15 +1200,23 @@ export async function getPrerenderManifest(
srcRoute,
initialStatus,
initialHeaders,
experimentalBypassFor,
};
});
lazyRoutes.forEach(lazyRoute => {
const { routeRegex, fallback, dataRoute, dataRouteRegex } =
manifest.dynamicRoutes[lazyRoute];
let experimentalBypassFor: undefined | HasField;
if (manifest.version === 4) {
experimentalBypassFor =
manifest.dynamicRoutes[lazyRoute].experimentalBypassFor;
}
if (typeof fallback === 'string') {
ret.fallbackRoutes[lazyRoute] = {
experimentalBypassFor,
routeRegex,
fallback,
dataRoute,
@@ -1208,6 +1224,7 @@ export async function getPrerenderManifest(
};
} else if (fallback === null) {
ret.blockingFallbackRoutes[lazyRoute] = {
experimentalBypassFor,
routeRegex,
dataRoute,
dataRouteRegex,
@@ -1216,6 +1233,7 @@ export async function getPrerenderManifest(
// Fallback behavior is disabled, all routes would've been provided
// in the top-level `routes` key (`staticRoutes`).
ret.omittedRoutes[lazyRoute] = {
experimentalBypassFor,
routeRegex,
dataRoute,
dataRouteRegex,
@@ -1391,8 +1409,10 @@ export type LambdaGroup = {
memory?: number;
maxDuration?: number;
isAppRouter?: boolean;
isAppRouteHandler?: boolean;
isStreaming?: boolean;
isPrerenders?: boolean;
isPages?: boolean;
isApiLambda: boolean;
pseudoLayer: PseudoLayer;
pseudoLayerBytes: number;
@@ -1907,6 +1927,7 @@ export const onPrerenderRoute =
let dataRoute: string | null;
let initialStatus: number | undefined;
let initialHeaders: Record<string, string> | undefined;
let experimentalBypassFor: HasField | undefined;
if (isFallback || isBlocking) {
const pr = isFallback
@@ -1923,10 +1944,13 @@ export const onPrerenderRoute =
}
srcRoute = null;
dataRoute = pr.dataRoute;
experimentalBypassFor = pr.experimentalBypassFor;
} else if (isOmitted) {
initialRevalidate = false;
srcRoute = routeKey;
dataRoute = prerenderManifest.omittedRoutes[routeKey].dataRoute;
experimentalBypassFor =
prerenderManifest.omittedRoutes[routeKey].experimentalBypassFor;
} else {
const pr = prerenderManifest.staticRoutes[routeKey];
({
@@ -1935,6 +1959,7 @@ export const onPrerenderRoute =
dataRoute,
initialHeaders,
initialStatus,
experimentalBypassFor,
} = pr);
}
@@ -2175,6 +2200,7 @@ export const onPrerenderRoute =
fallback: htmlFsRef,
group: prerenderGroup,
bypassToken: prerenderManifest.bypassToken,
experimentalBypassFor,
initialStatus,
initialHeaders,
sourcePath,
@@ -2203,6 +2229,7 @@ export const onPrerenderRoute =
fallback: jsonFsRef,
group: prerenderGroup,
bypassToken: prerenderManifest.bypassToken,
experimentalBypassFor,
...(isNotFound
? {

View File

@@ -0,0 +1 @@
.vercel

View File

@@ -0,0 +1,5 @@
export async function GET() {
return new Response('hello world from app route')
}
export const dynamic = 'force-dynamic'

View File

@@ -0,0 +1,5 @@
export default function Page() {
return <p>hello world from app router</p>
}
export const dynamic = 'force-dynamic'

View File

@@ -0,0 +1,10 @@
export default function Layout({children}) {
return <html>
<head>
<title>My page</title>
</head>
<body>
{children}
</body>
</html>
}

View File

@@ -0,0 +1,8 @@
const path = require('path');
const { deployAndTest } = require('../../utils');
describe(`${__dirname.split(path.sep).pop()}`, () => {
it('should deploy and pass probe checks', async () => {
await deployAndTest(__dirname);
});
});

View File

@@ -0,0 +1,15 @@
{
"name": "bundled-server",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},
"dependencies": {
"next": "canary",
"react": "latest",
"react-dom": "latest"
}
}

View File

@@ -0,0 +1,5 @@
export default async (req, res) => {
res.status(200).json({
payload: `hello world from api`
});
};

View File

@@ -0,0 +1,7 @@
export default function Home(props) {
return `hello world from pages`;
}
export async function getServerSideProps() {
return {};
}

View File

@@ -0,0 +1,24 @@
{
"probes": [
{
"path": "/app",
"status": 200,
"mustContain": "hello world from app router"
},
{
"path": "/app-route",
"status": 200,
"mustContain": "hello world from app route"
},
{
"path": "/api/hello",
"status": 200,
"mustContain": "hello world from api"
},
{
"path": "/",
"status": 200,
"mustContain": "hello world from pages"
}
]
}

View File

@@ -0,0 +1,7 @@
{
"build": {
"env": {
"VERCEL_NEXT_BUNDLED_SERVER": "1"
}
}
}

View File

@@ -72,7 +72,7 @@ if (parseInt(process.versions.node.split('.')[0], 10) >= 16) {
)
).toBeFalsy();
expect(lambdas.size).toBe(4);
expect(lambdas.size).toBe(5);
// RSC, root-level page.js
expect(buildResult.output['index']).toBeDefined();

View File

@@ -1,5 +1,21 @@
# @vercel/remix-builder
## 2.0.6
### Patch Changes
- Fix ESM mode for Edge runtime ([#10530](https://github.com/vercel/vercel/pull/10530))
- Update `@remix-run/dev` fork to v2.0.0 ([#10526](https://github.com/vercel/vercel/pull/10526))
- Fixes for Remix v2 ([#10525](https://github.com/vercel/vercel/pull/10525))
## 2.0.5
### Patch Changes
- Fix usage with `bun install` ([#10489](https://github.com/vercel/vercel/pull/10489))
## 2.0.4
### Patch Changes

View File

@@ -1,3 +1,3 @@
import { createRequestHandler } from '@remix-run/server-runtime';
import build from '@remix-run/dev/server-build';
export default createRequestHandler(build);
import * as build from '@remix-run/dev/server-build';
export default createRequestHandler(build.default || build);

View File

@@ -1,20 +1,20 @@
import {
AbortController as NodeAbortController,
createRequestHandler as createRemixRequestHandler,
Headers as NodeHeaders,
Request as NodeRequest,
writeReadableStreamToWritable,
installGlobals,
} from '@remix-run/node';
installGlobals();
import build from '@remix-run/dev/server-build';
import * as build from '@remix-run/dev/server-build';
const handleRequest = createRemixRequestHandler(build, process.env.NODE_ENV);
const handleRequest = createRemixRequestHandler(
build.default || build,
process.env.NODE_ENV
);
function createRemixHeaders(requestHeaders) {
const headers = new NodeHeaders();
const headers = new Headers();
for (const key in requestHeaders) {
const header = requestHeaders[key];
@@ -37,7 +37,7 @@ function createRemixRequest(req, res) {
const url = new URL(req.url, `${protocol}://${host}`);
// Abort action/loaders once we can no longer write a response
const controller = new NodeAbortController();
const controller = new AbortController();
res.on('close', () => controller.abort());
const init = {
@@ -50,7 +50,7 @@ function createRemixRequest(req, res) {
init.body = req;
}
return new NodeRequest(url.href, init);
return new Request(url.href, init);
}
async function sendRemixResponse(res, nodeResponse) {

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/remix-builder",
"version": "2.0.4",
"version": "2.0.6",
"license": "Apache-2.0",
"main": "./dist/index.js",
"homepage": "https://vercel.com/docs",
@@ -25,7 +25,7 @@
"ts-morph": "12.0.0"
},
"devDependencies": {
"@remix-run/dev": "npm:@vercel/remix-run-dev@1.19.3",
"@remix-run/dev": "npm:@vercel/remix-run-dev@2.0.0",
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@types/semver": "7.3.13",

View File

@@ -141,9 +141,10 @@ export const build: BuildV2 = async ({
await runNpmInstall(entrypointFsDirname, [], spawnOpts, meta, nodeVersion);
}
const isHydrogen2 =
const isHydrogen2 = Boolean(
pkg.dependencies?.['@shopify/remix-oxygen'] ||
pkg.devDependencies?.['@shopify/remix-oxygen'];
pkg.devDependencies?.['@shopify/remix-oxygen']
);
// Determine the version of Remix based on the `@remix-run/dev`
// package version.
@@ -167,9 +168,17 @@ export const build: BuildV2 = async ({
const depsToAdd: string[] = [];
const remixRunDevPkgVersion: string | undefined =
pkg.dependencies?.['@remix-run/dev'] ||
pkg.devDependencies?.['@remix-run/dev'];
// Override the official `@remix-run/dev` package with the
// Vercel fork, which supports the `serverBundles` config
if (!isHydrogen2 && remixRunDevPkg.name !== '@vercel/remix-run-dev') {
if (
!isHydrogen2 &&
remixRunDevPkg.name !== '@vercel/remix-run-dev' &&
!remixRunDevPkgVersion?.startsWith('https:')
) {
const remixDevForkVersion = resolveSemverMinMax(
REMIX_RUN_DEV_MIN_VERSION,
REMIX_RUN_DEV_MAX_VERSION,
@@ -308,7 +317,7 @@ export const build: BuildV2 = async ({
renamedRemixConfigPath
)}';
config.serverBuildTarget = undefined;
config.serverModuleFormat = 'cjs';
config.serverModuleFormat = '${pkg.type === 'module' ? 'esm' : 'cjs'}';
config.serverPlatform = 'node';
config.serverBuildPath = undefined;
config.serverBundles = ${JSON.stringify(serverBundles)};
@@ -318,7 +327,7 @@ export default config;`;
renamedRemixConfigPath
)}');
config.serverBuildTarget = undefined;
config.serverModuleFormat = 'cjs';
config.serverModuleFormat = '${pkg.type === 'module' ? 'esm' : 'cjs'}';
config.serverPlatform = 'node';
config.serverBuildPath = undefined;
config.serverBundles = ${JSON.stringify(serverBundles)};

View File

@@ -278,29 +278,41 @@ export function addDependencies(
}
const args: string[] = [];
if (cliType === 'npm' || cliType === 'pnpm') {
args.push('install');
if (opts.saveDev) {
args.push('--save-dev');
}
} else {
// 'yarn'
args.push('add');
if (opts.saveDev) {
args.push('--dev');
}
const yarnVersion = execSync('yarn -v', { encoding: 'utf8' }).trim();
const isYarnV1 = semver.satisfies(yarnVersion, '1');
if (isYarnV1) {
// Ignoring workspace check is only needed on Yarn v1
args.push('--ignore-workspace-root-check');
}
}
switch (cliType) {
case 'npm':
case 'pnpm':
args.push('install');
if (opts.saveDev) {
args.push('--save-dev');
}
// Don't fail if pnpm is being run at the workspace root
if (cliType === 'pnpm' && opts.cwd) {
if (existsSync(join(opts.cwd, 'pnpm-workspace.yaml'))) {
args.push('--workspace-root');
// Don't fail if pnpm is being run at the workspace root
if (cliType === 'pnpm' && opts.cwd) {
if (existsSync(join(opts.cwd, 'pnpm-workspace.yaml'))) {
args.push('--workspace-root');
}
}
break;
case 'bun':
case 'yarn':
args.push('add');
if (opts.saveDev) {
args.push('--dev');
}
if (cliType === 'yarn') {
const yarnVersion = execSync('yarn -v', { encoding: 'utf8' }).trim();
const isYarnV1 = semver.satisfies(yarnVersion, '1');
if (isYarnV1) {
// Ignoring workspace check is only needed on Yarn v1
args.push('--ignore-workspace-root-check');
}
}
break;
default: {
const n: never = cliType;
throw new Error(`Unexpected package manager: ${n}`);
}
}

View File

@@ -0,0 +1,7 @@
node_modules
/.cache
/build
/public/build
.env
.vercel

View File

@@ -0,0 +1,38 @@
# Welcome to Remix!
- [Remix Docs](https://remix.run/docs)
## Development
From your terminal:
```sh
npm run dev
```
This starts your app in development mode, rebuilding assets on file changes.
## Deployment
First, build your app for production:
```sh
npm run build
```
Then run the app in production mode:
```sh
npm start
```
Now you'll need to pick a host to deploy it to.
### DIY
If you're familiar with deploying node applications, the built-in Remix app server is production-ready.
Make sure to deploy the output of `remix build`
- `build/`
- `public/build/`

View File

@@ -0,0 +1,33 @@
import { cssBundleHref } from "@remix-run/css-bundle";
import type { LinksFunction } from "@vercel/remix";
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
} from "@remix-run/react";
export const links: LinksFunction = () => [
...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
];
export default function App() {
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body>
<Outlet />
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
);
}

View File

@@ -0,0 +1,41 @@
import type { MetaFunction } from "@vercel/remix";
export const meta: MetaFunction = () => {
return [
{ title: "New Remix App" },
{ name: "description", content: "Welcome to Remix!" },
];
};
export default function Index() {
return (
<div style={{ fontFamily: "system-ui, sans-serif", lineHeight: "1.8" }}>
<h1>Welcome to Remix</h1>
<ul>
<li>
<a
target="_blank"
href="https://remix.run/tutorials/blog"
rel="noreferrer"
>
15m Quickstart Blog Tutorial
</a>
</li>
<li>
<a
target="_blank"
href="https://remix.run/tutorials/jokes"
rel="noreferrer"
>
Deep Dive Jokes App Tutorial
</a>
</li>
<li>
<a target="_blank" href="https://remix.run/docs" rel="noreferrer">
Remix Docs
</a>
</li>
</ul>
</div>
);
}

View File

@@ -0,0 +1,13 @@
import type { MetaFunction } from "@vercel/remix";
export const config = { runtime: "edge" };
export const meta: MetaFunction = () => [{ title: "Remix@Edge | New Remix App" }];
export default function Edge() {
return (
<div style={{ fontFamily: "system-ui, sans-serif", lineHeight: "1.4" }}>
<h1>Welcome to Remix@Edge</h1>
</div>
);
}

View File

@@ -0,0 +1,31 @@
{
"name": "my-remix-app",
"private": true,
"sideEffects": false,
"type": "module",
"scripts": {
"build": "remix build",
"dev": "remix dev --manual",
"start": "remix-serve ./build/index.js",
"typecheck": "tsc"
},
"dependencies": {
"@remix-run/css-bundle": "^2.0.0",
"@remix-run/node": "^2.0.0",
"@remix-run/react": "^2.0.0",
"@remix-run/serve": "^2.0.0",
"@vercel/remix": "^2.0.0",
"isbot": "^3.6.8",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@remix-run/dev": "^2.0.0",
"@types/react": "^18.2.20",
"@types/react-dom": "^18.2.7",
"typescript": "^5.1.6"
},
"engines": {
"node": ">=18.0.0"
}
}

4384
packages/remix/test/fixtures/12-remix-v2/pnpm-lock.yaml generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
{
"probes": [
{ "path": "/", "mustContain": "Welcome to Remix" },
{ "path": "/edge", "mustContain": "Welcome to Remix@Edge" }
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,8 @@
/** @type {import('@remix-run/dev').AppConfig} */
export default {
ignoredRouteFiles: ["**/.*"],
// appDirectory: "app",
// assetsBuildDirectory: "public/build",
// publicPath: "/build/",
// serverBuildPath: "build/index.js",
};

View File

@@ -0,0 +1,2 @@
/// <reference types="@remix-run/dev" />
/// <reference types="@vercel/remix" />

View File

@@ -0,0 +1,22 @@
{
"include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"],
"compilerOptions": {
"lib": ["DOM", "DOM.Iterable", "ES2022"],
"isolatedModules": true,
"esModuleInterop": true,
"jsx": "react-jsx",
"moduleResolution": "Bundler",
"resolveJsonModule": true,
"target": "ES2022",
"strict": true,
"allowJs": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
"paths": {
"~/*": ["./app/*"]
},
// Remix takes care of building everything in `remix build`.
"noEmit": true
}
}

View File

@@ -10,6 +10,9 @@ describe('resolveSemverMinMax()', () => {
{ min: '1.0.0', max: '1.15.0', version: '1.16.0', expected: '1.15.0' },
{ min: '1.0.0', max: '1.15.0', version: '^1.12.0', expected: '^1.12.0' },
{ min: '1.0.0', max: '1.15.0', version: '0.x.x', expected: '1.0.0' },
{ min: '1.0.0', max: '2.0.0', version: '1.x.x', expected: '1.x.x' },
{ min: '1.0.0', max: '2.0.0', version: '2.x.x', expected: '2.x.x' },
{ min: '1.0.0', max: '2.0.0', version: '^2.0.0', expected: '^2.0.0' },
])(
'Should return "$expected" for version "$version" (min=$min, max=$max)',
({ min, max, version, expected }) => {

View File

@@ -1,5 +1,11 @@
# @vercel/static-build
## 2.0.6
### Patch Changes
- Add support for bun detection in monorepo ([#10511](https://github.com/vercel/vercel/pull/10511))
## 2.0.5
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/static-build",
"version": "2.0.5",
"version": "2.0.6",
"license": "Apache-2.0",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/build-step",
@@ -34,8 +34,8 @@
"@types/semver": "7.3.13",
"@vercel/build-utils": "7.2.0",
"@vercel/error-utils": "2.0.1",
"@vercel/frameworks": "2.0.1",
"@vercel/fs-detectors": "5.0.2",
"@vercel/frameworks": "2.0.2",
"@vercel/fs-detectors": "5.1.0",
"@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "3.0.0",
"@vercel/static-config": "3.0.0",

1603
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,179 @@
{
"id": "2VLeNEmIfljBVdkudEPZbp5EutG",
"version": "1",
"turboVersion": "1.10.13",
"monorepo": true,
"globalCacheInputs": {
"rootKey": "You don't understand! I coulda had class. I coulda been a contender. I could've been somebody, instead of a bum, which is what I am.",
"files": {
"package.json": "5e90f8e7c78d58414bab77fcd16f942f07f426e2",
"test/lib/deployment/fetch-retry.js": "f979b34fa9b36be13ecf634e97f085b54f158832",
"test/lib/deployment/log.js": "6f750a0cb4cbc59e38d087207d4484a06d83ae51",
"test/lib/deployment/now-deploy.js": "a023aab600d7d9ba9da20f96ff060c9ab0bec4c5",
"test/lib/deployment/retry-bail-by-default.js": "44830d0f6565655b15fbc441784dc34164749d32",
"test/lib/deployment/test-deployment.js": "a18b2cdab36143b27b22313c94fbd74b401bba5a",
"test/lib/run-build-lambda.js": "85eba9c6f05ef0584a52d74b4646e1bfbc410484",
"turbo-cache-key.json": "523ef4a5572612ec58429b46b5f2b28ac3e24b90",
"utils/build.mjs": "074efdecb40a4e4cfdc6acec9439e4632ea1dfa0"
},
"hashOfExternalDependencies": "a340512aef639cd9",
"globalDotEnv": null,
"environmentVariables": {
"specified": {
"env": [],
"passThroughEnv": null
},
"configured": [],
"inferred": [],
"passthrough": null
}
},
"packages": ["@vercel/error-utils"],
"envMode": "infer",
"frameworkInference": true,
"execution": {
"command": "turbo run test --filter=@vercel/error-utils -- test/index.test.ts",
"repoPath": "",
"success": 0,
"failed": 0,
"cached": 2,
"attempted": 2,
"startTime": 1694619745822,
"endTime": 1694619746625,
"exitCode": 0
},
"tasks": [
{
"taskId": "@vercel/error-utils#build",
"task": "build",
"package": "@vercel/error-utils",
"hash": "5d8590c998bec75a",
"inputs": {
"CHANGELOG.md": "bf7445d194d8a0080f7b98b0181e1f0ac4ef0ef3",
"jest.config.js": "36fb3c7c6ce1cee41bbfeb93108375e0e0ea94ef",
"package.json": "f0510070d5f969e9cc0d9981c85f5428d4b622c2",
"src/index.ts": "adb0bba2a3bc0c86ee6d309b70c26e4ba8d7bbc0",
"test/index.test.ts": "982b4a5705dacb00beeadd56ee39402573b1bae6",
"test/tsconfig.json": "73807c8c4fc89fdf9e6dec514e8f7864c6c2e843",
"tsconfig.json": "86fc498a51913576dba15e12f979de678c848273"
},
"hashOfExternalDependencies": "1999225753d8a28a",
"cache": {
"local": false,
"remote": true,
"status": "HIT",
"source": "REMOTE",
"timeSaved": 10154
},
"command": "node ../../utils/build.mjs",
"cliArguments": [],
"outputs": ["dist/**"],
"excludedOutputs": null,
"logFile": "packages/error-utils/.turbo/turbo-build.log",
"directory": "packages/error-utils",
"dependencies": [],
"dependents": ["@vercel/error-utils#test"],
"resolvedTaskDefinition": {
"outputs": ["dist/**"],
"cache": true,
"dependsOn": ["^build"],
"inputs": [],
"outputMode": "new-only",
"persistent": false,
"env": [],
"passThroughEnv": null,
"dotEnv": null
},
"expandedOutputs": [
"packages/error-utils/.turbo/turbo-build.log",
"packages/error-utils/dist",
"packages/error-utils/dist/index.d.ts",
"packages/error-utils/dist/index.js",
"packages/error-utils/dist/index.js.map"
],
"framework": "",
"envMode": "loose",
"environmentVariables": {
"specified": {
"env": [],
"passThroughEnv": null
},
"configured": [],
"inferred": [],
"passthrough": null
},
"dotEnv": null,
"execution": {
"startTime": 1694619745975,
"endTime": 1694619746484,
"exitCode": 0
}
},
{
"taskId": "@vercel/error-utils#test",
"task": "test",
"package": "@vercel/error-utils",
"hash": "5bb22ba520f1cbe8",
"inputs": {
"CHANGELOG.md": "bf7445d194d8a0080f7b98b0181e1f0ac4ef0ef3",
"jest.config.js": "36fb3c7c6ce1cee41bbfeb93108375e0e0ea94ef",
"package.json": "f0510070d5f969e9cc0d9981c85f5428d4b622c2",
"src/index.ts": "adb0bba2a3bc0c86ee6d309b70c26e4ba8d7bbc0",
"test/index.test.ts": "982b4a5705dacb00beeadd56ee39402573b1bae6",
"test/tsconfig.json": "73807c8c4fc89fdf9e6dec514e8f7864c6c2e843",
"tsconfig.json": "86fc498a51913576dba15e12f979de678c848273"
},
"hashOfExternalDependencies": "1999225753d8a28a",
"cache": {
"local": false,
"remote": true,
"status": "HIT",
"source": "REMOTE",
"timeSaved": 4572
},
"command": "jest --reporters=default --reporters=jest-junit --coverage --env node --verbose",
"cliArguments": ["test/index.test.ts"],
"outputs": null,
"excludedOutputs": null,
"logFile": "packages/error-utils/.turbo/turbo-test.log",
"directory": "packages/error-utils",
"dependencies": ["@vercel/error-utils#build"],
"dependents": [],
"resolvedTaskDefinition": {
"outputs": [],
"cache": true,
"dependsOn": ["build"],
"inputs": [],
"outputMode": "new-only",
"persistent": false,
"env": [],
"passThroughEnv": null,
"dotEnv": null
},
"expandedOutputs": ["packages/error-utils/.turbo/turbo-test.log"],
"framework": "",
"envMode": "loose",
"environmentVariables": {
"specified": {
"env": [],
"passThroughEnv": null
},
"configured": [],
"inferred": [],
"passthrough": null
},
"dotEnv": null,
"execution": {
"startTime": 1694619746484,
"endTime": 1694619746625,
"exitCode": 0
}
}
],
"user": "trek",
"scm": {
"type": "git",
"sha": "0d9d05ba49a4cfda6b60c396b9e84abe34a6c8c1",
"branch": "10501/merge"
}
}

View File

@@ -0,0 +1,13 @@
const determineTurboHitOrMiss = require('../../../utils/determine-turbo-hit-or-miss');
describe('determineTurboHitOrMiss', () => {
it('detects HITs', async () => {
let missCount = await determineTurboHitOrMiss('hit', __dirname);
expect(missCount).toEqual(0);
});
it('detects MISSes', async () => {
let missCount = await determineTurboHitOrMiss('miss', __dirname);
expect(missCount).toEqual(1);
});
});

View File

@@ -0,0 +1,179 @@
{
"id": "2VLeNEmIfljBVdkudEPZbp5EutG",
"version": "1",
"turboVersion": "1.10.13",
"monorepo": true,
"globalCacheInputs": {
"rootKey": "You don't understand! I coulda had class. I coulda been a contender. I could've been somebody, instead of a bum, which is what I am.",
"files": {
"package.json": "5e90f8e7c78d58414bab77fcd16f942f07f426e2",
"test/lib/deployment/fetch-retry.js": "f979b34fa9b36be13ecf634e97f085b54f158832",
"test/lib/deployment/log.js": "6f750a0cb4cbc59e38d087207d4484a06d83ae51",
"test/lib/deployment/now-deploy.js": "a023aab600d7d9ba9da20f96ff060c9ab0bec4c5",
"test/lib/deployment/retry-bail-by-default.js": "44830d0f6565655b15fbc441784dc34164749d32",
"test/lib/deployment/test-deployment.js": "a18b2cdab36143b27b22313c94fbd74b401bba5a",
"test/lib/run-build-lambda.js": "85eba9c6f05ef0584a52d74b4646e1bfbc410484",
"turbo-cache-key.json": "523ef4a5572612ec58429b46b5f2b28ac3e24b90",
"utils/build.mjs": "074efdecb40a4e4cfdc6acec9439e4632ea1dfa0"
},
"hashOfExternalDependencies": "a340512aef639cd9",
"globalDotEnv": null,
"environmentVariables": {
"specified": {
"env": [],
"passThroughEnv": null
},
"configured": [],
"inferred": [],
"passthrough": null
}
},
"packages": ["@vercel/error-utils"],
"envMode": "infer",
"frameworkInference": true,
"execution": {
"command": "turbo run test --filter=@vercel/error-utils -- test/index.test.ts",
"repoPath": "",
"success": 0,
"failed": 0,
"cached": 1,
"attempted": 2,
"startTime": 1694619745822,
"endTime": 1694619746625,
"exitCode": 0
},
"tasks": [
{
"taskId": "@vercel/error-utils#build",
"task": "build",
"package": "@vercel/error-utils",
"hash": "5d8590c998bec75a",
"inputs": {
"CHANGELOG.md": "bf7445d194d8a0080f7b98b0181e1f0ac4ef0ef3",
"jest.config.js": "36fb3c7c6ce1cee41bbfeb93108375e0e0ea94ef",
"package.json": "f0510070d5f969e9cc0d9981c85f5428d4b622c2",
"src/index.ts": "adb0bba2a3bc0c86ee6d309b70c26e4ba8d7bbc0",
"test/index.test.ts": "982b4a5705dacb00beeadd56ee39402573b1bae6",
"test/tsconfig.json": "73807c8c4fc89fdf9e6dec514e8f7864c6c2e843",
"tsconfig.json": "86fc498a51913576dba15e12f979de678c848273"
},
"hashOfExternalDependencies": "1999225753d8a28a",
"cache": {
"local": false,
"remote": true,
"status": "MISS",
"source": "REMOTE",
"timeSaved": 10154
},
"command": "node ../../utils/build.mjs",
"cliArguments": [],
"outputs": ["dist/**"],
"excludedOutputs": null,
"logFile": "packages/error-utils/.turbo/turbo-build.log",
"directory": "packages/error-utils",
"dependencies": [],
"dependents": ["@vercel/error-utils#test"],
"resolvedTaskDefinition": {
"outputs": ["dist/**"],
"cache": true,
"dependsOn": ["^build"],
"inputs": [],
"outputMode": "new-only",
"persistent": false,
"env": [],
"passThroughEnv": null,
"dotEnv": null
},
"expandedOutputs": [
"packages/error-utils/.turbo/turbo-build.log",
"packages/error-utils/dist",
"packages/error-utils/dist/index.d.ts",
"packages/error-utils/dist/index.js",
"packages/error-utils/dist/index.js.map"
],
"framework": "",
"envMode": "loose",
"environmentVariables": {
"specified": {
"env": [],
"passThroughEnv": null
},
"configured": [],
"inferred": [],
"passthrough": null
},
"dotEnv": null,
"execution": {
"startTime": 1694619745975,
"endTime": 1694619746484,
"exitCode": 0
}
},
{
"taskId": "@vercel/error-utils#test",
"task": "test",
"package": "@vercel/error-utils",
"hash": "5bb22ba520f1cbe8",
"inputs": {
"CHANGELOG.md": "bf7445d194d8a0080f7b98b0181e1f0ac4ef0ef3",
"jest.config.js": "36fb3c7c6ce1cee41bbfeb93108375e0e0ea94ef",
"package.json": "f0510070d5f969e9cc0d9981c85f5428d4b622c2",
"src/index.ts": "adb0bba2a3bc0c86ee6d309b70c26e4ba8d7bbc0",
"test/index.test.ts": "982b4a5705dacb00beeadd56ee39402573b1bae6",
"test/tsconfig.json": "73807c8c4fc89fdf9e6dec514e8f7864c6c2e843",
"tsconfig.json": "86fc498a51913576dba15e12f979de678c848273"
},
"hashOfExternalDependencies": "1999225753d8a28a",
"cache": {
"local": false,
"remote": true,
"status": "HIT",
"source": "REMOTE",
"timeSaved": 4572
},
"command": "jest --reporters=default --reporters=jest-junit --coverage --env node --verbose",
"cliArguments": ["test/index.test.ts"],
"outputs": null,
"excludedOutputs": null,
"logFile": "packages/error-utils/.turbo/turbo-test.log",
"directory": "packages/error-utils",
"dependencies": ["@vercel/error-utils#build"],
"dependents": [],
"resolvedTaskDefinition": {
"outputs": [],
"cache": true,
"dependsOn": ["build"],
"inputs": [],
"outputMode": "new-only",
"persistent": false,
"env": [],
"passThroughEnv": null,
"dotEnv": null
},
"expandedOutputs": ["packages/error-utils/.turbo/turbo-test.log"],
"framework": "",
"envMode": "loose",
"environmentVariables": {
"specified": {
"env": [],
"passThroughEnv": null
},
"configured": [],
"inferred": [],
"passthrough": null
},
"dotEnv": null,
"execution": {
"startTime": 1694619746484,
"endTime": 1694619746625,
"exitCode": 0
}
}
],
"user": "trek",
"scm": {
"type": "git",
"sha": "0d9d05ba49a4cfda6b60c396b9e84abe34a6c8c1",
"branch": "10501/merge"
}
}

35
utils/determine-turbo-hit-or-miss.js vendored Normal file
View File

@@ -0,0 +1,35 @@
const fs = require('fs-extra');
const path = require('path');
async function main(turboRunDirectory, turboRunDirectoryParent) {
const turboRunDir = path.join(turboRunDirectoryParent, turboRunDirectory);
const turboRunFiles = await fs.readdir(turboRunDir);
let missCount = 0;
await Promise.all(
turboRunFiles.map(async fileName => {
const runFile = path.join(turboRunDir, fileName);
const runData = await fs.readJson(runFile);
const { attempted, cached } = runData.execution;
missCount += attempted - cached;
})
);
// log because STDOUT is how GitHub Actions communicates
console.log(missCount);
// Return so we can unit test.
return missCount;
}
const turboRunDirectory = '.turbo/runs';
const turboRunDirectoryParent = path.join(__dirname, '..');
main(turboRunDirectory, turboRunDirectoryParent).catch(err => {
console.log('error determining Turbo HIT or MISS', err);
process.exit(1);
});
module.exports = main;