import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const projectRoot = path.resolve(__dirname, '..'); const docsDistPath = path.join(projectRoot, 'docs', '.vitepress', 'dist'); const mainDistPath = path.join(projectRoot, 'dist'); const targetDocsPath = path.join(mainDistPath, 'docs'); function copyDir(src, dest) { if (!fs.existsSync(dest)) { fs.mkdirSync(dest, { recursive: true }); } const entries = fs.readdirSync(src, { withFileTypes: true }); for (const entry of entries) { const srcPath = path.join(src, entry.name); const destPath = path.join(dest, entry.name); if (entry.isDirectory()) { copyDir(srcPath, destPath); } else { fs.copyFileSync(srcPath, destPath); } } } console.log('Including docs in dist...'); if (!fs.existsSync(docsDistPath)) { console.error( 'Error: Docs build not found. Please run "npm run docs:build" first.' ); process.exit(1); } if (!fs.existsSync(mainDistPath)) { console.error( 'Error: Main dist folder not found. Please run "npm run build" first.' ); process.exit(1); } try { console.log(`Copying from: ${docsDistPath}`); console.log(`Copying to: ${targetDocsPath}`); copyDir(docsDistPath, targetDocsPath); console.log('Docs successfully included in dist/docs!'); const files = fs.readdirSync(targetDocsPath); console.log(`Copied ${files.length} items to dist/docs`); addDocsToSitemap(); } catch (error) { console.error('Error copying docs:', error.message); process.exit(1); } function listDocsHtml(dir, prefix) { const urls = []; for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { if (entry.isDirectory()) { if (entry.name === 'assets' || entry.name.startsWith('.')) continue; urls.push( ...listDocsHtml(path.join(dir, entry.name), `${prefix}/${entry.name}`) ); } else if (entry.name.endsWith('.html') && entry.name !== '404.html') { const slug = entry.name.replace(/\.html$/, ''); urls.push(slug === 'index' ? `${prefix}/` : `${prefix}/${slug}`); } } return urls; } function addDocsToSitemap() { const siteUrl = (process.env.SITE_URL || 'https://www.bentopdf.com').replace( /\/+$/, '' ); const sitemapPath = path.join(mainDistPath, 'sitemap.xml'); if (!fs.existsSync(sitemapPath)) { console.warn( 'sitemap.xml not found in dist; skipping docs sitemap entries' ); return; } let xml = fs.readFileSync(sitemapPath, 'utf-8'); if (xml.includes(`${siteUrl}/docs/`)) return; const urls = listDocsHtml(targetDocsPath, '/docs'); const entries = urls .map( (url) => ` \n ${siteUrl}${url}\n 0.6\n \n` ) .join(''); xml = xml.replace('', `${entries}`); fs.writeFileSync(sitemapPath, xml); console.log(`Added ${urls.length} docs URLs to sitemap.xml`); }