/* eslint-disable @typescript-eslint/no-require-imports */ /* eslint-disable no-undef */ // Настройка Babel для транспиляции TSX/JSX в Node.js require('@babel/register')({ extensions: ['.ts', '.tsx', '.js', '.jsx'], presets: [ '@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript' ], ignore: [/node_modules/], cache: false }); const fs = require('fs'); const path = require('path'); const React = require('react'); const { renderToString } = require('react-dom/server'); const { JSDOM } = require('jsdom'); const { createCanvas } = require('canvas'); // Настройка полноценного DOM окружения через jsdom const dom = new JSDOM('
', { url: 'http://localhost', pretendToBeVisual: true, resources: 'usable' }); const canvas = createCanvas(200, 200); // Расширяем jsdom canvas поддержкой dom.window.HTMLCanvasElement.prototype.getContext = function() { return createCanvas(200, 200).getContext('2d'); }; global.window = dom.window; global.document = dom.window.document; global.navigator = dom.window.navigator; global.HTMLElement = dom.window.HTMLElement; global.SVGElement = dom.window.SVGElement; console.log('🚀 Запуск SSR с рендерингом React компонентов...'); try { // Импортируем компоненты const { UnderConstruction } = require('../src/pages/under-construction/underConstruction.tsx'); const { Terms } = require('../src/pages/terms/Terms.tsx'); console.log('✅ Компоненты загружены'); // Рендерим компоненты в HTML const homeContent = renderToString(React.createElement(UnderConstruction)); const termsContent = renderToString(React.createElement(Terms)); console.log('✅ Компоненты отрендерены'); // Читаем dist/index.html const distPath = path.resolve(__dirname, '../dist'); const indexPath = path.join(distPath, 'index.html'); let indexHtml = fs.readFileSync(indexPath, 'utf-8'); // 1. Главная страница const searchString = ''; if (indexHtml.includes(searchString)) { indexHtml = indexHtml.replace(searchString, `