nimiq-vitepress-theme
Version:
Nimiq UI theme for VitePress
63 lines (62 loc) • 2 kB
JavaScript
import { copyFileSync, mkdirSync, readdirSync } from "node:fs";
import { join, relative } from "node:path";
import consola from "consola";
import { defineConfig } from "vitepress";
import inlineActionsPlugin from "./vite/inline-actions-plugin.mjs";
export function defineNimiqVitepressConfig(config) {
const defaultConfig = {
title: "Nimiq Vitepress",
description: "Build awesome docs with the Nimiq Style",
markdown: {
theme: {
light: "vitesse-light",
dark: "vitesse-dark"
},
preConfig(md) {
md.use(inlineActionsPlugin);
}
}
};
const userMarkdown = config.markdown || {};
const userPreConfig = userMarkdown.preConfig;
const userBuildEnd = config.buildEnd;
return defineConfig({
extends: defaultConfig,
...config,
markdown: {
...defaultConfig.markdown,
...userMarkdown,
preConfig(md) {
md.use(inlineActionsPlugin);
if (userPreConfig) {
userPreConfig(md);
}
}
},
buildEnd(siteConfig) {
const srcDir = siteConfig.srcDir;
const outDir = siteConfig.outDir;
function copyMarkdownFiles(dir) {
const entries = readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = join(dir, entry.name);
if (entry.isDirectory()) {
copyMarkdownFiles(fullPath);
} else if (entry.isFile() && entry.name.endsWith(".md")) {
const relativePath = relative(srcDir, fullPath);
const destPath = join(outDir, relativePath);
const destDir = join(destPath, "..");
mkdirSync(destDir, { recursive: true });
copyFileSync(fullPath, destPath);
}
}
}
consola.info("Copying markdown files to build output...");
copyMarkdownFiles(srcDir);
consola.success("Markdown files copied successfully");
if (userBuildEnd) {
userBuildEnd(siteConfig);
}
}
});
}