astro/packages/integrations/netlify/src/shared.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

32 lines
996 B
TypeScript
Raw Normal View History

import type { RouteData } from 'astro';
import fs from 'fs';
export async function createRedirects(
2022-05-11 15:14:43 +00:00
routes: RouteData[],
dir: URL,
entryFile: string,
edge: boolean
) {
const _redirectsURL = new URL('./_redirects', dir);
const kind = edge ? 'edge-functions' : 'functions';
2022-05-11 15:14:43 +00:00
// 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`;
2022-05-11 15:14:43 +00:00
} else {
const pattern =
'/' + route.segments.map(([part]) => (part.dynamic ? '*' : part.content)).join('/');
_redirects += `
${pattern} /.netlify/${kind}/${entryFile} 200`;
2022-05-11 15:14:43 +00:00
}
}
2022-05-11 15:14:43 +00:00
// 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');
}