diff options
author | 2023-07-17 15:53:10 +0100 | |
---|---|---|
committer | 2023-07-17 15:53:10 +0100 | |
commit | 4c93bd8154c210ebce6ad2889bd8bfdf4c349a78 (patch) | |
tree | e0b9fb9474845411b35f177260408f444d0631ff /packages/integrations/netlify/src/integration-functions.ts | |
parent | cc8e9de88179d2ed4b70980c60b41448db393429 (diff) | |
download | astro-4c93bd8154c210ebce6ad2889bd8bfdf4c349a78.tar.gz astro-4c93bd8154c210ebce6ad2889bd8bfdf4c349a78.tar.zst astro-4c93bd8154c210ebce6ad2889bd8bfdf4c349a78.zip |
feat(@astrojs/netlify): edge middleware support (#7632)
Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com>
Co-authored-by: Yan Thomas <61414485+Yan-Thomas@users.noreply.github.com>
Diffstat (limited to 'packages/integrations/netlify/src/integration-functions.ts')
-rw-r--r-- | packages/integrations/netlify/src/integration-functions.ts | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/packages/integrations/netlify/src/integration-functions.ts b/packages/integrations/netlify/src/integration-functions.ts index 3e8c476e5..64bdbb203 100644 --- a/packages/integrations/netlify/src/integration-functions.ts +++ b/packages/integrations/netlify/src/integration-functions.ts @@ -1,8 +1,12 @@ import type { AstroAdapter, AstroConfig, AstroIntegration, RouteData } from 'astro'; import { extname } from 'node:path'; -import { fileURLToPath } from 'node:url'; import type { Args } from './netlify-functions.js'; import { createRedirects } from './shared.js'; +import { fileURLToPath } from 'node:url'; +import { generateEdgeMiddleware } from './middleware.js'; + +export const NETLIFY_EDGE_MIDDLEWARE_FILE = 'netlify-edge-middleware'; +export const ASTRO_LOCALS_HEADER = 'x-astro-locals'; export function getAdapter(args: Args = {}): AstroAdapter { return { @@ -27,6 +31,7 @@ function netlifyFunctions({ let _config: AstroConfig; let _entryPoints: Map<RouteData, URL>; let ssrEntryFile: string; + let _middlewareEntryPoint: URL; return { name: '@astrojs/netlify', hooks: { @@ -40,7 +45,10 @@ function netlifyFunctions({ }, }); }, - 'astro:build:ssr': ({ entryPoints }) => { + 'astro:build:ssr': async ({ entryPoints, middlewareEntryPoint }) => { + if (middlewareEntryPoint) { + _middlewareEntryPoint = middlewareEntryPoint; + } _entryPoints = entryPoints; }, 'astro:config:done': ({ config, setAdapter }) => { @@ -85,6 +93,18 @@ function netlifyFunctions({ await createRedirects(_config, routeToDynamicTargetMap, dir); } + if (_middlewareEntryPoint) { + const outPath = fileURLToPath(new URL('./.netlify/edge-functions/', _config.root)); + const netlifyEdgeMiddlewareHandlerPath = new URL( + NETLIFY_EDGE_MIDDLEWARE_FILE, + _config.srcDir + ); + await generateEdgeMiddleware( + _middlewareEntryPoint, + outPath, + netlifyEdgeMiddlewareHandlerPath + ); + } }, }, }; |