Compare commits

...

30 Commits

Author SHA1 Message Date
Vercel Release Bot
493185709a Version Packages (#10809)
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.5.3

### Patch Changes

- Handle `TooManyProjects` error in places where projects are created
([#10807](https://github.com/vercel/vercel/pull/10807))

- Updated dependencies
\[[`89c1e0323`](89c1e03233),
[`fd29b966d`](fd29b966d3)]:
    -   @vercel/node@3.0.9
    -   @vercel/next@4.0.14

## @vercel/next@4.0.14

### Patch Changes

- Fixed headers for static routes when PPR is enabled
([#10808](https://github.com/vercel/vercel/pull/10808))

## @vercel/node@3.0.9

### Patch Changes

- Replace usage of `fetch` with `undici.request`
([#10767](https://github.com/vercel/vercel/pull/10767))

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-11-08 10:36:37 -07:00
Ethan Arrowood
89c1e03233 [node] swap undici.fetch for undici.request in serverless-handler.mts (#10767)
In a recent undici update, setting the `host` header for fetch requests became invalid (https://github.com/nodejs/undici/pull/2322). 

We relied on this in order to proxy serverless dev server requests via `@vercel/node`. 

This PR replaces the usage of `undici.fetch` with `undici.request`. 

It is blocked by an `undici` type change: https://github.com/nodejs/undici/pull/2373
2023-11-08 17:31:03 +00:00
Zach Ward
ebd7e3ac39 Project limits error handling (#10807)
This PR adds improved error handling for the 200 project limit error
that will start being returned for free tier teams/accounts. The
following changes have been made:
- improve error message format by using `client.output.prettyError` so
that the docs link
(https://vercel.com/docs/limits/overview#general-limits) returned with
the error response is included with the error message
- add explicit error handling of this error from any places where
`createProject` is called, which includes the following commands:
  - `vc project add`
  - `vc link` (indirectly called via `ensureLink`)
  - `vc list` (indirectly called via `ensureLink`)
  - `vc git connect` (indirectly called via `ensureLink`)

### Testing
- sign in to a vercel account that is associated with your work email
(ends in `@vercel.com`), this is necessary for creating a team with the
proper conditions to artificially trigger the error message
- create a Pro Trial team and make sure to prefix the name with:
`vtest314 too many projects `, for example `vtest314 too many projects
test 1`
- check out this branch and cd to `vercel/vercel/packages/cli`
- run: `pnpm dev add [project-name] --cwd=/path/to/some/project`
- the project should fail to be created and you should see the expected
error message (screenshot below) in the terminal output

**Screenshot of error message when attempting to add project from cli**
<img width="798" alt="image"
src="https://github.com/vercel/vercel/assets/14896430/43e6ac2c-ae1c-4367-8d57-0aeb7fbddf33">

---------

Co-authored-by: Nathan Rajlich <n@n8.io>
2023-11-08 11:48:12 -05:00
Wyatt Johnson
fd29b966d3 tests: added tests for PPR (#10808)
This adds some tests to the PPR implementation for Next.js. This also
fixes a bug where the static pages were incorrectly generating a header
that falsly indicated that it postponed.
2023-11-08 09:21:51 -07:00
Vercel Release Bot
2bd9216403 Version Packages (#10805)
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.5.2

### Patch Changes

- Updated dependencies
\[[`c94a082f6`](c94a082f6b)]:
    -   @vercel/next@4.0.13

## @vercel/next@4.0.13

### Patch Changes

- Added `getRequestHandlerWithMetadata` export
([#10753](https://github.com/vercel/vercel/pull/10753))

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-11-07 12:20:58 -07:00
Wyatt Johnson
c94a082f6b Added getRequestHandlerWithMetadata export (#10753)
This adds a new `getRequestHandlerWithMetadata` export if enabled and
available to the exported method.

---------

Co-authored-by: Joe Haddad <timer@vercel.com>
Co-authored-by: JJ Kasper <jj@jjsweb.site>
2023-11-07 10:32:03 -08:00
Vercel Release Bot
66cd626d1c Version Packages (#10765)
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/build-utils@7.2.3

### Patch Changes

- Add experimental flag to allow Node.js v20
([#10802](https://github.com/vercel/vercel/pull/10802))

## 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`](fc90a3dc0b),
[`644b8a52c`](644b8a52cb),
[`0861dc8fb`](0861dc8fbc),
[`33cc8e0ac`](33cc8e0acf),
[`f5296c3c0`](f5296c3c06),
[`d9065c210`](d9065c2102)]:
    -   @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

## @vercel/client@13.0.7

### Patch Changes

- Updated dependencies
\[[`0861dc8fb`](0861dc8fbc)]:
    -   @vercel/build-utils@7.2.3

## @vercel/edge@1.1.1

### Patch Changes

- bump: edge-runtime
([#10712](https://github.com/vercel/vercel/pull/10712))

## @vercel/error-utils@2.0.2

### Patch Changes

- use Node.js `util.types.isNativeError` for `isError` method
([#10764](https://github.com/vercel/vercel/pull/10764))

## @vercel/frameworks@2.0.3

### Patch Changes

- update Angular output path discovery
([#10678](https://github.com/vercel/vercel/pull/10678))

- Updated dependencies
\[[`34dd9c091`](34dd9c0918)]:
    -   @vercel/error-utils@2.0.2

## @vercel/fs-detectors@5.1.3

### Patch Changes

- Updated dependencies
\[[`306f653da`](306f653da9),
[`34dd9c091`](34dd9c0918)]:
    -   @vercel/frameworks@2.0.3
    -   @vercel/error-utils@2.0.2

## @vercel/gatsby-plugin-vercel-builder@2.0.9

### Patch Changes

- Fix nested SSR routes
([#10751](https://github.com/vercel/vercel/pull/10751))

- Updated dependencies
\[[`0861dc8fb`](0861dc8fbc)]:
    -   @vercel/build-utils@7.2.3

## @vercel/next@4.0.12

### Patch Changes

- fix re-mapping logic for index prefetches
([#10750](https://github.com/vercel/vercel/pull/10750))

- Fixes a case where using `basePath` along with static generation would
output a lambda that conflicts with the root route.
([#10738](https://github.com/vercel/vercel/pull/10738))

- Rework prefetch route handling
([#10779](https://github.com/vercel/vercel/pull/10779))

## @vercel/node@3.0.8

### Patch Changes

- bump: edge-runtime
([#10712](https://github.com/vercel/vercel/pull/10712))

- Updated dependencies
\[[`0861dc8fb`](0861dc8fbc),
[`34dd9c091`](34dd9c0918)]:
    -   @vercel/build-utils@7.2.3
    -   @vercel/error-utils@2.0.2

## @vercel/remix-builder@2.0.11

### Patch Changes

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

## @vercel/static-build@2.0.10

### Patch Changes

- Updated dependencies
\[[`efd3cc05d`](efd3cc05dc)]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.9

## @vercel-internals/types@1.0.14

### Patch Changes

- Updated dependencies
\[[`0861dc8fb`](0861dc8fbc)]:
    -   @vercel/build-utils@7.2.3

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-11-07 10:51:39 -07:00
Nathan Rajlich
0861dc8fbc [build-utils] Add experimental flag to allow Node.js v20 (#10802)
Similar to #8836, but now for Node.js v20.
2023-11-07 13:43:29 +00:00
JJ Kasper
7b553c7032 Disable deployment SSO protection for tests (#10799)
Our tests rely on not being behind deployment protection which is now enabled by default so this adds a step to tests to disable this setting to allow tests to continue working as expected.
2023-11-07 05:04:29 +00:00
Kiko Beats
644b8a52cb bump: edge-runtime (#10712) 2023-11-06 09:58:22 +01:00
Bryce Kalow
33cc8e0acf fix(next): do not generate conflicting lambdas when using basePath with app router (#10738)
When using `basePath` with statically generated routes, the builder
currently generates lambdas for the root route that conflict with the
prerender functions generated.

E.g. if we have `basePath: "test"` and a root route at: `app/page.js`,
this is currently the output:

```
test
test.rsc
test/index
test/index.rsc
```

The result is that visiting the deployed app at `/test` renders an
incomplete page. On the other hand visiting `/test/index` outputs the
expected markup.

It seems like the intent is that we want to delete the lambdas that
conflict with the prerender functions. I've updated the lambda name
generation logic when doing the deleting to line up with how the lambda
names are generated initially.
2023-11-03 13:25:56 -07:00
Steven
c0efce29ad chore: remove styfle from codeowners (#10790) 2023-10-31 18:01:48 -05:00
Ethan Arrowood
b4d115b24a [error-utils] fix jest coverage issue (#10789) 2023-10-31 14:08:28 -07:00
Ethan Arrowood
34dd9c0918 [error-utils] use Node.js util.types.isNativeError for isError method (#10764)
I recently learned about https://nodejs.org/api/util.html#utiltypesisnativeerrorvalue which is pretty great. It will return `true` for all errors including subclasses (`class MyError extends Error {}`)
2023-10-31 19:39:30 +00:00
JJ Kasper
f5296c3c06 Rework prefetch route handling (#10779)
Follow-up to https://github.com/vercel/vercel/pull/10750 this removes the underscore prefetching from all prefetch outputs and instead only applies it to the index route itself as this causes issues with PPR making these outputs prerenders and being able to interpolate the route param values. 

There is the edge case of a user returning the literal value `index` from `generateStaticParams` but we can tolerate that more than ppr not working as expected.
2023-10-31 18:15:13 +00:00
Vercel Release Bot
d9065c2102 [remix] Update @remix-run/dev to v2.2.0 (#10788)
This auto-generated PR updates `@remix-run/dev` to version 2.2.0.
2023-10-31 17:59:35 +00:00
Vercel Release Bot
0ad37829da [tests] Update Gatsby fixture versions (#10745)
Automatically generated PR to update Gatsby fixture versions in `@vercel/static-build`
2023-10-30 14:12:31 +00:00
Vercel Release Bot
67748b5207 [examples][tests] Upgrade Next.js to version 14.0.0 (#10774)
This auto-generated PR updates 7 packages to Next.js version 14.0.0
2023-10-29 15:59:56 +00:00
Alan Agius
306f653da9 Update Angular output path discovery (#10678) 2023-10-27 08:54:24 -05:00
Chris Barber
9e2120a325 [cli] Debug log load user exceptions (#10773)
When `getUser(client)` throws an exception, the actual error is never printed. This is useful information, so we should write it to the debug log output.
2023-10-26 16:12:16 +00:00
Vercel Release Bot
a6463d2636 [tests] Upgrade Turbo to version 1.10.16 (#10744)
This auto-generated PR updates Turbo to version 1.10.16
2023-10-26 15:55:22 +00:00
Trek Glowacki
429a111b50 [tests] Add package-lock.json file to dev-server-and-routes vc dev fixture (#10771) 2023-10-26 10:30:56 -05:00
Trek Glowacki
431dde5fa8 [tests] Migrate docusaurus vc dev test to package-lock.json file (#10769) 2023-10-25 09:19:23 -05:00
Trek Glowacki
1f09979c6f [examples] Migrate hydrogen example from yarn.lock to package-lock.json (#10766)
This example occasionally fails with `ERROR: Command "yarn install"
exited with 1 at nowDeploy`. We've noticed errors at the yarn registry
being a root cause of lots of tests failures. This migrates the example
to use the npm registry instead.

Co-authored-by: Chris Barber <chris.barber@vercel.com>
2023-10-24 17:12:11 -05:00
Zack Tanner
fc90a3dc0b [next] fix re-mapping logic for index prefetches (#10750)
Follow-up to https://github.com/vercel/vercel/pull/10734 -- but considers that the static prefetch associated with `/` might be inside of a dir such as `index/index.prefetch.rsc`. 

To avoid any future matching conflicts, this PR updates to prefix all static prefetches
2023-10-24 20:51:55 +00:00
Trek Glowacki
57541e230d [examples] Update Saber to use npm registry (#10755)
Co-authored-by: Chris Barber <chris.barber@vercel.com>
2023-10-24 15:33:04 -05:00
Nathan Rajlich
efd3cc05dc [gatsby-plugin-vercel-builder] Fix nested SSR routes (#10751)
Fixes SSR / DSG pages that are nested deeper than the root path for Gatsby projects.

Also introduces unit tests for the logic related to determining which page name to use.
2023-10-24 20:15:46 +00:00
Trek Glowacki
a732b64c02 [examples][tests] Update fixture test names to be concretely named (#10752) 2023-10-24 10:44:53 -07:00
Zack Tanner
f8320417a8 [next] replace next export with output: export in tests (#10756)
`next export` has been deprecated on the latest Next.js canary so these
tests will no longer pass.

This changes it to use `output: export` from `next.config.js` instead.

---------

Co-authored-by: JJ Kasper <jj@jjsweb.site>
2023-10-24 09:41:54 -07:00
Trek Glowacki
50791803b6 [examples] Migrate Sanity to use npm over yarn (#10754) 2023-10-24 11:17:48 -05:00
292 changed files with 76254 additions and 33307 deletions

14
.github/CODEOWNERS vendored
View File

@@ -2,17 +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/static-build @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek /packages/static-build @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek
/packages/edge @vercel/compute @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
/packages/node @TooTallNate @EndangeredMassa @styfle @cb1kenobi @Ethan-Arrowood @trek @Kikobeats /packages/node @TooTallNate @EndangeredMassa @cb1kenobi @Ethan-Arrowood @trek @Kikobeats
# Unrestricted Paths # Unrestricted Paths
.changeset/ .changeset/

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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');
}); });

View File

@@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,7 @@
/node_modules /node_modules
/.pnp /.pnp
.pnp.js .pnp.js
.yarn/install-state.gz
# testing # testing
/coverage /coverage

View File

@@ -8,7 +8,7 @@
"name": "nextjs", "name": "nextjs",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"next": "13.5.6", "next": "14.0.0",
"react": "^18", "react": "^18",
"react-dom": "^18" "react-dom": "^18"
}, },
@@ -18,7 +18,7 @@
"@types/react-dom": "^18", "@types/react-dom": "^18",
"autoprefixer": "^10", "autoprefixer": "^10",
"eslint": "^8", "eslint": "^8",
"eslint-config-next": "13.5.6", "eslint-config-next": "14.0.0",
"postcss": "^8", "postcss": "^8",
"tailwindcss": "^3", "tailwindcss": "^3",
"typescript": "^5" "typescript": "^5"
@@ -73,9 +73,9 @@
} }
}, },
"node_modules/@eslint-community/regexpp": { "node_modules/@eslint-community/regexpp": {
"version": "4.9.1", "version": "4.10.0",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
"integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0" "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -105,21 +105,21 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.51.0", "version": "8.52.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
"integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
} }
}, },
"node_modules/@humanwhocodes/config-array": { "node_modules/@humanwhocodes/config-array": {
"version": "0.11.11", "version": "0.11.13",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
"integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@humanwhocodes/object-schema": "^1.2.1", "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1", "debug": "^4.1.1",
"minimatch": "^3.0.5" "minimatch": "^3.0.5"
}, },
@@ -141,9 +141,9 @@
} }
}, },
"node_modules/@humanwhocodes/object-schema": { "node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true "dev": true
}, },
"node_modules/@jridgewell/gen-mapping": { "node_modules/@jridgewell/gen-mapping": {
@@ -195,23 +195,23 @@
} }
}, },
"node_modules/@next/env": { "node_modules/@next/env": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.0.tgz",
"integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" "integrity": "sha512-cIKhxkfVELB6hFjYsbtEeTus2mwrTC+JissfZYM0n+8Fv+g8ucUfOlm3VEDtwtwydZ0Nuauv3bl0qF82nnCAqA=="
}, },
"node_modules/@next/eslint-plugin-next": { "node_modules/@next/eslint-plugin-next": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.0.tgz",
"integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", "integrity": "sha512-Ye37nNI09V3yt7pzuzSQtwlvuJ2CGzFszHXkcTHHZgNr7EhTMFLipn3VSJChy+e5+ahTdNApPphc3qCPUsn10A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"glob": "7.1.7" "glob": "7.1.7"
} }
}, },
"node_modules/@next/swc-darwin-arm64": { "node_modules/@next/swc-darwin-arm64": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.0.tgz",
"integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", "integrity": "sha512-HQKi159jCz4SRsPesVCiNN6tPSAFUkOuSkpJsqYTIlbHLKr1mD6be/J0TvWV6fwJekj81bZV9V/Tgx3C2HO9lA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -224,9 +224,9 @@
} }
}, },
"node_modules/@next/swc-darwin-x64": { "node_modules/@next/swc-darwin-x64": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.0.tgz",
"integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", "integrity": "sha512-4YyQLMSaCgX/kgC1jjF3s3xSoBnwHuDhnF6WA1DWNEYRsbOOPWjcYhv8TKhRe2ApdOam+VfQSffC4ZD+X4u1Cg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -239,9 +239,9 @@
} }
}, },
"node_modules/@next/swc-linux-arm64-gnu": { "node_modules/@next/swc-linux-arm64-gnu": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.0.tgz",
"integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", "integrity": "sha512-io7fMkJ28Glj7SH8yvnlD6naIhRDnDxeE55CmpQkj3+uaA2Hko6WGY2pT5SzpQLTnGGnviK85cy8EJ2qsETj/g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -254,9 +254,9 @@
} }
}, },
"node_modules/@next/swc-linux-arm64-musl": { "node_modules/@next/swc-linux-arm64-musl": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.0.tgz",
"integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", "integrity": "sha512-nC2h0l1Jt8LEzyQeSs/BKpXAMe0mnHIMykYALWaeddTqCv5UEN8nGO3BG8JAqW/Y8iutqJsaMe2A9itS0d/r8w==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -269,9 +269,9 @@
} }
}, },
"node_modules/@next/swc-linux-x64-gnu": { "node_modules/@next/swc-linux-x64-gnu": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.0.tgz",
"integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", "integrity": "sha512-Wf+WjXibJQ7hHXOdNOmSMW5bxeJHVf46Pwb3eLSD2L76NrytQlif9NH7JpHuFlYKCQGfKfgSYYre5rIfmnSwQw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -284,9 +284,9 @@
} }
}, },
"node_modules/@next/swc-linux-x64-musl": { "node_modules/@next/swc-linux-x64-musl": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.0.tgz",
"integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", "integrity": "sha512-WTZb2G7B+CTsdigcJVkRxfcAIQj7Lf0ipPNRJ3vlSadU8f0CFGv/ST+sJwF5eSwIe6dxKoX0DG6OljDBaad+rg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -299,9 +299,9 @@
} }
}, },
"node_modules/@next/swc-win32-arm64-msvc": { "node_modules/@next/swc-win32-arm64-msvc": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.0.tgz",
"integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", "integrity": "sha512-7R8/x6oQODmNpnWVW00rlWX90sIlwluJwcvMT6GXNIBOvEf01t3fBg0AGURNKdTJg2xNuP7TyLchCL7Lh2DTiw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -314,9 +314,9 @@
} }
}, },
"node_modules/@next/swc-win32-ia32-msvc": { "node_modules/@next/swc-win32-ia32-msvc": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.0.tgz",
"integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", "integrity": "sha512-RLK1nELvhCnxaWPF07jGU4x3tjbyx2319q43loZELqF0+iJtKutZ+Lk8SVmf/KiJkYBc7Cragadz7hb3uQvz4g==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -329,9 +329,9 @@
} }
}, },
"node_modules/@next/swc-win32-x64-msvc": { "node_modules/@next/swc-win32-x64-msvc": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.0.tgz",
"integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", "integrity": "sha512-g6hLf1SUko+hnnaywQQZzzb3BRecQsoKkF3o/C+F+dOA4w/noVAJngUVkfwF0+2/8FzNznM7ofM6TGZO9svn7w==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -399,12 +399,12 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.8.7", "version": "20.8.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz",
"integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"undici-types": "~5.25.1" "undici-types": "~5.26.4"
} }
}, },
"node_modules/@types/prop-types": { "node_modules/@types/prop-types": {
@@ -414,9 +414,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/react": { "node_modules/@types/react": {
"version": "18.2.29", "version": "18.2.33",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.29.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz",
"integrity": "sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==", "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/prop-types": "*", "@types/prop-types": "*",
@@ -440,15 +440,15 @@
"dev": true "dev": true
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "6.8.0", "version": "6.9.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.0.tgz",
"integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", "integrity": "sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "6.8.0", "@typescript-eslint/scope-manager": "6.9.0",
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.9.0",
"@typescript-eslint/typescript-estree": "6.8.0", "@typescript-eslint/typescript-estree": "6.9.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.9.0",
"debug": "^4.3.4" "debug": "^4.3.4"
}, },
"engines": { "engines": {
@@ -468,13 +468,13 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "6.8.0", "version": "6.9.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz",
"integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "integrity": "sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.9.0",
"@typescript-eslint/visitor-keys": "6.8.0" "@typescript-eslint/visitor-keys": "6.9.0"
}, },
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
@@ -485,9 +485,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "6.8.0", "version": "6.9.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "integrity": "sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^16.0.0 || >=18.0.0" "node": "^16.0.0 || >=18.0.0"
@@ -498,13 +498,13 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0", "version": "6.9.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "integrity": "sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.9.0",
"@typescript-eslint/visitor-keys": "6.8.0", "@typescript-eslint/visitor-keys": "6.9.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"globby": "^11.1.0", "globby": "^11.1.0",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -525,12 +525,12 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0", "version": "6.9.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "integrity": "sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/types": "6.8.0", "@typescript-eslint/types": "6.9.0",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
"engines": { "engines": {
@@ -541,10 +541,16 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
} }
}, },
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
},
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.10.0", "version": "8.11.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.0.tgz",
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "integrity": "sha512-hNiSyky+cuYVALBrsjB7f9gMN9P4u09JyAiMNMLaVfsmkDJuH84M1T/0pfDX/OJfGWcobd2A7ecXYzygn8wibA==",
"dev": true, "dev": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
@@ -935,13 +941,14 @@
} }
}, },
"node_modules/call-bind": { "node_modules/call-bind": {
"version": "1.0.2", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"function-bind": "^1.1.1", "function-bind": "^1.1.2",
"get-intrinsic": "^1.0.2" "get-intrinsic": "^1.2.1",
"set-function-length": "^1.1.1"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
@@ -966,9 +973,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001550", "version": "1.0.30001554",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001550.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz",
"integrity": "sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==", "integrity": "sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -1215,9 +1222,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.559", "version": "1.4.567",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.559.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz",
"integrity": "sha512-iS7KhLYCSJbdo3rUSkhDTVuFNCV34RKs2UaB9Ecr7VlqzjjWW//0nfsFF5dtDmyXlZQaDYYtID5fjtC/6lpRug==", "integrity": "sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w==",
"dev": true "dev": true
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
@@ -1240,26 +1247,26 @@
} }
}, },
"node_modules/es-abstract": { "node_modules/es-abstract": {
"version": "1.22.2", "version": "1.22.3",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
"integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"array-buffer-byte-length": "^1.0.0", "array-buffer-byte-length": "^1.0.0",
"arraybuffer.prototype.slice": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.2",
"available-typed-arrays": "^1.0.5", "available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2", "call-bind": "^1.0.5",
"es-set-tostringtag": "^2.0.1", "es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1", "es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6", "function.prototype.name": "^1.1.6",
"get-intrinsic": "^1.2.1", "get-intrinsic": "^1.2.2",
"get-symbol-description": "^1.0.0", "get-symbol-description": "^1.0.0",
"globalthis": "^1.0.3", "globalthis": "^1.0.3",
"gopd": "^1.0.1", "gopd": "^1.0.1",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0", "has-property-descriptors": "^1.0.0",
"has-proto": "^1.0.1", "has-proto": "^1.0.1",
"has-symbols": "^1.0.3", "has-symbols": "^1.0.3",
"hasown": "^2.0.0",
"internal-slot": "^1.0.5", "internal-slot": "^1.0.5",
"is-array-buffer": "^3.0.2", "is-array-buffer": "^3.0.2",
"is-callable": "^1.2.7", "is-callable": "^1.2.7",
@@ -1269,7 +1276,7 @@
"is-string": "^1.0.7", "is-string": "^1.0.7",
"is-typed-array": "^1.1.12", "is-typed-array": "^1.1.12",
"is-weakref": "^1.0.2", "is-weakref": "^1.0.2",
"object-inspect": "^1.12.3", "object-inspect": "^1.13.1",
"object-keys": "^1.1.1", "object-keys": "^1.1.1",
"object.assign": "^4.1.4", "object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.5.1", "regexp.prototype.flags": "^1.5.1",
@@ -1283,7 +1290,7 @@
"typed-array-byte-offset": "^1.0.0", "typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4", "typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2", "unbox-primitive": "^1.0.2",
"which-typed-array": "^1.1.11" "which-typed-array": "^1.1.13"
}, },
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
@@ -1315,26 +1322,26 @@
} }
}, },
"node_modules/es-set-tostringtag": { "node_modules/es-set-tostringtag": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
"integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"get-intrinsic": "^1.1.3", "get-intrinsic": "^1.2.2",
"has": "^1.0.3", "has-tostringtag": "^1.0.0",
"has-tostringtag": "^1.0.0" "hasown": "^2.0.0"
}, },
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/es-shim-unscopables": { "node_modules/es-shim-unscopables": {
"version": "1.0.0", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
"integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"has": "^1.0.3" "hasown": "^2.0.0"
} }
}, },
"node_modules/es-to-primitive": { "node_modules/es-to-primitive": {
@@ -1376,18 +1383,19 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.51.0", "version": "8.52.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
"integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2", "@eslint/eslintrc": "^2.1.2",
"@eslint/js": "8.51.0", "@eslint/js": "8.52.0",
"@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4", "ajv": "^6.12.4",
"chalk": "^4.0.0", "chalk": "^4.0.0",
"cross-spawn": "^7.0.2", "cross-spawn": "^7.0.2",
@@ -1430,12 +1438,12 @@
} }
}, },
"node_modules/eslint-config-next": { "node_modules/eslint-config-next": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.0.tgz",
"integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", "integrity": "sha512-jtXeE+/pGQ3h9n11QyyuPN50kO13GO5XvjU5ZRq6W+XTpOMjyobWmK2s7aowy0FtzA49krJzYzEU9s1RMwoJ6g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@next/eslint-plugin-next": "13.5.6", "@next/eslint-plugin-next": "14.0.0",
"@rushstack/eslint-patch": "^1.3.3", "@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
"eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-node": "^0.3.6",
@@ -1527,26 +1535,26 @@
} }
}, },
"node_modules/eslint-plugin-import": { "node_modules/eslint-plugin-import": {
"version": "2.28.1", "version": "2.29.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
"integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"array-includes": "^3.1.6", "array-includes": "^3.1.7",
"array.prototype.findlastindex": "^1.2.2", "array.prototype.findlastindex": "^1.2.3",
"array.prototype.flat": "^1.3.1", "array.prototype.flat": "^1.3.2",
"array.prototype.flatmap": "^1.3.1", "array.prototype.flatmap": "^1.3.2",
"debug": "^3.2.7", "debug": "^3.2.7",
"doctrine": "^2.1.0", "doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.7", "eslint-import-resolver-node": "^0.3.9",
"eslint-module-utils": "^2.8.0", "eslint-module-utils": "^2.8.0",
"has": "^1.0.3", "hasown": "^2.0.0",
"is-core-module": "^2.13.0", "is-core-module": "^2.13.1",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
"minimatch": "^3.1.2", "minimatch": "^3.1.2",
"object.fromentries": "^2.0.6", "object.fromentries": "^2.0.7",
"object.groupby": "^1.0.0", "object.groupby": "^1.0.1",
"object.values": "^1.1.6", "object.values": "^1.1.7",
"semver": "^6.3.1", "semver": "^6.3.1",
"tsconfig-paths": "^3.14.2" "tsconfig-paths": "^3.14.2"
}, },
@@ -1987,15 +1995,15 @@
} }
}, },
"node_modules/get-intrinsic": { "node_modules/get-intrinsic": {
"version": "1.2.1", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"function-bind": "^1.1.1", "function-bind": "^1.1.2",
"has": "^1.0.3",
"has-proto": "^1.0.1", "has-proto": "^1.0.1",
"has-symbols": "^1.0.3" "has-symbols": "^1.0.3",
"hasown": "^2.0.0"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
@@ -2167,12 +2175,12 @@
} }
}, },
"node_modules/has-property-descriptors": { "node_modules/has-property-descriptors": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"get-intrinsic": "^1.1.1" "get-intrinsic": "^1.2.2"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
@@ -2217,6 +2225,18 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/hasown": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ignore": { "node_modules/ignore": {
"version": "5.2.4", "version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -2268,13 +2288,13 @@
"dev": true "dev": true
}, },
"node_modules/internal-slot": { "node_modules/internal-slot": {
"version": "1.0.5", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
"integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"get-intrinsic": "^1.2.0", "get-intrinsic": "^1.2.2",
"has": "^1.0.3", "hasown": "^2.0.0",
"side-channel": "^1.0.4" "side-channel": "^1.0.4"
}, },
"engines": { "engines": {
@@ -2363,12 +2383,12 @@
} }
}, },
"node_modules/is-core-module": { "node_modules/is-core-module": {
"version": "2.13.0", "version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"has": "^1.0.3" "hasown": "^2.0.0"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
@@ -2883,11 +2903,11 @@
"dev": true "dev": true
}, },
"node_modules/next": { "node_modules/next": {
"version": "13.5.6", "version": "14.0.0",
"resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", "resolved": "https://registry.npmjs.org/next/-/next-14.0.0.tgz",
"integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", "integrity": "sha512-J0jHKBJpB9zd4+c153sair0sz44mbaCHxggs8ryVXSFBuBqJ8XdE9/ozoV85xGh2VnSjahwntBZZgsihL9QznA==",
"dependencies": { "dependencies": {
"@next/env": "13.5.6", "@next/env": "14.0.0",
"@swc/helpers": "0.5.2", "@swc/helpers": "0.5.2",
"busboy": "1.6.0", "busboy": "1.6.0",
"caniuse-lite": "^1.0.30001406", "caniuse-lite": "^1.0.30001406",
@@ -2899,18 +2919,18 @@
"next": "dist/bin/next" "next": "dist/bin/next"
}, },
"engines": { "engines": {
"node": ">=16.14.0" "node": ">=18.17.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@next/swc-darwin-arm64": "13.5.6", "@next/swc-darwin-arm64": "14.0.0",
"@next/swc-darwin-x64": "13.5.6", "@next/swc-darwin-x64": "14.0.0",
"@next/swc-linux-arm64-gnu": "13.5.6", "@next/swc-linux-arm64-gnu": "14.0.0",
"@next/swc-linux-arm64-musl": "13.5.6", "@next/swc-linux-arm64-musl": "14.0.0",
"@next/swc-linux-x64-gnu": "13.5.6", "@next/swc-linux-x64-gnu": "14.0.0",
"@next/swc-linux-x64-musl": "13.5.6", "@next/swc-linux-x64-musl": "14.0.0",
"@next/swc-win32-arm64-msvc": "13.5.6", "@next/swc-win32-arm64-msvc": "14.0.0",
"@next/swc-win32-ia32-msvc": "13.5.6", "@next/swc-win32-ia32-msvc": "14.0.0",
"@next/swc-win32-x64-msvc": "13.5.6" "@next/swc-win32-x64-msvc": "14.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@opentelemetry/api": "^1.1.0", "@opentelemetry/api": "^1.1.0",
@@ -2970,9 +2990,9 @@
} }
}, },
"node_modules/object-inspect": { "node_modules/object-inspect": {
"version": "1.13.0", "version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
"dev": true, "dev": true,
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
@@ -3633,6 +3653,21 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/set-function-length": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
"integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
"dev": true,
"dependencies": {
"define-data-property": "^1.1.1",
"get-intrinsic": "^1.2.1",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": { "node_modules/set-function-name": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
@@ -3894,9 +3929,9 @@
} }
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "3.3.3", "version": "3.3.5",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
"integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
@@ -3904,10 +3939,10 @@
"chokidar": "^3.5.3", "chokidar": "^3.5.3",
"didyoumean": "^1.2.2", "didyoumean": "^1.2.2",
"dlv": "^1.1.3", "dlv": "^1.1.3",
"fast-glob": "^3.2.12", "fast-glob": "^3.3.0",
"glob-parent": "^6.0.2", "glob-parent": "^6.0.2",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
"jiti": "^1.18.2", "jiti": "^1.19.1",
"lilconfig": "^2.1.0", "lilconfig": "^2.1.0",
"micromatch": "^4.0.5", "micromatch": "^4.0.5",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
@@ -4131,9 +4166,9 @@
} }
}, },
"node_modules/undici-types": { "node_modules/undici-types": {
"version": "5.25.3", "version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true "dev": true
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
@@ -4266,13 +4301,13 @@
} }
}, },
"node_modules/which-typed-array": { "node_modules/which-typed-array": {
"version": "1.1.11", "version": "1.1.13",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
"integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"available-typed-arrays": "^1.0.5", "available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2", "call-bind": "^1.0.4",
"for-each": "^0.3.3", "for-each": "^0.3.3",
"gopd": "^1.0.1", "gopd": "^1.0.1",
"has-tostringtag": "^1.0.0" "has-tostringtag": "^1.0.0"

View File

@@ -11,7 +11,7 @@
"dependencies": { "dependencies": {
"react": "^18", "react": "^18",
"react-dom": "^18", "react-dom": "^18",
"next": "13.5.6" "next": "14.0.0"
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5", "typescript": "^5",
@@ -22,6 +22,6 @@
"postcss": "^8", "postcss": "^8",
"tailwindcss": "^3", "tailwindcss": "^3",
"eslint": "^8", "eslint": "^8",
"eslint-config-next": "13.5.6" "eslint-config-next": "14.0.0"
} }
} }

