diff options
Diffstat (limited to 'packages/integrations')
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', + }, + }, + ]); + }); +}); |