diff options
author | 2024-07-18 11:03:39 -0400 | |
---|---|---|
committer | 2024-07-18 16:03:39 +0100 | |
commit | fe3afebd652289ec1b65eed983e804dbb37ed092 (patch) | |
tree | a91e6f3d0c548294ce87541511e610ccf003f9d2 /packages/integrations/vercel | |
parent | 1a26c6dfe5fb0c339da5ba6fc6e18b2b9955ebb3 (diff) | |
download | astro-fe3afebd652289ec1b65eed983e804dbb37ed092.tar.gz astro-fe3afebd652289ec1b65eed983e804dbb37ed092.tar.zst astro-fe3afebd652289ec1b65eed983e804dbb37ed092.zip |
Fix Server Islands in Vercel (#11491)
* Fix Server Islands in Vercel
* Add a changeset
* Get server islands pattern from the segments
* Move getPattern so it can be used at runtime
* Fix build
Diffstat (limited to 'packages/integrations/vercel')
5 files changed, 62 insertions, 0 deletions
diff --git a/packages/integrations/vercel/test/fixtures/server-islands/astro.config.mjs b/packages/integrations/vercel/test/fixtures/server-islands/astro.config.mjs new file mode 100644 index 000000000..534197429 --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/server-islands/astro.config.mjs @@ -0,0 +1,10 @@ +import vercel from '@astrojs/vercel/serverless'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + output: "server", + adapter: vercel(), + experimental: { + serverIslands: true, + } +}); diff --git a/packages/integrations/vercel/test/fixtures/server-islands/package.json b/packages/integrations/vercel/test/fixtures/server-islands/package.json new file mode 100644 index 000000000..a21ff176a --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/server-islands/package.json @@ -0,0 +1,10 @@ +{ + "name": "@test/vercel-server-islands", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/vercel": "workspace:*", + "astro": "workspace:*" + } +} + diff --git a/packages/integrations/vercel/test/fixtures/server-islands/src/components/Island.astro b/packages/integrations/vercel/test/fixtures/server-islands/src/components/Island.astro new file mode 100644 index 000000000..9d2832bc1 --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/server-islands/src/components/Island.astro @@ -0,0 +1 @@ +<h1>I'm an island</h1> diff --git a/packages/integrations/vercel/test/fixtures/server-islands/src/pages/index.astro b/packages/integrations/vercel/test/fixtures/server-islands/src/pages/index.astro new file mode 100644 index 000000000..835126c2b --- /dev/null +++ b/packages/integrations/vercel/test/fixtures/server-islands/src/pages/index.astro @@ -0,0 +1,12 @@ +--- +import Island from '../components/Island.astro'; +--- +<html> + <head> + <title>One</title> + </head> + <body> + <h1>One</h1> + <Island server:defer /> + </body> +</html> diff --git a/packages/integrations/vercel/test/server-islands.test.js b/packages/integrations/vercel/test/server-islands.test.js new file mode 100644 index 000000000..060492584 --- /dev/null +++ b/packages/integrations/vercel/test/server-islands.test.js @@ -0,0 +1,29 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import { loadFixture } from './test-utils.js'; + +describe('Server Islands', () => { + /** @type {import('./test-utils.js').Fixture} */ + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/server-islands/', + }); + await fixture.build(); + }); + + it('server islands route is in the config', async () => { + const config = JSON.parse( + await fixture.readFile('../.vercel/output/config.json') + ); + let found = null; + for(let route of config.routes) { + if(route.src?.includes('_server-islands')) { + found = route; + break; + } + } + assert.notEqual(found, null, 'Default server islands route included'); + }); +}); |