Skip to content

feat(fenom): Upgrade to Fenom 3.1 and ship pdoTools3 1.0.0 - #32

Open
Ibochkarev wants to merge 3 commits into
masterfrom
feat/fenom-3-pdotools3-1.0.0
Open

feat(fenom): Upgrade to Fenom 3.1 and ship pdoTools3 1.0.0#32
Ibochkarev wants to merge 3 commits into
masterfrom
feat/fenom-3-pdotools3-1.0.0

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Sep 3, 2026

Copy link
Copy Markdown
Member

Обновление Fenom до 3.1.0 и старт линейки пакета pdoTools3 с версии 1.0.0-pl.

Репозиторий уже держит дерево для MODX 3 (раньше 2.x и 3.x жили в одной репе, в разных ветках). Транспортный пакет при этом оставался под signature pdotools с версиями 3.0–3.1.0. Если сбросить SemVer на 1.0.0 при том же имени, Package Manager увидит даунгрейд. Поэтому новый signature: pdotools3, отображаемое имя pdoTools3. Пути, сниппеты (pdoResources и остальные), настройки (pdotools_*) и namespace ModxPro\PdoTools\ не меняются. Сайт может поставить пакет поверх тех же файлов и продолжить работу.

Сайты на pdoTools 3.1.0 сами не обновятся. Нужно поставить pdoTools3, затем снять старую запись пакета. Старый листинг на extras пока не трогаем. Пометим superseded, когда будет готов текст миграции.

Зачем Fenom 3.1 сейчас

В modx-pro/pdoTools#397 просили актуальную версию Fenom. 2.12.1 не загрузится как drop-in под 3.1.0:

  • у setCompileDir и ProviderInterface появились typed-сигнатуры
  • _loadModifier должен возвращать ?string, а не Closure
  • старый путь кэша компиляции в MODX сохранял getTemplateCode() и потом выполнял его через runtime evaluation. Typed-конструктор Render в Fenom 3 этот путь ломает (на PHP 8 он и раньше был хрупким)

Минимум PHP поднимаем до 8.2, как у Fenom 3.1. CI: 8.2–8.5. PHPUnit: 10.

Что поменялось в коде

  • Composer: fenom/fenom ^3.1, PHP >=8.2, PHPUnit ^10
  • Fenom::setCompileDir(string $dir): static
  • сниппет-как-модификатор живёт в getModifier(), override _loadModifier убран
  • useFenomCache только переключает нативные опции файлового кэша Fenom (disable_cache / force_compile / auto_reload). Request-level getStore / setStore остаётся. Старый MODX-путь кэша компиляции удалён
  • провайдеры Chunk / Template реализуют typed ProviderInterface Fenom 3
  • strftime() заменён на date() в Fenom fuzzydate и pdoArchive (нужно для PHP 8.4+)
  • строковые имена классов (modResource, modTemplateVar) → ::class
  • connector pdoPage и bootstrap сборки транспорта через vendor/autoload.php
  • lookup classMap для MiniShop3 через modResource::class
  • новые тесты: FenomCacheTest, SnippetModifierTest. Unit suite зелёный (119 тестов)

&loadModels по-прежнему зовёт xPDO addPackage() из components/<name>/model/. Это для старых extras. PSR-4 пакеты вроде MiniShop3 этот параметр не нужен.

Идентичность пакета

Значение
Transport zip pdotools3-1.0.0-pl.transport.zip
Категория pdoTools3
Namespace / пути по-прежнему pdotools
Тег релиза v1.0.0-pl

На ревью: сигнатуры сабкласса Fenom, float/mtime контракты провайдеров, поведение при pdotools_fenom_cache=1, и что release workflow собирает pdotools3-*.transport.zip.

Refs modx-pro/pdoTools#397

Start the pdoTools3 package line (signature pdotools3) with PHP 8.2+, Fenom 3.1.0, typed providers, and native Fenom cache options. Drop the broken MODX compile-cache path and replace strftime with date for PHP 8.4+.

Refs modx-pro/pdoTools#397
@Ibochkarev
Ibochkarev marked this pull request as ready for review September 3, 2026 10:21
@codecov

codecov Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 77.66990% with 23 lines in your changes missing coverage. Please review.
✅ Project coverage is 29.73%. Comparing base (983f189) to head (3edc234).

Files with missing lines Patch % Lines
...ls/src/Parsing/Fenom/Providers/ElementProvider.php 80.70% 11 Missing ⚠️
...re/components/pdotools/src/Parsing/Fenom/Fenom.php 72.00% 7 Missing ⚠️
core/components/pdotools/src/Fetch.php 0.00% 3 Missing ⚠️
core/components/pdotools/src/CoreTools.php 0.00% 1 Missing ⚠️
core/components/pdotools/src/Parsing/Parser.php 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             master      #32      +/-   ##
============================================
+ Coverage     26.66%   29.73%   +3.06%     
  Complexity     1165     1165              
============================================
  Files            18       20       +2     
  Lines          3011     3003       -8     
============================================
+ Hits            803      893      +90     
+ Misses         2208     2110      -98     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Raise patch coverage for Fenom 3 provider signatures and the date()-based fuzzydate modifier flagged by Codecov on #32.
Avoid parent getModifier null Template TypeError, restore compile-dir file cache for useFenomCache, share Chunk/Template via ElementProvider with stable mtime, and map legacy strftime tokens through DateFormat.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant