diff options
Diffstat (limited to 'packages/integrations/netlify/src/integration-edge-functions.ts')
| -rw-r--r-- | packages/integrations/netlify/src/integration-edge-functions.ts | 46 | 
1 files changed, 29 insertions, 17 deletions
| diff --git a/packages/integrations/netlify/src/integration-edge-functions.ts b/packages/integrations/netlify/src/integration-edge-functions.ts index 11a18beb9..b69667dde 100644 --- a/packages/integrations/netlify/src/integration-edge-functions.ts +++ b/packages/integrations/netlify/src/integration-edge-functions.ts @@ -1,4 +1,4 @@ -import type { AstroAdapter, AstroConfig, AstroIntegration, BuildConfig, RouteData } from 'astro'; +import type { AstroAdapter, AstroConfig, AstroIntegration, RouteData } from 'astro';  import esbuild from 'esbuild';  import * as fs from 'fs';  import * as npath from 'path'; @@ -6,6 +6,12 @@ import { fileURLToPath } from 'url';  import type { Plugin as VitePlugin } from 'vite';  import { createRedirects } from './shared.js'; +interface BuildConfig { +	server: URL; +	client: URL; +	serverEntry: string; +} +  const SHIM = `globalThis.process = {  	argv: [],  	env: {}, @@ -74,8 +80,8 @@ async function createEdgeManifest(routes: RouteData[], entryFile: string, dir: U  	await fs.promises.writeFile(manifestURL, _manifest, 'utf-8');  } -async function bundleServerEntry(buildConfig: BuildConfig, vite: any) { -	const entryUrl = new URL(buildConfig.serverEntry, buildConfig.server); +async function bundleServerEntry({ serverEntry, server }: BuildConfig, vite: any) { +	const entryUrl = new URL(serverEntry, server);  	const pth = fileURLToPath(entryUrl);  	await esbuild.build({  		target: 'es2020', @@ -96,7 +102,7 @@ async function bundleServerEntry(buildConfig: BuildConfig, vite: any) {  		const chunkFileNames =  			vite?.build?.rollupOptions?.output?.chunkFileNames ?? 'chunks/chunk.[hash].mjs';  		const chunkPath = npath.dirname(chunkFileNames); -		const chunksDirUrl = new URL(chunkPath + '/', buildConfig.server); +		const chunksDirUrl = new URL(chunkPath + '/', server);  		await fs.promises.rm(chunksDirUrl, { recursive: true, force: true });  	} catch {}  } @@ -105,17 +111,13 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})  	let _config: AstroConfig;  	let entryFile: string;  	let _buildConfig: BuildConfig; +	let needsBuildConfig = false;  	let _vite: any;  	return {  		name: '@astrojs/netlify/edge-functions',  		hooks: {  			'astro:config:setup': ({ config, updateConfig }) => { -				if (dist) { -					config.outDir = dist; -				} else { -					config.outDir = new URL('./dist/', config.root); -				} - +				needsBuildConfig = !config.build.client;  				// Add a plugin that shims the global environment.  				const injectPlugin: VitePlugin = {  					name: '@astrojs/netlify/plugin-inject', @@ -128,8 +130,14 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})  						}  					},  				}; - +				const outDir = dist ?? new URL('./dist/', config.root);  				updateConfig({ +					outDir, +					build: { +						client: outDir, +						server: new URL('./.netlify/edge-functions/', config.root), +						serverEntry: 'entry.js', +					},  					vite: {  						plugins: [injectPlugin],  					}, @@ -138,6 +146,8 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})  			'astro:config:done': ({ config, setAdapter }) => {  				setAdapter(getAdapter());  				_config = config; +				_buildConfig = config.build; +				entryFile = config.build.serverEntry.replace(/\.m?js/, '');  				if (config.output === 'static') {  					console.warn(`[@astrojs/netlify] \`output: "server"\` is required to use this adapter.`); @@ -146,12 +156,14 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})  					);  				}  			}, -			'astro:build:start': async ({ buildConfig }) => { -				_buildConfig = buildConfig; -				entryFile = buildConfig.serverEntry.replace(/\.m?js/, ''); -				buildConfig.client = _config.outDir; -				buildConfig.server = new URL('./.netlify/edge-functions/', _config.root); -				buildConfig.serverEntry = 'entry.js'; +			'astro:build:start': ({ buildConfig }) => { +				if(needsBuildConfig) { +					buildConfig.client = _config.outDir; +					buildConfig.server = new URL('./.netlify/edge-functions/', _config.root); +					buildConfig.serverEntry = 'entry.js'; +					_buildConfig = buildConfig; +					entryFile = buildConfig.serverEntry.replace(/\.m?js/, ''); +				}  			},  			'astro:build:setup': ({ vite, target }) => {  				if (target === 'server') { | 
