Compare commits

..

5 Commits

Author SHA1 Message Date
Vercel Release Bot
e50fe2b37c Version Packages (#11149)
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.7.0

### Minor Changes

- Revert "Revert "Default ruby to only currently supported version
(3.2.0)"" ([#11137](https://github.com/vercel/vercel/pull/11137))

## @vercel/static-build@2.4.0

### Minor Changes

- Revert "Revert "Default ruby to only currently supported version
(3.2.0)"" ([#11137](https://github.com/vercel/vercel/pull/11137))

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.18

## vercel@33.5.1

### Patch Changes

- build: upgrade edge-runtime
([#11148](https://github.com/vercel/vercel/pull/11148))

- Updated dependencies
\[[`24c3dd282`](24c3dd282d),
[`10e200e0b`](10e200e0bf),
[`678ebbe52`](678ebbe525)]:
    -   @vercel/build-utils@7.7.0
    -   @vercel/static-build@2.4.0
    -   @vercel/node@3.0.19

## @vercel/client@13.1.3

### Patch Changes

- Updated dependencies
\[[`24c3dd282`](24c3dd282d)]:
    -   @vercel/build-utils@7.7.0

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

### Patch Changes

- Updated dependencies
\[[`24c3dd282`](24c3dd282d)]:
    -   @vercel/build-utils@7.7.0

## @vercel/node@3.0.19

### Patch Changes

- build: upgrade edge-runtime
([#11148](https://github.com/vercel/vercel/pull/11148))

- refactor: simplify content-length check
([#11150](https://github.com/vercel/vercel/pull/11150))

- Updated dependencies
\[[`24c3dd282`](24c3dd282d)]:
    -   @vercel/build-utils@7.7.0

## @vercel-internals/types@1.0.23

### Patch Changes

- Updated dependencies
\[[`24c3dd282`](24c3dd282d)]:
    -   @vercel/build-utils@7.7.0

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-02-13 11:52:52 -06:00
Kiko Beats
678ebbe525 refactor: simplify content-length check (#11150)
Co-authored-by: Sean Massa <EndangeredMassa@gmail.com>
2024-02-13 11:45:29 -06:00
Kiko Beats
10e200e0bf build: upgrade edge-runtime (#11148)
Upgrade Edge Runtime and related dependencies 🙂

---------

Co-authored-by: Sean Massa <EndangeredMassa@gmail.com>
2024-02-13 11:20:11 -06:00
Trek Glowacki
24c3dd282d Revert "Revert "Default ruby to only currently supported version (3.2.0)"" (#11137)
🔁 Uno Reverse! 🔁
2024-02-13 14:52:46 +00:00
Sean Massa
142a397d8e [tests] fix next.js tests (#11145)
The Next.js change in https://github.com/vercel/next.js/pull/61794 means
that the `Vary` header will contain `Next-Url` less often. We need to
update the assertions on our end to accommodate.
2024-02-13 08:27:46 -06:00
39 changed files with 562 additions and 162 deletions

View File

@@ -1,5 +1,12 @@
# @vercel-internals/types
## 1.0.23
### Patch Changes
- Updated dependencies [[`24c3dd282`](https://github.com/vercel/vercel/commit/24c3dd282d7714cd63d2b94fb94745c45fdc79ab)]:
- @vercel/build-utils@7.7.0
## 1.0.22
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "@vercel-internals/types",
"version": "1.0.22",
"version": "1.0.23",
"types": "index.d.ts",
"main": "index.d.ts",
"files": [
@@ -10,7 +10,7 @@
"dependencies": {
"@types/node": "14.14.31",
"@vercel-internals/constants": "1.0.4",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/routing-utils": "3.1.0"
},
"devDependencies": {

View File

@@ -1,5 +1,11 @@
# @vercel/build-utils
## 7.7.0
### Minor Changes
- Revert "Revert "Default ruby to only currently supported version (3.2.0)"" ([#11137](https://github.com/vercel/vercel/pull/11137))
## 7.6.0
### Minor Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/build-utils",
"version": "7.6.0",
"version": "7.7.0",
"license": "Apache-2.0",
"main": "./dist/index.js",
"types": "./dist/index.d.js",

View File

@@ -23,6 +23,8 @@ const skipFixtures: string[] = [
'23-pnpm-workspaces',
'41-nx-monorepo',
'42-npm-workspace-with-nx',
'jekyll-v4',
'middleman-v4',
];
// eslint-disable-next-line no-restricted-syntax

View File

@@ -1,5 +1,16 @@
# vercel
## 33.5.1
### Patch Changes
- build: upgrade edge-runtime ([#11148](https://github.com/vercel/vercel/pull/11148))
- Updated dependencies [[`24c3dd282`](https://github.com/vercel/vercel/commit/24c3dd282d7714cd63d2b94fb94745c45fdc79ab), [`10e200e0b`](https://github.com/vercel/vercel/commit/10e200e0bf8f692b6740e098e0572b4e7de83850), [`678ebbe52`](https://github.com/vercel/vercel/commit/678ebbe5255766656bf2dddc574e86b2999f11c8)]:
- @vercel/build-utils@7.7.0
- @vercel/static-build@2.4.0
- @vercel/node@3.0.19
## 33.5.0
### Minor Changes

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "33.5.0",
"version": "33.5.1",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -31,22 +31,22 @@
"node": ">= 16"
},
"dependencies": {
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/fun": "1.1.0",
"@vercel/go": "3.0.5",
"@vercel/hydrogen": "1.0.2",
"@vercel/next": "4.1.1",
"@vercel/node": "3.0.18",
"@vercel/node": "3.0.19",
"@vercel/python": "4.1.1",
"@vercel/redwood": "2.0.7",
"@vercel/remix-builder": "2.0.19",
"@vercel/ruby": "2.0.5",
"@vercel/static-build": "2.3.0",
"@vercel/static-build": "2.4.0",
"chokidar": "3.3.1"
},
"devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5",
"@edge-runtime/node-utils": "2.2.2",
"@edge-runtime/node-utils": "2.3.0",
"@next/env": "11.1.2",
"@sentry/node": "5.5.0",
"@sindresorhus/slugify": "0.11.0",
@@ -88,8 +88,8 @@
"@types/yauzl-promise": "2.1.0",
"@vercel-internals/constants": "1.0.4",
"@vercel-internals/get-package-json": "1.0.0",
"@vercel-internals/types": "1.0.22",
"@vercel/client": "13.1.2",
"@vercel-internals/types": "1.0.23",
"@vercel/client": "13.1.3",
"@vercel/error-utils": "2.0.2",
"@vercel/frameworks": "2.0.6",
"@vercel/fs-detectors": "5.1.6",

View File

@@ -1,5 +1,12 @@
# @vercel/client
## 13.1.3
### Patch Changes
- Updated dependencies [[`24c3dd282`](https://github.com/vercel/vercel/commit/24c3dd282d7714cd63d2b94fb94745c45fdc79ab)]:
- @vercel/build-utils@7.7.0
## 13.1.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/client",
"version": "13.1.2",
"version": "13.1.3",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"homepage": "https://vercel.com",
@@ -37,7 +37,7 @@
"typescript": "4.9.5"
},
"dependencies": {
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/error-utils": "2.0.2",
"@vercel/routing-utils": "3.1.0",
"@zeit/fetch": "5.2.0",

View File

@@ -37,7 +37,7 @@
"@types/minimatch": "3.0.5",
"@types/node": "14.18.33",
"@types/semver": "7.3.10",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"jest-junit": "16.0.0",
"typescript": "4.9.5"
}

View File

@@ -1,5 +1,12 @@
# @vercel/gatsby-plugin-vercel-builder
## 2.0.18
### Patch Changes
- Updated dependencies [[`24c3dd282`](https://github.com/vercel/vercel/commit/24c3dd282d7714cd63d2b94fb94745c45fdc79ab)]:
- @vercel/build-utils@7.7.0
## 2.0.17
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/gatsby-plugin-vercel-builder",
"version": "2.0.17",
"version": "2.0.18",
"main": "dist/index.js",
"files": [
"dist",
@@ -20,7 +20,7 @@
},
"dependencies": {
"@sinclair/typebox": "0.25.24",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/routing-utils": "3.1.0",
"esbuild": "0.14.47",
"etag": "1.8.1",

View File

@@ -29,7 +29,7 @@
"@types/node-fetch": "^2.3.0",
"@types/tar": "6.1.5",
"@types/yauzl-promise": "2.1.0",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"async-retry": "1.3.3",
"execa": "^1.0.0",
"fs-extra": "^7.0.0",

View File

@@ -26,7 +26,7 @@
"devDependencies": {
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"execa": "3.2.0",
"fs-extra": "11.1.0",
"jest-junit": "16.0.0"

View File

@@ -40,7 +40,7 @@
"@types/semver": "6.0.0",
"@types/text-table": "0.2.1",
"@types/webpack-sources": "3.2.0",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/routing-utils": "3.1.0",
"async-sema": "3.0.1",
"buffer-crc32": "0.2.13",

View File

@@ -22,7 +22,7 @@
"redirect": "manual"
},
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -46,7 +46,7 @@
"redirect": "manual"
},
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -70,7 +70,7 @@
"redirect": "manual"
},
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"

View File

@@ -147,7 +147,7 @@
"status": 200,
"mustContain": "hello from /ssg",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
@@ -163,7 +163,7 @@
"path": "/ssg",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -175,7 +175,7 @@
"path": "/ssg",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url",
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch",
"content-type": "text/x-component"
},
"headers": {
@@ -210,14 +210,14 @@
"status": 200,
"mustContain": "hello from app/dashboard/deployments/[id]/settings",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
"path": "/dashboard/deployments/123/settings",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -230,14 +230,14 @@
"status": 200,
"mustContain": "catchall",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
"path": "/dashboard/deployments/catchall/something",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -250,7 +250,7 @@
"status": 200,
"mustContain": "hello from app/dashboard",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
@@ -270,7 +270,7 @@
},
"responseHeaders": {
"content-type": "text/x-component",
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{

View File

@@ -11,7 +11,7 @@
"status": 200,
"mustContain": "hello from app/dashboard",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
@@ -31,7 +31,7 @@
},
"responseHeaders": {
"content-type": "text/x-component",
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{

View File

@@ -47,14 +47,14 @@
"status": 200,
"mustContain": "hello from /ssg",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
"path": "/ssg/",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -87,14 +87,14 @@
"status": 200,
"mustContain": "hello from app/dashboard/deployments/[id]/settings",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
"path": "/dashboard/deployments/123/settings/",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -107,14 +107,14 @@
"status": 200,
"mustContain": "catchall",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
"path": "/dashboard/deployments/catchall/something/",
"status": 200,
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
},
"headers": {
"RSC": "1"
@@ -127,7 +127,7 @@
"status": 200,
"mustContain": "hello from app/dashboard",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{
@@ -147,7 +147,7 @@
},
"responseHeaders": {
"content-type": "text/x-component",
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{

View File

@@ -11,7 +11,7 @@
"status": 200,
"mustContain": "about",
"responseHeaders": {
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Url"
"vary": "RSC, Next-Router-State-Tree, Next-Router-Prefetch"
}
},
{

View File

@@ -1,5 +1,16 @@
# @vercel/node
## 3.0.19
### Patch Changes
- build: upgrade edge-runtime ([#11148](https://github.com/vercel/vercel/pull/11148))
- refactor: simplify content-length check ([#11150](https://github.com/vercel/vercel/pull/11150))
- Updated dependencies [[`24c3dd282`](https://github.com/vercel/vercel/commit/24c3dd282d7714cd63d2b94fb94745c45fdc79ab)]:
- @vercel/build-utils@7.7.0
## 3.0.18
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/node",
"version": "3.0.18",
"version": "3.0.19",
"license": "Apache-2.0",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
@@ -20,16 +20,18 @@
"dist"
],
"dependencies": {
"@edge-runtime/node-utils": "2.2.1",
"@edge-runtime/primitives": "4.0.5",
"@edge-runtime/vm": "3.1.7",
"@edge-runtime/node-utils": "2.3.0",
"@edge-runtime/primitives": "4.1.0",
"@edge-runtime/vm": "3.2.0",
"@types/node": "14.18.33",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/error-utils": "2.0.2",
"@vercel/nft": "0.26.3",
"@vercel/static-config": "3.0.0",
"async-listen": "3.0.0",
"edge-runtime": "2.5.7",
"cjs-module-lexer": "1.2.3",
"edge-runtime": "2.5.9",
"es-module-lexer": "1.4.1",
"esbuild": "0.14.47",
"etag": "1.8.1",
"node-fetch": "2.6.9",

View File

@@ -11,11 +11,17 @@ import type { VercelProxyResponse } from './types.js';
import { Config } from '@vercel/build-utils';
import { createEdgeEventHandler } from './edge-functions/edge-handler.mjs';
import { createServer, IncomingMessage, ServerResponse } from 'http';
import { createServerlessEventHandler } from './serverless-functions/serverless-handler.mjs';
import {
createServerlessEventHandler,
HTTP_METHODS,
} from './serverless-functions/serverless-handler.mjs';
import { isEdgeRuntime, logError, validateConfiguredRuntime } from './utils.js';
import { init, parse as parseEsm } from 'es-module-lexer';
import { parse as parseCjs } from 'cjs-module-lexer';
import { getConfig } from '@vercel/static-config';
import { Project } from 'ts-morph';
import { listen } from 'async-listen';
import { readFile } from 'fs/promises';
const parseConfig = (entryPointPath: string) =>
getConfig(new Project(), entryPointPath);
@@ -46,12 +52,31 @@ async function createEventHandler(
);
}
const content = await readFile(entrypointPath, 'utf8');
const isStreaming =
staticConfig?.supportsResponseStreaming ||
(await hasWebHandlers(async () => parseCjs(content).exports)) ||
(await hasWebHandlers(async () =>
init.then(() => parseEsm(content)[1].map(specifier => specifier.n))
));
return createServerlessEventHandler(entrypointPath, {
mode: staticConfig?.supportsResponseStreaming ? 'streaming' : 'buffer',
mode: isStreaming ? 'streaming' : 'buffer',
shouldAddHelpers: options.shouldAddHelpers,
});
}
async function hasWebHandlers(getExports: () => Promise<string[]>) {
const exports = await getExports().catch(() => []);
for (const name of exports) {
if (HTTP_METHODS.includes(name)) {
return true;
}
}
return false;
}
let handleEvent: (request: IncomingMessage) => Promise<VercelProxyResponse>;
let handlerEventError: Error;
let onExit: (() => Promise<void>) | undefined;

View File

@@ -230,8 +230,10 @@ export async function createEdgeEventHandler(
}
const body: Buffer | string | undefined = await serializeBody(request);
if (body !== undefined)
if (body !== undefined && body.length) {
request.headers['content-length'] = String(body.length);
}
const url = new URL(request.url ?? '/', server.url);
const response = await undiciRequest(url, {

View File

@@ -1,26 +1,7 @@
import type { ServerResponse, IncomingMessage } from 'http';
import type { NodeHandler } from '@edge-runtime/node-utils';
import { buildToNodeHandler } from '@edge-runtime/node-utils';
class FetchEvent {
public request: Request;
public awaiting: Set<Promise<void>>;
public response: Response | null;
constructor(request: Request) {
this.request = request;
this.response = null;
this.awaiting = new Set();
}
respondWith(response: Response) {
this.response = response;
}
waitUntil() {
throw new Error('waitUntil is not implemented yet for Node.js');
}
}
import Edge from '@edge-runtime/primitives';
const webHandlerToNodeHandler = buildToNodeHandler(
{
@@ -32,8 +13,8 @@ const webHandlerToNodeHandler = buildToNodeHandler(
super(input, addDuplexToInit(init));
}
},
Uint8Array: Uint8Array,
FetchEvent: FetchEvent,
Uint8Array,
FetchEvent: Edge.FetchEvent,
},
{ defaultOrigin: 'https://vercel.com' }
);

View File

@@ -27,7 +27,7 @@ type ServerlessFunctionSignature = (
const [NODE_MAJOR] = process.versions.node.split('.').map(v => Number(v));
/* https://nextjs.org/docs/app/building-your-application/routing/router-handlers#supported-http-methods */
const HTTP_METHODS = [
export const HTTP_METHODS = [
'GET',
'HEAD',
'OPTIONS',

View File

@@ -1,10 +0,0 @@
/* global Response */
const baseUrl = ({ headers }) =>
`${headers.get('x-forwarded-proto')}://${headers.get('x-forwarded-host')}`;
export function GET(request) {
const { searchParams } = new URL(request.url, baseUrl(request));
const name = searchParams.get('name');
return new Response(`Greetings, ${name}`);
}

View File

@@ -0,0 +1,50 @@
/* global ReadableStream, TextEncoderStream, Response */
export const config = { runtime: 'edge' };
const DEFER_MS = 10;
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
const streaming =
text =>
(_, { waitUntil }) => {
const DATA = text.split(' ');
let index = 0;
const readable = new ReadableStream({
async start(controller) {
while (index < DATA.length) {
const data = DATA[index++];
let chunk = data;
if (index !== DATA.length) chunk += ' ';
controller.enqueue(chunk);
await wait(DEFER_MS);
}
controller.close();
},
}).pipeThrough(new TextEncoderStream());
waitUntil(wait(DATA.length * DEFER_MS));
return new Response(readable, {
headers: {
'Content-Type': 'text/plain',
'x-web-handler': text,
},
});
};
export const GET = streaming('Web handler using GET');
export const HEAD = streaming('Web handler using HEAD');
export const OPTIONS = streaming('Web handler using OPTIONS');
export const POST = streaming('Web handler using POST');
export const PUT = streaming('Web handler using PUT');
export const DELETE = streaming('Web handler using DELETE');
export const PATCH = streaming('Web handler using PATCH');

View File

@@ -0,0 +1,48 @@
/* global ReadableStream, TextEncoderStream, Response */
const DEFER_MS = 10;
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
const streaming =
text =>
(_, { waitUntil }) => {
const DATA = text.split(' ');
let index = 0;
const readable = new ReadableStream({
async start(controller) {
while (index < DATA.length) {
const data = DATA[index++];
let chunk = data;
if (index !== DATA.length) chunk += ' ';
controller.enqueue(chunk);
await wait(DEFER_MS);
}
controller.close();
},
}).pipeThrough(new TextEncoderStream());
waitUntil(wait(DATA.length * DEFER_MS));
return new Response(readable, {
headers: {
'Content-Type': 'text/plain',
'x-web-handler': text,
},
});
};
export const GET = streaming('Web handler using GET');
export const HEAD = streaming('Web handler using HEAD');
export const OPTIONS = streaming('Web handler using OPTIONS');
export const POST = streaming('Web handler using POST');
export const PUT = streaming('Web handler using PUT');
export const DELETE = streaming('Web handler using DELETE');
export const PATCH = streaming('Web handler using PATCH');

View File

@@ -30,9 +30,9 @@ function testForkDevServer(entrypoint: string) {
}
(NODE_MAJOR < 18 ? test.skip : test)(
'runs an serverless function that exports GET',
'web handlers for node runtime',
async () => {
const child = testForkDevServer('./serverless-response.js');
const child = testForkDevServer('./web-handlers-node.js');
try {
const result = await readMessage(child);
if (result.state !== 'message') {
@@ -43,20 +43,251 @@ function testForkDevServer(entrypoint: string) {
{
const response = await fetch(
`http://${address}:${port}/api/serverless-response?name=Vercel`
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'GET' }
);
expect({
status: response.status,
body: await response.text(),
}).toEqual({ status: 200, body: 'Greetings, Vercel' });
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using GET',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using GET',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'POST' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using POST',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using POST',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'DELETE' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using DELETE',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using DELETE',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'PUT' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using PUT',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using PUT',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'PATCH' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using PATCH',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using PATCH',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'HEAD' }
);
expect({
status: response.status,
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
'x-web-handler': 'Web handler using HEAD',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-node`,
{ method: 'OPTIONS' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using OPTIONS',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using OPTIONS',
});
}
} finally {
child.kill(9);
}
}
);
(NODE_MAJOR < 18 ? test.skip : test)(
'web handlers for edge runtime',
async () => {
const child = testForkDevServer('./web-handlers-edge.js');
try {
const result = await readMessage(child);
if (result.state !== 'message') {
throw new Error('Exited. error: ' + JSON.stringify(result.value));
}
const { address, port } = result.value;
{
const response = await fetch(
`http://${address}:${port}/api/serverless-response?name=Vercel`,
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'GET' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using GET',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using GET',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'POST' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using POST',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using POST',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'DELETE' }
);
console.log(response);
expect({
status: response.status,
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using DELETE',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'PUT' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using PUT',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using PUT',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'PATCH' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using PATCH',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using PATCH',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'HEAD' }
);
expect({ status: response.status }).toEqual({ status: 405 });
expect({
status: response.status,
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
'x-web-handler': 'Web handler using HEAD',
});
}
{
const response = await fetch(
`http://${address}:${port}/api/web-handlers-edge`,
{ method: 'OPTIONS' }
);
expect({
status: response.status,
body: await response.text(),
transferEncoding: response.headers.get('transfer-encoding'),
'x-web-handler': response.headers.get('x-web-handler'),
}).toEqual({
status: 200,
body: 'Web handler using OPTIONS',
transferEncoding: 'chunked',
'x-web-handler': 'Web handler using OPTIONS',
});
}
} finally {
child.kill(9);

View File

@@ -26,7 +26,7 @@
"@types/jest": "27.4.1",
"@types/node": "14.18.33",
"@types/which": "3.0.0",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"execa": "^1.0.0",
"fs-extra": "11.1.1",
"jest-junit": "16.0.0",

View File

@@ -28,7 +28,7 @@
"@types/aws-lambda": "8.10.19",
"@types/node": "14.18.33",
"@types/semver": "6.0.0",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"execa": "3.2.0",
"fs-extra": "11.1.0",
"jest-junit": "16.0.0"

View File

@@ -30,7 +30,7 @@
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@types/semver": "7.3.13",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"jest-junit": "16.0.0",
"path-to-regexp": "6.2.1",
"semver": "7.5.2"

View File

@@ -23,7 +23,7 @@
"devDependencies": {
"@types/fs-extra": "8.0.0",
"@types/semver": "6.0.0",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"execa": "2.0.4",
"fs-extra": "^7.0.1",
"jest-junit": "16.0.0",

View File

@@ -1,5 +1,16 @@
# @vercel/static-build
## 2.4.0
### Minor Changes
- Revert "Revert "Default ruby to only currently supported version (3.2.0)"" ([#11137](https://github.com/vercel/vercel/pull/11137))
### Patch Changes
- Updated dependencies []:
- @vercel/gatsby-plugin-vercel-builder@2.0.18
## 2.3.0
### Minor Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/static-build",
"version": "2.3.0",
"version": "2.4.0",
"license": "Apache-2.0",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/build-step",
@@ -21,7 +21,7 @@
},
"dependencies": {
"@vercel/gatsby-plugin-vercel-analytics": "1.0.11",
"@vercel/gatsby-plugin-vercel-builder": "2.0.17",
"@vercel/gatsby-plugin-vercel-builder": "2.0.18",
"@vercel/static-config": "3.0.0",
"ts-morph": "12.0.0"
},
@@ -35,7 +35,7 @@
"@types/node-fetch": "2.5.4",
"@types/promise-timeout": "1.3.0",
"@types/semver": "7.3.13",
"@vercel/build-utils": "7.6.0",
"@vercel/build-utils": "7.7.0",
"@vercel/error-utils": "2.0.2",
"@vercel/frameworks": "2.0.6",
"@vercel/fs-detectors": "5.1.6",

View File

@@ -46,6 +46,7 @@ import {
LocalFileSystemDetector,
} from '@vercel/fs-detectors';
const SUPPORTED_RUBY_VERSION = '3.2.0';
const sleep = (n: number) => new Promise(resolve => setTimeout(resolve, n));
const DEV_SERVER_PORT_BIND_TIMEOUT = ms('5m');
@@ -541,12 +542,9 @@ export const build: BuildV2 = async ({
pathList.push(vendorBin); // Add `./vendor/bin`
debug(`Added "${vendorBin}" to PATH env because a Gemfile was found`);
const dir = path.join(workPath, 'vendor', 'bundle', 'ruby');
const rubyVersion =
existsSync(dir) && statSync(dir).isDirectory()
? readdirSync(dir)[0]
: '';
const rubyVersion = SUPPORTED_RUBY_VERSION;
if (rubyVersion) {
gemHome = path.join(dir, rubyVersion); // Add `./vendor/bundle/ruby/2.7.0`
gemHome = path.join(dir, rubyVersion);
debug(`Set GEM_HOME="${gemHome}" because a Gemfile was found`);
}
}

View File

@@ -38,8 +38,14 @@ module.exports = function setupTests(groupIndex) {
console.log('testing group', groupIndex, fixtures);
}
const fixturesToSkip = ['jekyll-v3', 'jekyll-v4', 'middleman-v4'];
// eslint-disable-next-line no-restricted-syntax
for (const fixture of fixtures) {
if (fixturesToSkip.includes(fixture)) {
continue;
}
const errMsg = testsThatFailToBuild.get(fixture);
if (errMsg) {
// eslint-disable-next-line no-loop-func

127
pnpm-lock.yaml generated
View File

@@ -186,7 +186,7 @@ importers:
specifier: 1.0.4
version: link:../constants
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../../packages/build-utils
'@vercel/routing-utils':
specifier: 3.1.0
@@ -310,7 +310,7 @@ importers:
packages/cli:
dependencies:
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
'@vercel/fun':
specifier: 1.1.0
@@ -325,7 +325,7 @@ importers:
specifier: 4.1.1
version: link:../next
'@vercel/node':
specifier: 3.0.18
specifier: 3.0.19
version: link:../node
'@vercel/python':
specifier: 4.1.1
@@ -340,7 +340,7 @@ importers:
specifier: 2.0.5
version: link:../ruby
'@vercel/static-build':
specifier: 2.3.0
specifier: 2.4.0
version: link:../static-build
chokidar:
specifier: 3.3.1
@@ -350,8 +350,8 @@ importers:
specifier: 1.0.5
version: 1.0.5
'@edge-runtime/node-utils':
specifier: 2.2.2
version: 2.2.2
specifier: 2.3.0
version: 2.3.0
'@next/env':
specifier: 11.1.2
version: 11.1.2
@@ -476,10 +476,10 @@ importers:
specifier: 1.0.0
version: link:../../internals/get-package-json
'@vercel-internals/types':
specifier: 1.0.22
specifier: 1.0.23
version: link:../../internals/types
'@vercel/client':
specifier: 13.1.2
specifier: 13.1.3
version: link:../client
'@vercel/error-utils':
specifier: 2.0.2
@@ -722,7 +722,7 @@ importers:
packages/client:
dependencies:
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
'@vercel/error-utils':
specifier: 2.0.2
@@ -926,7 +926,7 @@ importers:
specifier: 7.3.10
version: 7.3.10
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
jest-junit:
specifier: 16.0.0
@@ -951,7 +951,7 @@ importers:
specifier: 0.25.24
version: 0.25.24
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
'@vercel/routing-utils':
specifier: 3.1.0
@@ -1018,7 +1018,7 @@ importers:
specifier: 2.1.0
version: 2.1.0
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
async-retry:
specifier: 1.3.3
@@ -1067,7 +1067,7 @@ importers:
specifier: 14.18.33
version: 14.18.33
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
execa:
specifier: 3.2.0
@@ -1128,7 +1128,7 @@ importers:
specifier: 3.2.0
version: 3.2.0
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
'@vercel/routing-utils':
specifier: 3.1.0
@@ -1203,19 +1203,19 @@ importers:
packages/node:
dependencies:
'@edge-runtime/node-utils':
specifier: 2.2.1
version: 2.2.1
specifier: 2.3.0
version: 2.3.0
'@edge-runtime/primitives':
specifier: 4.0.5
version: 4.0.5
specifier: 4.1.0
version: 4.1.0
'@edge-runtime/vm':
specifier: 3.1.7
version: 3.1.7
specifier: 3.2.0
version: 3.2.0
'@types/node':
specifier: 14.18.33
version: 14.18.33
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
'@vercel/error-utils':
specifier: 2.0.2
@@ -1229,9 +1229,15 @@ importers:
async-listen:
specifier: 3.0.0
version: 3.0.0
cjs-module-lexer:
specifier: 1.2.3
version: 1.2.3
edge-runtime:
specifier: 2.5.7
version: 2.5.7
specifier: 2.5.9
version: 2.5.9
es-module-lexer:
specifier: 1.4.1
version: 1.4.1
esbuild:
specifier: 0.14.47
version: 0.14.47
@@ -1324,7 +1330,7 @@ importers:
specifier: 3.0.0
version: 3.0.0
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
execa:
specifier: ^1.0.0
@@ -1361,7 +1367,7 @@ importers:
specifier: 6.0.0
version: 6.0.0
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
execa:
specifier: 3.2.0
@@ -1398,7 +1404,7 @@ importers:
specifier: 7.3.13
version: 7.3.13
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
jest-junit:
specifier: 16.0.0
@@ -1442,7 +1448,7 @@ importers:
specifier: 6.0.0
version: 6.0.0
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
execa:
specifier: 2.0.4
@@ -1463,7 +1469,7 @@ importers:
specifier: 1.0.11
version: link:../gatsby-plugin-vercel-analytics
'@vercel/gatsby-plugin-vercel-builder':
specifier: 2.0.17
specifier: 2.0.18
version: link:../gatsby-plugin-vercel-builder
'@vercel/static-config':
specifier: 3.0.0
@@ -1500,7 +1506,7 @@ importers:
specifier: 7.3.13
version: 7.3.13
'@vercel/build-utils':
specifier: 7.6.0
specifier: 7.7.0
version: link:../build-utils
'@vercel/error-utils':
specifier: 2.0.2
@@ -2399,13 +2405,8 @@ packages:
dependencies:
'@jridgewell/trace-mapping': 0.3.9
/@edge-runtime/cookies@3.4.1:
resolution: {integrity: sha512-z27BvgPxI73CgSlxU/NAUf1Q/shnqi6cobHEowf6VuLdSjGR3NjI2Y5dZUIBbK2zOJVZbXcHsVzJjz8LklteFQ==}
engines: {node: '>=16'}
dev: false
/@edge-runtime/format@2.2.0:
resolution: {integrity: sha512-gPrS6AVw/qJJL0vcxMXv4kFXCU3ZTCD1uuJpwX15YxHV8BgU9OG5v9LrkkXcr96PBT/9epypfNJMhlWADuEziw==}
/@edge-runtime/format@2.2.1:
resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==}
engines: {node: '>=16'}
dev: false
@@ -2420,32 +2421,38 @@ packages:
jest-util: 29.5.0
dev: true
/@edge-runtime/node-utils@2.2.1:
resolution: {integrity: sha512-RUl/439BHKshkhSGFRlZ1kzy68wL4mn8VNKDSZr3p0tciyZ33Mjfpl+vofqnHqXRmDI6nLnZpfJvhY3D88o0pA==}
/@edge-runtime/node-utils@2.3.0:
resolution: {integrity: sha512-uUtx8BFoO1hNxtHjp3eqVPC/mWImGb2exOfGjMLUoipuWgjej+f4o/VP4bUI8U40gu7Teogd5VTeZUkGvJSPOQ==}
engines: {node: '>=16'}
dependencies:
'@edge-runtime/cookies': 3.4.1
dev: false
/@edge-runtime/node-utils@2.2.2:
resolution: {integrity: sha512-2fSdYNAo4Pp46JGjV4vQV8N8uHZmww6nBLi80uuwUYHE2+44uE9CUeWGzE8JaV8Za4COLVoxD9AzVgjTb4bfhQ==}
engines: {node: '>=16'}
dev: true
/@edge-runtime/ponyfill@2.4.1:
resolution: {integrity: sha512-ZbR/EViY3gg2rmEAQTKPa6mXl4aR1/+cFcQe4r1segCjEbTAxT6PWu40odbu/KlZKSysEb2O/BWIC2lJgSJOMQ==}
/@edge-runtime/ponyfill@2.4.2:
resolution: {integrity: sha512-oN17GjFr69chu6sDLvXxdhg0Qe8EZviGSuqzR9qOiKh4MhFYGdBBcqRNzdmYeAdeRzOW2mM9yil4RftUQ7sUOA==}
engines: {node: '>=16'}
dev: false
/@edge-runtime/primitives@4.0.5:
resolution: {integrity: sha512-t7QiN5d/KpXgCvIfSt6Nm9Hj3WVdNgc5CpOD73jasY+9EvTI7Ngdj5cXvjcHrPcmYWJZMySPgeEeoL/1N/Llag==}
engines: {node: '>=16'}
dev: true
/@edge-runtime/primitives@4.1.0:
resolution: {integrity: sha512-Vw0lbJ2lvRUqc7/soqygUX216Xb8T3WBZ987oywz6aJqRxcwSVWwr9e+Nqo2m9bxobA9mdbWNNoRY6S9eko1EQ==}
engines: {node: '>=16'}
dev: false
/@edge-runtime/vm@3.1.7:
resolution: {integrity: sha512-hUMFbDQ/nZN+1TLMi6iMO1QFz9RSV8yGG8S42WFPFma1d7VSNE0eMdJUmwjmtav22/iQkzHMmu6oTSfAvRGS8g==}
engines: {node: '>=16'}
dependencies:
'@edge-runtime/primitives': 4.0.5
dev: true
/@edge-runtime/vm@3.2.0:
resolution: {integrity: sha512-0dEVyRLM/lG4gp1R/Ik5bfPl/1wX00xFwd5KcNH602tzBa09oF7pbTKETEhR1GjZ75K6OJnYFu8II2dyMhONMw==}
engines: {node: '>=16'}
dependencies:
'@edge-runtime/primitives': 4.1.0
dev: false
/@emotion/hash@0.9.0:
resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==}
@@ -5445,7 +5452,7 @@ packages:
chokidar: 3.5.3
cross-spawn: 7.0.3
dotenv: 16.0.3
es-module-lexer: 1.3.1
es-module-lexer: 1.4.1
esbuild: 0.17.6
esbuild-plugins-node-modules-polyfill: 1.6.1(esbuild@0.17.6)
execa: 5.1.1
@@ -6671,9 +6678,8 @@ packages:
engines: {node: '>=8'}
dev: true
/cjs-module-lexer@1.2.2:
resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==}
dev: true
/cjs-module-lexer@1.2.3:
resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
/clean-regexp@1.0.0:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
@@ -7411,14 +7417,14 @@ packages:
safer-buffer: 2.1.2
dev: true
/edge-runtime@2.5.7:
resolution: {integrity: sha512-gA4qSVP0sNwJlkdQ2nahDPASlSl8twUd17o+JolPa1EtXpLTGzIpOETvodgJwXIxa+zaD8bnAXCdsWrx2PhlVQ==}
/edge-runtime@2.5.9:
resolution: {integrity: sha512-pk+k0oK0PVXdlT4oRp4lwh+unuKB7Ng4iZ2HB+EZ7QCEQizX360Rp/F4aRpgpRgdP2ufB35N+1KppHmYjqIGSg==}
engines: {node: '>=16'}
hasBin: true
dependencies:
'@edge-runtime/format': 2.2.0
'@edge-runtime/ponyfill': 2.4.1
'@edge-runtime/vm': 3.1.7
'@edge-runtime/format': 2.2.1
'@edge-runtime/ponyfill': 2.4.2
'@edge-runtime/vm': 3.2.0
async-listen: 3.0.1
mri: 1.2.0
picocolors: 1.0.0
@@ -7559,9 +7565,8 @@ packages:
stop-iteration-iterator: 1.0.0
dev: true
/es-module-lexer@1.3.1:
resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==}
dev: true
/es-module-lexer@1.4.1:
resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==}
/es-set-tostringtag@2.0.1:
resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
@@ -10599,7 +10604,7 @@ packages:
'@jest/types': 29.5.0
'@types/node': 16.18.11
chalk: 4.1.0
cjs-module-lexer: 1.2.2
cjs-module-lexer: 1.2.3
collect-v8-coverage: 1.0.1
glob: 7.2.3
graceful-fs: 4.2.11