47 KiB
ramsey/uuid Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased
Added
Changed
Deprecated
Removed
Fixed
Security
4.0.1 - 2020-03-29
Fixed
- Fix collection deserialization errors due to upstream
allowed_classesbeing set tofalse. For details, see ramsey/uuid#303 and ramsey/collection#47.
4.0.0 - 2020-03-22
Added
- Add support for version 6 UUIDs, as defined by http://gh.peabody.io/uuidv6/,
including the static method
Uuid::uuid6(), which returns aNonstandard\UuidV6instance. - Add ability to generate version 2 (DCE Security) UUIDs, including the static
method
Uuid::uuid2(), which returns anRfc4122\UuidV2instance. - Add classes to represent each version of RFC 4122 UUID. When generating new
UUIDs or creating UUIDs from existing strings, bytes, or integers, if the UUID
is an RFC 4122 variant, one of these instances will be returned:
Rfc4122\UuidV1Rfc4122\UuidV2Rfc4122\UuidV3Rfc4122\UuidV4Rfc4122\UuidV5Rfc4122\NilUuid
- Add classes to represent version 6 UUIDs, GUIDs, and nonstandard
(non-RFC 4122 variant) UUIDs:
Nonstandard\UuidV6Guid\GuidNonstandard\Uuid
- Add
Uuid::fromDateTime()to create version 1 UUIDs from instances of\DateTimeInterface. - The
\DateTimeInterfaceinstance returned byUuidInterface::getDateTime()(and nowRfc4122\UuidV1::getDateTime()) now includes microseconds, as specified by the version 1 UUID. - Add
Validator\ValidatorInterfaceandValidator\GenericValidatorto allow flexibility in validating UUIDs/GUIDs.- The default validator continues to validate UUID strings using the same relaxed validation pattern found in the 3.x series of ramsey/uuid.
- Introduce
Rfc4122\Validatorthat may be used for strict validation of RFC 4122 UUID strings. - Add ability to change the default validator used by
UuidthroughFeatureSet::setValidator(). - Add
getValidator()andsetValidator()toUuidFactory.
- Add
Provider\Node\StaticNodeProviderto assist in setting a custom static node value with the multicast bit set for version 1 UUIDs. - Add the following new exceptions:
Exception\BuilderNotFoundException- Thrown to indicate that no suitable UUID builder could be found.Exception\DateTimeException- Thrown to indicate that the PHP DateTime extension encountered an exception/error.Exception\DceSecurityException- Thrown to indicate an exception occurred while dealing with DCE Security (version 2) UUIDs.Exception\InvalidArgumentException- Thrown to indicate that the argument received is not valid. This extends the built-in PHP\InvalidArgumentException, so there should be no BC breaks with ramsey/uuid throwing this exception, if you are catching the PHP exception.Exception\InvalidBytesException- Thrown to indicate that the bytes being operated on are invalid in some way.Exception\NameException- Thrown to indicate that an error occurred while attempting to hash a namespace and name.Exception\NodeException- Throw to indicate that attempting to fetch or create a node ID encountered an error.Exception\RandomSourceException- Thrown to indicate that the source of random data encountered an error.Exception\TimeSourceException- Thrown to indicate that the source of time encountered an error.Exception\UnableToBuildUuidException- Thrown to indicate a builder is unable to build a UUID.
- Introduce a
Builder\FallbackBuilder, used byFeatureSetto help decide whether to return aUuidorNonstandard\Uuidwhen decoding a UUID string or bytes. - Add
Rfc4122\UuidInterfaceto specifically represent RFC 4122 variant UUIDs. - Add
Rfc4122\UuidBuilderto build RFC 4122 variant UUIDs. This replaces the existingBuilder\DefaultUuidBuilder, which is now deprecated. - Introduce
Math\CalculatorInterfacefor representing calculators to perform arithmetic operations on integers. - Depend on brick/math for the
Math\BrickMathCalculator, which is the default calculator used by this library when math cannot be performed in native PHP due to integer size limitations. The calculator is configurable and may be changed, if desired. - Add
Converter\Number\GenericNumberConverterandConverter\Time\GenericTimeConverterwhich will use the calculator provided to convert numbers and time to values for UUIDs. - Introduce
Type\Hexadecimal,Type\Integer,Type\Decimal, andType\Timefor improved type-safety when dealing with arbitrary string values. - Add a
Type\TypeInterfacethat each of the ramsey/uuid types implements. - Add
Fields\FieldsInterfaceandRfc4122\FieldsInterfaceto define field layouts for UUID variants. The implementationsRfc4122\Fields,Guid\Fields, andNonstandard\Fieldsstore the 16-byte, binary string representation of the UUID internally, and these manage conversion of the binary string into the hexadecimal field values. - Introduce
Builder\BuilderCollectionandProvider\Node\NodeProviderCollection. These are typed collections for providing builders and node providers toBuilder\FallbackBuilderandProvider\Node\FallbackNodeProvider, respectively. - Add
Generator\NameGeneratorInterfaceto support alternate methods of generating bytes for version 3 and version 5 name-based UUID. By default, ramsey/uuid uses theGenerator\DefaultNameGenerator, which uses the standard algorithm this library has used since the beginning. You may choose to use the newGenerator\PeclUuidNameGeneratorto make use of the newuuid_generate_md5()anduuid_generate_sha1()functions in ext-uuid version 1.1.0.
Changed
- Set minimum required PHP version to 7.2.
- This library now works on 32-bit and 64-bit systems, with no degradation in functionality.
- By default, the following static methods will now return specific instance
types. This should not cause any BC breaks if typehints target
UuidInterface:Uuid::uuid1returnsRfc4122\UuidV1Uuid::uuid3returnsRfc4122\UuidV3Uuid::uuid4returnsRfc4122\UuidV4Uuid::uuid5returnsRfc4122\UuidV5
- Accept
Type\Hexadecimalfor the$nodeparameter forUuidFactoryInterface::uuid1(). This is in addition to theint|stringtypes already accepted, so there are no BC breaks.Type\Hexadecimalis now the recommended type to pass for$node. - Out of the box,
Uuid::fromString(),Uuid::fromBytes(), andUuid::fromInteger()will now return either anRfc4122\UuidInterfaceinstance or an instance ofNonstandard\Uuid, depending on whether the input contains an RFC 4122 variant UUID with a valid version identifier. Both implementUuidInterface, so BC breaks should not occur if typehints use the interface. - Change
Uuid::getFields()to return an instance ofFields\FieldsInterface. Previously, it returned an array of integer values (on 64-bit systems only). Uuid::getDateTime()now returns an instance of\DateTimeImmutableinstead of\DateTime.- Make the following changes to
UuidInterface:getHex()now returns aType\Hexadecimalinstance.getInteger()now returns aType\Integerinstance. TheType\Integerinstance holds a string representation of a 128-bit integer. You may then use a math library of your choice (bcmath, gmp, etc.) to operate on the string integer.getDateTime()now returns\DateTimeInterfaceinstead of\DateTime.- Add
__toString()method. - Add
getFields()method. It returns an instance ofFields\FieldsInterface.
- Add the following new methods to
UuidFactoryInterface:uuid2()uuid6()fromDateTime()fromInteger()getValidator()
- This library no longer throws generic exceptions. However, this should not
result in BC breaks, since the new exceptions extend from built-in PHP
exceptions that this library previously threw.
Exception\UnsupportedOperationExceptionis now descended from\LogicException. Previously, it descended from\RuntimeException.
- Change required constructor parameters for
Uuid:- Change the first required constructor parameter for
Uuidfromarray $fieldstoRfc4122\FieldsInterface $fields. - Add
Converter\TimeConverterInterface $timeConverteras the fourth required constructor parameter forUuid.
- Change the first required constructor parameter for
- Change the second required parameter of
Builder\UuidBuilderInterface::build()fromarray $fieldstostring $bytes. Rather than accepting an array of hexadecimal strings as UUID fields, thebuild()method now expects a byte string. - Add
Converter\TimeConverterInterface $timeConverteras the second required constructor parameter forRfc4122\UuidBuilder. This also affects the now-deprecatedBuilder\DefaultUuidBuilder, since this class now inherits fromRfc4122\UuidBuilder. - Add
convertTime()method toConverter\TimeConverterInterface. - Add
getTime()method toProvider\TimeProviderInterface. It replaces thecurrentTime()method. Provider\Node\FallbackNodeProvidernow accepts only aProvider\Node\NodeProviderCollectionas its constructor parameter.Provider\Time\FixedTimeProviderno longer accepts an array but accepts onlyType\Timeinstances.Provider\NodeProviderInterface::getNode()now returnsType\Hexadecimalinstead ofstring|false|null.Converter/TimeConverterInterface::calculateTime()now returnsType\Hexadecimalinstead ofarray. The value is the full UUID timestamp value (count of 100-nanosecond intervals since the Gregorian calendar epoch) in hexadecimal format.- Change methods in
NumberConverterInterfaceto accept and return string values instead ofmixed; this simplifies the interface and makes it consistent. Generator\DefaultTimeGeneratorno longer adds the variant and version bits to the bytes it returns. These must be applied to the bytes afterwards.- When encoding to bytes or decoding from bytes,
OrderedTimeCodecnow checks whether the UUID is an RFC 4122 variant, version 1 UUID. If not, it will throw an exception—InvalidArgumentExceptionwhen usingOrderedTimeCodec::encodeBinary()andUnsupportedOperationExceptionwhen usingOrderedTimeCodec::decodeBytes().
Deprecated
The following functionality is deprecated and will be removed in ramsey/uuid 5.0.0.
- The following methods from
UuidInterfaceandUuidare deprecated. Use their counterparts on theRfc4122\FieldsInterfacereturned byUuid::getFields().getClockSeqHiAndReservedHex()getClockSeqLowHex()getClockSequenceHex()getFieldsHex()getNodeHex()getTimeHiAndVersionHex()getTimeLowHex()getTimeMidHex()getTimestampHex()getVariant()getVersion()
- The following methods from
Uuidare deprecated. Use theRfc4122\FieldsInterfaceinstance returned byUuid::getFields()to get theType\Hexadecimalvalue for these fields. You may use the newMath\CalculatorInterface::toIntegerValue()method to convert theType\Hexadecimalinstances to instances ofType\Integer. This library providesMath\BrickMathCalculator, which may be used for this purpose, or you may use the arbitrary-precision arithemetic library of your choice.getClockSeqHiAndReserved()getClockSeqLow()getClockSequence()getNode()getTimeHiAndVersion()getTimeLow()getTimeMid()getTimestamp()
getDateTime()onUuidInterfaceandUuidis deprecated. Use this method only on instances ofRfc4122\UuidV1orNonstandard\UuidV6.getUrn()onUuidInterfaceandUuidis deprecated. It is available onRfc4122\UuidInterfaceand classes that implement it.- The following methods are deprecated and have no direct replacements. However,
you may obtain the same information by calling
UuidInterface::getHex()and splitting the return value in half.UuidInterface::getLeastSignificantBitsHex()UuidInterface::getMostSignificantBitsHex()Uuid::getLeastSignificantBitsHex()Uuid::getMostSignificantBitsHex()Uuid::getLeastSignificantBits()Uuid::getMostSignificantBits()
UuidInterface::getNumberConverter()andUuid::getNumberConverter()are deprecated. There is no alternative recommendation, so plan accordingly.Builder\DefaultUuidBuilderis deprecated; transition toRfc4122\UuidBuilder.Converter\Number\BigNumberConverteris deprecated; transition toConverter\Number\GenericNumberConverter.Converter\Time\BigNumberTimeConverteris deprecated; transition toConverter\Time\GenericTimeConverter.- The classes for representing and generating degraded UUIDs are deprecated.
These are no longer necessary; this library now behaves the same on 32-bit and
64-bit systems.
Builder\DegradedUuidBuilderConverter\Number\DegradedNumberConverterConverter\Time\DegradedTimeConverterDegradedUuid
- The
Uuid::UUID_TYPE_IDENTIFIERconstant is deprecated. UseUuid::UUID_TYPE_DCE_SECURITYinstead. - The
Uuid::VALID_PATTERNconstant is deprecated. UseValidator\GenericValidator::getPattern()orRfc4122\Validator::getPattern()instead.
Removed
- Remove the following bytes generators and recommend
Generator\RandomBytesGeneratoras a suitable replacement:Generator\MtRandGeneratorGenerator\OpenSslGeneratorGenerator\SodiumRandomGenerator
- Remove
Exception\UnsatisfiedDependencyException. This library no longer throws this exception. - Remove the method
Provider\TimeProviderInterface::currentTime(). UseProvider\TimeProviderInterface::getTime()instead.
4.0.0-beta2 - 2020-03-01
Added
- Add missing convenience methods for
Rfc4122\UuidV2. - Add
Provider\Node\StaticNodeProviderto assist in setting a custom static node value with the multicast bit set for version 1 UUIDs.
Changed
Provider\NodeProviderInterface::getNode()now returnsType\Hexadecimalinstead ofstring|false|null.
4.0.0-beta1 - 2020-02-27
Added
- Add
ValidatorInterface::getPattern()to return the regular expression pattern used by the validator. - Add
v6()helper function for version 6 UUIDs.
Changed
- Set the pattern constants on validators as
private. Use thegetPattern()method instead. - Change the
$nodeparameter forUuidFactoryInterface::uuid6()to acceptnullorType\Hexadecimal. - Accept
Type\Hexadecimalfor the$nodeparameter forUuidFactoryInterface::uuid1(). This is in addition to theint|stringtypes already accepted, so there are no BC breaks.Type\Hexadecimalis now the recommended type to pass for$node.
Removed
- Remove
currentTime()method fromProvider\Time\FixedTimeProviderandProvider\Time\SystemTimeProvider; it had previously been removed fromProvider\TimeProviderInterface.
4.0.0-alpha5 - 2020-02-23
Added
- Introduce
Builder\BuilderCollectionandProvider\Node\NodeProviderCollection.
Changed
Builder\FallbackBuildernow accepts only aBuilder\BuilderCollectionas its constructor parameter.Provider\Node\FallbackNodeProvidernow accepts only aProvider\Node\NodeProviderCollectionas its constructor parameter.Provider\Time\FixedTimeProviderno longer accepts an array but accepts onlyType\Timeinstances.
4.0.0-alpha4 - 2020-02-23
Added
- Add a
Type\TypeInterfacethat each of the ramsey/uuid types implements. - Support version 6 UUIDs; see http://gh.peabody.io/uuidv6/.
Changed
- Rename
Type\IntegerValuetoType\Integer. It was originally namedIntegerValuebecause static analysis seesIntegerin docblock annotations and treats it as the nativeinttype.Integeris not a reserved word in PHP, so it should be namedIntegerfor consistency with other types in this library. When using it, a class alias prevents static analysis from complaining. - Mark
Guid\GuidandNonstandard\Uuidclasses asfinal. - Add
uuid6()method toUuidFactoryInterface.
Deprecated
Uuid::UUID_TYPE_IDENTIFIERis deprecated. UseUuid::UUID_TYPE_DCE_SECURITYinstead.Uuid::VALID_PATTERNis deprecated. UseValidator\GenericValidator::VALID_PATTERNinstead.
4.0.0-alpha3 - 2020-02-21
Fixed
- Fix microsecond rounding error on 32-bit systems.
4.0.0-alpha2 - 2020-02-21
Added
- Add
Uuid::fromDateTime()to create version 1 UUIDs from instances of\DateTimeInterface. - Add
Generator\NameGeneratorInterfaceto support alternate methods of generating bytes for version 3 and version 5 name-based UUID. By default, ramsey/uuid uses theGenerator\DefaultNameGenerator, which uses the standard algorithm this library has used since the beginning. You may choose to use the newGenerator\PeclUuidNameGeneratorto make use of the newuuid_generate_md5()anduuid_generate_sha1()functions in ext-uuid version 1.1.0.
Changed
- Add
fromDateTime()method toUuidFactoryInterface. - Change
UuidInterface::getHex()to return aRamsey\Uuid\Type\Hexadecimalinstance. - Change
UuidInterface::getInteger()to return aRamsey\Uuid\Type\IntegerValueinstance.
Fixed
- Round microseconds to six digits when getting DateTime from v1 UUIDs. This circumvents a needless exception for an otherwise valid time-based UUID.
4.0.0-alpha1 - 2020-01-22
Added
- Add
Validator\ValidatorInterfaceandValidator\GenericValidatorto allow flexibility in validating UUIDs/GUIDs.- Add ability to change the default validator used by
UuidthroughFeatureSet::setValidator(). - Add
getValidator()andsetValidator()toUuidFactory.
- Add ability to change the default validator used by
- Add an internal
InvalidArgumentExceptionthat descends from the built-in PHP\InvalidArgumentException. All places that used to throw\InvalidArgumentExceptionnow throwRamsey\Uuid\Exception\InvalidArgumentException. This should not cause any BC breaks, however. - Add an internal
DateTimeExceptionthat descends from the built-in PHP\RuntimeException.Uuid::getDateTime()may throw this exception if\DateTimeImmutablethrows an error or exception. - Add
RandomSourceExceptionthat descends from the built-in PHP\RuntimeException.DefaultTimeGenerator,RandomBytesGenerator, andRandomNodeProvidermay throw this exception ifrandom_bytes()orrandom_int()throw an error or exception. - Add
Fields\FieldsInterfaceandRfc4122\FieldsInterfaceto define field layouts for UUID variants. The implementationsRfc4122\Fields,Guid\Fields, andNonstandard\Fieldsstore the 16-byte, binary string representation of the UUID internally, and these manage conversion of the binary string into the hexadecimal field values. - Add
Rfc4122\UuidInterfaceto specifically represent RFC 4122 variant UUIDs. - Add classes to represent each version of RFC 4122 UUID. When generating new
UUIDs or creating UUIDs from existing strings, bytes, or integers, if the UUID
is an RFC 4122 variant, one of these instances will be returned:
Rfc4122\UuidV1Rfc4122\UuidV2Rfc4122\UuidV3Rfc4122\UuidV4Rfc4122\UuidV5Rfc4122\NilUuid
- Add
Rfc4122\UuidBuilderto build RFC 4122 variant UUIDs. This replaces the existingBuilder\DefaultUuidBuilder, which is now deprecated. - Add ability to generate version 2 (DCE Security) UUIDs, including the static
method
Uuid::uuid2(), which returns anRfc4122\UuidV2instance. - Add classes to represent GUIDs and nonstandard (non-RFC 4122 variant) UUIDs:
Guid\GuidNonstandard\Uuid.
- Introduce a
Builder\FallbackBuilder, used byFeatureSetto help decide whether to return aUuidorNonstandard\Uuidwhen decoding a UUID string or bytes. - Introduce
Type\Hexadecimal,Type\IntegerValue, andType\Timefor improved type-safety when dealing with arbitrary string values. - Introduce
Math\CalculatorInterfacefor representing calculators to perform arithmetic operations on integers. - Depend on brick/math for the
Math\BrickMathCalculator, which is the default calculator used by this library when math cannot be performed in native PHP due to integer size limitations. The calculator is configurable and may be changed, if desired. - Add
Converter\Number\GenericNumberConverterandConverter\Time\GenericTimeConverterwhich will use the calculator provided to convert numbers and time to values for UUIDs. - The
\DateTimeInterfaceinstance returned byUuidInterface::getDateTime()(and nowRfc4122\UuidV1::getDateTime()) now includes microseconds, as specified by the version 1 UUID.
Changed
- Set minimum required PHP version to 7.2.
- Add
__toString()method toUuidInterface. - The
UuidInterface::getDateTime()method now specifies\DateTimeInterfaceas the return value, rather than\DateTime;Uuid::getDateTime()now returns an instance of\DateTimeImmutableinstead of\DateTime. - Add
getFields()method toUuidInterface. - Add
getValidator()method toUuidFactoryInterface. - Add
uuid2()method toUuidFactoryInterface. - Add
convertTime()method toConverter\TimeConverterInterface. - Add
getTime()method toProvider\TimeProviderInterface. - Change
Uuid::getFields()to return an instance ofFields\FieldsInterface. Previously, it returned an array of integer values (on 64-bit systems only). - Change the first required constructor parameter for
Uuidfromarray $fieldstoRfc4122\FieldsInterface $fields. - Introduce
Converter\TimeConverterInterface $timeConverteras fourth required constructor parameter forUuidand second required constructor parameter forBuilder\DefaultUuidBuilder. - Change
UuidInterface::getInteger()to always return astringvalue instead ofmixed. This is a string representation of a 128-bit integer. You may then use a math library of your choice (bcmath, gmp, etc.) to operate on the string integer. - Change the second required parameter of
Builder\UuidBuilderInterface::build()fromarray $fieldstostring $bytes. Rather than accepting an array of hexadecimal strings as UUID fields, thebuild()method now expects a byte string. Generator\DefaultTimeGeneratorno longer adds the variant and version bits to the bytes it returns. These must be applied to the bytes afterwards.Converter/TimeConverterInterface::calculateTime()now returnsType\Hexadecimalinstead ofarray. The value is the full UUID timestamp value (count of 100-nanosecond intervals since the Gregorian calendar epoch) in hexadecimal format.- Change methods in converter interfaces to accept and return string values
instead of
mixed; this simplifies the interface and makes it consistent:NumberConverterInterface::fromHex(string $hex): stringNumberConverterInterface::toHex(string $number): stringTimeConverterInterface::calculateTime(string $seconds, string $microseconds): array
UnsupportedOperationExceptionis now descended from\LogicException. Previously, it descended from\RuntimeException.- When encoding to bytes or decoding from bytes,
OrderedTimeCodecnow checks whether the UUID is an RFC 4122 variant, version 1 UUID. If not, it will throw an exception—InvalidArgumentExceptionwhen usingOrderedTimeCodec::encodeBinary()andUnsupportedOperationExceptionwhen usingOrderedTimeCodec::decodeBytes(). - Out of the box,
Uuid::fromString(),Uuid::fromBytes(), andUuid::fromInteger()will now return either anRfc4122\UuidInterfaceinstance or an instance ofNonstandard\Uuid, depending on whether the input contains an RFC 4122 variant UUID with a valid version identifier. Both implementUuidInterface, so BC breaks should not occur if typehints use the interface. - By default, the following static methods will now return the specific instance
types. This should not cause any BC breaks if typehints target
UuidInterface:Uuid::uuid1returnsRfc4122\UuidV1Uuid::uuid3returnsRfc4122\UuidV3Uuid::uuid4returnsRfc4122\UuidV4Uuid::uuid5returnsRfc4122\UuidV5
Deprecated
The following functionality is deprecated and will be removed in ramsey/uuid 5.0.0.
- The following methods from
UuidInterfaceandUuidare deprecated. Use their counterparts on theRfc4122\FieldsInterfacereturned byUuid::getFields().getClockSeqHiAndReservedHex()getClockSeqLowHex()getClockSequenceHex()getFieldsHex()getNodeHex()getTimeHiAndVersionHex()getTimeLowHex()getTimeMidHex()getTimestampHex()getVariant()getVersion()
- The following methods from
Uuidare deprecated. Use theRfc4122\FieldsInterfaceinstance returned byUuid::getFields()to get theType\Hexadecimalvalue for these fields, and then use the arbitrary-precision arithmetic library of your choice to convert them to string integers.getClockSeqHiAndReserved()getClockSeqLow()getClockSequence()getNode()getTimeHiAndVersion()getTimeLow()getTimeMid()getTimestamp()
getDateTime()onUuidInterfaceandUuidis deprecated. Use this method only on instances ofRfc4122\UuidV1.getUrn()onUuidInterfaceandUuidis deprecated. It is available onRfc4122\UuidInterfaceand classes that implement it.- The following methods are deprecated and have no direct replacements. However,
you may obtain the same information by calling
UuidInterface::getHex()and splitting the return value in half.UuidInterface::getLeastSignificantBitsHex()UuidInterface::getMostSignificantBitsHex()Uuid::getLeastSignificantBitsHex()Uuid::getMostSignificantBitsHex()Uuid::getLeastSignificantBits()Uuid::getMostSignificantBits()
UuidInterface::getNumberConverter()andUuid::getNumberConverter()are deprecated. There is no alternative recommendation, so plan accordingly.Builder\DefaultUuidBuilderis deprecated; transition toRfc4122\UuidBuilder.Converter\Number\BigNumberConverteris deprecated; transition toConverter\Number\GenericNumberConverter.Converter\Time\BigNumberTimeConverteris deprecated; transition toConverter\Time\GenericTimeConverter.Provider\TimeProviderInterface::currentTime()is deprecated; transition to thegetTimestamp()method on the same interface.- The classes for representing and generating degraded UUIDs are deprecated.
These are no longer necessary; this library now behaves the same on 32-bit and
64-bit PHP.
Builder\DegradedUuidBuilderConverter\Number\DegradedNumberConverterConverter\Time\DegradedTimeConverterDegradedUuid
Removed
- Remove the following bytes generators and recommend
Generator\RandomBytesGeneratoras a suitable replacement:Generator\MtRandGeneratorGenerator\OpenSslGeneratorGenerator\SodiumRandomGenerator
- Remove
Exception\UnsatisfiedDependencyException. This library no longer throws this exception.
3.9.3 - 2020-02-20
Fixed
-
For v1 UUIDs, round down for timestamps so that microseconds do not bump the timestamp to the next second.
As an example, consider the case of timestamp
1with600000microseconds (1.600000). This is the first second after midnight on January 1, 1970, UTC. Previous versions of this library had a bug that would round this to2, so the rendered time was1970-01-01 00:00:02. This was incorrect. Despite having600000microseconds, the time should not round up to the next second. Rather, the time should be1970-01-01 00:00:01.600000. Since this version of ramsey/uuid does not support microseconds, the microseconds are dropped, and the time is1970-01-01 00:00:01. No rounding should occur.
3.9.2 - 2019-12-17
Fixed
- Check whether files returned by
/sys/class/net/*/addressare readable before attempting to read them. This avoids a PHP warning that was being emitted on hosts that do not grant permission to read these files.
3.9.1 - 2019-12-01
Fixed
- Fix
RandomNodeProviderbehavior on 32-bit systems. TheRandomNodeProviderwas converting a 6-byte string to a decimal number, which is a 48-bit, unsigned integer. This caused problems on 32-bit systems and has now been resolved.
3.9.0 - 2019-11-30
Added
- Add function API as convenience. The functions are available in the
Ramsey\Uuidnamespace.v1(int|string|null $node = null, int|null $clockSeq = null): stringv3(string|UuidInterface $ns, string $name): stringv4(): stringv5(string|UuidInterface $ns, string $name): string
Changed
- Use paragonie/random-lib instead of ircmaxell/random-lib. This is a non-breaking change.
- Use a high-strength generator by default, when using
RandomLibAdapter. This is a non-breaking change.
Deprecated
These will be removed in ramsey/uuid version 4.0.0:
MtRandGenerator,OpenSslGenerator, andSodiumRandomGeneratorare deprecated in favor of using the defaultRandomBytesGenerator.
Fixed
- Set
ext-jsonas a required dependency incomposer.json. - Use
PHP_OSinstead ofphp_uname()when determining the system OS, for cases whenphp_uname()is disabled for security reasons.
3.8.0 - 2018-07-19
Added
- Support discovery of MAC addresses on FreeBSD systems
- Use a polyfill to provide PHP ctype functions when running on systems where the ctype functions are not part of the PHP build
- Disallow a trailing newline character when validating UUIDs
- Annotate thrown exceptions for improved IDE hinting
3.7.3 - 2018-01-19
Fixed
- Gracefully handle cases where
glob()returns false when searching/sys/class/net/*/addressfiles on Linux - Fix off-by-one error in
DefaultTimeGenerator
Security
- Switch to
random_int()frommt_rand()for better random numbers
3.7.2 - 2018-01-13
Fixed
- Check sysfs on Linux to determine the node identifier; this provides a reliable way to identify the node on Docker images, etc.
3.7.1 - 2017-09-22
Fixed
- Set the multicast bit for random nodes, according to RFC 4122, §4.5
Security
- Use
random_bytes()when generating random nodes
3.7.0 - 2017-08-04
Added
- Add the following UUID version constants:
Uuid::UUID_TYPE_TIMEUuid::UUID_TYPE_IDENTIFIERUuid::UUID_TYPE_HASH_MD5Uuid::UUID_TYPE_RANDOMUuid::UUID_TYPE_HASH_SHA1
3.6.1 - 2017-03-26
Fixed
- Optimize UUID string decoding by using
str_pad()instead ofsprintf()
3.6.0 - 2017-03-18
Added
- Add
InvalidUuidStringException, which is thrown when attempting to decode an invalid string UUID; this does not introduce any BC issues, since the new exception inherits from the previously usedInvalidArgumentException
Fixed
- Improve memory usage when generating large quantities of UUIDs (use
str_pad()anddechex()instead ofsprintf())
3.5.2 - 2016-11-22
Fixed
- Improve test coverage
3.5.1 - 2016-10-02
Fixed
- Fix issue where the same UUIDs were not being treated as equal when using mixed cases
3.5.0 - 2016-08-02
Added
- Add
OrderedTimeCodecto store UUID in an optimized way for InnoDB
Fixed
- Fix invalid node generation in
RandomNodeProvider - Avoid multiple unnecessary system calls by caching failed attempt to retrieve system node
3.4.1 - 2016-04-23
Fixed
- Fix test that violated a PHP CodeSniffer rule, breaking the build
3.4.0 - 2016-04-23
Added
- Add
TimestampFirstCombCodecandTimestampLastCombCodeccodecs to provide the ability to generate COMB sequential UUIDs with the timestamp encoded as either the first 48 bits or the last 48 bits - Improve logic of
CombGeneratorfor COMB sequential UUIDs
3.3.0 - 2016-03-22
Security
- Drop the use of OpenSSL as a fallback and use paragonie/random_compat to
support
RandomBytesGeneratorin versions of PHP earlier than 7.0; this addresses and fixes the collision issue
3.2.0 - 2016-02-17
Added
- Add
SodiumRandomGeneratorto allow use of the PECL libsodium extension as a random bytes generator when creating UUIDs
3.1.0 - 2015-12-17
Added
- Implement the PHP
Serializableinterface to provide the ability to serialize/unserialize UUID objects
3.0.1 - 2015-10-21
Added
- Adopt the Contributor Code of Conduct for this project
3.0.0 - 2015-09-28
The 3.0.0 release represents a significant step for the ramsey/uuid library. While the simple and familiar API used in previous versions remains intact, this release provides greater flexibility to integrators, including the ability to inject your own number generators, UUID codecs, node and time providers, and more.
Please note: The changelog for 3.0.0 includes all notes from the alpha and beta versions leading up to this release.
Added
- Add a number of generators that may be used to override the library defaults
for generating random bytes (version 4) or time-based (version 1) UUIDs
CombGeneratorto allow generation of sequential UUIDsOpenSslGeneratorto generate random bytes on systems whereopenssql_random_pseudo_bytes()is presentMtRandGeneratorto provide a fallback in the event other random generators are not presentRandomLibAdapterto allow use of ircmaxell/random-libRandomBytesGeneratorfor use with PHP 7; ramsey/uuid will default to use this generator when running on PHP 7- Refactor time-based (version 1) UUIDs into a
TimeGeneratorInterfaceto allow for other sources to generate version 1 UUIDs in this library PeclUuidTimeGeneratorandPeclUuidRandomGeneratorfor creating version 1 or version 4 UUIDs using the pecl-uuid extension
- Add a
setTimeGeneratormethod onUuidFactoryto override the default time generator - Add option to enable
PeclUuidTimeGeneratorviaFeatureSet - Support GUID generation by configuring a
FeatureSetto use GUIDs - Allow UUIDs to be serialized as JSON through
JsonSerializable
Changed
- Change root namespace from "Rhumsaa" to "Ramsey;" in most cases, simply making this change in your applications is the only upgrade path you will need—everything else should work as expected
- No longer consider
Uuidclass asfinal; everything is now based around interfaces and factories, allowing you to use this package as a base to implement other kinds of UUIDs with different dependencies - Return an object of type
DegradedUuidon 32-bit systems to indicate that certain features are not available - Default
RandomLibAdapterto a medium-strength generator with ircmaxell/random-lib; this is configurable, so other generator strengths may be used
Removed
- Remove
PeclUuidFactoryin favor of using pecl-uuid with generators - Remove
timeConverterandtimeProviderproperties, setters, and getters in bothFeatureSetandUuidFactoryas those are now exclusively used by the defaultTimeGenerator - Move UUID Doctrine field type to ramsey/uuid-doctrine
- Move
uuidconsole application to ramsey/uuid-console - Remove
Uuid::VERSIONpackage version constant
Fixed
- Improve GUID support to ensure that:
- On little endian (LE) architectures, the byte order of the first three fields is LE
- On big endian (BE) architectures, it is the same as a GUID
- String representation is always the same
- Fix exception message for
DegradedNumberConverter::fromHex()
3.0.0-beta1 - 2015-08-31
Fixed
- Improve GUID support to ensure that:
- On little endian (LE) architectures, the byte order of the first three fields is LE
- On big endian (BE) architectures, it is the same as a GUID
- String representation is always the same
- Fix exception message for
DegradedNumberConverter::fromHex()
3.0.0-alpha3 - 2015-07-28
Added
- Enable use of custom
TimeGeneratorimplementations - Add a
setTimeGeneratormethod onUuidFactoryto override the default time generator - Add option to enable
PeclUuidTimeGeneratorviaFeatureSet
Removed
- Remove
timeConverterandtimeProviderproperties, setters, and getters in bothFeatureSetandUuidFactoryas those are now exclusively used by the defaultTimeGenerator
3.0.0-alpha2 - 2015-07-28
Added
- Refactor time-based (version 1) UUIDs into a
TimeGeneratorInterfaceto allow for other sources to generate version 1 UUIDs in this library - Add
PeclUuidTimeGeneratorandPeclUuidRandomGeneratorfor creating version 1 or version 4 UUIDs using the pecl-uuid extension - Add
RandomBytesGeneratorfor use with PHP 7. ramsey/uuid will default to use this generator when running on PHP 7
Changed
- Default
RandomLibAdapterto a medium-strength generator with ircmaxell/random-lib; this is configurable, so other generator strengths may be used
Removed
- Remove
PeclUuidFactoryin favor of using pecl-uuid with generators
3.0.0-alpha1 - 2015-07-16
Added
- Allow dependency injection through
UuidFactoryand/or extendingFeatureSetto override any package defaults - Add a number of generators that may be used to override the library defaults:
CombGeneratorto allow generation of sequential UUIDsOpenSslGeneratorto generate random bytes on systems whereopenssql_random_pseudo_bytes()is presentMtRandGeneratorto provide a fallback in the event other random generators are not presentRandomLibAdapterto allow use of ircmaxell/random-lib
- Support GUID generation by configuring a
FeatureSetto use GUIDs - Allow UUIDs to be serialized as JSON through
JsonSerializable
Changed
- Change root namespace from "Rhumsaa" to "Ramsey;" in most cases, simply making this change in your applications is the only upgrade path you will need—everything else should work as expected
- No longer consider
Uuidclass asfinal; everything is now based around interfaces and factories, allowing you to use this package as a base to implement other kinds of UUIDs with different dependencies - Return an object of type
DegradedUuidon 32-bit systems to indicate that certain features are not available
Removed
- Move UUID Doctrine field type to ramsey/uuid-doctrine
- Move
uuidconsole application to ramsey/uuid-console - Remove
Uuid::VERSIONpackage version constant
2.9.0 - 2016-03-22
Security
- Drop the use of OpenSSL as a fallback and use paragonie/random_compat to
support
RandomBytesGeneratorin versions of PHP earlier than 7.0; this addresses and fixes the collision issue
2.8.4 - 2015-12-17
Added
- Add support for symfony/console v3 in the
uuidCLI application
2.8.3 - 2015-08-31
Fixed
- Fix exception message in
Uuid::calculateUuidTime()
2.8.2 - 2015-07-23
Fixed
- Ensure the release tag makes it into the rhumsaa/uuid package
2.8.1 - 2015-06-16
Fixed
- Use
passthru()and output buffering ingetIfconfig() - Cache the system node in a static variable so that we process it only once per runtime
2.8.0 - 2014-11-09
Added
- Add static
fromInteger()method to create UUIDs from string integer orMoontoast\Math\BigNumber
Fixed
- Improve Doctrine conversion to Uuid or string for the ramsey/uuid Doctrine field type
2.7.4 - 2014-10-29
Fixed
- Change loop in
generateBytes()fromforeachtofor
2.7.3 - 2014-08-27
Fixed
- Fix upper range for
mt_randused in version 4 UUIDs
2.7.2 - 2014-07-28
Changed
- Upgrade to PSR-4 autoloading
2.7.1 - 2014-02-19
Fixed
- Move moontoast/math and symfony/console to require-dev
- Support symfony/console 2.3 (LTS version)
2.7.0 - 2014-01-31
Added
- Add
Uuid::VALID_PATTERNconstant containing a UUID validation regex pattern
2.6.1 - 2014-01-27
Fixed
- Fix bug where
uuidconsole application could not find the Composer autoloader when installed in another project
2.6.0 - 2014-01-17
Added
- Introduce
uuidconsole application for generating and decoding UUIDs from CLI (run./bin/uuidfor details) - Add
Uuid::getInteger()to retrieve aMoontoast\Math\BigNumberrepresentation of the 128-bit integer representing the UUID - Add
Uuid::getHex()to retrieve the hexadecimal representation of the UUID - Use
netstaton Linux to capture the node for a version 1 UUID - Require moontoast/math as part of the regular package requirements
2.5.0 - 2013-10-30
Added
- Use
openssl_random_pseudo_bytes(), if available, to generate random bytes
2.4.0 - 2013-07-29
Added
- Return
nullfromUuid::getVersion()if the UUID isn't an RFC 4122 variant - Support string UUIDs without dashes passed to
Uuid::fromString()
2.3.0 - 2013-07-16
Added
- Support creation of UUIDs from bytes with
Uuid::fromBytes()
2.2.0 - 2013-07-04
Added
- Add
Doctrine\UuidType::requiresSQLCommentHint()method
2.1.2 - 2013-07-03
Fixed
- Fix cases where the system node was coming back with uppercase hexadecimal digits; this ensures that case in the node is converted to lowercase
2.1.1 - 2013-04-29
Fixed
- Fix bug in
Uuid::isValid()where the NIL UUID was not reported as valid
2.1.0 - 2013-04-15
Added
- Allow checking the validity of a UUID through the
Uuid::isValid()method
2.0.0 - 2013-02-11
Added
- Support UUID generation on 32-bit platforms
Changed
- Mark
Uuidclassfinal - Require moontoast/math on 64-bit platforms for
Uuid::getLeastSignificantBits()andUuid::getMostSignificantBits(); the integers returned by these methods are unsigned 64-bit integers and unsupported even on 64-bit builds of PHP - Move
UnsupportedOperationExceptionto theExceptionsubnamespace
1.1.2 - 2012-11-29
Fixed
- Relax Doctrine field type conversion rules for UUIDs
1.1.1 - 2012-08-27
Fixed
- Remove
finalkeyword fromUuidclass
1.1.0 - 2012-08-06
Added
- Support ramsey/uuid UUIDs as a Doctrine Database Abstraction Layer (DBAL) field mapping type
1.0.0 - 2012-07-19
Added
- Support generation of version 1, 3, 4, and 5 UUIDs