# h1r0007/campus-map architecture

> Architecture diagram of the GitHub repository h1r0007/campus-map, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/h1r0007/campus-map
- Repository: https://github.com/h1r0007/campus-map

## Overview

Это монорепозиторий кампусной карты: редактор команды поддерживает данные кампуса, а навигатор загружает их, помогает выбрать место и строит пошаговый маршрут. README описывает общее доменное ядро и карту, а sampled code подтверждает загрузку, маршрутную логику и сохранение редакторских данных. Подробности UI-слоёв и связей ненабранных функций опираются на README и дерево; неопределённые вызовы не показаны.

Main entry points: [`packages/core/src/dataset/loader.ts`](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/dataset/loader.ts) (Нормализация датасета), [`apps/editor/src/stores/editorStore.ts`](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editorStore.ts) (Состояние разметки), [`apps/viewer/src/stores/routeStore.ts`](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/stores/routeStore.ts) (Маршрут), [`apps/editor/src/stores/editor/storageSlice.ts`](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editor/storageSlice.ts) (Сохранение и архив)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_viewer["Навигатор"]
  node_vapp["Приложение viewer<br/>[App.tsx]"]
  node_vload["Загрузка датасета<br/>[useDataLoader.ts]"]
  node_vmap["Состояние карты<br/>[mapStore.ts]"]
  node_search["Поиск мест<br/>[SearchView.tsx]"]
  node_route["Маршрут<br/>[routeStore.ts]"]
  node_steps["Шаги навигации"]
  node_mapview["Карта кампуса<br/>[CampusMap.tsx]"]
  node_viewerui["Панель навигатора<br/>[NavigatorPanel.tsx]"]
  node_offline["Офлайн и обновления<br/>[warmCache.ts]"]
end

subgraph group_editor["Редактор"]
  node_eapp["Приложение editor<br/>[App.tsx]"]
  node_eload["Загрузка данных<br/>[App.tsx]"]
  node_editstate["Состояние разметки<br/>[editorStore.ts]"]
  node_editmap["Редактор карты<br/>[EditorMap.tsx]"]
  node_diagnose["Проверка данных<br/>[validateData.ts]"]
  node_simulate["Симуляция маршрута<br/>[routeSlice.ts]"]
  node_persist["Сохранение и архив<br/>[storageSlice.ts]"]
  node_draft[("Черновик браузера<br/>[draftStorage.ts]")]
end

subgraph group_core["Доменное ядро"]
  node_coreload["Нормализация датасета<br/>[loader.ts]"]
  node_graph["Граф и связность<br/>[Graph.ts]"]
  node_pathfinding["Поиск путей<br/>[astar.ts]"]
  node_aliases["Алиасы и поиск<br/>[AliasManager.ts]"]
  node_projection["Геометрия и проекция<br/>[projection.ts]"]
end

subgraph group_mapkit["Картография"]
  node_pixelmap["План этажа<br/>[PixelMap.tsx]"]
  node_worldmap["Холст кампуса<br/>[WorldMap.tsx]"]
  node_plans["Размещение планов<br/>[PlacedPlan.tsx]"]
end

node_student(("Студент"))
node_editorial(("Разметчик"))
node_data[("Каталог кампуса")]
node_http["HTTP источник<br/>[httpSource.ts]"]

node_student -->|"открывает"| node_vapp
node_vapp -->|"запускает загрузку"| node_vload
node_vload -->|"создаёт источник"| node_http
node_http -->|"читает файлы"| node_data
node_vload -->|"передаёт источник"| node_coreload
node_coreload -->|"нормализует данные"| node_graph
node_coreload -->|"загружает алиасы"| node_aliases
node_graph -->|"инициализирует граф"| node_vmap
node_student -->|"ищет место"| node_search
node_search -->|"использует места"| node_vmap
node_student -->|"задаёт точки"| node_route
node_route -->|"ищет путь"| node_pathfinding
node_route -->|"переключает область"| node_vmap
node_route -->|"передаёт маршрут"| node_steps
node_steps -->|"показывает шаги"| node_viewerui
node_vmap -->|"передаёт состояние"| node_mapview
node_mapview -->|"рисует кампус"| node_worldmap
node_mapview -->|"рисует этаж"| node_pixelmap
node_worldmap -->|"размещает планы"| node_plans
node_student -->|"управляет навигацией"| node_viewerui
node_offline -.->|"кэширует ресурсы"| node_data
node_editorial -->|"открывает"| node_eapp
node_eapp -->|"запускает загрузку"| node_eload
node_eload -->|"создаёт источник"| node_http
node_eload -->|"передаёт источник"| node_coreload
node_coreload -->|"передаёт датасет"| node_editstate
node_editorial -->|"размечает карту"| node_editmap
node_editmap -->|"читает и меняет"| node_editstate
node_editstate -->|"проверяет данные"| node_diagnose
node_editorial -->|"задаёт маршрут"| node_simulate
node_simulate -->|"ищет альтернативы"| node_pathfinding
node_simulate -->|"строит граф"| node_editstate
node_editorial -->|"сохраняет правки"| node_persist
node_persist -->|"пишет файлы"| node_data
node_persist -->|"сохраняет черновик"| node_draft
node_persist -->|"собирает датасет"| node_editstate
node_aliases --> node_pathfinding
node_projection -->|"привязывает планы"| node_plans

