diff options
5 files changed, 50 insertions, 4 deletions
diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json index 9eddb2f60..4991ee196 100644 --- a/packages/integrations/cloudflare/package.json +++ b/packages/integrations/cloudflare/package.json @@ -50,6 +50,7 @@ "chai": "^4.3.6", "cheerio": "^1.0.0-rc.11", "mocha": "^9.2.2", + "slash": "^4.0.0", "wrangler": "^2.0.23" } } diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 46deee2f8..2f6b36e87 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -60,7 +60,7 @@ export default function createIntegration(args?: Options): AstroIntegration { if (config.output === 'static') { throw new Error(` - [@astrojs/cloudflare] \`output: "server"\` is required to use this adapter. Otherwise, this adapter is not necessary to deploy a static site to Cloudflare. + [@astrojs/cloudflare] \`output: "server"\` or \`output: "hybrid"\` is required to use this adapter. Otherwise, this adapter is not necessary to deploy a static site to Cloudflare. `); } diff --git a/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro b/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro index 30386a625..e11de7add 100644 --- a/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro +++ b/packages/integrations/cloudflare/test/fixtures/prerender/src/pages/one.astro @@ -1,5 +1,5 @@ --- -export const prerender = true; +export const prerender = import.meta.env.PRERENDER; --- <html> <head> diff --git a/packages/integrations/cloudflare/test/prerender.test.js b/packages/integrations/cloudflare/test/prerender.test.js index a3ce50d08..5d3ff9f10 100644 --- a/packages/integrations/cloudflare/test/prerender.test.js +++ b/packages/integrations/cloudflare/test/prerender.test.js @@ -1,19 +1,60 @@ import { loadFixture } from './test-utils.js'; import { expect } from 'chai'; +import slash from 'slash'; describe('Prerendering', () => { /** @type {import('./test-utils').Fixture} */ let fixture; before(async () => { + process.env.PRERENDER = true; fixture = await loadFixture({ root: './fixtures/prerender/', }); await fixture.build(); }); + after(() => { + delete process.env.PRERENDER; + fixture.clean(); + }); + + it('includes prerendered routes in the routes.json config', async () => { + const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json')).exclude.map((r) => + slash(r) + ); + const expectedExcludedRoutes = ['/_worker.js', '/one/index.html', '/one/']; + + expect(foundRoutes.every((element) => expectedExcludedRoutes.includes(element))).to.be.true; + }); +}); + +describe('Hybrid rendering', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + + before(async () => { + process.env.PRERENDER = false; + fixture = await loadFixture({ + root: './fixtures/prerender/', + output: 'hybrid', + experimental: { + hybridOutput: true, + }, + }); + await fixture.build(); + }); + + after(() => { + delete process.env.PRERENDER; + }); + it('includes prerendered routes in the routes.json config', async () => { - const routes = JSON.parse(await fixture.readFile('/_routes.json')); - expect(routes.exclude).to.include('/one/'); + const foundRoutes = JSON.parse(await fixture.readFile('/_routes.json')).exclude.map((r) => + slash(r) + ); + const expectedExcludedRoutes = ['/_worker.js', '/index.html', '/']; + + expect(foundRoutes.every((element) => expectedExcludedRoutes.includes(element))).to.be.true; }); }); diff --git a/packages/integrations/cloudflare/test/test-utils.js b/packages/integrations/cloudflare/test/test-utils.js index 58cb8f9dd..b4628825c 100644 --- a/packages/integrations/cloudflare/test/test-utils.js +++ b/packages/integrations/cloudflare/test/test-utils.js @@ -4,6 +4,10 @@ import { fileURLToPath } from 'url'; export { fixLineEndings } from '../../../astro/test/test-utils.js'; +/** + * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture + */ + export function loadFixture(config) { if (config?.root) { config.root = new URL(config.root, import.meta.url); |