diff options
| author | Jay V <[email protected]> | 2025-11-07 18:35:08 -0500 |
|---|---|---|
| committer | Jay V <[email protected]> | 2025-11-07 19:51:46 -0500 |
| commit | 1d43b4e6d7df7b832c4d2214ba0b99973ff09cd0 (patch) | |
| tree | ecb317f959c5f5175faad5e990f122b78cdb2f74 /packages/console/app/script | |
| parent | 8cef7940fed5f12cee55a54b7c4c9c0ff1b1a322 (diff) | |
| download | opencode-1d43b4e6d7df7b832c4d2214ba0b99973ff09cd0.tar.gz opencode-1d43b4e6d7df7b832c4d2214ba0b99973ff09cd0.zip | |
ignore: docs: add automated sitemap generation for main app and docs routes
Diffstat (limited to 'packages/console/app/script')
| -rwxr-xr-x | packages/console/app/script/generate-sitemap.ts | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/packages/console/app/script/generate-sitemap.ts b/packages/console/app/script/generate-sitemap.ts new file mode 100755 index 000000000..2b003ae20 --- /dev/null +++ b/packages/console/app/script/generate-sitemap.ts @@ -0,0 +1,101 @@ +#!/usr/bin/env bun +import { readdir } from "fs/promises" +import { join } from "path" +import { config } from "../src/config.ts" + +const BASE_URL = config.baseUrl +const PUBLIC_DIR = join(import.meta.dir, "../public") +const ROUTES_DIR = join(import.meta.dir, "../src/routes") +const DOCS_DIR = join(import.meta.dir, "../../../web/src/content/docs") + +interface SitemapEntry { + url: string + priority: number + changefreq: string +} + +async function getMainRoutes(): Promise<SitemapEntry[]> { + const routes: SitemapEntry[] = [] + + // Add main static routes + const staticRoutes = [ + { path: "/", priority: 1.0, changefreq: "daily" }, + { path: "/enterprise", priority: 0.8, changefreq: "weekly" }, + { path: "/brand", priority: 0.6, changefreq: "monthly" }, + { path: "/zen", priority: 0.8, changefreq: "weekly" }, + ] + + for (const route of staticRoutes) { + routes.push({ + url: `${BASE_URL}${route.path}`, + priority: route.priority, + changefreq: route.changefreq, + }) + } + + return routes +} + +async function getDocsRoutes(): Promise<SitemapEntry[]> { + const routes: SitemapEntry[] = [] + + try { + const files = await readdir(DOCS_DIR) + + for (const file of files) { + if (!file.endsWith(".mdx")) continue + + const slug = file.replace(".mdx", "") + const path = slug === "index" ? "/docs/" : `/docs/${slug}` + + routes.push({ + url: `${BASE_URL}${path}`, + priority: slug === "index" ? 0.9 : 0.7, + changefreq: "weekly", + }) + } + } catch (error) { + console.error("Error reading docs directory:", error) + } + + return routes +} + +function generateSitemapXML(entries: SitemapEntry[]): string { + const urls = entries + .map( + (entry) => ` <url> + <loc>${entry.url}</loc> + <changefreq>${entry.changefreq}</changefreq> + <priority>${entry.priority}</priority> + </url>` + ) + .join("\n") + + return `<?xml version="1.0" encoding="UTF-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> +${urls} +</urlset>` +} + +async function main() { + console.log("Generating sitemap...") + + const mainRoutes = await getMainRoutes() + const docsRoutes = await getDocsRoutes() + + const allRoutes = [...mainRoutes, ...docsRoutes] + + console.log(`Found ${mainRoutes.length} main routes`) + console.log(`Found ${docsRoutes.length} docs routes`) + console.log(`Total: ${allRoutes.length} routes`) + + const xml = generateSitemapXML(allRoutes) + + const outputPath = join(PUBLIC_DIR, "sitemap.xml") + await Bun.write(outputPath, xml) + + console.log(`✓ Sitemap generated at ${outputPath}`) +} + +main() |
