summaryrefslogtreecommitdiff
path: root/packages/integrations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations')
-rw-r--r--packages/integrations/netlify/src/index.ts16
-rw-r--r--packages/integrations/netlify/test/static/fixtures/redirects/astro.config.mjs9
-rw-r--r--packages/integrations/netlify/test/static/headers.test.js25
3 files changed, 42 insertions, 8 deletions
diff --git a/packages/integrations/netlify/src/index.ts b/packages/integrations/netlify/src/index.ts
index 258d5c19e..0a4c4cfaf 100644
--- a/packages/integrations/netlify/src/index.ts
+++ b/packages/integrations/netlify/src/index.ts
@@ -112,6 +112,17 @@ async function writeNetlifyFrameworkConfig(config: AstroConfig, logger: AstroInt
.filter(Boolean as unknown as (pattern?: string) => pattern is string)
);
+ const headers = config.build.assetsPrefix
+ ? undefined
+ : [
+ {
+ for: `${config.base}${config.base.endsWith('/') ? '' : '/'}${config.build.assets}/*`,
+ values: {
+ 'Cache-Control': 'public, max-age=31536000, immutable',
+ },
+ },
+ ];
+
// See https://docs.netlify.com/image-cdn/create-integration/
const deployConfigDir = new URL('.netlify/v1/', config.root);
await mkdir(deployConfigDir, { recursive: true });
@@ -119,6 +130,7 @@ async function writeNetlifyFrameworkConfig(config: AstroConfig, logger: AstroInt
new URL('./config.json', deployConfigDir),
JSON.stringify({
images: { remote_images: remoteImages },
+ headers,
})
);
}
@@ -432,9 +444,7 @@ export default function netlifyIntegration(
rootDir = config.root;
_config = config;
- if (config.image?.domains?.length || config.image?.remotePatterns?.length) {
- await writeNetlifyFrameworkConfig(config, logger);
- }
+ await writeNetlifyFrameworkConfig(config, logger);
const edgeMiddleware = integrationConfig?.edgeMiddleware ?? false;
diff --git a/packages/integrations/netlify/test/static/fixtures/redirects/astro.config.mjs b/packages/integrations/netlify/test/static/fixtures/redirects/astro.config.mjs
index c2a53c274..ce441d8b1 100644
--- a/packages/integrations/netlify/test/static/fixtures/redirects/astro.config.mjs
+++ b/packages/integrations/netlify/test/static/fixtures/redirects/astro.config.mjs
@@ -2,10 +2,9 @@ import netlify from '@astrojs/netlify';
import { defineConfig } from 'astro/config';
export default defineConfig({
- output: 'static',
- adapter: netlify(),
- site: `http://example.com`,
- site: `http://example.com`,
+ output: 'static',
+ adapter: netlify(),
+ site: "http://example.com",
redirects: {
'/other': '/',
'/two': {
@@ -14,4 +13,4 @@ export default defineConfig({
},
'/blog/[...slug]': '/team/articles/[...slug]',
},
-}); \ No newline at end of file
+});
diff --git a/packages/integrations/netlify/test/static/headers.test.js b/packages/integrations/netlify/test/static/headers.test.js
new file mode 100644
index 000000000..1a22e5151
--- /dev/null
+++ b/packages/integrations/netlify/test/static/headers.test.js
@@ -0,0 +1,25 @@
+import * as assert from 'node:assert/strict';
+import { before, describe, it } from 'node:test';
+import { loadFixture } from '@astrojs/test-utils';
+
+describe('SSG - headers', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({ root: new URL('./fixtures/redirects/', import.meta.url) });
+ await fixture.build();
+ });
+
+ it('Generates headers for static assets', async () => {
+ const config = await fixture.readFile('../.netlify/v1/config.json');
+ const headers = JSON.parse(config).headers;
+ assert.deepEqual(headers, [
+ {
+ for: '/_astro/*',
+ values: {
+ 'Cache-Control': 'public, max-age=31536000, immutable',
+ },
+ },
+ ]);
+ });
+});