Files
netbird-docs/scripts/generate-github-routes.mjs

53 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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')