@@ -12,6 +12,98 @@ The format is based on [Keep a Changelog][], and this project adheres to
1212[ Keep a Changelog ] : https://keepachangelog.com/en/1.1.0/
1313[ Semantic Versioning ] : https://semver.org/spec/v2.0.0.html
1414
15+ ## [ v0.99.14] - 2024-04-11
16+
17+ ### Added
18+
19+ - Add optional ` $withResourceUsage ` parameter to ` Console::summary() `
20+ - Add optional ` $delete ` parameter to ` File::pruneDir() `
21+ - Add ` Arr::set() ` , ` Arr::unset() ` , ` Arr::upperFirst() `
22+ - Add ` File::getLines() ` , ` File::isStream() ` , ` File::maybeWrite() ` , ` File::readAll() ` , ` File::writeAll() `
23+ - Add ` Get::closure() `
24+ - Add ` HasImmutableProperties::withoutProperty() `
25+ - Add ` Regex::INVISIBLE_CHAR `
26+ - Add ` Test::isAsciiString() `
27+ - Add ` HttpHeaders ` methods ` get{First,Last,One}HeaderLine() ` , ` hasLastLine() `
28+ - Add ` HttpMessage::getHttpPayload() ` , ` HttpMessage::__toString() `
29+ - Add ` Stream::copyToStream() ` , ` Stream::copyToString() `
30+ - Add ` HttpMultipartStream `
31+ - Add ` UploadedFile ` (PSR-7 implementation)
32+ - Add ` Uri::isAuthorityForm() `
33+ - Add ` Http::getQuotedString() ` and ` Http::escapeQuotedString() ` (new class)
34+
35+ ### Changed
36+
37+ - Replace ` HttpResponse ` and ` HttpServerRequest ` with PSR-7 implementations
38+ - In ` Uri ` :
39+ - Disable strict URI parsing by default
40+ - Don't normalise URIs implicitly
41+ - Optionally replace empty paths with "/" in HTTP URIs
42+ - Optionally collapse multiple slashes in URIs
43+ - Make ` Uri::parse() ` fully compatible with ` parse_url() `
44+ - Extend ` JsonSerializable ` from ` HttpMessageInterface ` and scaffold HAR-compliant output
45+ - Return HAR header objects from ` HttpHeadersInterface::jsonSerialize() `
46+ - Refactor ` HttpServer ` for API consistency and more robust request handling
47+ - Rename ` Stream ` to ` HttpStream `
48+ - Don't cache stream size in ` HttpStream `
49+ - Don't rewind or truncate streams in ` File::copy() `
50+ - Remove optional recursion from ` File::deleteDir() `
51+ - Rename ` File::getStream() ` to ` File::maybeOpen() ` and make public
52+ - Make ` File::checkEof() ` public
53+ - Move ` File::guessIndentation() ` to ` Indentation::from() `
54+ - Rename ` File ` methods:
55+ - ` existing() ` -> ` closestExisting() `
56+ - ` readCsv() ` -> ` getCsv() `
57+ - ` getCwd() ` -> ` getcwd() `
58+ - ` getSeekable() ` -> ` getSeekableStream() `
59+ - ` isPhp() ` -> ` hasPhp() `
60+ - ` creatable() ` -> ` isCreatable() `
61+ - ` isSeekable() ` -> ` isSeekableStream() `
62+ - ` resolve() ` -> ` resolvePath() `
63+ - ` dir() ` -> ` sanitiseDir() `
64+ - ` putContents() ` -> ` writeContents() `
65+ - ` fputcsv() ` -> ` writeCsvLine() `
66+ - Rename ` Test ` methods:
67+ - ` isBoolValue() ` -> ` isBoolean() `
68+ - ` isIntValue() ` -> ` isInteger() `
69+ - ` isFloatValue() ` -> ` isFloat() `
70+ - ` isPhpReservedWord() ` -> ` isBuiltinType() `
71+ - In ` Get::code() ` :
72+ - Add ` $constants ` parameter that maps substrings to constant identifiers
73+ - Do not escape CR or LF in multiline mode
74+ - Do not escape UTF-8 leading or continuation bytes
75+ - Always escape control characters
76+ - Escape blank/ignorable characters
77+ - Remove unnecessary backslashes
78+ - In arrays with string and integer keys, suppress numeric keys if they are numbered consecutively from ` 0 `
79+ - Accept ` iterable ` in ` Arr::toIndex() ` and ` Arr::toMap() `
80+ - Remove ` Arr::trimAndImplode() ` in favour of ` Arr::implode() ` with an optional ` $characters ` parameter
81+ - In ` EventDispatcher ` , reject calls to methods other than ` dispatch() ` when a listener provider is given
82+ - Move ` Curler::mimeTypeIs() ` to new ` Http ` utility class and rename to ` mediaTypeIs() `
83+ - In ` Http::mediaTypeIs() ` , support more suffixes (e.g. ` +xml ` ) and improve standards compliance
84+ - Rename ` Str::splitAndTrim() ` to ` Str::split() `
85+ - Merge ` Str::splitAndTrimOutsideBrackets() ` into ` Str::splitOutsideBrackets() `
86+ - Add closure template support to ` Regex::PHPDOC_TYPE `
87+ - In ` PhpDoc ` , recognise ` @template ` syntax ` as <type> ` in addition to ` of <type> `
88+ - Improve unified diff formatting
89+
90+ ### Removed
91+
92+ - Remove ` $lastValueOnly ` parameter from ` HttpHeaders::getHeaderLine() `
93+
94+ ### Fixed
95+
96+ - Fix ` Get::filter() ` issue where keys are URL-decoded
97+ - Fix ` Get::query() ` issue where nested arrays may lose their structure
98+ - Fix issue where ` Process::wait() ` fails after process terminates
99+ - Fix ` HttpRequest ` issue where authority-form request-targets cannot be applied
100+ - In ` HttpRequest ` , accept arbitrary request methods and preserve their original case in all contexts
101+ - In ` HttpHeaders::addLine() ` , reject invalid line folding if ` $strict ` is ` true `
102+
103+ ### Security
104+
105+ - Always ` chmod() ` after ` mkdir() ` in case umask modifies permissions
106+
15107## [ v0.99.13] - 2024-03-19
16108
17109### Added
@@ -2211,6 +2303,7 @@ This is the final release of `lkrms/util`. It is moving to [Salient](https://git
22112303
22122304- Allow `CliOption` value names to contain arbitrary characters
22132305
2306+ [v0.99.14]: https://github.com/salient-labs/toolkit/compare/v0.99.13...v0.99.14
22142307[v0.99.13]: https://github.com/salient-labs/toolkit/compare/v0.99.12...v0.99.13
22152308[v0.99.12]: https://github.com/salient-labs/toolkit/compare/v0.99.11...v0.99.12
22162309[v0.99.11]: https://github.com/salient-labs/toolkit/compare/v0.99.10...v0.99.11
0 commit comments