ProzillaOS/packages/docs/scripts/generateReferencePages.ts
2024-07-09 18:06:32 +02:00

98 lines
No EOL
2.3 KiB
TypeScript

import { ANSI } from "../../core/src/constants";
import { name } from "../package.json";
import { resolve } from "node:path";
import fs from "node:fs";
const OUTPUT_DIR = "cache";
function getItemType(key: string, value: unknown): string | null {
if (/^[A-Z_]+$/.test(key))
return "Constant";
if (typeof value === "function") {
if (/^use([A-Z][a-z]*)+$/.test(key)) {
return "Hook";
} else if (/^[a-z]+([A-Z][a-z]*)+$/.test(key)) {
return "Function";
} else if (/^([A-Z][a-z]*)+$/.test(key)) {
return "Class";
}
}
return null;
}
function generateContent(key: string, value: unknown, type: string): string {
const content = [
"---",
"outline: deep",
"---"
];
content.push(`\n# ${type}`);
return content.join("\n");
}
function generateReferencePage(key: string, value: unknown) {
const type = getItemType(key, value);
if (type == null) return;
let directory = "/";
switch (type) {
case "Constant":
directory = "/constants";
break;
case "Hook":
directory = "/hooks";
break;
case "Function":
directory = "/functions";
break;
case "Class":
directory = "/classes";
break;
}
try {
const path = resolve(__dirname, OUTPUT_DIR, directory);
if (!fs.existsSync(path)){
fs.mkdirSync(path, { recursive: true });
}
// fs.writeFileSync(path, generateContent(key, value, type), { flag: "w+" });
console.log(`- ${ANSI.fg.cyan}${path}${ANSI.reset}`);
} catch (error) {
console.log(`${ANSI.fg.red}⚠ Failed to generate page: ${key}${ANSI.reset}`);
}
}
async function generateReferencePages() {
try {
console.log(`Context: ${ANSI.decoration.bold}${name}${ANSI.reset}\n`);
console.log(`${ANSI.fg.yellow}Generating reference pages...${ANSI.reset}`);
const items = await import("packages/core/src/main");
for (const key in module) {
if (module.hasOwnProperty(key)) {
const item = module[key];
console.log(`Name: ${key}, Type: ${typeof item}, Source: ${modulePath}`);
}
}
// for (const [key, value] of Object.entries(items)) {
// generateReferencePage(key, value);
// }
console.log(`\n${ANSI.fg.green}✓ Completed generating reference pages${ANSI.reset}`);
} catch (error) {
console.error(error);
console.log(`${ANSI.fg.red}⚠ Reference pages generation failed${ANSI.reset}`);
process.exit(1);
}
}
generateReferencePages();