allow vendord
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s

This commit is contained in:
2026-03-30 14:54:57 +07:00
parent 66aed7c4e8
commit b5e3a778ce
21316 changed files with 2777892 additions and 13 deletions

View File

@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query;
/**
* @internal
*/
interface Filter extends Modifier
{
}

View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Beste\Json;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class EndAt implements Filter
{
use ModifierTrait;
public function __construct(private readonly bool|float|int|string $value)
{
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'endAt', Json::encode($this->value));
}
}

View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Beste\Json;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class EndBefore implements Filter
{
use ModifierTrait;
public function __construct(private readonly int|float|string|bool $value)
{
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'endBefore', Json::encode($this->value));
}
}

View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Beste\Json;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class EqualTo implements Filter
{
use ModifierTrait;
public function __construct(private readonly bool|float|int|string $value)
{
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'equalTo', Json::encode($this->value));
}
}

View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Kreait\Firebase\Exception\InvalidArgumentException;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class LimitToFirst implements Filter
{
use ModifierTrait;
private readonly int $limit;
public function __construct(int $limit)
{
if ($limit < 1) {
throw new InvalidArgumentException('Limit must be 1 or greater');
}
$this->limit = $limit;
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'limitToFirst', $this->limit);
}
}

View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Kreait\Firebase\Exception\InvalidArgumentException;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class LimitToLast implements Filter
{
use ModifierTrait;
private readonly int $limit;
public function __construct(int $limit)
{
if ($limit < 1) {
throw new InvalidArgumentException('Limit must be 1 or greater');
}
$this->limit = $limit;
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'limitToLast', $this->limit);
}
}

View File

@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class Shallow implements Filter
{
use ModifierTrait;
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'shallow', 'true');
}
}

View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Beste\Json;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class StartAfter implements Filter
{
use ModifierTrait;
public function __construct(private readonly int|float|string|bool $value)
{
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'startAfter', Json::encode($this->value));
}
}

View File

@@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Filter;
use Beste\Json;
use Kreait\Firebase\Database\Query\Filter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
final class StartAt implements Filter
{
use ModifierTrait;
public function __construct(private readonly int|float|string|bool $value)
{
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'startAt', Json::encode($this->value));
}
}

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query;
use Psr\Http\Message\UriInterface;
/**
* @internal
*/
interface Modifier
{
/**
* Modifies the given URI and returns it.
*/
public function modifyUri(UriInterface $uri): UriInterface;
/**
* Modifies the given value and returns it.
*/
public function modifyValue(mixed $value): mixed;
}

View File

@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query;
use GuzzleHttp\Psr7\Query;
use Psr\Http\Message\UriInterface;
use function array_merge;
/**
* @internal
*/
trait ModifierTrait
{
public function modifyValue(mixed $value): mixed
{
return $value;
}
protected function appendQueryParam(UriInterface $uri, string $key, mixed $value): UriInterface
{
$queryParams = array_merge(Query::parse($uri->getQuery()), [$key => $value]);
$queryString = Query::build($queryParams);
return $uri->withQuery($queryString);
}
}

View File

@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query;
/**
* @internal
*/
interface Sorter extends Modifier
{
}

View File

@@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Sorter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Kreait\Firebase\Database\Query\Sorter;
use Psr\Http\Message\UriInterface;
use function is_array;
use function JmesPath\search;
use function sprintf;
use function str_replace;
use function uasort;
/**
* @internal
*/
final class OrderByChild implements Sorter
{
use ModifierTrait;
public function __construct(private readonly string $childKey)
{
}
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'orderBy', sprintf('"%s"', $this->childKey));
}
public function modifyValue(mixed $value): mixed
{
if (!is_array($value)) {
return $value;
}
$expression = str_replace('/', '.', $this->childKey);
uasort($value, static fn($a, $b): int => search($expression, $a) <=> search($expression, $b));
return $value;
}
}

View File

@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Sorter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Kreait\Firebase\Database\Query\Sorter;
use Psr\Http\Message\UriInterface;
use function is_array;
use function ksort;
/**
* @internal
*/
final class OrderByKey implements Sorter
{
use ModifierTrait;
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'orderBy', '"$key"');
}
public function modifyValue(mixed $value): mixed
{
if (!is_array($value)) {
return $value;
}
ksort($value);
return $value;
}
}

View File

@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Kreait\Firebase\Database\Query\Sorter;
use Kreait\Firebase\Database\Query\ModifierTrait;
use Kreait\Firebase\Database\Query\Sorter;
use Psr\Http\Message\UriInterface;
use function asort;
use function is_array;
/**
* @internal
*/
final class OrderByValue implements Sorter
{
use ModifierTrait;
public function modifyUri(UriInterface $uri): UriInterface
{
return $this->appendQueryParam($uri, 'orderBy', '"$value"');
}
public function modifyValue(mixed $value): mixed
{
if (!is_array($value)) {
return $value;
}
asort($value);
return $value;
}
}