View File

@@ -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

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,12 @@
# @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 ## 1.0.13
### Patch Changes ### Patch Changes

View File

@@ -428,7 +428,8 @@ export type ProjectLinkedError = {
| 'TEAM_DELETED' | 'TEAM_DELETED'
| 'PATH_IS_FILE' | 'PATH_IS_FILE'
| 'INVALID_ROOT_DIRECTORY' | 'INVALID_ROOT_DIRECTORY'
| 'MISSING_PROJECT_SETTINGS'; | 'MISSING_PROJECT_SETTINGS'
| 'TOO_MANY_PROJECTS';
}; };
export type ProjectLinkResult = export type ProjectLinkResult =

View File

@@ -1,7 +1,7 @@
{ {
"private": true, "private": true,
"name": "@vercel-internals/types", "name": "@vercel-internals/types",
"version": "1.0.13", "version": "1.0.14",
"types": "index.d.ts", "types": "index.d.ts",
"main": "index.d.ts", "main": "index.d.ts",
"files": [ "files": [
@@ -10,7 +10,7 @@
"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.2", "@vercel/build-utils": "7.2.3",
"@vercel/routing-utils": "3.1.0" "@vercel/routing-utils": "3.1.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -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.15", "turbo": "1.10.16",
"typescript": "4.9.5" "typescript": "4.9.5"
}, },
"scripts": { "scripts": {

View File

@@ -1,5 +1,11 @@
# @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 ## 7.2.2
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/build-utils", "name": "@vercel/build-utils",
"version": "7.2.2", "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",
@@ -33,7 +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",
"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",

View File

@@ -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;
} }

View File

@@ -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,

View File

@@ -1,5 +1,37 @@
# vercel # vercel
## 32.5.3
### Patch Changes
- Handle `TooManyProjects` error in places where projects are created ([#10807](https://github.com/vercel/vercel/pull/10807))
- Updated dependencies [[`89c1e0323`](https://github.com/vercel/vercel/commit/89c1e032335d9ec0fcfc84fe499cf004fe73fafc), [`fd29b966d`](https://github.com/vercel/vercel/commit/fd29b966d39776318b0e11a53909edb43d1fc5f2)]:
- @vercel/node@3.0.9
- @vercel/next@4.0.14
## 32.5.2
### Patch Changes
- Updated dependencies [[`c94a082f6`](https://github.com/vercel/vercel/commit/c94a082f6bb1b84eaf420ac47ea83640dc83668e)]:
- @vercel/next@4.0.13
## 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 ## 32.5.0
### Minor Changes ### Minor Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "vercel", "name": "vercel",
"version": "32.5.0", "version": "32.5.3",
"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",
@@ -31,22 +31,22 @@
"node": ">= 16" "node": ">= 16"
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "7.2.2", "@vercel/build-utils": "7.2.3",
"@vercel/fun": "1.1.0", "@vercel/fun": "1.1.0",
"@vercel/go": "3.0.3", "@vercel/go": "3.0.3",
"@vercel/hydrogen": "1.0.1", "@vercel/hydrogen": "1.0.1",
"@vercel/next": "4.0.11", "@vercel/next": "4.0.14",
"@vercel/node": "3.0.7", "@vercel/node": "3.0.9",
"@vercel/python": "4.1.0", "@vercel/python": "4.1.0",
"@vercel/redwood": "2.0.5", "@vercel/redwood": "2.0.5",
"@vercel/remix-builder": "2.0.10", "@vercel/remix-builder": "2.0.11",
"@vercel/ruby": "2.0.2", "@vercel/ruby": "2.0.2",
"@vercel/static-build": "2.0.9", "@vercel/static-build": "2.0.10",
"chokidar": "3.3.1" "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",
@@ -88,11 +88,11 @@
"@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.13", "@vercel-internals/types": "1.0.14",
"@vercel/client": "13.0.6", "@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.2", "@vercel/fs-detectors": "5.1.3",
"@vercel/routing-utils": "3.1.0", "@vercel/routing-utils": "3.1.0",
"ajv": "6.12.2", "ajv": "6.12.2",
"alpha-sort": "2.0.1", "alpha-sort": "2.0.1",

View File

@@ -3,6 +3,7 @@ import ms from 'ms';
import Client from '../../util/client'; import Client from '../../util/client';
import { isAPIError } from '../../util/errors-ts'; import { isAPIError } from '../../util/errors-ts';
import { getCommandName } from '../../util/pkg-name'; import { getCommandName } from '../../util/pkg-name';
import createProject from '../../util/projects/create-project';
export default async function add( export default async function add(
client: Client, client: Client,
@@ -32,12 +33,14 @@ export default async function add(
const start = Date.now(); const start = Date.now();
const [name] = args; const [name] = args;
try { try {
await client.fetch('/projects', { await createProject(client, { name });
method: 'POST',
body: { name },
});
} catch (err: unknown) { } catch (err: unknown) {
if (isAPIError(err) && err.code === 'too_many_projects') {
output.prettyError(err);
return 1;
}
if (isAPIError(err) && err.status === 409) { if (isAPIError(err) && err.status === 409) {
// project already exists, so we can // project already exists, so we can
// show a success message // show a success message

View File

@@ -426,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`,

View File

@@ -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);

View File

@@ -21,6 +21,7 @@ import createProject from '../projects/create-project';
import { detectProjects } from '../projects/detect-projects'; import { detectProjects } from '../projects/detect-projects';
import { repoInfoToUrl } from '../git/repo-info-to-url'; import { repoInfoToUrl } from '../git/repo-info-to-url';
import { connectGitProvider, parseRepoUrl } from '../git/connect-git-provider'; import { connectGitProvider, parseRepoUrl } from '../git/connect-git-provider';
import { isAPIError } from '../errors-ts';
const home = homedir(); const home = homedir();
@@ -283,6 +284,7 @@ export async function ensureRepoLink(
output.spinner(`Creating new Project: ${orgAndName}`); output.spinner(`Creating new Project: ${orgAndName}`);
delete selection.newProject; delete selection.newProject;
if (!selection.rootDirectory) delete selection.rootDirectory; if (!selection.rootDirectory) delete selection.rootDirectory;
try {
const project = (selected[i] = await createProject(client, { const project = (selected[i] = await createProject(client, {
...selection, ...selection,
framework: selection.framework.slug, framework: selection.framework.slug,
@@ -301,6 +303,12 @@ export async function ensureRepoLink(
{ fallback: false } { fallback: false }
)}` )}`
); );
} catch (err) {
if (isAPIError(err) && err.code === 'too_many_projects') {
output.prettyError(err);
return;
}
}
} }
repoConfig = { repoConfig = {

View File

@@ -263,6 +263,10 @@ export default async function setupAndLink(
return { status: 'linked', org, project }; return { status: 'linked', org, project };
} catch (err) { } catch (err) {
if (isAPIError(err) && err.code === 'too_many_projects') {
output.prettyError(err);
return { status: 'error', exitCode: 1, reason: 'TOO_MANY_PROJECTS' };
}
handleError(err); handleError(err);
return { status: 'error', exitCode: 1 }; return { status: 'error', exitCode: 1 };

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@ const { satisfies } = require('semver');
const stripAnsi = require('strip-ansi'); const stripAnsi = require('strip-ansi');
const { const {
fetchCachedToken, fetchCachedToken,
disableSSO,
} = require('../../../../test/lib/deployment/now-deploy'); } = require('../../../../test/lib/deployment/now-deploy');
const { spawnSync, execFileSync } = require('child_process'); const { spawnSync, execFileSync } = require('child_process');
@@ -398,6 +399,9 @@ function testFixtureStdio(
// Expect the deploy succeeded with exit of 0; // Expect the deploy succeeded with exit of 0;
expect(deployResult.exitCode).toBe(0); expect(deployResult.exitCode).toBe(0);
deploymentUrl = new URL(deployResult.stdout).host; deploymentUrl = new URL(deployResult.stdout).host;
// Disable the Project SSO Protection
await disableSSO(deployResult.stdout, true);
} finally { } finally {
if (!hasGitignore) { if (!hasGitignore) {
await fs.remove(gitignore); await fs.remove(gitignore);

View File

@@ -5,7 +5,10 @@ import fetch, { RequestInit } from 'node-fetch';
import retry from 'async-retry'; import retry from 'async-retry';
import fs from 'fs-extra'; import fs from 'fs-extra';
import sleep from '../src/util/sleep'; import sleep from '../src/util/sleep';
import { fetchTokenWithRetry } from '../../../test/lib/deployment/now-deploy'; import {
disableSSO,
fetchTokenWithRetry,
} from '../../../test/lib/deployment/now-deploy';
import waitForPrompt from './helpers/wait-for-prompt'; import waitForPrompt from './helpers/wait-for-prompt';
import { listTmpDirs } from './helpers/get-tmp-dir'; import { listTmpDirs } from './helpers/get-tmp-dir';
import getGlobalDir from './helpers/get-global-dir'; import getGlobalDir from './helpers/get-global-dir';
@@ -393,6 +396,8 @@ test('default command should work with --cwd option', async () => {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const url = stdout; const url = stdout;
await disableSSO(url, false);
const deploymentResult = await fetch(`${url}/README.md`); const deploymentResult = await fetch(`${url}/README.md`);
const body = await deploymentResult.text(); const body = await deploymentResult.text();
expect(body).toEqual( expect(body).toEqual(
@@ -421,6 +426,8 @@ test('should allow deploying a directory that was built with a target environmen
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const url = stdout; const url = stdout;
await disableSSO(url, false);
const deploymentResult = await fetch(`${url}/README.md`); const deploymentResult = await fetch(`${url}/README.md`);
const body = await deploymentResult.text(); const body = await deploymentResult.text();
expect(body).toEqual( expect(body).toEqual(
@@ -447,6 +454,8 @@ test('should allow deploying a directory that was prebuilt, but has no builds.js
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const url = stdout; const url = stdout;
await disableSSO(url, false);
const deploymentResult = await fetch(`${url}/README.md`); const deploymentResult = await fetch(`${url}/README.md`);
const body = await deploymentResult.text(); const body = await deploymentResult.text();
expect(body).toEqual('readme contents for build-output-api-raw'); expect(body).toEqual('readme contents for build-output-api-raw');
@@ -509,6 +518,7 @@ test('deploy using only now.json with `redirects` defined', async () => {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const url = stdout; const url = stdout;
await disableSSO(url, false);
const res = await fetch(`${url}/foo/bar`, { redirect: 'manual' }); const res = await fetch(`${url}/foo/bar`, { redirect: 'manual' });
const location = res.headers.get('location'); const location = res.headers.get('location');
expect(location).toBe('https://example.com/foo/bar'); expect(location).toBe('https://example.com/foo/bar');
@@ -530,6 +540,7 @@ test('deploy using --local-config flag v2', async () => {
const { host } = new URL(stdout); const { host } = new URL(stdout);
expect(host).toMatch(/secondary/gm); expect(host).toMatch(/secondary/gm);
await disableSSO(host, false);
const testRes = await fetch(`https://${host}/test-${contextName}.html`); const testRes = await fetch(`https://${host}/test-${contextName}.html`);
const testText = await testRes.text(); const testText = await testRes.text();
@@ -580,6 +591,7 @@ test('deploy using --local-config flag above target', async () => {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const { host } = new URL(stdout); const { host } = new URL(stdout);
await disableSSO(host, false);
const testRes = await fetch(`https://${host}/index.html`); const testRes = await fetch(`https://${host}/index.html`);
const testText = await testRes.text(); const testText = await testRes.text();
@@ -801,6 +813,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
}); });
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const { host } = new URL(stdout); const { host } = new URL(stdout);
await disableSSO(host, false);
const apiUrl = `https://${host}/api/get-env`; const apiUrl = `https://${host}/api/get-env`;
const apiRes = await fetch(apiUrl); const apiRes = await fetch(apiUrl);

View File

@@ -11,7 +11,10 @@ import fs, {
mkdir, mkdir,
} from 'fs-extra'; } from 'fs-extra';
import sleep from '../src/util/sleep'; import sleep from '../src/util/sleep';
import { fetchTokenWithRetry } from '../../../test/lib/deployment/now-deploy'; import {
disableSSO,
fetchTokenWithRetry,
} from '../../../test/lib/deployment/now-deploy';
import waitForPrompt from './helpers/wait-for-prompt'; import waitForPrompt from './helpers/wait-for-prompt';
import { execCli } from './helpers/exec'; import { execCli } from './helpers/exec';
import getGlobalDir from './helpers/get-global-dir'; import getGlobalDir from './helpers/get-global-dir';
@@ -327,8 +330,11 @@ test('should show prompts to set up project during first deploy', async () => {
'README.txt' 'README.txt'
).toBe(true); ).toBe(true);
const { host, href } = new URL(output.stdout);
await disableSSO(host, false);
// Send a test request to the deployment // Send a test request to the deployment
const response = await fetch(new URL(output.stdout)); const response = await fetch(href);
const text = await response.text(); const text = await response.text();
expect(text).toContain('<h1>custom hello</h1>'); expect(text).toContain('<h1>custom hello</h1>');
@@ -640,7 +646,10 @@ test('use `rootDirectory` from project when deploying', async () => {
const secondResult = await execCli(binaryPath, [directory, '--public']); const secondResult = await execCli(binaryPath, [directory, '--public']);
expect(secondResult.exitCode, formatOutput(secondResult)).toBe(0); expect(secondResult.exitCode, formatOutput(secondResult)).toBe(0);
const pageResponse1 = await fetch(secondResult.stdout); const { host, href } = new URL(secondResult.stdout);
await disableSSO(host, false);
const pageResponse1 = await fetch(href);
expect(pageResponse1.status).toBe(200); expect(pageResponse1.status).toBe(200);
expect(await pageResponse1.text()).toMatch(/I am a website/gm); expect(await pageResponse1.text()).toMatch(/I am a website/gm);
@@ -722,6 +731,7 @@ test('deploys with only now.json and README.md', async () => {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
const { host } = new URL(stdout); const { host } = new URL(stdout);
await disableSSO(host, false);
const res = await fetch(`https://${host}/README.md`); const res = await fetch(`https://${host}/README.md`);
const text = await res.text(); const text = await res.text();
expect(text).toMatch(/readme contents/); expect(text).toMatch(/readme contents/);
@@ -744,6 +754,7 @@ test('deploys with only vercel.json and README.md', async () => {
); );
const { host } = new URL(stdout); const { host } = new URL(stdout);
await disableSSO(host, false);
const res = await fetch(`https://${host}/README.md`); const res = await fetch(`https://${host}/README.md`);
const text = await res.text(); const text = await res.text();
expect(text).toMatch(/readme contents/); expect(text).toMatch(/readme contents/);
@@ -821,14 +832,16 @@ test('deploy pnpm twice using pnp and symlink=false', async () => {
await remove(path.join(directory, '.vercel')); await remove(path.join(directory, '.vercel'));
function deploy() { async function deploy() {
return execCli(binaryPath, [ const res = await execCli(binaryPath, [
directory, directory,
'--name', '--name',
session, session,
'--public', '--public',
'--yes', '--yes',
]); ]);
await disableSSO(res.stdout, false);
return res;
} }
let { exitCode, stdout, stderr } = await deploy(); let { exitCode, stdout, stderr } = await deploy();
@@ -1243,6 +1256,8 @@ test('vercel.json configuration overrides in a new project prompt user and merge
const deployment = await vc; const deployment = await vc;
expect(deployment.exitCode, formatOutput(deployment)).toBe(0); expect(deployment.exitCode, formatOutput(deployment)).toBe(0);
// assert the command were executed // assert the command were executed
await disableSSO(deployment.stdout, false);
let page = await fetch(deployment.stdout); let page = await fetch(deployment.stdout);
let text = await page.text(); let text = await page.text();
expect(text).toBe('1\n'); expect(text).toBe('1\n');
@@ -1273,7 +1288,9 @@ test('vercel.json configuration overrides in an existing project do not prompt u
// auto-confirm this deployment // auto-confirm this deployment
let deployment = await deploy(true); let deployment = await deploy(true);
let page = await fetch(deployment.stdout); const { host, href } = new URL(deployment.stdout);
await disableSSO(host, false);
let page = await fetch(href);
let text = await page.text(); let text = await page.text();
expect(text).toBe('0'); expect(text).toBe('0');

View File

@@ -14,7 +14,10 @@ import { logo } from '../src/util/pkg-name';
import sleep from '../src/util/sleep'; import sleep from '../src/util/sleep';
import humanizePath from '../src/util/humanize-path'; import humanizePath from '../src/util/humanize-path';
import pkg from '../package.json'; import pkg from '../package.json';
import { fetchTokenWithRetry } from '../../../test/lib/deployment/now-deploy'; import {
disableSSO,
fetchTokenWithRetry,
} from '../../../test/lib/deployment/now-deploy';
import waitForPrompt from './helpers/wait-for-prompt'; import waitForPrompt from './helpers/wait-for-prompt';
import { getNewTmpDir, listTmpDirs } from './helpers/get-tmp-dir'; import { getNewTmpDir, listTmpDirs } from './helpers/get-tmp-dir';
import getGlobalDir from './helpers/get-global-dir'; import getGlobalDir from './helpers/get-global-dir';
@@ -311,6 +314,7 @@ test('should add secret with hyphen prefix', async () => {
expect(targetCall.exitCode, formatOutput(targetCall)).toBe(0); expect(targetCall.exitCode, formatOutput(targetCall)).toBe(0);
const { host } = new URL(targetCall.stdout); const { host } = new URL(targetCall.stdout);
await disableSSO(host, false);
const response = await fetch(`https://${host}`); const response = await fetch(`https://${host}`);
expect(response.status).toBe(200); expect(response.status).toBe(200);
expect(await response.text()).toBe(`${value}\n`); expect(await response.text()).toBe(`${value}\n`);
@@ -339,6 +343,7 @@ test('ignore files specified in .nowignore', async () => {
}); });
const { host } = new URL(targetCall.stdout); const { host } = new URL(targetCall.stdout);
await disableSSO(host, false);
const ignoredFile = await fetch(`https://${host}/ignored.txt`); const ignoredFile = await fetch(`https://${host}/ignored.txt`);
expect(ignoredFile.status).toBe(404); expect(ignoredFile.status).toBe(404);
@@ -355,6 +360,7 @@ test('ignore files specified in .nowignore via allowlist', async () => {
}); });
const { host } = new URL(targetCall.stdout); const { host } = new URL(targetCall.stdout);
await disableSSO(host, false);
const ignoredFile = await fetch(`https://${host}/ignored.txt`); const ignoredFile = await fetch(`https://${host}/ignored.txt`);
expect(ignoredFile.status).toBe(404); expect(ignoredFile.status).toBe(404);
@@ -551,6 +557,7 @@ test('ensure we render a warning for deployments with no files', async () => {
// Ensure the exit code is right // Ensure the exit code is right
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
await disableSSO(host, false);
// Send a test request to the deployment // Send a test request to the deployment
const res = await fetch(href); const res = await fetch(href);
@@ -1014,6 +1021,7 @@ test('try to revert a deployment and assign the automatic aliases', async () =>
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
await disableSSO(deploymentUrl, false);
await waitForDeployment(deploymentUrl); await waitForDeployment(deploymentUrl);
await sleep(20000); await sleep(20000);
@@ -1028,6 +1036,7 @@ test('try to revert a deployment and assign the automatic aliases', async () =>
'--yes', '--yes',
]); ]);
const deploymentUrl = stdout; const deploymentUrl = stdout;
await disableSSO(deploymentUrl, false);
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
@@ -1047,6 +1056,7 @@ test('try to revert a deployment and assign the automatic aliases', async () =>
'--yes', '--yes',
]); ]);
const deploymentUrl = stdout; const deploymentUrl = stdout;
await disableSSO(deploymentUrl, false);
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0); expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
@@ -1318,6 +1328,7 @@ test('deploy a Lambda with 128MB of memory', async () => {
expect(output.exitCode, formatOutput(output)).toBe(0); expect(output.exitCode, formatOutput(output)).toBe(0);
const { host: url } = new URL(output.stdout); const { host: url } = new URL(output.stdout);
await disableSSO(url, false);
const response = await fetch('https://' + url + '/api/memory'); const response = await fetch('https://' + url + '/api/memory');
expect(response.status).toBe(200); expect(response.status).toBe(200);
@@ -1344,6 +1355,7 @@ test('deploy a Lambda with 3 seconds of maxDuration', async () => {
expect(output.exitCode, formatOutput(output)).toBe(0); expect(output.exitCode, formatOutput(output)).toBe(0);
const url = new URL(output.stdout); const url = new URL(output.stdout);
await disableSSO(url.host, false);
// Should time out // Should time out
url.pathname = '/api/wait-for/5'; url.pathname = '/api/wait-for/5';
@@ -1382,6 +1394,7 @@ test('deploy a Lambda with a specific runtime', async () => {
expect(output.exitCode, formatOutput(output)).toBe(0); expect(output.exitCode, formatOutput(output)).toBe(0);
const url = new URL(output.stdout); const url = new URL(output.stdout);
await disableSSO(url.host, false);
const res = await fetch(`${url}/api/test`); const res = await fetch(`${url}/api/test`);
const text = await res.text(); const text = await res.text();
expect(text).toBe('Hello from PHP'); expect(text).toBe('Hello from PHP');
@@ -1412,6 +1425,7 @@ test('use build-env', async () => {
// Test if the output is really a URL // Test if the output is really a URL
const deploymentUrl = pickUrl(stdout); const deploymentUrl = pickUrl(stdout);
const { href } = new URL(deploymentUrl); const { href } = new URL(deploymentUrl);
await disableSSO(deploymentUrl, false);
await waitForDeployment(href); await waitForDeployment(href);

View File

@@ -357,7 +357,7 @@ export function useProject(
pagination: null, pagination: null,
}); });
}); });
client.scenario.post(`/projects`, (req, res) => { client.scenario.post(`/v1/projects`, (req, res) => {
const { name } = req.body; const { name } = req.body;
if (name === project.name) { if (name === project.name) {
res.json(project); res.json(project);

View File

@@ -1,5 +1,12 @@
# @vercel/client # @vercel/client
## 13.0.7
### Patch Changes
- Updated dependencies [[`0861dc8fb`](https://github.com/vercel/vercel/commit/0861dc8fbcea1037626b00664a4b6c22f1b0a7ed)]:
- @vercel/build-utils@7.2.3
## 13.0.6 ## 13.0.6
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/client", "name": "@vercel/client",
"version": "13.0.6", "version": "13.0.7",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"homepage": "https://vercel.com", "homepage": "https://vercel.com",
@@ -37,7 +37,7 @@
"typescript": "4.9.5" "typescript": "4.9.5"
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "7.2.2", "@vercel/build-utils": "7.2.3",
"@vercel/routing-utils": "3.1.0", "@vercel/routing-utils": "3.1.0",
"@zeit/fetch": "5.2.0", "@zeit/fetch": "5.2.0",
"async-retry": "1.2.3", "async-retry": "1.2.3",

View File

@@ -226,6 +226,12 @@ export const fetch = async (
url = `${opts.apiUrl || 'https://api.vercel.com'}${url}`; url = `${opts.apiUrl || 'https://api.vercel.com'}${url}`;
delete opts.apiUrl; delete opts.apiUrl;
const { VERCEL_TEAM_ID } = process.env;
if (VERCEL_TEAM_ID) {
url += `${url.includes('?') ? '&' : '?'}teamId=${VERCEL_TEAM_ID}`;
}
if (opts.teamId) { if (opts.teamId) {
const parsedUrl = new URL(url); const parsedUrl = new URL(url);
parsedUrl.searchParams.set('teamId', opts.teamId); parsedUrl.searchParams.set('teamId', opts.teamId);

View File

@@ -4,6 +4,8 @@ import { generateNewToken } from './common';
import { fetch, getApiDeploymentsUrl } from '../src/utils'; import { fetch, getApiDeploymentsUrl } from '../src/utils';
import { Deployment } from './types'; import { Deployment } from './types';
import { createDeployment } from '../src/index'; import { createDeployment } from '../src/index';
// @ts-expect-error non-TS
import { disableSSO } from '../../../test/lib/deployment/now-deploy';
describe('create v2 deployment', () => { describe('create v2 deployment', () => {
let deployment: Deployment; let deployment: Deployment;
@@ -30,6 +32,7 @@ describe('create v2 deployment', () => {
for await (const event of createDeployment( for await (const event of createDeployment(
{ {
token, token,
teamId: process.env.VERCEL_TEAM_ID,
path: path.resolve(__dirname, 'fixtures', 'v2'), path: path.resolve(__dirname, 'fixtures', 'v2'),
}, },
{ {
@@ -42,6 +45,7 @@ describe('create v2 deployment', () => {
if (event.type === 'ready') { if (event.type === 'ready') {
deployment = event.payload; deployment = event.payload;
await disableSSO(deployment.id);
break; break;
} }
} }
@@ -51,6 +55,7 @@ describe('create v2 deployment', () => {
for await (const event of createDeployment( for await (const event of createDeployment(
{ {
token, token,
teamId: process.env.VERCEL_TEAM_ID,
path: path.resolve(__dirname, 'fixtures', 'v2'), path: path.resolve(__dirname, 'fixtures', 'v2'),
}, },
{ {
@@ -63,6 +68,7 @@ describe('create v2 deployment', () => {
if (event.type === 'ready') { if (event.type === 'ready') {
deployment = event.payload; deployment = event.payload;
await disableSSO(deployment.id);
break; break;
} }
} }
@@ -72,6 +78,7 @@ describe('create v2 deployment', () => {
for await (const event of createDeployment( for await (const event of createDeployment(
{ {
token, token,
teamId: process.env.VERCEL_TEAM_ID,
path: path.resolve(__dirname, 'fixtures', 'v2'), path: path.resolve(__dirname, 'fixtures', 'v2'),
}, },
{ {
@@ -80,6 +87,7 @@ describe('create v2 deployment', () => {
)) { )) {
if (event.type === 'ready') { if (event.type === 'ready') {
deployment = event.payload; deployment = event.payload;
await disableSSO(deployment.id);
expect(deployment.readyState).toEqual('READY'); expect(deployment.readyState).toEqual('READY');
break; break;
} }
@@ -91,6 +99,7 @@ describe('create v2 deployment', () => {
for await (const event of createDeployment( for await (const event of createDeployment(
{ {
token, token,
teamId: process.env.VERCEL_TEAM_ID,
path: path.resolve(__dirname, 'fixtures', 'v2-file-permissions'), path: path.resolve(__dirname, 'fixtures', 'v2-file-permissions'),
skipAutoDetectionConfirmation: true, skipAutoDetectionConfirmation: true,
}, },
@@ -105,6 +114,7 @@ describe('create v2 deployment', () => {
)) { )) {
if (event.type === 'ready') { if (event.type === 'ready') {
deployment = event.payload; deployment = event.payload;
await disableSSO(deployment.id);
break; break;
} else if (event.type === 'error') { } else if (event.type === 'error') {
error = event.payload; error = event.payload;
@@ -129,6 +139,7 @@ describe('create v2 deployment', () => {
for await (const event of createDeployment( for await (const event of createDeployment(
{ {
token, token,
teamId: process.env.VERCEL_TEAM_ID,
path: path.resolve(__dirname, 'fixtures', 'nowignore'), path: path.resolve(__dirname, 'fixtures', 'nowignore'),
skipAutoDetectionConfirmation: true, skipAutoDetectionConfirmation: true,
}, },
@@ -143,6 +154,7 @@ describe('create v2 deployment', () => {
)) { )) {
if (event.type === 'ready') { if (event.type === 'ready') {
deployment = event.payload; deployment = event.payload;
await disableSSO(deployment.id);
break; break;
} else if (event.type === 'error') { } else if (event.type === 'error') {
error = event.payload; error = event.payload;

View File

@@ -1,5 +1,11 @@
# @vercel/edge # @vercel/edge
## 1.1.1
### Patch Changes
- bump: edge-runtime ([#10712](https://github.com/vercel/vercel/pull/10712))
## 1.1.0 ## 1.1.0
### Minor Changes ### Minor Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/edge", "name": "@vercel/edge",
"version": "1.1.0", "version": "1.1.1",
"license": "Apache-2.0", "license": "Apache-2.0",
"main": "dist/index.js", "main": "dist/index.js",
"module": "dist/index.mjs", "module": "dist/index.mjs",
@@ -22,7 +22,7 @@
"type-check": "tsc --noEmit" "type-check": "tsc --noEmit"
}, },
"devDependencies": { "devDependencies": {
"@edge-runtime/jest-environment": "2.3.1", "@edge-runtime/jest-environment": "2.3.7",
"@types/jest": "27.4.1", "@types/jest": "27.4.1",
"jest-junit": "16.0.0", "jest-junit": "16.0.0",
"ts-node": "8.9.1", "ts-node": "8.9.1",

View File

@@ -1,5 +1,11 @@
# @vercel/error-utils # @vercel/error-utils
## 2.0.2
### Patch Changes
- use Node.js `util.types.isNativeError` for `isError` method ([#10764](https://github.com/vercel/vercel/pull/10764))
## 2.0.1 ## 2.0.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/error-utils", "name": "@vercel/error-utils",
"version": "2.0.1", "version": "2.0.2",
"description": "A collection of error utilities for vercel/vercel", "description": "A collection of error utilities for vercel/vercel",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@@ -1,3 +1,5 @@
import util from 'node:util';
export interface SpawnError extends NodeJS.ErrnoException { export interface SpawnError extends NodeJS.ErrnoException {
spawnargs: string[]; spawnargs: string[];
} }
@@ -12,23 +14,10 @@ export const isObject = (obj: unknown): obj is Record<string, unknown> =>
/** /**
* A type guard for `try...catch` errors. * A type guard for `try...catch` errors.
* * @deprecated use `require('node:util').types.isNativeError(error)` instead
* This function is based on:
* https://github.com/stdlib-js/assert-is-error
*/ */
export const isError = (error: unknown): error is Error => { export const isError = (error: unknown): error is Error => {
if (!isObject(error)) return false; return util.types.isNativeError(error);
// Check for `Error` objects instantiated within the current global context.
if (error instanceof Error) return true;
// Walk the prototype tree until we find a matching object.
while (error) {
if (Object.prototype.toString.call(error) === '[object Error]') return true;
error = Object.getPrototypeOf(error);
}
return false;
}; };
export const isErrnoException = ( export const isErrnoException = (

View File

@@ -1,6 +1,7 @@
{ {
"compilerOptions": { "compilerOptions": {
"outDir": "./dist", "outDir": "./dist",
"sourceMap": true,
"types": ["node", "jest"] "types": ["node", "jest"]
}, },
"extends": "../../tsconfig.base.json", "extends": "../../tsconfig.base.json",

View File

@@ -1,5 +1,14 @@
# @vercel/frameworks # @vercel/frameworks
## 2.0.3
### Patch Changes
- update Angular output path discovery ([#10678](https://github.com/vercel/vercel/pull/10678))
- Updated dependencies [[`34dd9c091`](https://github.com/vercel/vercel/commit/34dd9c0918585cf6d3b04bddd9158978b0b4192f)]:
- @vercel/error-utils@2.0.2
## 2.0.2 ## 2.0.2
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/frameworks", "name": "@vercel/frameworks",
"version": "2.0.2", "version": "2.0.3",
"main": "./dist/frameworks.js", "main": "./dist/frameworks.js",
"types": "./dist/frameworks.d.ts", "types": "./dist/frameworks.d.ts",
"files": [ "files": [
@@ -21,7 +21,7 @@
"dependencies": { "dependencies": {
"@iarna/toml": "2.2.3", "@iarna/toml": "2.2.3",
"js-yaml": "3.13.1", "js-yaml": "3.13.1",
"@vercel/error-utils": "2.0.1" "@vercel/error-utils": "2.0.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "27.4.1", "@types/jest": "27.4.1",

View File

@@ -1,5 +1,5 @@
import { join } from 'path'; import { join } from 'path';
import { promises } from 'fs'; import { existsSync, promises } from 'fs';
import { Framework } from './types'; import { Framework } from './types';
import { readConfigFile } from './read-config-file'; import { readConfigFile } from './read-config-file';
@@ -867,7 +867,11 @@ export const frameworks = [
// If there is only one file in it that is a dir we'll use it as dist dir // If there is only one file in it that is a dir we'll use it as dist dir
if (content.length === 1 && content[0].isDirectory()) { if (content.length === 1 && content[0].isDirectory()) {
return join(base, content[0].name); const potentialOutDir = join(base, content[0].name);
const potentialOutDirWithBrowser = join(potentialOutDir, 'browser');
return existsSync(potentialOutDirWithBrowser)
? potentialOutDirWithBrowser
: potentialOutDir;
} }
} catch (error) { } catch (error) {
console.error(`Error detecting output directory: `, error); console.error(`Error detecting output directory: `, error);

View File

@@ -1,5 +1,13 @@
# @vercel/fs-detectors # @vercel/fs-detectors
## 5.1.3
### Patch Changes
- Updated dependencies [[`306f653da`](https://github.com/vercel/vercel/commit/306f653da9de96ddf583cce35603229aa55c4e53), [`34dd9c091`](https://github.com/vercel/vercel/commit/34dd9c0918585cf6d3b04bddd9158978b0b4192f)]:
- @vercel/frameworks@2.0.3
- @vercel/error-utils@2.0.2
## 5.1.2 ## 5.1.2
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/fs-detectors", "name": "@vercel/fs-detectors",
"version": "5.1.2", "version": "5.1.3",
"description": "Vercel filesystem detectors", "description": "Vercel filesystem detectors",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
@@ -21,8 +21,8 @@
"type-check": "tsc --noEmit" "type-check": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@vercel/error-utils": "2.0.1", "@vercel/error-utils": "2.0.2",
"@vercel/frameworks": "2.0.2", "@vercel/frameworks": "2.0.3",
"@vercel/routing-utils": "3.1.0", "@vercel/routing-utils": "3.1.0",
"glob": "8.0.3", "glob": "8.0.3",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
@@ -37,7 +37,7 @@
"@types/minimatch": "3.0.5", "@types/minimatch": "3.0.5",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/semver": "7.3.10", "@types/semver": "7.3.10",
"@vercel/build-utils": "7.2.2", "@vercel/build-utils": "7.2.3",
"jest-junit": "16.0.0", "jest-junit": "16.0.0",
"typescript": "4.9.5" "typescript": "4.9.5"
} }

View File

@@ -1,5 +1,14 @@
# @vercel/gatsby-plugin-vercel-builder # @vercel/gatsby-plugin-vercel-builder
## 2.0.9
### Patch Changes
- Fix nested SSR routes ([#10751](https://github.com/vercel/vercel/pull/10751))
- Updated dependencies [[`0861dc8fb`](https://github.com/vercel/vercel/commit/0861dc8fbcea1037626b00664a4b6c22f1b0a7ed)]:
- @vercel/build-utils@7.2.3
## 2.0.8 ## 2.0.8
### Patch Changes ### Patch Changes

View File

@@ -0,0 +1,5 @@
/** @type {import('@ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/gatsby-plugin-vercel-builder", "name": "@vercel/gatsby-plugin-vercel-builder",
"version": "2.0.8", "version": "2.0.9",
"main": "dist/index.js", "main": "dist/index.js",
"files": [ "files": [
"dist", "dist",
@@ -14,11 +14,13 @@
}, },
"scripts": { "scripts": {
"build": "node ../../utils/build-builder.mjs", "build": "node ../../utils/build-builder.mjs",
"test": "jest --reporters=default --reporters=jest-junit --env node --verbose --bail --runInBand",
"test-unit": "pnpm test test/unit.*test.*",
"type-check": "tsc --noEmit" "type-check": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "0.25.24", "@sinclair/typebox": "0.25.24",
"@vercel/build-utils": "7.2.2", "@vercel/build-utils": "7.2.3",
"@vercel/routing-utils": "3.1.0", "@vercel/routing-utils": "3.1.0",
"esbuild": "0.14.47", "esbuild": "0.14.47",
"etag": "1.8.1", "etag": "1.8.1",
@@ -27,6 +29,7 @@
"devDependencies": { "devDependencies": {
"@types/etag": "1.8.0", "@types/etag": "1.8.0",
"@types/fs-extra": "11.0.1", "@types/fs-extra": "11.0.1",
"@types/jest": "27.5.1",
"@types/node": "14.18.33", "@types/node": "14.18.33",
"@types/react": "18.0.26", "@types/react": "18.0.26",
"jest-junit": "16.0.0", "jest-junit": "16.0.0",

View File

@@ -17,9 +17,11 @@ import type {
export const writeHandler = async ({ export const writeHandler = async ({
outDir, outDir,
handlerFile, handlerFile,
prefix = '',
}: { }: {
outDir: string; outDir: string;
handlerFile: string; handlerFile: string;
prefix?: string;
}) => { }) => {
const { major } = await getNodeVersion(process.cwd()); const { major } = await getNodeVersion(process.cwd());
@@ -35,6 +37,7 @@ export const writeHandler = async ({
minify: true, minify: true,
define: { define: {
'process.env.NODE_ENV': "'production'", 'process.env.NODE_ENV': "'production'",
vercel_pathPrefix: JSON.stringify(prefix),
}, },
}); });
} catch (e: any) { } catch (e: any) {

View File

@@ -37,7 +37,7 @@ export async function createServerlessFunctions(
await ensureDir(functionDir); await ensureDir(functionDir);
await Promise.all([ await Promise.all([
writeHandler({ outDir: functionDir, handlerFile }), writeHandler({ outDir: functionDir, handlerFile, prefix }),
copyFunctionLibs({ functionDir }), copyFunctionLibs({ functionDir }),
copyHTMLFiles({ functionDir }), copyHTMLFiles({ functionDir }),
writeVCConfig({ functionDir }), writeVCConfig({ functionDir }),

View File

@@ -1,8 +1,8 @@
import os from 'os'; import os from 'os';
import etag from 'etag'; import etag from 'etag';
import { parse } from 'url'; import { join } from 'path';
import { copySync, existsSync } from 'fs-extra'; import { copySync, existsSync } from 'fs-extra';
import { join, dirname, basename } from 'path'; import { getPageName } from './utils';
const TMP_DATA_PATH = join(os.tmpdir(), 'data/datastore'); const TMP_DATA_PATH = join(os.tmpdir(), 'data/datastore');
const CUR_DATA_PATH = join(__dirname, '.cache/data/datastore'); const CUR_DATA_PATH = join(__dirname, '.cache/data/datastore');
@@ -25,34 +25,14 @@ async function getPageSSRHelpers() {
} }
export default async function handler(req, res) { export default async function handler(req, res) {
let pageName; // eslint-disable-next-line no-undef
const pathname = parse(req.url).pathname || '/'; const { pathName, isPageData } = getPageName(req.url, vercel_pathPrefix);
const isPageData = pathname.startsWith('/page-data/');
if (isPageData) {
// /page-data/index/page-data.json
// /page-data/using-ssr/page-data.json
pageName = basename(dirname(pathname));
if (pageName === 'index') {
pageName = '/';
}
} else {
// /using-ssr
// /using-ssr/
// /using-ssr/index.html
pageName = basename(pathname);
if (pageName === 'index.html') {
pageName = basename(dirname(pathname));
}
if (!pageName) {
pageName = '/';
}
}
const [graphqlEngine, { getData, renderHTML, renderPageData }] = const [graphqlEngine, { getData, renderHTML, renderPageData }] =
await Promise.all([getGraphQLEngine(), getPageSSRHelpers()]); await Promise.all([getGraphQLEngine(), getPageSSRHelpers()]);
const data = await getData({ const data = await getData({
pathName: pageName, pathName,
graphqlEngine, graphqlEngine,
req, req,
}); });

View File

@@ -0,0 +1,29 @@
import { parse } from 'url';
import { basename, dirname } from 'path';
export function getPageName(url: string, pathPrefix = '') {
let pathName = (parse(url).pathname || '/').slice(pathPrefix.length);
const isPageData = pathName.startsWith('/page-data/');
if (isPageData) {
// "/page-data/index/page-data.json" -> "/"
// "/page-data/using-ssr/page-data.json" -> "using-ssr"
// "/page-data/foo/bar/ssr/page-data.json" -> "foo/bar/ssr"
pathName = pathName.split('/').slice(2, -1).join('/');
if (pathName === 'index') {
pathName = '/';
}
} else {
// "/using-ssr" -> "using-ssr"
// "/using-ssr/" -> "using-ssr"
// "/using-ssr/index.html" -> "using-ssr"
// "/foo/bar/ssr" -> "foo/bar/ssr"
if (basename(pathName) === 'index.html') {
pathName = dirname(pathName);
}
if (pathName !== '/') {
// Remove leading and trailing "/"
pathName = pathName.replace(/(^\/|\/$)/g, '');
}
}
return { isPageData, pathName };
}

Some files were not shown because too many files have changed in this diff Show More