import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs"; import { resolve, dirname } from "path"; import { fileURLToPath } from "url"; const __dirname = dirname(fileURLToPath(import.meta.url)); const prerenderApiUrl = process.env.PRERENDER_API_URL; async function getProducts() { if (!prerenderApiUrl) { console.warn('PRERENDER_API_URL is not configured; skipping product pre-rendering.'); return []; } try { const response = await fetch(`${prerenderApiUrl.replace(/\/$/, '')}/productList`); const data = await response.json(); if (Array.isArray(data)) { console.log(`✅ Загружено ${data.length} товаров`); return data; } return []; } catch (error) { console.error('Ошибка:', error.message); return []; } } // Получаем товары const products = await getProducts(); const distPath = resolve(__dirname, "../dist"); const indexHtmlPath = resolve(distPath, "index.html"); if (!existsSync(indexHtmlPath)) { console.error("❌ Сначала запустите npm run build"); process.exit(1); } // Читаем исходный HTML let baseHtml = readFileSync(indexHtmlPath, "utf-8"); // ============================================ // ФУНКЦИИ ДЛЯ ГЕНЕРАЦИИ КОНТЕНТА // ============================================ function escapeHtml(text) { if (!text) return ''; return String(text) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } // Генерация страницы товара function generateProductPage(product) { return `
${escapeHtml(product.description || 'Описание отсутствует')}
Артикул: ${product.id}
Широкий выбор канализационных труб, фитингов, колен, отводов, муфт, переходов, заглушек, тройников и ревизий.
${escapeHtml((product.description || '').slice(0, 150))}...
ПодробнееМы занимаемся продажей качественных труб и остальных комплектующих для канализации.