/** * Script to sync thumbnails from /thumbnails to /public/thumbnails * This allows static file serving for GHL hosting or static deployments */ import { readdir, copyFile, mkdir, stat } from "fs/promises" import { join } from "path" import { existsSync } from "fs" const PROJECT_ROOT = join(process.cwd(), "..") const THUMBNAILS_SOURCE = join(PROJECT_ROOT, "thumbnails") const THUMBNAILS_PUBLIC = join(process.cwd(), "public", "thumbnails") async function syncThumbnails() { try { // Check if source directory exists if (!existsSync(THUMBNAILS_SOURCE)) { console.log("⚠️ Thumbnails source directory not found, skipping...") return } // Create public/thumbnails directory structure if (!existsSync(THUMBNAILS_PUBLIC)) { await mkdir(THUMBNAILS_PUBLIC, { recursive: true }) } /** * Recursively copy thumbnails, preserving directory structure */ async function copyDirectory(sourceDir, destDir, relativePath = "") { const entries = await readdir(sourceDir, { withFileTypes: true }) for (const entry of entries) { const sourcePath = join(sourceDir, entry.name) const destPath = join(destDir, entry.name) const entryRelativePath = relativePath ? join(relativePath, entry.name) : entry.name if (entry.isDirectory()) { // Create destination directory if (!existsSync(destPath)) { await mkdir(destPath, { recursive: true }) } // Recursively copy subdirectories await copyDirectory(sourcePath, destPath, entryRelativePath) } else if (entry.isFile()) { // Copy image files (jpg, jpeg, png, webp) const ext = entry.name.toLowerCase() if ( ext.endsWith(".jpg") || ext.endsWith(".jpeg") || ext.endsWith(".png") || ext.endsWith(".webp") ) { // Check if file needs updating (compare modification times) let shouldCopy = true if (existsSync(destPath)) { const sourceStats = await stat(sourcePath) const destStats = await stat(destPath) shouldCopy = sourceStats.mtime > destStats.mtime } if (shouldCopy) { await copyFile(sourcePath, destPath) console.log(`Copied: ${entryRelativePath}`) } } } } } await copyDirectory(THUMBNAILS_SOURCE, THUMBNAILS_PUBLIC) console.log("✅ Thumbnails synced to public folder successfully!") } catch (error) { console.error("❌ Error syncing thumbnails:", error) process.exit(1) } } syncThumbnails()