Skip to content

Commit

Permalink
Merge pull request #270 from RabotaRu/v3.0.2
Browse files Browse the repository at this point in the history
v3.0.2
  • Loading branch information
rpiontik committed Apr 18, 2023
2 parents 3547948 + 548e297 commit b4cb905
Show file tree
Hide file tree
Showing 76 changed files with 1,966 additions and 590 deletions.
Binary file not shown.
7 changes: 5 additions & 2 deletions example.env
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@
# Данный параметр удобен для разработки в режиме плагина, т.к. подключает моки $PAPI.
# VUE_APP_DOCHUB_MODE=plugin

# (PBF) Отключает "hot reload" в DEV режиме
# VUE_APP_DOCHUB_HOTRELOAD=off

# (BF) Если "backend" сборка осуществляется для работы с backend
# Данный параметр удобен для разработки в режиме backend.
# VUE_APP_DOCHUB_MODE=backend
Expand All @@ -80,8 +83,8 @@
# (F / FB) Если "y" подключает в описание документацию DocHub
# VUE_APP_DOCHUB_APPEND_DOCHUB_DOCS= y / n

# (F / FB / P) Если "y" подключает контроль метамодели DocHub
# VUE_APP_DOCHUB_APPEND_DOCHUB_METAMODEL= y / n
# (F / FB) Содержит ссылку на базовую метамодель. По умолчанию - /metamodel/root.yaml
# VUE_APP_DOCHUB_METAMODEL = /metamodel/root.yaml

# (F / FB / P) Определяет движок рендеринга (graphviz | smetana | elk). По умолчанию ELK
# VUE_APP_DOCHUB_RENDER_CORE=ELK
Expand Down
1 change: 1 addition & 0 deletions public/documentation/arch/contexts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,6 @@ contexts: # Контексты представления архитектур
title: Диаграмма взаимодействия DocHub
icon: settings_ethernet
location: DocHub/Диаграмма взаимодействия
presentation: plantuml
uml: ../docs/sequence.puml

