summaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/src
diff options
context:
space:
mode:
authorGravatar Pascal Schilp <pascalschilp@gmail.com> 2022-05-11 17:13:23 +0200
committerGravatar GitHub <noreply@github.com> 2022-05-11 09:13:23 -0600
commit352fc3166fe3b3d3da3feff621394b20eacb9cc3 (patch)
tree2d0f1a2a142b35c03a72d20d5cd873bf38ae4e23 /packages/integrations/netlify/src
parent9c98ba81e1cde14a3772cbc9ee020956dae996e8 (diff)
downloadastro-352fc3166fe3b3d3da3feff621394b20eacb9cc3.tar.gz
astro-352fc3166fe3b3d3da3feff621394b20eacb9cc3.tar.zst
astro-352fc3166fe3b3d3da3feff621394b20eacb9cc3.zip
Fix/netlify edge redirects (#3342)
* fix: create redirects file for netlify edge adapter * chore: changeset * chore: distinguish between edge/regular
Diffstat (limited to 'packages/integrations/netlify/src')
-rw-r--r--packages/integrations/netlify/src/integration-edge-functions.ts2
-rw-r--r--packages/integrations/netlify/src/integration-functions.ts23
-rw-r--r--packages/integrations/netlify/src/shared.ts31
3 files changed, 35 insertions, 21 deletions
diff --git a/packages/integrations/netlify/src/integration-edge-functions.ts b/packages/integrations/netlify/src/integration-edge-functions.ts
index 08835bd26..0f28aeab5 100644
--- a/packages/integrations/netlify/src/integration-edge-functions.ts
+++ b/packages/integrations/netlify/src/integration-edge-functions.ts
@@ -1,4 +1,5 @@
import type { AstroAdapter, AstroIntegration, AstroConfig, RouteData } from 'astro';
+import { createRedirects } from './shared.js';
import * as fs from 'fs';
export function getAdapter(): AstroAdapter {
@@ -97,6 +98,7 @@ export function netlifyEdgeFunctions({ dist }: NetlifyEdgeFunctionsOptions = {})
},
'astro:build:done': async ({ routes, dir }) => {
await createEdgeManifest(routes, entryFile, _config.root);
+ await createRedirects(routes, dir, entryFile, true);
},
},
};
diff --git a/packages/integrations/netlify/src/integration-functions.ts b/packages/integrations/netlify/src/integration-functions.ts
index 2720eb591..81cb7e9fd 100644
--- a/packages/integrations/netlify/src/integration-functions.ts
+++ b/packages/integrations/netlify/src/integration-functions.ts
@@ -1,5 +1,5 @@
import type { AstroAdapter, AstroIntegration, AstroConfig } from 'astro';
-import fs from 'fs';
+import { createRedirects } from './shared.js';
export function getAdapter(): AstroAdapter {
return {
@@ -37,26 +37,7 @@ function netlifyFunctions({ dist }: NetlifyFunctionsOptions = {}): AstroIntegrat
buildConfig.server = new URL('./functions/', _config.outDir);
},
'astro:build:done': async ({ routes, dir }) => {
- const _redirectsURL = new URL('./_redirects', dir);
-
- // Create the redirects file that is used for routing.
- let _redirects = '';
- for (const route of routes) {
- if (route.pathname) {
- _redirects += `
-${route.pathname} /.netlify/functions/${entryFile} 200`;
- } else {
- const pattern =
- '/' + route.segments.map(([part]) => (part.dynamic ? '*' : part.content)).join('/');
- _redirects += `
-${pattern} /.netlify/functions/${entryFile} 200`;
- }
- }
-
- // Always use appendFile() because the redirects file could already exist,
- // e.g. due to a `/public/_redirects` file that got copied to the output dir.
- // If the file does not exist yet, appendFile() automatically creates it.
- await fs.promises.appendFile(_redirectsURL, _redirects, 'utf-8');
+ await createRedirects(routes, dir, entryFile, false);
},
},
};
diff --git a/packages/integrations/netlify/src/shared.ts b/packages/integrations/netlify/src/shared.ts
new file mode 100644
index 000000000..3df667f4d
--- /dev/null
+++ b/packages/integrations/netlify/src/shared.ts
@@ -0,0 +1,31 @@
+import type { RouteData } from 'astro';
+import fs from 'fs';
+
+export async function createRedirects(
+ routes: RouteData[],
+ dir: URL,
+ entryFile: string,
+ edge: boolean
+ ) {
+ const _redirectsURL = new URL('./_redirects', dir);
+ const kind = edge ? 'edge-functions' : 'functions'
+
+ // Create the redirects file that is used for routing.
+ let _redirects = '';
+ for (const route of routes) {
+ if (route.pathname) {
+ _redirects += `
+ ${route.pathname} /.netlify/${kind}/${entryFile} 200`;
+ } else {
+ const pattern =
+ '/' + route.segments.map(([part]) => (part.dynamic ? '*' : part.content)).join('/');
+ _redirects += `
+ ${pattern} /.netlify/${kind}/${entryFile} 200`;
+ }
+ }
+
+ // Always use appendFile() because the redirects file could already exist,
+ // e.g. due to a `/public/_redirects` file that got copied to the output dir.
+ // If the file does not exist yet, appendFile() automatically creates it.
+ await fs.promises.appendFile(_redirectsURL, _redirects, 'utf-8');
+} \ No newline at end of file