feat: manifest checks, Divi compatibility from manifests, reference fingerprints
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,21 +4,14 @@ declare(strict_types=1);
|
||||
|
||||
namespace LIT\MCP\Integrations\Divi;
|
||||
|
||||
use LIT\MCP\Integrations\Divi\BlockTree\GlobalInstance;
|
||||
use LIT\MCP\Integrations\Divi\Library\DiviLibraryStore;
|
||||
use LIT\MCP\Integrations\Divi\Pages\DynamicContentMap;
|
||||
use LIT\MCP\Integrations\Divi\Release\Call;
|
||||
use LIT\MCP\Integrations\Divi\Schema\DiviModules;
|
||||
use LIT\MCP\Integrations\Divi\ThemeBuilder\DiviThemeBuilder;
|
||||
use Throwable;
|
||||
use LIT\MCP\Integrations\Divi\Release\ManifestCheck;
|
||||
|
||||
defined('ABSPATH') || exit;
|
||||
|
||||
/**
|
||||
* Live check of the Divi internals LIT MCP relies on (decisions note §5, E15): classes,
|
||||
* functions, the library post type and taxonomies, the instance block type. lit-site-status shows
|
||||
* the failed checks, so a Divi update that moves one of them is visible before a tool reports
|
||||
* "unsupported".
|
||||
* Live check of the Divi internals LIT MCP relies on (spec §4.3): every check of every adapter manifest – calls
|
||||
* with their argument count, constants, registrations and the fingerprints of the mirrors. lit-site-status shows
|
||||
* the failed checks, so a Divi update that moves one of them is visible before a tool reports "unsupported".
|
||||
*/
|
||||
final class DiviCompatibility
|
||||
{
|
||||
@@ -30,49 +23,14 @@ final class DiviCompatibility
|
||||
/** @return list<string> Labels of the checks that failed or threw. */
|
||||
public function problems(): array
|
||||
{
|
||||
$problems = [];
|
||||
foreach ($this->checks ?? self::defaults() as $label => $check) {
|
||||
try {
|
||||
$ok = (bool) $check();
|
||||
} catch (Throwable) {
|
||||
$ok = false;
|
||||
}
|
||||
if (! $ok) {
|
||||
$problems[] = (string) $label;
|
||||
}
|
||||
}
|
||||
|
||||
return $problems;
|
||||
return ManifestCheck::failed($this->checks ?? self::defaults());
|
||||
}
|
||||
|
||||
/** @return array<string, callable(): bool> */
|
||||
public static function defaults(): array
|
||||
public static function defaults(?ManifestCheck $check = null): array
|
||||
{
|
||||
return [
|
||||
'ModuleRegistration (Modul-Katalog)' => static fn (): bool => DiviModules::isAvailable(),
|
||||
'DynamicContentOptions (Dynamic Content)' =>
|
||||
static fn (): bool => class_exists(DynamicContentMap::REGISTRY),
|
||||
'et_pb_is_allowed (Divi-Rollen)' => static fn (): bool => function_exists('et_pb_is_allowed'),
|
||||
'Post-Typ et_pb_layout (Bibliothek)' =>
|
||||
static fn (): bool => post_type_exists(DiviLibraryStore::POST_TYPE),
|
||||
'Taxonomien scope, layout_type, module_width (Bibliothek)' =>
|
||||
static fn (): bool => (new DiviLibraryStore())->missingTaxonomies() === [],
|
||||
'GlobalLayout::is_global_layout_template (globale Module)' =>
|
||||
static fn (): bool => method_exists(DiviLibraryStore::GLOBAL_LAYOUT, 'is_global_layout_template'),
|
||||
'ET_Core_PageResource (CSS-Cache)' => static fn (): bool => class_exists('ET_Core_PageResource'),
|
||||
'Block-Typ divi/global-layout (Instanzen globaler Module)' =>
|
||||
static fn (): bool => DiviModules::knowsBlock(GlobalInstance::BLOCK),
|
||||
'Taxonomien layout_category, layout_tag (Bibliothek)' =>
|
||||
static fn (): bool => taxonomy_exists('layout_category') && taxonomy_exists('layout_tag'),
|
||||
// Includes et_theme_builder_clear_wp_cache (Theme Builder cache of every site-wide clear, review M-2).
|
||||
'Theme Builder: Funktionen et_theme_builder_* und et_()' => static fn (): bool => array_filter(
|
||||
DiviThemeBuilder::manifest()->calls,
|
||||
static fn (Call $call): bool => $call->className() === null && ! function_exists($call->member())
|
||||
) === [],
|
||||
'Theme Builder: Post-Typen et_template und Layouts' => static fn (): bool => array_filter(
|
||||
DiviThemeBuilder::postTypes(),
|
||||
static fn (string $type): bool => ! post_type_exists($type)
|
||||
) === [],
|
||||
];
|
||||
$check ??= new ManifestCheck();
|
||||
|
||||
return array_merge($check->codeChecks(), $check->registrationChecks(), $check->mirrorChecks());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user