All Notable changes to bakame/http-strucured-fields
will be documented in this file.
2.0.0 - 2024-12-12
Bytes
class replace theByteSequence
class.Ietf
enum.- methods
fromRFC9651
,fromRfc8941
,toRFC9651
,toRfc8941
, to ease parsing/serializing Structured Fields. - method
equals
, to allow comparison of Structured Fields DataType. - method
when
to allow conditional addition to Structured Field DataType. - methods
map
,reduce
,filter
,sort
to all containers classes. - methods
isEmpty
,isNotEmpty
to all containers classes. - methods
getByIndex
,hasIndices
,indices
to all containers classes. - methods
getByKey
,hasKeys
,indexByKey
,keyByIndex
,toAssociative
to all ordered map classes (Dictionary
andParameters
). StructuredFieldProvider
interfaceItem::parameterByKey
andItem::parameterByIndex
methods to mirror the new public API.- All
Item
named constructors have atry
equivalent which returnnull
instead of throwing an exception Parameters::valueByKey
Parameters::valueByIndex
- Added a validation mechanism to facilitate
Item
andParameters
validation against field definition. Dictionary::mergeParametersByPairs
,Dictionary::mergeParametersByAssociative
Parameters::mergeParametersByPairs
,Parameters::mergeParametersByAssociative
- Fixed
Type
inference. - Container
IteratorAggregate
interface always uses theindex
as key; it uses to be thekey
for Ordered Map. append
,prepend
andadd
methods now acceptnull
as value which result in doing nothing for consistency.
- None
- Removed the
Parser
from the public API. MemberContainer
,MemberList
,MemberOrderedMap
, and all the Parser related methods.- All deprecated methods during the version 1 cycle.
Item::parameter
replaced byItem::parameterByKey
Parameters:get
replaced byParameters::getByKey
Parameters:pair
replaced byParameters::getByIndex
Dictionary:get
replaced byDictionary::getByKey
Dictionary:pair
replaced byDictionary::getByIndex
OuterList:remove
replaced byOuterList:removeByIndices
InnerList:remove
replaced byInnerList:removeByIndices
::hasNoMember
and::hasMembers
methods have been replaced byisEmpty
andisNotEmpty
on containersDictionary::toPairs
andParameters::toPairs
ByteSequence
class replaced byBytes
classDataType::create
method use a specific DataType class instead.Value
internal class.
1.3.0 - 2024-01-05
DataType::create
returns anStructuredField
instance from aniterable
construct.DataType::serialize
returns the HTTP string representation of a structured field.
InnerList::fromPair
should not throw if the pair is empty because an inner list can be empty.
DataType::build
useDataType::serialize
instead.
- None
1.2.2 - 2024-01-01
- None
Type::ByteSequence
value is renamed frombytesequence
tobinary
to comply with the RFC.
- None
- None
1.2.1 - 2024-01-01
- None
Item::new
is fixed to better handle parsing with parameters values.
- None
- None
1.2.0 - 2023-12-30
- Support for the
DisplayString
type ByteSequence::tryFromEncoded
Token::tryFromString
OuterList::fromPairs
DataType
enumType::fromVariable
Type::tryFromVariable
Parser::new
to simplify parser usage.
- Tests file moved under the
/tests
directory - Fix
Type::tryFromVariable
to correctly detect string type derivative. - the
Type
enum is now a baked string Enum.
Type::fromValue
useType::fromVariable
insteadType::tryFromValue
useType::tryFromVariable
instead
- None
1.1.0 - 2023-05-07
OrederedMap::push
OrederedMap::unshift
OrederedMap::insert
OrederedMap::replace
OrederedMap::removeByIndices
OrederedMap::removeByKeys
ParameterAccess::pushParanmeters
ParameterAccess::unshiftParamaters
ParameterAccess::insertParamaters
ParameterAccess::replaceParamater
ParameterAccess::withoutParametersByKeys
ParameterAccess::withoutParametersByIndices
ItemParser
interface to return an array representation of a Structured Field as an item.ParametersParser
interface to return an array representation of a Structured Field parameter container.DictionaryParser
interface to return an array representation of a Structured Field dictionary container.ListParser
interface to return an array representation of a Structured Field list container.InnerListParser
interface to return an array representation of a Structured Field inner list container.ValueParser
interface to return a PHP type from a Structured Field Value string representation.Parser
is now part of the public APIItem::fromHttpValue
now has an optional second parameter to shift the parser implementation usedParameters::fromHttpValue
now has an optional second parameter to shift the parser implementation usedDictionary::fromHttpValue
now has an optional second parameter to shift the parser implementation usedOuterList::fromHttpValue
now has an optional second parameter to shift the parser implementation usedInnerList::fromHttpValue
now has an optional second parameter to shift the parser implementation used
Parameters::remove
also removes parameters per indicesType::fromValue
throws anInvalidArgument
exception.Type::fromValue
andType::tryFromValue
should only check the PHP variable type and not take into account the variable value.
ParameterAccess::withoutParameters
replaced byParameterAccess::withoutParametersBykeys
- None
1.0.1 - 2023-04-20
- None
Parser
no longer instantiate anItem
objectParser
internal Date generation simplifiedValue
float serialization simplifiedOuterList::fromHttpValue
,InnerList::fromHttpValue
,Dictionnary::fromHttpValue
rewritten to improve decoupling fromParser
- Adding missing interoperability test for the
Token
type
- None
- None
1.0.0 - 2023-04-16
InnerList::fromPair
to improve InnerList public API;InnerList::toPair
to improve InnerList public API;InnerList::fromAssociative
to improve InnerList public API;Item
implements theValueAccess
interface;Item::toPair
to complementItem::fromPair
;Item::fromDate
to improve and complete the Item Date public API;Item::fromAssociative
to improve Item public API;Item::fromString
to improve Item public API;Token::toString
to return the string representation of the token.Item::new
,Parameters::new
,Dictionary::new
,InnerList::new
andOuterList::new
to return a new instance
- Improve annotation using
@phpstan-type
Value
internal class to improve Item public API;- [BC Break]
::fromAssociative
and::fromPair
the$parameters
argument is now required; - [BC Break]
MemberOrderedMap
instances can no longer be added toDictionary
orOuterList
instances. - RFC restriction on eligible container members.
- Exception normalization.
- None
- [BC Break] Remove
Stringable
automatically converted into a string type. - [BC Break]
InnerList::fromPairParameters
useInnerList::fromPair
instead. - [BC Break]
InnerList::fromAssociativeParameters
useInnerList::fromAssociative
instead. - [BC Break]
Value
interface use a combination ofValueAccess
andParameterAccess
instead. - [BC Break]
Token::value
is no longer public useToken::toString
instead. - [BC Break]
Item::from
is removed useItem::fromAssociative
orItem::new
instead. - [BC Break]
Parameters::create
is removed useParameters::new
instead. - [BC Break]
InnerList::from
is removed useInnerList::new
instead. - [BC Break]
OuterList::create
is removed useOuterList::new
instead.
0.8.0 - 2023-03-12
Item::fromTimestamp
,Item::fromDateFormat
,Item::fromDateString
to improve item instantiation with dates.ParameterAccess::parameter
to ease parameter members value access.InnerList::fromAssociativeParameters
,InnerList::fromPairParameters
to improve item instantiation with parameters.- [BC Break]
ParameterAccess::withoutAllParameters
is renamedParameterAccess::withoutAnyParameter
. - [BC Break]
OrderedList
is renamedOuterList
. - [BC Break]
MemberContainer::remove
methods get added to the interface. - [BC Break]
MemberContainer::keys
method added to the interface.
- Test suite migrated to PHPUnit 10
- Adding Benchmark test with PHPBench
- Improve Collection immutability with method changes
- [BC Break]
ParameterAccess
interface signature updated to use theValue
interface instead of theItem
implementation. - [BC Break]
MemberList::remove
,MemberOrderedMap::remove
andMemberOrderedMap::keys
methods are moved to their parent interface. - [BC Break] Renamed arguments for indexation for normalization
- [BC Break]
MemberContainer::has
andMemberOrderedMap::hasPair
methods accept a variadic argument. All submitted indexes/keys should be present for the method to returntrue
- None
- [BC Break]
OrderedList
is removed, useOuterList
instead. - [BC Break]
ParameterAccess::withoutAllParameters
is removed, useParameterAccess::withoutAnyParameters
instead. - [BC Break] remove the
$parameters
argument from allItem
named constructors except fromItem::from
. - [BC Break] remove
InnerList::fromList
, useInnerList::fromAssociativeParameters
orInnerList::fromPairParameters
instead. - [BC Break] remove
OuterList::fromList
, useOuterList::from
instead.
0.7.0 - 2023-02-06
- Support for
Stringable
instances added toItem::from
, the instances will be converted to the string data type. - Support for the upcoming
Date
data type inItem
represented as aDateTimeImmutable
object. (see https://httpwg.org/http-extensions/draft-ietf-httpbis-sfbis.html) ParameterAccess
interface with new methods to ease parameter members modification.Parameter::create
named constructor to create a new instance without any parameter.Dictionnary::create
named constructor to create a new instance without any parameter.Type
Enum of all supported datatype.Value
Interface is introduced withItem
being the only available implementation.MemberOrderedMap::add
andMemberOrderedMap::remove
methodsByteSequence::equals
andToken::equals
to easily compare type instances.StructuredField
extends theStringable
interfaceForbiddenOperation
exception to reports invalid operation on immutable value objects.
Item::fromHttpValue
now internally uses theParser
previously it was using its own parsing rules.Parameters::fromHttpValue
now internally uses theParser
previously it was using its own parsing rules.- [BC Break]
::fromAssociative
,::fromList
,::fromPairs
methods require iterable arguments without default value. - [BC Break]
Item::value
method returns the Item (returns value can befloat|int|string|bool|ByteSequence|DateTimeImmutable|Token
). - [BC Break]
InnerList::parameters
is no longer accessible as a public readonly property. - [BC Break] Modifying container instances with
ArrayAccess
modifying methods is forbidden and will trigger aForbiddenOperation
exception.
- None
- [BC Break]
ForbiddenStateError
exception is removed; theInvalidArgument
exception is used instead. - [BC Break]
Item::is*
methods are removed; the enumType
is used instead. - [BC Break]
MemberContainer::clear
method is removed without replacement. - [BC Break]
MemberOrderedMap::set
andMemberOrderedMap::delete
methods removed; useMemberOrderedMap::add
andMemberOrderedMap::remove
instead
0.6.0 - 2022-11-12
- The
Container
,MemberList
,MemberOrderedMap
,ParameterAccess
interfaces. OrderedList
andInnerList
implement theMemberList
interface.Parameters
andDictionnary
implement theMemberOrderedMap
interface.- The
InvalidArgument
exception. Token::value
is a readonly property.Item::value
method returns the decoded value of an Item (returns value can befloat|int|string|bool
).Item::fromToken
,Item::fromDecodedByteSequence
,Item::fromEncodedByteSequence
to easeItem
creation.Item::withValue
to easeItem
value update.Parser
methods also acceptsStringable
objects.
- None.
- None
- [BC Break]
__set_state
implementation in all objects. - [BC Break]
Token
no longer implements theStructuredField
interface. - [BC Break]
Token::toHttpValue
is removed; use theItem
class to serialize aToken
. - [BC Break]
Token::toString
is removed use its readonly property insteadToken::value
. - [BC Break]
ByteSequence
no longer implements theStructuredField
interface. - [BC Break]
ByteSequence::toHttpValue
is removed; use theItem
class to serialize aByteSequence
. - [BC Break]
::sanitize
method is removed useParameters::clear
method instead if needed. - [BC Break]
isEmpty
method is removed usehasMembers
method instead. - [BC Break]
Parameters::value
useItem::value
method instead. - [BC Break]
Parameters::values
useParameters::getIterator
instead. - [BC Break]
Item::value
public readonly property useItem::value
method instead. - [BC Break]
Item::parameters
public readonly property useItem::parameters
method instead. - [BC Break]
InnerList::parameters
public readonly property useInnerList::parameters
method instead.
0.5.0 - 2022-05-13
Item::fromPair
named constructor to create a new instance from a pair expressed as an array list with two values.Parameters::sanitize
ensure the container always contains only Bare Items.InnerList::sanitize
ensure the list is without gaps and callsParameters::sanitize
.OrderedList::sanitize
ensure the list is without gaps and callsParameters::sanitize
.Dictionnary::sanitize
ensure the list is without gaps and callsParameters::sanitize
.Item::sanitize
callsParameters::sanitize
.autoload.php
script to allow non composer application to load the packageOrderedList
andInnerList
now implements the PHPArrayAccess
interface.
InnerList::fromHttpValue
accepts Optional White Spaces at the start of its textual representation.Parameters::fromHttpValue
accepts Optional White Spaces at the start of its textual representation.Item::fromHttpValue
bugfix parsing Token data type.
- None
- [BC Break]
InnerList
no longer re-index its content replaced byInnerList::sanitize
to force re-indexation. - [BC Break]
OrdererList
no longer re-index its content replaced byInnerList::sanitize
to force re-indexation.
0.4.0 - 2022-03-27
Dictionary::mergeAssociative
andDictionary::mergePairs
to allow merging with associative structuresParameters::mergeAssociative
andParameters::mergePairs
to allow merging with key-value pairs structures
- All containers
Dictionary
,InnerList
,OrderedList
,Parameters
modifying methods are made chainable. Parser
only returnsarray
's of items or bare items value.- All
Parameters
getters checks for bare items validity. ForbiddenStateError
extends SPLLogicException
instead ofUnexpectedValueException
- None
- [BC Break]
Dictionary::merge
replaced byDictionary::mergeAssociative
- [BC Break]
Parameters::merge
replaced byParameters::mergeAssociative
0.3.0 - 2022-03-21
InnerList::fromHttpValue
named constructor to make the public API consistent for all VOs
- None
- None
- None
0.2.0 - 2022-03-20
Item::value
is a public readonly property that gives access to the item valueItem::parameters
is a public readonly property that gives access to the item parametersInnerList::parameters
is a public readonly property that gives access to the list parametersOrderedList::from
named constructor which accepts a variadic list of members itemsToken::fromString
named constructor which acceptsstring
andStringable
objectParameter::values
returns an array of all the values contained inside theParameters
instance- [BC Break]
ForbiddenStateError
to replaceSerializationError
- [BC Break]
InnerList::fromList
to replaceInnerList::fromMembers
- [BC Break]
OrderedList::fromList
to replaceOrderedList::fromMembers
- [BC Break]
Parameter::value
to replaceInnerList::parameter
andItem::parameter
ByteSequence::fromDecoded
named constructor also accepts aStringable
objectByteSequence::fromEncoded
named constructor also accepts aStringable
objectDictionary::merge
accepts any iterable that can be accepted byDictionary::fromAssociative
as variadic parameterParameter::merge
accepts any iterable that can be accepted byParameter::fromAssociative
as variadic parameter- [BC Break]
OrderedList::__construct
is made private useOrderedList::from
instead - [BC Break]
InnerList::__construct
is made private useInnerList::fromList
instead - [BC Break]
Token::__construct
is made private useToken::fromString
instead - [BC Break]
Parameter::get
,Parameter::value
,Parameter::pair
will throwForbiddenStateError
if the BareItem is in invalid state.
- None
- [BC Break]
InnerList::fromMembers
replaced byInnerList::fromList
- [BC Break]
OrderedList::fromMembers
replaced byOrderedList::fromList
- [BC Break]
Item::parameter
replaced byParameter::value
- [BC Break]
InnerList::parameter
replaced byParameter::value
- [BC Break]
SupportsParameters
interface is removed without replacement - [BC Break]
Item::value()
replaced byItem::value
public readonly property - [BC Break]
Item::parameters()
replaced byItem::parameters
public readonly property - [BC Break]
InnerList::parameters()
replaced byInnerList::parameters
public readonly property - [BC Break]
InnerList::merge()
useInnerList::push()
orInnerList::unshift()
instead - [BC Break]
OrderedList::merge()
useOrderedList::push()
orOrderedList::unshift()
instead - [BC Break]
SerializationError
useForbiddenStateError
instead
0.1.0 - 2022-03-18
Initial release!