mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-22 09:14:57 +01:00
ignore: docs: add automated sitemap generation for main app and docs routes
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
"typecheck": "tsgo --noEmit",
|
"typecheck": "tsgo --noEmit",
|
||||||
"dev": "vinxi dev --host 0.0.0.0",
|
"dev": "vinxi dev --host 0.0.0.0",
|
||||||
"dev:remote": "VITE_AUTH_URL=https://auth.dev.opencode.ai bun sst shell --stage=dev bun dev",
|
"dev:remote": "VITE_AUTH_URL=https://auth.dev.opencode.ai bun sst shell --stage=dev bun dev",
|
||||||
"build": "vinxi build && ../../opencode/script/schema.ts ./.output/public/config.json",
|
"build": "./script/generate-sitemap.ts && vinxi build && ../../opencode/script/schema.ts ./.output/public/config.json",
|
||||||
"start": "vinxi start",
|
"start": "vinxi start",
|
||||||
"version": "1.0.44"
|
"version": "1.0.44"
|
||||||
},
|
},
|
||||||
|
|||||||
101
packages/console/app/script/generate-sitemap.ts
Executable file
101
packages/console/app/script/generate-sitemap.ts
Executable file
@@ -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()
|
||||||
Reference in New Issue
Block a user