summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Arsh <69170106+lilnasy@users.noreply.github.com> 2023-07-21 00:09:46 +0530
committerGravatar GitHub <noreply@github.com> 2023-07-20 13:39:46 -0500
commit35a0b6c8a909623d802523006cb3c65e4e70c88f (patch)
treec24bb6ee0b40e2c7687bea1ba4a7337149670710
parent92382ea1d4e6400302b8375b4f701c10aa02043f (diff)
downloadastro-35a0b6c8a909623d802523006cb3c65e4e70c88f.tar.gz
astro-35a0b6c8a909623d802523006cb3c65e4e70c88f.tar.zst
astro-35a0b6c8a909623d802523006cb3c65e4e70c88f.zip
fix(vercel): Switch to node 18 when local version is not supported (#7718)
* fix(vercel): switch to node 18 when needed * fix types, reword * reorder sentences * add changeset * fix(vercel): switch to node 18 when needed * add referencce to vercel documentation --------- Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
-rw-r--r--.changeset/gorgeous-ads-develop.md5
-rw-r--r--packages/integrations/vercel/src/serverless/adapter.ts19
2 files changed, 24 insertions, 0 deletions
diff --git a/.changeset/gorgeous-ads-develop.md b/.changeset/gorgeous-ads-develop.md
new file mode 100644
index 000000000..567ece314
--- /dev/null
+++ b/.changeset/gorgeous-ads-develop.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/vercel': patch
+---
+
+The vercel adapter now Warns when using a deprecated version of Node, and switches to 18 when using an unsupported version.
diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts
index 456af106f..79b831a96 100644
--- a/packages/integrations/vercel/src/serverless/adapter.ts
+++ b/packages/integrations/vercel/src/serverless/adapter.ts
@@ -19,6 +19,13 @@ const PACKAGE_NAME = '@astrojs/vercel/serverless';
export const ASTRO_LOCALS_HEADER = 'x-astro-locals';
export const VERCEL_EDGE_MIDDLEWARE_FILE = 'vercel-edge-middleware';
+// https://vercel.com/docs/concepts/functions/serverless-functions/runtimes/node-js#node.js-version
+const SUPPORTED_NODE_VERSIONS: Record<string, { status: 'current' } | { status: 'deprecated', removal: Date }> = {
+ 14: { status: 'deprecated', removal: new Date('August 15 2023') },
+ 16: { status: 'deprecated', removal: new Date('February 6 2024') },
+ 18: { status: 'current' }
+}
+
function getAdapter(): AstroAdapter {
return {
name: PACKAGE_NAME,
@@ -193,5 +200,17 @@ export default function vercelServerless({
function getRuntime() {
const version = process.version.slice(1); // 'v16.5.0' --> '16.5.0'
const major = version.split('.')[0]; // '16.5.0' --> '16'
+ const support = SUPPORTED_NODE_VERSIONS[major]
+ if (support === undefined) {
+ console.warn(`[${PACKAGE_NAME}] The local Node.js version (${major}) is not supported by Vercel Serverless Functions.`)
+ console.warn(`[${PACKAGE_NAME}] Your project will use Node.js 18 as the runtime instead.`)
+ console.warn(`[${PACKAGE_NAME}] Consider switching your local version to 18.`)
+ return 'nodejs18.x';
+ }
+ if (support.status === 'deprecated') {
+ console.warn(`[${PACKAGE_NAME}] Your project is being built for Node.js ${major} as the runtime.`)
+ console.warn(`[${PACKAGE_NAME}] This version is deprecated by Vercel Serverless Functions, and scheduled to be disabled on ${new Intl.DateTimeFormat(undefined, { dateStyle: "long" }).format(support.removal)}.`)
+ console.warn(`[${PACKAGE_NAME}] Consider upgrading your local version to 18.`)
+ }
return `nodejs${major}.x`;
}