website
git clone https://git.pyrossh.dev/website
木 Personal website of pyrossh. Built with astrojs, shiki, vite.
032ace7
— pyrossh
2024-05-03T22:30:46+05:30
improve sitemap
Generated files not shown: package-lock.json
- package.json +2 -3
- src/routes/sitemap.xml/+server.js +15 -0
- static/robots.txt +4 -0
- tests/sitemap.test.js +27 -0
- tests/test.js +1 -1
package.json
CHANGED
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
"lint": "prettier --check . && eslint .",
|
|
14
14
|
"format": "prettier --write .",
|
|
15
15
|
"test:integration": "playwright test",
|
|
16
|
-
"test:unit": "vitest"
|
|
16
|
+
"test:unit": "vitest"
|
|
17
|
-
"postbuild": "npx svelte-sitemap --domain https://pyrossh.dev --ignore '**404**'"
|
|
18
17
|
},
|
|
19
18
|
"dependencies": {
|
|
20
19
|
"@sentry/sveltekit": "^7.102.0",
|
|
@@ -37,9 +36,9 @@
|
|
|
37
36
|
"mdsvex": "^0.11.0",
|
|
38
37
|
"prettier": "^3.1.1",
|
|
39
38
|
"prettier-plugin-svelte": "^3.1.2",
|
|
39
|
+
"super-sitemap": "^0.14.14",
|
|
40
40
|
"svelte": "4.2.11",
|
|
41
41
|
"svelte-check": "^3.6.0",
|
|
42
|
-
"svelte-sitemap": "^2.6.0",
|
|
43
42
|
"typescript": "^5.0.0",
|
|
44
43
|
"unocss": "^0.58.5",
|
|
45
44
|
"vite": "^5.0.3",
|
src/routes/sitemap.xml/+server.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as sitemap from 'super-sitemap';
|
|
2
|
+
|
|
3
|
+
export const prerender = true;
|
|
4
|
+
|
|
5
|
+
export async function GET() {
|
|
6
|
+
return await sitemap.response({
|
|
7
|
+
origin: 'https://pyrossh.dev',
|
|
8
|
+
paramValues: {
|
|
9
|
+
'/posts/[slug]': [
|
|
10
|
+
'eyecandy-golang-error-reporting',
|
|
11
|
+
'gopibot-to-the-rescue',
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
};
|
static/robots.txt
CHANGED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
User-agent: *
|
|
2
|
+
Allow: /
|
|
3
|
+
|
|
4
|
+
Sitemap: https://pyrossh.dev/sitemap.xml
|
tests/sitemap.test.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('/sitemap.xml is valid', async ({ page }) => {
|
|
4
|
+
const response = await page.goto('/sitemap.xml');
|
|
5
|
+
expect(response.status()).toBe(200);
|
|
6
|
+
|
|
7
|
+
// Ensure XML is valid. Playwright parses the XML here and will error if it
|
|
8
|
+
// cannot be parsed.
|
|
9
|
+
const urls = await page.$$eval('url', (urls) =>
|
|
10
|
+
urls.map((url) => ({
|
|
11
|
+
loc: url.querySelector('loc').textContent,
|
|
12
|
+
// changefreq: url.querySelector('changefreq').textContent, // if you enabled in your sitemap
|
|
13
|
+
// priority: url.querySelector('priority').textContent,
|
|
14
|
+
}))
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
// Sanity check
|
|
18
|
+
expect(urls.length).toBeGreaterThanOrEqual(5);
|
|
19
|
+
|
|
20
|
+
// Ensure entries are in a valid format.
|
|
21
|
+
for (const url of urls) {
|
|
22
|
+
expect(url.loc).toBeTruthy();
|
|
23
|
+
expect(() => new URL(url.loc)).not.toThrow();
|
|
24
|
+
// expect(url.changefreq).toBe('daily');
|
|
25
|
+
// expect(url.priority).toBe('0.7');
|
|
26
|
+
}
|
|
27
|
+
});
|
tests/test.js
CHANGED
|
@@ -2,5 +2,5 @@ import { expect, test } from '@playwright/test';
|
|
|
2
2
|
|
|
3
3
|
test('index page has expected h1', async ({ page }) => {
|
|
4
4
|
await page.goto('/');
|
|
5
|
-
await expect(page.getByRole('heading', { name: '
|
|
5
|
+
await expect(page.getByRole('heading', { name: 'pyrossh' })).toBeVisible();
|
|
6
6
|
});
|