From c506bfdfc038d2c453e3bde01cb7caeeea378b9c Mon Sep 17 00:00:00 2001 From: HiDeoo <494699+HiDeoo@users.noreply.github.com> Date: Sat, 11 May 2024 20:00:42 +0200 Subject: [PATCH] feat: adds a social link to Starlight for the blog RSS feed --- packages/starlight-blog/index.ts | 18 +++++++++++++++--- packages/starlight-blog/tests/e2e/blog.test.ts | 2 +- packages/starlight-blog/tests/e2e/rss.test.ts | 7 +++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 packages/starlight-blog/tests/e2e/rss.test.ts diff --git a/packages/starlight-blog/index.ts b/packages/starlight-blog/index.ts index 5537e3b..ceeaccd 100644 --- a/packages/starlight-blog/index.ts +++ b/packages/starlight-blog/index.ts @@ -15,6 +15,12 @@ export default function starlightBlogPlugin(userConfig?: StarlightBlogUserConfig name: 'starlight-blog-plugin', hooks: { setup({ addIntegration, astroConfig, config: starlightConfig, logger, updateConfig: updateStarlightConfig }) { + const rssLink = astroConfig.site + ? `${stripTrailingSlash(astroConfig.site)}${stripTrailingSlash(astroConfig.base)}/${stripLeadingSlash( + stripTrailingSlash(config.prefix), + )}/rss.xml` + : undefined + updateStarlightConfig({ components: { ...starlightConfig.components, @@ -29,9 +35,7 @@ export default function starlightBlogPlugin(userConfig?: StarlightBlogUserConfig { tag: 'link' as const, attrs: { - href: `${stripTrailingSlash(astroConfig.site)}${stripTrailingSlash( - astroConfig.base, - )}/${stripLeadingSlash(stripTrailingSlash(config.prefix))}/rss.xml`, + href: rssLink, rel: 'alternate', title: config.title, type: 'application/rss+xml', @@ -40,6 +44,14 @@ export default function starlightBlogPlugin(userConfig?: StarlightBlogUserConfig ] : []), ], + social: { + ...starlightConfig.social, + ...(astroConfig.site && rssLink && !starlightConfig.social?.rss + ? { + rss: rssLink, + } + : {}), + }, }) addIntegration({ diff --git a/packages/starlight-blog/tests/e2e/blog.test.ts b/packages/starlight-blog/tests/e2e/blog.test.ts index 6ec3ba9..7ffc93d 100644 --- a/packages/starlight-blog/tests/e2e/blog.test.ts +++ b/packages/starlight-blog/tests/e2e/blog.test.ts @@ -195,7 +195,7 @@ test('should not list draft blog posts in production', async ({ blogPage }) => { test('should add a link to the RSS feed in the sidebar', async ({ blogPage }) => { await blogPage.goto() - const link = blogPage.page.getByRole('link', { name: 'RSS' }) + const link = blogPage.page.getByLabel('Main').getByRole('link', { name: 'RSS' }) await expect(link).toBeVisible() expect(await link.getAttribute('href')).toBe('/blog/rss.xml') diff --git a/packages/starlight-blog/tests/e2e/rss.test.ts b/packages/starlight-blog/tests/e2e/rss.test.ts new file mode 100644 index 0000000..febda0d --- /dev/null +++ b/packages/starlight-blog/tests/e2e/rss.test.ts @@ -0,0 +1,7 @@ +import { expect, test } from './test' + +test('should add a Starlight social link to the RSS feed', async ({ blogPage }) => { + await blogPage.goto() + + await expect(blogPage.page.getByRole('banner').getByRole('link', { name: 'RSS' })).toBeVisible() +})