fix(deps): update dependency azjezz/psl to v6#184
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
3e113a1 to
b1d49a2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^3.2.0→^6.0.0Release Notes
php-standard-library/php-standard-library (azjezz/psl)
v6.2.1Compare Source
security
content-lengthheader against received DATA on server connections, preventing HTTP/2 request smuggling onPsl\H2\ServerConnection(GHSA-pw9p-jvrm-f7rm)v6.2.0Compare Source
features
EitherOrBothcomponent - a three-variant disjoint union (Left/Right/Both) for values that may be present on either or both of two sides, inspired by Rust'sitertools::EitherOrBothand Haskell'sData.These. Primary use case: three-way diff of two collections (insert / delete / update events). Secondary: layered config merge, multi-source enrichment, dual-validation, snapshot comparison. Fullmap/mapLeft/mapRight/mapAny/swap/proceed/apply/containsLeft/containsRightsurface;left()/right()/both()free constructors.Iter\merge_join_byandIter\merge_join_by_key- full-outer-join stream producers that yieldEitherOrBothevents as a rewindableIter\Iterator.merge_join_byis a lazy two-cursor merge over sorted inputs (O(1) memory on first traversal,Psl\Comparison\Order-returning comparator, matching Rust'sitertools::merge_join_by);merge_join_by_keyis a hash-based variant for keyed inputs that do not need to be pre-sorted (O(|right|) memory).IO\IterableReadHandle- a streamingReadHandleInterfacethat lazily consumes aniterable<string>without buffering the entire content in memoryIO\ConcatReadHandle- reads from two handles in sequence, switching to the second when the first reaches EOFIO\JoinedReadWriteHandle- joins aReadHandleInterfaceandWriteHandleInterfaceinto a single read-write handle, delegating all operations to the respective underlying handleIO\TeeWriteHandle- writes to two handles simultaneously with backpressure buffering when the second handle is slowerIO\SinkWriteHandle- a/dev/null-like write handle that discards all written dataIO\SinkReadHandle- a read handle that is always at EOF, unlikeMemoryHandle('')which only reports EOF after the first readIO\SinkReadWriteHandle- a sink that discards writes and always reports EOF on readsIO\TruncatedReadHandle- reads up to N bytes from an underlying handle, silently reporting EOF when the limit is reachedIO\BoundedReadHandle- reads up to N bytes from an underlying handle, throwingRuntimeExceptionif the underlying handle has more data than the limit allowsIO\FixedLengthReadHandle- reads exactly N bytes from an underlying handle, throwingRuntimeExceptionon premature EOFIO\copy_chunked()andIO\copy_bidirectional_chunked()- variants ofIO\copy()andIO\copy_bidirectional()that accept a custom chunk sizeSendConfiguration::$connectionTimeout- per-request maximum duration for establishing a connection (TCP + TLS handshake), using a linked cancellation token'true'/'false'string literals inType\bool()coercion - #735 by @verwetoMIMEcomponent - comprehensive MIME toolkit implementing RFC 2045-2049 and related standardsMediaType,MediaRange,MediaPreferences) per RFC 2045, RFC 6838, RFC 9110Part\Text,Part\Data) per RFC 2045MultiPart\Composite,MultiPart\Alternative,MultiPart\Related,MultiPart\Form,MultiPart\Parser) per RFC 2046, RFC 2387, RFC 7578Headers)ContentDisposition) per RFC 2183cid:URI support (ContentId) per RFC 2392Parameters)Sniff\from_string,Sniff\from_handle)SMIME\Signer,SMIME\Verifier,SMIME\Encryptor,SMIME\Decryptor) per RFC 5652, RFC 8551Ed25519-SHA256 (DKIM\Signer) per RFC 6376, RFC 8301, RFC 8463Messagecomponent - RFC 5322 internet message construction, parsing, and serializationwith*()methods (Message) per RFC 5322string|Mailbox|AddressListfor conveniencePartInterfacefrom the MIME component per RFC 2045serialize()andparse()accepting string orReadHandleInterfaceEnvelope) per RFC 5321Mailbox,Group,AddressListwith RFC 2047 encoded-word supportSMTPcomponent - RFC 5321 SMTP client with connection pooling, TLS, and authenticationConnectionimplementingNetwork\StreamInterfacefor protocol-level SMTP operationsTransportmanaging the full SMTP lifecycle: connect, EHLO/HELO, STARTTLS, AUTH, send, RSETTCP\SocketPoolEnhancedStatusCodeparsingSendConfigurationDurationorDateTimeInterfaceDeliveryReportfor per-recipient rejection trackingPossibleAttackExceptionTransportConfigurationandSendConfigurationwith fluentwith*()buildersDNScomponent - async DNS resolution with full protocol supportSystemResolvermirrors OS DNS behavior, usable as a default parameter valueTCPResolverRacingResolverraces multiple nameservers concurrently for fastest responseSplitHorizonResolverroutes queries by domain name for split-horizon DNSSearchDomainResolverexpands short names using search domain listsHostsFileResolverchecks the OS hosts file before network queriesCachedResolverdecorator with TTL-aware caching viaCache\StoreInterfaceStaticResolverfor hardcoded records in tests and developmentHTTPSResolverusing the HTTP client (RFC 8484)ResponseCodehelper methods:isSuccess(),isError(),isServerError(),isNameError()DNSSECcomponent - full DNSSEC validation chainSecureResolvervalidates RRSIG signatures on every responseTrustChainResolverwalks DS/DNSKEY chain from root to target zoneCachedTrustChainResolvercaches trust chain results for performanceStaticTrustChainResolverfor offline/air-gapped environmentsEd25519, Ed448SignatureFailedException,BrokenTrustChainException,InvalidProofException,UnsignedResponseExceptionHTTP Messagecomponent - version-agnostic HTTP message abstractionsRequestandResponseimmutable value objects with streaming body (ReadHandleInterface)FieldMapordered, case-insensitive header field collection with lazy indexProtocolVersionenum covering HTTP/1.0, HTTP/1.1, HTTP/2, and HTTP/3Async\Awaitable<FieldMap>for HTTP/2 and chunked HTTP/1.1reason_phrase()function for HTTP/1.x status line serializationwith*()mutation methods on both Request and ResponseTransactiongroups the final response with informational (1xx) responses and server push exchangesExchangerepresents a pushed request/response pair for HTTP/2 server pushHTTP Clientcomponent - async HTTP/1.1 and HTTP/2 client with connection poolingClientwith automatic protocol negotiation via ALPN (HTTP/2 preferred, HTTP/1.1 fallback)PooledConnectorwith HTTP/1.x idle connection reuse and HTTP/2 session sharing across concurrent requestsH2Multiplexerand per-streamH2StreamstateRedirectClientdecorator following 301/302/303/307/308 redirects with method rewriting per RFC 9110, cross-origin credential stripping, and auto-referrerRetryClientdecorator with configurable exponential backoff and jitter for transport-level failuresSendConfigurationfor per-request overrides (body size limits, TLS, protocol versions, tunnel) merged withClientConfigurationdefaultsDeniedDestinationsMiddlewarefor SSRF protection against private IP ranges (RFC 1918, RFC 4193, loopback, link-local)HandlerInterface/MiddlewareInterfacechain with access to peer address and TLS stateClientConfiguration::$proxyusingPsl\Socks\ConnectorClientConfiguration::$tunnelwith TLS and proxy authenticationnoTunnelinghost bypass rules (exact match, domain suffix, wildcard)ResponseBodyHandleimplementingReadHandleInterfaceConfigurationreplacing deprecatedClientConfigurationandServerConfigurationClientConnectionandServerConnectionnow acceptConfigurationin addition to their legacy config typesClientConnectionnow supports BDP auto-tuning when usingConfigurationwithmaxReceiveWindowSizesetbindTooption toConnectConfigurationfor binding to a specific local address before connectingbindTooption toListenConfigurationfor binding to a specific local address before listeningwithBindTo()fluent builder method to bothConnectConfigurationandListenConfigurationconnect()now respectsConnectConfiguration::$bindToby setting thesocket.bindtostream context optionType\class_stringto assert or coerce bareclass-stringtype system
@template-covariantacross the library, allowing values to flow into wider declarations:Async\Awaitable<T>,Promise\PromiseInterface<T>Result\ResultInterface<T>,Result\Success<T>,Result\Failure<T, Te>Option\Option<T>Either\Either<TLeft, TRight>,Either\Left<TLeft>,Either\Right<TRight>Tree\NodeInterface<T>,Tree\LeafNode<T>,Tree\TreeNode<T>@template-covariant(CollectionInterface,AccessibleCollectionInterface,IndexAccessInterface,MapInterface,Map,SetInterface,Set,VectorInterface,Vector); mutable collections remain invariant.Sequence,KeyedSequence,Semaphore,KeyedSemaphoretemplate parameters with the correct variance; keys/inputs are@template-contravariant(write-position only) and outputs are@template-covariant(read-position only).Vector::getIterator()andMutableVector::getIterator()return type fromIterator<int<0, max>, T>toIterator<int, T>.fixes
IO\copy()now flushes the writer after copying if it implementsBufferedWriteHandleInterface, ensuring no data remains in an internal bufferState::subscribe()andState::invokeCallbacks()no longer capture$thisin queued closures, preventing delayed garbage collection ofDeferred/Awaitablechainshttp://::1/path) are now correctly parsed asIPHostinstead of being misparsed as a registered name with a numeric portmaxConcurrent(peer's limit on our streams) frompeerMaxConcurrent(our limit on peer's streams) inStreamTable, preventing the client's own SETTINGS from limiting its outgoing streamsBDPEstimatornow produces an initial connection-level WINDOW_UPDATE duringinitialize()to bring the receive window from the RFC default (65535) up toinitialWindowSize, preventing flow-control stalls when many concurrent streams receive data simultaneouslynotifyWindowWaiters()now copies the waiter list before iterating and properly removes satisfied waiters, preventing iteration corruption and memory leaksResourceHandlereadable/writable callbacks now null out the suspension reference before callingresume(), preventing "Must call suspend() before calling throw()" errors during handle destructionResourceHandle::doRead()anddoWrite()cancellation subscriptions now null out the suspension reference before throwing, preventing double-wake when cancellation and close race during PHP shutdowndeprecations
Socketclass -- useConnectConfiguration::$bindToorListenConfiguration::$bindToinstead. Will be removed in PSL 7.0.ClientConfiguration-- useConfigurationinstead. Will be removed in PSL 7.0.ServerConfiguration-- useConfigurationinstead. Will be removed in PSL 7.0.ci
v6.1.2: Hevlaska 6.1.2Compare Source
Security Release
This release fixes a server-side HTTP/2 vulnerability in the
Psl\H2component (GHSA-pw9p-jvrm-f7rm).Impact
Psl\H2\ServerConnectiondid not validate that the total bytes received in HTTP/2 DATA frames matched thecontent-lengthheader declared in the initial HEADERS frame, in violation of RFC 9113 §8.1.1 and §8.1.2.6. #778A malicious client could:
This affects consumers using
Psl\H2\ServerConnectiondirectly to accept untrusted client traffic. Consumers of documented high-level PSL APIs are not affected.Patches
content-lengthon server-side HEADERS receive (RFC 9110 §8.6: must be a non-negative decimal integer).Psl\H2\Exception\StreamExceptionon mismatch or overflow.Client-side validation is intentionally not performed, as RFC 9110 §9.3.2 permits HEAD responses to declare content-length without sending DATA.
Additional fixes
Psl\H2\ConnectionTrait::waitForSendWindow()now flushes pending buffered writes before suspending. Without this, frames written inside abuffered()block never reach the wire, and a peer that only sendsWINDOW_UPDATEafter seeing our DATA would deadlock.Upgrade
Credit
Discovered during internal review prior to public exploitation.
v6.1.1Compare Source
fixes
Str\chr()now throwsOutOfBoundsExceptionfor invalid Unicode code points instead of silently returning an empty stringStr\from_code_points()now validates code points and throwsOutOfBoundsExceptionfor out-of-range values, surrogates, and negative inputs instead of producing invalid UTF-8; implementation now delegates toStr\chr()for consistent behaviorother
width(),truncate(), andwidth_slice()PHPDoc to explicitly referencemb_strwidth()/mb_strimwidth()semanticsv6.1.0Compare Source
features
Psl\IO\BufferedWriteHandleInterface, extendingWriteHandleInterfacewithflush()for handles that buffer data internally before writing to an underlying resourceCompressioncomponent with streaming compression/decompression abstractions for IO handles. ProvidesCompressorInterface,DecompressorInterface, four handle decorators (CompressingReadHandle,CompressingWriteHandle,DecompressingReadHandle,DecompressingWriteHandle), and convenience functionscompress()anddecompress()HPACKcomponent - RFC 7541 HPACK header compression for HTTP/2H2component - HTTP/2 binary framing protocol implementationCachecomponent - async-safe in-memory LRU cache with per-key atomicity viaKeyedSequence, proactive TTL expiration via event loopv6.0.3: Hevlaska 6.0.3Compare Source
PSL 6.0.3
No code changes. This release improves the release infrastructure.
What changed
6.0.x) to the tag before splitting, ensuring split repos always receive the correct commits for patch releases.Full changelog
See CHANGELOG.md for details.
v6.0.2: Hevlaska 6.0.2Compare Source
PSL 6.0.2
Patch release fixing a bug in
IO\Readerthat affected non-blocking stream reads (TLS, TCP, etc.).Bug fixes
IO: Reader no longer treats empty non-blocking reads as EOF
Reader::readUntil()andReader::readUntilBounded()assumed that an emptyread()meant end-of-stream. On non-blocking handles (TLS, TCP, Unix sockets),read()can return empty before data arrives. This causedreadLine()to return the entire stream content as a single string instead of splitting into individual lines.This bug affected any code using
IO\Readerwith network streams. If you were usingreadLine(),readUntil(), orreadUntilBounded()on a non-blocking stream and getting unexpected results, this is the fix.Docs: source links point to correct paths
Documentation source links (
See src/Psl/Default/ for the full API) now link topackages/default/src/Psl/Default/instead of the non-existent top-levelsrc/Psl/Default/.Full changelog
See CHANGELOG.md for details.
v6.0.1Compare Source
Reader::readUntil()andReader::readUntilBounded()no longer treat empty reads from non-blocking streams as EOF, fixingreadLine()returning the entire content instead of individual lines when used with non-blocking streamspackages/{name}/src/Psl/instead of the non-existent top-levelsrc/Psl/pathsplitter auditcommand to verify organization repository settings (wiki, issues, discussions, PRs, tag immutability).v6.0.0Compare Source
breaking changes
null|Duration $timeoutparameters across IO, Network, TCP, TLS, Unix, UDP, Socks, Process, and Shell components have been replaced withCancellationTokenInterface $cancellation = new NullCancellationToken(). This enables both timeout-based and signal-based cancellation of async operations.Psl\IO\Exception\TimeoutException- usePsl\Async\Exception\CancelledExceptioninstead.Psl\Network\Exception\TimeoutException- usePsl\Async\Exception\CancelledExceptioninstead.Psl\Process\Exception\TimeoutException- usePsl\Async\Exception\CancelledExceptioninstead.Psl\Shell\Exception\TimeoutException- usePsl\Async\Exception\CancelledExceptioninstead.Psl\IO\CloseHandleInterfacenow requires anisClosed(): boolmethod.Network\SocketInterface::getLocalAddress()andNetwork\StreamInterface::getPeerAddress()no longer throw exceptions. Addresses are resolved at construction time and cached, making these O(1) property lookups with no syscall.BufferedReadHandleInterface::readLine()now always splits on"\n"instead ofPHP_EOL. Trailing"\r"is stripped, so both"\n"and"\r\n"line endings are handled consistently across all platforms. UsereadUntil(PHP_EOL)for system-dependent behavior.Psl\TLS\ServerConfigrenamed toPsl\TLS\ServerConfiguration.Psl\TLS\ClientConfigrenamed toPsl\TLS\ClientConfiguration.$camelCasenaming instead of$snake_case.TCP\listen(),TCP\connect(),TCP\Socket::listen(),TCP\Socket::connect()now accept configuration objects (TCP\ListenConfiguration,TCP\ConnectConfiguration) instead of individual parameters for socket options.Unix\listen()andUnix\Socket::listen()now acceptUnix\ListenConfigurationinstead of individual parameters.UDP\Socket::bind()now acceptsUDP\BindConfigurationinstead of individual parameters.TCP\Socketsetter/getter methods (setReuseAddress,setReusePort,setNoDelay, etc.) have been removed. Use configuration objects instead.TCP\Connectorconstructor now acceptsTCP\ConnectConfigurationinstead ofbool $noDelay.Socks\Connectorconstructor changed from(string $proxyHost, int $proxyPort, ?string $username, ?string $password, ConnectorInterface $connector)to(ConnectorInterface $connector, Socks\Configuration $configuration).ingoingtoongoingacrossSemaphore,Sequence,KeyedSemaphore, andKeyedSequence(hasIngoingOperations()->hasOngoingOperations(),getIngoingOperations()->getOngoingOperations(), etc.).features
Psl\Async\CancellationTokenInterfacefor cancelling async operationsPsl\Async\NullCancellationToken- no-op token used as default parameter valuePsl\Async\SignalCancellationToken- manually triggered cancellation viacancel(?Throwable $cause)Psl\Async\TimeoutCancellationToken- auto-cancels after aDuration, replacing the oldDuration $timeoutpatternPsl\Async\LinkedCancellationToken- cancelled when either of two inner tokens is cancelled, useful for combining a request-scoped token with an operation-specific timeoutPsl\Async\Exception\CancelledException- thrown when a cancellation token is triggered; the cause (e.g.,TimeoutException) is attached as$previous. Use$e->getToken()to identify which token triggered the cancellation.Async\sleep()now accepts an optionalCancellationTokenInterfaceparameter, allowing early wake-up on cancellationAwaitable::await()now accepts an optionalCancellationTokenInterfaceparameterSequence::waitFor()andSequence::waitForPending()now accept an optionalCancellationTokenInterfaceparameterSemaphore::waitFor()andSemaphore::waitForPending()now accept an optionalCancellationTokenInterfaceparameterKeyedSequence::waitFor()andKeyedSequence::waitForPending()now accept an optionalCancellationTokenInterfaceparameterKeyedSemaphore::waitFor()andKeyedSemaphore::waitForPending()now accept an optionalCancellationTokenInterfaceparameterSenderInterface::send()andReceiverInterface::receive()now accept an optionalCancellationTokenInterfaceparameterListenerInterface::accept()now accepts an optionalCancellationTokenInterfaceparameterTCP\ListenerInterface::accept()now accepts an optionalCancellationTokenInterfaceparameterUnix\ListenerInterface::accept()now accepts an optionalCancellationTokenInterfaceparameterTLS\Acceptor::accept(),TLS\LazyAcceptor::accept(),TLS\ClientHello::complete(), andTLS\Connector::connect()now accept an optionalCancellationTokenInterfaceparameter - cancellation propagates through the TLS handshakeTLS\TCPConnector::connect()andTLS\connect()now pass the cancellation token through to the TLS handshakePsl\Async\TaskGroupfor running closures concurrently and awaiting them all withdefer()+awaitAll()Psl\Async\WaitGroup, a counter-based synchronization primitive withadd(),done(), andwait()Psl\Encoding\QuotedPrintable\encode(),decode(), andencode_line()for RFC 2045 quoted-printable encoding with configurable line length and line endingPsl\Encoding\EncodedWord\encode()anddecode()for RFC 2047 encoded-word encoding/decoding in MIME headers (B-encoding and Q-encoding with automatic selection)TLS\ListenerInterfaceandTLS\Listener, wrapping anyNetwork\ListenerInterfaceto perform TLS handshakes on accepted connectionsBase64\Variant::Mimefor RFC 2045 MIME Base64 with 76-char line wrapping and CRLF, using constant-time encoding/decodingEncodingReadHandle,DecodingReadHandle,EncodingWriteHandle,DecodingWriteHandle), QuotedPrintable (same 4), and Hex (same 4), bridgingPsl\IOandPsl\Encodingfor transparent encode/decode on read/writePsl\IO\BufferedReadHandleInterface, extendingReadHandleInterfacewithreadByte(),readLine(),readUntil(), andreadUntilBounded()Psl\IO\Readernow implementsBufferedReadHandleInterfaceTCP\ListenConfigurationandTCP\ConnectConfigurationwith immutablewith*builder methodsUnix\ListenConfigurationwith immutablewith*builder methodsUDP\BindConfigurationwith immutablewith*builder methodsSocks\Configurationwith immutablewith*builder methods for proxy host, port, and credentialsTCP\RestrictedListener, wrapping a listener to restrict connections to a set of allowedIP\AddressandCIDR\BlockentriesNetwork\CompositeListener, accepting connections from multiple listeners concurrently through a singleaccept()callURIcomponent - RFC 3986 URI parsing, normalization, reference resolution, and RFC 6570 URI Template expansion (Levels 1–4), with RFC 5952 IPv6 canonical form and RFC 6874 zone identifiersIRIcomponent - RFC 3987 Internationalized Resource Identifier parsing with Unicode support, RFC 3492 Punycode encoding/decoding, and RFC 5891/5892 IDNA 2008 domain name processingURLcomponent - strict URL type with scheme and authority validation, default port stripping for known schemes, and URI/IRI conversionPunycodecomponent - RFC 3492 Punycode encoding and decoding for internationalized domain namesRetryConnectorbackoff sleep now respects cancellation tokens, allowing retry loops to be cancelled during the delayIO\write(),IO\write_line(),IO\write_error(),IO\write_error_line(), andStr\format()no longer pass the message throughsprintf/vsprintfwhen no arguments are given, preventing format string errors when the message contains%charactersmigration guide
Replace
Durationtimeout parameters withTimeoutCancellationToken:For manual cancellation (e.g., cancel all request IO when a client disconnects):
v5.5.0Compare Source
features
Reader::readUntilBounded(string $suffix, int $max_bytes, ?Duration $timeout)method, which reads until a suffix is found, but throwsIO\Exception\OverflowExceptionif the content exceeds$max_bytesbefore the suffix is encountered - #620 - by @azjezzIO\Exception\OverflowExceptionexception class - #620 - by @azjezzType\json_decoded()type for transparent JSON string coercion - #619 by @veeweeType\nullish()type for optional-and-nullable shape fields - #618 by @veeweev5.4.0Compare Source
features
backlogparameter toTCP\listen()for configuring the pending connection queue size - #617 - by @azjezzother
v5.3.0Compare Source
features
IO\spool()for memory-backed handles that spill to diskv5.2.0Compare Source
features
IPcomponent with immutable, binary-backedAddressvalue object andFamilyenumCIDR\Block::contains()now acceptsstring|IP\Addressv5.1.0Compare Source
features
TLS\TCPConnectorfor poolable TLS connectionsTLS\StreamInterfacenow extendsTCP\StreamInterface, enabling TLS streams to be used withTCP\SocketPoolInterfacev5.0.0Compare Source
breaking changes
Network,TCP,Unix) - #585 by @azjezzPsl\Shellinternals refactored; dead code removed - #596 by @azjezzPsl\Env\temp_dir()now always returns a canonicalized path - #599 by @azjezzfeatures
Ansicomponent - #588 by @azjezzTerminalcomponent - #589 by @azjezzProcesscomponent - #578 by @azjezzBinarycomponent - #598 by @azjezzInteroperabilitycomponent - #582 by @azjezzTLScomponent - #585 by @azjezzUDPcomponent - #585 by @azjezzCIDRcomponent - #585 by @azjezzSockscomponent - #585 by @azjezzPeriod,Interval,TemporalAmountInterface- #595 by @azjezzIO\copy()andIO\copy_bidirectional()- #585 by @azjezzVec\flatten()- #583 by @azjezzCryptocomponent with symmetric/asymmetric encryption, signing, AEAD, KDF, HKDF, key exchange, and stream ciphers - #607 by @azjezzfixes, and improvements
range()for float precision - #581 by @azjezzcreate_temporary_file- #580, #597 by @azjezzother
v4.3.0Compare Source
features
Eithertype - #572 by @simPoduuidtype - #568 by @gsteelfixes, and improvements
v4.2.1Compare Source
fixes, and improvements
seek($offset)type - #552 by @azjezzv4.2.0Compare Source
other
v4.1.0Compare Source
features
Graphcomponent with directed and undirected graph support - #547 by @azjezzTreecomponent for hierarchical data structures - #546 by @azjezzother
maketojust- #544 by @azjezzv4.0.1Compare Source
fixes, and improvements
@vartags from constants - #533 by @azjezzv4.0.0Compare Source
breaking changes
Psl\Result\wrap()no longer unwraps nested results - #531 by @azjezzPsl\Collection\Map,Psl\Collection\MutableMap,Psl\Collection\Set, andPsl\Collection\MutableSetnow have a more natural JSON serialization - #512 by @josh-raiPsl\IOandPsl\Filenamespaces have been removed to simplify the component's hierarchy - #518 by @azjezzPsl\sequence()function has been removed - #519 by @azjezzfeatures
containertype - #513 by @azjezzint_rangetype - #510 by @george-steelalways_asserttype - #522 by @azjezzsearch_with_keys_optandsearch_with_keysfunctions - #490 by @simon-podlipskyfixes, and improvements
IterandRegex- #528 by @azjezzother
psalmtomago- #527 by @azjezzConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.