summaryrefslogtreecommitdiff
path: root/packages/integrations/vercel/src/serverless/entrypoint.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/vercel/src/serverless/entrypoint.ts')
-rw-r--r--packages/integrations/vercel/src/serverless/entrypoint.ts11
1 files changed, 10 insertions, 1 deletions
diff --git a/packages/integrations/vercel/src/serverless/entrypoint.ts b/packages/integrations/vercel/src/serverless/entrypoint.ts
index e41d0a438..daa811015 100644
--- a/packages/integrations/vercel/src/serverless/entrypoint.ts
+++ b/packages/integrations/vercel/src/serverless/entrypoint.ts
@@ -3,12 +3,21 @@ import type { SSRManifest } from 'astro';
import { App } from 'astro/app';
import type { IncomingMessage, ServerResponse } from 'node:http';
-import { getRequest, setResponse } from './request-transform.js';
+import * as requestTransformLegacy from './request-transform/legacy.js';
+import * as requestTransformNode18 from './request-transform/node18.js';
polyfill(globalThis, {
exclude: 'window document',
});
+// Node 18+ has a new API for request/response, while older versions use node-fetch
+// When we drop support for Node 14, we can remove the legacy code by switching to undici
+
+const nodeVersion = parseInt(process.version.split('.')[0].slice(1)); // 'v14.17.0' -> 14
+
+const { getRequest, setResponse } =
+ nodeVersion >= 18 ? requestTransformNode18 : requestTransformLegacy;
+
export const createExports = (manifest: SSRManifest) => {
const app = new App(manifest);