- .env.example: полный шаблон, защита секретов - .gitignore: явное исключение .env.* и секретов - layout.tsx: XSS — заменён dangerouslySetInnerHTML на next/script для SW - ESLint: no-console error (allow warn/error), ignore scripts/ - scripts/remove-console-logs.js: очистка console.log без glob - backend/routes/modules: README с планом рефакторинга крупных файлов - SECURITY.md: гид по секретам, XSS, CORS, auth, линту - .husky/pre-commit: запуск npm run lint + прочие правки приложения и бэкенда Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
940 B
TypeScript
45 lines
940 B
TypeScript
/**
|
||
* Глобальный обработчик ошибок для корневого layout
|
||
*/
|
||
'use client';
|
||
|
||
export default function GlobalError({
|
||
error: _error,
|
||
reset,
|
||
}: {
|
||
error: Error & { digest?: string };
|
||
reset: () => void;
|
||
}) {
|
||
return (
|
||
<html lang="ru">
|
||
<body>
|
||
<div
|
||
|
||
>
|
||
<div
|
||
|
||
>
|
||
<div className="">⚠️</div>
|
||
<h2
|
||
|
||
>
|
||
Критическая ошибка
|
||
</h2>
|
||
<p
|
||
|
||
>
|
||
Произошла критическая ошибка приложения. Пожалуйста, обновите страницу.
|
||
</p>
|
||
<button
|
||
onClick={reset}
|
||
|
||
>
|
||
Обновить страницу
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|
||
);
|
||
}
|