click node_data "https://github.com/h1r0007/campus-map/tree/master/data"
click node_http "https://github.com/h1r0007/campus-map/blob/master/packages/core/src/dataset/httpSource.ts"
click node_vapp "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/App.tsx"
click node_vload "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/hooks/useDataLoader.ts"
click node_vmap "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/stores/mapStore.ts"
click node_search "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/components/UI/SearchView.tsx"
click node_route "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/stores/routeStore.ts"
click node_steps "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/utils/routeInstructions.ts"
click node_mapview "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/components/Map/CampusMap.tsx"
click node_viewerui "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/components/UI/NavigatorPanel.tsx"
click node_offline "https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/pwa/warmCache.ts"
click node_eapp "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/App.tsx"
click node_eload "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/App.tsx"
click node_editstate "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editorStore.ts"
click node_editmap "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/components/Map/EditorMap.tsx"
click node_diagnose "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/utils/validateData.ts"
click node_simulate "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editor/routeSlice.ts"
click node_persist "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editor/storageSlice.ts"
click node_draft "https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/utils/draftStorage.ts"
click node_coreload "https://github.com/h1r0007/campus-map/blob/master/packages/core/src/dataset/loader.ts"
click node_graph "https://github.com/h1r0007/campus-map/blob/master/packages/core/src/graph/Graph.ts"
click node_pathfinding "https://github.com/h1r0007/campus-map/blob/master/packages/core/src/pathfinding/astar.ts"
click node_aliases "https://github.com/h1r0007/campus-map/blob/master/packages/core/src/aliases/AliasManager.ts"
click node_projection "https://github.com/h1r0007/campus-map/blob/master/packages/core/src/projection.ts"
click node_pixelmap "https://github.com/h1r0007/campus-map/blob/master/packages/mapkit/src/PixelMap.tsx"
click node_worldmap "https://github.com/h1r0007/campus-map/blob/master/packages/mapkit/src/WorldMap.tsx"
click node_plans "https://github.com/h1r0007/campus-map/blob/master/packages/mapkit/src/PlacedPlan.tsx"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_vapp,node_vload,node_vmap,node_search,node_route,node_steps,node_mapview,node_viewerui,node_offline toneBlue
class node_eapp,node_eload,node_editstate,node_editmap,node_diagnose,node_simulate,node_persist,node_draft,node_data toneAmber
class node_coreload,node_graph,node_pathfinding,node_aliases,node_projection toneMint
class node_pixelmap,node_worldmap,node_plans toneRose
class node_student,node_editorial toneIndigo
class node_http toneTeal
```

## Components

### Навигатор

- [Приложение viewer](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/App.tsx): `apps/viewer/src/App.tsx`
- [Загрузка датасета](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/hooks/useDataLoader.ts): `apps/viewer/src/hooks/useDataLoader.ts`
- [Состояние карты](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/stores/mapStore.ts): `apps/viewer/src/stores/mapStore.ts`
- [Поиск мест](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/components/UI/SearchView.tsx): `apps/viewer/src/components/UI/SearchView.tsx`
- [Маршрут](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/stores/routeStore.ts): `apps/viewer/src/stores/routeStore.ts`
- [Шаги навигации](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/utils/routeInstructions.ts): `apps/viewer/src/utils/routeInstructions.ts`
- [Карта кампуса](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/components/Map/CampusMap.tsx): `apps/viewer/src/components/Map/CampusMap.tsx`
- [Панель навигатора](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/components/UI/NavigatorPanel.tsx): `apps/viewer/src/components/UI/NavigatorPanel.tsx`
- [Офлайн и обновления](https://github.com/h1r0007/campus-map/blob/master/apps/viewer/src/pwa/warmCache.ts): `apps/viewer/src/pwa/warmCache.ts`

### Редактор

- [Приложение editor](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/App.tsx): `apps/editor/src/App.tsx`
- [Загрузка данных](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/App.tsx): `apps/editor/src/App.tsx`
- [Состояние разметки](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editorStore.ts): `apps/editor/src/stores/editorStore.ts`
- [Редактор карты](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/components/Map/EditorMap.tsx): `apps/editor/src/components/Map/EditorMap.tsx`
- [Проверка данных](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/utils/validateData.ts): `apps/editor/src/utils/validateData.ts`
- [Симуляция маршрута](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editor/routeSlice.ts): `apps/editor/src/stores/editor/routeSlice.ts`
- [Сохранение и архив](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/stores/editor/storageSlice.ts): `apps/editor/src/stores/editor/storageSlice.ts`
- [Черновик браузера](https://github.com/h1r0007/campus-map/blob/master/apps/editor/src/utils/draftStorage.ts): `apps/editor/src/utils/draftStorage.ts`

### Доменное ядро

- [Нормализация датасета](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/dataset/loader.ts): `packages/core/src/dataset/loader.ts`
- [Граф и связность](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/graph/Graph.ts): `packages/core/src/graph/Graph.ts`
- [Поиск путей](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/pathfinding/astar.ts): `packages/core/src/pathfinding/astar.ts`
- [Алиасы и поиск](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/aliases/AliasManager.ts): `packages/core/src/aliases/AliasManager.ts`
- [Геометрия и проекция](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/projection.ts): `packages/core/src/projection.ts`

### Картография

- [План этажа](https://github.com/h1r0007/campus-map/blob/master/packages/mapkit/src/PixelMap.tsx): `packages/mapkit/src/PixelMap.tsx`
- [Холст кампуса](https://github.com/h1r0007/campus-map/blob/master/packages/mapkit/src/WorldMap.tsx): `packages/mapkit/src/WorldMap.tsx`
- [Размещение планов](https://github.com/h1r0007/campus-map/blob/master/packages/mapkit/src/PlacedPlan.tsx): `packages/mapkit/src/PlacedPlan.tsx`

### Other components

- **Студент**
- **Разметчик**
- [Каталог кампуса](https://github.com/h1r0007/campus-map/tree/master/data): `data`
- [HTTP источник](https://github.com/h1r0007/campus-map/blob/master/packages/core/src/dataset/httpSource.ts): `packages/core/src/dataset/httpSource.ts`

## Connections

- Студент → Приложение viewer: открывает
- Приложение viewer → Загрузка датасета: запускает загрузку
- Загрузка датасета → HTTP источник: создаёт источник
- HTTP источник → Каталог кампуса: читает файлы
- Загрузка датасета → Нормализация датасета: передаёт источник
- Нормализация датасета → Граф и связность: нормализует данные
- Нормализация датасета → Алиасы и поиск: загружает алиасы
- Граф и связность → Состояние карты: инициализирует граф
- Студент → Поиск мест: ищет место
- Поиск мест → Состояние карты: использует места
- Студент → Маршрут: задаёт точки
- Маршрут → Поиск путей: ищет путь
- Маршрут → Состояние карты: переключает область
- Маршрут → Шаги навигации: передаёт маршрут
- Шаги навигации → Панель навигатора: показывает шаги
- Состояние карты → Карта кампуса: передаёт состояние
- Карта кампуса → Холст кампуса: рисует кампус
- Карта кампуса → План этажа: рисует этаж
- Холст кампуса → Размещение планов: размещает планы
- Студент → Панель навигатора: управляет навигацией
- Офлайн и обновления → Каталог кампуса: кэширует ресурсы
- Разметчик → Приложение editor: открывает
- Приложение editor → Загрузка данных: запускает загрузку
- Загрузка данных → HTTP источник: создаёт источник
- Загрузка данных → Нормализация датасета: передаёт источник
- Нормализация датасета → Состояние разметки: передаёт датасет
- Разметчик → Редактор карты: размечает карту
- Редактор карты → Состояние разметки: читает и меняет
- Состояние разметки → Проверка данных: проверяет данные
- Разметчик → Симуляция маршрута: задаёт маршрут
- Симуляция маршрута → Поиск путей: ищет альтернативы
- Симуляция маршрута → Состояние разметки: строит граф
- Разметчик → Сохранение и архив: сохраняет правки
- Сохранение и архив → Каталог кампуса: пишет файлы
- Сохранение и архив → Черновик браузера: сохраняет черновик
- Сохранение и архив → Состояние разметки: собирает датасет
- Алиасы и поиск → Поиск путей
- Геометрия и проекция → Размещение планов: привязывает планы
