From 3a84a78c435b1851f909df36a44c66ee7c424ce8 Mon Sep 17 00:00:00 2001 From: GauthierWebDev Date: Fri, 18 Apr 2025 17:43:25 +0200 Subject: [PATCH] feat: Add new script for generating sitemap --- app/package.json | 1 + app/services/Sitemap.ts | 40 +++++++++++++++++++++++++++++++++++++++- app/sitemap.ts | 3 +++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 app/sitemap.ts diff --git a/app/package.json b/app/package.json index a6e5eba..58e2aca 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,7 @@ { "scripts": { "dev": "tsx ./fastify-entry.ts", + "dev:sitemap": "tsx --watch ./sitemap.ts", "build": "vike build", "preview": "cross-env NODE_ENV=production tsx ./fastify-entry.ts", "lint": "eslint .", diff --git a/app/services/Sitemap.ts b/app/services/Sitemap.ts index ad2e69e..908424e 100644 --- a/app/services/Sitemap.ts +++ b/app/services/Sitemap.ts @@ -19,6 +19,8 @@ type SitemapElement = { }; class Sitemap { + private readonly pagesPath = path.join(__dirname, "pages"); + private readonly dataPath = path.join(__dirname, "data"); private readonly sitemapPath = path.join(__dirname, "public", "sitemap.xml"); private readonly lastModified = new Date().toISOString(); private readonly baseUrl = getBaseUrl(); @@ -51,8 +53,11 @@ class Sitemap { this.sitemap += ``; } + private addSitemapElement(url: SitemapElement): void {} + private buildSitemap(): void { this.prependSitemap(); + this.urls.forEach(this.addSitemapElement.bind(this)); this.appendSitemap(); } @@ -60,7 +65,40 @@ class Sitemap { fs.writeFileSync(this.sitemapPath, this.sitemap, "utf8"); } - private loadUrls(): void {} + private loadPriority(href: string): string { + const isRootUrl = ["/", ""].includes(href); + const isMainUrl = ["/docs", "/certifications", "/politique-de-confidentialite", "/mentions-legales"].includes(href); + + if (isRootUrl) return "1.0"; + if (isMainUrl) return "0.9"; + return "0.8"; + } + + private loadLastModified(href: string): string {} + + private loadFile(href: string) {} + + private loadUrls(): void { + this.urls = navigation.flatMap((item) => { + return item.links + .map((link) => { + const file = this.loadFile(link.href); + if (!file) { + console.warn(`File not found for URL: ${link.href}`); + return null; + } + + return { + location: `${this.baseUrl}${link.href}`, + lastmod: this.loadLastModified(link.href), + priority: this.loadPriority(link.href), + }; + }) + .filter((url) => url !== null); + }); + + console.log("Loaded URLs:", this.urls); + } public generateSitemap(): void { console.log("Generating sitemap..."); diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 0000000..e31308f --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,3 @@ +import { sitemap } from "./services/Sitemap"; + +sitemap.generateSitemap();