Published by azjezz over 3 years ago
Fixes:
Psl\Json\typed
now accepts any implementation of Type\TypeInterface
( previously, only implementation of Type\Type
were allowed )Published by azjezz over 3 years ago
Features:
Psl\Regex\matches
functionPsl\Regex\replace
functionPsl\Regex\replace_every
functionPsl\Regex\split
functionPsl\Vec\filter
functionPsl\Vec\filter_keys
functionPsl\Vec\filter_with_key
functionPsl\Vec\map
functionPsl\Vec\map_with_key
functionPsl\Dict\filter_nulls
Psl\Dict\diff
functionPsl\Dict\diff_by_key
functionPsl\Dict\intersect
functionPsl\Dict\intersect_by_key
functionDeprecation:
Psl\Iter\diff_by_key
( use Psl\Dict\diff_by_key
instead )Psl\Iter\chain
( use Psl\Vec\concat
instead )Published by azjezz over 3 years ago
Features:
Type\vec
functions that returns a Type of vec<T>
( aka list<T>
, T[]
)Type\dict
function that returns a Type of dict<Tk, Tv>
( aka array<Tk, Tv>
)Type\TypeInterface
interface that is implemented by all types.Type::matches($value): bool
method to check if the given value is of that type.Deprecation:
Type\is_*
functions have been deprecated, use Type\string()->matches($value)
instead of Type\is_string($value)
Breaking changes:
matches
has been added to Type\Type
, if you have a type that extends this base class, you probably won't be effected, unless you have a method in your class named matches
.Published by azjezz over 3 years ago
This release brings 3 new components to PSL, Vec
, Dict
, and Encoding
.
Arr
component has been deprecated in favor of Iter
, Vec
, and Dict
.
We also introduced a new type function Type\shape()
to support object-like-arrays.
Example:
try {
$input = Type\shape([
'name' => Type\string(),
'email' => Type\string(),
'address' => Type\shape([
'country' => Type\string(),
'state' => Type\string(),
'city' => Type\string(),
]),
])->assert($_POST);
} catch (Type\Exception\AssertException) {
// bad request!
}
However, it is not possible to explain the return type for this function to static analysis tools such as psalm, so we have added a psalm plugin that would make your experience using PSL better.
To enable the new Psalm Plugin, follow the instructions in the README.
In the example above, if you don't have the plugin enabled, the return type inferred by psalm for assert($_POST)
would be array<string, array<string, string>|string>
, which is correct, but can be more specific, with the help of the newly added plugin, psalm will understand that the return type is actually array{name: string, email: string, address: array{country: string, state: string, city: string}}
, which helps you avoid issues such as accessing an out-of-bound index.
Features:
Psl\Integration\Psalm\Plugin
( psalm-plugin )Psl\Type\shape
Psl\Vec\chunk
Psl\Vec\chunk_with_keys
Psl\Vec\concat
Psl\Vec\enumerate
Psl\Vec\fill
Psl\Vec\filter_nulls
Psl\Vec\flat_map
Psl\Vec\keys
Psl\Vec\values
Psl\Vec\partition
Psl\Vec\range
Psl\Vec\reductions
Psl\Vec\reproduce
Psl\Vec\reverse
Psl\Vec\shuffle
Psl\Vec\sort
Psl\Vec\sort_by
Psl\Vec\values
Psl\Vec\zip
Psl\Dict\associate
Psl\Dict\drop
Psl\Dict\drop_while
Psl\Dict\equal
Psl\Dict\filter
Psl\Dict\filter_keys
Psl\Dict\filter_with_key
Psl\Dict\flatten
Psl\Dict\flip
Psl\Dict\from_entries
Psl\Dict\from_iterable
Psl\Dict\from_keys
Psl\Dict\group_by
Psl\Dict\map
Psl\Dict\map_keys
Psl\Dict\map_with_key
Psl\Dict\merge
Psl\Dict\partition
Psl\Dict\partition_with_key
Psl\Dict\pull
Psl\Dict\pull_with_key
Psl\Dict\reindex
Psl\Dict\select_keys
Psl\Dict\slice
Psl\Dict\sort
Psl\Dict\sort_by
Psl\Dict\sort_by_key
Psl\Dict\take
Psl\Dict\take_while
Psl\Dict\unique
Psl\Dict\unique_by
Psl\Encoding\Base64\encode
Psl\Encoding\Base64\decode
Psl\Encoding\Hex\encode
Psl\Encoding\Hex\decode
Deprecation:
Psl\Iter\to_array
( use Psl\Vec\values
instead )Psl\Iter\values
( use Psl\Vec\values
instead )Psl\Arr\concat
( use Psl\Vec\concat
instead )Psl\Arr\count
( use Psl\Iter\count
instead )Psl\Arr\filter_nulls
( use Psl\Vec\filter_nulls
instead )Psl\Arr\flat_map
( use Psl\Vec\flat_map
instead )Psl\Arr\keys
( use Psl\Vec\keys
instead )Psl\Arr\shuffle
( use Psl\Vec\shuffle
instead )Psl\Arr\sort
( use Psl\Vec\sort
instead )Psl\Arr\sort_by
( use Psl\Vec\sort_by
instead )Psl\Arr\values
( use Psl\Vec\values
instead )Psl\Iter\chunk
( use Psl\Vec\chunk
instead )Psl\Iter\chunk_with_keys
( use Psl\Vec\chunk_with_keys
instead )Psl\Iter\filter_nulls
( use Psl\Vec\filter_nulls
instead )Psl\Iter\flat_map
( use Psl\Vec\flat_map
instead )Psl\Iter\keys
( use Psl\Vec\keys
instead )Psl\Iter\range
( use Psl\Vec\range
instead )Psl\Iter\reductions
( use Psl\Vec\reductions
instead )Psl\Iter\repeat
( use Psl\Vec\fill
instead )Psl\Iter\reproduce
( use Psl\Vec\reproduce
instead )Psl\Iter\reverse
( use Psl\Vec\reverse
instead )Psl\Iter\zip
( use Psl\Vec\zip
instead )Psl\Arr\drop
( use Psl\Dict\drop
instead )Psl\Arr\drop_while
( use Psl\Dict\drop_while
instead )Psl\Arr\equal
( use Psl\Dict\equal
instead )Psl\Arr\filter
( use Psl\Dict\filter
instead )Psl\Arr\filter_with_key
( use Psl\Dict\filter_with_key
instead )Psl\Arr\filter_keys
( use Psl\Dict\filter_keys
instead )Psl\Arr\flatten
( use Psl\Dict\flatten
instead )Psl\Arr\flip
( use Psl\Dict\flip
instead )Psl\Arr\group_by
( use Psl\Dict\group_by
instead )Psl\Arr\map
( use Psl\Dict\map
instead )Psl\Arr\map_with_key
( use Psl\Dict\map_with_key
instead )Psl\Arr\map_keys
( use Psl\Dict\map_keys
instead )Psl\Arr\merge
( use Psl\Dict\merge
instead )Psl\Arr\partition
( use Psl\Dict\partition
instead )Psl\Arr\select_keys
( use Psl\Dict\select_keys
instead )Psl\Arr\slice
( use Psl\Dict\slice
instead )Psl\Arr\sort_by_key
( use Psl\Dict\sort_by_key
instead )Psl\Arr\sort_with_keys
( use Psl\Dict\sort_with_keys
instead )Psl\Arr\sort_with_keys_by
( use Psl\Dict\sort_with_keys_by
instead )Psl\Arr\take
( use Psl\Dict\take
instead )Psl\Arr\take_while
( use Psl\Dict\take_while
instead )Psl\Arr\unique
( use Psl\Dict\unique
instead )Psl\Arr\unique_by
( use Psl\Dict\unique_by
instead )Psl\Iter\drop
( use Psl\Dict\drop
instead )Psl\Iter\drop_while
( use Psl\Dict\drop_while
instead )Psl\Iter\slice
( use Psl\Dict\slice
instead )Psl\Iter\take
( use Psl\Dict\take
instead )Psl\Iter\take_while
( use Psl\Dict\take_while
instead )Psl\Iter\reindex
( use Psl\Dict\reindex
instead )Psl\Iter\pull
( use Psl\Dict\pull
instead )Psl\Iter\pull_with_key
( use Psl\Dict\pull_with_key
instead )Psl\Iter\to_array_with_keys
( use Psl\Dict\from_iterable
instead )Psl\Iter\map
( use Psl\Dict\map
instead )Psl\Iter\map_with_key
( use Psl\Dict\map_with_key
instead )Psl\Iter\map_keys
( use Psl\Dict\map_keys
instead )Psl\Iter\from_entries
( use Psl\Dict\from_entries
instead )Psl\Iter\from_keys
( use Psl\Dict\from_keys
instead )Psl\Iter\product
( no replacement provided )Psl\Iter\filter
( use Psl\Dict\filter
instead )Psl\Iter\filter_with_key
( use Psl\Dict\filter_with_key
instead )Psl\Iter\filter_keys
( use Psl\Dict\filter_keys
instead )Psl\Iter\flip
( use Psl\Dict\flip
instead )Psl\Iter\flatten
( use Psl\Dict\flatten
instead )Psl\Iter\merge
( use Psl\Dict\merge
instead )Psl\Arr\contains
( use Psl\Iter\contains
instead )Psl\Arr\contains_key
( use Psl\Iter\contains_key
instead )Psl\Arr\count
( use Psl\Iter\count
instead )Psl\Arr\count_values
( use Psl\Dict\count_values
instead )Psl\Arr\first
( use Psl\Iter\first
instead )Psl\Arr\firstx
( use Psl\Iter\first
instead )Psl\Arr\first_key
( use Psl\Iter\first_key
instead )Psl\Arr\last
( use Psl\Iter\last
instead )Psl\Arr\lastx
( use Psl\Iter\last
instead )Psl\Arr\last_key
( use Psl\Iter\last_key
instead )Psl\Arr\idx
( use $array|$key] ?? $default
instead )Psl\Arr\at
( use $array[$key]
instead )Psl\Iter\enumerate
( use Psl\Vec\enumerate
instead )Published by azjezz over 3 years ago
Bug fixes:
Published by azjezz over 3 years ago
Features:
Type\non_empty_string
function - #116Iter\flat_map
function - #112 ( thanks to @veewee )Arr\flat_map
function - #112 ( thanks to @veewee )Math\clamp
function - #111 ( thanks to @veewee )Bug Fixes:
Published by azjezz almost 4 years ago
Published by azjezz almost 4 years ago
.github
folder to export-ignore
Published by azjezz almost 4 years ago
Str\after{_ci|_last{_ci}}
and Str\before{_ci|_last{_ci}}
helper string functions.Str\Byte\after{_ci|_last{_ci}}
and Str\Byte\before{_ci|_last{_ci}}
helper string functions.Str\Grapheme\after{_ci|_last{_ci}}
and Str\Grapheme\before{_ci|_last{_ci}}
helper string functions.Str\Byte\search_last_ci
functionStr\Byte\search_last
returns an empty string for an empty needle ( now returns null
)Published by azjezz almost 4 years ago
This is the first release of PSL, a modern, consistent, centralized, well-typed set of APIs for PHP programmers.