/* eslint-disable @typescript-eslint/no-require-imports */ /* eslint-disable no-undef */ /* eslint-disable @typescript-eslint/no-unused-vars */ const fs = require('fs'); const path = require('path'); const { JSDOM } = require('jsdom'); // Настройка окружения для SSR const setupDOM = () => { const dom = new JSDOM('', { url: 'http://localhost', pretendToBeVisual: true, resources: 'usable' }); global.window = dom.window; global.document = dom.window.document; global.navigator = dom.window.navigator; global.HTMLElement = dom.window.HTMLElement; global.HTMLDivElement = dom.window.HTMLDivElement; global.requestAnimationFrame = (callback) => setTimeout(callback, 0); global.cancelAnimationFrame = clearTimeout; }; const cleanupRender = () => { delete global.window; delete global.document; delete global.navigator; delete global.HTMLElement; delete global.HTMLDivElement; delete global.requestAnimationFrame; delete global.cancelAnimationFrame; }; const prerender = async () => { try { console.log('🚀 Начинаем SSR пре-рендеринг...'); setupDOM(); // Читаем HTML шаблон const indexPath = path.resolve(__dirname, '../dist/index.html'); let html = fs.readFileSync(indexPath, 'utf-8'); // Рендерим статический контент страницы "в разработке" const prerenderContent = `
⚙️

Сайт в разработке

Страница загружается...

`.trim(); // Вставляем пре-рендеренный контент в div#app const searchString = '
'; if (html.includes(searchString)) { html = html.replace(searchString, `
${prerenderContent}
`); // Сохраняем результат fs.writeFileSync(indexPath, html, 'utf-8'); console.log('✅ SSR пре-рендеринг завершен успешно!'); console.log('📄 HTML обновлен с серверным контентом'); } else { console.log('⚠️ Не найден
'); console.log('Возможно, HTML уже содержит пре-рендеренный контент'); } cleanupRender(); } catch (error) { console.error('❌ Ошибка при SSR пре-рендеринге:', error); cleanupRender(); process.exit(1); } }; prerender();