Files
webstudio/packages/cli/scripts/generate-docs.ts

51 lines
1.4 KiB
TypeScript

import { readdirSync, readFileSync, writeFileSync } from "node:fs";
import { basename, join } from "node:path";
import { format } from "prettier";
import {
buildDocSections,
buildDocTitles,
stripDocMeta,
} from "./markdown-docs";
const docsDir = new URL("../src/docs", import.meta.url);
const outputFile = new URL("../src/docs.generated.ts", import.meta.url);
const sourceDocs = Object.fromEntries(
readdirSync(docsDir)
.filter((fileName) => fileName.endsWith(".md"))
.sort()
.map((fileName) => [
basename(fileName, ".md"),
readFileSync(join(docsDir.pathname, fileName), "utf8"),
])
);
const docs = Object.fromEntries(
Object.entries(sourceDocs).map(([docName, markdown]) => [
docName,
stripDocMeta(markdown),
])
);
const docTitles = buildDocTitles(sourceDocs);
const docSections = buildDocSections(sourceDocs);
const output = await format(
[
"// This file is generated by scripts/generate-docs.ts.",
"// Edit markdown files in src/docs instead.",
`export const cliDocs = ${JSON.stringify(docs, null, 2)} as const;`,
"",
`export const cliDocTitles = ${JSON.stringify(docTitles, null, 2)} as const;`,
"",
`export const cliDocSections = ${JSON.stringify(docSections, null, 2)} as const;`,
"",
"export type CliDocName = keyof typeof cliDocs;",
"",
].join("\n"),
{
filepath: outputFile.pathname,
}
);
writeFileSync(outputFile, output, "utf8");