mirror of
https://github.com/netbirdio/docs.git
synced 2026-08-24 16:51:26 +02:00
53 lines
2.2 KiB
JavaScript
53 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* Generates src/lib/edit-on-github-routes.js by scanning src/pages for .mdx files.
|
||
* Used by Layout.jsx so "Edit on GitHub" links point to .../index.mdx for index
|
||
* routes, and so GitHub links render only on routes backed by a real MDX file
|
||
* (e.g. not on the prerendered 404/500 pages, where pathname is /_error).
|
||
* Run automatically with dev and build.
|
||
*/
|
||
|
||
import fs from 'fs'
|
||
import path from 'path'
|
||
import { fileURLToPath } from 'url'
|
||
|
||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||
const ROOT = path.join(__dirname, '..')
|
||
const PAGES_DIR = path.join(ROOT, 'src/pages')
|
||
const OUT_PATH = path.join(ROOT, 'src/lib/edit-on-github-routes.js')
|
||
|
||
function findMdxRoutes(dir, basePath = '') {
|
||
const entries = fs.readdirSync(dir, { withFileTypes: true })
|
||
const indexRoutes = []
|
||
const allRoutes = []
|
||
for (const e of entries) {
|
||
const rel = basePath ? `${basePath}/${e.name}` : e.name
|
||
if (e.isDirectory()) {
|
||
const nested = findMdxRoutes(path.join(dir, e.name), rel)
|
||
indexRoutes.push(...nested.indexRoutes)
|
||
allRoutes.push(...nested.allRoutes)
|
||
} else if (e.name === 'index.mdx') {
|
||
indexRoutes.push('/' + basePath)
|
||
allRoutes.push('/' + basePath)
|
||
} else if (e.name.endsWith('.mdx')) {
|
||
allRoutes.push('/' + rel.replace(/\.mdx$/, ''))
|
||
}
|
||
}
|
||
return { indexRoutes, allRoutes }
|
||
}
|
||
|
||
const { indexRoutes, allRoutes } = findMdxRoutes(PAGES_DIR)
|
||
const routes = indexRoutes.filter((r) => r !== '/').sort() // ignore root index if any
|
||
const mdxRoutes = allRoutes.filter((r) => r !== '/').sort()
|
||
|
||
const content = `// Auto-generated by scripts/generate-github-routes.mjs – do not edit
|
||
/** Pathnames served by src/pages/.../index.mdx (Edit on GitHub must link to /index.mdx). */
|
||
export const EDIT_ON_GITHUB_INDEX_ROUTES = new Set(${JSON.stringify(routes)});
|
||
/** Every pathname backed by an .mdx file under src/pages. GitHub links are hidden elsewhere. */
|
||
export const MDX_PAGE_ROUTES = new Set(${JSON.stringify(mdxRoutes)});
|
||
`
|
||
|
||
fs.mkdirSync(path.dirname(OUT_PATH), { recursive: true })
|
||
fs.writeFileSync(OUT_PATH, content, 'utf8')
|
||
console.log('Generated', OUT_PATH, 'with', routes.length, 'index routes,', mdxRoutes.length, 'mdx routes')
|