aboutsummaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/src/integration-edge-functions.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/netlify/src/integration-edge-functions.ts')
-rw-r--r--packages/integrations/netlify/src/integration-edge-functions.ts46
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') {