Files
WP-LIT-MCP/src/Compatibility/Manifest.php
T
Jan-Niclas LoosenandClaude Opus 5.5 b511ef6348 refactor(compat): Prüfbausteine nach src/Compatibility, Matrix und ManifestCheck generisch
Requirement, Call, ConstantRequirement, Mirror, Problem, FeatureStatus, CompatibilityMatrix, Manifest, ManifestCheck sowie Fingerprints und LineDiff liegen jetzt im divi-freien Kern. Neu: GlobalRequirement, CompatibilityMatrix::fromProblems(), ManifestCheck-Option signatures, DiviManifestCheck::create() und DiviAreas. Divi-Verhalten unverändert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 12:03:30 +01:00

94 lines
4.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
namespace LIT\MCP\Compatibility;
defined('ABSPATH') || exit;
/**
* The external dependencies of one adapter (spec §4.1) – the single source for the compatibility checks, the release
* gate, the admin check and DiviBoundaryTest. Pure data, no WordPress calls. Only area and calls are needed; the
* other fields are optional (the Divi integration uses all of them).
*/
final class Manifest
{
/** @var list<ConstantRequirement> */
public readonly array $constants;
/**
* @param string $area Area label for reports (the Divi integration: DiviAreas).
* @param list<Call> $calls Functions and static methods the adapter calls.
* @param list<string|ConstantRequirement> $constants Constants it reads; a plain name stands for a
* ConstantRequirement without features of its own.
* @param list<string> $postTypes Post types it needs registered.
* @param list<string> $taxonomies Taxonomies it needs registered.
* @param list<string> $blockTypes Block types it needs (registered or known
* to the ManifestCheck knowsBlock closure).
* @param list<string> $keys Other names it uses as strings: meta keys, options,
* internal post types that need no registration check,
* query arguments.
* @param list<Mirror> $mirrors Functions whose storage logic it repeats.
* @param list<Capability> $features The features of every call, mirror and constant that names
* none itself (featuresOf()).
* @param list<GlobalRequirement> $globals Global variables it reads (isset check).
*/
public function __construct(
public readonly string $area,
public readonly array $calls = [],
array $constants = [],
public readonly array $postTypes = [],
public readonly array $taxonomies = [],
public readonly array $blockTypes = [],
public readonly array $keys = [],
public readonly array $mirrors = [],
public readonly array $features = [],
public readonly array $globals = []
) {
$this->constants = array_map(
static fn (string|ConstantRequirement $constant): ConstantRequirement => is_string($constant)
? new ConstantRequirement($constant)
: $constant,
array_values($constants)
);
}
/** @return list<Requirement> Calls, constants, mirrors and globals – everything the release gate checks as code. */
public function requirements(): array
{
return [...$this->calls, ...$this->constants, ...$this->mirrors, ...$this->globals];
}
/** @return list<Capability> The features $requirement names itself, else this manifest's default. */
public function featuresOf(Requirement $requirement): array
{
$own = $requirement->features();
return $own !== [] ? $own : $this->features;
}
/**
* @return list<string> Every external name the adapter's code may contain (DiviBoundaryTest): called functions and
* classes, constants, globals, post types, taxonomies, keys and the names of mirrored functions.
*/
public function names(): array
{
$names = [];
foreach ($this->calls as $call) {
$names[] = $call->className() ?? $call->member();
}
$constants = array_map(static fn (ConstantRequirement $constant): string => $constant->name, $this->constants);
$mirrored = array_map(static fn (Mirror $mirror): string => $mirror->function, $this->mirrors);
return array_values(array_unique(array_merge(
$names,
$constants,
array_map(static fn (GlobalRequirement $global): string => $global->name, $this->globals),
$this->postTypes,
$this->taxonomies,
$this->keys,
$mirrored
)));
}
}