Copy Validator to email-editor package

Because the email-editor package should be independent. We copy Validator to the package, at least for now.
[MAILPOET-6216]
This commit is contained in:
Jan Lysý
2024-09-18 18:18:58 +02:00
committed by Jan Lysý
parent b2e8a9c82b
commit 246a10f058
16 changed files with 692 additions and 3 deletions

View File

@ -0,0 +1,37 @@
<?php declare(strict_types = 1);
namespace MailPoet\EmailEditor\Validator\Schema;
use MailPoet\EmailEditor\Validator\Schema;
// See: https://developer.wordpress.org/rest-api/extending-the-rest-api/schema/#oneof-and-anyof
class AnyOfSchema extends Schema {
protected $schema = [
'anyOf' => [],
];
/** @param Schema[] $schemas */
public function __construct(
array $schemas
) {
foreach ($schemas as $schema) {
$this->schema['anyOf'][] = $schema->toArray();
}
}
public function nullable(): self {
$null = ['type' => 'null'];
$anyOf = $this->schema['anyOf'];
$value = in_array($null, $anyOf, true) ? $anyOf : array_merge($anyOf, [$null]);
return $this->updateSchemaProperty('anyOf', $value);
}
public function nonNullable(): self {
$null = ['type' => 'null'];
$anyOf = $this->schema['anyOf'];
$value = array_filter($anyOf, function ($item) use ($null) {
return $item !== $null;
});
return $this->updateSchemaProperty('anyOf', $value);
}
}