65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
import * as Fs from "node:fs"
|
|
import * as Path from "node:path"
|
|
|
|
function packages() {
|
|
return Fs.readdirSync("packages")
|
|
.filter((_) => Fs.existsSync(Path.join("packages", _, "docs/modules")))
|
|
}
|
|
|
|
function pkgName(pkg) {
|
|
const packageJson = Fs.readFileSync(
|
|
Path.join("packages", pkg, "package.json")
|
|
)
|
|
return JSON.parse(packageJson).name
|
|
}
|
|
|
|
function copyFiles(pkg) {
|
|
const name = pkgName(pkg)
|
|
const docs = Path.join("packages", pkg, "docs/modules")
|
|
const dest = Path.join("docs", pkg)
|
|
const files = Fs.readdirSync(docs, { withFileTypes: true })
|
|
|
|
function handleFiles(root, files) {
|
|
for (const file of files) {
|
|
const path = Path.join(docs, root, file.name)
|
|
const destPath = Path.join(dest, root, file.name)
|
|
|
|
if (file.isDirectory()) {
|
|
Fs.mkdirSync(destPath, { recursive: true })
|
|
handleFiles(Path.join(root, file.name), Fs.readdirSync(path, { withFileTypes: true }))
|
|
continue
|
|
}
|
|
|
|
const content = Fs.readFileSync(path, "utf8").replace(
|
|
/^parent: Modules$/m,
|
|
`parent: "${name}"`
|
|
)
|
|
Fs.writeFileSync(destPath, content)
|
|
}
|
|
}
|
|
|
|
Fs.rmSync(dest, { recursive: true, force: true })
|
|
Fs.mkdirSync(dest, { recursive: true })
|
|
handleFiles("", files)
|
|
}
|
|
|
|
function generateIndex(pkg, order) {
|
|
const name = pkgName(pkg)
|
|
const content = `---
|
|
title: "${name}"
|
|
has_children: true
|
|
permalink: /docs/${pkg}
|
|
nav_order: ${order}
|
|
---
|
|
`
|
|
|
|
Fs.writeFileSync(Path.join("docs", pkg, "index.md"), content)
|
|
}
|
|
|
|
packages().forEach((pkg, i) => {
|
|
Fs.rmSync(Path.join("docs", pkg), { recursive: true, force: true })
|
|
Fs.mkdirSync(Path.join("docs", pkg), { recursive: true })
|
|
copyFiles(pkg)
|
|
generateIndex(pkg, i + 2)
|
|
})
|