mirror of
https://github.com/ramsey/uuid.git
synced 2026-06-26 17:46:38 +03:00
Merge branch '4.x' into bump/math
This commit is contained in:
@@ -19,8 +19,6 @@
|
||||
/phpstan-tests.neon export-ignore
|
||||
/phpstan.neon.dist export-ignore
|
||||
/phpunit.xml.dist export-ignore
|
||||
/psalm-baseline.xml export-ignore
|
||||
/psalm.xml export-ignore
|
||||
/resources/ export-ignore
|
||||
/SECURITY.md export-ignore
|
||||
/tests/ export-ignore
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
github: ramsey
|
||||
tidelift: "packagist/ramsey/uuid"
|
||||
@@ -1,6 +1,6 @@
|
||||
# GitHub Actions Documentation: https://docs.github.com/en/actions
|
||||
|
||||
name: "build"
|
||||
name: "Continuous Integration"
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -25,6 +25,7 @@ jobs:
|
||||
coding-standards:
|
||||
name: "Coding standards"
|
||||
runs-on: "ubuntu-latest"
|
||||
|
||||
steps:
|
||||
- name: "Checkout repository"
|
||||
uses: "actions/checkout@v4"
|
||||
@@ -37,16 +38,19 @@ jobs:
|
||||
|
||||
- name: "Install dependencies (Composer)"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
dependency-versions: "highest"
|
||||
|
||||
- name: "Check syntax (php-parallel-lint)"
|
||||
run: "composer lint -- --colors"
|
||||
run: "composer dev:lint:syntax"
|
||||
|
||||
- name: "Check coding standards (PHP_CodeSniffer)"
|
||||
run: "./vendor/bin/phpcs --colors"
|
||||
run: "composer dev:lint:style"
|
||||
|
||||
static-analysis:
|
||||
name: "Static analysis"
|
||||
runs-on: "ubuntu-latest"
|
||||
|
||||
steps:
|
||||
- name: "Checkout repository"
|
||||
uses: "actions/checkout@v4"
|
||||
@@ -59,12 +63,11 @@ jobs:
|
||||
|
||||
- name: "Install dependencies (Composer)"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
dependency-versions: "highest"
|
||||
|
||||
- name: "Statically analyze code (PHPStan)"
|
||||
run: "composer phpstan -- --ansi"
|
||||
|
||||
- name: "Statically analyze code (Psalm)"
|
||||
run: "composer psalm -- --shepherd"
|
||||
run: "composer dev:analyze:phpstan"
|
||||
|
||||
benchmark:
|
||||
name: "Benchmark"
|
||||
@@ -80,12 +83,6 @@ jobs:
|
||||
- "8.2"
|
||||
- "8.3"
|
||||
- "8.4"
|
||||
include:
|
||||
# Keep the locked version by default
|
||||
- dependency-versions: "locked"
|
||||
# For PHP 8.0, installing with --prefer-highest to use brick/math v0.11
|
||||
- php-version: "8.0"
|
||||
dependency-versions: "highest"
|
||||
|
||||
steps:
|
||||
- name: "Checkout repository"
|
||||
@@ -107,15 +104,16 @@ jobs:
|
||||
- name: "Install dependencies (Composer)"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
dependency-versions: "${{ matrix.dependency-versions }}"
|
||||
dependency-versions: "highest"
|
||||
|
||||
- name: "Run PHPBench"
|
||||
run: "composer phpbench -- --ansi"
|
||||
- name: "Run benchmarks (PHPBench)"
|
||||
run: "composer dev:bench"
|
||||
|
||||
code-coverage:
|
||||
name: "Code coverage"
|
||||
needs: ["coding-standards", "static-analysis"]
|
||||
runs-on: "ubuntu-latest"
|
||||
|
||||
steps:
|
||||
- name: "Checkout repository"
|
||||
uses: "actions/checkout@v4"
|
||||
@@ -130,19 +128,26 @@ jobs:
|
||||
with:
|
||||
php-version: "latest"
|
||||
extensions: bcmath, gmp, sodium, uuid
|
||||
coverage: "pcov"
|
||||
coverage: "xdebug"
|
||||
ini-values: "memory_limit=-1"
|
||||
|
||||
- name: "Install dependencies (Composer)"
|
||||
uses: "ramsey/composer-install@v3"
|
||||
with:
|
||||
dependency-versions: "${{ matrix.dependencies }}"
|
||||
dependency-versions: "highest"
|
||||
|
||||
- name: "Run unit tests (PHPUnit)"
|
||||
run: "./vendor/bin/phpunit --verbose --colors=always --coverage-text --coverage-clover build/logs/clover.xml"
|
||||
run: "composer dev:test:coverage:ci"
|
||||
|
||||
- name: "Publish coverage report to Codecov"
|
||||
uses: "codecov/codecov-action@v5.0.2"
|
||||
uses: "codecov/codecov-action@v5"
|
||||
|
||||
- name: "Upload test results to Codecov"
|
||||
if: ${{ !cancelled() }}
|
||||
uses: "codecov/test-results-action@v1"
|
||||
with:
|
||||
disable_search: true
|
||||
file: "./build/junit.xml"
|
||||
|
||||
unit-tests:
|
||||
name: "Unit Tests"
|
||||
@@ -161,12 +166,9 @@ jobs:
|
||||
operating-system:
|
||||
- "ubuntu-latest"
|
||||
- "windows-latest"
|
||||
include:
|
||||
# Keep the locked version by default
|
||||
- dependency-versions: "locked"
|
||||
# For PHP 8.0, installing with --prefer-highest to use brick/math v0.11
|
||||
- php-version: "8.0"
|
||||
dependency-versions: "highest"
|
||||
dependency-versions:
|
||||
- "locked"
|
||||
- "highest"
|
||||
|
||||
steps:
|
||||
- name: "Configure Git (for Windows)"
|
||||
@@ -198,4 +200,4 @@ jobs:
|
||||
dependency-versions: "${{ matrix.dependency-versions }}"
|
||||
|
||||
- name: "Run unit tests (PHPUnit)"
|
||||
run: "./vendor/bin/phpunit --verbose --colors=always --no-coverage"
|
||||
run: "composer dev:test:unit"
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
# See https://github.com/ridedott/merge-me-action/
|
||||
# This workflow automates merges from patches sent by Dependabot, and
|
||||
# only by dependabot, once the other CI workflows pass
|
||||
name: Auto-merge Dependabot PRs
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
types:
|
||||
- completed
|
||||
workflows:
|
||||
- "build"
|
||||
|
||||
jobs:
|
||||
merge-me:
|
||||
name: Auto-merge Dependabot PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Auto-Merge
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
uses: ridedott/merge-me-action@v2.10.111
|
||||
with:
|
||||
# This must be used as GitHub Actions token does not support pushing
|
||||
# to protected branches.
|
||||
GITHUB_TOKEN: ${{ secrets.MERGE_TOKEN }}
|
||||
@@ -0,0 +1,29 @@
|
||||
# Merge Me! Documentation: https://github.com/ridedott/merge-me-action/
|
||||
|
||||
name: "Merge Dependabot PRs"
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
types:
|
||||
- "completed"
|
||||
workflows:
|
||||
- "Continuous Integration"
|
||||
|
||||
jobs:
|
||||
merge-me:
|
||||
name: "Merge me!"
|
||||
runs-on: "ubuntu-latest"
|
||||
steps:
|
||||
- name: "Auto-merge"
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
uses: "ridedott/merge-me-action@v2"
|
||||
with:
|
||||
# This must be used as the GitHub Actions token does not support pushing
|
||||
# to protected branches.
|
||||
#
|
||||
# Create a token with repository permissions:
|
||||
# https://github.com/settings/tokens/new?scopes=repo&description=Merge+Me!+GitHub+Actions+Workflow
|
||||
#
|
||||
# Set MERGE_TOKEN as an environment variable on your repository:
|
||||
# https://github.com/yourname/repo-name/settings/secrets/actions/new
|
||||
GITHUB_TOKEN: ${{ secrets.MERGE_TOKEN }}
|
||||
+8
-9
@@ -85,7 +85,7 @@ When you do begin working on your feature, here are some guidelines to consider:
|
||||
|
||||
## Developing
|
||||
|
||||
To develop this project, you will need [PHP](https://www.php.net) 7.4 or greater
|
||||
To develop this project, you will need [PHP](https://www.php.net) 8.0 or greater
|
||||
and [Composer](https://getcomposer.org).
|
||||
|
||||
After cloning this repository locally, execute the following commands:
|
||||
@@ -99,7 +99,7 @@ Now, you are ready to develop!
|
||||
|
||||
### Tooling
|
||||
|
||||
This project uses [CaptainHook](https://github.com/CaptainHookPhp/captainhook)
|
||||
This project uses [CaptainHook](https://github.com/captainhook-git/captainhook)
|
||||
to validate all staged changes prior to commit.
|
||||
|
||||
### Commands
|
||||
@@ -113,7 +113,7 @@ composer list
|
||||
### Coding Standards
|
||||
|
||||
This project follows a superset of [PSR-12](https://www.php-fig.org/psr/psr-12/)
|
||||
coding standards, enforced by [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer).
|
||||
coding standards, enforced by [PHP_CodeSniffer](https://github.com/PHPCSStandards/PHP_CodeSniffer).
|
||||
|
||||
CaptainHook will run coding standards checks before committing.
|
||||
|
||||
@@ -121,17 +121,16 @@ You may lint the codebase manually using the following commands:
|
||||
|
||||
``` bash
|
||||
# Lint
|
||||
composer phpcs
|
||||
composer dev:lint
|
||||
|
||||
# Attempt to auto-fix coding standards issues
|
||||
composer phpcbf
|
||||
composer dev:lint:fix
|
||||
```
|
||||
|
||||
### Static Analysis
|
||||
|
||||
This project uses a combination of [PHPStan](https://github.com/phpstan/phpstan)
|
||||
and [Psalm](https://github.com/vimeo/psalm) to provide static analysis of PHP
|
||||
code.
|
||||
This project uses [PHPStan](https://github.com/phpstan/phpstan) to provide
|
||||
static analysis of PHP code.
|
||||
|
||||
CaptainHook will run static analysis checks before committing.
|
||||
|
||||
@@ -140,7 +139,7 @@ following command:
|
||||
|
||||
``` bash
|
||||
# Static analysis
|
||||
composer analyze
|
||||
composer dev:analyze
|
||||
```
|
||||
|
||||
### Project Structure
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
<a href="https://github.com/ramsey/uuid/blob/4.x/LICENSE"><img src="https://img.shields.io/packagist/l/ramsey/uuid.svg?style=flat-square&colorB=darkcyan" alt="Read License"></a>
|
||||
<a href="https://github.com/ramsey/uuid/actions/workflows/continuous-integration.yml"><img src="https://img.shields.io/github/actions/workflow/status/ramsey/uuid/continuous-integration.yml?branch=4.x&logo=github&style=flat-square" alt="Build Status"></a>
|
||||
<a href="https://app.codecov.io/gh/ramsey/uuid/branch/4.x"><img src="https://img.shields.io/codecov/c/github/ramsey/uuid/4.x?label=codecov&logo=codecov&style=flat-square" alt="Codecov Code Coverage"></a>
|
||||
<a href="https://shepherd.dev/github/ramsey/uuid"><img src="https://img.shields.io/endpoint?style=flat-square&url=https%3A%2F%2Fshepherd.dev%2Fgithub%2Framsey%2Fuuid%2Fcoverage" alt="Psalm Type Coverage"></a>
|
||||
</p>
|
||||
|
||||
ramsey/uuid is a PHP library for generating and working with universally unique
|
||||
|
||||
+2
-2
@@ -39,7 +39,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"action": "composer lint:paths -- {$STAGED_FILES|of-type:php}",
|
||||
"action": "composer dev:lint:syntax -- {$STAGED_FILES|of-type:php}",
|
||||
"conditions": [
|
||||
{
|
||||
"exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\OfType",
|
||||
@@ -48,7 +48,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"action": "composer phpcs -- {$STAGED_FILES|of-type:php}",
|
||||
"action": "composer dev:lint:style -- {$STAGED_FILES|of-type:php}",
|
||||
"conditions": [
|
||||
{
|
||||
"exec": "\\CaptainHook\\App\\Hook\\Condition\\FileStaged\\OfType",
|
||||
|
||||
+51
-44
@@ -15,26 +15,23 @@
|
||||
"ramsey/collection": "^1.2 || ^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"captainhook/captainhook": "^5.10",
|
||||
"captainhook/captainhook": "^5.25",
|
||||
"captainhook/plugin-composer": "^5.3",
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"doctrine/annotations": "^1.8",
|
||||
"ergebnis/composer-normalize": "^2.15",
|
||||
"mockery/mockery": "^1.3",
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
|
||||
"ergebnis/composer-normalize": "^2.47",
|
||||
"mockery/mockery": "^1.6",
|
||||
"paragonie/random-lib": "^2",
|
||||
"php-mock/php-mock": "^2.2",
|
||||
"php-mock/php-mock-mockery": "^1.3",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.1",
|
||||
"phpbench/phpbench": "^1.0",
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan": "^1.8",
|
||||
"phpstan/phpstan-mockery": "^1.1",
|
||||
"phpstan/phpstan-phpunit": "^1.1",
|
||||
"phpunit/phpunit": "^8.5 || ^9",
|
||||
"ramsey/composer-repl": "^1.4",
|
||||
"slevomat/coding-standard": "^8.4",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"vimeo/psalm": "^4.9"
|
||||
"php-mock/php-mock": "^2.6",
|
||||
"php-mock/php-mock-mockery": "^1.5",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.4.0",
|
||||
"phpbench/phpbench": "^1.2.14",
|
||||
"phpstan/extension-installer": "^1.4",
|
||||
"phpstan/phpstan": "^2.1",
|
||||
"phpstan/phpstan-mockery": "^2.0",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"phpunit/phpunit": "^9.6",
|
||||
"slevomat/coding-standard": "^8.18",
|
||||
"squizlabs/php_codesniffer": "^3.13"
|
||||
},
|
||||
"replace": {
|
||||
"rhumsaa/uuid": "self.version"
|
||||
@@ -66,10 +63,9 @@
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"captainhook/plugin-composer": true,
|
||||
"ergebnis/composer-normalize": true,
|
||||
"phpstan/extension-installer": true,
|
||||
"dealerdirect/phpcodesniffer-composer-installer": true,
|
||||
"ramsey/composer-repl": true
|
||||
"ergebnis/composer-normalize": true,
|
||||
"phpstan/extension-installer": true
|
||||
},
|
||||
"sort-packages": true
|
||||
},
|
||||
@@ -79,30 +75,41 @@
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"analyze": [
|
||||
"@phpstan",
|
||||
"@psalm"
|
||||
"dev:analyze": "@dev:analyze:phpstan",
|
||||
"dev:analyze:phpstan": "phpstan analyse --ansi --memory-limit 1G",
|
||||
"dev:bench": "@php -d 'error_reporting=24575' vendor/bin/phpbench run",
|
||||
"dev:build:clean": "git clean -fX build/",
|
||||
"dev:lint": [
|
||||
"@dev:lint:syntax",
|
||||
"@dev:lint:style"
|
||||
],
|
||||
"build:clean": "git clean -fX build/",
|
||||
"lint": "parallel-lint src tests",
|
||||
"lint:paths": "parallel-lint",
|
||||
"phpbench": "phpbench run",
|
||||
"phpcbf": "phpcbf -vpw --cache=build/cache/phpcs.cache",
|
||||
"phpcs": "phpcs --cache=build/cache/phpcs.cache",
|
||||
"phpstan": [
|
||||
"phpstan analyse --no-progress --memory-limit=1G",
|
||||
"phpstan analyse -c phpstan-tests.neon --no-progress --memory-limit=1G"
|
||||
"dev:lint:fix": "phpcbf --cache=build/cache/phpcs.cache",
|
||||
"dev:lint:style": "phpcs --cache=build/cache/phpcs.cache --colors",
|
||||
"dev:lint:syntax": "parallel-lint --colors src/ tests/",
|
||||
"dev:test": [
|
||||
"@dev:lint",
|
||||
"@dev:bench",
|
||||
"@dev:analyze",
|
||||
"@dev:test:unit"
|
||||
],
|
||||
"phpunit": "phpunit --verbose --colors=always",
|
||||
"phpunit-coverage": "phpunit --verbose --colors=always --coverage-html build/coverage",
|
||||
"psalm": "psalm --show-info=false --config=psalm.xml",
|
||||
"test": [
|
||||
"@lint",
|
||||
"@phpbench",
|
||||
"@phpcs",
|
||||
"@phpstan",
|
||||
"@psalm",
|
||||
"@phpunit"
|
||||
]
|
||||
"dev:test:coverage:ci": "@php -d 'xdebug.mode=coverage' vendor/bin/phpunit --colors=always --coverage-text --coverage-clover build/coverage/clover.xml --coverage-cobertura build/coverage/cobertura.xml --coverage-crap4j build/coverage/crap4j.xml --coverage-xml build/coverage/coverage-xml --log-junit build/junit.xml",
|
||||
"dev:test:coverage:html": "@php -d 'xdebug.mode=coverage' vendor/bin/phpunit --colors=always --coverage-html build/coverage/coverage-html/",
|
||||
"dev:test:unit": "phpunit --colors=always",
|
||||
"test": "@dev:test"
|
||||
},
|
||||
"scripts-descriptions": {
|
||||
"dev:analyze": "Runs all static analysis checks.",
|
||||
"dev:analyze:phpstan": "Runs the PHPStan static analyzer.",
|
||||
"dev:bench": "Runs PHPBench benchmark tests.",
|
||||
"dev:build:clean": "Cleans the build/ directory.",
|
||||
"dev:lint": "Runs all linting checks.",
|
||||
"dev:lint:fix": "Auto-fixes coding standards issues, if possible.",
|
||||
"dev:lint:style": "Checks for coding standards issues.",
|
||||
"dev:lint:syntax": "Checks for syntax errors.",
|
||||
"dev:test": "Runs linting, static analysis, and unit tests.",
|
||||
"dev:test:coverage:ci": "Runs unit tests and generates CI coverage reports.",
|
||||
"dev:test:coverage:html": "Runs unit tests and generates HTML coverage report.",
|
||||
"dev:test:unit": "Runs unit tests.",
|
||||
"test": "Runs linting, static analysis, and unit tests."
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+1210
-2709
File diff suppressed because it is too large
Load Diff
+4
-3
@@ -428,15 +428,16 @@
|
||||
</rule>
|
||||
|
||||
<!-- Require space after language constructs -->
|
||||
<rule ref="Squiz.WhiteSpace.LanguageConstructSpacing"/>
|
||||
<rule ref="Generic.WhiteSpace.LanguageConstructSpacing"/>
|
||||
|
||||
<!-- Require space around logical operators -->
|
||||
<rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/>
|
||||
|
||||
<rule ref="SlevomatCodingStandard.TypeHints.UnionTypeHintFormat">
|
||||
<rule ref="SlevomatCodingStandard.TypeHints.DNFTypeHintFormat">
|
||||
<properties>
|
||||
<property name="withSpaces" value="yes"/>
|
||||
<property name="withSpacesAroundOperators" value="yes"/>
|
||||
<property name="nullPosition" value="last"/>
|
||||
<property name="shortNullable" value="yes"/>
|
||||
</properties>
|
||||
</rule>
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
parameters:
|
||||
tmpDir: ./build/cache/phpstan
|
||||
level: max
|
||||
paths:
|
||||
- ./tests
|
||||
bootstrapFiles:
|
||||
- ./tests/static-analysis/stubs.php
|
||||
checkMissingIterableValueType: false
|
||||
reportUnmatchedIgnoredErrors: false
|
||||
excludePaths:
|
||||
analyse:
|
||||
- ./tests/ExpectedBehaviorTest.php
|
||||
- ./tests/static-analysis/stubs.php
|
||||
ignoreErrors:
|
||||
-
|
||||
message: "#^Call to static method Ramsey\\\\Uuid\\\\.+ on a separate line has no effect\\.$#"
|
||||
paths:
|
||||
- ./tests/*Test.php
|
||||
- ./tests/benchmark/*Bench.php
|
||||
-
|
||||
message: "#^Call to method Ramsey\\\\Uuid\\\\.+ on a separate line has no effect\\.$#"
|
||||
paths:
|
||||
- ./tests/Builder/*Test.php
|
||||
- ./tests/Converter/*Test.php
|
||||
- ./tests/Generator/*Test.php
|
||||
- ./tests/Guid/*Test.php
|
||||
- ./tests/Nonstandard/*Test.php
|
||||
- ./tests/Rfc4122/*Test.php
|
||||
-
|
||||
message: "#^Method Ramsey\\\\Uuid\\\\.+ should return non-empty-string but returns string\\.$#"
|
||||
paths:
|
||||
- ./tests/static-analysis/ValidUuidIsNonEmpty.php
|
||||
+6
-17
@@ -1,24 +1,13 @@
|
||||
parameters:
|
||||
tmpDir: ./build/cache/phpstan
|
||||
level: max
|
||||
treatPhpDocTypesAsCertain: false
|
||||
paths:
|
||||
- ./src
|
||||
checkMissingIterableValueType: false
|
||||
- ./tests
|
||||
bootstrapFiles:
|
||||
- ./tests/static-analysis/stubs.php
|
||||
ignoreErrors:
|
||||
-
|
||||
message: '#^Comparison operation ">" between 6 and 0 is always true\.$#'
|
||||
count: 1
|
||||
path: ./src/Generator/CombGenerator.php
|
||||
-
|
||||
# Legacy methods of `Ramsey\Uuid` use interface methods that are NOT defined on `FieldsInterface`
|
||||
message: '#^Call to an undefined method Ramsey\\Uuid\\Fields\\FieldsInterface::get.*$#'
|
||||
count: 9
|
||||
path: ./src/Lazy/LazyUuidFromString.php
|
||||
-
|
||||
message: '#^Constructor of class Ramsey\\Uuid\\FeatureSet has an unused parameter \$forceNoBigNumber\.#'
|
||||
count: 1
|
||||
path: ./src/FeatureSet.php
|
||||
|
||||
- '#^Method Ramsey\\Uuid\\Generator\\Pecl[A-Za-z]+Generator::generate\(\) should return string but returns string\|false\.$#'
|
||||
excludePaths:
|
||||
analyse:
|
||||
- ./tests/ExpectedBehaviorTest.php
|
||||
- ./tests/static-analysis/stubs.php
|
||||
|
||||
@@ -1,175 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="4.27.0@faf106e717c37b8c81721845dba9de3d8deed8ff">
|
||||
<file src="src/Builder/DegradedUuidBuilder.php">
|
||||
<DeprecatedClass occurrences="3">
|
||||
<code>DegradedUuid</code>
|
||||
<code>new DegradedTimeConverter()</code>
|
||||
</DeprecatedClass>
|
||||
<ImpureVariable occurrences="2">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Builder/FallbackBuilder.php">
|
||||
<ImpureMethodCall occurrences="1"/>
|
||||
<ImpureVariable occurrences="1">
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Converter/Number/BigNumberConverter.php">
|
||||
<ImpureVariable occurrences="2">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Converter/Number/DegradedNumberConverter.php">
|
||||
<DeprecatedClass occurrences="1">
|
||||
<code>BigNumberConverter</code>
|
||||
</DeprecatedClass>
|
||||
</file>
|
||||
<file src="src/Converter/Number/GenericNumberConverter.php">
|
||||
<ImpureVariable occurrences="2">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Converter/Time/DegradedTimeConverter.php">
|
||||
<DeprecatedClass occurrences="1">
|
||||
<code>BigNumberTimeConverter</code>
|
||||
</DeprecatedClass>
|
||||
</file>
|
||||
<file src="src/FeatureSet.php">
|
||||
<PropertyNotSetInConstructor occurrences="5">
|
||||
<code>$calculator</code>
|
||||
<code>$dceSecurityGenerator</code>
|
||||
<code>$numberConverter</code>
|
||||
<code>$timeConverter</code>
|
||||
<code>$timeGenerator</code>
|
||||
</PropertyNotSetInConstructor>
|
||||
</file>
|
||||
<file src="src/Generator/PeclUuidNameGenerator.php">
|
||||
<ImpureFunctionCall occurrences="3">
|
||||
<code>uuid_generate_md5</code>
|
||||
<code>uuid_generate_sha1</code>
|
||||
<code>uuid_parse</code>
|
||||
</ImpureFunctionCall>
|
||||
</file>
|
||||
<file src="src/Guid/GuidBuilder.php">
|
||||
<ImpureVariable occurrences="3">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Nonstandard/UuidBuilder.php">
|
||||
<ImpureVariable occurrences="3">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Provider/Dce/SystemDceSecurityProvider.php">
|
||||
<ForbiddenCode occurrences="5">
|
||||
<code>shell_exec('id -g')</code>
|
||||
<code>shell_exec('id -u')</code>
|
||||
<code>shell_exec('net user %username% | findstr /b /i "Local Group Memberships"')</code>
|
||||
<code>shell_exec('whoami /user /fo csv /nh')</code>
|
||||
<code>shell_exec('wmic group get name,sid | findstr /b /i ' . escapeshellarg($firstGroup))</code>
|
||||
</ForbiddenCode>
|
||||
</file>
|
||||
<file src="src/Provider/Node/SystemNodeProvider.php">
|
||||
<MixedArgument occurrences="1">
|
||||
<code>$macs</code>
|
||||
</MixedArgument>
|
||||
<MixedArrayAssignment occurrences="1">
|
||||
<code>$macs[]</code>
|
||||
</MixedArrayAssignment>
|
||||
</file>
|
||||
<file src="src/Rfc4122/UuidBuilder.php">
|
||||
<ImpureVariable occurrences="21">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
<file src="src/Rfc4122/UuidV6.php">
|
||||
<DeprecatedClass occurrences="1">
|
||||
<code>NonstandardUuidV6</code>
|
||||
</DeprecatedClass>
|
||||
</file>
|
||||
<file src="src/Type/Hexadecimal.php">
|
||||
<UnusedMethodCall occurrences="1">
|
||||
<code>unserialize</code>
|
||||
</UnusedMethodCall>
|
||||
</file>
|
||||
<file src="src/Type/Integer.php">
|
||||
<UnusedMethodCall occurrences="1">
|
||||
<code>unserialize</code>
|
||||
</UnusedMethodCall>
|
||||
</file>
|
||||
<file src="src/Type/Time.php">
|
||||
<UnusedMethodCall occurrences="1">
|
||||
<code>__construct</code>
|
||||
</UnusedMethodCall>
|
||||
</file>
|
||||
<file src="src/Uuid.php">
|
||||
<DeprecatedTrait occurrences="1">
|
||||
<code>DeprecatedUuidMethodsTrait</code>
|
||||
</DeprecatedTrait>
|
||||
<ImpureMethodCall occurrences="6">
|
||||
<code>getFactory</code>
|
||||
<code>getFactory</code>
|
||||
<code>getFactory</code>
|
||||
<code>getFactory</code>
|
||||
<code>getFactory</code>
|
||||
<code>getFactory</code>
|
||||
</ImpureMethodCall>
|
||||
<UnusedMethodCall occurrences="1">
|
||||
<code>unserialize</code>
|
||||
</UnusedMethodCall>
|
||||
</file>
|
||||
<file src="src/UuidFactory.php">
|
||||
<ImpurePropertyFetch occurrences="7">
|
||||
<code>$this->codec</code>
|
||||
<code>$this->codec</code>
|
||||
<code>$this->codec</code>
|
||||
<code>$this->isDefaultFeatureSet</code>
|
||||
<code>$this->nameGenerator</code>
|
||||
<code>$this->numberConverter</code>
|
||||
<code>$this->uuidBuilder</code>
|
||||
</ImpurePropertyFetch>
|
||||
<ImpureVariable occurrences="13">
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
<code>$this</code>
|
||||
</ImpureVariable>
|
||||
</file>
|
||||
</files>
|
||||
@@ -1,22 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<psalm xmlns="https://getpsalm.org/schema/config"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
|
||||
errorLevel="1"
|
||||
cacheDirectory="./build/cache/psalm"
|
||||
errorBaseline="psalm-baseline.xml"
|
||||
phpVersion="8.1">
|
||||
|
||||
<projectFiles>
|
||||
<directory name="./src" />
|
||||
<directory name="./tests/static-analysis"/>
|
||||
<ignoreFiles>
|
||||
<file name="./tests/static-analysis/stubs.php"/>
|
||||
</ignoreFiles>
|
||||
</projectFiles>
|
||||
|
||||
<stubs>
|
||||
<file name="./tests/static-analysis/stubs.php"/>
|
||||
</stubs>
|
||||
|
||||
</psalm>
|
||||
@@ -28,8 +28,6 @@ class BinaryUtils
|
||||
* variant is applied
|
||||
*
|
||||
* @return int The 16-bit clock sequence multiplexed with the UUID variant
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public static function applyVariant(int $clockSeq): int
|
||||
{
|
||||
@@ -50,8 +48,6 @@ class BinaryUtils
|
||||
*
|
||||
* @return int The 16-bit time_hi field of the timestamp multiplexed with
|
||||
* the UUID version number
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public static function applyVersion(int $timeHi, int $version): int
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ use Traversable;
|
||||
/**
|
||||
* A collection of UuidBuilderInterface objects
|
||||
*
|
||||
* @deprecated this class has been deprecated, and will be removed in 5.0.0. The use-case for this class comes from
|
||||
* @deprecated this class has been deprecated and will be removed in 5.0.0. The use-case for this class comes from
|
||||
* a pre-`phpstan/phpstan` and pre-`vimeo/psalm` ecosystem, in which type safety had to be mostly enforced
|
||||
* at runtime: that is no longer necessary, now that you can safely verify your code to be correct, and use
|
||||
* more generic types like `iterable<T>` instead.
|
||||
@@ -41,11 +41,6 @@ class BuilderCollection extends AbstractCollection
|
||||
return UuidBuilderInterface::class;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-mutation-free
|
||||
* @psalm-suppress ImpureMethodCall
|
||||
* @psalm-suppress InvalidTemplateParam
|
||||
*/
|
||||
public function getIterator(): Traversable
|
||||
{
|
||||
return parent::getIterator();
|
||||
@@ -56,9 +51,6 @@ class BuilderCollection extends AbstractCollection
|
||||
*
|
||||
* @param string $serialized The serialized PHP string to unserialize into
|
||||
* a UuidInterface instance
|
||||
*
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
|
||||
* @psalm-suppress RedundantConditionGivenDocblockType
|
||||
*/
|
||||
public function unserialize($serialized): void
|
||||
{
|
||||
@@ -78,6 +70,7 @@ class BuilderCollection extends AbstractCollection
|
||||
$this->data = array_filter(
|
||||
$data,
|
||||
function ($unserialized): bool {
|
||||
/** @phpstan-ignore instanceof.alwaysTrue */
|
||||
return $unserialized instanceof UuidBuilderInterface;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -19,7 +19,7 @@ use Ramsey\Uuid\Rfc4122\UuidBuilder as Rfc4122UuidBuilder;
|
||||
/**
|
||||
* @deprecated Transition to {@see Rfc4122UuidBuilder}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class DefaultUuidBuilder extends Rfc4122UuidBuilder
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ use Ramsey\Uuid\UuidInterface;
|
||||
* @deprecated DegradedUuid instances are no longer necessary to support 32-bit
|
||||
* systems. Transition to {@see DefaultUuidBuilder}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class DegradedUuidBuilder implements UuidBuilderInterface
|
||||
{
|
||||
@@ -52,8 +52,6 @@ class DegradedUuidBuilder implements UuidBuilderInterface
|
||||
* @param string $bytes The byte string from which to construct a UUID
|
||||
*
|
||||
* @return DegradedUuid The DegradedUuidBuild returns an instance of Ramsey\Uuid\DegradedUuid
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function build(CodecInterface $codec, string $bytes): UuidInterface
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ use Ramsey\Uuid\UuidInterface;
|
||||
* FallbackBuilder builds a UUID by stepping through a list of UUID builders
|
||||
* until a UUID can be constructed without exceptions
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class FallbackBuilder implements UuidBuilderInterface
|
||||
{
|
||||
@@ -42,8 +42,6 @@ class FallbackBuilder implements UuidBuilderInterface
|
||||
* @param string $bytes The byte string from which to construct a UUID
|
||||
*
|
||||
* @return UuidInterface an instance of a UUID object
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function build(CodecInterface $codec, string $bytes): UuidInterface
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ use Ramsey\Uuid\UuidInterface;
|
||||
/**
|
||||
* A UUID builder builds instances of UuidInterface
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface UuidBuilderInterface
|
||||
{
|
||||
@@ -32,8 +32,6 @@ interface UuidBuilderInterface
|
||||
*
|
||||
* @return UuidInterface Implementations may choose to return more specific
|
||||
* instances of UUIDs that implement UuidInterface
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function build(CodecInterface $codec, string $bytes): UuidInterface;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ use Ramsey\Uuid\UuidInterface;
|
||||
/**
|
||||
* A codec encodes and decodes a UUID according to defined rules
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface CodecInterface
|
||||
{
|
||||
@@ -29,9 +29,7 @@ interface CodecInterface
|
||||
* @param UuidInterface $uuid The UUID for which to create a hexadecimal
|
||||
* string representation
|
||||
*
|
||||
* @return string Hexadecimal string representation of a UUID
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string Hexadecimal string representation of a UUID
|
||||
*/
|
||||
public function encode(UuidInterface $uuid): string;
|
||||
|
||||
@@ -41,9 +39,7 @@ interface CodecInterface
|
||||
* @param UuidInterface $uuid The UUID for which to create a binary string
|
||||
* representation
|
||||
*
|
||||
* @return string Binary string representation of a UUID
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string Binary string representation of a UUID
|
||||
*/
|
||||
public function encodeBinary(UuidInterface $uuid): string;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ use function substr;
|
||||
*
|
||||
* @see Guid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class GuidStringCodec extends StringCodec
|
||||
{
|
||||
|
||||
@@ -41,7 +41,7 @@ use function substr;
|
||||
*
|
||||
* @link https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ Storing UUID Values in MySQL
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class OrderedTimeCodec extends StringCodec
|
||||
{
|
||||
@@ -49,10 +49,7 @@ class OrderedTimeCodec extends StringCodec
|
||||
* Returns a binary string representation of a UUID, with the timestamp
|
||||
* fields rearranged for optimized storage
|
||||
*
|
||||
* @inheritDoc
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function encodeBinary(UuidInterface $uuid): string
|
||||
{
|
||||
@@ -67,7 +64,6 @@ class OrderedTimeCodec extends StringCodec
|
||||
|
||||
$bytes = $uuid->getFields()->getBytes();
|
||||
|
||||
/** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */
|
||||
return $bytes[6] . $bytes[7]
|
||||
. $bytes[4] . $bytes[5]
|
||||
. $bytes[0] . $bytes[1] . $bytes[2] . $bytes[3]
|
||||
|
||||
@@ -33,7 +33,7 @@ use function substr;
|
||||
*
|
||||
* @link http://tools.ietf.org/html/rfc4122
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class StringCodec implements CodecInterface
|
||||
{
|
||||
@@ -62,9 +62,7 @@ class StringCodec implements CodecInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function encodeBinary(UuidInterface $uuid): string
|
||||
{
|
||||
|
||||
@@ -46,14 +46,12 @@ use function substr_replace;
|
||||
*
|
||||
* @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class TimestampFirstCombCodec extends StringCodec
|
||||
{
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function encode(UuidInterface $uuid): string
|
||||
{
|
||||
@@ -70,9 +68,7 @@ class TimestampFirstCombCodec extends StringCodec
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function encodeBinary(UuidInterface $uuid): string
|
||||
{
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Ramsey\Uuid\Codec;
|
||||
*
|
||||
* @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class TimestampLastCombCodec extends StringCodec
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ use Ramsey\Uuid\Math\BrickMathCalculator;
|
||||
*
|
||||
* @deprecated Transition to {@see GenericNumberConverter}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class BigNumberConverter implements NumberConverterInterface
|
||||
{
|
||||
@@ -34,19 +34,11 @@ class BigNumberConverter implements NumberConverterInterface
|
||||
$this->converter = new GenericNumberConverter(new BrickMathCalculator());
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromHex(string $hex): string
|
||||
{
|
||||
return $this->converter->fromHex($hex);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function toHex(string $number): string
|
||||
{
|
||||
return $this->converter->toHex($number);
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Ramsey\Uuid\Converter\Number;
|
||||
* @deprecated DegradedNumberConverter is no longer necessary for converting
|
||||
* numbers on 32-bit systems. Transition to {@see GenericNumberConverter}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class DegradedNumberConverter extends BigNumberConverter
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ use Ramsey\Uuid\Type\Integer as IntegerObject;
|
||||
* GenericNumberConverter uses the provided calculator to convert decimal
|
||||
* numbers to and from hexadecimal values
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class GenericNumberConverter implements NumberConverterInterface
|
||||
{
|
||||
@@ -30,25 +30,11 @@ class GenericNumberConverter implements NumberConverterInterface
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @psalm-pure
|
||||
* @psalm-return numeric-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
*/
|
||||
public function fromHex(string $hex): string
|
||||
{
|
||||
return $this->calculator->fromBase($hex, 16)->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @psalm-pure
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
*/
|
||||
public function toHex(string $number): string
|
||||
{
|
||||
/** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */
|
||||
|
||||
@@ -18,24 +18,20 @@ namespace Ramsey\Uuid\Converter;
|
||||
* A number converter converts UUIDs from hexadecimal characters into
|
||||
* representations of integers and vice versa
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface NumberConverterInterface
|
||||
{
|
||||
/**
|
||||
* Converts a hexadecimal number into an string integer representation of
|
||||
* Converts a hexadecimal number into a string integer representation of
|
||||
* the number
|
||||
*
|
||||
* The integer representation returned is a string representation of the
|
||||
* integer, to accommodate unsigned integers greater than PHP_INT_MAX.
|
||||
* integer to accommodate unsigned integers greater than PHP_INT_MAX.
|
||||
*
|
||||
* @param string $hex The hexadecimal string representation to convert
|
||||
*
|
||||
* @return string String representation of an integer
|
||||
*
|
||||
* @psalm-return numeric-string
|
||||
*
|
||||
* @psalm-pure
|
||||
* @return numeric-string String representation of an integer
|
||||
*/
|
||||
public function fromHex(string $hex): string;
|
||||
|
||||
@@ -47,11 +43,7 @@ interface NumberConverterInterface
|
||||
* must be a numeric string to accommodate unsigned integers greater
|
||||
* than PHP_INT_MAX.
|
||||
*
|
||||
* @return string Hexadecimal string
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
*
|
||||
* @psalm-pure
|
||||
* @return non-empty-string Hexadecimal string
|
||||
*/
|
||||
public function toHex(string $number): string;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ use Ramsey\Uuid\Type\Time;
|
||||
*
|
||||
* @deprecated Transition to {@see GenericTimeConverter}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class BigNumberTimeConverter implements TimeConverterInterface
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Ramsey\Uuid\Converter\Time;
|
||||
* @deprecated DegradedTimeConverter is no longer necessary for converting
|
||||
* time on 32-bit systems. Transition to {@see GenericTimeConverter}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class DegradedTimeConverter extends BigNumberTimeConverter
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@ use const STR_PAD_LEFT;
|
||||
* GenericTimeConverter uses the provided calculator to calculate and convert
|
||||
* time values
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class GenericTimeConverter implements TimeConverterInterface
|
||||
{
|
||||
|
||||
@@ -38,7 +38,7 @@ use const STR_PAD_RIGHT;
|
||||
* available to the PHP programming language to provide facilities for
|
||||
* converting parts of time into representations that may be used in UUIDs
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class PhpTimeConverter implements TimeConverterInterface
|
||||
{
|
||||
@@ -92,7 +92,7 @@ class PhpTimeConverter implements TimeConverterInterface
|
||||
|
||||
// Check to see whether we've overflowed the max/min integer size.
|
||||
// If so, we will default to a different time converter.
|
||||
/** @psalm-suppress RedundantCondition */
|
||||
// @phpstan-ignore function.alreadyNarrowedType (the integer value might have overflowed)
|
||||
if (!is_int($uuidTime)) {
|
||||
return $this->fallbackConverter->calculateTime(
|
||||
$seconds->toString(),
|
||||
|
||||
@@ -30,7 +30,7 @@ use const STR_PAD_LEFT;
|
||||
* UnixTimeConverter converts Unix Epoch timestamps to/from hexadecimal values
|
||||
* consisting of milliseconds elapsed since the Unix Epoch
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class UnixTimeConverter implements TimeConverterInterface
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ use Ramsey\Uuid\Type\Time;
|
||||
* A time converter converts timestamps into representations that may be used
|
||||
* in UUIDs
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface TimeConverterInterface
|
||||
{
|
||||
@@ -38,8 +38,6 @@ interface TimeConverterInterface
|
||||
* associated with the time to calculate
|
||||
*
|
||||
* @return Hexadecimal The full UUID timestamp as a Hexadecimal value
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function calculateTime(string $seconds, string $microseconds): Hexadecimal;
|
||||
|
||||
@@ -51,8 +49,6 @@ interface TimeConverterInterface
|
||||
* since UTC 00:00:00.00, 15 October 1582.
|
||||
*
|
||||
* @return Time An instance of {@see Time}
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function convertTime(Hexadecimal $uuidTimestamp): Time;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Ramsey\Uuid;
|
||||
* @deprecated DegradedUuid is no longer necessary to represent UUIDs on 32-bit
|
||||
* systems. Transition typehints to {@see UuidInterface}.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class DegradedUuid extends Uuid
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ use Ramsey\Uuid\Converter\NumberConverterInterface;
|
||||
/**
|
||||
* This interface encapsulates deprecated methods for ramsey/uuid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface DeprecatedUuidInterface
|
||||
{
|
||||
|
||||
@@ -32,7 +32,7 @@ use const STR_PAD_LEFT;
|
||||
*
|
||||
* @deprecated This trait and its methods will be removed in ramsey/uuid 5.0.0.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait DeprecatedUuidMethodsTrait
|
||||
{
|
||||
|
||||
+2
-1
@@ -85,6 +85,8 @@ class FeatureSet
|
||||
* system node ID (primarily for testing purposes)
|
||||
* @param bool $enablePecl True to enable the use of the PeclUuidTimeGenerator
|
||||
* to generate version 1 UUIDs
|
||||
*
|
||||
* @phpstan-ignore constructor.unusedParameter ($forceNoBigNumber is deprecated)
|
||||
*/
|
||||
public function __construct(
|
||||
bool $useGuids = false,
|
||||
@@ -212,7 +214,6 @@ class FeatureSet
|
||||
$this->numberConverter = $this->buildNumberConverter($calculator);
|
||||
$this->timeConverter = $this->buildTimeConverter($calculator);
|
||||
|
||||
/** @psalm-suppress RedundantPropertyInitializationCheck */
|
||||
if (isset($this->timeProvider)) {
|
||||
$this->timeGenerator = $this->buildTimeGenerator($this->timeProvider);
|
||||
}
|
||||
|
||||
@@ -17,11 +17,11 @@ namespace Ramsey\Uuid\Fields;
|
||||
use Serializable;
|
||||
|
||||
/**
|
||||
* UUIDs are comprised of unsigned integers, the bytes of which are separated
|
||||
* UUIDs consist of unsigned integers, the bytes of which are separated
|
||||
* into fields and arranged in a particular layout defined by the specification
|
||||
* for the variant
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface FieldsInterface extends Serializable
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ use function strlen;
|
||||
/**
|
||||
* Provides common serialization functionality to fields
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait SerializableFieldsTrait
|
||||
{
|
||||
@@ -57,8 +57,6 @@ trait SerializableFieldsTrait
|
||||
* Constructs the object from a serialized string representation
|
||||
*
|
||||
* @param string $data The serialized string representation of the object
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function unserialize(string $data): void
|
||||
{
|
||||
@@ -71,8 +69,6 @@ trait SerializableFieldsTrait
|
||||
|
||||
/**
|
||||
* @param array{bytes?: string} $data
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function __unserialize(array $data): void
|
||||
{
|
||||
|
||||
@@ -81,7 +81,13 @@ class CombGenerator implements RandomGeneratorInterface
|
||||
);
|
||||
}
|
||||
|
||||
if ($length % 2 !== 0) {
|
||||
throw new InvalidArgumentException('Length must be an even number');
|
||||
}
|
||||
|
||||
$hash = '';
|
||||
|
||||
/** @phpstan-ignore greater.alwaysTrue (TIMESTAMP_BYTES constant could change in child classes) */
|
||||
if (self::TIMESTAMP_BYTES > 0 && $length > self::TIMESTAMP_BYTES) {
|
||||
$hash = $this->generator->generate($length - self::TIMESTAMP_BYTES);
|
||||
}
|
||||
|
||||
@@ -26,23 +26,15 @@ use function hash;
|
||||
*/
|
||||
class DefaultNameGenerator implements NameGeneratorInterface
|
||||
{
|
||||
/** @psalm-pure */
|
||||
public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string
|
||||
{
|
||||
try {
|
||||
/** @var string|bool $bytes */
|
||||
$bytes = @hash($hashAlgorithm, $ns->getBytes() . $name, true);
|
||||
return hash($hashAlgorithm, $ns->getBytes() . $name, true);
|
||||
} catch (ValueError $e) {
|
||||
$bytes = false; // keep same behavior than PHP 7
|
||||
throw new NameException(
|
||||
message: sprintf('Unable to hash namespace and name with algorithm \'%s\'', $hashAlgorithm),
|
||||
previous: $e,
|
||||
);
|
||||
}
|
||||
|
||||
if ($bytes === false) {
|
||||
throw new NameException(sprintf(
|
||||
'Unable to hash namespace and name with algorithm \'%s\'',
|
||||
$hashAlgorithm
|
||||
));
|
||||
}
|
||||
|
||||
return (string) $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,8 +31,6 @@ interface NameGeneratorInterface
|
||||
* @param string $hashAlgorithm The hashing algorithm to use
|
||||
*
|
||||
* @return string A binary string
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ use function uuid_parse;
|
||||
*/
|
||||
class PeclUuidNameGenerator implements NameGeneratorInterface
|
||||
{
|
||||
/** @psalm-pure */
|
||||
public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string
|
||||
{
|
||||
$uuid = match ($hashAlgorithm) {
|
||||
@@ -44,6 +43,6 @@ class PeclUuidNameGenerator implements NameGeneratorInterface
|
||||
),
|
||||
};
|
||||
|
||||
return uuid_parse($uuid);
|
||||
return (string) uuid_parse($uuid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,6 @@ class PeclUuidRandomGenerator implements RandomGeneratorInterface
|
||||
{
|
||||
$uuid = uuid_create(UUID_TYPE_RANDOM);
|
||||
|
||||
return uuid_parse($uuid);
|
||||
return (string) uuid_parse($uuid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,6 @@ class PeclUuidTimeGenerator implements TimeGeneratorInterface
|
||||
{
|
||||
$uuid = uuid_create(UUID_TYPE_TIME);
|
||||
|
||||
return uuid_parse($uuid);
|
||||
return (string) uuid_parse($uuid);
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -37,11 +37,11 @@ use function unpack;
|
||||
use const STR_PAD_LEFT;
|
||||
|
||||
/**
|
||||
* GUIDs are comprised of a set of named fields, according to RFC 4122
|
||||
* GUIDs consist of a set of named fields, according to RFC 4122
|
||||
*
|
||||
* @see Guid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Fields implements FieldsInterface
|
||||
{
|
||||
@@ -89,7 +89,7 @@ final class Fields implements FieldsInterface
|
||||
public function getTimeLow(): Hexadecimal
|
||||
{
|
||||
// Swap the bytes from little endian to network byte order.
|
||||
/** @var array $hex */
|
||||
/** @var string[] $hex */
|
||||
$hex = unpack(
|
||||
'H*',
|
||||
pack(
|
||||
@@ -99,13 +99,13 @@ final class Fields implements FieldsInterface
|
||||
)
|
||||
);
|
||||
|
||||
return new Hexadecimal((string) ($hex[1] ?? ''));
|
||||
return new Hexadecimal($hex[1] ?? '');
|
||||
}
|
||||
|
||||
public function getTimeMid(): Hexadecimal
|
||||
{
|
||||
// Swap the bytes from little endian to network byte order.
|
||||
/** @var array $hex */
|
||||
/** @var string[] $hex */
|
||||
$hex = unpack(
|
||||
'H*',
|
||||
pack(
|
||||
@@ -114,13 +114,13 @@ final class Fields implements FieldsInterface
|
||||
)
|
||||
);
|
||||
|
||||
return new Hexadecimal((string) ($hex[1] ?? ''));
|
||||
return new Hexadecimal($hex[1] ?? '');
|
||||
}
|
||||
|
||||
public function getTimeHiAndVersion(): Hexadecimal
|
||||
{
|
||||
// Swap the bytes from little endian to network byte order.
|
||||
/** @var array $hex */
|
||||
/** @var string[] $hex */
|
||||
$hex = unpack(
|
||||
'H*',
|
||||
pack(
|
||||
@@ -129,7 +129,7 @@ final class Fields implements FieldsInterface
|
||||
)
|
||||
);
|
||||
|
||||
return new Hexadecimal((string) ($hex[1] ?? ''));
|
||||
return new Hexadecimal($hex[1] ?? '');
|
||||
}
|
||||
|
||||
public function getTimestamp(): Hexadecimal
|
||||
@@ -176,10 +176,10 @@ final class Fields implements FieldsInterface
|
||||
return null;
|
||||
}
|
||||
|
||||
/** @var array $parts */
|
||||
/** @var int[] $parts */
|
||||
$parts = unpack('n*', $this->bytes);
|
||||
|
||||
return ((int) $parts[4] >> 4) & 0x00f;
|
||||
return ($parts[4] >> 4) & 0x00f;
|
||||
}
|
||||
|
||||
private function isCorrectVariant(): bool
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ use Ramsey\Uuid\Uuid;
|
||||
* @link https://docs.microsoft.com/en-us/dotnet/api/system.guid .NET Guid Struct
|
||||
* @link https://docs.microsoft.com/en-us/dotnet/api/system.guid.tobytearray .NET Guid.ToByteArray Method
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Guid extends Uuid
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ use Throwable;
|
||||
*
|
||||
* @see Guid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class GuidBuilder implements UuidBuilderInterface
|
||||
{
|
||||
@@ -50,8 +50,6 @@ class GuidBuilder implements UuidBuilderInterface
|
||||
* @param string $bytes The byte string from which to construct a UUID
|
||||
*
|
||||
* @return Guid The GuidBuilder returns an instance of Ramsey\Uuid\Guid\Guid
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function build(CodecInterface $codec, string $bytes): UuidInterface
|
||||
{
|
||||
|
||||
+39
-149
@@ -38,19 +38,14 @@ use function substr;
|
||||
* conversion. This object optimizes instantiation, serialization and string conversion time, at the cost of
|
||||
* increased overhead for more advanced UUID operations.
|
||||
*
|
||||
* @internal this type is used internally for performance reasons, and is not supposed to be directly referenced
|
||||
* @internal this type is used internally for performance reasons and is not supposed to be directly referenced
|
||||
* in consumer libraries.
|
||||
*
|
||||
* @psalm-immutable
|
||||
*
|
||||
* Note: the {@see FieldsInterface} does not declare methods that deprecated API
|
||||
* relies upon: the API has been ported from the {@see \Ramsey\Uuid\Uuid} definition,
|
||||
* and is deprecated anyway.
|
||||
* Note: the deprecated API from {@see \Ramsey\Uuid\Uuid} is in use here (on purpose): it will be removed
|
||||
* once the deprecated API is gone from this class too.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
*/
|
||||
final class LazyUuidFromString implements UuidInterface
|
||||
{
|
||||
@@ -59,13 +54,12 @@ final class LazyUuidFromString implements UuidInterface
|
||||
private ?UuidInterface $unwrapped = null;
|
||||
|
||||
/**
|
||||
* @psalm-param non-empty-string $uuid
|
||||
* @param non-empty-string $uuid
|
||||
*/
|
||||
public function __construct(private string $uuid)
|
||||
{
|
||||
}
|
||||
|
||||
/** @psalm-pure */
|
||||
public static function fromBytes(string $bytes): self
|
||||
{
|
||||
$base16Uuid = bin2hex($bytes);
|
||||
@@ -89,9 +83,7 @@ final class LazyUuidFromString implements UuidInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{string: string}
|
||||
*
|
||||
* @psalm-return array{string: non-empty-string}
|
||||
* @return array{string: non-empty-string}
|
||||
*/
|
||||
public function __serialize(): array
|
||||
{
|
||||
@@ -101,9 +93,7 @@ final class LazyUuidFromString implements UuidInterface
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @param string $data
|
||||
*
|
||||
* @psalm-param non-empty-string $data
|
||||
* @param non-empty-string $data
|
||||
*/
|
||||
public function unserialize(string $data): void
|
||||
{
|
||||
@@ -111,10 +101,7 @@ final class LazyUuidFromString implements UuidInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array{string?: string} $data
|
||||
*
|
||||
* @psalm-param array{string?: non-empty-string} $data
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
* @param array{string?: non-empty-string} $data
|
||||
*/
|
||||
public function __unserialize(array $data): void
|
||||
{
|
||||
@@ -127,7 +114,6 @@ final class LazyUuidFromString implements UuidInterface
|
||||
$this->unserialize($data['string']);
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getNumberConverter(): NumberConverterInterface
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
@@ -135,9 +121,7 @@ final class LazyUuidFromString implements UuidInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getFieldsHex(): array
|
||||
{
|
||||
@@ -145,98 +129,84 @@ final class LazyUuidFromString implements UuidInterface
|
||||
->getFieldsHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getClockSeqHiAndReservedHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getClockSeqHiAndReservedHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getClockSeqLowHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getClockSeqLowHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getClockSequenceHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getClockSequenceHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getDateTime(): DateTimeInterface
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getDateTime();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getLeastSignificantBitsHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getLeastSignificantBitsHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getMostSignificantBitsHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getMostSignificantBitsHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getNodeHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getNodeHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getTimeHiAndVersionHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getTimeHiAndVersionHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getTimeLowHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getTimeLowHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getTimeMidHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getTimeMidHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getTimestampHex(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getTimestampHex();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getUrn(): string
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getUrn();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getVariant(): ?int
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
->getVariant();
|
||||
}
|
||||
|
||||
/** @psalm-suppress DeprecatedMethod */
|
||||
public function getVersion(): ?int
|
||||
{
|
||||
return ($this->unwrapped ?? $this->unwrap())
|
||||
@@ -258,16 +228,9 @@ final class LazyUuidFromString implements UuidInterface
|
||||
return $this->uuid === $other->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @psalm-suppress MoreSpecificReturnType
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that {@see self::$uuid} is a non-empty string, so
|
||||
* we know that {@see hex2bin} will retrieve a non-empty string too.
|
||||
*/
|
||||
public function getBytes(): string
|
||||
{
|
||||
/** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */
|
||||
/** @var non-empty-string */
|
||||
return (string) hex2bin(str_replace('-', '', $this->uuid));
|
||||
}
|
||||
|
||||
@@ -310,22 +273,15 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getClockSeqHiAndReserved()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getClockSeqHiAndReserved(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getClockSeqHiAndReserved()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getClockSeqHiAndReserved()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -334,22 +290,15 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getClockSeqLow()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getClockSeqLow(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getClockSeqLow()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getClockSeqLow()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -358,33 +307,21 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getClockSeq()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getClockSequence(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getClockSeq()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getClockSeq()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated This method will be removed in 5.0.0. There is no direct
|
||||
* alternative, but the same information may be obtained by splitting
|
||||
* in half the value returned by {@see UuidInterface::getHex()}.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getLeastSignificantBits(): string
|
||||
{
|
||||
@@ -398,11 +335,6 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* @deprecated This method will be removed in 5.0.0. There is no direct
|
||||
* alternative, but the same information may be obtained by splitting
|
||||
* in half the value returned by {@see UuidInterface::getHex()}.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getMostSignificantBits(): string
|
||||
{
|
||||
@@ -418,22 +350,15 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getNode()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getNode(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getNode()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getNode()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -442,22 +367,15 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getTimeHiAndVersion()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getTimeHiAndVersion(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getTimeHiAndVersion()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getTimeHiAndVersion()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -466,22 +384,15 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getTimeLow()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getTimeLow(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getTimeLow()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getTimeLow()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -490,22 +401,15 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getTimeMid()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getTimeMid(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex(
|
||||
$instance->getFields()
|
||||
->getTimeMid()
|
||||
->toString()
|
||||
);
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
return $instance->getNumberConverter()->fromHex($fields->getTimeMid()->toString());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -514,23 +418,19 @@ final class LazyUuidFromString implements UuidInterface
|
||||
* instance, you may call {@see Rfc4122FieldsInterface::getTimestamp()}
|
||||
* and use the arbitrary-precision math library of your choice to
|
||||
* convert it to a string integer.
|
||||
*
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
* @psalm-suppress DeprecatedMethod
|
||||
* @psalm-suppress MixedArgument
|
||||
* @psalm-suppress MixedMethodCall
|
||||
*/
|
||||
public function getTimestamp(): string
|
||||
{
|
||||
$instance = ($this->unwrapped ?? $this->unwrap());
|
||||
|
||||
$fields = $instance->getFields();
|
||||
assert($fields instanceof \Ramsey\Uuid\Rfc4122\FieldsInterface);
|
||||
|
||||
if ($fields->getVersion() !== 1) {
|
||||
throw new UnsupportedOperationException('Not a time-based UUID');
|
||||
}
|
||||
|
||||
return $instance->getNumberConverter()
|
||||
->fromHex($fields->getTimestamp()->toString());
|
||||
return $instance->getNumberConverter()->fromHex($fields->getTimestamp()->toString());
|
||||
}
|
||||
|
||||
public function toUuidV1(): UuidV1
|
||||
@@ -555,18 +455,8 @@ final class LazyUuidFromString implements UuidInterface
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress ImpureMethodCall the retrieval of the factory is a clear violation of purity here: this is a
|
||||
* known pitfall of the design of this library, where a value object contains
|
||||
* a mutable reference to a factory. We use a fixed factory here, so the violation
|
||||
* will not have real-world effects, as this object is only instantiated with the
|
||||
* default factory settings/features.
|
||||
* @psalm-suppress InaccessibleProperty property {@see $unwrapped} is used as a cache: we don't expose it to the
|
||||
* outside world, so we should be fine here.
|
||||
*/
|
||||
private function unwrap(): UuidInterface
|
||||
{
|
||||
return $this->unwrapped = (new UuidFactory())
|
||||
->fromString($this->uuid);
|
||||
return $this->unwrapped = (new UuidFactory())->fromString($this->uuid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Ramsey\Uuid\Type\NumberInterface;
|
||||
/**
|
||||
* A calculator using the brick/math library for arbitrary-precision arithmetic
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class BrickMathCalculator implements CalculatorInterface
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ use Ramsey\Uuid\Type\NumberInterface;
|
||||
/**
|
||||
* A calculator performs arithmetic operations on numbers
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface CalculatorInterface
|
||||
{
|
||||
|
||||
@@ -40,7 +40,7 @@ use const STR_PAD_LEFT;
|
||||
* Internally, this class represents the fields together as a 16-byte binary
|
||||
* string.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Fields implements FieldsInterface
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ use Ramsey\Uuid\Uuid as BaseUuid;
|
||||
/**
|
||||
* Nonstandard\Uuid is a UUID that doesn't conform to RFC 4122
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Uuid extends BaseUuid
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ use Throwable;
|
||||
/**
|
||||
* Nonstandard\UuidBuilder builds instances of Nonstandard\Uuid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class UuidBuilder implements UuidBuilderInterface
|
||||
{
|
||||
@@ -49,8 +49,6 @@ class UuidBuilder implements UuidBuilderInterface
|
||||
*
|
||||
* @return Uuid The Nonstandard\UuidBuilder returns an instance of
|
||||
* Nonstandard\Uuid
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function build(CodecInterface $codec, string $bytes): UuidInterface
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@ use Ramsey\Uuid\Uuid as BaseUuid;
|
||||
* @link https://github.com/uuid6/uuid6-ietf-draft UUID version 6 IETF draft
|
||||
* @link http://gh.peabody.io/uuidv6/ "Version 6" UUIDs
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class UuidV6 extends BaseUuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -141,10 +141,7 @@ class SystemDceSecurityProvider implements DceSecurityProviderInterface
|
||||
*/
|
||||
private function getOs(): string
|
||||
{
|
||||
/**
|
||||
* @psalm-suppress UnnecessaryVarAnnotation
|
||||
* @var string $phpOs
|
||||
*/
|
||||
/** @var string $phpOs */
|
||||
$phpOs = constant('PHP_OS');
|
||||
|
||||
return strtoupper(substr($phpOs, 0, 3));
|
||||
@@ -202,9 +199,7 @@ class SystemDceSecurityProvider implements DceSecurityProviderInterface
|
||||
return '';
|
||||
}
|
||||
|
||||
/** @var string[] $userGroups */
|
||||
$userGroups = preg_split('/\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY);
|
||||
|
||||
$firstGroup = trim($userGroups[1] ?? '', "* \t\n\r\0\x0B");
|
||||
|
||||
if ($firstGroup === '') {
|
||||
@@ -217,9 +212,7 @@ class SystemDceSecurityProvider implements DceSecurityProviderInterface
|
||||
return '';
|
||||
}
|
||||
|
||||
/** @var string[] $userGroup */
|
||||
$userGroup = preg_split('/\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY);
|
||||
|
||||
$sid = $userGroup[1] ?? '';
|
||||
|
||||
if (($lastHyphen = strrpos($sid, '-')) === false) {
|
||||
|
||||
@@ -40,9 +40,6 @@ class NodeProviderCollection extends AbstractCollection
|
||||
*
|
||||
* @param string $serialized The serialized PHP string to unserialize into
|
||||
* a UuidInterface instance
|
||||
*
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
|
||||
* @psalm-suppress RedundantConditionGivenDocblockType
|
||||
*/
|
||||
public function unserialize($serialized): void
|
||||
{
|
||||
@@ -59,6 +56,7 @@ class NodeProviderCollection extends AbstractCollection
|
||||
$this->data = array_filter(
|
||||
$data,
|
||||
function ($unserialized): bool {
|
||||
/** @phpstan-ignore-next-line */
|
||||
return $unserialized instanceof NodeProviderInterface;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -72,10 +72,11 @@ class SystemNodeProvider implements NodeProviderInterface
|
||||
*/
|
||||
protected function getNodeFromSystem(): string
|
||||
{
|
||||
/** @var string | null $node */
|
||||
static $node = null;
|
||||
|
||||
if ($node !== null) {
|
||||
return (string) $node;
|
||||
return $node;
|
||||
}
|
||||
|
||||
// First, try a Linux-specific approach.
|
||||
@@ -104,10 +105,7 @@ class SystemNodeProvider implements NodeProviderInterface
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-suppress UnnecessaryVarAnnotation
|
||||
* @var string $phpOs
|
||||
*/
|
||||
/** @var string $phpOs */
|
||||
$phpOs = constant('PHP_OS');
|
||||
|
||||
ob_start();
|
||||
@@ -151,10 +149,7 @@ class SystemNodeProvider implements NodeProviderInterface
|
||||
{
|
||||
$mac = '';
|
||||
|
||||
/**
|
||||
* @psalm-suppress UnnecessaryVarAnnotation
|
||||
* @var string $phpOs
|
||||
*/
|
||||
/** @var string $phpOs */
|
||||
$phpOs = constant('PHP_OS');
|
||||
|
||||
if (strtoupper($phpOs) === 'LINUX') {
|
||||
@@ -179,9 +174,10 @@ class SystemNodeProvider implements NodeProviderInterface
|
||||
$macs = array_map($trim, $macs);
|
||||
|
||||
// Remove invalid entries.
|
||||
$macs = array_filter($macs, function (string $address) {
|
||||
return $address !== '00:00:00:00:00:00'
|
||||
&& preg_match(self::SYSFS_PATTERN, $address);
|
||||
$macs = array_filter($macs, function (mixed $address): bool {
|
||||
assert(is_string($address));
|
||||
|
||||
return $address !== '00:00:00:00:00:00' && preg_match(self::SYSFS_PATTERN, $address);
|
||||
});
|
||||
|
||||
/** @var string|bool $mac */
|
||||
|
||||
@@ -31,12 +31,12 @@ use function unpack;
|
||||
use const STR_PAD_LEFT;
|
||||
|
||||
/**
|
||||
* RFC 4122 variant UUIDs are comprised of a set of named fields
|
||||
* RFC 4122 variant UUIDs consist of a set of named fields
|
||||
*
|
||||
* Internally, this class represents the fields together as a 16-byte binary
|
||||
* string.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Fields implements FieldsInterface
|
||||
{
|
||||
|
||||
@@ -35,7 +35,7 @@ use Ramsey\Uuid\Type\Hexadecimal;
|
||||
*
|
||||
* @link http://tools.ietf.org/html/rfc4122#section-4.1 RFC 4122, § 4.1: Format
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface FieldsInterface extends BaseFieldsInterface
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Ramsey\Uuid\Rfc4122;
|
||||
*
|
||||
* @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.10 Max UUID
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait MaxTrait
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ use Ramsey\Uuid\Uuid;
|
||||
* The max UUID is special form of UUID that is specified to have all 128 bits
|
||||
* set to one
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class MaxUuid extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Ramsey\Uuid\Rfc4122;
|
||||
*
|
||||
* @link https://tools.ietf.org/html/rfc4122#section-4.1.7 RFC 4122, § 4.1.7: Nil UUID
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait NilTrait
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ use Ramsey\Uuid\Uuid;
|
||||
* The nil UUID is special form of UUID that is specified to have all 128 bits
|
||||
* set to zero
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class NilUuid extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ use const STR_PAD_LEFT;
|
||||
/**
|
||||
* Provides common functionality for getting the time from a time-based UUID
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait TimeTrait
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@ use Throwable;
|
||||
/**
|
||||
* UuidBuilder builds instances of RFC 4122 UUIDs
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class UuidBuilder implements UuidBuilderInterface
|
||||
{
|
||||
@@ -63,8 +63,6 @@ class UuidBuilder implements UuidBuilderInterface
|
||||
* @param string $bytes The byte string from which to construct a UUID
|
||||
*
|
||||
* @return Rfc4122UuidInterface UuidBuilder returns instances of Rfc4122UuidInterface
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function build(CodecInterface $codec, string $bytes): UuidInterface
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ use Ramsey\Uuid\UuidInterface as BaseUuidInterface;
|
||||
*
|
||||
* @link https://tools.ietf.org/html/rfc4122 RFC 4122
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface UuidInterface extends BaseUuidInterface
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ use Ramsey\Uuid\Uuid;
|
||||
* Gregorian time, or version 1, UUIDs include timestamp, clock sequence, and node
|
||||
* values that are combined into a 128-bit unsigned integer
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV1 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -48,7 +48,7 @@ use function hexdec;
|
||||
* @link https://pubs.opengroup.org/onlinepubs/9629399/apdxa.htm DCE 1.1: RPC, Appendix A
|
||||
* @link https://github.com/google/uuid Go package for UUIDs (includes DCE implementation)
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV2 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -22,10 +22,10 @@ use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
|
||||
/**
|
||||
* Version 3 UUIDs are named-based, using combination of a namespace and name
|
||||
* Version 3 UUIDs are named-based, using a combination of a namespace and name
|
||||
* that are hashed into a 128-bit unsigned integer using MD5
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV3 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ use Ramsey\Uuid\Uuid;
|
||||
* Random, or version 4, UUIDs are randomly or pseudo-randomly generated 128-bit
|
||||
* integers
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV4 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -22,10 +22,10 @@ use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
|
||||
/**
|
||||
* Version 5 UUIDs are named-based, using combination of a namespace and name
|
||||
* Version 5 UUIDs are named-based, using a combination of a namespace and name
|
||||
* that are hashed into a 128-bit unsigned integer using SHA1
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV5 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ use Ramsey\Uuid\Nonstandard\UuidV6 as NonstandardUuidV6;
|
||||
*
|
||||
* @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.6 UUID Version 6
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV6 extends NonstandardUuidV6 implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ use Ramsey\Uuid\Uuid;
|
||||
*
|
||||
* @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.7 UUID Version 7
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV7 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -32,7 +32,7 @@ use Ramsey\Uuid\Uuid;
|
||||
*
|
||||
* @link https://datatracker.ietf.org/doc/html/draft-ietf-uuidrev-rfc4122bis-00#section-5.8 UUID Version 8
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class UuidV8 extends Uuid implements UuidInterface
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ use function str_replace;
|
||||
/**
|
||||
* Rfc4122\Validator validates strings as UUIDs of the RFC 4122 variant
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Validator implements ValidatorInterface
|
||||
{
|
||||
@@ -31,9 +31,7 @@ final class Validator implements ValidatorInterface
|
||||
. '[1-8][0-9A-Fa-f]{3}-[ABab89][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}\z';
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function getPattern(): string
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ use const STR_PAD_LEFT;
|
||||
/**
|
||||
* Provides common functionality for handling the variant, as defined by RFC 4122
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait VariantTrait
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@ use Ramsey\Uuid\Uuid;
|
||||
/**
|
||||
* Provides common functionality for handling the version, as defined by RFC 4122
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
trait VersionTrait
|
||||
{
|
||||
|
||||
@@ -31,12 +31,12 @@ use function str_starts_with;
|
||||
* To support values as true decimals and not as floats or doubles, we store the
|
||||
* decimals as strings.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Decimal implements NumberInterface
|
||||
{
|
||||
private string $value;
|
||||
private bool $isNegative = false;
|
||||
private bool $isNegative;
|
||||
|
||||
public function __construct(float | int | string | self $value)
|
||||
{
|
||||
@@ -61,6 +61,8 @@ final class Decimal implements NumberInterface
|
||||
|
||||
if (str_starts_with($value, '-')) {
|
||||
$this->isNegative = true;
|
||||
} else {
|
||||
$this->isNegative = false;
|
||||
}
|
||||
|
||||
$this->value = $value;
|
||||
@@ -103,8 +105,6 @@ final class Decimal implements NumberInterface
|
||||
* Constructs the object from a serialized string representation
|
||||
*
|
||||
* @param string $data The serialized string representation of the object
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function unserialize(string $data): void
|
||||
{
|
||||
@@ -113,8 +113,6 @@ final class Decimal implements NumberInterface
|
||||
|
||||
/**
|
||||
* @param array{string?: string} $data
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function __unserialize(array $data): void
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ use function substr;
|
||||
* returned from ramsey/uuid methods as strings are truly hexadecimal and not some
|
||||
* other kind of string.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Hexadecimal implements TypeInterface
|
||||
{
|
||||
@@ -74,8 +74,6 @@ final class Hexadecimal implements TypeInterface
|
||||
* Constructs the object from a serialized string representation
|
||||
*
|
||||
* @param string $data The serialized string representation of the object
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function unserialize(string $data): void
|
||||
{
|
||||
|
||||
@@ -33,15 +33,18 @@ use function substr;
|
||||
* To support large integers beyond PHP_INT_MAX and PHP_INT_MIN on both 64-bit
|
||||
* and 32-bit systems, we store the integers as strings.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Integer implements NumberInterface
|
||||
{
|
||||
/**
|
||||
* @psalm-var numeric-string
|
||||
* @var numeric-string
|
||||
*/
|
||||
private string $value;
|
||||
|
||||
/**
|
||||
* @phpstan-ignore property.readOnlyByPhpDocDefaultValue
|
||||
*/
|
||||
private bool $isNegative = false;
|
||||
|
||||
public function __construct(float | int | string | self $value)
|
||||
@@ -55,7 +58,7 @@ final class Integer implements NumberInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return numeric-string
|
||||
* @return numeric-string
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -63,7 +66,7 @@ final class Integer implements NumberInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return numeric-string
|
||||
* @return numeric-string
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
@@ -92,8 +95,6 @@ final class Integer implements NumberInterface
|
||||
* Constructs the object from a serialized string representation
|
||||
*
|
||||
* @param string $data The serialized string representation of the object
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function unserialize(string $data): void
|
||||
{
|
||||
@@ -147,7 +148,7 @@ final class Integer implements NumberInterface
|
||||
if ($sign === '-' && $value !== '0') {
|
||||
$value = $sign . $value;
|
||||
|
||||
/** @psalm-suppress InaccessibleProperty */
|
||||
/** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */
|
||||
$this->isNegative = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Ramsey\Uuid\Type;
|
||||
/**
|
||||
* NumberInterface ensures consistency in numeric values returned by ramsey/uuid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface NumberInterface extends TypeInterface
|
||||
{
|
||||
|
||||
+1
-3
@@ -29,7 +29,7 @@ use function sprintf;
|
||||
* by ramsey/uuid are truly timestamp integers and not some other kind of string
|
||||
* or integer.
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class Time implements TypeInterface
|
||||
{
|
||||
@@ -95,8 +95,6 @@ final class Time implements TypeInterface
|
||||
* Constructs the object from a serialized string representation
|
||||
*
|
||||
* @param string $data The serialized string representation of the object
|
||||
*
|
||||
* @psalm-suppress UnusedMethodCall
|
||||
*/
|
||||
public function unserialize(string $data): void
|
||||
{
|
||||
|
||||
@@ -20,7 +20,7 @@ use Serializable;
|
||||
/**
|
||||
* TypeInterface ensures consistency in typed values returned by ramsey/uuid
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface TypeInterface extends JsonSerializable, Serializable
|
||||
{
|
||||
|
||||
+22
-54
@@ -42,14 +42,14 @@ use function substr;
|
||||
/**
|
||||
* Uuid provides constants and static methods for working with and generating UUIDs
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
class Uuid implements UuidInterface
|
||||
{
|
||||
use DeprecatedUuidMethodsTrait;
|
||||
|
||||
/**
|
||||
* When this namespace is specified, the name string is a fully-qualified
|
||||
* When this namespace is specified, the name string is a fully qualified
|
||||
* domain name
|
||||
*
|
||||
* @link http://tools.ietf.org/html/rfc4122#appendix-C RFC 4122, Appendix C: Some Name Space IDs
|
||||
@@ -223,12 +223,16 @@ class Uuid implements UuidInterface
|
||||
self::DCE_DOMAIN_ORG => 'org',
|
||||
];
|
||||
|
||||
/**
|
||||
* @phpstan-ignore property.readOnlyByPhpDocDefaultValue
|
||||
*/
|
||||
private static ?UuidFactoryInterface $factory = null;
|
||||
|
||||
/**
|
||||
* @var bool flag to detect if the UUID factory was replaced internally,
|
||||
* which disables all optimizations for the default/happy path internal
|
||||
* scenarios
|
||||
* @phpstan-ignore property.readOnlyByPhpDocDefaultValue
|
||||
*/
|
||||
private static bool $factoryReplaced = false;
|
||||
|
||||
@@ -274,7 +278,7 @@ class Uuid implements UuidInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
@@ -321,9 +325,16 @@ class Uuid implements UuidInterface
|
||||
$uuid = self::getFactory()->fromString($data);
|
||||
}
|
||||
|
||||
/** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */
|
||||
$this->codec = $uuid->codec;
|
||||
|
||||
/** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */
|
||||
$this->numberConverter = $uuid->numberConverter;
|
||||
|
||||
/** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */
|
||||
$this->fields = $uuid->fields;
|
||||
|
||||
/** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */
|
||||
$this->timeConverter = $uuid->timeConverter;
|
||||
}
|
||||
|
||||
@@ -366,7 +377,7 @@ class Uuid implements UuidInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function getBytes(): string
|
||||
{
|
||||
@@ -394,7 +405,7 @@ class Uuid implements UuidInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -438,13 +449,6 @@ class Uuid implements UuidInterface
|
||||
* string representation
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
* @psalm-suppress ImpureStaticProperty we know that the factory being replaced can lead to massive
|
||||
* havoc across all consumers: that should never happen, and
|
||||
* is generally to be discouraged. Until the factory is kept
|
||||
* un-replaced, this method is effectively pure.
|
||||
*/
|
||||
public static function fromBytes(string $bytes): UuidInterface
|
||||
{
|
||||
@@ -477,13 +481,6 @@ class Uuid implements UuidInterface
|
||||
* string representation
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
* @psalm-suppress ImpureStaticProperty we know that the factory being replaced can lead to massive
|
||||
* havoc across all consumers: that should never happen, and
|
||||
* is generally to be discouraged. Until the factory is kept
|
||||
* un-replaced, this method is effectively pure.
|
||||
*/
|
||||
public static function fromString(string $uuid): UuidInterface
|
||||
{
|
||||
@@ -524,24 +521,19 @@ class Uuid implements UuidInterface
|
||||
* @param Hexadecimal $hex Hexadecimal object representing a hexadecimal number
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance created from the Hexadecimal
|
||||
* object representing a hexadecimal number
|
||||
* object representing a hexadecimal number
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
* @psalm-suppress MixedInferredReturnType,MixedReturnStatement
|
||||
*/
|
||||
public static function fromHexadecimal(Hexadecimal $hex): UuidInterface
|
||||
{
|
||||
$factory = self::getFactory();
|
||||
|
||||
if (method_exists($factory, 'fromHexadecimal')) {
|
||||
/**
|
||||
* @phpstan-ignore-next-line
|
||||
* @psalm-suppress UndefinedInterfaceMethod
|
||||
*/
|
||||
return self::getFactory()->fromHexadecimal($hex);
|
||||
$uuid = $factory->fromHexadecimal($hex);
|
||||
assert($uuid instanceof UuidInterface);
|
||||
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
throw new BadMethodCallException('The method fromHexadecimal() does not exist on the provided factory');
|
||||
@@ -556,13 +548,9 @@ class Uuid implements UuidInterface
|
||||
* representation of a 128-bit integer
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
*/
|
||||
public static function fromInteger(string $integer): UuidInterface
|
||||
{
|
||||
/** @psalm-suppress ImpureMethodCall */
|
||||
return self::getFactory()->fromInteger($integer);
|
||||
}
|
||||
|
||||
@@ -573,14 +561,10 @@ class Uuid implements UuidInterface
|
||||
*
|
||||
* @return bool True if the string is a valid UUID, false otherwise
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
*
|
||||
* @psalm-assert-if-true =non-empty-string $uuid
|
||||
* @phpstan-assert-if-true =non-empty-string $uuid
|
||||
*/
|
||||
public static function isValid(string $uuid): bool
|
||||
{
|
||||
/** @psalm-suppress ImpureMethodCall */
|
||||
return self::getFactory()->getValidator()->validate($uuid);
|
||||
}
|
||||
|
||||
@@ -641,14 +625,6 @@ class Uuid implements UuidInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance that represents a
|
||||
* version 3 UUID
|
||||
*
|
||||
* @psalm-suppress ImpureMethodCall we know that the factory being replaced can lead to massive
|
||||
* havoc across all consumers: that should never happen, and
|
||||
* is generally to be discouraged. Until the factory is kept
|
||||
* un-replaced, this method is effectively pure.
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
*/
|
||||
public static function uuid3($ns, string $name): UuidInterface
|
||||
{
|
||||
@@ -675,14 +651,6 @@ class Uuid implements UuidInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance that represents a
|
||||
* version 5 UUID
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
*
|
||||
* @psalm-suppress ImpureMethodCall we know that the factory being replaced can lead to massive
|
||||
* havoc across all consumers: that should never happen, and
|
||||
* is generally to be discouraged. Until the factory is kept
|
||||
* un-replaced, this method is effectively pure.
|
||||
*/
|
||||
public static function uuid5($ns, string $name): UuidInterface
|
||||
{
|
||||
|
||||
+4
-29
@@ -240,9 +240,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
$this->uuidBuilder = $builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-mutation-free
|
||||
*/
|
||||
public function getValidator(): ValidatorInterface
|
||||
{
|
||||
return $this->validator;
|
||||
@@ -261,17 +258,11 @@ class UuidFactory implements UuidFactoryInterface
|
||||
$this->validator = $validator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromBytes(string $bytes): UuidInterface
|
||||
{
|
||||
return $this->codec->decodeBytes($bytes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromString(string $uuid): UuidInterface
|
||||
{
|
||||
$uuid = strtolower($uuid);
|
||||
@@ -279,9 +270,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
return $this->codec->decode($uuid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromInteger(string $integer): UuidInterface
|
||||
{
|
||||
$hex = $this->numberConverter->toHex($integer);
|
||||
@@ -312,9 +300,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_TIME);
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromHexadecimal(Hexadecimal $hex): UuidInterface
|
||||
{
|
||||
return $this->codec->decode($hex->__toString());
|
||||
@@ -348,7 +333,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function uuid3($ns, string $name): UuidInterface
|
||||
{
|
||||
@@ -364,7 +348,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function uuid5($ns, string $name): UuidInterface
|
||||
{
|
||||
@@ -439,12 +422,9 @@ class UuidFactory implements UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface An instance of UuidInterface, created from the
|
||||
* provided bytes
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function uuid(string $bytes): UuidInterface
|
||||
{
|
||||
/** @psalm-suppress ImpurePropertyFetch */
|
||||
return $this->uuidBuilder->build($this->codec, $bytes);
|
||||
}
|
||||
|
||||
@@ -459,8 +439,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface An instance of UuidInterface, created by hashing
|
||||
* together the provided namespace and name
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
private function uuidFromNsAndName(
|
||||
UuidInterface | string $ns,
|
||||
@@ -485,19 +463,17 @@ class UuidFactory implements UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface An instance of UuidInterface, created from the
|
||||
* byte string and version
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
private function uuidFromBytesAndVersion(string $bytes, int $version): UuidInterface
|
||||
{
|
||||
/** @var array $unpackedTime */
|
||||
/** @var int[] $unpackedTime */
|
||||
$unpackedTime = unpack('n*', substr($bytes, 6, 2));
|
||||
$timeHi = (int) $unpackedTime[1];
|
||||
$timeHi = $unpackedTime[1];
|
||||
$timeHiAndVersion = pack('n*', BinaryUtils::applyVersion($timeHi, $version));
|
||||
|
||||
/** @var array $unpackedClockSeq */
|
||||
/** @var int[] $unpackedClockSeq */
|
||||
$unpackedClockSeq = unpack('n*', substr($bytes, 8, 2));
|
||||
$clockSeqHi = (int) $unpackedClockSeq[1];
|
||||
$clockSeqHi = $unpackedClockSeq[1];
|
||||
$clockSeqHiAndReserved = pack('n*', BinaryUtils::applyVariant($clockSeqHi));
|
||||
|
||||
$bytes = substr_replace($bytes, $timeHiAndVersion, 6, 2);
|
||||
@@ -507,7 +483,6 @@ class UuidFactory implements UuidFactoryInterface
|
||||
return LazyUuidFromString::fromBytes($bytes);
|
||||
}
|
||||
|
||||
/** @psalm-suppress ImpureVariable */
|
||||
return $this->uuid($bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ use Ramsey\Uuid\Type\Integer as IntegerObject;
|
||||
use Ramsey\Uuid\Validator\ValidatorInterface;
|
||||
|
||||
/**
|
||||
* UuidFactoryInterface defines common functionality all `UuidFactory` instances
|
||||
* UuidFactoryInterface defines the common functionality all `UuidFactory` instances
|
||||
* must implement
|
||||
*/
|
||||
interface UuidFactoryInterface
|
||||
@@ -32,8 +32,6 @@ interface UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance created from a binary
|
||||
* string representation
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromBytes(string $bytes): UuidInterface;
|
||||
|
||||
@@ -63,8 +61,6 @@ interface UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance created from the string
|
||||
* representation of a 128-bit integer
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromInteger(string $integer): UuidInterface;
|
||||
|
||||
@@ -75,15 +71,11 @@ interface UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance created from a hexadecimal
|
||||
* string representation
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function fromString(string $uuid): UuidInterface;
|
||||
|
||||
/**
|
||||
* Returns the validator to use for the factory
|
||||
*
|
||||
* @psalm-mutation-free
|
||||
* Returns the validator used by the factory
|
||||
*/
|
||||
public function getValidator(): ValidatorInterface;
|
||||
|
||||
@@ -138,8 +130,6 @@ interface UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance that represents a
|
||||
* version 3 UUID
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function uuid3($ns, string $name): UuidInterface;
|
||||
|
||||
@@ -160,8 +150,6 @@ interface UuidFactoryInterface
|
||||
*
|
||||
* @return UuidInterface A UuidInterface instance that represents a
|
||||
* version 5 UUID
|
||||
*
|
||||
* @psalm-pure
|
||||
*/
|
||||
public function uuid5($ns, string $name): UuidInterface;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ use Stringable;
|
||||
* A UUID is a universally unique identifier adhering to an agreed-upon
|
||||
* representation format and standard for generation
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface UuidInterface extends
|
||||
DeprecatedUuidInterface,
|
||||
@@ -66,7 +66,7 @@ interface UuidInterface extends
|
||||
/**
|
||||
* Returns the binary string representation of the UUID
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function getBytes(): string;
|
||||
|
||||
@@ -96,14 +96,14 @@ interface UuidInterface extends
|
||||
/**
|
||||
* Returns the string standard representation of the UUID
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function toString(): string;
|
||||
|
||||
/**
|
||||
* Casts the UUID to the string standard representation
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function __toString(): string;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ use function str_replace;
|
||||
/**
|
||||
* GenericValidator validates strings as UUIDs of any variant
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
final class GenericValidator implements ValidatorInterface
|
||||
{
|
||||
@@ -32,9 +32,7 @@ final class GenericValidator implements ValidatorInterface
|
||||
private const VALID_PATTERN = '\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\z';
|
||||
|
||||
/**
|
||||
* @psalm-return non-empty-string
|
||||
* @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty
|
||||
* @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty
|
||||
* @return non-empty-string
|
||||
*/
|
||||
public function getPattern(): string
|
||||
{
|
||||
|
||||
@@ -17,16 +17,14 @@ namespace Ramsey\Uuid\Validator;
|
||||
/**
|
||||
* A validator validates a string as a proper UUID
|
||||
*
|
||||
* @psalm-immutable
|
||||
* @immutable
|
||||
*/
|
||||
interface ValidatorInterface
|
||||
{
|
||||
/**
|
||||
* Returns the regular expression pattern used by this validator
|
||||
*
|
||||
* @return string The regular expression pattern this validator uses
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
* @return non-empty-string The regular expression pattern this validator uses
|
||||
*/
|
||||
public function getPattern(): string;
|
||||
|
||||
|
||||
@@ -71,9 +71,6 @@ function v2(
|
||||
* @param string|UuidInterface $ns The namespace (must be a valid UUID)
|
||||
*
|
||||
* @return non-empty-string Version 3 UUID as a string
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
*/
|
||||
function v3($ns, string $name): string
|
||||
{
|
||||
@@ -97,9 +94,6 @@ function v4(): string
|
||||
* @param string|UuidInterface $ns The namespace (must be a valid UUID)
|
||||
*
|
||||
* @return non-empty-string Version 5 UUID as a string
|
||||
*
|
||||
* @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants,
|
||||
* but under constant factory setups, this method operates in functionally pure manners
|
||||
*/
|
||||
function v5($ns, string $name): string
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ class BinaryUtilsTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{timeHi: int, version: int, expectedInt: int, expectedHex: non-empty-string}>
|
||||
*/
|
||||
public function provideVersionTestValues(): array
|
||||
{
|
||||
@@ -128,7 +128,7 @@ class BinaryUtilsTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{clockSeq: int, expectedInt: int, expectedHex: non-empty-string}>
|
||||
*/
|
||||
public function provideVariantTestValues(): array
|
||||
{
|
||||
|
||||
@@ -4,7 +4,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace Ramsey\Uuid\Test\Builder;
|
||||
|
||||
use DateTimeInterface;
|
||||
use Mockery;
|
||||
use Ramsey\Uuid\Builder\FallbackBuilder;
|
||||
use Ramsey\Uuid\Builder\UuidBuilderInterface;
|
||||
@@ -101,7 +100,7 @@ class FallbackBuilderTest extends TestCase
|
||||
$uuid = $builder->build($codec, $bytes);
|
||||
|
||||
if (($uuid instanceof UuidV1) || ($uuid instanceof UuidV2) || ($uuid instanceof UuidV6)) {
|
||||
$this->assertInstanceOf(DateTimeInterface::class, $uuid->getDateTime());
|
||||
$this->assertNotEmpty($uuid->getDateTime()->format('r'));
|
||||
}
|
||||
} catch (UnableToBuildUuidException $exception) {
|
||||
switch ($exception->getMessage()) {
|
||||
@@ -118,78 +117,78 @@ class FallbackBuilderTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{bytes: string}>
|
||||
*/
|
||||
public function provideBytes(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1110b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1110b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1111b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1111b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1112b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1112b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1113b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1113b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1114b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1114b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1115b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1115b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1116b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1116b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e1117b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e1117b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e111eb210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e111eb210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// GUID bytes
|
||||
'bytes' => hex2bin('b08c6fff7dc5e111fb210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('b08c6fff7dc5e111fb210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// Version 1 bytes
|
||||
'bytes' => hex2bin('ff6f8cb0c57d11e19b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('ff6f8cb0c57d11e19b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// Version 2 bytes
|
||||
'bytes' => hex2bin('000001f55cde21ea84000242ac130003'),
|
||||
'bytes' => (string) hex2bin('000001f55cde21ea84000242ac130003'),
|
||||
],
|
||||
[
|
||||
// Version 3 bytes
|
||||
'bytes' => hex2bin('ff6f8cb0c57d31e1bb210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('ff6f8cb0c57d31e1bb210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// Version 4 bytes
|
||||
'bytes' => hex2bin('ff6f8cb0c57d41e1ab210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('ff6f8cb0c57d41e1ab210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// Version 5 bytes
|
||||
'bytes' => hex2bin('ff6f8cb0c57d51e18b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('ff6f8cb0c57d51e18b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// Version 6 bytes
|
||||
'bytes' => hex2bin('ff6f8cb0c57d61e18b210800200c9a66'),
|
||||
'bytes' => (string) hex2bin('ff6f8cb0c57d61e18b210800200c9a66'),
|
||||
],
|
||||
[
|
||||
// NIL bytes
|
||||
'bytes' => hex2bin('00000000000000000000000000000000'),
|
||||
'bytes' => (string) hex2bin('00000000000000000000000000000000'),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ class BigNumberTimeConverterTest extends TestCase
|
||||
$converter = new BigNumberTimeConverter();
|
||||
$returned = $converter->calculateTime((string) $seconds, (string) $microseconds);
|
||||
|
||||
$this->assertInstanceOf(Hexadecimal::class, $returned);
|
||||
$this->assertSame($expected, $returned->toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,10 @@ use Ramsey\Uuid\Type\Hexadecimal;
|
||||
class GenericTimeConverterTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @param numeric-string $seconds
|
||||
* @param numeric-string $microseconds
|
||||
* @param non-empty-string $expected
|
||||
*
|
||||
* @dataProvider provideCalculateTime
|
||||
*/
|
||||
public function testCalculateTime(string $seconds, string $microseconds, string $expected): void
|
||||
@@ -25,7 +29,7 @@ class GenericTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{seconds: numeric-string, microseconds: numeric-string, expected: non-empty-string}>
|
||||
*/
|
||||
public function provideCalculateTime(): array
|
||||
{
|
||||
@@ -80,6 +84,9 @@ class GenericTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @param numeric-string $unixTimestamp
|
||||
* @param numeric-string $microseconds
|
||||
*
|
||||
* @dataProvider provideConvertTime
|
||||
*/
|
||||
public function testConvertTime(Hexadecimal $uuidTimestamp, string $unixTimestamp, string $microseconds): void
|
||||
@@ -94,7 +101,7 @@ class GenericTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{uuidTimestamp: Hexadecimal, unixTimestamp: numeric-string, microseconds: numeric-string}>
|
||||
*/
|
||||
public function provideConvertTime(): array
|
||||
{
|
||||
|
||||
@@ -70,6 +70,9 @@ class PhpTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @param numeric-string $unixTimestamp
|
||||
* @param numeric-string $microseconds
|
||||
*
|
||||
* @dataProvider provideConvertTime
|
||||
*/
|
||||
public function testConvertTime(Hexadecimal $uuidTimestamp, string $unixTimestamp, string $microseconds): void
|
||||
@@ -85,7 +88,7 @@ class PhpTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{uuidTimestamp: Hexadecimal, unixTimestamp: numeric-string, microseconds: numeric-string}>
|
||||
*/
|
||||
public function provideConvertTime(): array
|
||||
{
|
||||
@@ -134,6 +137,10 @@ class PhpTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @param non-empty-string $seconds
|
||||
* @param non-empty-string $microseconds
|
||||
* @param non-empty-string $expected
|
||||
*
|
||||
* @dataProvider provideCalculateTime
|
||||
*/
|
||||
public function testCalculateTime(string $seconds, string $microseconds, string $expected): void
|
||||
@@ -148,7 +155,7 @@ class PhpTimeConverterTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
|
||||
* @return array<array{seconds: non-empty-string, microseconds: non-empty-string, expected: non-empty-string}>
|
||||
*/
|
||||
public function provideCalculateTime(): array
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user