diff options
author | 2022-04-06 16:21:46 -0400 | |
---|---|---|
committer | 2022-04-06 16:21:46 -0400 | |
commit | c6f8bce7c35cc4fd450fe1b6cc8297a81e413b8e (patch) | |
tree | fbfd7b639a4502ecd51de388721217306618b4b9 /packages/integrations/netlify | |
parent | 8bd49c95365f7bbce41e19b7e8658ad639c22f31 (diff) | |
download | astro-c6f8bce7c35cc4fd450fe1b6cc8297a81e413b8e.tar.gz astro-c6f8bce7c35cc4fd450fe1b6cc8297a81e413b8e.tar.zst astro-c6f8bce7c35cc4fd450fe1b6cc8297a81e413b8e.zip |
Fix Netlify adapter and dynamic routes (#3011)
* Fix Netlify adapter and dynamic routes
* Changeset
Diffstat (limited to 'packages/integrations/netlify')
5 files changed, 55 insertions, 1 deletions
diff --git a/packages/integrations/netlify/package.json b/packages/integrations/netlify/package.json index 4402076c1..ed3d1ff36 100644 --- a/packages/integrations/netlify/package.json +++ b/packages/integrations/netlify/package.json @@ -21,7 +21,8 @@ }, "scripts": { "build": "astro-scripts build \"src/**/*.ts\" && tsc", - "dev": "astro-scripts dev \"src/**/*.ts\"" + "dev": "astro-scripts dev \"src/**/*.ts\"", + "test": "mocha --exit --timeout 20000" }, "dependencies": { "@astrojs/webapi": "^0.11.0" diff --git a/packages/integrations/netlify/src/index.ts b/packages/integrations/netlify/src/index.ts index 181303e33..aa1b5d33c 100644 --- a/packages/integrations/netlify/src/index.ts +++ b/packages/integrations/netlify/src/index.ts @@ -53,6 +53,10 @@ function netlifyFunctions({ dist }: NetlifyFunctionsOptions = {}): AstroIntegrat 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`; } } diff --git a/packages/integrations/netlify/test/dynamic-route.test.js b/packages/integrations/netlify/test/dynamic-route.test.js new file mode 100644 index 000000000..bc9335bfe --- /dev/null +++ b/packages/integrations/netlify/test/dynamic-route.test.js @@ -0,0 +1,37 @@ +import { expect } from 'chai'; +import { load as cheerioLoad } from 'cheerio'; +import { loadFixture } from '../../../astro/test/test-utils.js'; +import netlifyAdapter from '../dist/index.js'; +import { fileURLToPath } from 'url'; + +// Asset bundling +describe('Dynamic pages', () => { + /** @type {import('../../../astro/test/test-utils').Fixture} */ + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: new URL('./fixtures/dynamic-route/', import.meta.url).toString(), + experimental: { + ssr: true, + }, + adapter: netlifyAdapter({ + dist: new URL('./fixtures/dynamic-route/dist/', import.meta.url) + }), + site: `http://example.com`, + vite: { + resolve: { + alias: { + '@astrojs/netlify/netlify-functions.js': fileURLToPath(new URL('../dist/netlify-functions.js', import.meta.url)) + } + } + } + }); + await fixture.build(); + }); + + it('Dynamic pages are included in the redirects file', async () => { + const redir = await fixture.readFile('/_redirects'); + expect(redir).to.match(/\/products\/\*/); + }); +}); diff --git a/packages/integrations/netlify/test/fixtures/.gitignore b/packages/integrations/netlify/test/fixtures/.gitignore new file mode 100644 index 000000000..916f60644 --- /dev/null +++ b/packages/integrations/netlify/test/fixtures/.gitignore @@ -0,0 +1 @@ +**/netlify diff --git a/packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro b/packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro new file mode 100644 index 000000000..5ed06d251 --- /dev/null +++ b/packages/integrations/netlify/test/fixtures/dynamic-route/src/pages/products/[id].astro @@ -0,0 +1,11 @@ +--- + +--- +<html> +<head> + <title>Testing</title> +</head> +<body> + <h1>Testing</h1> +</body> +</html> |