Skip to content

Сервис vuetools резолвится в два разных инстанса (риск дубля import map) #11

Description

@biz87

@

Контекст

После мёржа #6 класс VueCore стал доступен двумя путями:

  1. По ключу контейнера vuetools — замыкание в core/components/vuetools/bootstrap.php, возвращает VueTools\VueCore.
  2. По конвенции MODX 3 VueTools\Service из model/vuetools/Service.php (добавлено в fix(vuetools): add VueTools\Service for MODX service container #6), возвращает VueTools\Service.

Это разные объекты со своим состоянием (importMapRegistered, stylesIncluded). Защита от повторного вызова в registerImportMap() / includeStyles() работает на уровне экземпляра.

Проблема

Если в рамках одного запроса страницы будут задействованы оба пути разрешения сервиса, флаги идемпотентности не пересекутся и можно получить:

  • дублирующийся <script type="importmap"> (браузер учитывает только первую import map — вторая будет проигнорирована/выдаст ошибку);
  • повторное подключение CSS.

Сейчас это латентно: единственный потребитель — плагин vuecoremanager.php, использующий $modx->services->get(vuetools). Но как только появится код, дёргающий getService(vueTools) / VueTools\Service, проблема проявится.

Предложение

Сделать канонический инстанс один. Варианты:

  • замыкание в bootstrap.php возвращает \VueTools\Service вместо \VueTools\VueCore; либо
  • регистрировать ключ контейнера vuetools так, чтобы он и конвенциональное разрешение указывали на один и тот же объект.

Дополнительно (мелочь)

  • Неконсистентность namespace↔директория: автозагрузчик в bootstrap.php мапит VueTools\*src/, но Service лежит в model/vuetools/. Работает только потому, что xPDO грузит по явному пути. Стоит оставить комментарий в коде.
  • Разобраться, кто именно вызывает getService(vueTools) (camelCase) при том, что весь репозиторий использует vuetools (нижний регистр).

Ссылка: #6
@

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions