Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions

12
dependencies/jasny/immutable/phpcs.xml vendored Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0"?>
<ruleset name="Jasny">
<description>The Jasny coding standard.</description>
<!-- Include the whole PSR-1 standard -->
<rule ref="PSR1"/>
<!-- Include the whole PSR-2 standard -->
<rule ref="PSR2"/>
<!-- TODO: Add own rules -->
</ruleset>

View File

@ -0,0 +1,10 @@
parameters:
level: 7
paths:
- src
reportUnmatchedIgnoredErrors: false
ignoreErrors:
- /^Variable property access/
includes:
- vendor/phpstan/phpstan-strict-rules/rules.neon

View File

@ -0,0 +1,22 @@
<?php
declare (strict_types=1);
namespace WP_Ultimo\Dependencies\Jasny\Immutable;
/**
* Disable dynamic properties.
*/
trait NoDynamicProperties
{
/**
* Magic method called when trying to set a non-existing property.
*
* @param string $property
* @param mixed $value
* @throws \LogicException
*/
public function __set(string $property, $value) : void
{
throw new \LogicException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
}

View File

@ -0,0 +1,154 @@
<?php
declare (strict_types=1);
namespace WP_Ultimo\Dependencies\Jasny\Immutable;
/**
* Trait with the `withProperty` methods that can be used by classes of immutable objects.
*
* {@internal Some lines are expected to be covered, which should be ignored. Added codeCoverageIgnore. }}
*/
trait With
{
/**
* Return a copy with a changed property.
* Returns this object if the resulting object would be the same as the current one.
*
* @param string $property
* @param mixed $value
* @return static
* @throws \BadMethodCallException if property doesn't exist
*/
private function withProperty(string $property, $value)
{
if (!\property_exists($this, $property)) {
throw new \BadMethodCallException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
if (isset($this->{$property}) && $this->{$property} === $value || !isset($this->{$property}) && $value === null) {
return $this;
}
$clone = clone $this;
$clone->{$property} = $value;
return $clone;
}
/**
* Return a copy with a property unset.
* Returns this object if the resulting object would be the same as the current one.
*
* @param string $property
* @return static
* @throws \BadMethodCallException if property doesn't exist
*/
private function withoutProperty(string $property)
{
if (!\property_exists($this, $property)) {
throw new \BadMethodCallException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
if (!isset($this->{$property})) {
return $this;
}
$clone = clone $this;
unset($clone->{$property});
return $clone;
}
/**
* Return a copy with an added item for a property.
* Returns this object if the resulting object would be the same as the current one.
*
* @param string $property
* @param string $key
* @param mixed $value
* @return static
* @throws \BadMethodCallException if property doesn't exist
*/
private function withPropertyKey(string $property, string $key, $value)
{
if (!\property_exists($this, $property)) {
throw new \BadMethodCallException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
// @codeCoverageIgnore
if (!\is_array($this->{$property}) && !$this->{$property} instanceof \ArrayAccess) {
throw new \BadMethodCallException(\sprintf('%s::$%s is not an array', \get_class($this), $property));
}
if (isset($this->{$property}[$key]) && $this->{$property}[$key] === $value) {
return $this;
}
$clone = clone $this;
$clone->{$property}[$key] = $value;
return $clone;
}
/**
* Return a copy with a removed item from a property.
* Returns this object if the resulting object would be the same as the current one.
*
* @param string $property
* @param string $key
* @return static
* @throws \BadMethodCallException if property doesn't exist or isn't an array
*/
private function withoutPropertyKey(string $property, string $key)
{
if (!\property_exists($this, $property)) {
throw new \BadMethodCallException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
// @codeCoverageIgnore
if (!\is_array($this->{$property}) && !$this->{$property} instanceof \ArrayAccess) {
throw new \BadMethodCallException(\sprintf('%s::$%s is not an array', \get_class($this), $property));
}
if (!isset($this->{$property}[$key])) {
return $this;
}
$clone = clone $this;
unset($clone->{$property}[$key]);
return $clone;
}
/**
* Return a copy with a value added to a sequential array.
*
* @param string $property
* @param mixed $value
* @param mixed $unique Don't add if the array already has a copy of the value.
* @return static
* @throws \BadMethodCallException if property doesn't exist or isn't an array
*/
private function withPropertyItem(string $property, $value, bool $unique = \false)
{
if (!\property_exists($this, $property)) {
throw new \BadMethodCallException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
if (!\is_array($this->{$property})) {
throw new \BadMethodCallException(\sprintf('%s::$%s is not an array', \get_class($this), $property));
}
if ($unique && \in_array($value, $this->{$property}, \true)) {
return $this;
}
$clone = clone $this;
$clone->{$property}[] = $value;
return $clone;
}
/**
* Return a copy with a value removed from a sequential array.
* Returns this object if the resulting object would be the same as the current one.
*
* @param string $property
* @param mixed $value
* @return static
* @throws \BadMethodCallException if property doesn't exist or isn't an array
*/
private function withoutPropertyItem(string $property, $value)
{
if (!\property_exists($this, $property)) {
throw new \BadMethodCallException(\sprintf('%s has no property "%s"', \get_class($this), $property));
}
if (!\is_array($this->{$property})) {
throw new \BadMethodCallException(\sprintf('%s::$%s is not an array', \get_class($this), $property));
}
$keys = \array_keys($this->{$property}, $value, \true);
if ($keys === []) {
return $this;
}
$clone = clone $this;
$clone->{$property} = \array_values(\array_diff_key($clone->{$property}, \array_fill_keys($keys, null)));
return $clone;
}
}