11import type { NimiqVitepressThemeConfig } from 'nimiq-vitepress-theme/types.js'
22import type { UserConfig } from 'vitepress'
3+ import { copyFileSync , mkdirSync , readdirSync } from 'node:fs'
4+ import { join , relative } from 'node:path'
5+ import consola from 'consola'
36import { defineConfig } from 'vitepress'
47import inlineActionsPlugin from './vite/inline-actions-plugin'
58
@@ -21,6 +24,7 @@ export function defineNimiqVitepressConfig<T = NimiqVitepressThemeConfig>(config
2124 // Merge user's preConfig with default if provided
2225 const userMarkdown = config . markdown || { }
2326 const userPreConfig = userMarkdown . preConfig
27+ const userBuildEnd = config . buildEnd
2428
2529 return defineConfig < T > ( {
2630 extends : defaultConfig ,
@@ -37,5 +41,38 @@ export function defineNimiqVitepressConfig<T = NimiqVitepressThemeConfig>(config
3741 }
3842 } ,
3943 } ,
44+ buildEnd ( siteConfig ) {
45+ const srcDir = siteConfig . srcDir
46+ const outDir = siteConfig . outDir
47+
48+ function copyMarkdownFiles ( dir : string ) {
49+ const entries = readdirSync ( dir , { withFileTypes : true } )
50+
51+ for ( const entry of entries ) {
52+ const fullPath = join ( dir , entry . name )
53+
54+ if ( entry . isDirectory ( ) ) {
55+ copyMarkdownFiles ( fullPath )
56+ }
57+ else if ( entry . isFile ( ) && entry . name . endsWith ( '.md' ) ) {
58+ const relativePath = relative ( srcDir , fullPath )
59+ const destPath = join ( outDir , relativePath )
60+ const destDir = join ( destPath , '..' )
61+
62+ mkdirSync ( destDir , { recursive : true } )
63+ copyFileSync ( fullPath , destPath )
64+ }
65+ }
66+ }
67+
68+ consola . info ( 'Copying markdown files to build output...' )
69+ copyMarkdownFiles ( srcDir )
70+ consola . success ( 'Markdown files copied successfully' )
71+
72+ // Call user's buildEnd if provided
73+ if ( userBuildEnd ) {
74+ userBuildEnd ( siteConfig )
75+ }
76+ } ,
4077 } )
4178}
0 commit comments