0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2024-12-16 21:46:22 -05:00

@astrojs/sitemap: Fixes generated URLs when using a base with a SSR adapter (#9704)

* Fix base path formatting for ssr adapters

* Update .changeset/curly-seals-count.md

Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev>

---------

Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev>
This commit is contained in:
André Alves 2024-01-17 10:33:23 -03:00 committed by GitHub
parent 96bfc4be76
commit b325fada56
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 50 additions and 5 deletions

View file

@ -0,0 +1,5 @@
---
"@astrojs/sitemap": patch
---
Fixes generated URLs when using a `base` with a SSR adapter

View file

@ -107,11 +107,12 @@ const createPlugin = (options?: SitemapOptions): AstroIntegration => {
*/
if (r.pathname) {
if (isStatusCodePage(r.pathname ?? r.route)) return urls;
/**
* remove the initial slash from relative pathname
* because `finalSiteUrl` always has trailing slash
*/
const fullPath = finalSiteUrl.pathname + r.generate(r.pathname).substring(1);
// `finalSiteUrl` may end with a trailing slash
// or not because of base paths.
let fullPath = finalSiteUrl.pathname;
if (fullPath.endsWith('/')) fullPath += r.generate(r.pathname).substring(1);
else fullPath += r.generate(r.pathname);
let newUrl = new URL(fullPath, finalSiteUrl).href;

View file

@ -0,0 +1,39 @@
import { loadFixture, readXML } from './test-utils.js';
import { expect } from 'chai';
describe('URLs with base path', () => {
/** @type {import('./test-utils').Fixture} */
let fixture;
describe('using node adapter', () => {
before(async () => {
fixture = await loadFixture({
root: './fixtures/ssr/',
base: '/base',
});
await fixture.build();
});
it('Base path is concatenated correctly', async () => {
const data = await readXML(fixture.readFile('/client/sitemap-0.xml'));
const urls = data.urlset.url;
expect(urls[0].loc[0]).to.equal('http://example.com/base/one/');
});
});
describe('static', () => {
before(async () => {
fixture = await loadFixture({
root: './fixtures/static/',
base: '/base',
});
await fixture.build();
});
it('Base path is concatenated correctly', async () => {
const data = await readXML(fixture.readFile('/sitemap-0.xml'));
const urls = data.urlset.url;
expect(urls[0].loc[0]).to.equal('http://example.com/base/123/');
});
});
});