Skip to content

Commit

Permalink
@astrojs/sitemap: Fixes generated URLs when using a base with a SSR…
Browse files Browse the repository at this point in the history
… 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>
  • Loading branch information
andremralves and florian-lefebvre authored Jan 17, 2024
1 parent 96bfc4b commit b325fad
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/curly-seals-count.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@astrojs/sitemap": patch
---

Fixes generated URLs when using a `base` with a SSR adapter
11 changes: 6 additions & 5 deletions packages/integrations/sitemap/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
39 changes: 39 additions & 0 deletions packages/integrations/sitemap/test/base-path.test.js
Original file line number Diff line number Diff line change
@@ -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/');
});
});
});

0 comments on commit b325fad

Please sign in to comment.