Compare commits

..

4 Commits

Author SHA1 Message Date
JJ Kasper
dd94dcab32 Publish Stable
- vercel@28.4.12
 - @vercel/edge@0.0.5
 - @vercel/next@3.2.6
 - @vercel/node@2.5.26
2022-10-18 09:50:29 -07:00
JJ Kasper
300e6c6ebb [next] Ensure vary header is set for static app paths (#8737)
### Related Issues

x-ref: [slack thread](https://vercel.slack.com/archives/C035J346QQL/p1666025811694049?thread_ts=1666008214.416389&cid=C035J346QQL)
x-ref: https://github.com/vercel/next.js/pull/41479

### 📋 Checklist

<!--
  Please keep your PR as a Draft until the checklist is complete
-->

#### Tests

- [ ] The code changed/added as part of this PR has been covered with tests
- [ ] All tests pass locally with `yarn test-unit`

#### Code Review

- [ ] This PR has a concise title and thorough description useful to a reviewer
- [ ] Issue from task tracker has a link to this PR
2022-10-18 14:47:56 +00:00
Kiko Beats
cfe6550ac8 [node] upgrade edge-runtime to v1.1.0-beta.40 (#8740) 2022-10-18 12:28:14 +00:00
Andy McKay
dfe009ffe2 [tests] Update workflow to examine both labels and use annotations (#8736)
### Related Issues

I couldn't find an issue related to this, but just noticed it when I
submitted a request. I got a build failing because I failed to add in an
`area` label, so added that label and it failed again this time on
`semver`. This change makes it so the workflow looks at both labels,
rather than just one and exiting early. This might save some people
doing 2 builds, like I did 😄

Also changed it to use Actions annotations, which does colourization for
you. Docs on that are here:
https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-a-debug-message

But the output is now something like this ([test
repo](https://github.com/andymckay/test-config)). Missing both labels:

<img width="724" alt="Screen Shot 2022-10-17 at 4 01 35 PM"
src="https://user-images.githubusercontent.com/74699/196299860-9f8ec5e7-fe40-4fe4-8e36-486bf00b2d13.png">

And in the log:

<img width="805" alt="Screen Shot 2022-10-17 at 4 01 41 PM"
src="https://user-images.githubusercontent.com/74699/196299903-149a56e0-2538-419d-8e9f-8e459c7fb42a.png">

And if you've got the labels:

<img width="576" alt="Screen Shot 2022-10-17 at 4 02 59 PM"
src="https://user-images.githubusercontent.com/74699/196299931-88f7f623-f08f-4189-83ec-cd75c466e6a5.png">
2022-10-17 19:16:53 -04:00
8 changed files with 129 additions and 104 deletions

View File

@@ -10,13 +10,17 @@ jobs:
uses: actions/github-script@v6
with:
script: |
let missing = false;
const labels = context.payload.pull_request.labels.map(l => l.name);
if (labels.filter(l => l.startsWith('area:')).length === 0) {
console.error('\u001b[31mMissing label: Please add at least one "area" label.');
process.exit(1);
console.error('::error::Missing label: Please add at least one "area" label.');
missing = true;
}
if (labels.filter(l => l.startsWith('semver:')).length !== 1) {
console.error('\u001b[31mMissing label: Please add exactly one "semver" label.');
console.error('::error::Missing label: Please add exactly one "semver" label.');
missing = true;
}
if (missing) {
process.exit(1);
}
console.log('\u001b[32mSuccess: This pull request has correct labels, thanks!');
console.log('::notice::Success: This pull request has correct labels, thanks!');

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "28.4.11",
"version": "28.4.12",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -44,8 +44,8 @@
"@vercel/build-utils": "5.5.5",
"@vercel/go": "2.2.13",
"@vercel/hydrogen": "0.0.26",
"@vercel/next": "3.2.5",
"@vercel/node": "2.5.25",
"@vercel/next": "3.2.6",
"@vercel/node": "2.5.26",
"@vercel/python": "3.1.22",
"@vercel/redwood": "1.0.31",
"@vercel/remix": "1.0.32",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/edge",
"version": "0.0.4",
"version": "0.0.5",
"license": "MIT",
"main": "dist/index.js",
"module": "dist/index.mjs",
@@ -12,7 +12,7 @@
"build:docs": "typedoc && prettier --write docs/**/*.md docs/*.md"
},
"devDependencies": {
"@edge-runtime/jest-environment": "1.1.0-beta.7",
"@edge-runtime/jest-environment": "1.1.0-beta.36",
"@types/jest": "27.4.1",
"ts-node": "8.9.1",
"tsup": "6.1.2",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/next",
"version": "3.2.5",
"version": "3.2.6",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js",

View File

@@ -964,6 +964,43 @@ export async function serverBuild({
await getStaticFiles(entryPath, entryDirectory, outputDirectory);
const notFoundPreviewRoutes: RouteWithSrc[] = [];
const appDirVaryRoutes: RouteWithSrc[] = [];
// ensure Vary header is set for static app paths
// TODO: remove when we are able to set initial headers on Prerender
if (appPathRoutesManifest) {
for (const route of Object.values(appPathRoutesManifest)) {
if (!prerenders[path.posix.join('.', entryDirectory, route)]) {
continue;
}
let src = path.posix.join('/', entryDirectory, route);
if (isDynamicRoute(route)) {
const dynamicRoute = routesManifest.dynamicRoutes.find(r => {
return r.page === route;
});
if (
dynamicRoute &&
'namedRegex' in dynamicRoute &&
dynamicRoute.namedRegex
) {
src = src.replace(
new RegExp(`${escapeStringRegexp(route)}$`),
dynamicRoute.namedRegex.replace(/^\^/, '')
);
}
}
appDirVaryRoutes.push({
src,
headers: {
vary: '__rsc__, __next_router_state_tree__, __next_router_prefetch__',
},
continue: true,
});
}
}
if (prerenderManifest.notFoundRoutes?.length > 0 && canUsePreviewMode) {
// we combine routes into one src here to reduce the number of needed
@@ -1653,10 +1690,12 @@ export async function serverBuild({
src: path.posix.join('/', entryDirectory, '/(.*).rsc$'),
headers: {
'content-type': 'application/octet-stream',
vary: '__rsc__, __next_router_state_tree__, __next_router_prefetch__',
},
continue: true,
important: true,
},
...appDirVaryRoutes,
]
: []),

View File

@@ -9,7 +9,10 @@
{
"path": "/dashboard",
"status": 200,
"mustContain": "hello from app/dashboard"
"mustContain": "hello from app/dashboard",
"responseHeaders": {
"vary": "__rsc__, __next_router_state_tree__, __next_router_prefetch__"
}
},
{
"path": "/dashboard",
@@ -27,7 +30,8 @@
"__rsc__": "1"
},
"responseHeaders": {
"content-type": "application/octet-stream"
"content-type": "application/octet-stream",
"vary": "__rsc__, __next_router_state_tree__, __next_router_prefetch__"
}
},
{

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/node",
"version": "2.5.25",
"version": "2.5.26",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
@@ -29,12 +29,12 @@
}
},
"dependencies": {
"@edge-runtime/vm": "1.1.0-beta.36",
"@edge-runtime/vm": "1.1.0-beta.37",
"@types/node": "*",
"@vercel/build-utils": "5.5.5",
"@vercel/node-bridge": "3.0.0",
"@vercel/static-config": "2.0.3",
"edge-runtime": "1.1.0-beta.38",
"edge-runtime": "1.1.0-beta.40",
"esbuild": "0.14.47",
"exit-hook": "2.2.1",
"node-fetch": "2.6.7",

156
yarn.lock
View File

@@ -719,46 +719,34 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@edge-runtime/format@1.1.0-beta.33":
version "1.1.0-beta.33"
resolved "https://registry.yarnpkg.com/@edge-runtime/format/-/format-1.1.0-beta.33.tgz#bfba333b47167b0deb09b3df0d5e60d8c72d7c62"
integrity sha512-t34oTdZOqYSiguCGnt9GYzh9mrnhCHNRPGDvxt5PB5T3LZpSVk+vfSXRqpvTxy51sxQpxvTZry8QLC+E+Fm67w==
"@edge-runtime/format@1.1.0-beta.34":
version "1.1.0-beta.34"
resolved "https://registry.yarnpkg.com/@edge-runtime/format/-/format-1.1.0-beta.34.tgz#5dc7549966d26edc64d39e776d0be967dce9592b"
integrity sha512-AdV7FlpBDDiwdPxmrCmq2ICMxzJr3Zoq/bUuIMC09jEmx8fpIAepAABVTEqr+X/6vhIiD2ermIog8qvAG4RZMg==
"@edge-runtime/jest-environment@1.1.0-beta.7":
version "1.1.0-beta.7"
resolved "https://registry.yarnpkg.com/@edge-runtime/jest-environment/-/jest-environment-1.1.0-beta.7.tgz#0aac6fc4f3f9c7ea46108437953b6fe859bf9c66"
integrity sha512-M7RwY3pejYYsTuqcsy/5aFg8Rvfzb1PfNbwjADccradnW0H2NxgQzSGtfXFCLyUvPIigfQbljBX50fcrSYO8Uw==
dependencies:
"@edge-runtime/vm" "^1.1.0-beta.7"
"@jest/environment" "28.1.1"
"@jest/fake-timers" "28.1.1"
"@jest/types" "28.1.1"
jest-mock "28.1.1"
jest-util "28.1.1"
"@edge-runtime/primitives@1.1.0-beta.36":
"@edge-runtime/jest-environment@1.1.0-beta.36":
version "1.1.0-beta.36"
resolved "https://registry.yarnpkg.com/@edge-runtime/primitives/-/primitives-1.1.0-beta.36.tgz#f6e8d7971d515d03fcb2ec59e8cb65564fe80440"
integrity sha512-Tji7SGWmn1+JGSnzFtWUoS7+kODIFprTyIAw0EBOVWEQKWfs7r0aTEm1XkJR0+d1jP9f0GB5LBKG/Z7KFyhx7g==
"@edge-runtime/primitives@^1.1.0-beta.7":
version "1.1.0-beta.7"
resolved "https://registry.yarnpkg.com/@edge-runtime/primitives/-/primitives-1.1.0-beta.7.tgz#0450ee3e5e03a8898ee072c0d0ee01fd2c1ed8f1"
integrity sha512-ZwuSMpmrf2mAj/O7EWxKOXrC03YMkU64N+CgvVFOtJGfhydk4Db/392Zama3BjNYAMOr/oY9L7HxfPutAFesKw==
"@edge-runtime/vm@1.1.0-beta.36":
version "1.1.0-beta.36"
resolved "https://registry.yarnpkg.com/@edge-runtime/vm/-/vm-1.1.0-beta.36.tgz#c5bd6d3823ec252f15fb97c5f65e94084100800c"
integrity sha512-uPZmL7X+lKBFJsTg8nC0qPDBx4JGgpRqlgJi2s77g2NOtqitQOI90BfIKHZSSoMQEwTqfvAkpu2ui8nazOwHxA==
resolved "https://registry.yarnpkg.com/@edge-runtime/jest-environment/-/jest-environment-1.1.0-beta.36.tgz#299cf468833eb308782a92425754e8e082db8434"
integrity sha512-A4geGu+6i61CBlOGd5eqwNGiREatm7aWO3wJ4gUGcA2BH23v4SgVIJUdt0cpNQku69nMshb0AGk3XhHnqUC5rg==
dependencies:
"@edge-runtime/primitives" "1.1.0-beta.36"
"@edge-runtime/vm" "1.1.0-beta.37"
"@jest/environment" "28.1.3"
"@jest/fake-timers" "28.1.3"
"@jest/types" "28.1.3"
jest-mock "28.1.3"
jest-util "28.1.3"
"@edge-runtime/vm@^1.1.0-beta.7":
version "1.1.0-beta.7"
resolved "https://registry.yarnpkg.com/@edge-runtime/vm/-/vm-1.1.0-beta.7.tgz#d7f47d4f18710495094049ed88a28c1b207d60c8"
integrity sha512-biH/Uxgql+PshksqThvCojd0luA9mnua3s8fvEeCwanPsNa0arajG7uwugNQ/7SOFTT0F/LY81wVZ89QFC2H4Q==
"@edge-runtime/primitives@1.1.0-beta.37":
version "1.1.0-beta.37"
resolved "https://registry.yarnpkg.com/@edge-runtime/primitives/-/primitives-1.1.0-beta.37.tgz#7650f3a0652b10dad70ddb7d44cc30e2578d2d6b"
integrity sha512-S3aN8X6wXhM7CJI3FRF480CMNkw4mH6grMV/enQz8VWGrvD1U5njQNRh/Zymoe0RHzEI/aIDjSk3V49h+ULt9g==
"@edge-runtime/vm@1.1.0-beta.37":
version "1.1.0-beta.37"
resolved "https://registry.yarnpkg.com/@edge-runtime/vm/-/vm-1.1.0-beta.37.tgz#60edbb46d6d7c500a3fd38361c1198a876899458"
integrity sha512-1OrFifIxDFpwb1VyrFD8kwWVppc6D1uN7xh5jQzW7jHaVJ0Dw4C2nSAbLe6YKPYj67o09vW72WLzfUcryeD0Pg==
dependencies:
"@edge-runtime/primitives" "^1.1.0-beta.7"
"@edge-runtime/primitives" "1.1.0-beta.37"
"@eslint/eslintrc@^1.2.2":
version "1.2.2"
@@ -931,15 +919,15 @@
slash "^3.0.0"
strip-ansi "^6.0.0"
"@jest/environment@28.1.1":
version "28.1.1"
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.1.tgz#c4cbf85283278d768f816ebd1a258ea6f9e39d4f"
integrity sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==
"@jest/environment@28.1.3":
version "28.1.3"
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e"
integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==
dependencies:
"@jest/fake-timers" "^28.1.1"
"@jest/types" "^28.1.1"
"@jest/fake-timers" "^28.1.3"
"@jest/types" "^28.1.3"
"@types/node" "*"
jest-mock "^28.1.1"
jest-mock "^28.1.3"
"@jest/environment@^28.0.2":
version "28.0.2"
@@ -966,17 +954,17 @@
expect "^28.0.2"
jest-snapshot "^28.0.2"
"@jest/fake-timers@28.1.1", "@jest/fake-timers@^28.1.1":
version "28.1.1"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.1.tgz#47ce33296ab9d680c76076d51ddbe65ceb3337f1"
integrity sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==
"@jest/fake-timers@28.1.3", "@jest/fake-timers@^28.1.3":
version "28.1.3"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e"
integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==
dependencies:
"@jest/types" "^28.1.1"
"@sinonjs/fake-timers" "^9.1.1"
"@jest/types" "^28.1.3"
"@sinonjs/fake-timers" "^9.1.2"
"@types/node" "*"
jest-message-util "^28.1.1"
jest-mock "^28.1.1"
jest-util "^28.1.1"
jest-message-util "^28.1.3"
jest-mock "^28.1.3"
jest-util "^28.1.3"
"@jest/fake-timers@^28.0.2":
version "28.0.2"
@@ -1092,12 +1080,12 @@
slash "^3.0.0"
write-file-atomic "^4.0.1"
"@jest/types@28.1.1", "@jest/types@^28.1.1":
version "28.1.1"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.1.tgz#d059bbc80e6da6eda9f081f293299348bd78ee0b"
integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==
"@jest/types@28.1.3", "@jest/types@^28.1.3":
version "28.1.3"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b"
integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==
dependencies:
"@jest/schemas" "^28.0.2"
"@jest/schemas" "^28.1.3"
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^3.0.0"
"@types/node" "*"
@@ -2100,7 +2088,7 @@
dependencies:
type-detect "4.0.8"
"@sinonjs/fake-timers@^9.1.1":
"@sinonjs/fake-timers@^9.1.1", "@sinonjs/fake-timers@^9.1.2":
version "9.1.2"
resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c"
integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==
@@ -5473,13 +5461,13 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
edge-runtime@1.1.0-beta.38:
version "1.1.0-beta.38"
resolved "https://registry.yarnpkg.com/edge-runtime/-/edge-runtime-1.1.0-beta.38.tgz#f15f136a553e342744aae1a345368bc2c6298a4e"
integrity sha512-MY6/XcnGGuvLmwAR6PQizjhW/ABjVnmpJQmhJRacmo7K7LhuevszrPFVf0GmwVrr9PUahrvgmZYydQLSTpS5AA==
edge-runtime@1.1.0-beta.40:
version "1.1.0-beta.40"
resolved "https://registry.yarnpkg.com/edge-runtime/-/edge-runtime-1.1.0-beta.40.tgz#02623b41324be86b73972e76934561d1c2e71eff"
integrity sha512-KuoSRsQZUMyec6gtD9YOFA5ohmWtquTXKco+pLv1/1zcHmD0/rXU1QkTkE40BKwq+O02Esk9iPlx9LkHaQr3vg==
dependencies:
"@edge-runtime/format" "1.1.0-beta.33"
"@edge-runtime/vm" "1.1.0-beta.36"
"@edge-runtime/format" "1.1.0-beta.34"
"@edge-runtime/vm" "1.1.0-beta.37"
exit-hook "2.2.1"
http-status "1.5.3"
mri "1.2.0"
@@ -8148,27 +8136,27 @@ jest-message-util@^28.0.2:
slash "^3.0.0"
stack-utils "^2.0.3"
jest-message-util@^28.1.1:
version "28.1.1"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89"
integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==
jest-message-util@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d"
integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==
dependencies:
"@babel/code-frame" "^7.12.13"
"@jest/types" "^28.1.1"
"@jest/types" "^28.1.3"
"@types/stack-utils" "^2.0.0"
chalk "^4.0.0"
graceful-fs "^4.2.9"
micromatch "^4.0.4"
pretty-format "^28.1.1"
pretty-format "^28.1.3"
slash "^3.0.0"
stack-utils "^2.0.3"
jest-mock@28.1.1, jest-mock@^28.1.1:
version "28.1.1"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.1.tgz#37903d269427fa1ef5b2447be874e1c62a39a371"
integrity sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==
jest-mock@28.1.3, jest-mock@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da"
integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==
dependencies:
"@jest/types" "^28.1.1"
"@jest/types" "^28.1.3"
"@types/node" "*"
jest-mock@^28.0.2:
@@ -8296,12 +8284,12 @@ jest-snapshot@^28.0.2:
pretty-format "^28.0.2"
semver "^7.3.5"
jest-util@28.1.1, jest-util@^28.1.1:
version "28.1.1"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.1.tgz#ff39e436a1aca397c0ab998db5a51ae2b7080d05"
integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==
jest-util@28.1.3, jest-util@^28.1.3:
version "28.1.3"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0"
integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==
dependencies:
"@jest/types" "^28.1.1"
"@jest/types" "^28.1.3"
"@types/node" "*"
chalk "^4.0.0"
ci-info "^3.2.0"
@@ -10485,16 +10473,6 @@ pretty-format@^28.0.2:
ansi-styles "^5.0.0"
react-is "^18.0.0"
pretty-format@^28.1.1:
version "28.1.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb"
integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==
dependencies:
"@jest/schemas" "^28.0.2"
ansi-regex "^5.0.1"
ansi-styles "^5.0.0"
react-is "^18.0.0"
pretty-ms@7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"