UNPKG

nimiq-vitepress-theme

Version:

Nimiq UI theme for VitePress

63 lines (62 loc) 2 kB
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); } } }); }