-
Notifications
You must be signed in to change notification settings - Fork 0
deps
Alexej Yaroshevich edited this page Aug 25, 2016
·
9 revisions
- построение графа
- walkerом составляем список всех файлов
- передаем настройки уровней со схемами именования/вложенности (bem-config) и набор уровней для прохода (массив строк)
- получаем неупорядоченный поток объектов, описывающий файл и тенорок, к которому он относится:
{level: String, path: String, entity: BemEntityName, tech: String}
- схемы содержат алгоритм обхода уровня и влияют на то, какие файлы вернутся
- из общего потока файлов оставляем только файлы описания зависимостей (далее ФОЗ)
- из каждого ФОЗ получаем нормализованный список зависимостей
- чтение и нормализация ФОЗ происходит с помощью обработчика для нужного формата
- итоговый формат:
Array<{vertex: {entity, tech}, dependOn: {entity, tech}, ordered}>
- строим граф по всем полученным связям между сущностями используя bem-graph
- walkerом составляем список всех файлов
- работаем с графом
- получаем упорядоченный набор «тенорков» для сборки по декларации и технологии для сборки бандлов
- по нему получаем упорядоченный набор файлов сортированный в соответствии с уровнями переопределения
- передаем всё в руки пользователя
- Читаем и эвалим файл в JS-объект в формате deps.js
- Валидируем формат (можно отключить)
- Нормализуем синтаксис (приводим к формату
DepsCollection
)- Нормализуем в структуру дерева
- Заворачиваем содержимое файлов в корневой узел
{shouldDeps: …}
- Нормализуем структуру связей для каждого узла, начиная с корневого: трансформируем единичные значения shouldDeps/mustDeps в массивы, для каждого нестрокового элемента массива повторяем.
- Заворачиваем содержимое файлов в корневой узел
- Нормализуем в структуру дерева
- Делаем из дерева неупорядоченный плоский список
- Нормализуем синтаксис узлов в полную форму (
{block: ?String, elem: ?ElemEntity[], elems: ?ElemEntity[], mod: ?String, val: ?String, mods: ?Object})
— результатом является дерево нормализованных масок. - Раскрываем маски тенорков (
[{block: ?String, elem: ?String, modName: ?String, modVal: ?String}]
) — получаем дерево массивов тенорков. - Для каждого тенорка в каждом узле:
- Получаем список зависимых тенорков
- Наполняем их скоупом текущего тенорка в порядке спуска по дереву
- Добавляем зависимость для текущего тенорка в результирующий плоский список
- ?
- Нормализуем синтаксис узлов в полную форму (
- Формируем список зависимостей в итоговом формате
- Наполняем контекстом файла
NB: ФОЗ (файл описания зависимостей) — сущность файловой системы (файл или папка), содержащая информацию о зависимостях.
NB: Рекурсивную нормализованную структуру ФОЗ можно описать следующим образом:
DepsCollection = Array<DepsItem>
DepsItem = {
tech: ?String,
block: ?String,
elem: ?String,
mod: ?String,
val: ?String,
shouldDeps: ?DepsCollection,
mustDeps: ?DepsCollection
}
NB: noDeps RIP.