3 changes: 2 additions & 1 deletion public/documentation/docs/manual/contexts.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ contexts: # Контексты представления архитектур
dochub.sequence:
title: Диаграмма взаимодействия DocHub
location: DocHub/Диаграмма взаимодействия
uml: ../docs/sequence.puml # Ссылка на файл с кодом PlantUML
presentation: plantuml # Явно определяет используемую презентацию контекста
uml: ../docs/sequence.puml # Ссылка на файл с кодом PlantUML
...
```
Стандартным методом представления контекстов является автоматическая генерация PlantUML кода на основании манифеста
Expand Down
1 change: 1 addition & 0 deletions public/documentation/docs/manual/introduction.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Введение

Описание архитектуры осуществляется через манифесты. Поддерживаются два формата файлов: JSON и YAML.
Предпочтительным является формат YAML. Этот формат поддерживает комментарии, что существенно упрощает описание
архитектуры.
Expand Down
2 changes: 0 additions & 2 deletions public/documentation/root.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# Манифест описывающий сам DocHub
imports:
# Подключение базовой метамодели DocHub
- ../metamodel/root.yaml
# Подключение манифестов
- docs/root.yaml
- arch/root.yaml
Expand Down
9 changes: 9 additions & 0 deletions public/metamodel/dochub.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
imports:
# - http://localhost:8080/metamodel/root.yaml
- https://dochub.info/documentation/root.yaml
# - root.yaml

components:
test:
title: test
entity: component
6 changes: 6 additions & 0 deletions public/metamodel/dochub/entities/components/root.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
entities:
components:
title: Архитектурный компонент
description: >
Компоненты являются базовыми сущностями DocHub.
На их основе автоматически генерируются диаграммы связей.
192 changes: 192 additions & 0 deletions public/metamodel/dochub/entities/contexts/base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# Базовое описание сущности "Contexts"
entities:
contexts:
title: Контексты
description: >
Представлять указанные архитектурные компоненты в виде диаграмм.
schema:
type: object
patternProperties:
"^[a-zA-Z][a-zA-Z0-9_-]*(\\.[a-zA-Z][a-zA-Z0-9_-]*)*$":
type: object
properties:
title:
title: Название контекста
type: string
location:
title: Место расположения в меню
type: string
icon:
title: Иконка в меню
type: string
components:
title: Комппоненты контекста
type: array
items:
type: string
title: Идентификатор компонента или маска
pattern: "^[a-zA-Z][a-zA-Z0-9\\_]*(\\.([a-zA-Z][a-zA-Z0-9\\_]*|\\*))*$"
extra-links:
title: Отображать компоненты ближайших связей
type: boolean
presentation:
title: Принудительно определяет презентацию
type: string
enum:
- plantuml
- smartants
uml:
title: Кастомизация контекста
oneOf:
- type: string
title: Путь к файлу PlantUML
- type: object
title: Дополнительные параметры
properties:
$before:
title: Код встраиваемый до сгенерированного
type: string
$after:
title: Код встраиваемый после сгенерированного
type: string
api:
type: object
title: Переопределяемые API
properties:
fetchComponents:
type: string
title: Возвращает список компонентов в кормате ключ-значение
fetchLinks:
type: string
title: Возвращает список связей компонентов
source:
title: Источник данный (запрос или dataset)
type: string
anyOf:
- type: string
title: Идентификатор dataset
pattern: "^[a-zA-Z][a-zA-Z0-9\_]*(\\.[a-zA-Z][a-zA-Z0-9\\_]*)*$"
- type: string
title: JSONata запрос
pattern: "\\s*\\((.|\\s)*\\)\\s*"
required:
- title
- components
additionalProperties: false
# Определяет пути к объектам сущности
routes:
context: "/:id" # Путь к контексту
menu: >
(
$presentation := entities.contexts.config.defaultPresentation;
$append([
{
"title": "Контексты",
"location": 'Архитектура/Контексты',
"icon": 'location_searching'
}
],
contexts.$spread().(
/* Если указана явно презентация, используем ее */
$presentation := $.*.presentation ? *.presentation : $presentation;
*.location ? {
"location": "Архитектура/Контексты/" & *.location,
"link": "entities/contexts/" & $presentation & "?id=" & $keys()[0]
}
)
);
)
# Предопределенные конфигурационные параметры для генерации контекстов
config:
# Идентификатор презентации по умолчанию
defaultPresentation: plantuml # plantuml / smartants
# Общие API функции для генерирования контекста
api:
# Возввращает компоненты входящие в контекст
# Входящие параметры:
# manifest - данные архитектуры
# contextId - идентификатор контекста
# extra-links - признак необходимости отразить окружение
# componentId - идентификатор компонента для контекста SELF
fetchComponents: >
(
/* Обрабатываем параметры */
$params := $;
$manifest := $params.manifest;
$context := $lookup($params.manifest.contexts, contextId);
/* Определяем необходимость показывать ближайшие связи */
$isExtraLinks := $params.componentId ? true : $params."extra-links";
/* Определяем, какие компоненты покажем в контексте */
$showComponents := $params.componentId
/* Если контекст под определенный компонент, ограничиваемся им. */
? [$params.componentId]
/* Если нет берем все компоненты указанные в контексте */
: $context.components;
/* Если в контексте переопределена функция получения компонентов, используем ее*/
$context.api.fetchComponents ? (
$eval($context.api.fetchComponents, $params)
) : (
/* Получаем все компоненты входящие в контекст */
$components := $merge($showComponents.(
$mask := $;
$manifest.components.$spread().(
$componentId := $keys()[0];
$wcard($componentId, $mask) ? $
)
));

/* Добавляем окружение, если это нужно */
$merge([$components, $isExtraLinks ? (
$components.*.links.(
{
id: $lookup($manifest.components, id)
}
);
) : {}]);
)
)
# На основании списка компонентов генерирует массиа областей которые они затрагивают
# Входящие параметры:
# components - список компонентов в формате fetchComponents
fetchAreas: >
(
$distinct(components.$spread().(
$componentId := $keys()[0];
$domains := $componentId.$split(".");
$limit := $count($domains) - 1;
$areaId := $map($domains, function($v, $i) {(
$join($map($domains, function($sv, $si) {
$si <= $i ? $sv
}), ".")
)});
))^($);
)
# Генерирует список отображаемых связей
# Входящие параметры:
# components - список компонентов в формате fetchComponents
fetchLinks: >
(
/* Обрабатываем параметры */
$components := components;
$distinct(
$components.$spread().(
$from := $keys()[0];
$direction := $.*.direction ? $.*.direction : "--";
$.*.links[$lookup($components, id)].(
$title := title ? title : contract;
$title := contract ? ("[[/docs/" & contract & " " & $title & "]]") : $title;
{
"from": $from,
"to": (id ? id : "undefined"),
"title": $title,
"contract": contract,
"direction": direction ? direction : "--"
}
)
)
);
)

0 comments on commit b4cb905

Please sign in to comment.