49 lines
3.7 KiB
Markdown
49 lines
3.7 KiB
Markdown
# Модуль: Публичный фасад
|
||
|
||
**Ответственность**: предоставляет `main.typ` и публичным примерам стабильный API, скрывая внутренние DDD-слои и файловую структуру.
|
||
**Расположение**: `.template/lib/index.typ`
|
||
|
||
## Публичный интерфейс
|
||
|
||
| Символ | Тип | Описание |
|
||
|--------|-----|----------|
|
||
| `document()` | show-функция | Собирает документ из явно переданных `company`, `profile`, `options` и `body` |
|
||
| `profiles` | module namespace | Конструкторы `report`, `letter`, `commercial_offer`, `contract` |
|
||
| `components` | module namespace | Поддерживаемые визуальные компоненты для пользовательского content |
|
||
| `references` | module namespace | `vref`, `vrefs`, `eqref` и bibliography helpers |
|
||
| `load-company()` | функция | Загружает публичный профиль и применяет явные resource overrides |
|
||
| `report-executor()` | функция | Разрешает сотрудника, роль, private PNG и offset |
|
||
| `private-company-media()` | функция | Разрешает private подпись и печать организации |
|
||
| `document-profile()` | конструктор dictionary | Extension contract для нового вида документа |
|
||
|
||
## Зависимости
|
||
|
||
| Модуль | Что использует |
|
||
|--------|----------------|
|
||
| `.template/lib/application/render-document.typ` | Единственный application use case |
|
||
| `.template/lib/presentation/profiles/*.typ` | Публичные profile constructors |
|
||
| `.template/lib/presentation/components.typ` | Разрешённый пользовательский набор компонентов |
|
||
| `.template/lib/presentation/references.typ` | Публичные helpers ссылок |
|
||
| `.template/lib/infrastructure/company-assets.typ` | Загрузка профилей компаний |
|
||
| `.template/lib/infrastructure/employees.typ` | Справочник сотрудников и private settings adapter |
|
||
|
||
## Инварианты
|
||
|
||
- `main.typ` и public examples используют один import фасада и не знают внутренних путей.
|
||
- В фасаде нет чтения пользовательских глав, page layout и profile-specific ветвлений.
|
||
- Добавление нового профиля не меняет сигнатуру `document()`.
|
||
- Resource override принимает явные `none`, `path` или content и не сканирует `.private/`.
|
||
- В namespaces экспортируются только документированные символы.
|
||
- В diagnostics используется бренд Scientia.
|
||
|
||
## Намеренно НЕ обрабатывает
|
||
|
||
- Включение пользовательских файлов из `chapters/`.
|
||
- Создание пользовательских paths к `assets/`.
|
||
- Выбор типа документа и режима выпуска.
|
||
- Юридическую или смысловую проверку текста.
|
||
|
||
## Заметки для агента
|
||
|
||
> Фасад является границей между пользовательским `main.typ` и библиотекой. Если public example импортирует domain, infrastructure или конкретный renderer напрямую, фасад недостаточен. Обратная совместимость со старым корневым `template.typ` не требуется; не создавайте alias в корне.
|