Что означает: options.routes = cloneDeep(options.routes);
Эта строка означает:
👉 создаётся глубокая копия массива маршрутов, и она записывается обратно в options.routes.
Строка целиком
options.routes = cloneDeep(options.routes);
Что такое cloneDeep
cloneDeep — обычно функция из lodash:
import { cloneDeep } from 'lodash-es';
Она:
-
создаёт полную (глубокую) копию объекта
-
копирует все вложенные объекты и массивы
-
не оставляет ссылок на оригинал
Почему нельзя просто так
❌ Поверхностная копия
const copy = [...options.routes];
Проблема:
-
вложенные объекты (
children,meta) остаются общими по ссылке
copy[0].meta.title = 'New';
// изменится и в original ❌
✅ cloneDeep
const copy = cloneDeep(options.routes);
Теперь:
copy[0].meta.title = 'New';
// original НЕ изменится ✅
Что реально происходит пошагово
1️⃣ Берётся options.routes
2️⃣ Создаётся полный клон всей структуры маршрутов
3️⃣ options.routes теперь указывает на новую копию
4️⃣ Оригинальные маршруты остаются нетронутыми
Зачем это делают (очень важно)
В коде генерации роутов обычно:
-
добавляют
children -
фильтруют по ролям
-
меняют
meta -
добавляют layout
❗ Если менять оригинал:
-
можно сломать повторную генерацию
-
получить дубликаты
-
испортить базовую конфигурацию
Типичный кейс из твоего контекста
options.routes = cloneDeep(options.routes);
// дальше
options.routes.forEach(route => {
route.children?.push(dynamicRoute)
})
👉 изменения безопасны
👉 исходные routes не портятся
Аналогия 🧠
-
Без
cloneDeep— ты редактируешь оригинал -
С
cloneDeep— работаешь с копией документа
Коротко
Эта строка защищает исходные маршруты,
создавая их полную независимую копию перед изменениями.
No comments to display
No comments to display