summaryrefslogtreecommitdiff
path: root/packages/integrations/netlify/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/netlify/src')
-rw-r--r--packages/integrations/netlify/src/index.ts9
-rw-r--r--packages/integrations/netlify/src/ssr-function.ts7
2 files changed, 12 insertions, 4 deletions
diff --git a/packages/integrations/netlify/src/index.ts b/packages/integrations/netlify/src/index.ts
index d6dcc353f..e634c4ecc 100644
--- a/packages/integrations/netlify/src/index.ts
+++ b/packages/integrations/netlify/src/index.ts
@@ -105,13 +105,14 @@ export default function netlifyIntegration(
}
}
- async function writeSSRFunction() {
+ async function writeSSRFunction(notFoundContent?: string) {
await writeFile(
new URL('./ssr.mjs', ssrOutputDir()),
`
import createSSRHandler from './entry.mjs';
export default createSSRHandler(${JSON.stringify({
cacheOnDemandPages: Boolean(integrationConfig?.cacheOnDemandPages),
+ notFoundContent,
})});
export const config = { name: "Astro SSR", generator: "@astrojs/netlify@${packageVersion}", path: "/*", preferStatic: true };
`
@@ -300,7 +301,11 @@ export default function netlifyIntegration(
logger.info('Emitted _redirects');
if (_config.output !== 'static') {
- await writeSSRFunction();
+ let notFoundContent = undefined;
+ try {
+ notFoundContent = await readFile(new URL('./404.html', dir), 'utf8');
+ } catch {}
+ await writeSSRFunction(notFoundContent);
logger.info('Generated SSR Function');
}
diff --git a/packages/integrations/netlify/src/ssr-function.ts b/packages/integrations/netlify/src/ssr-function.ts
index d0a963bde..33aea2717 100644
--- a/packages/integrations/netlify/src/ssr-function.ts
+++ b/packages/integrations/netlify/src/ssr-function.ts
@@ -13,11 +13,14 @@ const clientAddressSymbol = Symbol.for('astro.clientAddress');
export const createExports = (manifest: SSRManifest, _args: Args) => {
const app = new App(manifest);
- function createHandler(integrationConfig: { cacheOnDemandPages: boolean }) {
+ function createHandler(integrationConfig: { cacheOnDemandPages: boolean, notFoundContent?: string }) {
return async function handler(request: Request, context: Context) {
const routeData = app.match(request);
- Reflect.set(request, clientAddressSymbol, context.ip);
+ if (!routeData && typeof integrationConfig.notFoundContent !== 'undefined') {
+ return new Response(integrationConfig.notFoundContent, { status: 404 });
+ }
+ Reflect.set(request, clientAddressSymbol, context.ip);
let locals: Record<string, unknown> = {};
const astroLocalsHeader = request.headers.get('x-astro-locals');