Skip to content

Commit 42b66d6

Browse files
committed
improve type safety
1 parent 47476eb commit 42b66d6

3 files changed

Lines changed: 13 additions & 7 deletions

File tree

src/Components/Query.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ final class Query {
1515
/**
1616
* @var array<string, QueryParameter>
1717
*/
18-
private array $queryParameters;
18+
private array $queryParameters = [];
1919

2020
/**
2121
* @throws InvalidArgumentException
@@ -90,17 +90,17 @@ function __toString () : string {
9090
* @throws InvalidArgumentException
9191
* @param string $query
9292
*
93-
* @return Generator & iterable<QueryParameter>
93+
* @return iterable<int, QueryParameter>
9494
*/
95-
private static function mapKeyValuePairsToQueryParameters (string $query) : Generator {
95+
private static function mapKeyValuePairsToQueryParameters (string $query) : iterable {
9696
foreach (self::collectKeyValuePairs($query) as $key => $value) {
9797
yield QueryParameter::create($key, $value);
9898
}
9999
}
100100

101101
/**
102102
* @param string $query
103-
* @return array<string, array<int, string|null>|string|null>
103+
* @return array<string, non-empty-array<array-key, mixed>|string|null>
104104
*/
105105
private static function collectKeyValuePairs (string $query) : array {
106106
$parameters = [];

src/Components/QueryParameters/ArrayQueryParameter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function getValueAsString () : string {
3434
}
3535

3636
function getValueAsInt () : int {
37-
return (int) $this->value;
37+
return empty($this->value) ? 0 : 1;
3838
}
3939

4040
function __toString (): string {

src/Components/QueryParameters/QueryParameter.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,19 @@ static function create (string $key, mixed $value) : self {
2121
if (is_bool($value)) {
2222
return new BooleanQueryParameter($key, $value);
2323
} elseif (is_array($value)) {
24-
return new ArrayQueryParameter($key, ...$value);
24+
return new ArrayQueryParameter($key, ...array_map(function (mixed $value) use ($key) : string|null {
25+
if (!is_string($value) && $value !== null) {
26+
throw new InvalidArgumentException("Unsupported query parameter value of type `" . gettype($value) . "` for item of key `{$key}`");
27+
}
28+
29+
return $value;
30+
}, $value));
2531
} elseif ($value instanceof \Stringable) {
2632
$value = (string) $value;
2733
}
2834

2935
if ($value !== null && !is_string($value)) {
30-
throw new InvalidArgumentException("Unsupported query parameter of type `" . gettype($value) . "`");
36+
throw new InvalidArgumentException("Unsupported query parameter value of type `" . gettype($value) . "` for key `{$key}`");
3137
}
3238

3339
return new StringQueryParameter($key, $value);

0 commit comments

Comments
 (0)