Skip to content
Alexej Yaroshevich edited this page Aug 11, 2016 · 9 revisions

Общий алгоритм

  • построение графа
    • walkerом составляем список всех файлов
      • передаем настройки уровней со схемами именования/вложенности (bem-config) и набор уровней для прохода (массив строк)
      • получаем неупорядоченный поток объектов, описывающий файл и тенорок, к которому он относится: {level: String, path: String, entity: BemEntityName, tech: String}
      • схемы содержат алгоритм обхода уровня и влияют на то, какие файлы вернутся
    • из общего потока файлов оставляем только файлы описания зависимостей (далее ФОЗ)
    • из каждого ФОЗ получаем нормализованный список зависимостей
      • чтение и нормализация ФОЗ происходит с помощью обработчика для нужного формата
      • итоговый формат: Array<{vertex: {entity, tech}, dependOn: {entity, tech}, ordered}>
    • строим граф по всем полученным связям между сущностями используя bem-graph
  • работаем с графом
    • получаем упорядоченный набор «тенорков» для сборки по декларации и технологии для сборки бандлов
    • по нему получаем упорядоченный набор файлов сортированный в соответствии с уровнями переопределения
    • передаем всё в руки пользователя

Обработчик формата new-deps.js

  • Читаем и эвалим файл в JS-объект в формате deps.js
  • Валидируем формат (можно отключить)
  • Нормализуем синтаксис
  • Делаем из дерева неупорядоченный плоский список
    • Нормализация деклараций (раскрываем маски тенорков)
    • Наполняем контекстом узла
    • Добавление в плоский список
  • Формируем список зависимостей в итоговом формате
  • Наполняем контекстом файла

NB: ФОЗ (файл описания зависимостей) — сущность файловой системы (файл или папка), содержащая информацию о зависимостях. NB: noDeps RIP.

Clone this wiki locally