summaryrefslogtreecommitdiff
path: root/packages/integrations/vercel/src/serverless/adapter.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/vercel/src/serverless/adapter.ts')
-rw-r--r--packages/integrations/vercel/src/serverless/adapter.ts35
1 files changed, 30 insertions, 5 deletions
diff --git a/packages/integrations/vercel/src/serverless/adapter.ts b/packages/integrations/vercel/src/serverless/adapter.ts
index 007fb8537..9d799a7bf 100644
--- a/packages/integrations/vercel/src/serverless/adapter.ts
+++ b/packages/integrations/vercel/src/serverless/adapter.ts
@@ -13,8 +13,12 @@ import { exposeEnv } from '../lib/env.js';
import { getVercelOutput, removeDir, writeJson } from '../lib/fs.js';
import { copyDependenciesToFunction } from '../lib/nft.js';
import { getRedirects } from '../lib/redirects.js';
+import { generateEdgeMiddleware } from './middleware.js';
+import { fileURLToPath } from 'node:url';
const PACKAGE_NAME = '@astrojs/vercel/serverless';
+export const ASTRO_LOCALS_HEADER = 'x-astro-locals';
+export const VERCEL_EDGE_MIDDLEWARE_FILE = 'vercel-edge-middleware';
function getAdapter(): AstroAdapter {
return {
@@ -70,6 +74,8 @@ export default function vercelServerless({
});
}
+ const filesToInclude = includeFiles?.map((file) => new URL(file, _config.root)) || [];
+
return {
name: PACKAGE_NAME,
hooks: {
@@ -106,17 +112,32 @@ export default function vercelServerless({
`);
}
},
- 'astro:build:ssr': async ({ entryPoints }) => {
+
+ 'astro:build:ssr': async ({ entryPoints, middlewareEntryPoint }) => {
_entryPoints = entryPoints;
+ if (middlewareEntryPoint) {
+ const outPath = fileURLToPath(buildTempFolder);
+ const vercelEdgeMiddlewareHandlerPath = new URL(
+ VERCEL_EDGE_MIDDLEWARE_FILE,
+ _config.srcDir
+ );
+ const bundledMiddlewarePath = await generateEdgeMiddleware(
+ middlewareEntryPoint,
+ outPath,
+ vercelEdgeMiddlewareHandlerPath
+ );
+ // let's tell the adapter that we need to save this file
+ filesToInclude.push(bundledMiddlewarePath);
+ }
},
+
'astro:build:done': async ({ routes }) => {
// Merge any includes from `vite.assetsInclude
- const inc = includeFiles?.map((file) => new URL(file, _config.root)) || [];
if (_config.vite.assetsInclude) {
const mergeGlobbedIncludes = (globPattern: unknown) => {
if (typeof globPattern === 'string') {
const entries = glob.sync(globPattern).map((p) => pathToFileURL(p));
- inc.push(...entries);
+ filesToInclude.push(...entries);
} else if (Array.isArray(globPattern)) {
for (const pattern of globPattern) {
mergeGlobbedIncludes(pattern);
@@ -133,14 +154,18 @@ export default function vercelServerless({
if (_entryPoints.size) {
for (const [route, entryFile] of _entryPoints) {
const func = basename(entryFile.toString()).replace(/\.mjs$/, '');
- await createFunctionFolder(func, entryFile, inc);
+ await createFunctionFolder(func, entryFile, filesToInclude);
routeDefinitions.push({
src: route.pattern.source,
dest: func,
});
}
} else {
- await createFunctionFolder('render', new URL(serverEntry, buildTempFolder), inc);
+ await createFunctionFolder(
+ 'render',
+ new URL(serverEntry, buildTempFolder),
+ filesToInclude
+ );
routeDefinitions.push({ src: '/.*', dest: 'render' });
}