Compare commits

...

9 Commits

Author SHA1 Message Date
Sean Massa
ab9915af32 Publish Stable
- @vercel/build-utils@6.5.0
 - vercel@28.18.0
 - @vercel/client@12.4.6
 - @vercel/fs-detectors@3.8.6
 - @vercel/gatsby-plugin-vercel-builder@1.2.3
 - @vercel/go@2.4.1
 - @vercel/hydrogen@0.0.59
 - @vercel/next@3.7.0
 - @vercel/node@2.9.14
 - @vercel/python@3.1.55
 - @vercel/redwood@1.1.11
 - @vercel/remix-builder@1.8.0
 - @vercel/ruby@1.3.72
 - @vercel/static-build@1.3.18
2023-03-22 12:37:51 -05:00
Chris Barber
d6dc27638c [build-utils][next] Add prerender source path (#9686)
Adds the `sourcePath` for ISR prerender lambdas so that the front end can associate derived pages with the source route.

There's an accompanying `api` PR (https://github.com/vercel/api/pull/17940) which uses this deployment's tarballs to test the functionality. Here's the result:

![image](https://user-images.githubusercontent.com/97262/226947180-a8e6b75e-f6a5-44fa-8034-08bd24569f3f.png)

Linear: https://linear.app/vercel/issue/VCCLI-410/communicate-how-functions-are-bundled
2023-03-22 17:16:44 +00:00
Sean Massa
0fb0601d19 [node] Improve edge-handler-template error handling (#9697) 2023-03-22 11:31:44 -05:00
Nathan Rajlich
ce25dec97d [remix] Inject @vercel/remix package instead of @vercel/remix-entry-server (#9684)
The `handleRequest()` function has been moved to the `@vercel/remix` package, so we can deprecate `@vercel/remix-entry-server` entirely and install `@vercel/remix` in the project instead, when there is no `app/entry.server.tsx` file defined in the project already.
2023-03-22 01:06:14 +00:00
Nathan Rajlich
20bd71ce70 [node][remix] Update nft conditions to include "edge-light" for Edge Functions (#9700) 2023-03-21 23:59:49 +00:00
Sean Massa
4c77dab5cb [tests][cli] convert CLI integration tests to TS (#9672)
Converts the CLI integration tests to TypeScript. This will make it easier to pick apart the test pollution.
2023-03-18 18:21:45 +00:00
Sean Massa
151b0dfb63 [cli] handle BUILD_UTILS_SPAWN_* errors (#9689)
Some condition in the system caused `BUILD_UTILS_SPAWN_1` errors to be thrown for failed deployments. The error handling logic wasn't handling this properly, causing the error message to never show up in the output.

```
Error: Unexpected error. Please try again later. ()
```
2023-03-17 22:12:23 +00:00
Nathan Rajlich
42e9bbea5b [examples] Update "remix" template to use @vercel/remix package (#9683) 2023-03-17 21:47:05 +00:00
Steven
c0471302e9 [cli] Ignore vc build subdirectory warning on vercel (#9685)
This warning is only relevant when running `vc build` locally so we can hide it for Vercel deployments.

I noticed this in the build logs here:

<img width="862" alt="image" src="https://user-images.githubusercontent.com/229881/225774670-9b4aecf5-d020-489f-819f-7b55ce96f877.png">
2023-03-16 23:57:33 +00:00
34 changed files with 581 additions and 402 deletions

View File

@@ -1,22 +0,0 @@
import { RemixBrowser } from "@remix-run/react";
import { startTransition, StrictMode } from "react";
import { hydrateRoot } from "react-dom/client";
function hydrate() {
startTransition(() => {
hydrateRoot(
document,
<StrictMode>
<RemixBrowser />
</StrictMode>
);
});
}
if (typeof requestIdleCallback === "function") {
requestIdleCallback(hydrate);
} else {
// Safari doesn't support requestIdleCallback
// https://caniuse.com/requestidlecallback
setTimeout(hydrate, 1);
}

View File

@@ -1,6 +1,6 @@
import handleRequest from "@vercel/remix-entry-server";
import { RemixServer } from "@remix-run/react";
import type { EntryContext } from "@remix-run/server-runtime";
import { handleRequest } from "@vercel/remix";
import type { EntryContext } from "@vercel/remix";
export default function (
request: Request,

View File

@@ -1,4 +1,4 @@
import type { MetaFunction } from "@remix-run/node";
import type { MetaFunction } from "@vercel/remix";
import {
Links,
LiveReload,

View File

@@ -6,18 +6,16 @@
"dev": "remix dev"
},
"dependencies": {
"@remix-run/node": "^1.13.0",
"@remix-run/react": "^1.13.0",
"@remix-run/serve": "^1.13.0",
"@remix-run/server-runtime": "^1.13.0",
"@vercel/analytics": "^0.1.10",
"@vercel/remix-entry-server": "^0.1.0",
"@remix-run/react": "^1.14.3",
"@remix-run/serve": "^1.14.3",
"@vercel/analytics": "^0.1.11",
"@vercel/remix": "1.14.3-patch.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@remix-run/dev": "^1.13.0",
"@remix-run/eslint-config": "^1.13.0",
"@remix-run/dev": "^1.14.3",
"@remix-run/eslint-config": "^1.14.3",
"@types/react": "^18.0.25",
"@types/react-dom": "^18.0.11",
"eslint": "^8.28.0",

View File

@@ -4,32 +4,28 @@ importers:
.:
specifiers:
'@remix-run/dev': ^1.13.0
'@remix-run/eslint-config': ^1.13.0
'@remix-run/node': ^1.13.0
'@remix-run/react': ^1.13.0
'@remix-run/serve': ^1.13.0
'@remix-run/server-runtime': ^1.13.0
'@remix-run/dev': ^1.14.3
'@remix-run/eslint-config': ^1.14.3
'@remix-run/react': ^1.14.3
'@remix-run/serve': ^1.14.3
'@types/react': ^18.0.25
'@types/react-dom': ^18.0.11
'@vercel/analytics': ^0.1.10
'@vercel/remix-entry-server': ^0.1.0
'@vercel/analytics': ^0.1.11
'@vercel/remix': 1.14.3-patch.1
eslint: ^8.28.0
react: ^18.2.0
react-dom: ^18.2.0
typescript: ^4.9.3
dependencies:
'@remix-run/node': 1.13.0
'@remix-run/react': 1.13.0_biqbaboplfbrettd7655fr4n2y
'@remix-run/serve': 1.13.0
'@remix-run/server-runtime': 1.13.0
'@vercel/analytics': 0.1.10_react@18.2.0
'@vercel/remix-entry-server': 0.1.0_react@18.2.0
'@remix-run/react': 1.14.3_biqbaboplfbrettd7655fr4n2y
'@remix-run/serve': 1.14.3
'@vercel/analytics': 0.1.11_react@18.2.0
'@vercel/remix': 1.14.3-patch.1_biqbaboplfbrettd7655fr4n2y
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
devDependencies:
'@remix-run/dev': 1.13.0_@remix-run+serve@1.13.0
'@remix-run/eslint-config': 1.13.0_km5ddj7uwb23cqeymeyvzjsfb4
'@remix-run/dev': 1.14.3_@remix-run+serve@1.14.3
'@remix-run/eslint-config': 1.14.3_km5ddj7uwb23cqeymeyvzjsfb4
'@types/react': 18.0.28
'@types/react-dom': 18.0.11
eslint: 8.34.0
@@ -1665,12 +1661,12 @@ packages:
tslib: 2.5.0
dev: true
/@remix-run/dev/1.13.0_@remix-run+serve@1.13.0:
resolution: {integrity: sha512-hPqUjM9RRcz3inBOWqP3GKhggVz0a0ikWaRZpdKrhpQNCNiF6Hunbx876mJERj2YrmIzJ05eoeQmmdF6xcr4qg==}
/@remix-run/dev/1.14.3_@remix-run+serve@1.14.3:
resolution: {integrity: sha512-46mmwiA/k9YDkg0UrP90UB3azVVWRXw16NLHRSbZiaaYe8XgUkddEtBnH/nBp/IrVCtzUL3LObplUe5sFk5Z9Q==}
engines: {node: '>=14'}
hasBin: true
peerDependencies:
'@remix-run/serve': ^1.13.0
'@remix-run/serve': ^1.14.3
peerDependenciesMeta:
'@remix-run/serve':
optional: true
@@ -1686,8 +1682,8 @@ packages:
'@babel/types': 7.20.7
'@esbuild-plugins/node-modules-polyfill': 0.1.4_esbuild@0.16.3
'@npmcli/package-json': 2.0.0
'@remix-run/serve': 1.13.0
'@remix-run/server-runtime': 1.13.0
'@remix-run/serve': 1.14.3
'@remix-run/server-runtime': 1.14.3
'@vanilla-extract/integration': 6.1.0
arg: 5.0.2
cacache: 15.3.0
@@ -1718,6 +1714,7 @@ packages:
prettier: 2.7.1
pretty-ms: 7.0.1
proxy-agent: 5.0.0
react-refresh: 0.14.0
recast: 0.21.5
remark-frontmatter: 4.0.1
remark-mdx-frontmatter: 1.1.1
@@ -1736,8 +1733,8 @@ packages:
- utf-8-validate
dev: true
/@remix-run/eslint-config/1.13.0_km5ddj7uwb23cqeymeyvzjsfb4:
resolution: {integrity: sha512-qz/N99D/q1mQefZl2X+p11xVk03r6aFDMvk/4mG+8IrMRU4BqMJ/bF53/CUOveSzvzLua4Pfi2wmqF+deHw0GQ==}
/@remix-run/eslint-config/1.14.3_km5ddj7uwb23cqeymeyvzjsfb4:
resolution: {integrity: sha512-Yy4PYSvAehj31LmkDA+lS5yCPL1lR9O04gMIo0xwHT2o59pF4QU54lEAvJJH+9MI0byZUI/v9DoGz1oGIb44IA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^8.0.0
@@ -1772,35 +1769,20 @@ packages:
- supports-color
dev: true
/@remix-run/express/1.13.0_express@4.18.2:
resolution: {integrity: sha512-MX80PdQu3k1HlQsHlUjPBZe5rpTdn4FqZ5Fg4d85cVi+GMfu3x8n8hB0xbCDLhmRbKTR01PQ01j3UUNtsWWikg==}
/@remix-run/express/1.14.3_express@4.18.2:
resolution: {integrity: sha512-v3TT+zBFSnOiVTHNiLp5A783UVYyZYbePxmPhvoe9JwHCmzVDA9mfyxYgDl/8NPDtYS+dAPU7mQ+aE1M5MXc7g==}
engines: {node: '>=14'}
peerDependencies:
express: ^4.17.1
dependencies:
'@remix-run/node': 1.13.0
'@remix-run/node': 1.14.3
express: 4.18.2
/@remix-run/node/1.12.0:
resolution: {integrity: sha512-WiyRTEQKTUTf3Z3ke5DOwx+fjCkeD8ilI9kbRws1bG3xfdugaDrV9ra76DOZcrYlmVwjwtKE3mVDSRFtiYTTMw==}
/@remix-run/node/1.14.3:
resolution: {integrity: sha512-Mq0wUtgJtGwMQEBr/8p9XpdPBm7N+lby5CEbW6IKV59UC9N3VMGY3snfrsphBCq3sNZfbhIpaDdu2W+8EoqfnQ==}
engines: {node: '>=14'}
dependencies:
'@remix-run/server-runtime': 1.12.0
'@remix-run/web-fetch': 4.3.2
'@remix-run/web-file': 3.0.2
'@remix-run/web-stream': 1.0.3
'@web3-storage/multipart-parser': 1.0.0
abort-controller: 3.0.0
cookie-signature: 1.2.0
source-map-support: 0.5.21
stream-slice: 0.1.2
dev: false
/@remix-run/node/1.13.0:
resolution: {integrity: sha512-FDvPGaoDyon8UGYQ9DroLtiX8vFa0efBQQSHV3az0s7HbUpugw7BcA6NBW5pIs2z5sszCCeRbAgSIXcETLzfhw==}
engines: {node: '>=14'}
dependencies:
'@remix-run/server-runtime': 1.13.0
'@remix-run/server-runtime': 1.14.3
'@remix-run/web-fetch': 4.3.2
'@remix-run/web-file': 3.0.2
'@remix-run/web-stream': 1.0.3
@@ -1810,59 +1792,41 @@ packages:
source-map-support: 0.5.21
stream-slice: 0.1.2
/@remix-run/react/1.13.0_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-LT9TStmMavBlLqRG8u5Ku8bxdYcpIbqpmh44/f2Fyw8RvdaRCYYMkuUXsr8bhOqftaEZMFLqFhi19NWY/18DLA==}
/@remix-run/react/1.14.3_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-dvwIx+9ZdE/9LHe8Rjos9gEOdQFLvC0dojCnKlsUIwfGhyjKE4wOHfqS9mZcmKFCvOFDakcZDallLNGaj0mEYg==}
engines: {node: '>=14'}
peerDependencies:
react: '>=16.8'
react-dom: '>=16.8'
dependencies:
'@remix-run/router': 1.3.2
'@remix-run/router': 1.3.3
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
react-router-dom: 6.8.1_biqbaboplfbrettd7655fr4n2y
react-router-dom: 6.8.2_biqbaboplfbrettd7655fr4n2y
use-sync-external-store: 1.2.0_react@18.2.0
dev: false
/@remix-run/router/1.3.1:
resolution: {integrity: sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==}
engines: {node: '>=14'}
dev: false
/@remix-run/router/1.3.2:
resolution: {integrity: sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==}
/@remix-run/router/1.3.3:
resolution: {integrity: sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w==}
engines: {node: '>=14'}
/@remix-run/serve/1.13.0:
resolution: {integrity: sha512-ondApr1ZUbQR6iy1iGvdarBGqvTZdET4wSNFb2+2NrbxW9Y9E3RZ7q+5M5/iiuy1qbdqubqsoq2N7uFk+gDGxw==}
/@remix-run/serve/1.14.3:
resolution: {integrity: sha512-5So5+PtAaYZq3hc45snkCKIOh51Z45WvhHpRgB0ZsOuhUf6p9UAY9LQk7GRNvkcqL9LChE3LQ9O4gPqnUiZgpA==}
engines: {node: '>=14'}
hasBin: true
dependencies:
'@remix-run/express': 1.13.0_express@4.18.2
'@remix-run/express': 1.14.3_express@4.18.2
compression: 1.7.4
express: 4.18.2
morgan: 1.10.0
transitivePeerDependencies:
- supports-color
/@remix-run/server-runtime/1.12.0:
resolution: {integrity: sha512-7I0165Ns/ffPfCEfuiqD58lMderTn2s/sew1xJ34ONa21mG/7+5T7diHIgxKST8rS3816JPmlwSqUaHgwbmO6Q==}
/@remix-run/server-runtime/1.14.3:
resolution: {integrity: sha512-qh8sxfLj/XW1u6rluN7yIgbvMCoKrVacYGUiPM7g0VHk8h8MlZGAIUfsWM45Poxo3X0uLhNuqqxMaPWldKawIQ==}
engines: {node: '>=14'}
dependencies:
'@remix-run/router': 1.3.1
'@types/cookie': 0.4.1
'@types/react': 18.0.28
'@web3-storage/multipart-parser': 1.0.0
cookie: 0.4.2
set-cookie-parser: 2.5.1
source-map: 0.7.4
dev: false
/@remix-run/server-runtime/1.13.0:
resolution: {integrity: sha512-gjIW3XCeIlOt3rrOZMD6HixQydRgs1SwYjP99ZAVruG2+gNq/tL2OusMFYTLvtWrybt215tPROyF/6iTLsaO3g==}
engines: {node: '>=14'}
dependencies:
'@remix-run/router': 1.3.2
'@remix-run/router': 1.3.3
'@types/cookie': 0.4.1
'@types/react': 18.0.28
'@web3-storage/multipart-parser': 1.0.0
@@ -2252,21 +2216,24 @@ packages:
resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==}
dev: true
/@vercel/analytics/0.1.10_react@18.2.0:
resolution: {integrity: sha512-jjJ8GzcPnQp0cMxpfYoUycMRBtDiaIeyVjZPiEPe99Dj1PdjMzAFYEASiV/hpNsXHkpcNYCveDFh6jnmh0YSDQ==}
/@vercel/analytics/0.1.11_react@18.2.0:
resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==}
peerDependencies:
react: ^16.8||^17||^18
dependencies:
react: 18.2.0
dev: false
/@vercel/remix-entry-server/0.1.0_react@18.2.0:
resolution: {integrity: sha512-ux1pcYvcPXAUXQuSH4fwNfkrzYYemFpdc3r4lF3L3PBE5doGhYDuBdTfXZpWl1M5zXi6VAbK6V6qkD33iZWGDA==}
/@vercel/remix/1.14.3-patch.1_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-TBI/FS77HYZqjbgeABi7Rbg7RVQ1YLHcXm4/zroV4zl0nVbcXM2jVR3SXm0EuQKze+NZ0p3VBUz4I/xocTvq0w==}
engines: {node: '>=14'}
peerDependencies:
react: ^18.0.0
react: '*'
react-dom: '*'
dependencies:
'@remix-run/node': 1.12.0
isbot: 3.6.5
'@remix-run/node': 1.14.3
'@remix-run/server-runtime': 1.14.3
isbot: 3.6.6
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
dev: false
@@ -3092,7 +3059,7 @@ packages:
dev: true
/ee-first/1.1.1:
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
/electron-to-chromium/1.4.296:
resolution: {integrity: sha512-i/6Q+Y9bluDa2a0NbMvdtG5TuS/1Fr3TKK8L+7UUL9QjRS5iFJzCC3r70xjyOnLiYG8qGV4/mMpe6HuAbdJW4w==}
@@ -3901,7 +3868,7 @@ packages:
engines: {node: '>= 0.6'}
/fresh/0.5.2:
resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
/fs-constants/1.0.0:
@@ -4638,8 +4605,8 @@ packages:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
dev: true
/isbot/3.6.5:
resolution: {integrity: sha512-BchONELXt6yMad++BwGpa0oQxo/uD0keL7N15cYVf0A1oMIoNQ79OqeYdPMFWDrNhCqCbRuw9Y9F3QBjvAxZ5g==}
/isbot/3.6.6:
resolution: {integrity: sha512-98aGl1Spbx1led422YFrusDJ4ZutSNOymb2avZ2V4BCCjF3MqAF2k+J2zoaLYahubaFkb+3UyvbVDVlk/Ngrew==}
engines: {node: '>=12'}
dev: false
@@ -5006,11 +4973,11 @@ packages:
dev: true
/media-typer/0.3.0:
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
/merge-descriptors/1.0.1:
resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
/merge-stream/2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -6057,26 +6024,31 @@ packages:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
dev: true
/react-router-dom/6.8.1_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==}
/react-refresh/0.14.0:
resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
engines: {node: '>=0.10.0'}
dev: true
/react-router-dom/6.8.2_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg==}
engines: {node: '>=14'}
peerDependencies:
react: '>=16.8'
react-dom: '>=16.8'
dependencies:
'@remix-run/router': 1.3.2
'@remix-run/router': 1.3.3
react: 18.2.0
react-dom: 18.2.0_react@18.2.0
react-router: 6.8.1_react@18.2.0
react-router: 6.8.2_react@18.2.0
dev: false
/react-router/6.8.1_react@18.2.0:
resolution: {integrity: sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==}
/react-router/6.8.2_react@18.2.0:
resolution: {integrity: sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw==}
engines: {node: '>=14'}
peerDependencies:
react: '>=16.8'
dependencies:
'@remix-run/router': 1.3.2
'@remix-run/router': 1.3.3
react: 18.2.0
dev: false
@@ -6993,7 +6965,7 @@ packages:
which-typed-array: 1.1.9
/utils-merge/1.0.1:
resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
engines: {node: '>= 0.4.0'}
/uvu/0.5.6:

View File

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

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/build-utils",
"version": "6.4.0",
"version": "6.5.0",
"license": "MIT",
"main": "./dist/index.js",
"types": "./dist/index.d.js",

View File

@@ -11,6 +11,7 @@ interface PrerenderOptions {
initialHeaders?: Record<string, string>;
initialStatus?: number;
passQuery?: boolean;
sourcePath?: string;
}
export class Prerender {
@@ -24,6 +25,7 @@ export class Prerender {
public initialHeaders?: Record<string, string>;
public initialStatus?: number;
public passQuery?: boolean;
public sourcePath?: string;
constructor({
expiration,
@@ -35,9 +37,11 @@ export class Prerender {
initialHeaders,
initialStatus,
passQuery,
sourcePath,
}: PrerenderOptions) {
this.type = 'Prerender';
this.expiration = expiration;
this.sourcePath = sourcePath;
this.lambda = lambda;
if (this.lambda) {

View File

@@ -1,6 +1,6 @@
{
"name": "vercel",
"version": "28.17.0",
"version": "28.18.0",
"preferGlobal": true,
"license": "Apache-2.0",
"description": "The command-line interface for Vercel",
@@ -32,16 +32,16 @@
"node": ">= 14"
},
"dependencies": {
"@vercel/build-utils": "6.4.0",
"@vercel/go": "2.4.0",
"@vercel/hydrogen": "0.0.58",
"@vercel/next": "3.6.7",
"@vercel/node": "2.9.13",
"@vercel/python": "3.1.54",
"@vercel/redwood": "1.1.10",
"@vercel/remix-builder": "1.7.0",
"@vercel/ruby": "1.3.71",
"@vercel/static-build": "1.3.17"
"@vercel/build-utils": "6.5.0",
"@vercel/go": "2.4.1",
"@vercel/hydrogen": "0.0.59",
"@vercel/next": "3.7.0",
"@vercel/node": "2.9.14",
"@vercel/python": "3.1.55",
"@vercel/redwood": "1.1.11",
"@vercel/remix-builder": "1.8.0",
"@vercel/ruby": "1.3.72",
"@vercel/static-build": "1.3.18"
},
"devDependencies": {
"@alex_neo/jest-expect-message": "1.0.5",
@@ -85,10 +85,10 @@
"@types/write-json-file": "2.2.1",
"@types/yauzl-promise": "2.1.0",
"@vercel-internals/types": "*",
"@vercel/client": "12.4.5",
"@vercel/client": "12.4.6",
"@vercel/error-utils": "1.0.8",
"@vercel/frameworks": "1.3.3",
"@vercel/fs-detectors": "3.8.5",
"@vercel/fs-detectors": "3.8.6",
"@vercel/fun": "1.0.4",
"@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "2.1.11",

View File

@@ -281,7 +281,12 @@ const main = async () => {
GLOBAL_COMMANDS.has(targetOrSubcommand) ||
commands.has(targetOrSubcommand);
if (targetPathExists && subcommandExists && !argv['--cwd']) {
if (
targetPathExists &&
subcommandExists &&
!argv['--cwd'] &&
!process.env.NOW_BUILDER
) {
output.warn(
`Did you mean to deploy the subdirectory "${targetOrSubcommand}"? ` +
`Use \`vc --cwd ${targetOrSubcommand}\` instead.`

View File

@@ -290,7 +290,8 @@ export default class Now extends EventEmitter {
if (
error.errorCode === 'BUILD_FAILED' ||
error.errorCode === 'UNEXPECTED_ERROR'
error.errorCode === 'UNEXPECTED_ERROR' ||
error.errorCode.includes('BUILD_UTILS_SPAWN_')
) {
return new BuildError({
message: error.errorMessage,
@@ -298,7 +299,7 @@ export default class Now extends EventEmitter {
});
}
return new Error(error.message);
return new Error(error.message || error.errorMessage);
}
async listSecrets(next?: number, testWarningFlag?: boolean) {

View File

@@ -105,7 +105,7 @@ test('[vercel dev] throws an error when an edge function has no response', async
expect(await res.status).toBe(500);
expect(await res.text()).toMatch('FUNCTION_INVOCATION_FAILED');
expect(stdout).toMatch(
/Error from API Route \/api\/edge-no-response: Edge Function "api\/edge-no-response.js" did not return a response./g
/Error from API Route \/api\/edge-no-response: Edge Function did not return a response./g
);
} finally {
await dev.kill();

View File

@@ -1,5 +1,3 @@
// @ts-nocheck
// Note: this file is incrementally migrating to typescript
import ms from 'ms';
import path from 'path';
import { URL, parse as parseUrl } from 'url';
@@ -8,7 +6,8 @@ import { Readable } from 'stream';
import { homedir, tmpdir } from 'os';
import _execa from 'execa';
import XDGAppPaths from 'xdg-app-paths';
import fetch from 'node-fetch';
import fetch, { RequestInfo, RequestInit } from 'node-fetch';
// @ts-ignore
import tmp from 'tmp-promise';
import retry from 'async-retry';
import fs, {
@@ -25,17 +24,61 @@ import pkg from '../package.json';
import prepareFixtures from './helpers/prepare';
import { fetchTokenWithRetry } from '../../../test/lib/deployment/now-deploy';
import { once } from 'node:events';
import type { PackageJson } from '@vercel/build-utils';
import type http from 'http';
const TEST_TIMEOUT = 3 * 60 * 1000;
jest.setTimeout(TEST_TIMEOUT);
// log command when running `execa`
function execa(file, args, options) {
console.log(`$ vercel ${args.join(' ')}`);
return _execa(file, args, options);
type BoundChildProcess = _execa.ExecaChildProcess & {
stdout: Readable;
stdin: Readable;
stderr: Readable;
};
interface TmpDir {
name: string;
removeCallback: () => void;
}
function fixture(name) {
interface Build {
use: string;
}
type NowJson = {
name: string;
};
type DeploymentLike = {
error?: Error;
builds: Build[];
};
// log command when running `execa`
function execa(
file: string,
args: string[],
options?: _execa.Options<string>
): BoundChildProcess {
console.log(`$ vercel ${args.join(' ')}`);
const proc = _execa(file, args, options);
if (proc.stdin === null) {
console.warn(`vercel ${args.join(' ')} - not bound to stdin`);
}
if (proc.stdout === null) {
console.warn(`vercel ${args.join(' ')} - not bound to stdout`);
}
if (proc.stderr === null) {
console.warn(`vercel ${args.join(' ')} - not bound to stderr`);
}
// if a reference to `proc.stdout` (for example) fails later,
// the logs will say clearly where that came from
// so, it's not awful to use the type assertion here
return proc as BoundChildProcess;
}
function fixture(name: string) {
const directory = path.join(tmpFixturesDir, name);
const config = path.join(directory, 'project.json');
@@ -48,21 +91,21 @@ function fixture(name) {
}
const binaryPath = path.resolve(__dirname, `../scripts/start.js`);
const example = name =>
const example = (name: string) =>
path.join(__dirname, '..', '..', '..', 'examples', name);
const deployHelpMessage = `${logo} vercel [options] <command | path>`;
let session = 'temp-session';
const isCanary = pkg.version.includes('canary');
const pickUrl = stdout => {
const pickUrl = (stdout: string) => {
const lines = stdout.split('\n');
return lines[lines.length - 1];
};
const createFile = dest => fs.closeSync(fs.openSync(dest, 'w'));
const createFile = (dest: fs.PathLike) => fs.closeSync(fs.openSync(dest, 'w'));
const waitForDeployment = async href => {
const waitForDeployment = async (href: RequestInfo) => {
console.log(`waiting for ${href} to become ready...`);
const start = Date.now();
const max = ms('4m');
@@ -89,7 +132,7 @@ const waitForDeployment = async href => {
}
};
function fetchTokenInformation(token, retries = 3) {
function fetchTokenInformation(token: string, retries = 3) {
const url = `https://api.vercel.com/v2/user`;
const headers = { Authorization: `Bearer ${token}` };
@@ -111,7 +154,13 @@ function fetchTokenInformation(token, retries = 3) {
);
}
function formatOutput({ stderr, stdout }) {
function formatOutput({
stderr,
stdout,
}: {
stderr: string | Readable;
stdout: string | Readable;
}) {
return `
-----
@@ -127,7 +176,7 @@ ${stdout || '(no output)'}
`;
}
async function vcLink(projectPath) {
async function vcLink(projectPath: string) {
const { exitCode, stdout, stderr } = await execa(
binaryPath,
['link', '--yes', ...defaultArgs],
@@ -140,26 +189,55 @@ async function vcLink(projectPath) {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
}
const context = {};
async function getLocalhost(vc: BoundChildProcess): Promise<RegExpExecArray> {
let localhost: RegExpExecArray | undefined;
await waitForPrompt(vc, chunk => {
if (chunk.includes('Ready! Available at')) {
localhost = /(https?:[^\s]+)/g.exec(chunk) || undefined;
return true;
}
return false;
});
// This should never happen because waitForPrompt will time out
// and never return here in this case, but extra checking is fine
// and it makes typescript happy
if (!localhost) {
throw new Error('Localhost not found!');
}
return localhost;
}
function getTmpDir(): TmpDir {
return tmp.dirSync({
// This ensures the directory gets
// deleted even if it has contents
unsafeCleanup: true,
}) as TmpDir;
}
const context: {
deployment: string | undefined;
secretName: string | undefined;
} = {
deployment: undefined,
secretName: undefined,
};
const defaultOptions = { reject: false };
const defaultArgs = [];
let token;
let email;
let contextName;
const defaultArgs: string[] = [];
let token: string | undefined;
let email: string | undefined;
let contextName: string | undefined;
let tmpDir;
let tmpDir: TmpDir | undefined;
let tmpFixturesDir = path.join(tmpdir(), 'tmp-fixtures');
let globalDir = XDGAppPaths('com.vercel.cli').dataDirs()[0];
if (!process.env.CI) {
tmpDir = tmp.dirSync({
// This ensures the directory gets
// deleted even if it has contents
unsafeCleanup: true,
});
tmpDir = getTmpDir();
globalDir = path.join(tmpDir.name, 'com.vercel.tests');
defaultArgs.push('-Q', globalDir);
@@ -169,7 +247,7 @@ if (!process.env.CI) {
);
}
function mockLoginApi(req, res) {
function mockLoginApi(req: http.IncomingMessage, res: http.ServerResponse) {
const { url = '/', method } = req;
let { pathname = '/', query = {} } = parseUrl(url, true);
console.log(`[mock-login-server] ${method} ${pathname}`);
@@ -202,13 +280,13 @@ const loginApiServer = require('http')
console.log(`[mock-login-server] Listening on ${loginApiUrl}`);
});
const execute = (args, options) =>
const execute = (args: string[], options?: _execa.Options<string>) =>
execa(binaryPath, [...defaultArgs, ...args], {
...defaultOptions,
...options,
});
const apiFetch = (url, { headers, ...options } = {}) => {
const apiFetch = (url: string, { headers, ...options }: RequestInit = {}) => {
return fetch(`https://api.vercel.com${url}`, {
headers: {
Authorization: `Bearer ${token}`,
@@ -218,14 +296,23 @@ const apiFetch = (url, { headers, ...options } = {}) => {
});
};
const waitForPrompt = (cp, assertion) =>
new Promise((resolve, reject) => {
// the prompt timeout has to be less than the test timeout
const PROMPT_TIMEOUT = TEST_TIMEOUT / 2;
const waitForPrompt = (
cp: BoundChildProcess,
assertion: (chunk: string) => boolean
) =>
new Promise<void>((resolve, reject) => {
console.log('Waiting for prompt...');
const handleTimeout = setTimeout(
() => reject(new Error('timeout in waitForPrompt')),
TEST_TIMEOUT / 2
() =>
reject(
new Error(`timed out after ${PROMPT_TIMEOUT}ms in waitForPrompt`)
),
PROMPT_TIMEOUT
);
const listener = chunk => {
const listener = (chunk: string) => {
console.log('> ' + chunk);
if (assertion(chunk)) {
cp.stdout.off && cp.stdout.off('data', listener);
@@ -265,7 +352,15 @@ const createUser = async () => {
const getConfigAuthPath = () => path.join(globalDir, 'auth.json');
async function setupProject(process, projectName, overrides) {
async function setupProject(
process: BoundChildProcess,
projectName: string,
overrides: {
devCommand?: string;
buildCommand?: string;
outputDirectory?: string;
}
) {
await waitForPrompt(process, chunk => /Set up [^?]+\?/.test(chunk));
process.stdin.write('yes\n');
@@ -385,6 +480,10 @@ test('default command should prompt login with empty auth.json', async () => {
test(
'login',
async () => {
if (!email) {
throw new Error('Shared state "email" not set.');
}
await fs.remove(getConfigAuthPath());
const loginOutput = await execa(binaryPath, [
'login',
@@ -1047,15 +1146,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
cwd: target,
});
let localhost = undefined;
await waitForPrompt(vc, chunk => {
if (chunk.includes('Ready! Available at')) {
localhost = /(https?:[^\s]+)/g.exec(chunk);
return true;
}
return false;
});
const localhost = await getLocalhost(vc);
const apiUrl = `${localhost[0]}/api/get-env`;
const apiRes = await fetch(apiUrl);
@@ -1085,15 +1176,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
cwd: target,
});
let localhost = undefined;
await waitForPrompt(vc, chunk => {
if (chunk.includes('Ready! Available at')) {
localhost = /(https?:[^\s]+)/g.exec(chunk);
return true;
}
return false;
});
const localhost = await getLocalhost(vc);
const apiUrl = `${localhost[0]}/api/get-env`;
const apiRes = await fetch(apiUrl);
expect(apiRes.status).toBe(200);
@@ -1165,15 +1248,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
cwd: target,
});
let localhost = undefined;
await waitForPrompt(vc, chunk => {
if (chunk.includes('Ready! Available at')) {
localhost = /(https?:[^\s]+)/g.exec(chunk);
return true;
}
return false;
});
const localhost = await getLocalhost(vc);
const apiUrl = `${localhost[0]}/api/get-env`;
const apiRes = await fetch(apiUrl);
@@ -1260,7 +1335,7 @@ test('Deploy `api-env` fixture and test `vercel env` command', async () => {
expect(exitCode, formatOutput({ stdout, stderr })).toBe(0);
}
function vcEnvRemoveByName(name) {
function vcEnvRemoveByName(name: string) {
return execa(binaryPath, ['env', 'rm', name, '-y', ...defaultArgs], {
reject: false,
cwd: target,
@@ -1715,6 +1790,10 @@ test('ensure we render a warning for deployments with no files', async () => {
});
test('output logs with "short" output', async () => {
if (!context.deployment) {
throw new Error('Shared state "context.deployment" not set.');
}
const { stderr, stdout, exitCode } = await execa(
binaryPath,
['logs', context.deployment, ...defaultArgs],
@@ -1736,6 +1815,10 @@ test('output logs with "short" output', async () => {
});
test('output logs with "raw" output', async () => {
if (!context.deployment) {
throw new Error('Shared state "context.deployment" not set.');
}
const { stderr, stdout, exitCode } = await execa(
binaryPath,
['logs', context.deployment, ...defaultArgs, '--output', 'raw'],
@@ -2054,7 +2137,7 @@ test('try to deploy with non-existing team', async () => {
});
test('initialize example "angular"', async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
tmpDir = getTmpDir();
const cwd = tmpDir.name;
const goal = '> Success! Initialized "angular" example in';
@@ -2080,7 +2163,7 @@ test('initialize example "angular"', async () => {
});
test('initialize example ("angular") to specified directory', async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
tmpDir = getTmpDir();
const cwd = tmpDir.name;
const goal = '> Success! Initialized "angular" example in';
@@ -2109,7 +2192,7 @@ test('initialize example ("angular") to specified directory', async () => {
});
test('initialize example to existing directory with "-f"', async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
tmpDir = getTmpDir();
const cwd = tmpDir.name;
const goal = '> Success! Initialized "angular" example in';
@@ -2140,7 +2223,7 @@ test('initialize example to existing directory with "-f"', async () => {
});
test('try to initialize example to existing directory', async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
tmpDir = getTmpDir();
const cwd = tmpDir.name;
const goal =
'Error: Destination path "angular" already exists and is not an empty directory. You may use `--force` or `-f` to override it.';
@@ -2157,7 +2240,7 @@ test('try to initialize example to existing directory', async () => {
});
test('try to initialize misspelled example (noce) in non-tty', async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
tmpDir = getTmpDir();
const cwd = tmpDir.name;
const goal =
'Error: No example found for noce, run `vercel init` to see the list of available examples.';
@@ -2169,7 +2252,7 @@ test('try to initialize misspelled example (noce) in non-tty', async () => {
});
test('try to initialize example "example-404"', async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
tmpDir = getTmpDir();
const cwd = tmpDir.name;
const goal =
'Error: No example found for example-404, run `vercel init` to see the list of available examples.';
@@ -2187,8 +2270,8 @@ test('try to revert a deployment and assign the automatic aliases', async () =>
const secondDeployment = fixture('now-revert-alias-2');
const { name } = JSON.parse(
fs.readFileSync(path.join(firstDeployment, 'now.json'))
);
fs.readFileSync(path.join(firstDeployment, 'now.json')).toString()
) as NowJson;
expect(name).toBeTruthy();
const url = `https://${name}.user.vercel.app`;
@@ -2299,7 +2382,7 @@ test('`vercel rm` removes a deployment', async () => {
session,
...defaultArgs,
'-V',
2,
'2',
'--force',
'--yes',
],
@@ -2358,7 +2441,7 @@ test('render build errors', async () => {
});
test('invalid deployment, projects and alias names', async () => {
const check = async (...args) => {
const check = async (...args: string[]) => {
const output = await execute(args);
expect(output.exitCode, formatOutput(output)).toBe(1);
expect(output.stderr).toMatch(/The provided argument/gm);
@@ -2409,7 +2492,7 @@ test('create zero-config deployment', async () => {
const text = await response.text();
expect(response.status).toBe(200);
const data = JSON.parse(text);
const data = JSON.parse(text) as DeploymentLike;
expect(data.error).toBe(undefined);
@@ -2447,7 +2530,6 @@ test('vercel secret ls', async () => {
const output = await execute(['secret', 'ls']);
expect(output.exitCode, formatOutput(output)).toBe(0);
expect(output.stdout).toMatch(/Secrets found under/gm);
expect(output.stdout).toMatch(new RegExp());
});
test('vercel secret ls --test-warning', async () => {
@@ -2460,6 +2542,10 @@ test('vercel secret ls --test-warning', async () => {
});
test('vercel secret rename', async () => {
if (!context.secretName) {
throw new Error('Shared state "context.secretName" not set.');
}
const nextName = `renamed-secret-${Date.now().toString(36)}`;
const output = await execute([
'secret',
@@ -2473,6 +2559,10 @@ test('vercel secret rename', async () => {
});
test('vercel secret rm', async () => {
if (!context.secretName) {
throw new Error('Shared state "context.secretName" not set.');
}
const output = await execute(['secret', 'rm', context.secretName, '-y']);
expect(output.exitCode, formatOutput(output)).toBe(0);
});
@@ -2572,6 +2662,10 @@ test('fail to add a domain without a project', async () => {
test(
'change user',
async () => {
if (!email) {
throw new Error('Shared state "email" not set.');
}
const { stdout: prevUser } = await execute(['whoami']);
// Delete the current token
@@ -2671,13 +2765,19 @@ test('should show prompts to set up project during first deploy', async () => {
// and output directory
let stderr = '';
const port = 58351;
const dev = execa(binaryPath, ['dev', '--listen', port, dir, ...defaultArgs]);
const dev = execa(binaryPath, [
'dev',
'--listen',
port.toString(),
dir,
...defaultArgs,
]);
dev.stderr.setEncoding('utf8');
try {
dev.stdout.pipe(process.stdout);
dev.stderr.pipe(process.stderr);
await new Promise((resolve, reject) => {
await new Promise<void>((resolve, reject) => {
dev.once('close', (code, signal) => {
reject(`"vc dev" failed with ${signal || code}`);
});
@@ -2882,6 +2982,10 @@ test('should prefill "project name" prompt with now.json `name`', async () => {
});
test('deploy with unknown `VERCEL_PROJECT_ID` should fail', async () => {
if (!token) {
throw new Error('Shared state "token" not set.');
}
const directory = fixture('static-deployment');
const user = await fetchTokenInformation(token);
@@ -2897,6 +3001,10 @@ test('deploy with unknown `VERCEL_PROJECT_ID` should fail', async () => {
});
test('deploy with `VERCEL_ORG_ID` but without `VERCEL_PROJECT_ID` should fail', async () => {
if (!token) {
throw new Error('Shared state "token" not set.');
}
const directory = fixture('static-deployment');
const user = await fetchTokenInformation(token);
@@ -3032,6 +3140,10 @@ test('vercel env with unknown `VERCEL_ORG_ID` or `VERCEL_PROJECT_ID` should erro
});
test('whoami with `VERCEL_ORG_ID` should favor `--scope` and should error', async () => {
if (!token) {
throw new Error('Shared state "token" not set.');
}
const user = await fetchTokenInformation(token);
const output = await execute(['whoami', '--scope', 'asdf'], {
@@ -3043,6 +3155,10 @@ test('whoami with `VERCEL_ORG_ID` should favor `--scope` and should error', asyn
});
test('whoami with local .vercel scope', async () => {
if (!token) {
throw new Error('Shared state "token" not set.');
}
const directory = fixture('static-deployment');
const user = await fetchTokenInformation(token);
@@ -3139,9 +3255,12 @@ test(
const directory = example('gatsby');
const packageJsonPath = path.join(directory, 'package.json');
const packageJsonOriginal = await readFile(packageJsonPath, 'utf8');
const pkg = JSON.parse(packageJsonOriginal);
const pkg = JSON.parse(packageJsonOriginal) as PackageJson;
if (!pkg.scripts) {
throw new Error(`"scripts" not found in "${packageJsonPath}"`);
}
async function tryDeploy(cwd) {
async function tryDeploy(cwd: string) {
const { exitCode, stdout, stderr } = await execa(
binaryPath,
[...defaultArgs, '--public', '--yes'],
@@ -3354,12 +3473,16 @@ test('[vc dev] should show prompts to set up project', async () => {
// remove previously linked project if it exists
await remove(path.join(dir, '.vercel'));
const dev = execa(binaryPath, ['dev', '--listen', port, ...defaultArgs], {
cwd: dir,
env: {
FORCE_TTY: '1',
},
});
const dev = execa(
binaryPath,
['dev', '--listen', port.toString(), ...defaultArgs],
{
cwd: dir,
env: {
FORCE_TTY: '1',
},
}
);
await setupProject(dev, projectName, {
buildCommand: `mkdir -p o && echo '<h1>custom hello</h1>' > o/index.html`,
@@ -3461,12 +3584,16 @@ test('[vc dev] should send the platform proxy request headers to frontend dev se
// remove previously linked project if it exists
await remove(path.join(dir, '.vercel'));
const dev = execa(binaryPath, ['dev', '--listen', port, ...defaultArgs], {
cwd: dir,
env: {
FORCE_TTY: '1',
},
});
const dev = execa(
binaryPath,
['dev', '--listen', port.toString(), ...defaultArgs],
{
cwd: dir,
env: {
FORCE_TTY: '1',
},
}
);
await setupProject(dev, projectName, {
buildCommand: `mkdir -p o && echo '<h1>custom hello</h1>' > o/index.html`,
@@ -3488,6 +3615,10 @@ test('[vc dev] should send the platform proxy request headers to frontend dev se
});
test('[vc link] should support the `--project` flag', async () => {
if (!token) {
throw new Error('Shared state "token" not set.');
}
const projectName = 'link-project-flag';
const directory = fixture('static-deployment');

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/client",
"version": "12.4.5",
"version": "12.4.6",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"homepage": "https://vercel.com",
@@ -43,7 +43,7 @@
]
},
"dependencies": {
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/routing-utils": "2.1.11",
"@zeit/fetch": "5.2.0",
"async-retry": "1.2.3",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/fs-detectors",
"version": "3.8.5",
"version": "3.8.6",
"description": "Vercel filesystem detectors",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -35,7 +35,7 @@
"@types/minimatch": "3.0.5",
"@types/node": "14.18.33",
"@types/semver": "7.3.10",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"typescript": "4.3.4"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/gatsby-plugin-vercel-builder",
"version": "1.2.2",
"version": "1.2.3",
"main": "dist/index.js",
"files": [
"dist",
@@ -15,8 +15,8 @@
},
"dependencies": {
"@sinclair/typebox": "0.25.24",
"@vercel/build-utils": "6.4.0",
"@vercel/node": "2.9.13",
"@vercel/build-utils": "6.5.0",
"@vercel/node": "2.9.14",
"@vercel/routing-utils": "2.1.11",
"esbuild": "0.14.47",
"etag": "1.8.1",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/go",
"version": "2.4.0",
"version": "2.4.1",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/go",
@@ -37,7 +37,7 @@
"@types/node-fetch": "^2.3.0",
"@types/tar": "^4.0.0",
"@types/yauzl-promise": "2.1.0",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/ncc": "0.24.0",
"async-retry": "1.3.1",
"execa": "^1.0.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/hydrogen",
"version": "0.0.58",
"version": "0.0.59",
"license": "MIT",
"main": "./dist/index.js",
"homepage": "https://vercel.com/docs",
@@ -21,7 +21,7 @@
"devDependencies": {
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/static-config": "2.0.14",
"execa": "3.2.0",
"fs-extra": "11.1.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/next",
"version": "3.6.7",
"version": "3.7.0",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/next-js",
@@ -45,7 +45,7 @@
"@types/semver": "6.0.0",
"@types/text-table": "0.2.1",
"@types/webpack-sources": "3.2.0",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/nft": "0.22.5",
"@vercel/routing-utils": "2.1.11",
"async-sema": "3.0.1",

View File

@@ -2074,6 +2074,11 @@ export const onPrerenderRoute =
const rscContentTypeHeader =
routesManifest?.rsc?.contentTypeHeader || 'text/x-component';
let sourcePath: string | undefined;
if (`/${outputPathPage}` !== srcRoute && srcRoute) {
sourcePath = srcRoute;
}
prerenders[outputPathPage] = new Prerender({
expiration: initialRevalidate,
lambda,
@@ -2083,6 +2088,7 @@ export const onPrerenderRoute =
bypassToken: prerenderManifest.bypassToken,
initialStatus,
initialHeaders,
sourcePath,
...(isNotFound
? {

View File

@@ -160,6 +160,7 @@ it('should build using server build', async () => {
expect(output['fallback/[slug]'].type).toBe('Prerender');
expect(output['fallback/[slug]'].allowQuery).toEqual(['slug']);
expect(output['fallback/[slug]'].lambda.operationType).toBe('ISR');
expect(output['fallback/[slug]'].sourcePath).toBe(undefined);
expect(output['_next/data/testing-build-id/fallback/[slug].json'].type).toBe(
'Prerender'
@@ -175,6 +176,7 @@ it('should build using server build', async () => {
expect(output['fallback/first'].type).toBe('Prerender');
expect(output['fallback/first'].allowQuery).toEqual([]);
expect(output['fallback/first'].lambda.operationType).toBe('ISR');
expect(output['fallback/first'].sourcePath).toBe('/fallback/[slug]');
expect(output['_next/data/testing-build-id/fallback/first.json'].type).toBe(
'Prerender'
@@ -208,6 +210,7 @@ it('should build using server build', async () => {
expect(output['ssg'].type).toBe('Prerender');
expect(output['ssg'].allowQuery).toEqual([]);
expect(output['ssg'].lambda.operationType).toBe('ISR');
expect(output['ssg'].sourcePath).toBe(undefined);
expect(output['index'] === output['another']).toBe(true);
expect(output['dynamic/[slug]'] !== output['fallback/[slug]'].lambda).toBe(

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/node",
"version": "2.9.13",
"version": "2.9.14",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/node-js",
@@ -31,7 +31,7 @@
"dependencies": {
"@edge-runtime/vm": "2.0.0",
"@types/node": "14.18.33",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/node-bridge": "3.1.14",
"@vercel/static-config": "2.0.14",
"edge-runtime": "2.0.0",

View File

@@ -2,9 +2,18 @@
/* global addEventListener */
function buildUrl(requestDetails) {
let proto = requestDetails.headers['x-forwarded-proto'].split(/\b/).shift(); // handling multi-protocol like https,http://...
let host = requestDetails.headers['x-forwarded-host'];
let path = requestDetails.url;
const host = requestDetails.headers['x-forwarded-host'] || '127.0.0.1';
const path = requestDetails.url || '/';
const allProtocols = requestDetails.headers['x-forwarded-proto'];
let proto;
if (allProtocols) {
// handle multi-protocol like: https,http://...
proto = allProtocols.split(/\b/).shift();
} else {
proto = 'http';
}
return `${proto}://${host}${path}`;
}
@@ -16,7 +25,7 @@ async function respond(
dependencies
) {
const { Request, Response } = dependencies;
const { isMiddleware, entrypointLabel } = options;
const { isMiddleware } = options;
let body;
@@ -26,7 +35,7 @@ async function respond(
}
}
let request = new Request(buildUrl(requestDetails), {
const request = new Request(buildUrl(requestDetails), {
headers: requestDetails.headers,
method: requestDetails.method,
body: body,
@@ -45,9 +54,7 @@ async function respond(
},
});
} else {
throw new Error(
`Edge Function "${entrypointLabel}" did not return a response.`
);
throw new Error(`Edge Function did not return a response.`);
}
}
return response;
@@ -68,8 +75,8 @@ function toResponseError(error, Response) {
}
async function parseRequestEvent(event) {
let serializedRequest = await event.request.text();
let requestDetails = JSON.parse(serializedRequest);
const serializedRequest = await event.request.text();
const requestDetails = JSON.parse(serializedRequest);
return requestDetails;
}
@@ -78,8 +85,8 @@ async function parseRequestEvent(event) {
function registerFetchListener(userEdgeHandler, options, dependencies) {
addEventListener('fetch', async event => {
try {
let requestDetails = await parseRequestEvent(event);
let response = await respond(
const requestDetails = await parseRequestEvent(event);
const response = await respond(
userEdgeHandler,
requestDetails,
event,

View File

@@ -175,7 +175,9 @@ async function compile(
return source;
}
const conditions = isEdgeFunction ? ['worker', 'browser'] : undefined;
const conditions = isEdgeFunction
? ['edge-light', 'browser', 'module', 'import', 'require']
: undefined;
const { fileList, esmFileList, warnings } = await nodeFileTrace(
[...inputFiles],

View File

@@ -28,6 +28,39 @@ describe('edge-handler-template', () => {
});
expect(url).toBe('https://somewhere.com/api/add');
});
test('url falls back to `/`', async () => {
const url = buildUrl({
// missing url
headers: {
'x-forwarded-proto': 'https',
'x-forwarded-host': 'somewhere.com',
},
});
expect(url).toBe('https://somewhere.com/');
});
test('host header falls back to `127.0.0.1`', async () => {
const url = buildUrl({
url: '/api/add',
headers: {
'x-forwarded-proto': 'https',
// missing 'x-forwarded-host'
},
});
expect(url).toBe('https://127.0.0.1/api/add');
});
test('proto header falls back to `http`', async () => {
const url = buildUrl({
url: '/api/add',
headers: {
// missing 'x-forwarded-proto'
'x-forwarded-host': 'somewhere.com',
},
});
expect(url).toBe('http://somewhere.com/api/add');
});
});
describe('respond()', () => {

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/python",
"version": "3.1.54",
"version": "3.1.55",
"main": "./dist/index.js",
"license": "MIT",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/python",
@@ -23,7 +23,7 @@
"@types/execa": "^0.9.0",
"@types/jest": "27.4.1",
"@types/node": "14.18.33",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/ncc": "0.24.0",
"execa": "^1.0.0",
"typescript": "4.3.4"

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/redwood",
"version": "1.1.10",
"version": "1.1.11",
"main": "./dist/index.js",
"license": "MIT",
"homepage": "https://vercel.com/docs",
@@ -27,7 +27,7 @@
"@types/aws-lambda": "8.10.19",
"@types/node": "14.18.33",
"@types/semver": "6.0.0",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"execa": "3.2.0",
"fs-extra": "11.1.0",
"typescript": "4.3.4"

View File

@@ -1,5 +1,5 @@
import handleRequest from '@vercel/remix-entry-server';
import { RemixServer } from '@remix-run/react';
import { handleRequest } from '@vercel/remix';
export default function (
request,

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/remix-builder",
"version": "1.7.0",
"version": "1.8.0",
"license": "MIT",
"main": "./dist/index.js",
"homepage": "https://vercel.com/docs",
@@ -21,15 +21,17 @@
],
"dependencies": {
"@remix-run/dev": "npm:@vercel/remix-run-dev@1.14.2",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/nft": "0.22.5",
"@vercel/static-config": "2.0.14",
"path-to-regexp": "6.2.1",
"semver": "7.3.8",
"ts-morph": "12.0.0"
},
"devDependencies": {
"@types/jest": "27.5.1",
"@types/node": "14.18.33",
"@types/semver": "7.3.13",
"typescript": "4.9.4"
}
}

View File

@@ -44,6 +44,7 @@ import {
chdirAndReadConfig,
addDependency,
} from './utils';
import semver from 'semver';
const _require: typeof require = eval('require');
@@ -62,6 +63,9 @@ const nodeServerSrcPromise = fs.readFile(
'utf-8'
);
// This value is the minimum supported version for our fork of Remix
const minimumSupportRemixVersion = '1.10.0';
export const build: BuildV2 = async ({
entrypoint,
files,
@@ -149,17 +153,43 @@ export const build: BuildV2 = async ({
join(DEFAULTS_PATH, 'entry.server.jsx'),
join(appDirectory, 'entry.server.jsx')
);
if (!pkg.dependencies['@vercel/remix-entry-server']) {
if (!pkg.dependencies['@vercel/remix']) {
// Dependency version resolution logic
// 1. Users app is on 1.9.0 -> we install the 1.10.0 (minimum) version of our fork (`@vercel/remix`)
// 2. Users app is on 1.11.0 (a version greater than 1.10.0 and less than the latest version of the fork) -> we install the (matching) 1.11.0 version of `@vercel/remix`
// 3. Users app is on something greater than our latest version of the fork -> we install the latest version of our fork
// remixVersion is the version of the `@remix-run/dev` package in the *users' app*
const usersRemixVersion = semver.gt(
remixVersion,
minimumSupportRemixVersion
)
? remixVersion
: minimumSupportRemixVersion;
// Prevent frozen lockfile rejections
const envForAddDep = { ...spawnOpts.env };
delete envForAddDep.CI;
delete envForAddDep.VERCEL;
delete envForAddDep.NOW_BUILDER;
await addDependency(cliType, ['@vercel/remix-entry-server'], {
...spawnOpts,
env: envForAddDep,
cwd: entrypointFsDirname,
});
await addDependency(
cliType,
[
`@vercel/remix@${
semver.gt(
usersRemixVersion,
require('@remix-run/dev/package.json').version
)
? 'latest'
: usersRemixVersion
}`,
],
{
...spawnOpts,
env: envForAddDep,
cwd: entrypointFsDirname,
}
);
}
}
@@ -540,7 +570,7 @@ async function createRenderEdgeFunction(
const trace = await nodeFileTrace([handlerPath], {
base: rootDir,
processCwd: entrypointDir,
conditions: ['worker', 'browser'],
conditions: ['edge-light', 'browser', 'module', 'import', 'require'],
async readFile(fsPath) {
let source: Buffer | string;
try {

View File

@@ -1,7 +1,7 @@
{
"name": "@vercel/ruby",
"author": "Nathan Cahill <nathan@nathancahill.com>",
"version": "1.3.71",
"version": "1.3.72",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/runtimes#official-runtimes/ruby",
@@ -22,7 +22,7 @@
"devDependencies": {
"@types/fs-extra": "8.0.0",
"@types/semver": "6.0.0",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/ncc": "0.24.0",
"execa": "2.0.4",
"fs-extra": "^7.0.1",

View File

@@ -1,6 +1,6 @@
{
"name": "@vercel/static-build",
"version": "1.3.17",
"version": "1.3.18",
"license": "MIT",
"main": "./dist/index",
"homepage": "https://vercel.com/docs/build-step",
@@ -30,7 +30,7 @@
},
"dependencies": {
"@vercel/gatsby-plugin-vercel-analytics": "1.0.8",
"@vercel/gatsby-plugin-vercel-builder": "1.2.2"
"@vercel/gatsby-plugin-vercel-builder": "1.2.3"
},
"devDependencies": {
"@types/aws-lambda": "8.10.64",
@@ -42,9 +42,9 @@
"@types/node-fetch": "2.5.4",
"@types/promise-timeout": "1.3.0",
"@types/semver": "7.3.13",
"@vercel/build-utils": "6.4.0",
"@vercel/build-utils": "6.5.0",
"@vercel/frameworks": "1.3.3",
"@vercel/fs-detectors": "3.8.5",
"@vercel/fs-detectors": "3.8.6",
"@vercel/ncc": "0.24.0",
"@vercel/routing-utils": "2.1.11",
"@vercel/static-config": "2.0.14",

234
pnpm-lock.yaml generated
View File

@@ -236,23 +236,23 @@ importers:
'@types/write-json-file': 2.2.1
'@types/yauzl-promise': 2.1.0
'@vercel-internals/types': '*'
'@vercel/build-utils': 6.4.0
'@vercel/client': 12.4.5
'@vercel/build-utils': 6.5.0
'@vercel/client': 12.4.6
'@vercel/error-utils': 1.0.8
'@vercel/frameworks': 1.3.3
'@vercel/fs-detectors': 3.8.5
'@vercel/fs-detectors': 3.8.6
'@vercel/fun': 1.0.4
'@vercel/go': 2.4.0
'@vercel/hydrogen': 0.0.58
'@vercel/go': 2.4.1
'@vercel/hydrogen': 0.0.59
'@vercel/ncc': 0.24.0
'@vercel/next': 3.6.7
'@vercel/node': 2.9.13
'@vercel/python': 3.1.54
'@vercel/redwood': 1.1.10
'@vercel/remix-builder': 1.7.0
'@vercel/next': 3.7.0
'@vercel/node': 2.9.14
'@vercel/python': 3.1.55
'@vercel/redwood': 1.1.11
'@vercel/remix-builder': 1.8.0
'@vercel/routing-utils': 2.1.11
'@vercel/ruby': 1.3.71
'@vercel/static-build': 1.3.17
'@vercel/ruby': 1.3.72
'@vercel/static-build': 1.3.18
'@zeit/source-map-support': 0.6.2
ajv: 6.12.2
alpha-sort: 2.0.1
@@ -475,7 +475,7 @@ importers:
'@types/node-fetch': 2.5.4
'@types/recursive-readdir': 2.2.0
'@types/tar-fs': 1.16.1
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/routing-utils': 2.1.11
'@zeit/fetch': 5.2.0
async-retry: 1.2.3
@@ -580,7 +580,7 @@ importers:
'@types/minimatch': 3.0.5
'@types/node': 14.18.33
'@types/semver': 7.3.10
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/error-utils': 1.0.8
'@vercel/frameworks': 1.3.3
'@vercel/routing-utils': 2.1.11
@@ -629,8 +629,8 @@ importers:
'@types/fs-extra': 11.0.1
'@types/node': 14.18.33
'@types/react': 18.0.26
'@vercel/build-utils': 6.4.0
'@vercel/node': 2.9.13
'@vercel/build-utils': 6.5.0
'@vercel/node': 2.9.14
'@vercel/routing-utils': 2.1.11
esbuild: 0.14.47
etag: 1.8.1
@@ -662,7 +662,7 @@ importers:
'@types/node-fetch': ^2.3.0
'@types/tar': ^4.0.0
'@types/yauzl-promise': 2.1.0
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/ncc': 0.24.0
async-retry: 1.3.1
execa: ^1.0.0
@@ -699,7 +699,7 @@ importers:
specifiers:
'@types/jest': 27.5.1
'@types/node': 14.18.33
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/static-config': 2.0.14
execa: 3.2.0
fs-extra: 11.1.0
@@ -730,7 +730,7 @@ importers:
'@types/semver': 6.0.0
'@types/text-table': 0.2.1
'@types/webpack-sources': 3.2.0
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/nft': 0.22.5
'@vercel/routing-utils': 2.1.11
async-sema: 3.0.1
@@ -809,7 +809,7 @@ importers:
'@types/node': 14.18.33
'@types/node-fetch': ^2.6.1
'@types/test-listen': 1.1.0
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/ncc': 0.24.0
'@vercel/nft': 0.22.5
'@vercel/node-bridge': 3.1.14
@@ -893,7 +893,7 @@ importers:
'@types/execa': ^0.9.0
'@types/jest': 27.4.1
'@types/node': 14.18.33
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/ncc': 0.24.0
execa: ^1.0.0
typescript: 4.3.4
@@ -911,7 +911,7 @@ importers:
'@types/aws-lambda': 8.10.19
'@types/node': 14.18.33
'@types/semver': 6.0.0
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/nft': 0.22.5
'@vercel/routing-utils': 2.1.11
execa: 3.2.0
@@ -936,10 +936,12 @@ importers:
'@remix-run/dev': npm:@vercel/remix-run-dev@1.14.2
'@types/jest': 27.5.1
'@types/node': 14.18.33
'@vercel/build-utils': 6.4.0
'@types/semver': 7.3.13
'@vercel/build-utils': 6.5.0
'@vercel/nft': 0.22.5
'@vercel/static-config': 2.0.14
path-to-regexp: 6.2.1
semver: 7.3.8
ts-morph: 12.0.0
typescript: 4.9.4
dependencies:
@@ -948,10 +950,12 @@ importers:
'@vercel/nft': 0.22.5
'@vercel/static-config': link:../static-config
path-to-regexp: 6.2.1
semver: 7.3.8
ts-morph: 12.0.0
devDependencies:
'@types/jest': 27.5.1
'@types/node': 14.18.33
'@types/semver': 7.3.13
typescript: 4.9.4
packages/remix-entry-server:
@@ -993,7 +997,7 @@ importers:
specifiers:
'@types/fs-extra': 8.0.0
'@types/semver': 6.0.0
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/ncc': 0.24.0
execa: 2.0.4
fs-extra: ^7.0.1
@@ -1020,11 +1024,11 @@ importers:
'@types/node-fetch': 2.5.4
'@types/promise-timeout': 1.3.0
'@types/semver': 7.3.13
'@vercel/build-utils': 6.4.0
'@vercel/build-utils': 6.5.0
'@vercel/frameworks': 1.3.3
'@vercel/fs-detectors': 3.8.5
'@vercel/fs-detectors': 3.8.6
'@vercel/gatsby-plugin-vercel-analytics': 1.0.8
'@vercel/gatsby-plugin-vercel-builder': 1.2.2
'@vercel/gatsby-plugin-vercel-builder': 1.2.3
'@vercel/ncc': 0.24.0
'@vercel/routing-utils': 2.1.11
'@vercel/static-config': 2.0.14
@@ -1146,10 +1150,10 @@ packages:
'@babel/template': 7.20.7
'@babel/traverse': 7.20.12
'@babel/types': 7.20.7
convert-source-map: 1.8.0
convert-source-map: 1.9.0
debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.2
json5: 2.2.3
semver: 6.3.0
transitivePeerDependencies:
- supports-color
@@ -2658,7 +2662,7 @@ packages:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.13.1
js-yaml: 3.14.1
resolve-from: 5.0.0
dev: true
@@ -2673,7 +2677,7 @@ packages:
dependencies:
'@jest/types': 28.1.3
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
jest-message-util: 28.1.3
jest-util: 28.1.3
slash: 3.0.0
@@ -2685,7 +2689,7 @@ packages:
dependencies:
'@jest/types': 29.3.1
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
jest-message-util: 29.3.1
jest-util: 29.3.1
slash: 3.0.0
@@ -2893,7 +2897,7 @@ packages:
'@jest/types': 28.1.3
'@jridgewell/trace-mapping': 0.3.17
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
glob: 7.2.3
@@ -2931,7 +2935,7 @@ packages:
'@jest/types': 29.3.1
'@jridgewell/trace-mapping': 0.3.17
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
glob: 7.2.3
@@ -3032,8 +3036,8 @@ packages:
'@jest/types': 28.1.3
'@jridgewell/trace-mapping': 0.3.17
babel-plugin-istanbul: 6.1.1
chalk: 4.1.0
convert-source-map: 1.8.0
chalk: 4.1.2
convert-source-map: 1.9.0
fast-json-stable-stringify: 2.1.0
graceful-fs: 4.2.10
jest-haste-map: 28.1.3
@@ -3055,7 +3059,7 @@ packages:
'@jest/types': 29.3.1
'@jridgewell/trace-mapping': 0.3.17
babel-plugin-istanbul: 6.1.1
chalk: 4.1.0
chalk: 4.1.2
convert-source-map: 2.0.0
fast-json-stable-stringify: 2.1.0
graceful-fs: 4.2.10
@@ -3079,7 +3083,7 @@ packages:
'@types/istanbul-reports': 3.0.1
'@types/node': 18.14.6
'@types/yargs': 17.0.19
chalk: 4.1.0
chalk: 4.1.2
dev: true
/@jest/types/29.3.1:
@@ -3205,7 +3209,7 @@ packages:
resolution: {integrity: sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==}
engines: {node: ^14.15.0 || >=16.0.0}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
execa: 5.1.1
strong-log-transformer: 2.1.0
dev: false
@@ -3239,7 +3243,7 @@ packages:
engines: {node: ^14.15.0 || >=16.0.0}
dependencies:
'@lerna/child-process': 5.6.2
chalk: 4.1.0
chalk: 4.1.2
npmlog: 6.0.2
dev: false
@@ -3249,7 +3253,7 @@ packages:
dependencies:
'@lerna/child-process': 5.6.2
'@lerna/describe-ref': 5.6.2
minimatch: 3.0.4
minimatch: 3.1.2
npmlog: 6.0.2
slash: 3.0.0
dev: false
@@ -3403,7 +3407,7 @@ packages:
resolution: {integrity: sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==}
engines: {node: ^14.15.0 || >=16.0.0}
dependencies:
node-fetch: 2.6.7
node-fetch: 2.6.8
npmlog: 6.0.2
transitivePeerDependencies:
- encoding
@@ -3484,7 +3488,7 @@ packages:
engines: {node: ^14.15.0 || >=16.0.0}
dependencies:
'@lerna/query-graph': 5.6.2
chalk: 4.1.0
chalk: 4.1.2
columnify: 1.6.0
dev: false
@@ -3824,10 +3828,10 @@ packages:
'@lerna/temp-write': 5.6.2
'@lerna/validation-error': 5.6.2
'@nrwl/devkit': 15.5.1_nx@15.5.1+typescript@4.9.5
chalk: 4.1.0
chalk: 4.1.2
dedent: 0.7.0
load-json-file: 6.2.0
minimatch: 3.0.4
minimatch: 3.1.2
npmlog: 6.0.2
p-map: 4.0.0
p-pipe: 3.1.0
@@ -4020,7 +4024,7 @@ packages:
dependencies:
'@npmcli/name-from-folder': 1.0.1
glob: 8.0.3
minimatch: 5.0.1
minimatch: 5.1.2
read-package-json-fast: 2.0.3
dev: false
@@ -4224,7 +4228,7 @@ packages:
'@octokit/request-error': 3.0.2
'@octokit/types': 8.1.0
is-plain-object: 5.0.0
node-fetch: 2.6.7
node-fetch: 2.6.8
universal-user-agent: 6.0.0
transitivePeerDependencies:
- encoding
@@ -6165,12 +6169,12 @@ packages:
gunzip-maybe: 1.4.2
inquirer: 8.2.5
jsesc: 3.0.2
json5: 2.2.2
json5: 2.2.3
lodash: 4.17.21
lodash.debounce: 4.0.8
lru-cache: 7.14.1
minimatch: 3.0.4
node-fetch: 2.6.7
minimatch: 3.1.2
node-fetch: 2.6.8
ora: 5.4.1
postcss: 8.4.21
postcss-discard-duplicates: 5.1.0_postcss@8.4.21
@@ -6305,7 +6309,7 @@ packages:
resolution: {integrity: sha512-J6ySgEdQUqAmlttvZOoXOEsrDTAnHyR/MtEvuAG5a+gwKY/2Cc7xn4CWcpgfuwkp+0a4vXmt2BDwzacDoGDN1g==}
engines: {node: '>=14.15.0'}
dependencies:
js-yaml: 3.13.1
js-yaml: 3.14.1
tslib: 2.5.0
dev: false
@@ -6898,7 +6902,7 @@ packages:
'@types/babel__core': 7.1.20
babel-plugin-istanbul: 6.1.1
babel-preset-jest: 28.1.3_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
graceful-fs: 4.2.10
slash: 3.0.0
transitivePeerDependencies:
@@ -6916,7 +6920,7 @@ packages:
'@types/babel__core': 7.1.20
babel-plugin-istanbul: 6.1.1
babel-preset-jest: 29.2.0_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
graceful-fs: 4.2.10
slash: 3.0.0
transitivePeerDependencies:
@@ -6970,7 +6974,7 @@ packages:
'@babel/compat-data': 7.20.10
'@babel/core': 7.20.12
'@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12
semver: 6.1.1
semver: 6.3.0
transitivePeerDependencies:
- supports-color
dev: false
@@ -7913,7 +7917,7 @@ packages:
json-stringify-safe: 5.0.1
lodash: 4.17.21
meow: 8.1.2
semver: 6.1.1
semver: 6.3.0
split: 1.0.1
through2: 4.0.2
dev: false
@@ -7963,10 +7967,10 @@ packages:
resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
dependencies:
safe-buffer: 5.1.2
dev: true
/convert-source-map/1.9.0:
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
dev: true
/convert-source-map/2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -8558,7 +8562,7 @@ packages:
/duplexify/3.7.1:
resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
dependencies:
end-of-stream: 1.4.1
end-of-stream: 1.4.4
inherits: 2.0.4
readable-stream: 2.3.7
stream-shift: 1.0.1
@@ -8587,7 +8591,7 @@ packages:
dev: false
/ee-first/1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
/ejs/3.1.8:
resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
@@ -8654,6 +8658,7 @@ packages:
resolution: {integrity: sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==}
dependencies:
once: 1.4.0
dev: true
/end-of-stream/1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
@@ -9358,7 +9363,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 5.54.1
'@typescript-eslint/parser': 5.54.1_typescript@4.9.4
debug: 3.2.7
eslint-import-resolver-node: 0.3.7
eslint-import-resolver-typescript: 3.5.3_5rfvta7qn57kxm7ir36ta6fixq
@@ -9386,7 +9391,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 5.54.1
'@typescript-eslint/parser': 5.54.1_typescript@4.9.4
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
@@ -9503,7 +9508,7 @@ packages:
eslint-plugin-jest:
optional: true
dependencies:
eslint-plugin-jest: 27.2.1_j7aytffwn6h2xuxtcd36dokff4
eslint-plugin-jest: 27.2.1_6xo4tvwzjwdi6xwjpxfe6jodqe
dev: true
/eslint-plugin-react-hooks/4.6.0:
@@ -10134,7 +10139,7 @@ packages:
/filelist/1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
dependencies:
minimatch: 5.0.1
minimatch: 5.1.2
dev: false
/fill-range/4.0.0:
@@ -10285,7 +10290,7 @@ packages:
dev: true
/fresh/0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
engines: {node: '>= 0.6'}
/from2/2.3.0:
@@ -10605,7 +10610,7 @@ packages:
hasBin: true
dependencies:
meow: 8.1.2
semver: 6.1.1
semver: 6.3.0
dev: false
/git-up/7.0.0:
@@ -10668,7 +10673,7 @@ packages:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
@@ -10679,7 +10684,7 @@ packages:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
@@ -11165,7 +11170,7 @@ packages:
/humanize-ms/1.2.1:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
dependencies:
ms: 2.1.2
ms: 2.1.3
dev: false
/husky/7.0.4:
@@ -11211,7 +11216,7 @@ packages:
resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
dependencies:
minimatch: 5.0.1
minimatch: 5.1.2
dev: false
/ignore/4.0.6:
@@ -11897,9 +11902,9 @@ packages:
hasBin: true
dependencies:
async: 3.2.4
chalk: 4.1.0
chalk: 4.1.2
filelist: 1.0.4
minimatch: 3.0.4
minimatch: 3.1.2
dev: false
/jaro-winkler/0.2.8:
@@ -11935,7 +11940,7 @@ packages:
'@jest/test-result': 28.1.3
'@jest/types': 28.1.3
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
co: 4.6.0
dedent: 0.7.0
is-generator-fn: 2.1.0
@@ -11962,7 +11967,7 @@ packages:
'@jest/test-result': 29.3.1
'@jest/types': 29.3.1
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
co: 4.6.0
dedent: 0.7.0
is-generator-fn: 2.1.0
@@ -12053,7 +12058,7 @@ packages:
'@jest/types': 28.1.3
'@types/node': 14.18.33
babel-jest: 28.1.3_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
ci-info: 3.7.1
deepmerge: 4.2.2
glob: 7.2.3
@@ -12092,7 +12097,7 @@ packages:
'@jest/types': 28.1.3
'@types/node': 18.14.6
babel-jest: 28.1.3_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
ci-info: 3.7.1
deepmerge: 4.2.2
glob: 7.2.3
@@ -12131,7 +12136,7 @@ packages:
'@jest/types': 29.3.1
'@types/node': 14.18.33
babel-jest: 29.3.1_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
ci-info: 3.7.1
deepmerge: 4.2.2
glob: 7.2.3
@@ -12170,7 +12175,7 @@ packages:
'@jest/types': 29.3.1
'@types/node': 18.14.6
babel-jest: 29.3.1_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
ci-info: 3.7.1
deepmerge: 4.2.2
glob: 7.2.3
@@ -12206,7 +12211,7 @@ packages:
resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==}
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
diff-sequences: 28.1.1
jest-get-type: 28.0.2
pretty-format: 28.1.3
@@ -12216,7 +12221,7 @@ packages:
resolution: {integrity: sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
diff-sequences: 29.3.1
jest-get-type: 29.2.0
pretty-format: 29.3.1
@@ -12241,7 +12246,7 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dependencies:
'@jest/types': 28.1.3
chalk: 4.1.0
chalk: 4.1.2
jest-get-type: 28.0.2
jest-util: 28.1.3
pretty-format: 28.1.3
@@ -12252,7 +12257,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.3.1
chalk: 4.1.0
chalk: 4.1.2
jest-get-type: 29.2.0
jest-util: 29.3.1
pretty-format: 29.3.1
@@ -12365,7 +12370,7 @@ packages:
resolution: {integrity: sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==}
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
jest-diff: 28.1.3
jest-get-type: 28.0.2
pretty-format: 28.1.3
@@ -12388,7 +12393,7 @@ packages:
'@babel/code-frame': 7.18.6
'@jest/types': 28.1.3
'@types/stack-utils': 2.0.1
chalk: 4.1.0
chalk: 4.1.2
graceful-fs: 4.2.10
micromatch: 4.0.5
pretty-format: 28.1.3
@@ -12403,7 +12408,7 @@ packages:
'@babel/code-frame': 7.18.6
'@jest/types': 29.3.1
'@types/stack-utils': 2.0.1
chalk: 4.1.0
chalk: 4.1.2
graceful-fs: 4.2.10
micromatch: 4.0.5
pretty-format: 29.3.1
@@ -12486,7 +12491,7 @@ packages:
resolution: {integrity: sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==}
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
graceful-fs: 4.2.10
jest-haste-map: 28.1.3
jest-pnp-resolver: 1.2.3_jest-resolve@28.1.3
@@ -12501,7 +12506,7 @@ packages:
resolution: {integrity: sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
graceful-fs: 4.2.10
jest-haste-map: 29.3.1
jest-pnp-resolver: 1.2.3_jest-resolve@29.3.1
@@ -12522,7 +12527,7 @@ packages:
'@jest/transform': 28.1.3
'@jest/types': 28.1.3
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
emittery: 0.10.2
graceful-fs: 4.2.10
jest-docblock: 28.1.1
@@ -12551,7 +12556,7 @@ packages:
'@jest/transform': 29.3.1
'@jest/types': 29.3.1
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.10
jest-docblock: 29.2.0
@@ -12581,7 +12586,7 @@ packages:
'@jest/test-result': 28.1.3
'@jest/transform': 28.1.3
'@jest/types': 28.1.3
chalk: 4.1.0
chalk: 4.1.2
cjs-module-lexer: 1.2.2
collect-v8-coverage: 1.0.1
execa: 5.1.1
@@ -12612,7 +12617,7 @@ packages:
'@jest/transform': 29.3.1
'@jest/types': 29.3.1
'@types/node': 18.14.6
chalk: 4.1.0
chalk: 4.1.2
cjs-module-lexer: 1.2.2
collect-v8-coverage: 1.0.1
glob: 7.2.3
@@ -12645,7 +12650,7 @@ packages:
'@types/babel__traverse': 7.18.3
'@types/prettier': 2.7.2
babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
expect: 28.1.3
graceful-fs: 4.2.10
jest-diff: 28.1.3
@@ -12677,7 +12682,7 @@ packages:
'@types/babel__traverse': 7.18.3
'@types/prettier': 2.7.2
babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12
chalk: 4.1.0
chalk: 4.1.2
expect: 29.3.1
graceful-fs: 4.2.10
jest-diff: 29.3.1
@@ -12723,7 +12728,7 @@ packages:
dependencies:
'@jest/types': 28.1.3
camelcase: 6.3.0
chalk: 4.1.0
chalk: 4.1.2
jest-get-type: 28.0.2
leven: 3.1.0
pretty-format: 28.1.3
@@ -12735,7 +12740,7 @@ packages:
dependencies:
'@jest/types': 29.3.1
camelcase: 6.3.0
chalk: 4.1.0
chalk: 4.1.2
jest-get-type: 29.2.0
leven: 3.1.0
pretty-format: 29.3.1
@@ -12749,7 +12754,7 @@ packages:
'@jest/types': 28.1.3
'@types/node': 18.14.6
ansi-escapes: 4.3.2
chalk: 4.1.0
chalk: 4.1.2
emittery: 0.10.2
jest-util: 28.1.3
string-length: 4.0.2
@@ -12763,7 +12768,7 @@ packages:
'@jest/types': 29.3.1
'@types/node': 18.14.6
ansi-escapes: 4.3.2
chalk: 4.1.0
chalk: 4.1.2
emittery: 0.13.1
jest-util: 29.3.1
string-length: 4.0.2
@@ -12852,7 +12857,6 @@ packages:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
dev: true
/js-yaml/4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
@@ -12938,12 +12942,12 @@ packages:
resolution: {integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==}
engines: {node: '>=6'}
hasBin: true
dev: false
/json5/2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
dev: true
/jsonc-parser/3.2.0:
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
@@ -13259,7 +13263,7 @@ packages:
dependencies:
big.js: 5.2.2
emojis-list: 3.0.0
json5: 2.2.2
json5: 2.2.3
dev: false
/loader-utils/3.2.1:
@@ -13348,7 +13352,7 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
dependencies:
chalk: 4.1.0
chalk: 4.1.2
is-unicode-supported: 0.1.0
dev: false
@@ -13430,7 +13434,7 @@ packages:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
dependencies:
semver: 6.1.1
semver: 6.3.0
/make-error/1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
@@ -13632,7 +13636,7 @@ packages:
dev: false
/media-typer/0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
engines: {node: '>= 0.6'}
/meow/8.1.2:
@@ -13653,7 +13657,7 @@ packages:
dev: false
/merge-descriptors/1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
/merge-stream/2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -14206,6 +14210,7 @@ packages:
/mri/1.1.5:
resolution: {integrity: sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==}
engines: {node: '>=4'}
dev: true
/mri/1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
@@ -14228,7 +14233,6 @@ packages:
/ms/2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: true
/multimatch/5.0.0:
resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
@@ -14238,7 +14242,7 @@ packages:
array-differ: 3.0.0
array-union: 2.1.0
arrify: 2.0.1
minimatch: 3.0.4
minimatch: 3.1.2
dev: false
/multistream/2.1.1:
@@ -14353,7 +14357,6 @@ packages:
optional: true
dependencies:
whatwg-url: 5.0.0
dev: true
/node-gyp-build/4.6.0:
resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==}
@@ -14406,7 +14409,7 @@ packages:
dependencies:
hosted-git-info: 2.8.9
resolve: 1.22.1
semver: 5.5.0
semver: 5.7.1
validate-npm-package-license: 3.0.4
/normalize-package-data/3.0.3:
@@ -14472,7 +14475,7 @@ packages:
dependencies:
hosted-git-info: 2.8.9
osenv: 0.1.5
semver: 5.5.0
semver: 5.7.1
validate-npm-package-name: 3.0.0
dev: true
@@ -14804,7 +14807,7 @@ packages:
engines: {node: '>=10'}
dependencies:
bl: 4.1.0
chalk: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
cli-spinners: 2.7.0
is-interactive: 1.0.0
@@ -15600,7 +15603,7 @@ packages:
/pump/2.0.1:
resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
dependencies:
end-of-stream: 1.4.1
end-of-stream: 1.4.4
once: 1.4.0
dev: false
@@ -15874,7 +15877,7 @@ packages:
/regenerator-transform/0.15.1:
resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
dependencies:
'@babel/runtime': 7.12.1
'@babel/runtime': 7.20.7
dev: false
/regex-not/1.0.2:
@@ -16180,7 +16183,7 @@ packages:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
dependencies:
mri: 1.1.5
mri: 1.2.0
dev: false
/safe-buffer/5.1.2:
@@ -16225,6 +16228,7 @@ packages:
/semver/5.5.0:
resolution: {integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==}
hasBin: true
dev: true
/semver/5.7.1:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
@@ -17108,7 +17112,7 @@ packages:
dependencies:
'@istanbuljs/schema': 0.1.3
glob: 7.2.3
minimatch: 3.0.4
minimatch: 3.1.2
dev: true
/test-listen/1.1.0:
@@ -17479,7 +17483,7 @@ packages:
resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==}
engines: {node: '>=6'}
dependencies:
json5: 2.2.2
json5: 2.2.3
minimist: 1.2.7
strip-bom: 3.0.0
dev: false
@@ -18005,7 +18009,7 @@ packages:
dev: true
/utils-merge/1.0.1:
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
engines: {node: '>= 0.4.0'}
/uuid/3.3.2:
@@ -18047,7 +18051,7 @@ packages:
dependencies:
'@jridgewell/trace-mapping': 0.3.17
'@types/istanbul-lib-coverage': 2.0.4
convert-source-map: 1.8.0
convert-source-map: 1.9.0
dev: true
/validate-npm-package-license/3.0.4:

View File

@@ -199,6 +199,9 @@ async function fetchCachedToken() {
return token;
}
/**
* @returns { Promise<String> }
*/
async function fetchTokenWithRetry(retries = 5) {
const {
NOW_TOKEN,