From bc402883b32538f044da683c442ec7e2dd1ea7ff Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Tue, 18 Oct 2022 01:42:11 +0200 Subject: [PATCH] feat: Add sitemap for the docs website --- packages/docs/package.json | 1 + packages/docs/pages/.vitepress/config.js | 36 +++++++++++++++++++++++- yarn.lock | 29 ++++++++++++++++++- 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/packages/docs/package.json b/packages/docs/package.json index 5446ff51..5f3a933c 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -10,6 +10,7 @@ "serve": "vitepress serve pages" }, "devDependencies": { + "sitemap": "^7.1.1", "vitepress": "^1.0.0-alpha.21", "vue": "^3.2.37" }, diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 65f30503..48f1d265 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -1,7 +1,13 @@ import { defineConfig } from 'vitepress'; +import { createWriteStream } from 'fs'; +import { resolve } from 'path'; +import { SitemapStream } from 'sitemap'; const BASE = process.env.BASE_URL || '/'; +const links = []; +const PROD_BASE_URL = 'https://automatisch.io/docs'; + export default defineConfig({ base: BASE, lang: 'en-US', @@ -102,7 +108,7 @@ export default defineConfig({ if (ctx.pageData.relativePath === '') return; // Skip 404 page. const isHomepage = ctx.pageData.relativePath === 'index.md'; - let canonicalUrl = 'https://automatisch.io/docs'; + let canonicalUrl = PROD_BASE_URL; if (!isHomepage) { canonicalUrl = @@ -125,4 +131,32 @@ export default defineConfig({ ], ]; }, + + async transformHtml(_, id, { pageData }) { + if (!/[\\/]404\.html$/.test(id)) { + let url = pageData.relativePath.replace(/((^|\/)index)?\.md$/, '$2'); + + const isHomepage = url === ''; + + if (isHomepage) { + url = '/docs'; + } + + links.push({ + url, + lastmod: pageData.lastUpdated, + }); + } + }, + + async buildEnd({ outDir }) { + const sitemap = new SitemapStream({ + hostname: `${PROD_BASE_URL}/`, + }); + + const writeStream = createWriteStream(resolve(outDir, 'sitemap.xml')); + sitemap.pipe(writeStream); + links.forEach((link) => sitemap.write(link)); + sitemap.end(); + }, }); diff --git a/yarn.lock b/yarn.lock index 3a507d95..8f68f483 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4334,6 +4334,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.26.tgz#63d204d136c9916fb4dcd1b50f9740fe86884e47" integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + "@types/nodemailer@^6.4.4": version "6.4.4" resolved "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-6.4.4.tgz#c265f7e7a51df587597b3a49a023acaf0c741f4b" @@ -4458,6 +4463,13 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" integrity sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g== +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -5461,6 +5473,11 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + arg@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" @@ -16235,7 +16252,7 @@ sax@1.2.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= -sax@>=0.6.0, sax@~1.2.4: +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -16567,6 +16584,16 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"