From 3853fdb8debc130a2438bbc8130dca0943bd0b19 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 29 Jan 2019 15:15:22 +0100 Subject: [PATCH 01/87] Feature/update (#104) * Updated dependencies, added php-cs-fixer * CS fixes * Fixed failing tests * Updated readme * Fixed readme * Updated branch alias * Removed prefer-lower flag from travis matrix * Updated minimum required php version --- .gitignore | 3 +- .php_cs | 18 + .travis.yml | 18 +- README.md | 16 +- composer.json | 11 +- .../PHPHumanizer/Collection/Formatter.php | 32 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 + .../PHPHumanizer/CollectionHumanizer.php | 2 + .../PHPHumanizer/DateTime/Difference.php | 10 +- .../DateTime/Difference/CompoundResult.php | 2 + src/Coduo/PHPHumanizer/DateTime/Formatter.php | 6 +- .../DateTime/PreciseDifference.php | 6 +- .../DateTime/PreciseFormatter.php | 8 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 2 + .../PHPHumanizer/DateTime/Unit/JustNow.php | 2 + .../PHPHumanizer/DateTime/Unit/Minute.php | 2 + .../PHPHumanizer/DateTime/Unit/Month.php | 2 + .../PHPHumanizer/DateTime/Unit/Second.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 2 + src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 2 + src/Coduo/PHPHumanizer/Number/Ordinal.php | 4 +- .../PHPHumanizer/Number/Ordinal/Builder.php | 8 +- .../Number/Ordinal/StrategyInterface.php | 2 + .../PHPHumanizer/Number/RomanNumeral.php | 10 +- src/Coduo/PHPHumanizer/NumberHumanizer.php | 2 + .../Resources/Ordinal/DeStrategy.php | 2 + .../Resources/Ordinal/EnStrategy.php | 8 +- .../Resources/Ordinal/EsStrategy.php | 2 + .../Resources/Ordinal/FrStrategy.php | 4 +- .../Resources/Ordinal/IdStrategy.php | 2 + .../Resources/Ordinal/ItStrategy.php | 2 + .../Resources/Ordinal/NlStrategy.php | 4 +- .../Resources/Ordinal/PtStrategy.php | 2 + .../PHPHumanizer/String/BinarySuffix.php | 16 +- src/Coduo/PHPHumanizer/String/Breakpoint.php | 2 + .../PHPHumanizer/String/HtmlTruncate.php | 24 +- src/Coduo/PHPHumanizer/String/Humanize.php | 10 +- .../PHPHumanizer/String/MetricSuffix.php | 10 +- .../String/ShortcodeProcessor.php | 2 + .../PHPHumanizer/String/TextTruncate.php | 6 +- .../PHPHumanizer/String/TruncateInterface.php | 2 + .../PHPHumanizer/String/WordBreakpoint.php | 12 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 4 +- .../Tests/CollectionHumanizerTest.php | 96 +-- .../Tests/DateTimeHumanizerTest.php | 680 +++++++++--------- .../Tests/NumberHumanizerTest.php | 302 ++++---- .../Tests/StringHumanizerTest.php | 110 +-- tests/bootstrap.php | 4 +- 52 files changed, 809 insertions(+), 689 deletions(-) create mode 100644 .php_cs diff --git a/.gitignore b/.gitignore index a3f78a6..f0bf8a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ vendor/ bin/ composer.lock -composer.phar \ No newline at end of file +composer.phar +.php_cs.cache \ No newline at end of file diff --git a/.php_cs b/.php_cs new file mode 100644 index 0000000..5983888 --- /dev/null +++ b/.php_cs @@ -0,0 +1,18 @@ +setRules([ + '@PSR2' => true, + 'declare_strict_types' => true, + 'array_syntax' => ['syntax' => 'short'], + 'blank_line_after_opening_tag' => true, + 'single_blank_line_before_namespace' => true, + 'no_unused_imports' => true, + 'single_quote' => true, + 'native_function_invocation' => true + ]) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__ . '/src') + ->in(__DIR__ . '/tests') + )->setRiskyAllowed(true) + ->setUsingCache(false); \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e54e070..35d2afa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,26 +5,22 @@ sudo: false cache: directories: - $HOME/.composer/cache - + matrix: include: - - php: 5.3 - env: DEPENDENCIES='low' - - php: 5.3 - - php: 5.4 - - php: 5.5 - - php: 5.6 - php: 7.0 - - php: hhvm + - php: 7.1 + - php: 7.2 + - php: 7.3 before_install: - composer self-update install: - export COMPOSER_ROOT_VERSION=dev-master - - if [ "$DEPENDENCIES" != "low" ]; then composer update; fi; - - if [ "$DEPENDENCIES" == "low" ]; then composer update --prefer-lowest; fi; + - composer update script: - ./bin/phpspec run --format=pretty - - ./bin/phpunit + - ./bin/phpunit + - ./bin/php-cs-fixer fix -v --dry-run \ No newline at end of file diff --git a/README.md b/README.md index 04d2502..d530903 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#PHP Humanizer +# PHP Humanizer [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) @@ -6,9 +6,19 @@ [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) +### Tests +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.0) +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.org/coduo/php-humanizer) - 2.0 +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.org/coduo/php-humanizer) - 1.0 + +[Readme for master (3.0) version](https://github.com/coduo/php-humanizer/tree/master/README.md) +[Readme for 2.0 version](https://github.com/coduo/php-matcher/tree/2.0/README.md) +[Readme for 1.0 version](https://github.com/coduo/php-matcher/tree/1.0/README.md) + + Humanize values to make them readable for regular people ;) -#Installation +# Installation Run the following command: @@ -16,7 +26,7 @@ Run the following command: composer require coduo/php-humanizer ``` -#Usage +# Usage ## Text diff --git a/composer.json b/composer.json index 1615773..def4c0a 100644 --- a/composer.json +++ b/composer.json @@ -15,10 +15,11 @@ } ], "require": { - "php": ">=5.3.0", - "symfony/config": "^2.3|^3.0", - "symfony/translation": "^2.3|^3.0", - "symfony/yaml": "^2.3|^3.0" + "php": ">=7.0.0", + "symfony/config": "^2.3|^3.0|^4.0", + "symfony/translation": "^2.3|^3.0|^4.0", + "symfony/yaml": "^2.3|^3.0|^4.0", + "friendsofphp/php-cs-fixer": "^2.14" }, "require-dev": { "thunderer/shortcode": "~0.5", @@ -36,7 +37,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "suggest": { diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 926a166..60f51c4 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -1,5 +1,7 @@ translator->transChoice('comma_separated_with_limit', $moreCount, array( - '%list%' => implode(', ', $display), + return $this->translator->transChoice('comma_separated_with_limit', $moreCount, [ + '%list%' => \implode(', ', $display), '%count%' => $moreCount, - ), $this->catalogue); + ], $this->catalogue); } /** @@ -77,14 +79,14 @@ private function formatCommaSeparatedWithLimit($collection, $limit, $count) */ private function formatCommaSeparated($collection, $count) { - $display = array_map(function ($element) { + $display = \array_map(function ($element) { return (string) $element; - }, array_slice($collection, 0, $count - 1)); + }, \array_slice($collection, 0, $count - 1)); - return $this->translator->trans('comma_separated', array( - '%list%' => implode(', ', $display), - '%last%' => (string) end($collection), - ), $this->catalogue); + return $this->translator->trans('comma_separated', [ + '%list%' => \implode(', ', $display), + '%last%' => (string) \end($collection), + ], $this->catalogue); } /** @@ -94,9 +96,9 @@ private function formatCommaSeparated($collection, $count) */ private function formatOnlyTwo($collection) { - return $this->translator->trans('only_two', array( + return $this->translator->trans('only_two', [ '%first%' => (string) $collection[0], '%second%' => (string) $collection[1], - ), $this->catalogue); + ], $this->catalogue); } } diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 13c0fbc..c102712 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -1,5 +1,7 @@ toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; + $absoluteMilliSecondsDiff = \abs($this->toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; foreach ($units as $unit) { if ($absoluteMilliSecondsDiff >= $unit->getMilliseconds()) { $this->unit = $unit; @@ -80,7 +82,7 @@ private function calculate() $this->quantity = ($absoluteMilliSecondsDiff == 0) ? $absoluteMilliSecondsDiff - : (int) round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); + : (int) \round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); } public function isPast() diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 79ba44d..4721c2e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -1,5 +1,7 @@ getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); + $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); return $this->translator->transChoice( $translationKey, $difference->getQuantity(), - array('%count%' => $difference->getQuantity()), + ['%count%' => $difference->getQuantity()], 'difference', $locale ); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 0edfd7e..221f1a6 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -1,5 +1,7 @@ fromDate->diff($this->toDate); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 46a1b80..52a2e34 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -1,5 +1,7 @@ getCompoundResults() as $result) { $diff[] = $this->translator->transChoice( 'compound.'.$result->getUnit()->getName(), $result->getQuantity(), - array('%count%' => $result->getQuantity()), + ['%count%' => $result->getQuantity()], 'difference', $locale ); @@ -41,7 +43,7 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') return $this->translator->trans( 'compound.'.($difference->isPast() ? 'past' : 'future'), - array('%value%' => implode(', ', $diff)), + ['%value%' => \implode(', ', $diff)], 'difference', $locale ); diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index 75681f5..bac4b47 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -1,5 +1,7 @@ strategy ->ordinalIndicator($this->number); } -} \ No newline at end of file +} diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index e6a686e..86a5b82 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -1,5 +1,7 @@ 1000, 'CM' => 900, 'D' => 500, @@ -22,7 +24,7 @@ final class RomanNumeral 'V' => 5, 'IV' => 4, 'I' => 1, - ); + ]; /** * @param $number @@ -61,12 +63,12 @@ public function toRoman($number) */ public function fromRoman($string) { - if (mb_strlen($string) === 0 || 0 === preg_match(self::ROMAN_STRING_MATCHER, $string)) { + if (\mb_strlen((string) $string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, (string) $string)) { throw new \InvalidArgumentException(); } $total = 0; - $i = mb_strlen($string); + $i = \mb_strlen($string); while ($i > 0) { $digit = $this->map[$string{--$i}]; diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 886a2d5..25835ea 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -1,5 +1,7 @@ '#.## PB', 1099511627776 => '#.## TB', 1073741824 => '#.## GB', 1048576 => '#.## MB', 1024 => '#.# kB', 0 => '# bytes', - ); + ]; /** * @param int $number @@ -37,11 +39,11 @@ final class BinarySuffix */ public function __construct($number, $locale = 'en', $precision = null) { - if (!is_numeric($number)) { + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } - if (!is_null($precision)) { + if (!\is_null($precision)) { $this->setSpecificPrecisionFormat($precision); } @@ -52,7 +54,7 @@ public function __construct($number, $locale = 'en', $precision = null) * Workaround for 32-bit systems which ignore array ordering when * dropping values over 2^32-1 */ - krsort($this->binaryPrefixes); + \krsort($this->binaryPrefixes); } public function convert() @@ -94,12 +96,12 @@ protected function setSpecificPrecisionFormat($precision) $icuFormat = '#'; if ($precision > 0) { - $icuFormat .= str_pad('#.', (2 + $precision), '0'); + $icuFormat .= \str_pad('#.', (2 + $precision), '0'); } foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size >= 1024) { - $symbol = substr($unitPattern, strpos($unitPattern, ' ')); + $symbol = \substr($unitPattern, \strpos($unitPattern, ' ')); $this->binaryPrefixes[$size] = $icuFormat.$symbol; } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index 23d37f1..911381b 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -1,5 +1,7 @@ allowedTags); + $strippedText = \strip_tags($text, $this->allowedTags); return $this->truncateHtml($strippedText, $charactersCount); } @@ -56,37 +58,37 @@ private function truncateHtml($string, $charactersCount) { $limit = $charactersCount; $offset = 0; - $tags = array(); + $tags = []; // Handle special characters. - preg_match_all('/&[a-z]+;/i', strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('/&[a-z]+;/i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] >= $limit) { break; } - $limit += (mb_strlen($match[0][0]) - 1); + $limit += (\mb_strlen($match[0][0]) - 1); } // Handle all the html tags. - preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] - $offset >= $limit) { break; } - $tag = mb_substr(strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + $tag = \mb_substr(\strtok($match[0][0], " \t\n\r\0\x0B>"), 1); if ($tag[0] != '/') { $tags[] = $tag; - } elseif (end($tags) == mb_substr($tag, 1)) { - array_pop($tags); + } elseif (\end($tags) == \mb_substr($tag, 1)) { + \array_pop($tags); } $offset += $match[1][1] - $match[0][1]; } - $newString = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); - $newString .= (mb_strlen($string) > $limit ? $this->append : ''); - $newString .= (count($tags = array_reverse($tags)) ? '' : ''); + $newString = \mb_substr($string, 0, $limit = \min(\mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); + $newString .= (\mb_strlen($string) > $limit ? $this->append : ''); + $newString .= (\count($tags = \array_reverse($tags)) ? '' : ''); return $newString; } diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index e09896f..92c27cd 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -1,5 +1,7 @@ text = $text; $this->capitalize = $capitalize; @@ -38,9 +40,9 @@ public function __construct($text, $capitalize = true, $separator = '_', array $ */ public function __toString() { - $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', "/[{$this->separator}\\s]+/"), array('_$1', ' '), $this->text))); - $humanized = trim(str_replace($this->forbiddenWords, '', $humanized)); + $humanized = \trim(\strtolower(\preg_replace(['/([A-Z])/', "/[{$this->separator}\\s]+/"], ['_$1', ' '], $this->text))); + $humanized = \trim(\str_replace($this->forbiddenWords, '', $humanized)); - return $this->capitalize ? ucfirst($humanized) : $humanized; + return $this->capitalize ? \ucfirst($humanized) : $humanized; } } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 2e818d9..2d19637 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -1,5 +1,7 @@ '#.##P', 1000000000000 => '#.##T', 1000000000 => '#.##G', 1000000 => '#.##M', 1000 => '#.#k', 0 => '#.#', - ); + ]; /** * @param $number @@ -36,7 +38,7 @@ final class MetricSuffix */ public function __construct($number, $locale = 'en') { - if (!is_numeric($number)) { + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } @@ -47,7 +49,7 @@ public function __construct($number, $locale = 'en') * Workaround for 32-bit systems which ignore array ordering when * dropping values over 2^32-1 */ - krsort($this->binaryPrefixes); + \krsort($this->binaryPrefixes); } public function convert() diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 0e61794..22cbd69 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -1,5 +1,7 @@ breakpoint->calculatePosition($text, $charactersCount))); + $truncatedText = \rtrim(\mb_substr($text, 0, $this->breakpoint->calculatePosition($text, $charactersCount))); return ($truncatedText === $text) ? $truncatedText : $truncatedText.$this->append; } diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 2f20dd3..849b06b 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -1,5 +1,7 @@ mb_strlen($text)) { - return mb_strlen($text); + if ($charactersCount > \mb_strlen($text)) { + return \mb_strlen($text); } - $breakpoint = mb_strpos($text, ' ', $charactersCount); + $breakpoint = \mb_strpos($text, ' ', $charactersCount); if (false === $breakpoint) { - return mb_strlen($text); + return \mb_strlen($text); } return $breakpoint; diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 686fe59..bf07789 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -1,5 +1,7 @@ getBasename('.yml'); - list($fileDomain, $fileLocale) = explode('.', $resourceName); + list($fileDomain, $fileLocale) = \explode('.', $resourceName); $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); } diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index d759af8..c36703a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -1,5 +1,7 @@ assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } public function oxfordCollectionProvider() { - return array( + return [ // English - array(array("Michal"), null, 'en', 'Michal'), - array(array("Michal", "Norbert"), null, 'en', 'Michal and Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'en', 'Michal, Norbert, and 1 other'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'en', 'Michal, Norbert, and 2 others'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'en', 'Michal, Norbert, Lukasz, and Pawel'), + [['Michal'], null, 'en', 'Michal'], + [['Michal', 'Norbert'], null, 'en', 'Michal and Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'en', 'Michal, Norbert, and 1 other'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'en', 'Michal, Norbert, and 2 others'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'en', 'Michal, Norbert, Lukasz, and Pawel'], // Chinese Simplified - array(array("Michal"), null, 'zh_CN', 'Michal'), - array(array("Michal", "Norbert"), null, 'zh_CN', 'Michal 和 Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'zh_CN', 'Michal, Norbert 和另一个'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'zh_CN', 'Michal, Norbert 和另 2 个'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'zh_CN', 'Michal, Norbert, Lukasz, 和 Pawel'), + [['Michal'], null, 'zh_CN', 'Michal'], + [['Michal', 'Norbert'], null, 'zh_CN', 'Michal 和 Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'zh_CN', 'Michal, Norbert 和另一个'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'zh_CN', 'Michal, Norbert 和另 2 个'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'zh_CN', 'Michal, Norbert, Lukasz, 和 Pawel'], // Polish - array(array("Michal"), null, 'pl', 'Michal'), - array(array("Michal", "Norbert"), null, 'pl', 'Michal i Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'pl', 'Michal, Norbert i 1 inny'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'pl', 'Michal, Norbert i 2 innych'), + [['Michal'], null, 'pl', 'Michal'], + [['Michal', 'Norbert'], null, 'pl', 'Michal i Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'pl', 'Michal, Norbert i 1 inny'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'pl', 'Michal, Norbert i 2 innych'], // Dutch - array(array("Michal"), null, 'nl', 'Michal'), - array(array("Michal", "Norbert"), null, 'nl', 'Michal en Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'nl', 'Michal, Norbert, en 1 andere'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'nl', 'Michal, Norbert, en 2 andere'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'nl', 'Michal, Norbert, Lukasz, en Pawel'), + [['Michal'], null, 'nl', 'Michal'], + [['Michal', 'Norbert'], null, 'nl', 'Michal en Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'nl', 'Michal, Norbert, en 1 andere'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'nl', 'Michal, Norbert, en 2 andere'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'nl', 'Michal, Norbert, Lukasz, en Pawel'], // Russian - array(array("Michal"), null, 'ru', 'Michal'), - array(array("Michal", "Norbert"), null, 'ru', 'Michal и Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'ru', 'Michal, Norbert и ещё 1'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ru', 'Michal, Norbert и ещё 2'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ru', 'Michal, Norbert, Lukasz и Pawel'), + [['Michal'], null, 'ru', 'Michal'], + [['Michal', 'Norbert'], null, 'ru', 'Michal и Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'ru', 'Michal, Norbert и ещё 1'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'ru', 'Michal, Norbert и ещё 2'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'ru', 'Michal, Norbert, Lukasz и Pawel'], // Indonesian - array(array("Michal"), null, 'id', 'Michal'), - array(array("Michal", "Norbert"), null, 'id', 'Michal dan Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'id', 'Michal, Norbert, dan 1 lainnya'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'id', 'Michal, Norbert, dan 2 lainnya'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'id', 'Michal, Norbert, Lukasz, dan Pawel'), + [['Michal'], null, 'id', 'Michal'], + [['Michal', 'Norbert'], null, 'id', 'Michal dan Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'id', 'Michal, Norbert, dan 1 lainnya'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'id', 'Michal, Norbert, dan 2 lainnya'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'id', 'Michal, Norbert, Lukasz, dan Pawel'], // Ukrainian - array(array("Michal"), null, 'uk', 'Michal'), - array(array("Michal", "Norbert"), null, 'uk', 'Michal та Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'uk', 'Michal, Norbert і ще 1'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'uk', 'Michal, Norbert і ще 2'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'uk', 'Michal, Norbert, Lukasz та Pawel'), + [['Michal'], null, 'uk', 'Michal'], + [['Michal', 'Norbert'], null, 'uk', 'Michal та Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'uk', 'Michal, Norbert і ще 1'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'uk', 'Michal, Norbert і ще 2'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'uk', 'Michal, Norbert, Lukasz та Pawel'], // Thai - array(array("Michal"), null, 'th', 'Michal'), - array(array("Michal", "Norbert"), null, 'th', 'Michal และ Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'th', 'Michal, Norbert และอีก 1'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'th', 'Michal, Norbert และอีก 2'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'th', 'Michal, Norbert, Lukasz และ Pawel'), + [['Michal'], null, 'th', 'Michal'], + [['Michal', 'Norbert'], null, 'th', 'Michal และ Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'th', 'Michal, Norbert และอีก 1'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'th', 'Michal, Norbert และอีก 2'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'th', 'Michal, Norbert, Lukasz และ Pawel'], // Japanese - array(array("Michal"), null, 'ja', 'Michal'), - array(array("Michal", "Norbert"), null, 'ja', 'Michal と Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'ja', 'Michal, Norbert ともうひとり'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ja', 'Michal, Norbert ともう 2 人'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ja', 'Michal, Norbert, Lukasz と Pawel'), - ); + [['Michal'], null, 'ja', 'Michal'], + [['Michal', 'Norbert'], null, 'ja', 'Michal と Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'ja', 'Michal, Norbert ともうひとり'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'ja', 'Michal, Norbert ともう 2 人'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'ja', 'Michal, Norbert, Lukasz と Pawel'], + ]; } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 9ae9e94..628e3f6 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -1,5 +1,7 @@ assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } @@ -43,7 +45,7 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters( * @param $expected * @param $append */ - function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') { $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } @@ -54,7 +56,7 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_ * @param $text * @param $expected */ - function test_remove_all_shortcodes_from_text($text, $expected) + public function test_remove_all_shortcodes_from_text($text, $expected) { $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); } @@ -65,25 +67,25 @@ function test_remove_all_shortcodes_from_text($text, $expected) * @param $text * @param $expected */ - function test_remove_only_shortcode_tags_from_text($text, $expected) + public function test_remove_only_shortcode_tags_from_text($text, $expected) { $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); } public function removeAllShortcodesProvider() { - return array( - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'), - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some '), - ); + return [ + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'], + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some '], + ]; } public function removeShortcodeTagsProvider() { - return array( - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'), - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some containing and with content '), - ); + return [ + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'], + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some containing and with content '], + ]; } /** @@ -91,15 +93,15 @@ public function removeShortcodeTagsProvider() */ public function humanizeStringProvider() { - return array( - array('news_count', 'News count', true, '_', array('id')), - array('user', 'user', false, '_', array('id')), - array('news_id', 'News', true, '_', array('id')), - array('customer_id', 'Customer id', true, '_', array()), - array('news_count', 'News count', true, '_', array('id')), - array('news-count', 'News count', true, '-', array('id')), - array('news-count', 'news count', false, '-', array('id')) - ); + return [ + ['news_count', 'News count', true, '_', ['id']], + ['user', 'user', false, '_', ['id']], + ['news_id', 'News', true, '_', ['id']], + ['customer_id', 'Customer id', true, '_', []], + ['news_count', 'News count', true, '_', ['id']], + ['news-count', 'News count', true, '-', ['id']], + ['news-count', 'news count', false, '-', ['id']] + ]; } /** @@ -111,24 +113,24 @@ public function truncateStringProvider() $longText = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; $shortText = 'Short text'; - return array( - array($longText, 'Lorem', 2), - array($longText, 'Lorem ipsum...', 10, '...'), - array($longText, 'Lorem ipsum dolorem si amet, lorem', 30), - array($longText, 'Lorem', 0), - array($longText, 'Lorem...', 0, '...'), - array($longText, 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2), - array($shortText, "Short...", 1, '...'), - array($shortText, "Short...", 2, '...'), - array($shortText, "Short...", 3, '...'), - array($shortText, "Short...", 4, '...'), - array($shortText, "Short...", 5, '...'), - array($shortText, "Short text", 6, '...'), - array($shortText, "Short text", 7, '...'), - array($shortText, "Short text", 8, '...'), - array($shortText, "Short text", 9, '...'), - array($shortText, "Short text", 10, '...') - ); + return [ + [$longText, 'Lorem', 2], + [$longText, 'Lorem ipsum...', 10, '...'], + [$longText, 'Lorem ipsum dolorem si amet, lorem', 30], + [$longText, 'Lorem', 0], + [$longText, 'Lorem...', 0, '...'], + [$longText, 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2], + [$shortText, 'Short...', 1, '...'], + [$shortText, 'Short...', 2, '...'], + [$shortText, 'Short...', 3, '...'], + [$shortText, 'Short...', 4, '...'], + [$shortText, 'Short...', 5, '...'], + [$shortText, 'Short text', 6, '...'], + [$shortText, 'Short text', 7, '...'], + [$shortText, 'Short text', 8, '...'], + [$shortText, 'Short text', 9, '...'], + [$shortText, 'Short text', 10, '...'] + ]; } /** @@ -139,20 +141,20 @@ public function truncateHtmlStringProvider() { $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; - return array( - array($text, 3, '', "HyperText"), - array($text, 12, '', "HyperText Markup"), - array($text, 30, '', "HyperText Markup Language, commonly"), - array($text, 50, '', "HyperText Markup Language, commonly referred to as"), - array($text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'), - array($text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'), - array($text, 3 , '', "HyperText"), - array($text, 12 , '', "HyperText Markup"), - array($text, 50 , '', "HyperText Markup Language, commonly referred to as"), - array($text, 75 , '', "HyperText Markup Language, commonly referred to as HTML, is the standard markup"), - array($text, 100, '', "HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create"), - array($text, 50, '', "HyperText Markup Language, commonly referred to as...", '...'), - array($text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...') - ); + return [ + [$text, 3, '', 'HyperText'], + [$text, 12, '', 'HyperText Markup'], + [$text, 30, '', 'HyperText Markup Language, commonly'], + [$text, 50, '', 'HyperText Markup Language, commonly referred to as'], + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], + [$text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], + [$text, 3 , '', 'HyperText'], + [$text, 12 , '', 'HyperText Markup'], + [$text, 50 , '', 'HyperText Markup Language, commonly referred to as'], + [$text, 75 , '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], + [$text, 100, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], + [$text, 50, '', 'HyperText Markup Language, commonly referred to as...', '...'], + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'] + ]; } } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 796fb24..e800b9d 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,3 +1,5 @@ Date: Mon, 25 Feb 2019 17:54:04 +0800 Subject: [PATCH 02/87] Add translation: zh_TW (#106) Signed-off-by: Jack Cherng --- .../translations/difference.zh_TW.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.zh_TW.yml | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml new file mode 100644 index 0000000..5be5bb9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] 剛剛" + future: "[0,Inf] 剛剛" +second: + past: "[1,Inf] %count% 秒前" + future: "[1,Inf] %count% 秒後" +minute: + past: "[1,Inf] %count% 分鐘前" + future: "[1,Inf] %count% 分鐘後" +hour: + past: "[1,Inf] %count% 小時前" + future: "[1,Inf] %count% 小時後" +day: + past: "[1,Inf] %count% 天前" + future: "[1,Inf] %count% 天後" +week: + past: "[1,Inf] %count% 週前" + future: "[1,Inf] %count% 週後" +month: + past: "[1,Inf] %count% 個月前" + future: "[1,Inf] %count% 個月後" +year: + past: "[1,Inf] %count% 年前" + future: "[1,Inf] %count% 年後" + +compound: + second: "[1,Inf] %count% 秒" + minute: "[1,Inf] %count% 分鐘" + hour: "[1,Inf] %count% 小時" + day: "[1,Inf] %count% 天" + week: "[1,Inf] %count% 週" + month: "[1,Inf] %count% 個月" + year: "[1,Inf] %count% 年" + past: "%value%前" + future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml new file mode 100644 index 0000000..61dc201 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml @@ -0,0 +1,3 @@ +only_two: "%first% 和 %second%" +comma_separated: "%list%, 和 %last%" +comma_separated_with_limit: "{1} %list% 和另一個|[2,Inf] %list% 和另 %count% 個" From 9b52c5dc42f10ff60f4827ff9a736b3a1a18f0e4 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 25 Feb 2019 11:02:11 +0100 Subject: [PATCH 03/87] Fixed README.md --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index d530903..c412225 100644 --- a/README.md +++ b/README.md @@ -242,15 +242,15 @@ Currently we support following languages: * [Dutch](src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml) * [Русский](src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml) * [Norwegian](src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml) -* [Afrikaans] (src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) -* [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) -* [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) -* [Chinese Simplified] (src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) -* [Spanish] (src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) -* [Ukrainian] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) -* [Danish] (src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) -* [Thai] (src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) -* [Japanese] (src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) +* [Afrikaans](src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) +* [Bulgarian](src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) +* [Indonesian](src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) +* [Chinese Simplified](src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) +* [Spanish](src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) +* [Ukrainian](src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) +* [Danish](src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) +* [Thai](src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) +* [Japanese](src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) # Credits From 51d96575a79dfbf024ad138fc24500fa5ebd13b3 Mon Sep 17 00:00:00 2001 From: Alex Ungurianu Date: Mon, 25 Feb 2019 10:05:10 +0000 Subject: [PATCH 04/87] Romanian translations (#40) * Create oxford.ro.yml * Create difference.ro.yml --- .../Resources/translations/difference.ro.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.ro.yml | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml new file mode 100644 index 0000000..6c54c71 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] mai înainte" + future: "[0,Inf] imediat" +second: + past: "{1} %count% secundă în urmă|[2,Inf] %count% secunde în urmă" + future: "{1} %count% secundă de acum|[2,Inf] %count% secundă de acum" +minute: + past: "{1} %count% minut în urmă|[2,Inf] %count% minute în urmă" + future: "{1} %count% minut de acum|[2,Inf] %count% minute de acum" +hour: + past: "{1} %count% oră în urmă|[2,Inf] %count% ore în urmă" + future: "{1} %count% oră de acum|[2,Inf] %count% ore de acum" +day: + past: "{1} %count% zi în urmă|[2,Inf] %count% zile în urmă" + future: "{1} %count% zi de acum|[2,Inf] %count% zile de acum" +week: + past: "{1} %count% săptămână în urmă|[2,Inf] %count% săptămâni în urmă" + future: "{1} %count% săptămână de acum|[2,Inf] %count% săptămâni de acum" +month: + past: "{1} %count% lună în urmă|[2,Inf] %count% luni în urmă" + future: "{1} %count% lună de acum|[2,Inf] %count% luni de acum" +year: + past: "{1} %count% an în urmă|[2,Inf] %count% ani în urmă" + future: "{1} %count% an de acum|[2,Inf] %count% ani de acum" + +compound: + second: "{1} %count% secundă|[2,Inf] %count% secunde" + minute: "{1} %count% minut|[2,Inf] %count% minute" + hour: "{1} %count% oră|[2,Inf] %count% ore" + day: "{1} %count% zi|[2,Inf] %count% zile" + week: "{1} %count% săptămană|[2,Inf] %count% săptămani" + month: "{1} %count% lună|[2,Inf] %count% luni" + year: "{1} %count% an|[2,Inf] %count% ani" + ago: "în urmă" + from_now: "de acum" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml new file mode 100644 index 0000000..e991007 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml @@ -0,0 +1,3 @@ +only_two: "%first% și %second%" +comma_separated: "%list% și %last%" +comma_separated_with_limit: "{1} %list% și încă unul|[2,Inf] %list% și %count% alții" From 17a5ab5243ae1eec2e3d39388bf611088b8fd5e7 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 25 Feb 2019 11:07:45 +0100 Subject: [PATCH 05/87] Added missing translations --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c412225..d53bbe9 100644 --- a/README.md +++ b/README.md @@ -246,11 +246,13 @@ Currently we support following languages: * [Bulgarian](src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) * [Indonesian](src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) * [Chinese Simplified](src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) +* [Chinese Taiwan](src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml) * [Spanish](src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) * [Ukrainian](src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) * [Danish](src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) * [Thai](src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) * [Japanese](src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) +* [Romanian](src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml) # Credits From 2710e071b54f10eb1cba11edf98b9e4fc61380d8 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Mon, 25 Feb 2019 11:27:03 +0100 Subject: [PATCH 06/87] Sanity check for NumberFormatter when intl is not installed (#91) * added sanity check for NumberFormatter class when intl extension is not installed * Update MetricSuffix.php * Update BinarySuffix.php --- src/Coduo/PHPHumanizer/String/BinarySuffix.php | 4 ++++ src/Coduo/PHPHumanizer/String/MetricSuffix.php | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index f0d4209..cc42a60 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -39,6 +39,10 @@ final class BinarySuffix */ public function __construct($number, $locale = 'en', $precision = null) { + if (!\class_exists('NumberFormatter')) { + throw new \RuntimeException('Binary suffix converter requires intl extension!'); + } + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 2d19637..46d4aec 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -38,6 +38,10 @@ final class MetricSuffix */ public function __construct($number, $locale = 'en') { + if (!\class_exists('NumberFormatter')) { + throw new \RuntimeException('Metric suffix converter requires intl extension!'); + } + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } From 248710be20fc70836c132f8124f01819d5c60ce8 Mon Sep 17 00:00:00 2001 From: Brian Wozeniak Date: Sun, 3 Mar 2019 08:43:36 -0800 Subject: [PATCH 07/87] Allow later versions of symfony packages (#111) --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index def4c0a..8aab87d 100644 --- a/composer.json +++ b/composer.json @@ -16,9 +16,9 @@ ], "require": { "php": ">=7.0.0", - "symfony/config": "^2.3|^3.0|^4.0", - "symfony/translation": "^2.3|^3.0|^4.0", - "symfony/yaml": "^2.3|^3.0|^4.0", + "symfony/config": "^2.3|^3.0|^4", + "symfony/translation": "^2.3|^3.0|^4", + "symfony/yaml": "^2.3|^3.0|^4", "friendsofphp/php-cs-fixer": "^2.14" }, "require-dev": { From 1400eb96a87ea2f8d63f9f75c40dc8afd743a856 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Sat, 20 Apr 2019 17:50:36 +0200 Subject: [PATCH 08/87] upgraded thunderer/shortcode dependency to ^0.7 (#112) --- README.md | 8 ++++++++ composer.json | 2 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 ++++++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d53bbe9..634292b 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,14 @@ StringHumanizer::truncateHtml($text, 75, '', '...' ``` +**Remove shortcodes** + +```php +$text = 'A text with [short]random[/short] [codes]words[/codes].'; +StringHumanizer::removeShortcodes($text); // "A text with ." +StringHumanizer::removeShortcodeTags($text); // "A text with random words." +``` + ## Number **Ordinalize** diff --git a/composer.json b/composer.json index 8aab87d..9adf431 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "friendsofphp/php-cs-fixer": "^2.14" }, "require-dev": { - "thunderer/shortcode": "~0.5", + "thunderer/shortcode": "^0.7", "phpspec/phpspec": "^2", "phpunit/phpunit": "^4.5|^5.0" }, diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index bf07789..9cf2d70 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -60,10 +60,10 @@ public static function truncateHtml($text, $charactersCount, $allowedTags = '', */ public static function removeShortcodes($text) { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { - throw new \RuntimeException('Please add "thunderer/shortcode": ~0.5 to composer.json first'); + if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } - + $processor = new ShortcodeProcessor(); return $processor->removeShortcodes($text); @@ -75,10 +75,10 @@ public static function removeShortcodes($text) */ public static function removeShortcodeTags($text) { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { - throw new \RuntimeException('Please add "thunderer/shortcode": ~0.5 to composer.json first'); + if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } - + $processor = new ShortcodeProcessor(); return $processor->removeShortcodeTags($text); From 9edceb2d21fa879e91072308b8bbe3503a346bd2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 17:53:57 +0200 Subject: [PATCH 09/87] CS Fixes --- .travis.yml | 2 -- composer.json | 10 ++++++++++ src/Coduo/PHPHumanizer/StringHumanizer.php | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 35d2afa..162cdfb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ language: php -sudo: false - cache: directories: - $HOME/.composer/cache diff --git a/composer.json b/composer.json index 9adf431..bb9d931 100644 --- a/composer.json +++ b/composer.json @@ -42,5 +42,15 @@ }, "suggest": { "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" + }, + "scripts": { + "cs:php:fix": [ + "php-cs-fixer fix --using-cache=no" + ], + "test": [ + "phpspec run --format=pretty", + "phpunit", + "php-cs-fixer fix -v --dry-run" + ] } } diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 9cf2d70..5b02b2c 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -60,7 +60,7 @@ public static function truncateHtml($text, $charactersCount, $allowedTags = '', */ public static function removeShortcodes($text) { - if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } @@ -75,7 +75,7 @@ public static function removeShortcodes($text) */ public static function removeShortcodeTags($text) { - if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } From 14ab746762acd1856ddd386023128f23935ef119 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 17:57:31 +0200 Subject: [PATCH 10/87] CS Fixes --- .php_cs | 9 +++++++ .travis.yml | 4 +-- README.md | 27 +++++++++++++++++++ .../PHPHumanizer/Collection/Formatter.php | 7 +++++ src/Coduo/PHPHumanizer/Collection/Oxford.php | 7 +++++ .../PHPHumanizer/CollectionHumanizer.php | 7 +++++ .../PHPHumanizer/DateTime/Difference.php | 7 +++++ .../DateTime/Difference/CompoundResult.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Formatter.php | 7 +++++ .../DateTime/PreciseDifference.php | 7 +++++ .../DateTime/PreciseFormatter.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/JustNow.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/Minute.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/Month.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/Second.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 7 +++++ src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 7 +++++ src/Coduo/PHPHumanizer/Number/Ordinal.php | 7 +++++ .../PHPHumanizer/Number/Ordinal/Builder.php | 7 +++++ .../Number/Ordinal/StrategyInterface.php | 7 +++++ .../PHPHumanizer/Number/RomanNumeral.php | 7 +++++ src/Coduo/PHPHumanizer/NumberHumanizer.php | 7 +++++ .../Resources/Ordinal/DeStrategy.php | 7 +++++ .../Resources/Ordinal/EnStrategy.php | 7 +++++ .../Resources/Ordinal/EsStrategy.php | 7 +++++ .../Resources/Ordinal/FrStrategy.php | 7 +++++ .../Resources/Ordinal/IdStrategy.php | 7 +++++ .../Resources/Ordinal/ItStrategy.php | 7 +++++ .../Resources/Ordinal/NlStrategy.php | 7 +++++ .../Resources/Ordinal/PtStrategy.php | 7 +++++ .../PHPHumanizer/String/BinarySuffix.php | 7 +++++ src/Coduo/PHPHumanizer/String/Breakpoint.php | 7 +++++ .../PHPHumanizer/String/HtmlTruncate.php | 7 +++++ src/Coduo/PHPHumanizer/String/Humanize.php | 7 +++++ .../PHPHumanizer/String/MetricSuffix.php | 7 +++++ .../String/ShortcodeProcessor.php | 7 +++++ .../PHPHumanizer/String/TextTruncate.php | 7 +++++ .../PHPHumanizer/String/TruncateInterface.php | 7 +++++ .../PHPHumanizer/String/WordBreakpoint.php | 7 +++++ src/Coduo/PHPHumanizer/StringHumanizer.php | 7 +++++ src/Coduo/PHPHumanizer/Translator/Builder.php | 7 +++++ .../Tests/CollectionHumanizerTest.php | 7 +++++ .../Tests/DateTimeHumanizerTest.php | 7 +++++ .../Tests/NumberHumanizerTest.php | 7 +++++ .../Tests/StringHumanizerTest.php | 7 +++++ tests/bootstrap.php | 7 +++++ 50 files changed, 366 insertions(+), 3 deletions(-) diff --git a/.php_cs b/.php_cs index 5983888..b4f320e 100644 --- a/.php_cs +++ b/.php_cs @@ -1,9 +1,18 @@ setRules([ '@PSR2' => true, 'declare_strict_types' => true, 'array_syntax' => ['syntax' => 'short'], + 'header_comment' => ['header' => $fileHeaderComment, 'separate' => 'both'], 'blank_line_after_opening_tag' => true, 'single_blank_line_before_namespace' => true, 'no_unused_imports' => true, diff --git a/.travis.yml b/.travis.yml index 162cdfb..dd1b745 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,4 @@ install: - composer update script: - - ./bin/phpspec run --format=pretty - - ./bin/phpunit - - ./bin/php-cs-fixer fix -v --dry-run \ No newline at end of file + - composer run test \ No newline at end of file diff --git a/README.md b/README.md index 634292b..e808e1b 100644 --- a/README.md +++ b/README.md @@ -262,6 +262,33 @@ Currently we support following languages: * [Japanese](src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) * [Romanian](src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml) +# Development + +After downloading library update dependencies: + +``` +composer update +``` + +In order to check lowest possible versions of dependencies add + +``` +composer update --prefer-lowest +```` + +Execute test suite: + +``` +composer run test +``` + +Run CS Fixer + +``` +composer run cs:php:fix +``` + + # Credits This lib was inspired by [Java Humanize Lib](https://github.com/mfornos/humanize) && [Rails Active Support](https://github.com/rails/rails/tree/master/activesupport/lib/active_support) diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 60f51c4..ec28b4b 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Collection; use Symfony\Component\Translation\TranslatorInterface; diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index c102712..a27cf80 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Collection; final class Oxford diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index 2af7295..548cdc4 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\Collection\Formatter; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 8d7d213..60fce9a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Coduo\PHPHumanizer\DateTime\Unit\Day; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 4721c2e..7178ea1 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Difference; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index f79d5fc..781fc3d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Symfony\Component\Translation\TranslatorInterface; diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 221f1a6..75c1cfb 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Coduo\PHPHumanizer\DateTime\Unit\Day; diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 52a2e34..66800a1 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Symfony\Component\Translation\TranslatorInterface; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index bac4b47..2a3525f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; interface Unit diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index 0ab87a4..4e4f72d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 7f75d91..8a21186 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index 0b682d7..ea1120a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index a8d39b8..1c2c3c2 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index f860e52..ae26e8f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 94a9c0c..12f3e54 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index 9cc987c..cd0ff1a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 49ae9bc..4dda1c9 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index bfdfbc3..44f7472 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\DateTime\Difference; diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 0c34ade..73e92a5 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number; use Coduo\PHPHumanizer\Number\Ordinal\Builder; diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 86a5b82..582055b 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number\Ordinal; /** diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index f043910..aa23162 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number\Ordinal; interface StrategyInterface diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 0760fa2..745c60c 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number; final class RomanNumeral diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 25835ea..7d26299 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\Number\Ordinal; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php index 852d836..6a96127 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 5ede85a..35e6f5a 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php index 2031c63..30ba76e 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php index 6125883..788789b 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index 7f86ebf..e678f99 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php index 48bcfba..318bbf8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 37f8122..7350eb5 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php index 4a47a59..2f625a8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index cc42a60..b71e798 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class BinarySuffix diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index 911381b..e823511 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; interface Breakpoint diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index ccdfce3..f85097a 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class HtmlTruncate implements TruncateInterface diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index 92c27cd..a4ef053 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class Humanize diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 46d4aec..3a76eb3 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class MetricSuffix diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 22cbd69..405a056 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; use Thunder\Shortcode\HandlerContainer\HandlerContainer; diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index ebfddee..e48c044 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class TextTruncate implements TruncateInterface diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 849b06b..1749047 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; interface TruncateInterface diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 6489156..1a73722 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class WordBreakpoint implements Breakpoint diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 5b02b2c..8da6660 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\String\Humanize; diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 90a499a..b1500ff 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Translator; use Symfony\Component\Translation\Loader\YamlFileLoader; diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index c36703a..29933a9 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\CollectionHumanizer; diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 628e3f6..efa9d95 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\DateTimeHumanizer; diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index 9eed3d9..ae40dbc 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\NumberHumanizer; diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index dcde823..c3f1f51 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\StringHumanizer; diff --git a/tests/bootstrap.php b/tests/bootstrap.php index e800b9d..008bbfe 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -2,4 +2,11 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + $loader = require_once __DIR__ . '/../vendor/autoload.php'; From 1b2787d28282247b3fe68cd5b9f6bf80f304fa63 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 18:07:00 +0200 Subject: [PATCH 11/87] Updated dev-master branch aliast --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index bb9d931..0ab0b54 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "suggest": { From dc528ebcef31b793e1dd24dbe90f14039361fad1 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 18:08:40 +0200 Subject: [PATCH 12/87] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e808e1b..e157a55 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,15 @@ [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.0) +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.1) +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.org/coduo/php-humanizer) - 3.0 * [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.org/coduo/php-humanizer) - 2.0 * [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.org/coduo/php-humanizer) - 1.0 -[Readme for master (3.0) version](https://github.com/coduo/php-humanizer/tree/master/README.md) -[Readme for 2.0 version](https://github.com/coduo/php-matcher/tree/2.0/README.md) -[Readme for 1.0 version](https://github.com/coduo/php-matcher/tree/1.0/README.md) +[Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) +[Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) +[Readme for 2.0 version](https://github.com/coduo/php-humanizer/tree/2.0/README.md) +[Readme for 1.0 version](https://github.com/coduo/php-humanizer/tree/1.0/README.md) Humanize values to make them readable for regular people ;) From 4d62dba187d89bc8276ff6e5364d2dd9a3f2ad5f Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 18:12:27 +0200 Subject: [PATCH 13/87] Migrated from travis-ci.org to travis-ci.com --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e157a55..3de1c5a 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.1) -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.org/coduo/php-humanizer) - 3.0 -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.org/coduo/php-humanizer) - 2.0 -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.org/coduo/php-humanizer) - 1.0 +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) - master (3.1) +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.com/coduo/php-humanizer) - 2.0 +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.com/coduo/php-humanizer) - 1.0 [Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) [Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) From 6255e022c0ff8767cae6cdb4552d13f5f0df0d65 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 29 Apr 2019 17:57:07 +0200 Subject: [PATCH 14/87] Moved php-cs-fixer to dev dependency where it belongs to --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 0ab0b54..2b0fa85 100644 --- a/composer.json +++ b/composer.json @@ -18,13 +18,13 @@ "php": ">=7.0.0", "symfony/config": "^2.3|^3.0|^4", "symfony/translation": "^2.3|^3.0|^4", - "symfony/yaml": "^2.3|^3.0|^4", - "friendsofphp/php-cs-fixer": "^2.14" + "symfony/yaml": "^2.3|^3.0|^4" }, "require-dev": { "thunderer/shortcode": "^0.7", "phpspec/phpspec": "^2", - "phpunit/phpunit": "^4.5|^5.0" + "phpunit/phpunit": "^4.5|^5.0", + "friendsofphp/php-cs-fixer": "^2.14" }, "config": { "bin-dir": "bin" From 142689763a6aafdd9f1dfbb48db9807bbe027acc Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 9 Aug 2019 15:14:46 +0200 Subject: [PATCH 15/87] Update README.md --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3de1c5a..5546d71 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # PHP Humanizer -[![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) +[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) @@ -9,13 +9,10 @@ ### Tests * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) - master (3.1) * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.com/coduo/php-humanizer) - 2.0 -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.com/coduo/php-humanizer) - 1.0 [Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) [Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) -[Readme for 2.0 version](https://github.com/coduo/php-humanizer/tree/2.0/README.md) -[Readme for 1.0 version](https://github.com/coduo/php-humanizer/tree/1.0/README.md) + Humanize values to make them readable for regular people ;) From 43a5d2ba384fbbd8dfabdeba5abb4ea46281d749 Mon Sep 17 00:00:00 2001 From: Brian Wozeniak Date: Sun, 17 May 2020 07:00:12 -0700 Subject: [PATCH 16/87] Fixed composer autoloading deprecation notice; Support symfony 5 (#115) * Allow version 5 of symfony packages * Fixed deprecation notice for class autoloading Co-authored-by: Brian Wozeniak --- composer.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 2b0fa85..9159b28 100644 --- a/composer.json +++ b/composer.json @@ -16,9 +16,9 @@ ], "require": { "php": ">=7.0.0", - "symfony/config": "^2.3|^3.0|^4", - "symfony/translation": "^2.3|^3.0|^4", - "symfony/yaml": "^2.3|^3.0|^4" + "symfony/config": "^2.3|^3.0|^4|^5", + "symfony/translation": "^2.3|^3.0|^4|^5", + "symfony/yaml": "^2.3|^3.0|^4|^5" }, "require-dev": { "thunderer/shortcode": "^0.7", @@ -31,7 +31,11 @@ }, "autoload": { "psr-4": { - "": "src", + "": "src/" + } + }, + "autoload-dev": { + "psr-4": { "Coduo\\PHPHumanizer\\Tests\\": "tests/" } }, From f989a91d2d90f5d4bf4922ab9fec1674e7fe024e Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 4 Jun 2020 22:46:00 +0200 Subject: [PATCH 17/87] Create FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..4f8e199 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [norberttech] From fa52e6223eef2f19fbd0a290432b5a878317dca2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 8 Jul 2020 14:28:58 +0200 Subject: [PATCH 18/87] Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies --- .gitignore | 2 +- .travis.yml | 1 + README.md | 6 ++-- composer.json | 18 ++++++------ .../PHPHumanizer/Collection/FormatterSpec.php | 3 +- .../PHPHumanizer/Collection/OxfordSpec.php | 2 +- .../PHPHumanizer/DateTime/FormatterSpec.php | 10 +++---- .../DateTime/PreciseFormatterSpec.php | 16 ++++------- .../PHPHumanizer/Collection/Formatter.php | 6 ++-- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 7 ++--- .../DateTime/PreciseFormatter.php | 7 ++--- .../PHPHumanizer/Number/RomanNumeral.php | 4 +-- .../Tests/CollectionHumanizerTest.php | 3 +- .../Tests/DateTimeHumanizerTest.php | 3 +- .../Tests/NumberHumanizerTest.php | 28 +++++++++---------- .../Tests/StringHumanizerTest.php | 4 +-- 16 files changed, 56 insertions(+), 64 deletions(-) diff --git a/.gitignore b/.gitignore index f0bf8a2..e0a7c66 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ vendor/ bin/ composer.lock composer.phar -.php_cs.cache \ No newline at end of file +*.cache \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index dd1b745..2d6b0e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ matrix: - php: 7.1 - php: 7.2 - php: 7.3 + - php: 7.4 before_install: - composer self-update diff --git a/README.md b/README.md index 5546d71..49c184c 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ # PHP Humanizer -[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) +[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) - master (3.1) +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) - 4.x * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 -[Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) +[Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) [Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) diff --git a/composer.json b/composer.json index 9159b28..098b493 100644 --- a/composer.json +++ b/composer.json @@ -15,16 +15,16 @@ } ], "require": { - "php": ">=7.0.0", - "symfony/config": "^2.3|^3.0|^4|^5", - "symfony/translation": "^2.3|^3.0|^4|^5", - "symfony/yaml": "^2.3|^3.0|^4|^5" + "php": ">=7.3", + "symfony/config": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, "require-dev": { "thunderer/shortcode": "^0.7", - "phpspec/phpspec": "^2", - "phpunit/phpunit": "^4.5|^5.0", - "friendsofphp/php-cs-fixer": "^2.14" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.4", + "friendsofphp/php-cs-fixer": "^2.16" }, "config": { "bin-dir": "bin" @@ -36,12 +36,12 @@ }, "autoload-dev": { "psr-4": { - "Coduo\\PHPHumanizer\\Tests\\": "tests/" + "": "tests/" } }, "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "suggest": { diff --git a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php index 81164ef..e7bc4a8 100644 --- a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php @@ -17,9 +17,8 @@ function let(Translator $translator) 'oxford' )->willReturn('Michal and Norbert'); - $translator->transChoice( + $translator->trans( 'comma_separated_with_limit', - 1, array('%count%' => 1, "%list%" => 'Michal, Norbert'), 'oxford' )->willReturn('Michal, Norbert and 1 more'); diff --git a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php index 0a6b56f..536e4d3 100644 --- a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php +++ b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php @@ -5,7 +5,7 @@ use Coduo\PHPHumanizer\Collection\Formatter; use PhpSpec\ObjectBehavior; use Prophecy\Argument; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class OxfordSpec extends ObjectBehavior { diff --git a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php index 4bf48ae..1372ad3 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php @@ -13,17 +13,15 @@ class FormatterSpec extends ObjectBehavior function let(Translator $translator) { $this->beConstructedWith($translator); - $translator->transChoice( + $translator->trans( 'minute.past', - 10, array('%count%' => 10), 'difference', 'en' )->willReturn('10 minutes ago'); - $translator->transChoice( + $translator->trans( 'minute.past', - 10, array('%count%' => 10), 'difference', 'pl' @@ -36,7 +34,7 @@ function it_format_datetime_diff() new \DateTime("2015-01-01 00:10:00"), new \DateTime("2015-01-01 00:00:00") ); - + $this->formatDifference($diff)->shouldReturn('10 minutes ago'); } @@ -46,7 +44,7 @@ function it_format_datetime_diff_for_specific_locale() new \DateTime("2015-01-01 00:10:00"), new \DateTime("2015-01-01 00:00:00") ); - + $this->formatDifference($diff, 'pl')->shouldReturn('10 minut temu'); } } diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php index 1ecf75e..5228235 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php @@ -15,17 +15,15 @@ class PreciseFormatterSpec extends ObjectBehavior function let(Translator $translator) { $this->beConstructedWith($translator); - $translator->transChoice( + $translator->trans( 'compound.day', - 10, array('%count%' => 10), 'difference', 'en' )->willReturn('10 days'); - $translator->transChoice( + $translator->trans( 'compound.hour', - 5, array('%count%' => 5), 'difference', 'en' @@ -38,17 +36,15 @@ function let(Translator $translator) 'en' )->willReturn('10 days, 5 hours from now'); - $translator->transChoice( + $translator->trans( 'compound.day', - 10, array('%count%' => 10), 'difference', 'ru' )->willReturn('10 дней'); - $translator->transChoice( + $translator->trans( 'compound.hour', - 5, array('%count%' => 5), 'difference', 'ru' @@ -66,7 +62,7 @@ function it_format_compound_datetime_diff() { $diff = new PreciseDifference( new \DateTime("2015-01-01 00:00:00"), - new \DateTime("2015-01-11 05:00:00") + new \DateTime("2015-01-11 05:00:00") ); $this->formatDifference($diff)->shouldReturn('10 days, 5 hours from now'); @@ -78,7 +74,7 @@ function it_format_compound_datetime_diff_for_specific_locale() new \DateTime("2015-01-01 00:00:00"), new \DateTime("2015-01-11 05:00:00") ); - + $this->formatDifference($diff, 'ru')->shouldReturn('через 10 дней, 5 часов'); } } diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index ec28b4b..aa0798a 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -11,12 +11,12 @@ namespace Coduo\PHPHumanizer\Collection; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class Formatter { /** - * @var \Symfony\Component\Translation\TranslatorInterface + * @var TranslatorInterface */ private $translator; @@ -72,7 +72,7 @@ private function formatCommaSeparatedWithLimit($collection, $limit, $count) $moreCount = $count - \count($display); - return $this->translator->transChoice('comma_separated_with_limit', $moreCount, [ + return $this->translator->trans('comma_separated_with_limit', [ '%list%' => \implode(', ', $display), '%count%' => $moreCount, ], $this->catalogue); diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index 781fc3d..a5d7c2f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -11,12 +11,12 @@ namespace Coduo\PHPHumanizer\DateTime; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class Formatter { /** - * @var \Symfony\Component\Translation\TranslatorInterface + * @var TranslatorInterface */ private $translator; @@ -38,9 +38,8 @@ public function formatDifference(Difference $difference, $locale = 'en') { $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); - return $this->translator->transChoice( + return $this->translator->trans( $translationKey, - $difference->getQuantity(), ['%count%' => $difference->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 66800a1..a47fe67 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -11,12 +11,12 @@ namespace Coduo\PHPHumanizer\DateTime; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class PreciseFormatter { /** - * @var \Symfony\Component\Translation\TranslatorInterface + * @var TranslatorInterface */ private $translator; @@ -39,9 +39,8 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') $diff = []; foreach ($difference->getCompoundResults() as $result) { - $diff[] = $this->translator->transChoice( + $diff[] = $this->translator->trans( 'compound.'.$result->getUnit()->getName(), - $result->getQuantity(), ['%count%' => $result->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 745c60c..4e184a9 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -78,10 +78,10 @@ public function fromRoman($string) $i = \mb_strlen($string); while ($i > 0) { - $digit = $this->map[$string{--$i}]; + $digit = $this->map[$string[--$i]]; if ($i > 0) { - $previousDigit = $this->map[$string{$i - 1}]; + $previousDigit = $this->map[$string[$i - 1]]; if ($previousDigit < $digit) { $digit -= $previousDigit; diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 29933a9..0753e23 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -12,8 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\CollectionHumanizer; +use PHPUnit\Framework\TestCase; -final class CollectionHumanizerTest extends \PHPUnit_Framework_TestCase +final class CollectionHumanizerTest extends TestCase { /** * @dataProvider oxfordCollectionProvider diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index efa9d95..a50a16d 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -12,8 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\DateTimeHumanizer; +use PHPUnit\Framework\TestCase; -class DateTimeHumanizerTest extends \PHPUnit_Framework_TestCase +class DateTimeHumanizerTest extends TestCase { /** * @test diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index ae40dbc..a0a9847 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -12,8 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\NumberHumanizer; +use PHPUnit\Framework\TestCase; -class NumberHumanizerTest extends \PHPUnit_Framework_TestCase +class NumberHumanizerTest extends TestCase { /** * @dataProvider ordinalIndicatorProvider @@ -184,11 +185,9 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() { + $this->expectException(\InvalidArgumentException::class); NumberHumanizer::binarySuffix('as12'); } @@ -205,19 +204,17 @@ public function test_convert_number_to_string_with_precise_binary_suffix($expect $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::preciseBinarySuffix(1, -1); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::preciseBinarySuffix(1, 4); } @@ -233,11 +230,10 @@ public function test_convert_number_to_string_with_metric_suffix($expected, $num $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::metricSuffix('as12'); } @@ -265,23 +261,25 @@ public function test_convert_roman_numbers_to_arabic($number, $expected) /** * @dataProvider romanExceptionProvider - * @expectedException \InvalidArgumentException * * @param $number */ public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::toRoman($number); } /** * @dataProvider arabicExceptionProvider - * @expectedException \InvalidArgumentException * * @param $number */ public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::fromRoman($number); } diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index c3f1f51..6f318b3 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -12,9 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\StringHumanizer; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; -class StringHumanizerTest extends PHPUnit_Framework_TestCase +class StringHumanizerTest extends TestCase { /** * @dataProvider humanizeStringProvider From fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 8 Jul 2020 14:34:38 +0200 Subject: [PATCH 19/87] Fixed travis configuration --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2d6b0e9..80b4cb0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,17 +6,14 @@ cache: matrix: include: - - php: 7.0 - - php: 7.1 - - php: 7.2 - php: 7.3 - php: 7.4 + - php: 8.0 before_install: - composer self-update install: - - export COMPOSER_ROOT_VERSION=dev-master - composer update script: From 83a1805da9a28a98a0bb932a5236becd44ea79b6 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 8 Jul 2020 14:58:48 +0200 Subject: [PATCH 20/87] Removed php 8.0 from matrix --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 80b4cb0..aa0c007 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,6 @@ matrix: include: - php: 7.3 - php: 7.4 - - php: 8.0 before_install: - composer self-update From b0f40dfbf41d7e89b73cb509cb8d4ddd7217fa2b Mon Sep 17 00:00:00 2001 From: Emin Rahmanov Date: Sat, 17 Oct 2020 22:31:38 +0400 Subject: [PATCH 21/87] create azerbaijani translation (#118) --- .../Resources/translations/difference.az.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml new file mode 100644 index 0000000..08a24fe --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] indi" + future: "[0,Inf] indi" +second: + past: "{1} %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" + future: "{1} %count% saniyə sonra|[2,Inf] %count% saniyə sonra" +minute: + past: "{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl" + future: "{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra" +hour: + past: "{1} %count% saat əvvəl|[2,Inf] %count% saat əvvəl" + future: "{1} %count% saat sonra|[2,Inf] %count% saat sonra" +day: + past: "{1} %count% gün əvvəl|[2,Inf] %count% gün əvvəl" + future: "{1} %count% gün sonra|[2,Inf] %count% gün sonra" +week: + past: "{1} %count% həftə əvvəl|[2,Inf] %count% həftə əvvəl" + future: "{1} %count% həftə sonra|[2,Inf] %count% həftə sonra" +month: + past: "{1} %count% ay əvvəl|[2,Inf] %count% ay əvvəl" + future: "{1} %count% ay sonra|[2,Inf] %count% ay sonra" +year: + past: "{1} %count% il əvvəl|[2,Inf] %count% il əvvəl" + future: "{1} %count% il sonra|[2,Inf] %count% il sonra" + +compound: + second: "{1} %count% saniyə|[2,Inf] %count% saniyə" + minute: "{1} %count% dəqiqə|[2,Inf] %count% dəqiqə" + hour: "{1} %count% saat|[2,Inf] %count% saat" + day: "{1} %count% gün|[2,Inf] %count% gün" + week: "{1} %count% həftə|[2,Inf] %count% həftə" + month: "{1} %count% ay|[2,Inf] %count% ay" + year: "{1} %count% il|[2,Inf] %count% il" + past: "%value% əvvəl" + future: "%value% sonra" From c86d1827465574cc2dc8e941609ff1e06ba26d62 Mon Sep 17 00:00:00 2001 From: Emin Rahmanov Date: Sat, 17 Oct 2020 22:31:53 +0400 Subject: [PATCH 22/87] Update README.md (#119) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 49c184c..345a7ca 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \ ``` Currently we support following languages: +* [Azerbaijani](src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml) * [English](src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml) * [Polish](src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml) * [German](src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml) From da1bbcf027a49b101110a668ba564ae0f8e12b13 Mon Sep 17 00:00:00 2001 From: Emin Rahmanov Date: Sun, 18 Oct 2020 11:09:06 +0400 Subject: [PATCH 23/87] Support Azerbaijani language (#120) --- .../Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index a50a16d..a4c441e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -270,6 +270,16 @@ public function humanizeDataProvider() public function preciseDifferenceDataProvider() { return [ + // Azerbaijani + ['2014-04-26 13:00:00', '2014-04-26 12:58:15', '1 dəqiqə, 45 saniyə əvvəl', 'az'], + ['2014-04-26 13:00:00', '2014-04-26 11:20:00', '1 saat, 40 dəqiqə əvvəl', 'az'], + ['2014-04-26 13:00:00', '2014-04-27 13:15:00', '1 gün, 15 dəqiqə sonra', 'az'], + ['2014-04-26 13:00:00', '2014-05-03 15:00:00', '7 gün, 2 saat sonra', 'az'], + ['2014-04-26 13:00:00', '2015-04-28 17:00:00', '1 il, 2 gün, 4 saat sonra', 'az'], + ['2014-04-26 13:00:00', '2014-04-28 23:00:00', '2 gün, 10 saat sonra', 'az'], + ['2014-04-26 13:00:00', '2014-04-25 11:20:00', '1 gün, 1 saat, 40 dəqiqə əvvəl', 'az'], + ['2014-04-26 13:00:00', '2016-04-27 13:00:00', '2 il, 1 gün sonra', 'az'], + // English ['2014-04-26 13:00:00', '2014-04-26 12:58:15', '1 minute, 45 seconds ago', 'en'], ['2014-04-26 13:00:00', '2014-04-26 11:20:00', '1 hour, 40 minutes ago', 'en'], From 2d045f4f080d30da864815b561e1b018743619b9 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 21 Feb 2021 23:03:42 +0100 Subject: [PATCH 24/87] Upgrade php-humanizer to the latest standards (#122) * Library dependencies upgrade & cleanup * Fixed static analyze errors * Aeon php integration * Removed travis configuration * Fixed missing phive keys --- .gitattributes | 11 + .github/PULL_REQUEST_TEMPLATE.md | 33 + .github/dependabot.yml | 6 + .github/workflows/changelog-release.yml | 31 + .github/workflows/changelog-update.yml | 38 + .../pull-request-description-check.yml | 20 + .../workflows/release-description-update.yml | 25 + .github/workflows/static-analyze.yml | 77 + .github/workflows/tests.yml | 80 + .gitignore | 5 +- .phive/phars.xml | 6 + .travis.yml | 19 - CHANGELOG.md | 271 +- CODE_OF_CONDUCT.md | 76 + CONTRIBUTING.md | 23 - LICENSE | 2 +- README.md | 4 +- baseline.xml | 26 + composer.json | 29 +- composer.lock | 2640 +++++++++++++++++ phpstan.neon | 6 + phpunit.xml.dist | 34 +- psalm.xml | 17 + .../PHPHumanizer/Collection/FormatterSpec.php | 47 - .../PHPHumanizer/Collection/OxfordSpec.php | 45 - .../PHPHumanizer/DateTime/DifferenceSpec.php | 106 - .../PHPHumanizer/DateTime/FormatterSpec.php | 50 - .../DateTime/PreciseFormatterSpec.php | 80 - .../String/WordBreakpointSpec.php | 36 - .../PHPHumanizer/Collection/Formatter.php | 49 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 17 +- .../PHPHumanizer/CollectionHumanizer.php | 7 +- .../PHPHumanizer/DateTime/Difference.php | 35 +- .../DateTime/Difference/CompoundResult.php | 29 +- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 18 +- .../DateTime/PreciseDifference.php | 28 +- .../DateTime/PreciseFormatter.php | 18 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 13 +- src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 9 +- src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 9 +- .../PHPHumanizer/DateTime/Unit/JustNow.php | 9 +- .../PHPHumanizer/DateTime/Unit/Minute.php | 9 +- .../PHPHumanizer/DateTime/Unit/Month.php | 9 +- .../PHPHumanizer/DateTime/Unit/Second.php | 9 +- src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 9 +- src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 9 +- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 16 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 11 +- .../PHPHumanizer/Number/Ordinal/Builder.php | 29 +- .../Number/Ordinal/StrategyInterface.php | 8 +- .../PHPHumanizer/Number/RomanNumeral.php | 28 +- src/Coduo/PHPHumanizer/NumberHumanizer.php | 40 +- .../Resources/Ordinal/DeStrategy.php | 8 +- .../Resources/Ordinal/EnStrategy.php | 10 +- .../Resources/Ordinal/EsStrategy.php | 8 +- .../Resources/Ordinal/FrStrategy.php | 8 +- .../Resources/Ordinal/IdStrategy.php | 11 +- .../Resources/Ordinal/ItStrategy.php | 8 +- .../Resources/Ordinal/NlStrategy.php | 10 +- .../Resources/Ordinal/PtStrategy.php | 8 +- .../PHPHumanizer/String/BinarySuffix.php | 49 +- src/Coduo/PHPHumanizer/String/Breakpoint.php | 8 +- .../PHPHumanizer/String/HtmlTruncate.php | 40 +- src/Coduo/PHPHumanizer/String/Humanize.php | 30 +- .../PHPHumanizer/String/MetricSuffix.php | 34 +- .../String/ShortcodeProcessor.php | 34 +- .../PHPHumanizer/String/TextTruncate.php | 28 +- .../PHPHumanizer/String/TruncateInterface.php | 8 +- .../PHPHumanizer/String/WordBreakpoint.php | 15 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 44 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 6 +- .../Tests/Collection/FormatterTest.php | 49 + .../Tests/Collection/OxfordTest.php | 36 + .../Tests/DateTime/DifferenceTest.php | 120 + .../Tests/DateTime/FormatterTest.php | 44 + .../Tests/DateTime/PreciseFormatterTest.php | 44 + .../Tests/NumberHumanizerTest.php | 7 - .../Tests/String/WordBreakpointTest.php | 51 + tests/bootstrap.php | 12 - 79 files changed, 3978 insertions(+), 1013 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/changelog-release.yml create mode 100644 .github/workflows/changelog-update.yml create mode 100644 .github/workflows/pull-request-description-check.yml create mode 100644 .github/workflows/release-description-update.yml create mode 100644 .github/workflows/static-analyze.yml create mode 100644 .github/workflows/tests.yml create mode 100644 .phive/phars.xml delete mode 100644 .travis.yml create mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md create mode 100644 baseline.xml create mode 100644 composer.lock create mode 100644 phpstan.neon create mode 100644 psalm.xml delete mode 100644 spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php delete mode 100644 tests/bootstrap.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d5fe021 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +*.php text eol=lf +*.phpt text eol=lf +/composer.lock export-ignore +/.github/ export-ignore +/.phive/ export-ignore +/tests export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/.php_cs export-ignore +/phpstan.neon export-ignore +/phpunit.xml export-ignore \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..07c5e96 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,33 @@ + +

Change Log

+
+

Added

+
    + +
+

Fixed

+
    + +
+

Changed

+
    + +
+

Removed

+
    + +
+

Deprecated

+
    + +
+

Security

+
    + +
+
+
+ +

Description

+ + \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..12f28b4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "daily" \ No newline at end of file diff --git a/.github/workflows/changelog-release.yml b/.github/workflows/changelog-release.yml new file mode 100644 index 0000000..bb9608a --- /dev/null +++ b/.github/workflows/changelog-release.yml @@ -0,0 +1,31 @@ +name: "Changelog - Release Unreleased" + +################################################################### +# WARNING - THIS ACTION WILL PUSH COMMIT DIRECTLY INTO REPOSITORY # +################################################################### + +on: + push: + tags: + - '*' + +jobs: + changelog-release-unreleased: + name: "Update Changelog - Release Unreleased" + + runs-on: "ubuntu-latest" + + steps: + - name: "Get tag name" + id: "tag-name" + run: | + tag=$(echo ${{ github.event.ref }} | cut -c11-) + echo "::set-output name=tag::$tag" + + - name: "Update CHANGELOG" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "changelog:release:unreleased ${{ github.repository }} CHANGELOG.md ${{ steps.tag-name.outputs.tag }} --github-file-changelog-update" diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml new file mode 100644 index 0000000..e0ae30a --- /dev/null +++ b/.github/workflows/changelog-update.yml @@ -0,0 +1,38 @@ +name: "Changelog - Update Unreleased" + +################################################################### +# WARNING - THIS ACTION WILL PUSH COMMIT DIRECTLY INTO REPOSITORY # +################################################################### + +on: + push: + branches: + - 6.x + +jobs: + changelog-update-unreleased: + name: "Changelog - Update Unreleased" + + runs-on: "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Restore Automation cache" + uses: "actions/cache@v2" + with: + path: | + cache + key: "${{ runner.os }}-automation-${{ hashFiles('**/CHANGELOG.md') }}" + restore-keys: | + ${{ runner.os }}-automation- + + - name: "Update CHANGELOG" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + EON_AUTOMATION_CACHE_DIR: "/github/workspace/cache" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "changelog:generate ${{ github.repository }} --github-file-update-path=CHANGELOG.md --skip-from=\"dependabot[bot]\" --skip-from=\"aeon-automation\"" diff --git a/.github/workflows/pull-request-description-check.yml b/.github/workflows/pull-request-description-check.yml new file mode 100644 index 0000000..f624146 --- /dev/null +++ b/.github/workflows/pull-request-description-check.yml @@ -0,0 +1,20 @@ +name: "Pull Request Description Check" + +on: + pull_request: + types: ["opened", "edited", "reopened", "ready_for_review"] + +jobs: + pull-request-description-check: + name: "Pull Request Description" + + runs-on: "ubuntu-latest" + + steps: + - name: "Pull Request Description - Check" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "pull-request:description:check ${{ github.repository }} ${{ github.event.pull_request.number }} --skip-from=\"dependabot[bot]\"" \ No newline at end of file diff --git a/.github/workflows/release-description-update.yml b/.github/workflows/release-description-update.yml new file mode 100644 index 0000000..c2db558 --- /dev/null +++ b/.github/workflows/release-description-update.yml @@ -0,0 +1,25 @@ +name: "Release - Description Update" + +######################################################### +# WARNING - THIS ACTION WILL UPDATE RELEASE DESCRIPTION # +######################################################### + +on: + release: + types: + - created + +jobs: + release-description-update: + name: "Release - Description Update" + + runs-on: "ubuntu-latest" + + steps: + - name: "Update CHANGELOG" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "changelog:generate ${{ github.repository }} --tag=${{ github.event.release.tag_name }} --github-release-update --skip-from=\"dependabot[bot]\" --skip-from=\"aeon-automation\"" diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml new file mode 100644 index 0000000..45b6c03 --- /dev/null +++ b/.github/workflows/static-analyze.yml @@ -0,0 +1,77 @@ +name: "Static Analyze" + +on: + pull_request: + push: + branches: + - "4.x" + schedule: + - cron: '* 8 * * *' + +jobs: + compatibility: + name: "Static Analyze" + + runs-on: ${{ matrix.operating-system }} + + strategy: + matrix: + dependencies: + - "locked" + php-version: + - "7.4" + operating-system: + - "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: phive, composer:v2 + + - name: "Cache Phive dependencies" + uses: "actions/cache@v2" + with: + path: | + ~/.phive + key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" + restore-keys: | + ${{ runner.os }}-phive- + + - name: "Get Composer Cache Directory" + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache Composer dependencies" + uses: "actions/cache@v2" + with: + path: | + ${{ steps.composer-cache.outputs.dir }} + key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.lock') }}" + restore-keys: | + php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install tools" + run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress --no-suggest" + + - name: "Install locked dependencies" + if: ${{ matrix.dependencies == 'locked' }} + run: "composer install --no-interaction --no-progress --no-suggest" + + - name: "Static Analyze" + run: "composer static:analyze" \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..5a2eb63 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,80 @@ +name: "Tests" + +on: + pull_request: + push: + branches: + - "4.x" + schedule: + - cron: '* 8 * * *' + +jobs: + compatibility: + name: "Tests" + + runs-on: ${{ matrix.operating-system }} + + strategy: + matrix: + dependencies: + - "locked" + - "lowest" + - "highest" + php-version: + - "7.4" + - "8.0" + operating-system: + - "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: phive, composer:v2 + + - name: "Cache Phive dependencies" + uses: "actions/cache@v2" + with: + path: | + ~/.phive + key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" + restore-keys: | + ${{ runner.os }}-phive- + + - name: "Get Composer Cache Directory" + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache Composer dependencies" + uses: "actions/cache@v2" + with: + path: | + ${{ steps.composer-cache.outputs.dir }} + key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.lock') }}" + restore-keys: | + php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install tools" + run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress --no-suggest" + + - name: "Install locked dependencies" + if: ${{ matrix.dependencies == 'locked' }} + run: "composer install --no-interaction --no-progress --no-suggest" + + - name: "Tests" + run: "composer test" diff --git a/.gitignore b/.gitignore index e0a7c66..482dd47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ vendor/ bin/ -composer.lock -composer.phar -*.cache \ No newline at end of file +var/ +tools/ \ No newline at end of file diff --git a/.phive/phars.xml b/.phive/phars.xml new file mode 100644 index 0000000..a00e5c5 --- /dev/null +++ b/.phive/phars.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index aa0c007..0000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: php - -cache: - directories: - - $HOME/.composer/cache - -matrix: - include: - - php: 7.3 - - php: 7.4 - -before_install: - - composer self-update - -install: - - composer update - -script: - - composer run test \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 15c1f68..6125fde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,268 @@ -# 2.0 +## [Unreleased] - 2020-10-18 -* Added support for PHP7 -* Updated dependencies to support Symfony3 components -* Added support for Ordinal number strategies that require prefixes +### Added +- [#120](https://github.com/coduo/php-humanizer/pull/120) - **test for azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) +- [#119](https://github.com/coduo/php-humanizer/pull/119) - **support azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) + +### Changed +- [#118](https://github.com/coduo/php-humanizer/pull/118) - **create azerbaijani translation** - [@4t87ux8](https://github.com/4t87ux8) +- [fa52e6](https://github.com/coduo/php-humanizer/commit/fa52e6223eef2f19fbd0a290432b5a878317dca2) - **Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies** - [@norberttech](https://github.com/norberttech) +- [f989a9](https://github.com/coduo/php-humanizer/commit/f989a91d2d90f5d4bf4922ab9fec1674e7fe024e) - **Create FUNDING.yml** - [@norberttech](https://github.com/norberttech) +- [142689](https://github.com/coduo/php-humanizer/commit/142689763a6aafdd9f1dfbb48db9807bbe027acc) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [6255e0](https://github.com/coduo/php-humanizer/commit/6255e022c0ff8767cae6cdb4552d13f5f0df0d65) - **Moved php-cs-fixer to dev dependency where it belongs to** - [@norberttech](https://github.com/norberttech) +- [4d62db](https://github.com/coduo/php-humanizer/commit/4d62dba187d89bc8276ff6e5364d2dd9a3f2ad5f) - **Migrated from travis-ci.org to travis-ci.com** - [@norberttech](https://github.com/norberttech) +- [dc528e](https://github.com/coduo/php-humanizer/commit/dc528ebcef31b793e1dd24dbe90f14039361fad1) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) + +### Fixed +- [fc3a04](https://github.com/coduo/php-humanizer/commit/fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69) - **travis configuration** - [@norberttech](https://github.com/norberttech) +- [#115](https://github.com/coduo/php-humanizer/pull/115) - **composer autoloading deprecation notice; Support symfony 5** - [@brianwozeniak](https://github.com/brianwozeniak) + +### Removed +- [83a180](https://github.com/coduo/php-humanizer/commit/83a1805da9a28a98a0bb932a5236becd44ea79b6) - **php 8.0 from matrix** - [@norberttech](https://github.com/norberttech) + +## [3.0.2] - 2019-04-29 + +### Changed +- [9d83e5](https://github.com/coduo/php-humanizer/commit/9d83e509dacfd26250ee4c6b0f195affb08cb1e2) - **Moved php-cs-fixer to dev dependency where it belongs to** - [@norberttech](https://github.com/norberttech) + +## [3.0.1] - 2019-04-20 + +### Changed +- [380428](https://github.com/coduo/php-humanizer/commit/38042820e9ee7ccc76d66f9c480fe8b7f0e8aaf0) - **Update README.md** - [@norberttech](https://github.com/norberttech) + +## [3.0.0] - 2019-04-20 + +### Added +- [17a5ab](https://github.com/coduo/php-humanizer/commit/17a5ab5243ae1eec2e3d39388bf611088b8fd5e7) - **missing translations** - [@norberttech](https://github.com/norberttech) +- [#86](https://github.com/coduo/php-humanizer/pull/86) - **test case with 0 at the end of the number** - [@norberttech](https://github.com/norberttech) +- [#84](https://github.com/coduo/php-humanizer/pull/84) - **PFIGS ordinals** - [@martinbutt](https://github.com/martinbutt) + +### Changed +- [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) +- [14ab74](https://github.com/coduo/php-humanizer/commit/14ab746762acd1856ddd386023128f23935ef119) - **CS Fixes** - [@norberttech](https://github.com/norberttech) +- [9edceb](https://github.com/coduo/php-humanizer/commit/9edceb2d21fa879e91072308b8bbe3503a346bd2) - **CS Fixes** - [@norberttech](https://github.com/norberttech) +- [#112](https://github.com/coduo/php-humanizer/pull/112) - **Upgraded thunderer/shortcode dependency to ^0.7** - [@thunderer](https://github.com/thunderer) +- [#111](https://github.com/coduo/php-humanizer/pull/111) - **Allow later versions of symfony packages** - [@brianwozeniak](https://github.com/brianwozeniak) +- [#91](https://github.com/coduo/php-humanizer/pull/91) - **Sanity check for NumberFormatter when intl is not installed** - [@thunderer](https://github.com/thunderer) +- [#40](https://github.com/coduo/php-humanizer/pull/40) - **Romanian translations** - [@a-ungurianu](https://github.com/a-ungurianu) +- [#106](https://github.com/coduo/php-humanizer/pull/106) - **[master] Add translation: zh_TW** - [@jfcherng](https://github.com/jfcherng) +- [#104](https://github.com/coduo/php-humanizer/pull/104) - **Feature/update** - [@norberttech](https://github.com/norberttech) +- [#89](https://github.com/coduo/php-humanizer/pull/89) - **remove unnecessary echo** - [@vinicius73](https://github.com/vinicius73) +- [#87](https://github.com/coduo/php-humanizer/pull/87) - **Force $binaryPrefixes array ordering on 32-bit systems, fixes #83** - [@Forst](https://github.com/Forst) +- [5cd850](https://github.com/coduo/php-humanizer/commit/5cd850b49b1ca30811f24c5c1a9b0d6e4cac9fba) - **Update composer.json** - [@norberttech](https://github.com/norberttech) +- [#85](https://github.com/coduo/php-humanizer/pull/85) - **Support Japanese language** - [@serima](https://github.com/serima) + +### Fixed +- [9b52c5](https://github.com/coduo/php-humanizer/commit/9b52c5dc42f10ff60f4827ff9a736b3a1a18f0e4) - **README.md** - [@norberttech](https://github.com/norberttech) +- [#80](https://github.com/coduo/php-humanizer/pull/80) - **russian translation** - [@dizzy7](https://github.com/dizzy7) + +## [2.0.1] - 2019-02-25 + +### Changed +- [#107](https://github.com/coduo/php-humanizer/pull/107) - **[2.0] Add translation: zh_TW** - [@jfcherng](https://github.com/jfcherng) + +### Fixed +- [#108](https://github.com/coduo/php-humanizer/pull/108) - **travis configuration for 2.0 branch** - [@norberttech](https://github.com/norberttech) + +## [2.0.0-beta] - 2016-02-21 + +### Added +- [#78](https://github.com/coduo/php-humanizer/pull/78) - **ext-inl to composer suggest** - [@norberttech](https://github.com/norberttech) +- [#68](https://github.com/coduo/php-humanizer/pull/68) - **composer cache folder and move to new infrastructure** - [@norberttech](https://github.com/norberttech) + +### Changed +- [e85d69](https://github.com/coduo/php-humanizer/commit/e85d6905a097f9ba6b2165d9998749eb113d0289) - **Merge pull request #78 from norzechowicz/suggest-intl** - [@norzechowicz](https://github.com/norzechowicz) +- [#75](https://github.com/coduo/php-humanizer/pull/75) - **Cleanup before stable release** - [@norberttech](https://github.com/norberttech) +- [f5831e](https://github.com/coduo/php-humanizer/commit/f5831e3be54ca85c9fc14ee5da00b2d6ba1143bb) - **Merge pull request #75 from norzechowicz/cleanup** - [@norzechowicz](https://github.com/norzechowicz) +- [#73](https://github.com/coduo/php-humanizer/pull/73) - **improve strategy to handle prefix-ordinal** - [@isnani](https://github.com/isnani) +- [6ec963](https://github.com/coduo/php-humanizer/commit/6ec963fb1c8ecee66feb0228ca5626f1c1ca09f8) - **Merge pull request #73 from isnani/improve-ordinal-strategy** - [@norzechowicz](https://github.com/norzechowicz) +- [#70](https://github.com/coduo/php-humanizer/pull/70) - **Cleanup** - [@norberttech](https://github.com/norberttech) +- [dac4b4](https://github.com/coduo/php-humanizer/commit/dac4b43390f320b82728f1e5e0ad45f7c68d591e) - **Merge pull request #70 from norzechowicz/cleanup** - [@norzechowicz](https://github.com/norzechowicz) +- [#69](https://github.com/coduo/php-humanizer/pull/69) - **Renamed all facades in order to support php7** - [@norberttech](https://github.com/norberttech) +- [b7214c](https://github.com/coduo/php-humanizer/commit/b7214ce3e0511d5172568aff4a4572a0d80762a1) - **Merge pull request #69 from norzechowicz/php7-support** - [@norzechowicz](https://github.com/norzechowicz) +- [3f252e](https://github.com/coduo/php-humanizer/commit/3f252ef1a717a841dac1316f835494ef82104cde) - **master branch alias** - [@norberttech](https://github.com/norberttech) +- [ae6020](https://github.com/coduo/php-humanizer/commit/ae602062f4500488dcbd119b3560a1bdd4fe2699) - **Merge pull request #68 from norzechowicz/travis-ci** - [@norzechowicz](https://github.com/norzechowicz) +- [7c7e79](https://github.com/coduo/php-humanizer/commit/7c7e79dabc0989dbaf485d46c00d9d836c929f8a) - **Merge pull request #67 from nwatth/thai-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [#67](https://github.com/coduo/php-humanizer/pull/67) - **Thai translation** - [@nwatth](https://github.com/nwatth) + +## [1.0.9] - 2015-12-02 + +### Added +- [#54](https://github.com/coduo/php-humanizer/pull/54) - **Ukrainian to the list of languages** - [@Borales](https://github.com/Borales) +- [d2904a](https://github.com/coduo/php-humanizer/commit/d2904ae1e1ebd79c7b8224aa31bd5aec8d9575a4) - **composer.phar into .gitignore** - [@norberttech](https://github.com/norberttech) +- [#26](https://github.com/coduo/php-humanizer/pull/26) - **Spanish translation.** - [@orestes](https://github.com/orestes) +- [#53](https://github.com/coduo/php-humanizer/pull/53) - **Chinese Simplified (zh_CN)** - [@arrowrowe](https://github.com/arrowrowe) + +### Changed +- [#65](https://github.com/coduo/php-humanizer/pull/65) - **Oxford french translation** - [@percymamedy](https://github.com/percymamedy) +- [b36457](https://github.com/coduo/php-humanizer/commit/b364572a7a73bed0be62a7d2df382fb1ab35cd2a) - **Merge pull request #65 from percymamedy/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#66](https://github.com/coduo/php-humanizer/pull/66) - **Danish translation** - [@hyperpanic](https://github.com/hyperpanic) +- [7599dd](https://github.com/coduo/php-humanizer/commit/7599dd847f6b72c6c41f9458cfd92092200644e9) - **Merge pull request #66 from radiosignal/danish-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [#61](https://github.com/coduo/php-humanizer/pull/61) - **Shortcode removal utilities** - [@thunderer](https://github.com/thunderer) +- [6bed68](https://github.com/coduo/php-humanizer/commit/6bed6804a97b0489af80ea229616d26a7224b33a) - **Merge pull request #61 from thunderer/string-shortcode-removal** - [@norzechowicz](https://github.com/norzechowicz) +- [a78a55](https://github.com/coduo/php-humanizer/commit/a78a552671dc51f4393b2806097250d0163eee2f) - **Merge pull request #64 from ddmler/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#64](https://github.com/coduo/php-humanizer/pull/64) - **German translation** - [@ddmler](https://github.com/ddmler) +- [3eb227](https://github.com/coduo/php-humanizer/commit/3eb227e710726d04b1905dfc2422370d716611d5) - **Merge pull request #46 from doenietzomoeilijk/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#46](https://github.com/coduo/php-humanizer/pull/46) - **Refactor Number into separate languages** - [@doenietzomoeilijk](https://github.com/doenietzomoeilijk) +- [a68dc7](https://github.com/coduo/php-humanizer/commit/a68dc7326b1991161e423812d454bf51f4c15d5e) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) +- [3bcb4b](https://github.com/coduo/php-humanizer/commit/3bcb4b6c204a1d042517bb93e39f45cef1fe8615) - **Merge pull request #54 from Borales/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#58](https://github.com/coduo/php-humanizer/pull/58) - **Remove composer.phar file** - [@vinkla](https://github.com/vinkla) +- [216c9b](https://github.com/coduo/php-humanizer/commit/216c9bbd1f173213a5137306faf5a8a04cab315e) - **Merge pull request #55 from hjason/master** - [@norzechowicz](https://github.com/norzechowicz) +- [5c9bb3](https://github.com/coduo/php-humanizer/commit/5c9bb3393a682126bb8d2d51fcdc77476eef2b83) - **Merge pull request #26 from orestes/es-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [34ef53](https://github.com/coduo/php-humanizer/commit/34ef53fbd42ee7d33999ca4896ea17c2a1cc8a30) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) +- [51ea67](https://github.com/coduo/php-humanizer/commit/51ea6720069d822a9b9ef8797d708b7205123517) - **Merge pull request #53 from dyweb/master** - [@norzechowicz](https://github.com/norzechowicz) + +### Fixed +- [73e99d](https://github.com/coduo/php-humanizer/commit/73e99d096f9f1bc4f66fbb13fc0a3a6f620f4eea) - **StringTest** - [@hjason2042@gmail.com](#) + +## [1.0.8] - 2015-11-06 + +### Added +- [#52](https://github.com/coduo/php-humanizer/pull/52) - **Indonesian language** - [@naprirfan](https://github.com/naprirfan) +- [#41](https://github.com/coduo/php-humanizer/pull/41) - **russian. Add prefix at format difference.** - [@sam002](https://github.com/sam002) +- [#51](https://github.com/coduo/php-humanizer/pull/51) - **possibility to pass forbidden words into humanizer** - [@norberttech](https://github.com/norberttech) +- [#49](https://github.com/coduo/php-humanizer/pull/49) - **support for multiple character separators at string humanizer** - [@drgomesp](https://github.com/drgomesp) +- [#27](https://github.com/coduo/php-humanizer/pull/27) - **Bulgarian translation** - [@lpopov](https://github.com/lpopov) +- [f65309](https://github.com/coduo/php-humanizer/commit/f6530941c4fb5c109aa593229a3ea3da449b6781) - **the breakpoint in the constructor** - [@smeeckaert](https://github.com/smeeckaert) +- [798d77](https://github.com/coduo/php-humanizer/commit/798d77d6b864b2d46b4c2487f616ea044f08f92c) - **breakpoint tests** - [@smeeckaert](https://github.com/smeeckaert) +- [#38](https://github.com/coduo/php-humanizer/pull/38) - **Dutch Oxford translations.** - [@doenietzomoeilijk](https://github.com/doenietzomoeilijk) +- [#29](https://github.com/coduo/php-humanizer/pull/29) - **Norwegian translation** - [@dagaa](https://github.com/dagaa) +- [#16](https://github.com/coduo/php-humanizer/pull/16) - **Dutch translation.** - [@Ozmodiar](https://github.com/Ozmodiar) + +### Changed +- [d6e784](https://github.com/coduo/php-humanizer/commit/d6e784a86b6f2318394fd6b8af853e5180d3ab15) - **Merge pull request #52 from naprirfan/master** - [@norzechowicz](https://github.com/norzechowicz) +- [9d1732](https://github.com/coduo/php-humanizer/commit/9d17321e4259ff8376d5a779c0ad682b4394ae00) - **Merge pull request #47 from mostertb/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#47](https://github.com/coduo/php-humanizer/pull/47) - **Support for optional explicit BinarySuffix precision** - [@mostertb](https://github.com/mostertb) +- [a4d68a](https://github.com/coduo/php-humanizer/commit/a4d68a956478bfe84661ca1f8a6c8984aaba741c) - **Merge pull request #41 from sam002/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#30](https://github.com/coduo/php-humanizer/pull/30) - **TruncateHtml** - [@smeeckaert](https://github.com/smeeckaert) +- [0465bd](https://github.com/coduo/php-humanizer/commit/0465bd058e9b8c26bf9dc00f38fe14a8473f67b7) - **Merge branch 'master' of git://github.com/smeeckaert/php-humanizer into smeeckaert-master** - [@norberttech](https://github.com/norberttech) +- [4a6ed1](https://github.com/coduo/php-humanizer/commit/4a6ed1f15345562df1eede367112d06a9fc41ab3) - **Merge pull request #51 from norzechowicz/humanizer-forbidden-words** - [@norzechowicz](https://github.com/norzechowicz) +- [c0606e](https://github.com/coduo/php-humanizer/commit/c0606e6844a22bc5480a2527d2f043d6a52eb52a) - **Merge pull request #50 from norzechowicz/phpunit** - [@norzechowicz](https://github.com/norzechowicz) +- [#50](https://github.com/coduo/php-humanizer/pull/50) - **Moved integration tests from phpspec into phpunit** - [@norberttech](https://github.com/norberttech) +- [0a04e0](https://github.com/coduo/php-humanizer/commit/0a04e02fbf7ba37a2df8b4c3a5f0b93d0ce9f002) - **Merge pull request #49 from drgomesp/support-multiple-character-separator** - [@norzechowicz](https://github.com/norzechowicz) +- [fe8f03](https://github.com/coduo/php-humanizer/commit/fe8f03731d1349fb24df7eb3d16eeda0b5d6f633) - **Merge pull request #27 from lpopov/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#44](https://github.com/coduo/php-humanizer/pull/44) - **[ADD] Support PSR-4 Composer** - [@Th3Mouk](https://github.com/Th3Mouk) +- [75825a](https://github.com/coduo/php-humanizer/commit/75825a8ca318a3d7c523d3d489dd0547ab6a6b23) - **Merge pull request #44 from Th3Mouk/patch-1** - [@norzechowicz](https://github.com/norzechowicz) +- [#42](https://github.com/coduo/php-humanizer/pull/42) - **Fixes a typo in French** - [@Gnomino](https://github.com/Gnomino) +- [5bbff0](https://github.com/coduo/php-humanizer/commit/5bbff03cebefdf95eaa4cf9c53905c703a471ae4) - **style** - [@smeeckaert](https://github.com/smeeckaert) +- [cc7a56](https://github.com/coduo/php-humanizer/commit/cc7a56a09f31a50bf32a329dea7b65c446e53631) - **refacto truncate** - [@smeeckaert](https://github.com/smeeckaert) +- [a7cb87](https://github.com/coduo/php-humanizer/commit/a7cb8781189fb13d078530a03111bef47af8d04e) - **rename breakpoint len** - [@smeeckaert](https://github.com/smeeckaert) +- [91d107](https://github.com/coduo/php-humanizer/commit/91d1079d1f6eb88ec784d66e71c88da459ae6e37) - **code style** - [@smeeckaert](https://github.com/smeeckaert) +- [dac446](https://github.com/coduo/php-humanizer/commit/dac446bb4bb0a959fb39466b3729bc97060f4449) - **refacto visibility and breakpoint** - [@smeeckaert](https://github.com/smeeckaert) +- [#34](https://github.com/coduo/php-humanizer/pull/34) - **string functions into multibyte string functions** - [@norberttech](https://github.com/norberttech) +- [#35](https://github.com/coduo/php-humanizer/pull/35) - **Oxford italian translations** - [@omissis](https://github.com/omissis) +- [#22](https://github.com/coduo/php-humanizer/pull/22) - **Oxford collection + phpcs fixer cleanup.** - [@defrag](https://github.com/defrag) +- [#33](https://github.com/coduo/php-humanizer/pull/33) - **Truncate check length of append** - [@smeeckaert](https://github.com/smeeckaert) +- [#31](https://github.com/coduo/php-humanizer/pull/31) - **Addition of Portuguese (pt) language translation (with spec tests)** - [@lightglitch](https://github.com/lightglitch) +- [8cdeae](https://github.com/coduo/php-humanizer/commit/8cdeaef54f759d7e9a93c85cbf9e6e7b63dd6e76) - **truncate html** - [@smeeckaert](https://github.com/smeeckaert) +- [#28](https://github.com/coduo/php-humanizer/pull/28) - **Addition of Afrikaans (af) language translation (with spec tests)** - [@sarelvdwalt](https://github.com/sarelvdwalt) +- [#21](https://github.com/coduo/php-humanizer/pull/21) - **More correct wording for Dutch version of "... from now".** - [@Ozmodiar](https://github.com/Ozmodiar) +- [1f9243](https://github.com/coduo/php-humanizer/commit/1f924384c5f7b8bfbced89debac2b67b78511f7a) - **Merge pull request #21 from Ozmodiar/nl-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [f5dafa](https://github.com/coduo/php-humanizer/commit/f5dafa6e721f93306496d3207e646a60c5bb4283) - **Merge pull request #18 from mattallty/patch-1** - [@norzechowicz](https://github.com/norzechowicz) +- [120f11](https://github.com/coduo/php-humanizer/commit/120f118c7051bdde9e9ea1d442cce6a70dfea8d9) - **Merge pull request #19 from NoUseFreak/composer_install** - [@norzechowicz](https://github.com/norzechowicz) +- [#19](https://github.com/coduo/php-humanizer/pull/19) - **Update composer installation instructions.** - [@NoUseFreak](https://github.com/NoUseFreak) +- [158714](https://github.com/coduo/php-humanizer/commit/1587145004b2f97b0562d359ef7c6d46e96295de) - **Merge pull request #16 from Ozmodiar/nl-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [e49510](https://github.com/coduo/php-humanizer/commit/e49510dfd6e381489cfc5976b5683dba5d5e73da) - **Merge pull request #17 from Ozmodiar/readme-parenthesis** - [@norzechowicz](https://github.com/norzechowicz) + +### Fixed +- [3c3b83](https://github.com/coduo/php-humanizer/commit/3c3b830fad0f6e436a08b3f1adf20334a6a77604) - **doc** - [@smeeckaert](https://github.com/smeeckaert) +- [#18](https://github.com/coduo/php-humanizer/pull/18) - **typo in french translation** - [@mattallty](https://github.com/mattallty) +- [#17](https://github.com/coduo/php-humanizer/pull/17) - **parenthesis.** - [@Ozmodiar](https://github.com/Ozmodiar) + +## [1.0.7] - 2015-10-26 + +### Added +- [#15](https://github.com/coduo/php-humanizer/pull/15) - **spec for Italian translations** - [@norberttech](https://github.com/norberttech) +- [#14](https://github.com/coduo/php-humanizer/pull/14) - **italian translations.** - [@omissis](https://github.com/omissis) + +### Changed +- [a23b8e](https://github.com/coduo/php-humanizer/commit/a23b8e5b32a1b41e8e0d653a2de77ca090f47f8d) - **Merge pull request #15 from norzechowicz/italian-translations-spec** - [@norzechowicz](https://github.com/norzechowicz) +- [0db6f5](https://github.com/coduo/php-humanizer/commit/0db6f5d73b46bf8864b3dfc4823b29aeb97dd326) - **Merge pull request #14 from omissis/italian-translations** - [@norzechowicz](https://github.com/norzechowicz) +- [d05a54](https://github.com/coduo/php-humanizer/commit/d05a5494266fe5bc13e64aaa3c85cb58919fc63f) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.6] - 2015-10-26 + +### Changed +- [8d7fff](https://github.com/coduo/php-humanizer/commit/8d7fff6382f60b278ddb069d9088d9d35ce26540) - **Rename difference.pt_br.yml to difference.pt_BR.yml** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.4] - 2015-10-26 + +### Added +- [#10](https://github.com/coduo/php-humanizer/pull/10) - **translation for Portuguese - Brazil** - [@IgorDePaula](https://github.com/IgorDePaula) +- [c6a594](https://github.com/coduo/php-humanizer/commit/c6a594a57ea3687cb199183b56a232761a81f736) - **specs for FR translations** - [@norberttech](https://github.com/norberttech) + +### Changed +- [6051e8](https://github.com/coduo/php-humanizer/commit/6051e89f3bacd816dced8b3d1cb3a07c1b9b0336) - **Merge pull request #12 from marcamon2013/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#12](https://github.com/coduo/php-humanizer/pull/12) - **Translation file added** - [@jebog](https://github.com/jebog) +- [#13](https://github.com/coduo/php-humanizer/pull/13) - **create turkish translation** - [@cnkt](https://github.com/cnkt) +- [e007db](https://github.com/coduo/php-humanizer/commit/e007dbcccdf56ae2021f13b300f78e2fca628d5b) - **Merge pull request #13 from cnkt/master** - [@norzechowicz](https://github.com/norzechowicz) + +### Fixed +- [8754ad](https://github.com/coduo/php-humanizer/commit/8754ad1f0e680d547c4197cc48d13d7f0b6ab766) - **Translator Builder regexp, added spec and updated readme for pt_BR translation** - [@norberttech](https://github.com/norberttech) +- [38bc22](https://github.com/coduo/php-humanizer/commit/38bc22377a66d24d3ebda915afa09e83cf3d8581) - **typo in TR translations and added spec** - [@norberttech](https://github.com/norberttech) + +## [1.0.3] - 2015-10-24 + +### Added +- [9c6a59](https://github.com/coduo/php-humanizer/commit/9c6a59981ca6902644c7c35c8deea1cbc994d7c7) - **German locale specs** - [@norberttech](https://github.com/norberttech) + +### Changed +- [a91217](https://github.com/coduo/php-humanizer/commit/a91217819c7c1d3a0f6a41182784b98681cb6f83) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) +- [c227c3](https://github.com/coduo/php-humanizer/commit/c227c3bfe343ce8322daee67bfb8116add20af1e) - **Rename difference-de.yml to difference.de.yml** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.2] - 2015-10-24 + +### Added +- [#11](https://github.com/coduo/php-humanizer/pull/11) - **german translation** - [@tbreuss](https://github.com/tbreuss) + +### Changed +- [9cb14a](https://github.com/coduo/php-humanizer/commit/9cb14aa8c77d6dc6aaff87770680251c993c0b79) - **Merge pull request #11 from tbreuss/master** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.1] - 2015-07-14 + +### Changed +- [#9](https://github.com/coduo/php-humanizer/pull/9) - **Test lowest version of dependencies** - [@norberttech](https://github.com/norberttech) +- [97fee0](https://github.com/coduo/php-humanizer/commit/97fee0dbe7999c4305a3de686f9fdc6b3502796e) - **Merge pull request #9 from norzechowicz/test-lowest-dependencies** - [@norzechowicz](https://github.com/norzechowicz) +- [d97917](https://github.com/coduo/php-humanizer/commit/d979178d45d631d9acd98394b90be3ff345c8c02) - **Update README.md** - [@defrag](https://github.com/defrag) +- [80500c](https://github.com/coduo/php-humanizer/commit/80500c5c50e45f0346af394e3031307923d59b5f) - **Update README.md** - [@defrag](https://github.com/defrag) +- [59a604](https://github.com/coduo/php-humanizer/commit/59a6045a716ec63bfb335ea326ce4ee82cf5a4f7) - **Update README.md** - [@defrag](https://github.com/defrag) + +## [1.0.0] - 2014-06-12 + +### Added +- [#8](https://github.com/coduo/php-humanizer/pull/8) - **missing require for symfony/yaml in composer.json** - [@dedik](https://github.com/dedik) +- [#4](https://github.com/coduo/php-humanizer/pull/4) - **truncate operation** - [@norberttech](https://github.com/norberttech) +- [#3](https://github.com/coduo/php-humanizer/pull/3) - **roman converters** - [@defrag](https://github.com/defrag) +- [#1](https://github.com/coduo/php-humanizer/pull/1) - **number and oridinalize** - [@defrag](https://github.com/defrag) +- [192a29](https://github.com/coduo/php-humanizer/commit/192a29e78fb2fe8595da1a43580a0a2f7914399c) - **travis configuration** - [@norberttech](https://github.com/norberttech) + +### Changed +- [b5a504](https://github.com/coduo/php-humanizer/commit/b5a504fec092d6d41391a1de6db09eb756e51895) - **Merge pull request #8 from dedik/master** - [@norberttech](https://github.com/norberttech) +- [673cc6](https://github.com/coduo/php-humanizer/commit/673cc617a158c83056ae7d1647467ef771a4fdbf) - **Update README.md** - [@defrag](https://github.com/defrag) +- [e5906b](https://github.com/coduo/php-humanizer/commit/e5906b5ea334a52960fab67f465246079fe971e3) - **Update README.md** - [@defrag](https://github.com/defrag) +- [43ba95](https://github.com/coduo/php-humanizer/commit/43ba95d307ae00d480393cce368491f62deee4f7) - **Merge pull request #7 from defrag/precise-date-fix** - [@norberttech](https://github.com/norberttech) +- [#6](https://github.com/coduo/php-humanizer/pull/6) - **Precise diffs** - [@defrag](https://github.com/defrag) +- [08b9d1](https://github.com/coduo/php-humanizer/commit/08b9d1b4f35d3f5846fb187248548d2148a261e5) - **Merge pull request #6 from defrag/precise-diff** - [@norberttech](https://github.com/norberttech) +- [7438be](https://github.com/coduo/php-humanizer/commit/7438be84cdc9831215bf99f83601ce3c4abfeb1e) - **Merge pull request #5 from norzechowicz/time** - [@defrag](https://github.com/defrag) +- [#5](https://github.com/coduo/php-humanizer/pull/5) - **[WIP] Introduce time difference humanizer** - [@norberttech](https://github.com/norberttech) +- [618179](https://github.com/coduo/php-humanizer/commit/618179735f5583ca8d425a8ccf375ce0afd22e55) - **Merge pull request #4 from norzechowicz/truncate** - [@defrag](https://github.com/defrag) +- [711775](https://github.com/coduo/php-humanizer/commit/71177557d8d4bc7b95e10170c34cd176a8287e38) - **Moved library to Coduo organization** - [@norberttech](https://github.com/norberttech) +- [6815c6](https://github.com/coduo/php-humanizer/commit/6815c651a7570802ccc5beaf3e6408e6abab1caa) - **Merge pull request #3 from defrag/roman** - [@norberttech](https://github.com/norberttech) +- [cee3c3](https://github.com/coduo/php-humanizer/commit/cee3c34860042bb93ce73d39ea32fd6b9acef3d1) - **Update readme** - [@norberttech](https://github.com/norberttech) +- [fda9db](https://github.com/coduo/php-humanizer/commit/fda9db3ef94591e80d627517390c42d688021d7a) - **Merge remote-tracking branch 'origin/master'** - [@norberttech](https://github.com/norberttech) +- [fd51e9](https://github.com/coduo/php-humanizer/commit/fd51e914d98d28943a34a3fea9237f4a8c6c7e90) - **Metric suffix** - [@norberttech](https://github.com/norberttech) +- [7b7d4e](https://github.com/coduo/php-humanizer/commit/7b7d4e4453211e1975f3004a74670e6ebdbecb1c) - **Merge pull request #2 from pborreli/typos** - [@norberttech](https://github.com/norberttech) +- [720bec](https://github.com/coduo/php-humanizer/commit/720becd16f48140d94a983e5eaa6c4e1b9879442) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [e62090](https://github.com/coduo/php-humanizer/commit/e62090a6ba103a63718fd17a5d6a0001f007ecac) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [d7fd45](https://github.com/coduo/php-humanizer/commit/d7fd45f39377298e35922843cfe004497898cf18) - **Binary suffix converter** - [@norberttech](https://github.com/norberttech) +- [65564e](https://github.com/coduo/php-humanizer/commit/65564e1202be4e67822e40c366dd36836bdec70a) - **Refactoring** - [@norberttech](https://github.com/norberttech) +- [58f3d5](https://github.com/coduo/php-humanizer/commit/58f3d560caba8ec66ca57ef66cc3e598ee5eb230) - **Merge pull request #1 from defrag/number** - [@norberttech](https://github.com/norberttech) +- [35d7e6](https://github.com/coduo/php-humanizer/commit/35d7e69c62e653f2f180b96597002bf143f79ec0) - **String humanize introduction** - [@norberttech](https://github.com/norberttech) +- [e2bfc6](https://github.com/coduo/php-humanizer/commit/e2bfc680b3f339f6bf2f6e39ce9a17f02eeaebbe) - **Initial commit** - [@norberttech](https://github.com/norberttech) + +### Fixed +- [#7](https://github.com/coduo/php-humanizer/pull/7) - **precise date calculations** - [@defrag](https://github.com/defrag) +- [#2](https://github.com/coduo/php-humanizer/pull/2) - **typos** - [@pborreli](https://github.com/pborreli) + +Generated by [Automation](https://github.com/aeon-php/automation) \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6681a3f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at norbert+coduo@orzechowicz.pl. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index ee409ba..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -#A quick guide to contribute to the project: - -##Installing the dev environment - -1. Fork the repo -2. Clone the repo to local -3. Install dependencies: `composer install` (this assumes you have 'composer' aliased to whereever your composer.phar lives) -4. Run the tests. We only take pull requests with passing tests, and it's great to know that you have a clean slate: - `./bin/phpspec run --format=pretty` - -##The actual contribution - -1. Make the changes/additions to the code, committing often and making clear what you've done -2. Make sure you write tests for your code, located in the folder structure `spec/Coduo/PHPHumanizer/...` -3. Run your tests (often and while coding): `./bin/phpspec run --format=pretty` - -##Coding Standards - -Try use similar coding standards to what you see in the project to keep things clear to the contributors. If you're unsure, it's always a safe bet to fall-back to the PSR standards. - -[PSR-1: Basic Coding Standard](http://www.php-fig.org/psr/psr-1/) - -[PSR-2: Coding Style Guide](http://www.php-fig.org/psr/psr-2/) diff --git a/LICENSE b/LICENSE index 6773c8c..aac62ee 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014 Michal Dabrowski, Norbert Orzechowicz +Copyright (c) 2014-2021 Michal Dabrowski, Norbert Orzechowicz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/README.md b/README.md index 345a7ca..1f7e85d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # PHP Humanizer -[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) +![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) @@ -8,10 +8,8 @@ ### Tests * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) - 4.x -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 [Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) -[Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) diff --git a/baseline.xml b/baseline.xml new file mode 100644 index 0000000..96ef6bc --- /dev/null +++ b/baseline.xml @@ -0,0 +1,26 @@ + + + + + $diff->{$unit->getDateIntervalSymbol()} + + + + + new $strategy() + + + + + $resourceName + + + $file + $resourceName + + + getBasename + getPathname + + + diff --git a/composer.json b/composer.json index 098b493..58f5108 100644 --- a/composer.json +++ b/composer.json @@ -15,16 +15,13 @@ } ], "require": { - "php": ">=7.3", - "symfony/config": "^4.4|^5.0", + "php": "^7.4 | ^8.0", "symfony/translation": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0" }, "require-dev": { "thunderer/shortcode": "^0.7", - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.4", - "friendsofphp/php-cs-fixer": "^2.16" + "phpunit/phpunit": "^9.4" }, "config": { "bin-dir": "bin" @@ -39,22 +36,24 @@ "": "tests/" } }, - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "suggest": { "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" }, "scripts": { "cs:php:fix": [ - "php-cs-fixer fix --using-cache=no" + "tools/php-cs-fixer fix --using-cache=no" + ], + "test" : [ + "phpunit" + ], + "test:mutation": [ + "Composer\\Config::disableProcessTimeout", + "tools/infection" ], - "test": [ - "phpspec run --format=pretty", - "phpunit", - "php-cs-fixer fix -v --dry-run" + "static:analyze": [ + "tools/psalm --shepherd --stats", + "tools/phpstan analyze -c phpstan.neon", + "tools/php-cs-fixer fix --dry-run" ] } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..d0fe9ed --- /dev/null +++ b/composer.lock @@ -0,0 +1,2640 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "2266b8e08228e1596ce0366b445cd246", + "packages": [ + { + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c021864d4354ee55160ddcfd31dc477a1bc77949", + "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:15:41+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-28T13:05:58+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/338cddc6d74929f6adf19ca5682ac4b8e109cdb0", + "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-03T04:42:09+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "time": "2020-12-20T10:01:03+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" + }, + { + "name": "phar-io/version", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.0.4" + }, + "time": "2020-12-13T23:18:30+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org/", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.12.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "245710e971a030f42e08f4912863805570f23d39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com/" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + }, + "time": "2020-12-19T10:15:11+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:44:49+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-02-02T14:45:58+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" + }, + { + "name": "thunderer/shortcode", + "version": "v0.7.4", + "source": { + "type": "git", + "url": "https://github.com/thunderer/Shortcode.git", + "reference": "79a219febd774ba1ee66a2992fee1145b4367561" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/79a219febd774ba1ee66a2992fee1145b4367561", + "reference": "79a219febd774ba1ee66a2992fee1145b4367561", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "suggest": { + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer", + "symfony/yaml": "if you want to use YAML serializer" + }, + "type": "library", + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": [ + "bbcode", + "engine", + "library", + "parser", + "shortcode" + ], + "support": { + "issues": "https://github.com/thunderer/Shortcode/issues", + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.4" + }, + "time": "2020-03-08T11:25:13+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" + }, + "time": "2020-07-08T17:02:28+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.4 | ^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..d05e1a4 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,6 @@ +parameters: + level: max + paths: + - src + + tmpDir: var/phpstan/cache diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 546b974..e4936a9 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,23 +1,23 @@ - + - + ./tests/ - - - ./src/Coduo/PHPHumanizer/ - - + + + + ./src/ + + + + + + \ No newline at end of file diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 0000000..7d8635e --- /dev/null +++ b/psalm.xml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php deleted file mode 100644 index e7bc4a8..0000000 --- a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php +++ /dev/null @@ -1,47 +0,0 @@ -beConstructedWith($translator); - $translator->trans( - 'only_two', - array('%first%' => 'Michal', '%second%' => 'Norbert'), - 'oxford' - )->willReturn('Michal and Norbert'); - - $translator->trans( - 'comma_separated_with_limit', - array('%count%' => 1, "%list%" => 'Michal, Norbert'), - 'oxford' - )->willReturn('Michal, Norbert and 1 more'); - - $translator->trans( - 'comma_separated', - array("%list%" => 'Michal, Norbert', '%last%' => "Lukasz"), - 'oxford' - )->willReturn('Michal, Norbert and Lukasz'); - } - - function it_formats_two_elements() - { - $this->format(array("Michal", "Norbert"), null)->shouldReturn("Michal and Norbert"); - } - - function it_formats_elements_with_limit() - { - $this->format(array("Michal", "Norbert", "Lukasz"), 2)->shouldReturn("Michal, Norbert and 1 more"); - } - - function it_formats_elements_without_limit() - { - $this->format(array("Michal", "Norbert", "Lukasz"), null)->shouldReturn("Michal, Norbert and Lukasz"); - } -} diff --git a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php deleted file mode 100644 index 536e4d3..0000000 --- a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php +++ /dev/null @@ -1,45 +0,0 @@ -formatter = new Formatter( - $translator->getWrappedObject() - ); - $this->beConstructedWith($this->formatter); - } - function it_returns_empty_string_when_collection_is_empty() - { - $this->format(array())->shouldReturn(''); - } - - function it_returns_collection_item_string_when_collection_has_one_element() - { - $this->format(array(new CollectionItem("Michal")))->shouldReturn('Michal'); - } -} - -class CollectionItem -{ - private $name; - - public function __construct($name) - { - $this->name = $name; - } - - public function __toString() - { - return $this->name; - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php b/spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php deleted file mode 100644 index dc41b9e..0000000 --- a/spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php +++ /dev/null @@ -1,106 +0,0 @@ -beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Minute'); - $this->getQuantity()->shouldReturn(15); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_minutes() - { - $this->beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Minute'); - $this->getQuantity()->shouldReturn(15); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_hours() - { - $this->beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 11:00:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Hour'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_hours() - { - $this->beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 16:00:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Hour'); - $this->getQuantity()->shouldReturn(3); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_days() - { - $this->beConstructedWith(new \DateTime("2014-04-10"), new \DateTime("2014-04-09")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Day'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_days() - { - $this->beConstructedWith(new \DateTime("2014-04-10"), new \DateTime("2014-04-11")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Day'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_weeks() - { - $this->beConstructedWith(new \DateTime("2014-04-15"), new \DateTime("2014-04-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Week'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_weeks() - { - $this->beConstructedWith(new \DateTime("2014-04-01"), new \DateTime("2014-04-15")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Week'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_months() - { - $this->beConstructedWith(new \DateTime("2014-04-01"), new \DateTime("2014-03-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Month'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_months() - { - $this->beConstructedWith(new \DateTime("2014-04-01"), new \DateTime("2014-05-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Month'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_years() - { - $this->beConstructedWith(new \DateTime("2014-01-01"), new \DateTime("2012-01-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Year'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_years() - { - $this->beConstructedWith(new \DateTime("2014-01-01"), new \DateTime("2015-01-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Year'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(false); - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php deleted file mode 100644 index 1372ad3..0000000 --- a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php +++ /dev/null @@ -1,50 +0,0 @@ -beConstructedWith($translator); - $translator->trans( - 'minute.past', - array('%count%' => 10), - 'difference', - 'en' - )->willReturn('10 minutes ago'); - - $translator->trans( - 'minute.past', - array('%count%' => 10), - 'difference', - 'pl' - )->willReturn('10 minut temu'); - } - - function it_format_datetime_diff() - { - $diff = new Difference( - new \DateTime("2015-01-01 00:10:00"), - new \DateTime("2015-01-01 00:00:00") - ); - - $this->formatDifference($diff)->shouldReturn('10 minutes ago'); - } - - function it_format_datetime_diff_for_specific_locale() - { - $diff = new Difference( - new \DateTime("2015-01-01 00:10:00"), - new \DateTime("2015-01-01 00:00:00") - ); - - $this->formatDifference($diff, 'pl')->shouldReturn('10 minut temu'); - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php deleted file mode 100644 index 5228235..0000000 --- a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php +++ /dev/null @@ -1,80 +0,0 @@ -beConstructedWith($translator); - $translator->trans( - 'compound.day', - array('%count%' => 10), - 'difference', - 'en' - )->willReturn('10 days'); - - $translator->trans( - 'compound.hour', - array('%count%' => 5), - 'difference', - 'en' - )->willReturn('5 hours'); - - $translator->trans( - 'compound.future', - array('%value%' => '10 days, 5 hours'), - 'difference', - 'en' - )->willReturn('10 days, 5 hours from now'); - - $translator->trans( - 'compound.day', - array('%count%' => 10), - 'difference', - 'ru' - )->willReturn('10 дней'); - - $translator->trans( - 'compound.hour', - array('%count%' => 5), - 'difference', - 'ru' - )->willReturn('5 часов'); - - $translator->trans( - 'compound.future', - array('%value%' => '10 дней, 5 часов'), - 'difference', - 'ru' - )->willReturn('через 10 дней, 5 часов'); - } - - function it_format_compound_datetime_diff() - { - $diff = new PreciseDifference( - new \DateTime("2015-01-01 00:00:00"), - new \DateTime("2015-01-11 05:00:00") - ); - - $this->formatDifference($diff)->shouldReturn('10 days, 5 hours from now'); - } - - function it_format_compound_datetime_diff_for_specific_locale() - { - $diff = new PreciseDifference( - new \DateTime("2015-01-01 00:00:00"), - new \DateTime("2015-01-11 05:00:00") - ); - - $this->formatDifference($diff, 'ru')->shouldReturn('через 10 дней, 5 часов'); - } -} diff --git a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php deleted file mode 100644 index f608032..0000000 --- a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php +++ /dev/null @@ -1,36 +0,0 @@ -calculatePosition('Lorem ipsum dolorem', 2)->shouldReturn(5); - $this->calculatePosition('Lorem ipsum dolorem', 4)->shouldReturn(5); - $this->calculatePosition('Lorem ipsum dolorem', 5)->shouldReturn(5); - $this->calculatePosition('Lorem ipsum dolorem', 10)->shouldReturn(11); - $this->calculatePosition('Lorem ipsum dolorem', -2)->shouldReturn(19); - $this->calculatePosition('Lorem ipsum dolorem', 0)->shouldReturn(5); - } - - function it_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() - { - $this->calculatePosition('Lorem ipsum dolorem', 20)->shouldReturn(19); - } - - function it_calculate_breakpoint_position_when_characters_count_ends_in_last_word() - { - $this->calculatePosition('Lorem ipsum', 7)->shouldReturn(11); - } - - function it_calculate_breakpoint_position_when_characters_count_ends_in_last_space() - { - $this->calculatePosition('Lorem ipsum', 5)->shouldReturn(5); - } -} diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index aa0798a..2f49887 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -15,26 +15,20 @@ final class Formatter { - /** - * @var TranslatorInterface - */ - private $translator; + private TranslatorInterface $translator; - /** - * @var string - */ - private $catalogue; + private string $catalogue; - /** - * @param TranslatorInterface $translator - */ - public function __construct(TranslatorInterface $translator, $catalogue = 'oxford') + public function __construct(TranslatorInterface $translator, string $catalogue = 'oxford') { $this->translator = $translator; $this->catalogue = $catalogue; } - public function format($collection, $limit = null) + /** + * @param array $collection + */ + public function format(array $collection, int $limit = null): string { $count = \count($collection); @@ -58,17 +52,11 @@ public function format($collection, $limit = null) } /** - * @param $collection - * @param $limit - * @param $count - * - * @return string + * @param array $collection */ - private function formatCommaSeparatedWithLimit($collection, $limit, $count) + private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count): string { - $display = \array_map(function ($element) { - return (string) $element; - }, \array_slice($collection, 0, $limit)); + $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $limit)); $moreCount = $count - \count($display); @@ -79,16 +67,11 @@ private function formatCommaSeparatedWithLimit($collection, $limit, $count) } /** - * @param $collection - * @param $count - * - * @return string + * @param array $collection */ - private function formatCommaSeparated($collection, $count) + private function formatCommaSeparated(array $collection, int $count): string { - $display = \array_map(function ($element) { - return (string) $element; - }, \array_slice($collection, 0, $count - 1)); + $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $count - 1)); return $this->translator->trans('comma_separated', [ '%list%' => \implode(', ', $display), @@ -97,11 +80,9 @@ private function formatCommaSeparated($collection, $count) } /** - * @param $collection - * - * @return string + * @param array $collection */ - private function formatOnlyTwo($collection) + private function formatOnlyTwo(array $collection): string { return $this->translator->trans('only_two', [ '%first%' => (string) $collection[0], diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index a27cf80..2f84c21 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -13,28 +13,17 @@ final class Oxford { - /** - * @var Formatter - */ - private $formatter; + private Formatter $formatter; - /** - * Oxford constructor. - * - * @param Formatter $formatter - */ public function __construct(Formatter $formatter) { $this->formatter = $formatter; } /** - * @param $collection - * @param null $limit - * - * @return string + * @param array $collection */ - public function format($collection, $limit = null) + public function format(array $collection, int $limit = null): string { return $this->formatter->format($collection, $limit); } diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index 548cdc4..e7c2bce 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -18,12 +18,9 @@ final class CollectionHumanizer { /** - * @param $collection - * @param null $limit - * @param string $locale - * @return string + * @param array $collection */ - public static function oxford($collection, $limit = null, $locale = 'en') + public static function oxford(array $collection, int $limit = null, string $locale = 'en'): string { $oxford = new Oxford( new Formatter(Builder::build($locale)) diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 60fce9a..2ca8258 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -22,25 +22,16 @@ final class Difference { - /** - * @var \DateTime - */ - private $fromDate; + private \DateTime $fromDate; - /** - * @var \DateTime - */ - private $toDate; + private \DateTime $toDate; /** - * @var \Coduo\PHPHumanizer\DateTime\Unit + * @psalm-suppress PropertyNotSetInConstructor */ - private $unit; + private Unit $unit; - /** - * @var int - */ - private $quantity; + private ?int $quantity = null; public function __construct(\DateTime $fromDate, \DateTime $toDate) { @@ -49,25 +40,19 @@ public function __construct(\DateTime $fromDate, \DateTime $toDate) $this->calculate(); } - /** - * @return Unit - */ - public function getUnit() + public function getUnit(): Unit { return $this->unit; } - /** - * @return int - */ - public function getQuantity() + public function getQuantity(): ?int { return $this->quantity; } - private function calculate() + private function calculate(): void { - /* @var $units \Coduo\PHPHumanizer\DateTime\Unit[] */ + /* @var $units Unit[] */ $units = [ new Year(), new Month(), @@ -92,7 +77,7 @@ private function calculate() : (int) \round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); } - public function isPast() + public function isPast(): bool { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 7178ea1..512fd1b 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -15,46 +15,31 @@ final class CompoundResult { - /** - * @var \Coduo\PHPHumanizer\DateTime\Unit - */ - private $unit; - private $quantity; + private Unit $unit; + private int $quantity; - public function __construct(Unit $unit, $quantity) + public function __construct(Unit $unit, int $quantity) { $this->unit = $unit; $this->quantity = $quantity; } - /** - * @param mixed $quantity - */ - public function setQuantity($quantity) + public function setQuantity(int $quantity): void { $this->quantity = $quantity; } - /** - * @return mixed - */ - public function getQuantity() + public function getQuantity() : int { return $this->quantity; } - /** - * @param \Coduo\PHPHumanizer\DateTime\Unit $unit - */ - public function setUnit($unit) + public function setUnit(Unit $unit): void { $this->unit = $unit; } - /** - * @return \Coduo\PHPHumanizer\DateTime\Unit - */ - public function getUnit() + public function getUnit(): Unit { return $this->unit; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index a5d7c2f..28fc8ce 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -15,26 +15,14 @@ final class Formatter { - /** - * @var TranslatorInterface - */ - private $translator; - - /** - * @param TranslatorInterface $translator - */ + private TranslatorInterface $translator; + public function __construct(TranslatorInterface $translator) { $this->translator = $translator; } - /** - * @param Difference $difference - * @param string $locale - * - * @return string - */ - public function formatDifference(Difference $difference, $locale = 'en') + public function formatDifference(Difference $difference, string $locale = 'en'): string { $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 75c1cfb..0a75a80 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -21,25 +21,19 @@ final class PreciseDifference { - /** - * @var \DateTime - */ - private $fromDate; + private \DateTime $fromDate; - /** - * @var \DateTime - */ - private $toDate; + private \DateTime $toDate; /** - * @var \Coduo\PHPHumanizer\DateTime\Unit[] + * @var array */ - private $units; + private array $units = []; /** - * @var \Coduo\PHPHumanizer\DateTime\Difference\CompoundResult[] + * @var array */ - private $compoundResults; + private array $compoundResults = []; public function __construct(\DateTime $fromDate, \DateTime $toDate) { @@ -49,16 +43,16 @@ public function __construct(\DateTime $fromDate, \DateTime $toDate) } /** - * @return \Coduo\PHPHumanizer\DateTime\Difference\CompoundResult[] + * @return array */ - public function getCompoundResults() + public function getCompoundResults(): array { return $this->compoundResults; } - private function calculate() + private function calculate(): void { - /* @var $units \Coduo\PHPHumanizer\DateTime\Unit[] */ + /* @var $units Unit[] */ $units = [ new Year(), new Month(), @@ -78,7 +72,7 @@ private function calculate() } } - public function isPast() + public function isPast(): bool { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index a47fe67..2036fb9 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -15,26 +15,14 @@ final class PreciseFormatter { - /** - * @var TranslatorInterface - */ - private $translator; - - /** - * @param TranslatorInterface $translator - */ + private TranslatorInterface $translator; + public function __construct(TranslatorInterface $translator) { $this->translator = $translator; } - /** - * @param PreciseDifference $difference - * @param string $locale - * - * @return string - */ - public function formatDifference(PreciseDifference $difference, $locale = 'en') + public function formatDifference(PreciseDifference $difference, string $locale = 'en'): string { $diff = []; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index 2a3525f..c5445cb 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -13,22 +13,15 @@ interface Unit { - /** - * @return string - */ - public function getName(); + public function getName(): string; /** * Return millisecond that represents unit. - * - * @return int */ - public function getMilliseconds(); + public function getMilliseconds(): int; /** * Returns symbol of \DateInterval equivalent. - * - * @return string */ - public function getDateIntervalSymbol(); + public function getDateIntervalSymbol(): string; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index 4e4f72d..f734a35 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -15,22 +15,19 @@ final class Day implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'day'; } - public function getMilliseconds() + public function getMilliseconds(): int { $hour = new Hour(); return $hour->getMilliseconds() * 24; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'd'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 8a21186..1864d41 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -15,22 +15,19 @@ final class Hour implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'hour'; } - public function getMilliseconds() + public function getMilliseconds(): int { $minute = new Minute(); return $minute->getMilliseconds() * 60; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'h'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index ea1120a..3cb5aed 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -15,20 +15,17 @@ final class JustNow implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'just_now'; } - public function getMilliseconds() + public function getMilliseconds(): int { return 0; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { throw new \RuntimeException("JustNow doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index 1c2c3c2..6bbc479 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -15,22 +15,19 @@ final class Minute implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'minute'; } - public function getMilliseconds() + public function getMilliseconds(): int { $second = new Second(); return $second->getMilliseconds() * 60; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'i'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index ae26e8f..33a0e5c 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -15,22 +15,19 @@ final class Month implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'month'; } - public function getMilliseconds() + public function getMilliseconds(): int { $day = new Day(); return $day->getMilliseconds() * 30; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'm'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 12f3e54..465a5ff 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -15,20 +15,17 @@ final class Second implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'second'; } - public function getMilliseconds() + public function getMilliseconds(): int { return 1000; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 's'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index cd0ff1a..353d5a3 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -15,22 +15,19 @@ final class Week implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'week'; } - public function getMilliseconds() + public function getMilliseconds(): int { $day = new Day(); return $day->getMilliseconds() * 7; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { throw new \RuntimeException("Week doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 4dda1c9..22a539d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -15,22 +15,19 @@ final class Year implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'year'; } - public function getMilliseconds() + public function getMilliseconds(): int { $day = new Day(); return $day->getMilliseconds() * 356; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'y'; } diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 44f7472..2c51cf5 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -19,26 +19,14 @@ final class DateTimeHumanizer { - /** - * @param \DateTime $fromDate - * @param \DateTime $toDate - * @param string $locale - * @return string - */ - public static function difference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') + public static function difference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string { $formatter = new Formatter(Builder::build($locale)); return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } - /** - * @param \DateTime $fromDate - * @param \DateTime $toDate - * @param string $locale - * @return string - */ - public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') + public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string { $formatter = new PreciseFormatter(Builder::build($locale)); diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 73e92a5..4d48872 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -21,27 +21,24 @@ final class Ordinal */ private $number; - /** - * @var StrategyInterface - */ - private $strategy; + private StrategyInterface $strategy; /** * @param int|float $number * @param string $locale */ - public function __construct($number, $locale) + public function __construct($number, string $locale) { $this->number = $number; $this->strategy = Builder::build($locale); } - public function isPrefix() + public function isPrefix(): bool { return $this->strategy->isPrefix(); } - public function __toString() + public function __toString(): string { return $this ->strategy diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 582055b..2246cc9 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -11,38 +11,37 @@ namespace Coduo\PHPHumanizer\Number\Ordinal; -/** - * Tries to find a proper strategy for ordinal numbers. - */ final class Builder { /** - * @param string $locale - * - * @return StrategyInterface - * - * @throws \RuntimeException + * Find a proper strategy for ordinal numbers. */ - public static function build($locale) + public static function build(string $locale): StrategyInterface { // $locale should be xx or xx_YY - if (!\preg_match('/^([a-z]{2})(_([A-Z]{2}))?$/', $locale, $m)) { - throw new \RuntimeException("Invalid locale specified: '$locale'."); + if (!\preg_match('#^([a-z]{2})(_([A-Z]{2}))?$#', $locale, $m)) { + throw new \RuntimeException(\sprintf("Invalid locale specified: '%s'.", $locale)); } $strategy = \ucfirst($m[1]); if (!empty($m[3])) { - $strategy .= "_$m[3]"; + $strategy .= \sprintf('_%s', $m[3]); } - $strategy = "\\Coduo\\PHPHumanizer\\Resources\\Ordinal\\{$strategy}Strategy"; + $strategy = \sprintf('\Coduo\PHPHumanizer\Resources\Ordinal\%sStrategy', $strategy); if (\class_exists($strategy)) { - return new $strategy(); + $strategyInstance = new $strategy(); + + if (!$strategyInstance instanceof StrategyInterface) { + throw new \RuntimeException(\sprintf('Strategy for locale %s does not implement Strategy Interface.', $locale)); + } + + return $strategyInstance; } // Debatable: should we fallback to English? // return self::build('en'); - throw new \RuntimeException("Strategy for locale $locale not found."); + throw new \RuntimeException(\sprintf('Strategy for locale %s not found.', $locale)); } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index aa23162..eb60dcc 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -13,15 +13,11 @@ interface StrategyInterface { - /** - * @return boolean - */ - public function isPrefix(); + public function isPrefix(): bool; /** * @param int|float $number - * * @return string */ - public function ordinalIndicator($number); + public function ordinalIndicator($number): string; } diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 4e184a9..6d1db95 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -13,11 +13,25 @@ final class RomanNumeral { + /** + * @var int + */ const MIN_VALUE = 1; + + /** + * @var int + */ const MAX_VALUE = 3999; + + /** + * @var string + */ const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; - private $map = [ + /** + * @var array + */ + private array $map = [ 'M' => 1000, 'CM' => 900, 'D' => 500, @@ -34,13 +48,13 @@ final class RomanNumeral ]; /** - * @param $number + * @param numeric $number * - * @return string * + * @return string * @throws \InvalidArgumentException */ - public function toRoman($number) + public function toRoman($number): string { if (($number < self::MIN_VALUE) || ($number > self::MAX_VALUE)) { throw new \InvalidArgumentException(); @@ -62,13 +76,11 @@ public function toRoman($number) } /** - * @param $string - * - * @return int + * @return float|int * * @throws \InvalidArgumentException */ - public function fromRoman($string) + public function fromRoman(string $string) { if (\mb_strlen((string) $string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, (string) $string)) { throw new \InvalidArgumentException(); diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 7d26299..74271f6 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -20,36 +20,34 @@ final class NumberHumanizer { /** * @param int|float $number - * @param string $locale - * + * @param string $locale * @return string */ - public static function ordinalize($number, $locale = 'en') + public static function ordinalize($number, string $locale = 'en'): string { $ordinal = new Ordinal($number, $locale); - + return (string) ($ordinal->isPrefix()) ? $ordinal.$number : $number.$ordinal; } - + /** * @param int|float $number - * @param string $locale - * + * @param string $locale * @return string */ - public static function ordinal($number, $locale = 'en') + public static function ordinal($number, string $locale = 'en'): string { $ordinal = new Ordinal($number, $locale); - + return (string) $ordinal; } /** - * @param $number + * @param int $number * @param string $locale * @return bool|int|string */ - public static function binarySuffix($number, $locale = 'en') + public static function binarySuffix(int $number, string $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale); @@ -57,12 +55,9 @@ public static function binarySuffix($number, $locale = 'en') } /** - * @param $number - * @param $precision - * @param string $locale * @return bool|int|string */ - public static function preciseBinarySuffix($number, $precision, $locale = 'en') + public static function preciseBinarySuffix(int $number, ?int $precision, string $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale, $precision); @@ -70,11 +65,9 @@ public static function preciseBinarySuffix($number, $precision, $locale = 'en') } /** - * @param $number - * @param string $locale - * @return bool|string + * @param numeric $number */ - public static function metricSuffix($number, $locale = 'en') + public static function metricSuffix($number, string $locale = 'en'): string { $binarySuffix = new MetricSuffix($number, $locale); @@ -82,10 +75,10 @@ public static function metricSuffix($number, $locale = 'en') } /** - * @param $number + * @param numeric $number * @return string */ - public static function toRoman($number) + public static function toRoman($number): string { $romanNumeral = new RomanNumeral(); @@ -93,10 +86,9 @@ public static function toRoman($number) } /** - * @param $number - * @return int + * @return float|int */ - public static function fromRoman($number) + public static function fromRoman(string $number) { $romanNumeral = new RomanNumeral(); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php index 6a96127..bacc827 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -15,16 +15,12 @@ final class DeStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return '.'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 35e6f5a..373932f 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -15,18 +15,12 @@ final class EnStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** - * {@inheritdoc} - */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { $absNumber = \abs((integer) $number); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php index 30ba76e..1793120 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php @@ -15,16 +15,12 @@ final class EsStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php index 788789b..45a034c 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php @@ -15,16 +15,12 @@ final class FrStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { $absNumber = \abs((integer) $number); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index e678f99..937eddc 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -15,18 +15,13 @@ final class IdStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return true; } - /** - * {@inheritdoc} - */ - public function ordinalIndicator($number) + + public function ordinalIndicator($number): string { return 'ke-'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php index 318bbf8..ec69b84 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php @@ -15,16 +15,12 @@ final class ItStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 7350eb5..63cc61a 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -15,18 +15,12 @@ final class NlStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** - * {@inheritdoc} - */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'e'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php index 2f625a8..94f0e75 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php @@ -15,16 +15,12 @@ final class PtStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index b71e798..a5e0967 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -13,47 +13,33 @@ final class BinarySuffix { - const CONVERT_THRESHOLD = 1024; - /** * @var int */ - private $number; + const CONVERT_THRESHOLD = 1024; - /** - * @var string - */ - private $locale; + private int $number; + + private string $locale; /** - * @var array + * @var array */ - private $binaryPrefixes = [ - 1125899906842624 => '#.## PB', - 1099511627776 => '#.## TB', - 1073741824 => '#.## GB', - 1048576 => '#.## MB', + private array $binaryPrefixes = [ + 1_125_899_906_842_624 => '#.## PB', + 1_099_511_627_776 => '#.## TB', + 1_073_741_824 => '#.## GB', + 1_048_576 => '#.## MB', 1024 => '#.# kB', 0 => '# bytes', ]; - /** - * @param int $number - * @param string $locale - * @param int $precision - * - * @throws \InvalidArgumentException - */ - public function __construct($number, $locale = 'en', $precision = null) + public function __construct(int $number, string $locale = 'en', int $precision = null) { - if (!\class_exists('NumberFormatter')) { + if (!\class_exists(\NumberFormatter::class)) { throw new \RuntimeException('Binary suffix converter requires intl extension!'); } - if (!\is_numeric($number)) { - throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); - } - if (!\is_null($precision)) { $this->setSpecificPrecisionFormat($precision); } @@ -68,6 +54,9 @@ public function __construct($number, $locale = 'en', $precision = null) \krsort($this->binaryPrefixes); } + /** + * @return int|string + */ public function convert() { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); @@ -90,12 +79,8 @@ public function convert() /** * Replaces the default ICU 56.1 decimal formats defined in $binaryPrefixes with ones that provide the same symbols * but the provided number of decimal places. - * - * @param int $precision - * - * @throws \InvalidArgumentException */ - protected function setSpecificPrecisionFormat($precision) + protected function setSpecificPrecisionFormat(int $precision): void { if ($precision < 0) { throw new \InvalidArgumentException('Precision must be positive'); @@ -112,7 +97,7 @@ protected function setSpecificPrecisionFormat($precision) foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size >= 1024) { - $symbol = \substr($unitPattern, \strpos($unitPattern, ' ')); + $symbol = \substr($unitPattern, (int) \strpos($unitPattern, ' ')); $this->binaryPrefixes[$size] = $icuFormat.$symbol; } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index e823511..c29c2a5 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -15,12 +15,6 @@ interface Breakpoint { /** * Return the length of the truncated $text depending on the $characterCount. - * - * @param string $text - * @param int $charactersCount - * @param int $charactersCount - * - * @return int */ - public function calculatePosition($text, $charactersCount); + public function calculatePosition(string $text, int $charactersCount): int; } diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index f85097a..0e4c8c7 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -13,37 +13,20 @@ final class HtmlTruncate implements TruncateInterface { - /** - * @var string - */ - private $append; + private string $append; - /** - * @var string - */ - private $allowedTags; + private string $allowedTags; - /** - * @var Breakpoint - */ - private $breakpoint; + private Breakpoint $breakpoint; - /** - * @param Breakpoint $breakpoint - * @param string $allowedTags - * @param string $append - */ - public function __construct(Breakpoint $breakpoint, $allowedTags = '', $append = '') + public function __construct(Breakpoint $breakpoint, string $allowedTags = '', string $append = '') { $this->breakpoint = $breakpoint; $this->append = $append; $this->allowedTags = $allowedTags; } - /** - * @return string - */ - public function truncate($text, $charactersCount) + public function truncate(string $text, int $charactersCount): string { $strippedText = \strip_tags($text, $this->allowedTags); @@ -55,20 +38,15 @@ public function truncate($text, $charactersCount) * HTML tags if $is_html is set to true. * * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) - * - * @param string $string - * @param int $charactersCount - * - * @return string the truncated string */ - private function truncateHtml($string, $charactersCount) + private function truncateHtml(string $string, int $charactersCount): string { $limit = $charactersCount; $offset = 0; $tags = []; // Handle special characters. - \preg_match_all('/&[a-z]+;/i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('#&[a-z]+;#i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] >= $limit) { break; @@ -77,13 +55,13 @@ private function truncateHtml($string, $charactersCount) } // Handle all the html tags. - \preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('#<[^>]+>([^<]*)#', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] - $offset >= $limit) { break; } - $tag = \mb_substr(\strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + $tag = \mb_substr((string) \strtok($match[0][0], " \t\n\r\0\x0B>"), 1); if ($tag[0] != '/') { $tags[] = $tag; } elseif (\end($tags) == \mb_substr($tag, 1)) { diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index a4ef053..e7c79d8 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -13,28 +13,21 @@ final class Humanize { - /** - * @var string - */ - private $text; + private string $text; - /** - * @var bool - */ - private $capitalize; + private bool $capitalize; + + private string $separator; /** - * @var string + * @var array */ - private $separator; + private array $forbiddenWords; /** - * @param $text - * @param bool $capitalize - * @param string $separator - * @param array $forbiddenWords + * @param array $forbiddenWords */ - public function __construct($text, $capitalize = true, $separator = '_', array $forbiddenWords = ['id']) + public function __construct(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = ['id']) { $this->text = $text; $this->capitalize = $capitalize; @@ -42,12 +35,9 @@ public function __construct($text, $capitalize = true, $separator = '_', array $ $this->forbiddenWords = $forbiddenWords; } - /** - * @return string - */ - public function __toString() + public function __toString(): string { - $humanized = \trim(\strtolower(\preg_replace(['/([A-Z])/', "/[{$this->separator}\\s]+/"], ['_$1', ' '], $this->text))); + $humanized = \trim(\strtolower((string) \preg_replace(['/([A-Z])/', \sprintf('/[%s\s]+/', $this->separator)], ['_$1', ' '], $this->text))); $humanized = \trim(\str_replace($this->forbiddenWords, '', $humanized)); return $this->capitalize ? \ucfirst($humanized) : $humanized; diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 3a76eb3..141987d 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -13,42 +13,42 @@ final class MetricSuffix { - const CONVERT_THRESHOLD = 1000; - /** * @var int */ - private $number; + const CONVERT_THRESHOLD = 1000; - /** - * @var string - */ - private $locale; + private int $number; + + private string $locale; /** - * @var array + * @var array */ - private $binaryPrefixes = [ - 1000000000000000 => '#.##P', - 1000000000000 => '#.##T', - 1000000000 => '#.##G', - 1000000 => '#.##M', + private array $binaryPrefixes = [ + 1_000_000_000_000_000 => '#.##P', + 1_000_000_000_000 => '#.##T', + 1_000_000_000 => '#.##G', + 1_000_000 => '#.##M', 1000 => '#.#k', 0 => '#.#', ]; /** - * @param $number + * @param numeric $number * @param string $locale * * @throws \InvalidArgumentException */ - public function __construct($number, $locale = 'en') + public function __construct($number, string $locale = 'en') { - if (!\class_exists('NumberFormatter')) { + if (!\class_exists(\NumberFormatter::class)) { throw new \RuntimeException('Metric suffix converter requires intl extension!'); } + /** + * @psalm-suppress DocblockTypeContradiction + */ if (!\is_numeric($number)) { throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } @@ -63,7 +63,7 @@ public function __construct($number, $locale = 'en') \krsort($this->binaryPrefixes); } - public function convert() + public function convert(): string { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 405a056..c1f85c0 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -20,41 +20,25 @@ final class ShortcodeProcessor { /** * Removes all shortcodes from given text. - * - * @param string $text - * - * @return string */ - public function removeShortcodes($text) + public function removeShortcodes(string $text): string { - $nullHandler = function () { - return; - }; - - return $this->createShortcodeProcessor($nullHandler)->process($text); + return $this->createShortcodeProcessor( + function (): void { + return; + } + )->process($text); } /** * Removes only shortcode tags from given text (leaves their content as it is). - * - * @param string $text - * - * @return string */ - public function removeShortcodeTags($text) + public function removeShortcodeTags(string $text): string { - $contentHandler = function (ShortcodeInterface $s) { - return $s->getContent(); - }; - - return $this->createShortcodeProcessor($contentHandler)->process($text); + return $this->createShortcodeProcessor(fn (ShortcodeInterface $s) : ?string => $s->getContent())->process($text); } - /** - * @param $defaultHandler - * @return Processor - */ - private function createShortcodeProcessor($defaultHandler) + private function createShortcodeProcessor(callable $defaultHandler): Processor { $handlers = new HandlerContainer(); $handlers->setDefault($defaultHandler); diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index e48c044..a487951 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -13,33 +13,17 @@ final class TextTruncate implements TruncateInterface { - /** - * @var string - */ - private $append; - - /** - * @var Breakpoint - */ - private $breakpoint; - - /** - * @param Breakpoint $breakpoint - * @param string $append - */ - public function __construct(Breakpoint $breakpoint, $append = '') + private string $append; + + private Breakpoint $breakpoint; + + public function __construct(Breakpoint $breakpoint, string $append = '') { $this->breakpoint = $breakpoint; $this->append = $append; } - /** - * @param string $text - * @param int $charactersCount - * - * @return string - */ - public function truncate($text, $charactersCount) + public function truncate(string $text, int $charactersCount): string { if ($charactersCount < 0 || \mb_strlen($text) <= $charactersCount) { return $text; diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 1749047..5f671b5 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -13,11 +13,5 @@ interface TruncateInterface { - /** - * @param string $text - * @param int $charactersCount - * - * @return string mixed - */ - public function truncate($text, $charactersCount); + public function truncate(string $text, int $charactersCount): string; } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 1a73722..0dd6f7d 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -13,27 +13,22 @@ final class WordBreakpoint implements Breakpoint { - /** - * @param string $text - * @param int $charactersCount - * @return bool|int - */ - public function calculatePosition($text, $charactersCount) + public function calculatePosition(string $text, int $charactersCount): int { if ($charactersCount < 0) { - return \mb_strlen($text); + return (int) \mb_strlen($text); } if ($charactersCount > \mb_strlen($text)) { - return \mb_strlen($text); + return (int) \mb_strlen($text); } $breakpoint = \mb_strpos($text, ' ', $charactersCount); if (false === $breakpoint) { - return \mb_strlen($text); + return (int) \mb_strlen($text); } - return $breakpoint; + return (int) $breakpoint; } } diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 8da6660..ceb9df9 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -20,54 +20,30 @@ final class StringHumanizer { /** - * @param $text - * @param bool|true $capitalize - * @param string $separator - * @param array $forbiddenWords - * - * @return string + * @param array $forbiddenWords */ - public static function humanize($text, $capitalize = true, $separator = '_', array $forbiddenWords = []) + public static function humanize(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = []): string { return (string) new Humanize($text, $capitalize, $separator, $forbiddenWords); } - /** - * @param $text - * @param $charactersCount - * @param string $append - * - * @return string - */ - public static function truncate($text, $charactersCount, $append = '') + public static function truncate(string $text, int $charactersCount, string $append = ''): string { $truncate = new TextTruncate(new WordBreakpoint(), $append); return $truncate->truncate($text, $charactersCount); } - /** - * @param $text - * @param $charactersCount - * @param string $allowedTags - * @param string $append - * - * @return string - */ - public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') + public static function truncateHtml(string $text, int $charactersCount, string $allowedTags = '', string $append = ''): string { $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); return $truncate->truncate($text, $charactersCount); } - /** - * @param $text - * @return string - */ - public static function removeShortcodes($text) + public static function removeShortcodes(string $text): string { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } @@ -76,13 +52,9 @@ public static function removeShortcodes($text) return $processor->removeShortcodes($text); } - /** - * @param $text - * @return string - */ - public static function removeShortcodeTags($text) + public static function removeShortcodeTags(string $text): string { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index b1500ff..1a3bd56 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -16,11 +16,7 @@ final class Builder { - /** - * @param $locale - * @return Translator - */ - public static function build($locale) + public static function build(string $locale): Translator { $translator = new Translator($locale); $translator->addLoader('yml', new YamlFileLoader()); diff --git a/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php new file mode 100644 index 0000000..316dd4c --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php @@ -0,0 +1,49 @@ +assertSame( + 'Michal and Norbert', + $formatter->format(['Michal', 'Norbert'], null) + ); + } + + public function test_formats_elements_with_limit() + { + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + 'Michal, Norbert, and 1 other', + $formatter->format(['Michal', 'Norbert', 'Lukasz'], 2) + ); + } + + public function test_formats_elements_without_limit() + { + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + 'Michal, Norbert, and Lukasz', + $formatter->format(['Michal', 'Norbert', 'Lukasz'], null) + ); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php b/tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php new file mode 100644 index 0000000..5a56fcc --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php @@ -0,0 +1,36 @@ +assertSame( + '', + (new Oxford(new Formatter(Builder::build('en'))))->format([]) + ); + } + + public function test_returns_collection_item_string_when_collection_has_one_element() : void + { + $this->assertSame( + 'Michal', + (new Oxford(new Formatter(Builder::build('en'))))->format(['Michal']) + ); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php new file mode 100644 index 0000000..43c9ec5 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php @@ -0,0 +1,120 @@ +assertInstanceOf(Minute::class, $diff->getUnit()); + $this->assertSame(15, $diff->getQuantity()); + $this->assertTrue($diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_minutes() + { + $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 13:15:00')); + $this->assertInstanceOf(Minute::class, $diff->getUnit()); + $this->assertSame(15, $diff->getQuantity()); + $this->assertFalse($diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_hours() + { + $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 11:00:00')); + $this->assertInstanceOf(Hour::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_hours() + { + $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 16:00:00')); + $this->assertInstanceOf(Hour::class, $diff->getUnit()); + $this->assertSame(3, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_days() + { + $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-09')); + $this->assertInstanceOf(Day::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_days() + { + $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-11')); + $this->assertInstanceOf(Day::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_weeks() + { + $diff = new Difference(new \DateTime('2014-04-15'), new \DateTime('2014-04-01')); + $this->assertInstanceOf(Week::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_weeks() + { + $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-04-15')); + $this->assertInstanceOf(Week::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_months() + { + $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-03-01')); + $this->assertInstanceOf(Month::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_months() + { + $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-05-01')); + $this->assertInstanceOf(Month::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_years() + { + $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2012-01-01')); + $this->assertInstanceOf(Year::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_years() + { + $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2015-01-01')); + $this->assertInstanceOf(Year::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php new file mode 100644 index 0000000..72d6011 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php @@ -0,0 +1,44 @@ +assertSame('10 minutes ago', $formatter->formatDifference($diff)); + } + + public function test_format_datetime_diff_for_specific_locale() : void + { + $diff = new Difference( + new \DateTime('2015-01-01 00:10:00'), + new \DateTime('2015-01-01 00:00:00') + ); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame('10 minut temu', $formatter->formatDifference($diff, 'pl')); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php new file mode 100644 index 0000000..a14cb81 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php @@ -0,0 +1,44 @@ +assertSame('10 days, 5 hours from now', $formatter->formatDifference($diff)); + } + + public function test_format_compound_datetime_diff_for_specific_locale() + { + $diff = new PreciseDifference( + new \DateTime('2015-01-01 00:00:00'), + new \DateTime('2015-01-11 05:00:00') + ); + + $formatter = new PreciseFormatter(Builder::build('en')); + + $this->assertSame('через 10 дней, 5 часов', $formatter->formatDifference($diff, 'ru')); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index a0a9847..1199877 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -185,12 +185,6 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } - public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() - { - $this->expectException(\InvalidArgumentException::class); - NumberHumanizer::binarySuffix('as12'); - } - /** * @dataProvider preciseBinarySuffixDataProvider * @@ -569,7 +563,6 @@ public function romanExceptionProvider() public function arabicExceptionProvider() { return [ - [1234], [''], ['foobar'], ]; diff --git a/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php new file mode 100644 index 0000000..1dd46da --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php @@ -0,0 +1,51 @@ +assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 2)); + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 4)); + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 5)); + $this->assertSame(11, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 10)); + $this->assertSame(19, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', -2)); + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 0)); + } + + public function test_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() + { + $wordBreakpoint = new WordBreakpoint(); + + $this->assertSame(19, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 20)); + } + + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_word() + { + $wordBreakpoint = new WordBreakpoint(); + + $this->assertSame(11, $wordBreakpoint->calculatePosition('Lorem ipsum', 7)); + } + + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_space() + { + $wordBreakpoint = new WordBreakpoint(); + + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum', 5)); + } +} diff --git a/tests/bootstrap.php b/tests/bootstrap.php deleted file mode 100644 index 008bbfe..0000000 --- a/tests/bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ - Date: Sun, 21 Feb 2021 23:09:33 +0100 Subject: [PATCH 25/87] Fixed updating changelog workflow --- .github/workflows/changelog-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml index e0ae30a..c444e15 100644 --- a/.github/workflows/changelog-update.yml +++ b/.github/workflows/changelog-update.yml @@ -7,7 +7,7 @@ name: "Changelog - Update Unreleased" on: push: branches: - - 6.x + - 4.x jobs: changelog-update-unreleased: From d6addbbdfeb33f8ae280ae18a2b06ee6cae5945e Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sun, 21 Feb 2021 22:12:04 +0000 Subject: [PATCH 26/87] Updated CHANGELOG.md --- CHANGELOG.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6125fde..7dc6841 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,19 @@ -## [Unreleased] - 2020-10-18 +## [Unreleased] - 2021-02-21 ### Added +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **phpstan with highest possible requirements** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **psalm with highest possible requirements** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **arguments and return type hinting** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **PHP 8.0 support** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **More precise CS fixer rules** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **Full change log** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **integration with aeon-php/automation** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **Github actions integration** - [@norberttech](https://github.com/norberttech) - [#120](https://github.com/coduo/php-humanizer/pull/120) - **test for azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) - [#119](https://github.com/coduo/php-humanizer/pull/119) - **support azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) ### Changed +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **minimum required PHP version ^7.4** - [@norberttech](https://github.com/norberttech) - [#118](https://github.com/coduo/php-humanizer/pull/118) - **create azerbaijani translation** - [@4t87ux8](https://github.com/4t87ux8) - [fa52e6](https://github.com/coduo/php-humanizer/commit/fa52e6223eef2f19fbd0a290432b5a878317dca2) - **Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies** - [@norberttech](https://github.com/norberttech) - [f989a9](https://github.com/coduo/php-humanizer/commit/f989a91d2d90f5d4bf4922ab9fec1674e7fe024e) - **Create FUNDING.yml** - [@norberttech](https://github.com/norberttech) @@ -15,10 +24,14 @@ - [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) ### Fixed +- [4de08d](https://github.com/coduo/php-humanizer/commit/4de08de0b2463cfc498612a89189385b5de4f66d) - **updating changelog workflow** - [@norberttech](https://github.com/norberttech) - [fc3a04](https://github.com/coduo/php-humanizer/commit/fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69) - **travis configuration** - [@norberttech](https://github.com/norberttech) - [#115](https://github.com/coduo/php-humanizer/pull/115) - **composer autoloading deprecation notice; Support symfony 5** - [@brianwozeniak](https://github.com/brianwozeniak) ### Removed +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **phpspec** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **symfony/config dependency** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **travis CI integration** - [@norberttech](https://github.com/norberttech) - [83a180](https://github.com/coduo/php-humanizer/commit/83a1805da9a28a98a0bb932a5236becd44ea79b6) - **php 8.0 from matrix** - [@norberttech](https://github.com/norberttech) ## [3.0.2] - 2019-04-29 @@ -152,7 +165,7 @@ - [dac446](https://github.com/coduo/php-humanizer/commit/dac446bb4bb0a959fb39466b3729bc97060f4449) - **refacto visibility and breakpoint** - [@smeeckaert](https://github.com/smeeckaert) - [#34](https://github.com/coduo/php-humanizer/pull/34) - **string functions into multibyte string functions** - [@norberttech](https://github.com/norberttech) - [#35](https://github.com/coduo/php-humanizer/pull/35) - **Oxford italian translations** - [@omissis](https://github.com/omissis) -- [#22](https://github.com/coduo/php-humanizer/pull/22) - **Oxford collection + phpcs fixer cleanup.** - [@defrag](https://github.com/defrag) +- [#22](https://github.com/coduo/php-humanizer/pull/22) - **Oxford collection + phpcs fixer cleanup.** - [@defrag](https://github.com/defrag) - [#33](https://github.com/coduo/php-humanizer/pull/33) - **Truncate check length of append** - [@smeeckaert](https://github.com/smeeckaert) - [#31](https://github.com/coduo/php-humanizer/pull/31) - **Addition of Portuguese (pt) language translation (with spec tests)** - [@lightglitch](https://github.com/lightglitch) - [8cdeae](https://github.com/coduo/php-humanizer/commit/8cdeaef54f759d7e9a93c85cbf9e6e7b63dd6e76) - **truncate html** - [@smeeckaert](https://github.com/smeeckaert) From 31065f9c40a1cd7db52e09cd2f5f828c1ed1736c Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 23 Feb 2021 21:48:21 +0100 Subject: [PATCH 27/87] Added integration with aeon-php/calendar library (#123) --- README.md | 16 ++++ composer.json | 7 +- composer.lock | 69 +++++++++++++-- .../PHPHumanizer/Aeon/Calendar/Formatter.php | 42 +++++++++ .../Aeon/Calendar/UnitCompound.php | 83 ++++++++++++++++++ .../DateTime/DateIntervalCompound.php | 58 +++++++++++++ .../PHPHumanizer/DateTime/Difference.php | 6 +- .../DateTime/Difference/CompoundResult.php | 26 +++--- .../DateTime/PreciseDifference.php | 52 +++--------- .../DateTime/PreciseFormatter.php | 19 ++++- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 27 +++++- .../Tests/Aeon/Calendar/FormatterTest.php | 49 +++++++++++ .../Tests/DateTime/PreciseFormatterTest.php | 12 +++ .../Tests/DateTimeHumanizerTest.php | 85 ++++++++++++++----- 14 files changed, 463 insertions(+), 88 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php create mode 100644 src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php create mode 100644 src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php diff --git a/README.md b/README.md index 1f7e85d..164d37a 100644 --- a/README.md +++ b/README.md @@ -236,6 +236,22 @@ DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \ DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2016-04-27 13:00:00")); // 2 years, 1 day from now ``` +## Aeon Calendar + +[Aeon PHP](https://aeon-php.org/) is a date&time oriented set of libraries. + +```php +use Coduo\PHPHumanizer\DateTimeHumanizer; + +$timeUnit = TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)); + +DateTimeHumanizer::timeUnit($timeUnit); // 2 days, 3 hours, 25 minutes, and 30.2 seconds +``` + Currently we support following languages: * [Azerbaijani](src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml) * [English](src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml) diff --git a/composer.json b/composer.json index 58f5108..92dbc7a 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "require": { "php": "^7.4 | ^8.0", "symfony/translation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/yaml": "^4.4|^5.0", + "aeon-php/calendar": ">=0.16.1" }, "require-dev": { "thunderer/shortcode": "^0.7", @@ -40,6 +41,10 @@ "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" }, "scripts": { + "build": [ + "@static:analyze", + "@test" + ], "cs:php:fix": [ "tools/php-cs-fixer fix --using-cache=no" ], diff --git a/composer.lock b/composer.lock index d0fe9ed..1753b0c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,63 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2266b8e08228e1596ce0366b445cd246", + "content-hash": "c74a1cca580ca33e81761900ec3f88f1", "packages": [ + { + "name": "aeon-php/calendar", + "version": "0.16.1", + "source": { + "type": "git", + "url": "https://github.com/aeon-php/calendar.git", + "reference": "9509656c6b01024aad6158628fc8c950f9cf1199" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/9509656c6b01024aad6158628fc8c950f9cf1199", + "reference": "9509656c6b01024aad6158628fc8c950f9cf1199", + "shasum": "" + }, + "require": { + "php": ">=7.4.2" + }, + "require-dev": { + "ext-bcmath": "*" + }, + "suggest": { + "ext-bcmath": "Compare time units with high precision" + }, + "type": "library", + "autoload": { + "psr-4": { + "Aeon\\": [ + "src/Aeon" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP type safe, immutable calendar library", + "keywords": [ + "calendar", + "date", + "datetime", + "immutable", + "time" + ], + "support": { + "issues": "https://github.com/aeon-php/calendar/issues", + "source": "https://github.com/aeon-php/calendar/tree/0.16.1" + }, + "funding": [ + { + "url": "https://github.com/norberttech", + "type": "github" + } + ], + "time": "2021-02-23T08:58:57+00:00" + }, { "name": "symfony/deprecation-contracts", "version": "v2.2.0", @@ -808,16 +863,16 @@ }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -853,9 +908,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.4" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php new file mode 100644 index 0000000..3576da6 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -0,0 +1,42 @@ +translator = $translator; + } + + public function timeUnit(Unit $unit, string $locale = 'en') : string + { + $parts = []; + + foreach ((new UnitCompound($unit))->components() as $component) { + $parts[] = $this->translator->trans( + 'compound.'.$component->getUnit()->getName(), + ['%count%' => $component->getQuantity()], + 'difference', + $locale + ); + } + + return CollectionHumanizer::oxford($parts, null, $locale); + } +} diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php new file mode 100644 index 0000000..b461b11 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -0,0 +1,83 @@ +unit = $timeUnit; + } + + /** + * @return array + */ + public function components() : array + { + $unit = $this->unit; + $compoundResults = []; + + if ($unit instanceof RelativeTimeUnit) { + if ($unit->inYears()) { + $compoundResults[] = new CompoundResult(new Year(), $unit->inYears()); + } + + if ($unit->inCalendarMonths()) { + $compoundResults[] = new CompoundResult(new Month(), $unit->inCalendarMonths()); + } + + return (new DateIntervalCompound($unit->toDateInterval()))->components(); + } + + if ($unit instanceof TimeUnit) { + if ($unit->inDaysAbs() > 0) { + $compoundResults[] = new CompoundResult(new Day(), $unit->inDaysAbs()); + } + + if ($unit->inTimeHours()) { + $compoundResults[] = new CompoundResult(new Hour(), $unit->inTimeHours()); + } + + if ($unit->inTimeMinutes()) { + $compoundResults[] = new CompoundResult(new Minute(), $unit->inTimeMinutes()); + } + + if ($unit->inTimeSeconds()) { + $seconds = $unit->inTimeSeconds(); + + if ($unit->inTimeMilliseconds() > 0) { + $seconds += $unit->inTimeMilliseconds() / 1000; + } + + $compoundResults[] = new CompoundResult(new Second(), $seconds); + } + + return $compoundResults; + } + + throw new \RuntimeException('Unsupported unit type ' . \get_class($unit)); + } +} diff --git a/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php new file mode 100644 index 0000000..c94c7d9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php @@ -0,0 +1,58 @@ +dateInterval = $dateInterval; + } + + /** + * @return array + */ + public function components() : array + { + /* @var Unit[] $units */ + $units = [ + new Year(), + new Month(), + new Day(), + new Hour(), + new Minute(), + new Second(), + ]; + + + /** @var array $compoundResults */ + $compoundResults = []; + + foreach ($units as $unit) { + if ($this->dateInterval->{$unit->getDateIntervalSymbol()} > 0) { + $compoundResults[] = new CompoundResult($unit, (int) $this->dateInterval->{$unit->getDateIntervalSymbol()}); + } + } + + return $compoundResults; + } +} diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 2ca8258..25f8025 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -22,9 +22,9 @@ final class Difference { - private \DateTime $fromDate; + private \DateTimeInterface $fromDate; - private \DateTime $toDate; + private \DateTimeInterface $toDate; /** * @psalm-suppress PropertyNotSetInConstructor @@ -33,7 +33,7 @@ final class Difference private ?int $quantity = null; - public function __construct(\DateTime $fromDate, \DateTime $toDate) + public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $toDate) { $this->fromDate = $fromDate; $this->toDate = $toDate; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 512fd1b..7cedcbb 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -16,29 +16,29 @@ final class CompoundResult { private Unit $unit; - private int $quantity; - public function __construct(Unit $unit, int $quantity) - { - $this->unit = $unit; - $this->quantity = $quantity; - } + /** + * @var int|float + */ + private $quantity; - public function setQuantity(int $quantity): void + /** + * @param int|float $quantity + */ + public function __construct(Unit $unit, $quantity) { + $this->unit = $unit; $this->quantity = $quantity; } - public function getQuantity() : int + /** + * @return int|float + */ + public function getQuantity() { return $this->quantity; } - public function setUnit(Unit $unit): void - { - $this->unit = $unit; - } - public function getUnit(): Unit { return $this->unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 0a75a80..c16f59e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -11,65 +11,33 @@ namespace Coduo\PHPHumanizer\DateTime; -use Coduo\PHPHumanizer\DateTime\Unit\Day; -use Coduo\PHPHumanizer\DateTime\Unit\Hour; -use Coduo\PHPHumanizer\DateTime\Unit\Minute; -use Coduo\PHPHumanizer\DateTime\Unit\Month; -use Coduo\PHPHumanizer\DateTime\Unit\Second; -use Coduo\PHPHumanizer\DateTime\Unit\Year; use Coduo\PHPHumanizer\DateTime\Difference\CompoundResult; final class PreciseDifference { - private \DateTime $fromDate; + private \DateTimeInterface $fromDate; - private \DateTime $toDate; + private \DateTimeInterface $toDate; - /** - * @var array - */ - private array $units = []; - - /** - * @var array - */ - private array $compoundResults = []; + private ?DateIntervalCompound $compoundResults ; - public function __construct(\DateTime $fromDate, \DateTime $toDate) + public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $toDate) { $this->fromDate = $fromDate; $this->toDate = $toDate; - $this->calculate(); + $this->compoundResults = null; } /** * @return array */ - public function getCompoundResults(): array + public function components() : array { - return $this->compoundResults; - } - - private function calculate(): void - { - /* @var $units Unit[] */ - $units = [ - new Year(), - new Month(), - new Day(), - new Hour(), - new Minute(), - new Second(), - ]; - - $diff = $this->fromDate->diff($this->toDate); - - foreach ($units as $unit) { - if ($diff->{$unit->getDateIntervalSymbol()} > 0) { - $this->units[] = $unit; - $this->compoundResults[] = new CompoundResult($unit, $diff->{$unit->getDateIntervalSymbol()}); - } + if ($this->compoundResults === null) { + $this->compoundResults = new DateIntervalCompound($this->fromDate->diff($this->toDate)); } + + return $this->compoundResults->components(); } public function isPast(): bool diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 2036fb9..45a1f7f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -11,6 +11,7 @@ namespace Coduo\PHPHumanizer\DateTime; +use Coduo\PHPHumanizer\CollectionHumanizer; use Symfony\Contracts\Translation\TranslatorInterface; final class PreciseFormatter @@ -26,7 +27,7 @@ public function formatDifference(PreciseDifference $difference, string $locale = { $diff = []; - foreach ($difference->getCompoundResults() as $result) { + foreach ($difference->components() as $result) { $diff[] = $this->translator->trans( 'compound.'.$result->getUnit()->getName(), ['%count%' => $result->getQuantity()], @@ -42,4 +43,20 @@ public function formatDifference(PreciseDifference $difference, string $locale = $locale ); } + + public function formatInterval(\DateInterval $dateInterval, string $locale = 'en') : string + { + $parts = []; + + foreach ((new DateIntervalCompound($dateInterval))->components() as $component) { + $parts[] = $this->translator->trans( + 'compound.'.$component->getUnit()->getName(), + ['%count%' => $component->getQuantity()], + 'difference', + $locale + ); + } + + return CollectionHumanizer::oxford($parts, null, $locale); + } } diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 2c51cf5..2e6951d 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -11,6 +11,8 @@ namespace Coduo\PHPHumanizer; +use Aeon\Calendar\Gregorian\TimePeriod; +use Aeon\Calendar\Unit; use Coduo\PHPHumanizer\DateTime\Difference; use Coduo\PHPHumanizer\DateTime\PreciseDifference; use Coduo\PHPHumanizer\DateTime\Formatter; @@ -19,17 +21,38 @@ final class DateTimeHumanizer { - public static function difference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string + public static function difference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string { $formatter = new Formatter(Builder::build($locale)); return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } - public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string + public static function preciseDifference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string { $formatter = new PreciseFormatter(Builder::build($locale)); return $formatter->formatDifference(new PreciseDifference($fromDate, $toDate), $locale); } + + public static function timeUnit(Unit $unit, string $locale = 'en') : string + { + $formatter = new Aeon\Calendar\Formatter(Builder::build($locale)); + + return $formatter->timeUnit($unit, $locale); + } + + public static function timePeriod(TimePeriod $timePeriod, string $locale = 'en') : string + { + $formatter = new Formatter(Builder::build($locale)); + + return $formatter->formatDifference(new Difference($timePeriod->start()->toDateTimeImmutable(), $timePeriod->end()->toDateTimeImmutable()), $locale); + } + + public static function timePeriodPrecise(TimePeriod $timePeriod, string $locale = 'en') : string + { + $formatter = new PreciseFormatter(Builder::build($locale)); + + return $formatter->formatDifference(new PreciseDifference($timePeriod->start()->toDateTimeImmutable(), $timePeriod->end()->toDateTimeImmutable()), $locale); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php new file mode 100644 index 0000000..dca4d01 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php @@ -0,0 +1,49 @@ +add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '2 days, 3 hours, 25 minutes, and 30.2 seconds', + $formatter->timeUnit($timeUnit) + ); + } + + public function test_format_relative_time_unit() : void + { + $timeUnit = RelativeTimeUnit::months(14); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '1 year and 2 months', + $formatter->timeUnit($timeUnit) + ); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php index a14cb81..99b1c11 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php @@ -41,4 +41,16 @@ public function test_format_compound_datetime_diff_for_specific_locale() $this->assertSame('через 10 дней, 5 часов', $formatter->formatDifference($diff, 'ru')); } + + public function test_format_date_interval() : void + { + $interval = new \DateInterval('P1DT5H25M43S'); + + $formatter = new PreciseFormatter(Builder::build('en')); + + $this->assertSame( + '1 day, 5 hours, 25 minutes, and 43 seconds', + $formatter->formatInterval($interval) + ); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index a4c441e..23ce537 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -11,42 +11,57 @@ namespace Coduo\PHPHumanizer\Tests; +use Aeon\Calendar\Gregorian\DateTime; +use Aeon\Calendar\Gregorian\TimePeriod; +use Aeon\Calendar\RelativeTimeUnit; +use Aeon\Calendar\TimeUnit; +use Aeon\Calendar\Unit; use Coduo\PHPHumanizer\DateTimeHumanizer; use PHPUnit\Framework\TestCase; class DateTimeHumanizerTest extends TestCase { /** - * @test * @dataProvider humanizeDataProvider - * - * @param $firstDate - * @param $secondDate - * @param $expected - * @param string $locale */ - public function test_humanize_difference_between_dates($firstDate, $secondDate, $expected, $locale) + public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void { $this->assertEquals($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } + /** + * @dataProvider humanizeDataProvider + */ + public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertEquals($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + /** * @dataProvider preciseDifferenceDataProvider - * - * @param $firstDate - * @param $secondDate - * @param $expected - * @param string $locale */ - public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale) + public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertEquals($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + */ + public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void { $this->assertEquals($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** - * @return array + * @dataProvider timeUnitDataProvider */ - public function humanizeDataProvider() + public function test_humanize_time_unit(Unit $unit, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timeUnit($unit, $locale)); + } + + public function humanizeDataProvider() : array { return [ // English @@ -264,10 +279,7 @@ public function humanizeDataProvider() ]; } - /** - * @return array - */ - public function preciseDifferenceDataProvider() + public function preciseDifferenceDataProvider() : array { return [ // Azerbaijani @@ -461,4 +473,39 @@ public function preciseDifferenceDataProvider() ['2014-04-26 13:00:00', '2016-04-27 13:00:00', '2 年, 1 日後', 'ja'], ]; } + + public function timeUnitDataProvider() : array + { + return [ + // English + [TimeUnit::seconds(20), '20 seconds', 'en'], + [TimeUnit::minutes(20), '20 minutes', 'en'], + [TimeUnit::minutes(20)->add(TimeUnit::seconds(5)), '20 minutes and 5 seconds', 'en'], + [ + TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)), + '2 days, 3 hours, 25 minutes, and 30.2 seconds', + 'en' + ], + [RelativeTimeUnit::months(14), '1 year and 2 months', 'en'], + + // Polish + [TimeUnit::seconds(20), '20 sekund', 'pl'], + [TimeUnit::minutes(20), '20 minut', 'pl'], + [TimeUnit::minutes(20)->add(TimeUnit::seconds(5)), '20 minut i 5 sekund', 'pl'], + [ + TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)), + '2 dni, 3 godziny, 25 minut i 30.2 sekund', + 'pl' + ], + [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'] + ]; + } } From b4b5120d544730407cfd126b8feaab0549545c18 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 23 Feb 2021 20:48:51 +0000 Subject: [PATCH 28/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dc6841..ae64d77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ -## [Unreleased] - 2021-02-21 +## [Unreleased] - 2021-02-23 ### Added +- [#123](https://github.com/coduo/php-humanizer/pull/123) - **Relative/Time Unit humanizer** - [@norberttech](https://github.com/norberttech) +- [#123](https://github.com/coduo/php-humanizer/pull/123) - **TimePeriod humanizer** - [@norberttech](https://github.com/norberttech) +- [#123](https://github.com/coduo/php-humanizer/pull/123) - **Support for \DateTimeInterface instead of legacy \DateTime in all DateTimeHumanizers** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **phpstan with highest possible requirements** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **psalm with highest possible requirements** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **arguments and return type hinting** - [@norberttech](https://github.com/norberttech) From 0533da67e2a0ff97a8f504ebc8de469eaca150f1 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 23 Feb 2021 22:01:59 +0100 Subject: [PATCH 29/87] Added more strict php cs fixer rules --- .php_cs | 27 ------- .../PHPHumanizer/Aeon/Calendar/Formatter.php | 2 +- .../PHPHumanizer/Collection/Formatter.php | 8 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 +- .../PHPHumanizer/CollectionHumanizer.php | 2 +- .../DateTime/DateIntervalCompound.php | 1 - .../PHPHumanizer/DateTime/Difference.php | 22 +++--- .../DateTime/Difference/CompoundResult.php | 8 +- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 2 +- .../DateTime/PreciseDifference.php | 4 +- .../DateTime/PreciseFormatter.php | 8 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 6 +- .../PHPHumanizer/DateTime/Unit/JustNow.php | 6 +- .../PHPHumanizer/DateTime/Unit/Minute.php | 6 +- .../PHPHumanizer/DateTime/Unit/Month.php | 6 +- .../PHPHumanizer/DateTime/Unit/Second.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 6 +- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 6 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 18 ++--- .../PHPHumanizer/Number/Ordinal/Builder.php | 3 +- .../Number/Ordinal/StrategyInterface.php | 7 +- .../PHPHumanizer/Number/RomanNumeral.php | 17 ++-- src/Coduo/PHPHumanizer/NumberHumanizer.php | 18 +++-- .../Resources/Ordinal/DeStrategy.php | 4 +- .../Resources/Ordinal/EnStrategy.php | 7 +- .../Resources/Ordinal/EsStrategy.php | 4 +- .../Resources/Ordinal/FrStrategy.php | 10 +-- .../Resources/Ordinal/IdStrategy.php | 5 +- .../Resources/Ordinal/ItStrategy.php | 4 +- .../Resources/Ordinal/NlStrategy.php | 4 +- .../Resources/Ordinal/PtStrategy.php | 4 +- .../PHPHumanizer/String/BinarySuffix.php | 15 ++-- src/Coduo/PHPHumanizer/String/Breakpoint.php | 2 +- .../PHPHumanizer/String/HtmlTruncate.php | 9 ++- src/Coduo/PHPHumanizer/String/Humanize.php | 2 +- .../PHPHumanizer/String/MetricSuffix.php | 6 +- .../String/ShortcodeProcessor.php | 9 +-- .../PHPHumanizer/String/TextTruncate.php | 4 +- .../PHPHumanizer/String/TruncateInterface.php | 2 +- .../PHPHumanizer/String/WordBreakpoint.php | 2 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 +-- src/Coduo/PHPHumanizer/Translator/Builder.php | 6 +- .../Tests/Collection/FormatterTest.php | 6 +- .../Tests/CollectionHumanizerTest.php | 2 +- .../Tests/DateTime/DifferenceTest.php | 26 +++---- .../Tests/DateTime/PreciseFormatterTest.php | 4 +- .../Tests/DateTimeHumanizerTest.php | 8 +- .../Tests/NumberHumanizerTest.php | 78 +++++++++++-------- .../Tests/String/WordBreakpointTest.php | 8 +- .../Tests/StringHumanizerTest.php | 28 ++++--- 53 files changed, 238 insertions(+), 242 deletions(-) delete mode 100644 .php_cs diff --git a/.php_cs b/.php_cs deleted file mode 100644 index b4f320e..0000000 --- a/.php_cs +++ /dev/null @@ -1,27 +0,0 @@ -setRules([ - '@PSR2' => true, - 'declare_strict_types' => true, - 'array_syntax' => ['syntax' => 'short'], - 'header_comment' => ['header' => $fileHeaderComment, 'separate' => 'both'], - 'blank_line_after_opening_tag' => true, - 'single_blank_line_before_namespace' => true, - 'no_unused_imports' => true, - 'single_quote' => true, - 'native_function_invocation' => true - ]) - ->setFinder( - PhpCsFixer\Finder::create() - ->in(__DIR__ . '/src') - ->in(__DIR__ . '/tests') - )->setRiskyAllowed(true) - ->setUsingCache(false); \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php index 3576da6..65ec949 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -30,7 +30,7 @@ public function timeUnit(Unit $unit, string $locale = 'en') : string foreach ((new UnitCompound($unit))->components() as $component) { $parts[] = $this->translator->trans( - 'compound.'.$component->getUnit()->getName(), + 'compound.' . $component->getUnit()->getName(), ['%count%' => $component->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 2f49887..8912ad8 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -28,7 +28,7 @@ public function __construct(TranslatorInterface $translator, string $catalogue = /** * @param array $collection */ - public function format(array $collection, int $limit = null): string + public function format(array $collection, int $limit = null) : string { $count = \count($collection); @@ -54,7 +54,7 @@ public function format(array $collection, int $limit = null): string /** * @param array $collection */ - private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count): string + private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count) : string { $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $limit)); @@ -69,7 +69,7 @@ private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, i /** * @param array $collection */ - private function formatCommaSeparated(array $collection, int $count): string + private function formatCommaSeparated(array $collection, int $count) : string { $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $count - 1)); @@ -82,7 +82,7 @@ private function formatCommaSeparated(array $collection, int $count): string /** * @param array $collection */ - private function formatOnlyTwo(array $collection): string + private function formatOnlyTwo(array $collection) : string { return $this->translator->trans('only_two', [ '%first%' => (string) $collection[0], diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 2f84c21..2ec61ef 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -23,7 +23,7 @@ public function __construct(Formatter $formatter) /** * @param array $collection */ - public function format(array $collection, int $limit = null): string + public function format(array $collection, int $limit = null) : string { return $this->formatter->format($collection, $limit); } diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index e7c2bce..dc83f80 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -20,7 +20,7 @@ final class CollectionHumanizer /** * @param array $collection */ - public static function oxford(array $collection, int $limit = null, string $locale = 'en'): string + public static function oxford(array $collection, int $limit = null, string $locale = 'en') : string { $oxford = new Oxford( new Formatter(Builder::build($locale)) diff --git a/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php index c94c7d9..7cfa582 100644 --- a/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php +++ b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php @@ -43,7 +43,6 @@ public function components() : array new Second(), ]; - /** @var array $compoundResults */ $compoundResults = []; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 25f8025..713857e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -40,17 +40,24 @@ public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $to $this->calculate(); } - public function getUnit(): Unit + public function getUnit() : Unit { return $this->unit; } - public function getQuantity(): ?int + public function getQuantity() : ?int { return $this->quantity; } - private function calculate(): void + public function isPast() : bool + { + $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); + + return ($diff > 0) ? false : true; + } + + private function calculate() : void { /* @var $units Unit[] */ $units = [ @@ -65,9 +72,11 @@ private function calculate(): void ]; $absoluteMilliSecondsDiff = \abs($this->toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; + foreach ($units as $unit) { if ($absoluteMilliSecondsDiff >= $unit->getMilliseconds()) { $this->unit = $unit; + break; } } @@ -76,11 +85,4 @@ private function calculate(): void ? $absoluteMilliSecondsDiff : (int) \round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); } - - public function isPast(): bool - { - $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); - - return ($diff > 0) ? false : true; - } } diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 7cedcbb..45e93fd 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -18,12 +18,12 @@ final class CompoundResult private Unit $unit; /** - * @var int|float + * @var float|int */ private $quantity; /** - * @param int|float $quantity + * @param float|int $quantity */ public function __construct(Unit $unit, $quantity) { @@ -32,14 +32,14 @@ public function __construct(Unit $unit, $quantity) } /** - * @return int|float + * @return float|int */ public function getQuantity() { return $this->quantity; } - public function getUnit(): Unit + public function getUnit() : Unit { return $this->unit; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index 28fc8ce..cbd5897 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -22,7 +22,7 @@ public function __construct(TranslatorInterface $translator) $this->translator = $translator; } - public function formatDifference(Difference $difference, string $locale = 'en'): string + public function formatDifference(Difference $difference, string $locale = 'en') : string { $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index c16f59e..6c28457 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -19,7 +19,7 @@ final class PreciseDifference private \DateTimeInterface $toDate; - private ?DateIntervalCompound $compoundResults ; + private ?DateIntervalCompound $compoundResults; public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $toDate) { @@ -40,7 +40,7 @@ public function components() : array return $this->compoundResults->components(); } - public function isPast(): bool + public function isPast() : bool { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 45a1f7f..7ea5f64 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -23,13 +23,13 @@ public function __construct(TranslatorInterface $translator) $this->translator = $translator; } - public function formatDifference(PreciseDifference $difference, string $locale = 'en'): string + public function formatDifference(PreciseDifference $difference, string $locale = 'en') : string { $diff = []; foreach ($difference->components() as $result) { $diff[] = $this->translator->trans( - 'compound.'.$result->getUnit()->getName(), + 'compound.' . $result->getUnit()->getName(), ['%count%' => $result->getQuantity()], 'difference', $locale @@ -37,7 +37,7 @@ public function formatDifference(PreciseDifference $difference, string $locale = } return $this->translator->trans( - 'compound.'.($difference->isPast() ? 'past' : 'future'), + 'compound.' . ($difference->isPast() ? 'past' : 'future'), ['%value%' => \implode(', ', $diff)], 'difference', $locale @@ -50,7 +50,7 @@ public function formatInterval(\DateInterval $dateInterval, string $locale = 'en foreach ((new DateIntervalCompound($dateInterval))->components() as $component) { $parts[] = $this->translator->trans( - 'compound.'.$component->getUnit()->getName(), + 'compound.' . $component->getUnit()->getName(), ['%count%' => $component->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index c5445cb..294fd38 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -13,15 +13,15 @@ interface Unit { - public function getName(): string; + public function getName() : string; /** * Return millisecond that represents unit. */ - public function getMilliseconds(): int; + public function getMilliseconds() : int; /** * Returns symbol of \DateInterval equivalent. */ - public function getDateIntervalSymbol(): string; + public function getDateIntervalSymbol() : string; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index f734a35..60926de 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -15,19 +15,19 @@ final class Day implements Unit { - public function getName(): string + public function getName() : string { return 'day'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $hour = new Hour(); return $hour->getMilliseconds() * 24; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'd'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 1864d41..2cd2dc0 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -15,19 +15,19 @@ final class Hour implements Unit { - public function getName(): string + public function getName() : string { return 'hour'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $minute = new Minute(); return $minute->getMilliseconds() * 60; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'h'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index 3cb5aed..ab5ef22 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -15,17 +15,17 @@ final class JustNow implements Unit { - public function getName(): string + public function getName() : string { return 'just_now'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { return 0; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { throw new \RuntimeException("JustNow doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index 6bbc479..c0a5000 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -15,19 +15,19 @@ final class Minute implements Unit { - public function getName(): string + public function getName() : string { return 'minute'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $second = new Second(); return $second->getMilliseconds() * 60; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'i'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index 33a0e5c..088582c 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -15,19 +15,19 @@ final class Month implements Unit { - public function getName(): string + public function getName() : string { return 'month'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $day = new Day(); return $day->getMilliseconds() * 30; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'm'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 465a5ff..f207461 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -15,17 +15,17 @@ final class Second implements Unit { - public function getName(): string + public function getName() : string { return 'second'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { return 1000; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 's'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index 353d5a3..3623e29 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -15,19 +15,19 @@ final class Week implements Unit { - public function getName(): string + public function getName() : string { return 'week'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $day = new Day(); return $day->getMilliseconds() * 7; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { throw new \RuntimeException("Week doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 22a539d..63c49df 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -15,19 +15,19 @@ final class Year implements Unit { - public function getName(): string + public function getName() : string { return 'year'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $day = new Day(); return $day->getMilliseconds() * 356; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'y'; } diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 2e6951d..12e75af 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -14,21 +14,21 @@ use Aeon\Calendar\Gregorian\TimePeriod; use Aeon\Calendar\Unit; use Coduo\PHPHumanizer\DateTime\Difference; -use Coduo\PHPHumanizer\DateTime\PreciseDifference; use Coduo\PHPHumanizer\DateTime\Formatter; +use Coduo\PHPHumanizer\DateTime\PreciseDifference; use Coduo\PHPHumanizer\DateTime\PreciseFormatter; use Coduo\PHPHumanizer\Translator\Builder; final class DateTimeHumanizer { - public static function difference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string + public static function difference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en') : string { $formatter = new Formatter(Builder::build($locale)); return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } - public static function preciseDifference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string + public static function preciseDifference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en') : string { $formatter = new PreciseFormatter(Builder::build($locale)); diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 4d48872..08ae954 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -17,15 +17,15 @@ final class Ordinal { /** - * @var int|float + * @var float|int */ private $number; private StrategyInterface $strategy; /** - * @param int|float $number - * @param string $locale + * @param float|int $number + * @param string $locale */ public function __construct($number, string $locale) { @@ -33,15 +33,15 @@ public function __construct($number, string $locale) $this->strategy = Builder::build($locale); } - public function isPrefix(): bool - { - return $this->strategy->isPrefix(); - } - - public function __toString(): string + public function __toString() : string { return $this ->strategy ->ordinalIndicator($this->number); } + + public function isPrefix() : bool + { + return $this->strategy->isPrefix(); + } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 2246cc9..cc55af1 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -16,7 +16,7 @@ final class Builder /** * Find a proper strategy for ordinal numbers. */ - public static function build(string $locale): StrategyInterface + public static function build(string $locale) : StrategyInterface { // $locale should be xx or xx_YY if (!\preg_match('#^([a-z]{2})(_([A-Z]{2}))?$#', $locale, $m)) { @@ -24,6 +24,7 @@ public static function build(string $locale): StrategyInterface } $strategy = \ucfirst($m[1]); + if (!empty($m[3])) { $strategy .= \sprintf('_%s', $m[3]); } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index eb60dcc..6d5d8a4 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -13,11 +13,12 @@ interface StrategyInterface { - public function isPrefix(): bool; + public function isPrefix() : bool; /** - * @param int|float $number + * @param float|int $number + * * @return string */ - public function ordinalIndicator($number): string; + public function ordinalIndicator($number) : string; } diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 6d1db95..e27a3f2 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -16,17 +16,17 @@ final class RomanNumeral /** * @var int */ - const MIN_VALUE = 1; + public const MIN_VALUE = 1; /** * @var int */ - const MAX_VALUE = 3999; + public const MAX_VALUE = 3999; /** * @var string */ - const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; + public const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; /** * @var array @@ -50,11 +50,11 @@ final class RomanNumeral /** * @param numeric $number * + * @throws \InvalidArgumentException * * @return string - * @throws \InvalidArgumentException */ - public function toRoman($number): string + public function toRoman($number) : string { if (($number < self::MIN_VALUE) || ($number > self::MAX_VALUE)) { throw new \InvalidArgumentException(); @@ -67,6 +67,7 @@ public function toRoman($number): string if ($number >= $value) { $romanString .= $key; $number -= $value; + break; } } @@ -76,9 +77,9 @@ public function toRoman($number): string } /** - * @return float|int - * * @throws \InvalidArgumentException + * + * @return float|int */ public function fromRoman(string $string) { @@ -97,7 +98,7 @@ public function fromRoman(string $string) if ($previousDigit < $digit) { $digit -= $previousDigit; - --$i; + $i--; } } diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 74271f6..c18d714 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -19,23 +19,25 @@ final class NumberHumanizer { /** - * @param int|float $number + * @param float|int $number * @param string $locale + * * @return string */ - public static function ordinalize($number, string $locale = 'en'): string + public static function ordinalize($number, string $locale = 'en') : string { $ordinal = new Ordinal($number, $locale); - return (string) ($ordinal->isPrefix()) ? $ordinal.$number : $number.$ordinal; + return (string) ($ordinal->isPrefix()) ? $ordinal . $number : $number . $ordinal; } /** - * @param int|float $number + * @param float|int $number * @param string $locale + * * @return string */ - public static function ordinal($number, string $locale = 'en'): string + public static function ordinal($number, string $locale = 'en') : string { $ordinal = new Ordinal($number, $locale); @@ -45,6 +47,7 @@ public static function ordinal($number, string $locale = 'en'): string /** * @param int $number * @param string $locale + * * @return bool|int|string */ public static function binarySuffix(int $number, string $locale = 'en') @@ -67,7 +70,7 @@ public static function preciseBinarySuffix(int $number, ?int $precision, string /** * @param numeric $number */ - public static function metricSuffix($number, string $locale = 'en'): string + public static function metricSuffix($number, string $locale = 'en') : string { $binarySuffix = new MetricSuffix($number, $locale); @@ -76,9 +79,10 @@ public static function metricSuffix($number, string $locale = 'en'): string /** * @param numeric $number + * * @return string */ - public static function toRoman($number): string + public static function toRoman($number) : string { $romanNumeral = new RomanNumeral(); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php index bacc827..ca00924 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -15,12 +15,12 @@ final class DeStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return '.'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 373932f..cba7f92 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -15,14 +15,14 @@ final class EnStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { - $absNumber = \abs((integer) $number); + $absNumber = \abs((int) $number); if (\in_array(($absNumber % 100), [11, 12, 13], true)) { return 'th'; @@ -32,6 +32,7 @@ public function ordinalIndicator($number): string case 1: return 'st'; case 2: return 'nd'; case 3: return 'rd'; + default: return 'th'; } } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php index 1793120..00cf8d8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php @@ -15,12 +15,12 @@ final class EsStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php index 45a034c..e275340 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php @@ -15,19 +15,19 @@ final class FrStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { - $absNumber = \abs((integer) $number); + $absNumber = \abs((int) $number); if ($absNumber == 1) { return 'er'; - } else { - return 'e'; } + + return 'e'; } } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index 937eddc..2ea8e83 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -15,13 +15,12 @@ final class IdStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return true; } - - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'ke-'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php index ec69b84..3d73c80 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php @@ -15,12 +15,12 @@ final class ItStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 63cc61a..4c189bc 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -15,12 +15,12 @@ final class NlStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'e'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php index 94f0e75..63d9e8d 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php @@ -15,12 +15,12 @@ final class PtStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index a5e0967..25f058f 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -16,7 +16,7 @@ final class BinarySuffix /** * @var int */ - const CONVERT_THRESHOLD = 1024; + public const CONVERT_THRESHOLD = 1024; private int $number; @@ -40,7 +40,7 @@ public function __construct(int $number, string $locale = 'en', int $precision = throw new \RuntimeException('Binary suffix converter requires intl extension!'); } - if (!\is_null($precision)) { + if (null !== $precision) { $this->setSpecificPrecisionFormat($precision); } @@ -60,13 +60,14 @@ public function __construct(int $number, string $locale = 'en', int $precision = public function convert() { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); + if ($this->number < 0) { return $this->number; } foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size <= $this->number) { - $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (double) $size : $this->number; + $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); return $formatter->format($value); @@ -80,17 +81,19 @@ public function convert() * Replaces the default ICU 56.1 decimal formats defined in $binaryPrefixes with ones that provide the same symbols * but the provided number of decimal places. */ - protected function setSpecificPrecisionFormat(int $precision): void + private function setSpecificPrecisionFormat(int $precision) : void { if ($precision < 0) { throw new \InvalidArgumentException('Precision must be positive'); } + if ($precision > 3) { - throw new \InvalidArgumentException('Invalid precision. Binary suffix converter can only represent values in '. + throw new \InvalidArgumentException('Invalid precision. Binary suffix converter can only represent values in ' . 'up to three decimal places'); } $icuFormat = '#'; + if ($precision > 0) { $icuFormat .= \str_pad('#.', (2 + $precision), '0'); } @@ -98,7 +101,7 @@ protected function setSpecificPrecisionFormat(int $precision): void foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size >= 1024) { $symbol = \substr($unitPattern, (int) \strpos($unitPattern, ' ')); - $this->binaryPrefixes[$size] = $icuFormat.$symbol; + $this->binaryPrefixes[$size] = $icuFormat . $symbol; } } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index c29c2a5..1e5caed 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -16,5 +16,5 @@ interface Breakpoint /** * Return the length of the truncated $text depending on the $characterCount. */ - public function calculatePosition(string $text, int $charactersCount): int; + public function calculatePosition(string $text, int $charactersCount) : int; } diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 0e4c8c7..c1f6050 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -26,7 +26,7 @@ public function __construct(Breakpoint $breakpoint, string $allowedTags = '', st $this->allowedTags = $allowedTags; } - public function truncate(string $text, int $charactersCount): string + public function truncate(string $text, int $charactersCount) : string { $strippedText = \strip_tags($text, $this->allowedTags); @@ -39,7 +39,7 @@ public function truncate(string $text, int $charactersCount): string * * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) */ - private function truncateHtml(string $string, int $charactersCount): string + private function truncateHtml(string $string, int $charactersCount) : string { $limit = $charactersCount; $offset = 0; @@ -47,6 +47,7 @@ private function truncateHtml(string $string, int $charactersCount): string // Handle special characters. \preg_match_all('#&[a-z]+;#i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + foreach ($matches as $match) { if ($match[0][1] >= $limit) { break; @@ -56,12 +57,14 @@ private function truncateHtml(string $string, int $charactersCount): string // Handle all the html tags. \preg_match_all('#<[^>]+>([^<]*)#', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + foreach ($matches as $match) { if ($match[0][1] - $offset >= $limit) { break; } $tag = \mb_substr((string) \strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + if ($tag[0] != '/') { $tags[] = $tag; } elseif (\end($tags) == \mb_substr($tag, 1)) { @@ -73,7 +76,7 @@ private function truncateHtml(string $string, int $charactersCount): string $newString = \mb_substr($string, 0, $limit = \min(\mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); $newString .= (\mb_strlen($string) > $limit ? $this->append : ''); - $newString .= (\count($tags = \array_reverse($tags)) ? '' : ''); + $newString .= (\count($tags = \array_reverse($tags)) ? '' : ''); return $newString; } diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index e7c79d8..87bf577 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -35,7 +35,7 @@ public function __construct(string $text, bool $capitalize = true, string $separ $this->forbiddenWords = $forbiddenWords; } - public function __toString(): string + public function __toString() : string { $humanized = \trim(\strtolower((string) \preg_replace(['/([A-Z])/', \sprintf('/[%s\s]+/', $this->separator)], ['_$1', ' '], $this->text))); $humanized = \trim(\str_replace($this->forbiddenWords, '', $humanized)); diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 141987d..69822f2 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -16,7 +16,7 @@ final class MetricSuffix /** * @var int */ - const CONVERT_THRESHOLD = 1000; + public const CONVERT_THRESHOLD = 1000; private int $number; @@ -63,13 +63,13 @@ public function __construct($number, string $locale = 'en') \krsort($this->binaryPrefixes); } - public function convert(): string + public function convert() : string { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size <= $this->number) { - $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (double) $size : $this->number; + $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); return $formatter->format($value); diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index c1f85c0..acd6686 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -21,11 +21,10 @@ final class ShortcodeProcessor /** * Removes all shortcodes from given text. */ - public function removeShortcodes(string $text): string + public function removeShortcodes(string $text) : string { return $this->createShortcodeProcessor( - function (): void { - return; + function () : void { } )->process($text); } @@ -33,12 +32,12 @@ function (): void { /** * Removes only shortcode tags from given text (leaves their content as it is). */ - public function removeShortcodeTags(string $text): string + public function removeShortcodeTags(string $text) : string { return $this->createShortcodeProcessor(fn (ShortcodeInterface $s) : ?string => $s->getContent())->process($text); } - private function createShortcodeProcessor(callable $defaultHandler): Processor + private function createShortcodeProcessor(callable $defaultHandler) : Processor { $handlers = new HandlerContainer(); $handlers->setDefault($defaultHandler); diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index a487951..5d0dfdf 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -23,7 +23,7 @@ public function __construct(Breakpoint $breakpoint, string $append = '') $this->append = $append; } - public function truncate(string $text, int $charactersCount): string + public function truncate(string $text, int $charactersCount) : string { if ($charactersCount < 0 || \mb_strlen($text) <= $charactersCount) { return $text; @@ -31,6 +31,6 @@ public function truncate(string $text, int $charactersCount): string $truncatedText = \rtrim(\mb_substr($text, 0, $this->breakpoint->calculatePosition($text, $charactersCount))); - return ($truncatedText === $text) ? $truncatedText : $truncatedText.$this->append; + return ($truncatedText === $text) ? $truncatedText : $truncatedText . $this->append; } } diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 5f671b5..c0400cb 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -13,5 +13,5 @@ interface TruncateInterface { - public function truncate(string $text, int $charactersCount): string; + public function truncate(string $text, int $charactersCount) : string; } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 0dd6f7d..908c18e 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -13,7 +13,7 @@ final class WordBreakpoint implements Breakpoint { - public function calculatePosition(string $text, int $charactersCount): int + public function calculatePosition(string $text, int $charactersCount) : int { if ($charactersCount < 0) { return (int) \mb_strlen($text); diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index ceb9df9..5e492b4 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -11,10 +11,10 @@ namespace Coduo\PHPHumanizer; +use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\Humanize; use Coduo\PHPHumanizer\String\ShortcodeProcessor; use Coduo\PHPHumanizer\String\TextTruncate; -use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\WordBreakpoint; final class StringHumanizer @@ -22,26 +22,26 @@ final class StringHumanizer /** * @param array $forbiddenWords */ - public static function humanize(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = []): string + public static function humanize(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = []) : string { return (string) new Humanize($text, $capitalize, $separator, $forbiddenWords); } - public static function truncate(string $text, int $charactersCount, string $append = ''): string + public static function truncate(string $text, int $charactersCount, string $append = '') : string { $truncate = new TextTruncate(new WordBreakpoint(), $append); return $truncate->truncate($text, $charactersCount); } - public static function truncateHtml(string $text, int $charactersCount, string $allowedTags = '', string $append = ''): string + public static function truncateHtml(string $text, int $charactersCount, string $allowedTags = '', string $append = '') : string { $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); return $truncate->truncate($text, $charactersCount); } - public static function removeShortcodes(string $text): string + public static function removeShortcodes(string $text) : string { if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); @@ -52,7 +52,7 @@ public static function removeShortcodes(string $text): string return $processor->removeShortcodes($text); } - public static function removeShortcodeTags(string $text): string + public static function removeShortcodeTags(string $text) : string { if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 1a3bd56..e7a0146 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -16,18 +16,18 @@ final class Builder { - public static function build(string $locale): Translator + public static function build(string $locale) : Translator { $translator = new Translator($locale); $translator->addLoader('yml', new YamlFileLoader()); - $iterator = new \FilesystemIterator(__DIR__.'/../Resources/translations'); + $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); foreach ($filter as $file) { /* @var $file \SplFileInfo */ $resourceName = $file->getBasename('.yml'); - list($fileDomain, $fileLocale) = \explode('.', $resourceName); + [$fileDomain, $fileLocale] = \explode('.', $resourceName); $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); } diff --git a/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php index 316dd4c..d5f1c64 100644 --- a/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php @@ -17,7 +17,7 @@ final class FormatterTest extends TestCase { - public function test_formats_two_elements() + public function test_formats_two_elements() : void { $formatter = new Formatter(Builder::build('en')); @@ -27,7 +27,7 @@ public function test_formats_two_elements() ); } - public function test_formats_elements_with_limit() + public function test_formats_elements_with_limit() : void { $formatter = new Formatter(Builder::build('en')); @@ -37,7 +37,7 @@ public function test_formats_elements_with_limit() ); } - public function test_formats_elements_without_limit() + public function test_formats_elements_without_limit() : void { $formatter = new Formatter(Builder::build('en')); diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 0753e23..85ac75a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -19,7 +19,7 @@ final class CollectionHumanizerTest extends TestCase /** * @dataProvider oxfordCollectionProvider */ - public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) + public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void { $this->assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php index 43c9ec5..c1dd340 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php @@ -14,15 +14,15 @@ use Coduo\PHPHumanizer\DateTime\Difference; use Coduo\PHPHumanizer\DateTime\Unit\Day; use Coduo\PHPHumanizer\DateTime\Unit\Hour; +use Coduo\PHPHumanizer\DateTime\Unit\Minute; use Coduo\PHPHumanizer\DateTime\Unit\Month; use Coduo\PHPHumanizer\DateTime\Unit\Week; use Coduo\PHPHumanizer\DateTime\Unit\Year; use PHPUnit\Framework\TestCase; -use Coduo\PHPHumanizer\DateTime\Unit\Minute; final class DifferenceTest extends TestCase { - public function test_calculate_diff_between_present_and_past_date_in_minutes() + public function test_calculate_diff_between_present_and_past_date_in_minutes() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 12:45:00')); $this->assertInstanceOf(Minute::class, $diff->getUnit()); @@ -30,7 +30,7 @@ public function test_calculate_diff_between_present_and_past_date_in_minutes() $this->assertTrue($diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_minutes() + public function test_calculate_diff_between_present_and_future_date_in_minutes() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 13:15:00')); $this->assertInstanceOf(Minute::class, $diff->getUnit()); @@ -38,7 +38,7 @@ public function test_calculate_diff_between_present_and_future_date_in_minutes() $this->assertFalse($diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_hours() + public function test_calculate_diff_between_present_and_past_date_in_hours() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 11:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); @@ -46,7 +46,7 @@ public function test_calculate_diff_between_present_and_past_date_in_hours() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_hours() + public function test_calculate_diff_between_present_and_future_date_in_hours() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 16:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); @@ -54,7 +54,7 @@ public function test_calculate_diff_between_present_and_future_date_in_hours() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_days() + public function test_calculate_diff_between_present_and_past_date_in_days() : void { $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-09')); $this->assertInstanceOf(Day::class, $diff->getUnit()); @@ -62,7 +62,7 @@ public function test_calculate_diff_between_present_and_past_date_in_days() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_days() + public function test_calculate_diff_between_present_and_future_date_in_days() : void { $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-11')); $this->assertInstanceOf(Day::class, $diff->getUnit()); @@ -70,7 +70,7 @@ public function test_calculate_diff_between_present_and_future_date_in_days() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_weeks() + public function test_calculate_diff_between_present_and_past_date_in_weeks() : void { $diff = new Difference(new \DateTime('2014-04-15'), new \DateTime('2014-04-01')); $this->assertInstanceOf(Week::class, $diff->getUnit()); @@ -78,7 +78,7 @@ public function test_calculate_diff_between_present_and_past_date_in_weeks() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_weeks() + public function test_calculate_diff_between_present_and_future_date_in_weeks() : void { $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-04-15')); $this->assertInstanceOf(Week::class, $diff->getUnit()); @@ -86,7 +86,7 @@ public function test_calculate_diff_between_present_and_future_date_in_weeks() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_months() + public function test_calculate_diff_between_present_and_past_date_in_months() : void { $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-03-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); @@ -94,7 +94,7 @@ public function test_calculate_diff_between_present_and_past_date_in_months() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_months() + public function test_calculate_diff_between_present_and_future_date_in_months() : void { $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-05-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); @@ -102,7 +102,7 @@ public function test_calculate_diff_between_present_and_future_date_in_months() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_years() + public function test_calculate_diff_between_present_and_past_date_in_years() : void { $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2012-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); @@ -110,7 +110,7 @@ public function test_calculate_diff_between_present_and_past_date_in_years() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_years() + public function test_calculate_diff_between_present_and_future_date_in_years() : void { $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2015-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php index 99b1c11..f32a306 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php @@ -18,7 +18,7 @@ final class PreciseFormatterTest extends TestCase { - public function test_format_compound_datetime_diff() + public function test_format_compound_datetime_diff() : void { $diff = new PreciseDifference( new \DateTime('2015-01-01 00:00:00'), @@ -30,7 +30,7 @@ public function test_format_compound_datetime_diff() $this->assertSame('10 days, 5 hours from now', $formatter->formatDifference($diff)); } - public function test_format_compound_datetime_diff_for_specific_locale() + public function test_format_compound_datetime_diff_for_specific_locale() : void { $diff = new PreciseDifference( new \DateTime('2015-01-01 00:00:00'), diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 23ce537..8ea725d 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -282,7 +282,7 @@ public function humanizeDataProvider() : array public function preciseDifferenceDataProvider() : array { return [ - // Azerbaijani + // Azerbaijani ['2014-04-26 13:00:00', '2014-04-26 12:58:15', '1 dəqiqə, 45 saniyə əvvəl', 'az'], ['2014-04-26 13:00:00', '2014-04-26 11:20:00', '1 saat, 40 dəqiqə əvvəl', 'az'], ['2014-04-26 13:00:00', '2014-04-27 13:15:00', '1 gün, 15 dəqiqə sonra', 'az'], @@ -488,7 +488,7 @@ public function timeUnitDataProvider() : array ->add(TimeUnit::seconds(30)) ->add(TimeUnit::milliseconds(200)), '2 days, 3 hours, 25 minutes, and 30.2 seconds', - 'en' + 'en', ], [RelativeTimeUnit::months(14), '1 year and 2 months', 'en'], @@ -503,9 +503,9 @@ public function timeUnitDataProvider() : array ->add(TimeUnit::seconds(30)) ->add(TimeUnit::milliseconds(200)), '2 dni, 3 godziny, 25 minut i 30.2 sekund', - 'pl' + 'pl', ], - [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'] + [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'], ]; } } diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index 1199877..d0b6142 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -22,67 +22,73 @@ class NumberHumanizerTest extends TestCase * @param $expected * @param $number */ - public function test_return_ordinal_suffix($expected, $number) + public function test_return_ordinal_suffix($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number)); } /** * @dataProvider ordinalIndicatorDutchProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_dutch($expected, $number) + public function test_return_ordinal_suffix_dutch($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'nl')); } /** * @dataProvider ordinalIndicatorIndonesianProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_indonesian($expected, $number) + public function test_return_ordinal_suffix_indonesian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'id')); } /** * @dataProvider ordinalSuffixPtEsItProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_spanish($expected, $number) + public function test_return_ordinal_suffix_spanish($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'es')); } /** * @dataProvider ordinalSuffixPtEsItProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_italian($expected, $number) + public function test_return_ordinal_suffix_italian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'it')); } /** * @dataProvider ordinalSuffixGermanProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_german($expected, $number) + public function test_return_ordinal_suffix_german($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'de')); } /** * @dataProvider ordinalSuffixFrenchProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_french($expected, $number) + public function test_return_ordinal_suffix_french($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'fr')); } @@ -94,7 +100,7 @@ public function test_return_ordinal_suffix_french($expected, $number) * @param $expected * @param $number */ - public function test_ordinalize_numbers($expected, $number) + public function test_ordinalize_numbers($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number)); } @@ -106,7 +112,7 @@ public function test_ordinalize_numbers($expected, $number) * @param $expected * @param $number */ - public function test_ordinalize_numbers_dutch($expected, $number) + public function test_ordinalize_numbers_dutch($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl')); } @@ -118,57 +124,62 @@ public function test_ordinalize_numbers_dutch($expected, $number) * @param $expected * @param $number */ - public function test_ordinalize_numbers_indonesian($expected, $number) + public function test_ordinalize_numbers_indonesian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id')); } /** * @dataProvider ordinalizeDataPtEsItProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_portuguese($expected, $number) + public function test_ordinalize_numbers_portuguese($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'pt')); } /** * @dataProvider ordinalizeDataPtEsItProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_spanish($expected, $number) + public function test_ordinalize_numbers_spanish($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'es')); } /** * @dataProvider ordinalizeDataPtEsItProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_italian($expected, $number) + public function test_ordinalize_numbers_italian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'it')); } /** * @dataProvider ordinalizeDataGermanProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_german($expected, $number) + public function test_ordinalize_numbers_german($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'de')); } /** * @dataProvider ordinalizeDataFrenchProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_french($expected, $number) + public function test_ordinalize_numbers_french($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'fr')); } @@ -176,11 +187,11 @@ public function test_ordinalize_numbers_french($expected, $number) /** * @dataProvider binarySuffixDataProvider * - * @param $expected - * @param $number + * @param $expected + * @param $number * @param string $locale */ - public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') + public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void { $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } @@ -188,24 +199,24 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num /** * @dataProvider preciseBinarySuffixDataProvider * - * @param $expected - * @param $number - * @param string $locale - * @param integer $precision + * @param $expected + * @param $number + * @param string $locale + * @param int $precision */ - public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') + public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void { $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void { $this->expectException(\InvalidArgumentException::class); NumberHumanizer::preciseBinarySuffix(1, -1); } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() : void { $this->expectException(\InvalidArgumentException::class); @@ -215,16 +226,16 @@ public function test_statically_throw_exception_when_converting_to_string_with_p /** * @dataProvider metricSuffixDataProvider * - * @param $expected - * @param $number + * @param $expected + * @param $number * @param string $locale */ - public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') + public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void { $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); } - public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() + public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void { $this->expectException(\InvalidArgumentException::class); @@ -237,7 +248,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_m * @param $expected * @param $number */ - public function test_converts_numbers_to_roman($expected, $number) + public function test_converts_numbers_to_roman($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::toRoman($number)); } @@ -248,7 +259,7 @@ public function test_converts_numbers_to_roman($expected, $number) * @param $expected * @param $number */ - public function test_convert_roman_numbers_to_arabic($number, $expected) + public function test_convert_roman_numbers_to_arabic($number, $expected) : void { $this->assertEquals($expected, NumberHumanizer::fromRoman($number)); } @@ -258,7 +269,7 @@ public function test_convert_roman_numbers_to_arabic($number, $expected) * * @param $number */ - public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) + public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) : void { $this->expectException(\InvalidArgumentException::class); @@ -270,7 +281,7 @@ public function test_statically_throw_exception_when_converting_number_is_out_of * * @param $number */ - public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) + public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) : void { $this->expectException(\InvalidArgumentException::class); @@ -402,6 +413,7 @@ public function ordinalizeDataFrenchProvider() ['-111e', -111], ]; } + /** * @return array */ diff --git a/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php index 1dd46da..274e0bf 100644 --- a/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php @@ -16,7 +16,7 @@ final class WordBreakpointTest extends TestCase { - public function test_calculate_breakpoint_position_when_sentence_is_longer_than_characters_count() + public function test_calculate_breakpoint_position_when_sentence_is_longer_than_characters_count() : void { $wordBreakpoint = new WordBreakpoint(); @@ -28,21 +28,21 @@ public function test_calculate_breakpoint_position_when_sentence_is_longer_than_ $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 0)); } - public function test_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() + public function test_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() : void { $wordBreakpoint = new WordBreakpoint(); $this->assertSame(19, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 20)); } - public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_word() + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_word() : void { $wordBreakpoint = new WordBreakpoint(); $this->assertSame(11, $wordBreakpoint->calculatePosition('Lorem ipsum', 7)); } - public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_space() + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_space() : void { $wordBreakpoint = new WordBreakpoint(); diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 6f318b3..2312c74 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -25,7 +25,7 @@ class StringHumanizerTest extends TestCase * @param $separator * @param array $forbiddenWords */ - public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) + public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void { $this->assertEquals($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); } @@ -38,7 +38,7 @@ public function test_humanize_strings($input, $expected, $capitalize, $separator * @param $charactersCount * @param string $append */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void { $this->assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } @@ -52,7 +52,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char * @param $expected * @param $append */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void { $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } @@ -63,7 +63,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char * @param $text * @param $expected */ - public function test_remove_all_shortcodes_from_text($text, $expected) + public function test_remove_all_shortcodes_from_text($text, $expected) : void { $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); } @@ -74,7 +74,7 @@ public function test_remove_all_shortcodes_from_text($text, $expected) * @param $text * @param $expected */ - public function test_remove_only_shortcode_tags_from_text($text, $expected) + public function test_remove_only_shortcode_tags_from_text($text, $expected) : void { $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); } @@ -107,12 +107,11 @@ public function humanizeStringProvider() ['customer_id', 'Customer id', true, '_', []], ['news_count', 'News count', true, '_', ['id']], ['news-count', 'News count', true, '-', ['id']], - ['news-count', 'news count', false, '-', ['id']] + ['news-count', 'news count', false, '-', ['id']], ]; } /** - * * @return array */ public function truncateStringProvider() @@ -136,12 +135,11 @@ public function truncateStringProvider() [$shortText, 'Short text', 7, '...'], [$shortText, 'Short text', 8, '...'], [$shortText, 'Short text', 9, '...'], - [$shortText, 'Short text', 10, '...'] + [$shortText, 'Short text', 10, '...'], ]; } /** - * * @return array */ public function truncateHtmlStringProvider() @@ -154,14 +152,14 @@ public function truncateHtmlStringProvider() [$text, 30, '
', 'HyperText Markup Language, commonly'], [$text, 50, '', 'HyperText Markup Language, commonly referred to as'], [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], - [$text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], - [$text, 3 , '', 'HyperText'], - [$text, 12 , '', 'HyperText Markup'], - [$text, 50 , '', 'HyperText Markup Language, commonly referred to as'], - [$text, 75 , '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], + [$text, 100, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], + [$text, 3, '', 'HyperText'], + [$text, 12, '', 'HyperText Markup'], + [$text, 50, '', 'HyperText Markup Language, commonly referred to as'], + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], [$text, 100, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], [$text, 50, '', 'HyperText Markup Language, commonly referred to as...', '...'], - [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'] + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'], ]; } } From 85d090067662e513ae6f26344412dce10a5b8c84 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 23 Feb 2021 21:02:31 +0000 Subject: [PATCH 30/87] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae64d77..2a01651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## [Unreleased] - 2021-02-23 ### Added +- [0533da](https://github.com/coduo/php-humanizer/commit/0533da67e2a0ff97a8f504ebc8de469eaca150f1) - **more strict php cs fixer rules** - [@norberttech](https://github.com/norberttech) - [#123](https://github.com/coduo/php-humanizer/pull/123) - **Relative/Time Unit humanizer** - [@norberttech](https://github.com/norberttech) - [#123](https://github.com/coduo/php-humanizer/pull/123) - **TimePeriod humanizer** - [@norberttech](https://github.com/norberttech) - [#123](https://github.com/coduo/php-humanizer/pull/123) - **Support for \DateTimeInterface instead of legacy \DateTime in all DateTimeHumanizers** - [@norberttech](https://github.com/norberttech) From 16074feea40f8d96e2a31d8d18e24425149a6086 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 23 Feb 2021 22:07:33 +0100 Subject: [PATCH 31/87] Fixed missing .php_cs configuration file --- .php_cs | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 .php_cs diff --git a/.php_cs b/.php_cs new file mode 100644 index 0000000..d3e6651 --- /dev/null +++ b/.php_cs @@ -0,0 +1,224 @@ +files() + ->in([ + __DIR__ . '/src', + __DIR__ . '/tests' + ]) + ->notName('*.phpt'); + +if (!\file_exists(__DIR__ . '/var')) { + \mkdir(__DIR__ . '/var'); +} + +/** + * This configuration was taken from https://github.com/sebastianbergmann/phpunit/blob/master/.php_cs.dist + * and slightly adjusted. + */ +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setCacheFile(__DIR__.'/var/.php_cs.cache') + ->setRules([ + 'align_multiline_comment' => true, + 'array_indentation' => true, + 'array_syntax' => ['syntax' => 'short'], + 'blank_line_after_namespace' => true, + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'declare', + 'default', + 'die', + 'do', + 'exit', + 'for', + 'foreach', + 'goto', + 'if', + 'include', + 'include_once', + 'require', + 'require_once', + 'return', + 'switch', + 'throw', + 'try', + 'while', + ], + ], + 'braces' => true, + 'cast_spaces' => true, + 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], + 'combine_consecutive_issets' => true, + 'combine_consecutive_unsets' => true, + 'compact_nullable_typehint' => true, + 'concat_space' => ['spacing' => 'one'], + 'constant_case' => true, + 'declare_equal_normalize' => ['space' => 'none'], + 'declare_strict_types' => true, + 'dir_constant' => true, + 'elseif' => true, + 'encoding' => true, + 'explicit_indirect_variable' => true, + 'explicit_string_variable' => true, + 'full_opening_tag' => true, + 'fully_qualified_strict_types' => true, + 'function_typehint_space' => true, + 'function_declaration' => true, + 'global_namespace_import' => [ + 'import_classes' => false, + 'import_constants' => false, + 'import_functions' => false, + ], + 'heredoc_to_nowdoc' => true, + 'increment_style' => [ + 'style' => PhpCsFixer\Fixer\Operator\IncrementStyleFixer::STYLE_POST, + ], + 'indentation_type' => true, + 'is_null' => true, + 'line_ending' => true, + 'list_syntax' => ['syntax' => 'short'], + 'logical_operators' => true, + 'lowercase_keywords' => true, + 'lowercase_static_reference' => true, + 'magic_constant_casing' => true, + 'magic_method_casing' => true, + 'method_argument_space' => ['ensure_fully_multiline' => true], + 'modernize_types_casting' => false, + 'multiline_comment_opening_closing' => true, + 'multiline_whitespace_before_semicolons' => true, + 'native_constant_invocation' => false, + 'native_function_casing' => false, + 'native_function_invocation' => true, + 'native_function_type_declaration_casing' => true, + 'new_with_braces' => false, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => false, + 'no_closing_tag' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_homoglyph_names' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => ['use' => 'print'], + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_null_property_initialization' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_around_offset' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_superfluous_elseif' => true, + 'no_superfluous_phpdoc_tags' => false, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unneeded_curly_braces' => true, + 'no_unneeded_final_method' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unset_on_property' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'non_printable_character' => true, + 'normalize_index_brace' => true, + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => [ + 'order' => [ + 'use_trait', + 'constant_public', + 'constant_protected', + 'constant_private', + 'property_public_static', + 'property_protected_static', + 'property_private_static', + 'property_public', + 'property_protected', + 'property_private', + 'construct', + 'method_public_static', + 'destruct', + 'magic', + 'phpunit', + 'method_public', + 'method_protected', + 'method_private', + 'method_protected_static', + 'method_private_static', + ], + ], + 'ordered_imports' => [ + 'imports_order' => [ + PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST, + PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION, + PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS, + ] + ], + 'ordered_interfaces' => [ + 'direction' => 'ascend', + 'order' => 'alpha', + ], + 'phpdoc_add_missing_param_annotation' => false, + 'phpdoc_align' => ['align' => 'left'], + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_summary' => true, + 'phpdoc_to_comment' => false, + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => ['groups' => ['simple', 'meta']], + 'phpdoc_types_order' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, + 'protected_to_private' => true, + 'return_assignment' => true, + 'return_type_declaration' => ['space_before' => 'one'], + 'self_accessor' => true, + 'self_static_accessor' => true, + 'semicolon_after_instruction' => true, + 'set_type_to_cast' => true, + 'short_scalar_cast' => true, + 'simple_to_complex_string_variable' => true, + 'simplified_null_return' => false, + 'single_blank_line_at_eof' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'standardize_not_equals' => true, + 'strict_param' => true, + 'ternary_to_null_coalescing' => true, + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => [ + 'elements' => [ + 'const', + 'method', + 'property', + ], + ], + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, + ]) + ->setFinder($finder); \ No newline at end of file From 357846988a421ea2b7af642a48b3eaf39f26db69 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 23 Feb 2021 21:08:05 +0000 Subject: [PATCH 32/87] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a01651..024a069 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) ### Fixed +- [16074f](https://github.com/coduo/php-humanizer/commit/16074feea40f8d96e2a31d8d18e24425149a6086) - **missing .php_cs configuration file** - [@norberttech](https://github.com/norberttech) - [4de08d](https://github.com/coduo/php-humanizer/commit/4de08de0b2463cfc498612a89189385b5de4f66d) - **updating changelog workflow** - [@norberttech](https://github.com/norberttech) - [fc3a04](https://github.com/coduo/php-humanizer/commit/fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69) - **travis configuration** - [@norberttech](https://github.com/norberttech) - [#115](https://github.com/coduo/php-humanizer/pull/115) - **composer autoloading deprecation notice; Support symfony 5** - [@brianwozeniak](https://github.com/brianwozeniak) From 9a1e1399d3a2af2dcaa75a11b9fb63b8f6c39f9d Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 24 Feb 2021 10:43:36 +0100 Subject: [PATCH 33/87] Improve performance by reduce loadings of Translator (#124) --- src/Coduo/PHPHumanizer/Translator/Builder.php | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index e7a0146..d4db121 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -16,21 +16,30 @@ final class Builder { + /** + * @var array + */ + private static array $translators = []; + public static function build(string $locale) : Translator { - $translator = new Translator($locale); - $translator->addLoader('yml', new YamlFileLoader()); + if (!isset(self::$translators[$locale])) { + $translator = new Translator($locale); + $translator->addLoader('yml', new YamlFileLoader()); + + $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); + $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); - $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); - $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + foreach ($filter as $file) { + /* @var $file \SplFileInfo */ + $resourceName = $file->getBasename('.yml'); + [$fileDomain, $fileLocale] = \explode('.', $resourceName); + $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); + } - foreach ($filter as $file) { - /* @var $file \SplFileInfo */ - $resourceName = $file->getBasename('.yml'); - [$fileDomain, $fileLocale] = \explode('.', $resourceName); - $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); + self::$translators[$locale] = $translator; } - return $translator; + return self::$translators[$locale]; } } From dcbc1f0119a0a9b1c62510af24ae50c959feb189 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 24 Feb 2021 09:44:06 +0000 Subject: [PATCH 34/87] Updated CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 024a069..4dcfb3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-02-23 +## [Unreleased] - 2021-02-24 ### Added - [0533da](https://github.com/coduo/php-humanizer/commit/0533da67e2a0ff97a8f504ebc8de469eaca150f1) - **more strict php cs fixer rules** - [@norberttech](https://github.com/norberttech) @@ -17,6 +17,7 @@ - [#119](https://github.com/coduo/php-humanizer/pull/119) - **support azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) ### Changed +- [#124](https://github.com/coduo/php-humanizer/pull/124) - **load Translator only once for given locale** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **minimum required PHP version ^7.4** - [@norberttech](https://github.com/norberttech) - [#118](https://github.com/coduo/php-humanizer/pull/118) - **create azerbaijani translation** - [@4t87ux8](https://github.com/4t87ux8) - [fa52e6](https://github.com/coduo/php-humanizer/commit/fa52e6223eef2f19fbd0a290432b5a878317dca2) - **Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies** - [@norberttech](https://github.com/norberttech) From 9b7942f094fa9fd9de6a43c405ec3bc784cce18e Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 25 Feb 2021 20:22:13 +0000 Subject: [PATCH 35/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dcfb3b..9c20e56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-02-24 +## [4.0.0] - 2021-02-25 ### Added - [0533da](https://github.com/coduo/php-humanizer/commit/0533da67e2a0ff97a8f504ebc8de469eaca150f1) - **more strict php cs fixer rules** - [@norberttech](https://github.com/norberttech) From 89102c231ea3e8e7d9e80c79ba632304daa24fd8 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 27 Feb 2021 22:07:38 +0100 Subject: [PATCH 36/87] Fixed humanization of time unit less than 1 second (#125) * Fixed humanization of time unit less than 1 second * Added support for 0 seconds --- .../Aeon/Calendar/UnitCompound.php | 4 ++- .../Resources/translations/difference.af.yml | 6 ++-- .../Resources/translations/difference.az.yml | 6 ++-- .../Resources/translations/difference.bg.yml | 6 ++-- .../Resources/translations/difference.da.yml | 6 ++-- .../Resources/translations/difference.de.yml | 6 ++-- .../Resources/translations/difference.en.yml | 6 ++-- .../Resources/translations/difference.es.yml | 6 ++-- .../Resources/translations/difference.fr.yml | 6 ++-- .../Resources/translations/difference.id.yml | 6 ++-- .../Resources/translations/difference.it.yml | 6 ++-- .../Resources/translations/difference.ja.yml | 6 ++-- .../Resources/translations/difference.nl.yml | 6 ++-- .../Resources/translations/difference.no.yml | 6 ++-- .../Resources/translations/difference.pl.yml | 8 ++--- .../Resources/translations/difference.pt.yml | 6 ++-- .../translations/difference.pt_BR.yml | 6 ++-- .../Resources/translations/difference.ro.yml | 6 ++-- .../Resources/translations/difference.th.yml | 2 +- .../Resources/translations/difference.tr.yml | 6 ++-- .../translations/difference.zh_CN.yml | 2 +- .../translations/difference.zh_TW.yml | 2 +- .../Tests/Aeon/Calendar/FormatterTest.php | 36 +++++++++++++++++++ 23 files changed, 97 insertions(+), 59 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php index b461b11..117d5e3 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -65,7 +65,7 @@ public function components() : array $compoundResults[] = new CompoundResult(new Minute(), $unit->inTimeMinutes()); } - if ($unit->inTimeSeconds()) { + if ($unit->inTimeSeconds() || $unit->inTimeMilliseconds()) { $seconds = $unit->inTimeSeconds(); if ($unit->inTimeMilliseconds() > 0) { @@ -73,6 +73,8 @@ public function components() : array } $compoundResults[] = new CompoundResult(new Second(), $seconds); + } elseif (!\count($compoundResults)) { + $compoundResults[] = new CompoundResult(new Second(), 0); } return $compoundResults; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml index 788457a..6d4f8dd 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] nou nou" future: "[0,Inf] netnou" second: - past: "{1} %count% sekonde gelede|[2,Inf] %count% sekondes gelede" - future: "{1} %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af" + past: "[0,1] %count% sekonde gelede|[2,Inf] %count% sekondes gelede" + future: "[0,1] %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af" minute: past: "{1} %count% minuut gelede|[2,Inf] %count% minute gelede" future: "{1} %count% minuut van nou af|[2,Inf] %count% minute van nou af" @@ -24,7 +24,7 @@ year: future: "{1} %count% jaar van nou af|[2,Inf] %count% jaar van nou af" compound: - second: "{1} %count% sekonde|[2,Inf] %count% sekondes" + second: "[0,1] %count% sekonde|[2,Inf] %count% sekondes" minute: "{1} %count% minuut|[2,Inf] %count% minute" hour: "{1} %count% uur|[2,Inf] %count% ure" day: "{1} %count% dag|[2,Inf] %count% dae" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml index 08a24fe..7eceb68 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] indi" future: "[0,Inf] indi" second: - past: "{1} %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" - future: "{1} %count% saniyə sonra|[2,Inf] %count% saniyə sonra" + past: "[0,1] %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" + future: "[0,1] %count% saniyə sonra|[2,Inf] %count% saniyə sonra" minute: past: "{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl" future: "{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra" @@ -24,7 +24,7 @@ year: future: "{1} %count% il sonra|[2,Inf] %count% il sonra" compound: - second: "{1} %count% saniyə|[2,Inf] %count% saniyə" + second: "[0,1] %count% saniyə|[2,Inf] %count% saniyə" minute: "{1} %count% dəqiqə|[2,Inf] %count% dəqiqə" hour: "{1} %count% saat|[2,Inf] %count% saat" day: "{1} %count% gün|[2,Inf] %count% gün" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml index 9e035b3..0ef236f 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] в момента" future: "[0,Inf] в момента" second: - past: "{1} преди %count% секунда|[2,Inf] преди %count% секунди" - future: "{1} след %count% секунда|[2,Inf] след %count% секунди" + past: "[0,1] преди %count% секунда|[2,Inf] преди %count% секунди" + future: "[0,1] след %count% секунда|[2,Inf] след %count% секунди" minute: past: "{1} преди %count% минута|[2,Inf] преди %count% минути" future: "{1} след %count% минута|[2,Inf] след %count% минути" @@ -24,7 +24,7 @@ year: future: "{1} след %count% година|[2,Inf] след %count% години" compound: - second: "{1} %count% секунда|[2,Inf] %count% секунди" + second: "[0,1] %count% секунда|[2,Inf] %count% секунди" minute: "{1} %count% минута|[2,Inf] %count% минути" hour: "{1} %count% час|[2,Inf] %count% часа" day: "{1} %count% ден|[2,Inf] %count% дни" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml index de98b09..8be37e2 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] lige nu" future: "[0,Inf] lige nu" second: - past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "{1} %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" + past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "[0,1] %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" minute: past: "{1} %count% minut siden|[2,Inf] %count% minutter siden" future: "{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu" @@ -24,7 +24,7 @@ year: future: "{1} %count% år fra nu|[2,Inf] %count% år fra nu" compound: - second: "{1} %count% sekund|[2,Inf] %count% sekunder" + second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" minute: "{1} %count% minut|[2,Inf] %count% minutter" hour: "{1} %count% time|[2,Inf] %count% timer" day: "{1} %count% dag|[2,Inf] %count% dage" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml index 46fa38d..b5a1e40 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] jetzt gerade" future: "[0,Inf] jetzt gerade" second: - past: "{1} vor %count% Sekunde|[2,Inf] vor %count% Sekunden" - future: "{1} in %count% Sekunde|[2,Inf] in %count% Sekunden" + past: "[0,1] vor %count% Sekunde|[2,Inf] vor %count% Sekunden" + future: "[0,1] in %count% Sekunde|[2,Inf] in %count% Sekunden" minute: past: "{1} vor %count% Minute|[2,Inf] vor %count% Minuten" future: "{1} in %count% Minute|[2,Inf] in %count% Minuten" @@ -24,7 +24,7 @@ year: future: "{1} in %count% Jahr|[2,Inf] in %count% Jahren" compound: - second: "{1} %count% Sekunde|[2,Inf] %count% Sekunden" + second: "[0,1] %count% Sekunde|[2,Inf] %count% Sekunden" minute: "{1} %count% Minute|[2,Inf] %count% Minuten" hour: "{1} %count% Stunde|[2,Inf] %count% Stunden" day: "{1} %count% Tag|[2,Inf] %count% Tagen" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml index df245c7..2a6a906 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] just now" future: "[0,Inf] just now" second: - past: "{1} %count% second ago|[2,Inf] %count% seconds ago" - future: "{1} %count% second from now|[2,Inf] %count% seconds from now" + past: "[0,1] %count% second ago|[2,Inf] %count% seconds ago" + future: "[0,1] %count% second from now|[2,Inf] %count% seconds from now" minute: past: "{1} %count% minute ago|[2,Inf] %count% minutes ago" future: "{1} %count% minute from now|[2,Inf] %count% minutes from now" @@ -24,7 +24,7 @@ year: future: "{1} %count% year from now|[2,Inf] %count% years from now" compound: - second: "{1} %count% second|[2,Inf] %count% seconds" + second: "[0,1] %count% second|[2,Inf] %count% seconds" minute: "{1} %count% minute|[2,Inf] %count% minutes" hour: "{1} %count% hour|[2,Inf] %count% hours" day: "{1} %count% day|[2,Inf] %count% days" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml index 0cc130c..8105a11 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] ahora mismo" future: "[0,Inf] ahora mismo" second: - past: "{1} hace %count% segundo |[2,Inf] hace %count% segundos" - future: "{1} dentro de %count% segundo|[2,Inf] dentro de %count% segundos" + past: "[0,1] hace %count% segundo |[2,Inf] hace %count% segundos" + future: "[0,1] dentro de %count% segundo|[2,Inf] dentro de %count% segundos" minute: past: "{1} hace %count% minuto|[2,Inf] hace %count% minutos" future: "{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos" @@ -24,7 +24,7 @@ year: future: "{1} dentro de %count% año|[2,Inf] dentro de %count% años" compound: - second: "{1} %count% segundo|[2,Inf] %count% segundos" + second: "[0,1] %count% segundo|[2,Inf] %count% segundos" minute: "{1} %count% minuto|[2,Inf] %count% minutos" hour: "{1} %count% hora|[2,Inf] %count% horas" day: "{1} %count% día|[2,Inf] %count% días" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml index 1869933..e89fcec 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] à l'instant" future: "[0,Inf] à l'instant" second: - past: "{1} il y a %count% seconde|[2,Inf] il y a %count% secondes" - future: "{1} il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" + past: "[0,1] il y a %count% seconde|[2,Inf] il y a %count% secondes" + future: "[0,1] il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" minute: past: "{1} il y a %count% minute|[2,Inf] il y a %count% minutes" future: "{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes" @@ -24,7 +24,7 @@ year: future: "{1} il y a maintenant %count% année|[2,Inf] il y a maintenant %count% années" compound: - second: "{1} %count% seconde|[2,Inf] %count% secondes" + second: "[0,1] %count% seconde|[2,Inf] %count% secondes" minute: "{1} %count% minute|[2,Inf] %count% minutes" hour: "{1} %count% heure|[2,Inf] %count% heures" day: "{1} %count% jour|[2,Inf] %count% jours" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml index 8751811..9996408 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] baru saja" future: "[0,Inf] baru saja" second: - past: "{1} %count% detik yang lalu|[2,Inf] %count% detik yang lalu" - future: "{1} %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" + past: "[0,1] %count% detik yang lalu|[2,Inf] %count% detik yang lalu" + future: "[0,1] %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" minute: past: "{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu" future: "{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang" @@ -24,7 +24,7 @@ year: future: "{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang" compound: - second: "{1} %count% detik|[2,Inf] %count% detik" + second: "[0,1] %count% detik|[2,Inf] %count% detik" minute: "{1} %count% menit|[2,Inf] %count% menit" hour: "{1} %count% jam|[2,Inf] %count% jam" day: "{1} %count% hari|[2,Inf] %count% hari" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml index e0f5de5..554365f 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] adesso" future: "[0,Inf] adesso" second: - past: "{1} %count% secondo fa|[2,Inf] %count% secondi fa" - future: "{1} %count% secondo da adesso|[2,Inf] %count% secondi da adesso" + past: "[0,1] %count% secondo fa|[2,Inf] %count% secondi fa" + future: "[0,1] %count% secondo da adesso|[2,Inf] %count% secondi da adesso" minute: past: "{1} %count% minuto fa|[2,Inf] %count% minuti fa" future: "{1} %count% minuto da adesso|[2,Inf] %count% minuti da adesso" @@ -24,7 +24,7 @@ year: future: "{1} %count% anno da adesso|[2,Inf] %count% anni da adesso" compound: - second: "{1} %count% secondo|[2,Inf] %count% secondi" + second: "[0,1] %count% secondo|[2,Inf] %count% secondi" minute: "{1} %count% minuto|[2,Inf] %count% minuti" hour: "{1} %count% ora|[2,Inf] %count% ore" day: "{1} %count% giorno|[2,Inf] %count% giorni" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml index f6dd453..055fa3d 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] たった今" future: "[0,Inf] たった今" second: - past: "{1} %count% 秒前|[2,Inf] %count% 秒前" - future: "{1} %count% 秒後|[2,Inf] %count% 秒後" + past: "[0,1] %count% 秒前|[2,Inf] %count% 秒前" + future: "[0,1] %count% 秒後|[2,Inf] %count% 秒後" minute: past: "{1} %count% 分前|[2,Inf] %count% 分前" future: "{1} %count% 分後|[2,Inf] %count% 分後" @@ -24,7 +24,7 @@ year: future: "{1} %count% 年後|[2,Inf] %count% 年後" compound: - second: "{1} %count% 秒|[2,Inf] %count% 秒" + second: "[0,1] %count% 秒|[2,Inf] %count% 秒" minute: "{1} %count% 分|[2,Inf] %count% 分" hour: "{1} %count% 時間|[2,Inf] %count% 時間" day: "{1} %count% 日|[2,Inf] %count% 日" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml index cbabddd..d36c5cb 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] zojuist" future: "[0,Inf] zojuist" second: - past: "{1} %count% seconde geleden|[2,Inf] %count% seconden geleden" - future: "{1} over %count% seconde|[2,Inf] over %count% seconden" + past: "[0,1] %count% seconde geleden|[2,Inf] %count% seconden geleden" + future: "[0,1] over %count% seconde|[2,Inf] over %count% seconden" minute: past: "{1} %count% minuut geleden|[2,Inf] %count% minuten geleden" future: "{1} over %count% minuut|[2,Inf] over %count% minuten" @@ -24,7 +24,7 @@ year: future: "{1} over %count% jaar|[2,Inf] over %count% jaren" compound: - second: "{1} %count% seconde|[2,Inf] %count% seconden" + second: "[0,1] %count% seconde|[2,Inf] %count% seconden" minute: "{1} %count% minuut|[2,Inf] %count% minuten" hour: "{1} %count% uur|[2,Inf] %count% uren" day: "{1} %count% dag|[2,Inf] %count% dagen" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml index 3e9bac1..06a7f3e 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] akkurat nå" future: "[0,Inf] akkurat nå" second: - past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "{1} %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" + past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "[0,1] %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" minute: past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" @@ -24,7 +24,7 @@ year: future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" compound: - second: "{1} %count% sekund|[2,Inf] %count% sekunder" + second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" minute: "{1} %count% minutt|[2,Inf] %count% minutter" hour: "{1} %count% time|[2,Inf] %count% timer" day: "{1} %count% dag|[2,Inf] %count% dager" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml index 23be15d..45fcc71 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] w tym momencie" future: "[0,Inf] w tym momencie" second: - past: "{1} sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu" - future: "{1} za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund" + past: "[0,1] sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu" + future: "[0,1] za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund" minute: past: "{1} minutę temu|[2, 4] %count% minuty temu|[5,Inf] %count% minut temu" future: "{1} za minutę|[2, 4] za %count% minuty|[5,Inf] za %count% minut" @@ -22,9 +22,9 @@ month: year: past: "{1} rok temu|[2, 4] %count% lata temu|[5,Inf] %count% lat temu" future: "{1} za rok|[2, 4] za %count% lata|[5,Inf] za %count% lat" - + compound: - second: "{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund" + second: "[0,1] %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund" minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" hour: "{1} %count% godzina|[2,4] %count% godziny|[5,Inf] %count% godzin" day: "{1} %count% dzień|[2,Inf] %count% dni" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml index 7fe2901..a5e7ea7 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] agora" future: "[0,Inf] agora" second: - past: "{1} %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "{1} %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" + past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" + future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" minute: past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" @@ -24,7 +24,7 @@ year: future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" compound: - second: "{1} %count% segundo|[2,Inf] %count% segundos" + second: "[0,1] %count% segundo|[2,Inf] %count% segundos" minute: "{1} %count% minuto|[2,Inf] %count% minutos" hour: "{1} %count% hora|[2,Inf] %count% horas" day: "{1} %count% dia|[2,Inf] %count% dias" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml index b771ff4..221b8bf 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] atrás" future: "[0,Inf] a partir de agora" second: - past: "{1} %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "{1} %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" + past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" + future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" minute: past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" @@ -24,7 +24,7 @@ year: future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" compound: - second: "{1} %count% segundo|[2,Inf] %count% segundos" + second: "[0,1] %count% segundo|[2,Inf] %count% segundos" minute: "{1} %count% minuto|[2,Inf] %count% minutos" hour: "{1} %count% hora|[2,Inf] %count% horas" day: "{1} %count% dia|[2,Inf] %count% dias" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml index 6c54c71..9d83184 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] mai înainte" future: "[0,Inf] imediat" second: - past: "{1} %count% secundă în urmă|[2,Inf] %count% secunde în urmă" - future: "{1} %count% secundă de acum|[2,Inf] %count% secundă de acum" + past: "[0,1] %count% secundă în urmă|[2,Inf] %count% secunde în urmă" + future: "[0,1] %count% secundă de acum|[2,Inf] %count% secundă de acum" minute: past: "{1} %count% minut în urmă|[2,Inf] %count% minute în urmă" future: "{1} %count% minut de acum|[2,Inf] %count% minute de acum" @@ -24,7 +24,7 @@ year: future: "{1} %count% an de acum|[2,Inf] %count% ani de acum" compound: - second: "{1} %count% secundă|[2,Inf] %count% secunde" + second: "[0,1] %count% secundă|[2,Inf] %count% secunde" minute: "{1} %count% minut|[2,Inf] %count% minute" hour: "{1} %count% oră|[2,Inf] %count% ore" day: "{1} %count% zi|[2,Inf] %count% zile" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml index 69f30e3..ca7da99 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml @@ -24,7 +24,7 @@ year: future: "[1,Inf] อีก %count% ปี" compound: - second: "[1,Inf] %count% วินาที" + second: "[0,Inf] %count% วินาที" minute: "[1,Inf] %count% นาที" hour: "[1,Inf] %count% ชั่วโมง" day: "[1,Inf] %count% วัน" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml index 8573ef9..04325cf 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] şimdi" future: "[0,Inf] şimdi" second: - past: "{1} %count% saniye önce|[2,Inf] %count% saniye önce" - future: "{1} %count% saniye sonra|[2,Inf] %count% saniye sonra" + past: "[0,1] %count% saniye önce|[2,Inf] %count% saniye önce" + future: "[0,1] %count% saniye sonra|[2,Inf] %count% saniye sonra" minute: past: "{1} %count% dakika önce|[2,Inf] %count% dakika önce" future: "{1} %count% dakika sonra|[2,Inf] %count% dakika sonra" @@ -24,7 +24,7 @@ year: future: "{1} %count% yıl sonra|[2,Inf] %count% yıl sonra" compound: - second: "{1} %count% saniye|[2,Inf] %count% saniye" + second: "[0,1] %count% saniye|[2,Inf] %count% saniye" minute: "{1} %count% dakika|[2,Inf] %count% dakika" hour: "{1} %count% saat|[2,Inf] %count% saat" day: "{1} %count% gün|[2,Inf] %count% gün" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml index 4d5cc40..d0bddc5 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml @@ -24,7 +24,7 @@ year: future: "[1,Inf] %count% 年后" compound: - second: "[1,Inf] %count% 秒" + second: "[0,Inf] %count% 秒" minute: "[1,Inf] %count% 分钟" hour: "[1,Inf] %count% 小时" day: "[1,Inf] %count% 天" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml index 5be5bb9..b11a092 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml @@ -24,7 +24,7 @@ year: future: "[1,Inf] %count% 年後" compound: - second: "[1,Inf] %count% 秒" + second: "[0,Inf] %count% 秒" minute: "[1,Inf] %count% 分鐘" hour: "[1,Inf] %count% 小時" day: "[1,Inf] %count% 天" diff --git a/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php index dca4d01..a061e97 100644 --- a/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php @@ -46,4 +46,40 @@ public function test_format_relative_time_unit() : void $formatter->timeUnit($timeUnit) ); } + + public function test_format_time_units_smaller_than_1_sec() : void + { + $timeUnit = TimeUnit::milliseconds(200); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '0.2 second', + $formatter->timeUnit($timeUnit) + ); + } + + public function test_format_time_units_smaller_than_1_ms() : void + { + $timeUnit = TimeUnit::precise(0.000002); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '0 second', + $formatter->timeUnit($timeUnit) + ); + } + + public function test_format_zero_seconds_time_unit() : void + { + $timeUnit = TimeUnit::precise(0); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '0 second', + $formatter->timeUnit($timeUnit) + ); + } } From e31a256ddf5cc056cdb011c4159df69c3bd4b15b Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 27 Feb 2021 21:08:01 +0000 Subject: [PATCH 37/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c20e56..039e130 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2021-02-27 + +### Fixed +- [#125](https://github.com/coduo/php-humanizer/pull/125) - **humanization of time unit less than 1 second** - [@norberttech](https://github.com/norberttech) + ## [4.0.0] - 2021-02-25 ### Added From 30e08d28716d473b061875e27c92d47f24190fce Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 27 Feb 2021 21:09:43 +0000 Subject: [PATCH 38/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 039e130..8669bd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-02-27 +## [4.0.1] - 2021-02-27 ### Fixed - [#125](https://github.com/coduo/php-humanizer/pull/125) - **humanization of time unit less than 1 second** - [@norberttech](https://github.com/norberttech) From 77e2f496eb65fb3cdfabacf25c54c6f0cbf333e6 Mon Sep 17 00:00:00 2001 From: "Chun-Sheng, Li" Date: Fri, 12 Mar 2021 23:19:05 +0800 Subject: [PATCH 39/87] Improve assertions (#126) --- .../Tests/DateTime/DifferenceTest.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php index c1dd340..23e8b1e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php @@ -43,7 +43,7 @@ public function test_calculate_diff_between_present_and_past_date_in_hours() : v $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 11:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_hours() : void @@ -51,7 +51,7 @@ public function test_calculate_diff_between_present_and_future_date_in_hours() : $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 16:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); $this->assertSame(3, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_days() : void @@ -59,7 +59,7 @@ public function test_calculate_diff_between_present_and_past_date_in_days() : vo $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-09')); $this->assertInstanceOf(Day::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_days() : void @@ -67,7 +67,7 @@ public function test_calculate_diff_between_present_and_future_date_in_days() : $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-11')); $this->assertInstanceOf(Day::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_weeks() : void @@ -75,7 +75,7 @@ public function test_calculate_diff_between_present_and_past_date_in_weeks() : v $diff = new Difference(new \DateTime('2014-04-15'), new \DateTime('2014-04-01')); $this->assertInstanceOf(Week::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_weeks() : void @@ -83,7 +83,7 @@ public function test_calculate_diff_between_present_and_future_date_in_weeks() : $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-04-15')); $this->assertInstanceOf(Week::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_months() : void @@ -91,7 +91,7 @@ public function test_calculate_diff_between_present_and_past_date_in_months() : $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-03-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_months() : void @@ -99,7 +99,7 @@ public function test_calculate_diff_between_present_and_future_date_in_months() $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-05-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_years() : void @@ -107,7 +107,7 @@ public function test_calculate_diff_between_present_and_past_date_in_years() : v $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2012-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_years() : void @@ -115,6 +115,6 @@ public function test_calculate_diff_between_present_and_future_date_in_years() : $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2015-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } } From fbf22ae22157f569f24ff23710e96264a272adb6 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Fri, 12 Mar 2021 15:19:32 +0000 Subject: [PATCH 40/87] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8669bd4..9a27d3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [Unreleased] - 2021-03-12 + +### Changed +- [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertTrue` to assert expected is `true`.** - [@peter279k](https://github.com/peter279k) +- [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertFalse` to assert expected is `false`.** - [@peter279k](https://github.com/peter279k) + ## [4.0.1] - 2021-02-27 ### Fixed From fb264c8fbfb94f7a10272ac9fca576d8aa053b4a Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 20 Jun 2021 16:31:34 +0200 Subject: [PATCH 41/87] Updated Aeon Calendar dependency --- composer.json | 2 +- composer.lock | 212 ++++++++++++++++++++++++++------------------------ 2 files changed, 111 insertions(+), 103 deletions(-) diff --git a/composer.json b/composer.json index 92dbc7a..2157c14 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "php": "^7.4 | ^8.0", "symfony/translation": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0", - "aeon-php/calendar": ">=0.16.1" + "aeon-php/calendar": "^0.16.1 || ^1.0" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock index 1753b0c..2d9cafb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,24 +4,24 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c74a1cca580ca33e81761900ec3f88f1", + "content-hash": "8f063f4f28cc22ab51375a30fefe67b7", "packages": [ { "name": "aeon-php/calendar", - "version": "0.16.1", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "9509656c6b01024aad6158628fc8c950f9cf1199" + "reference": "0e1d1a958283b06d40748355547b455418a52be5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/9509656c6b01024aad6158628fc8c950f9cf1199", - "reference": "9509656c6b01024aad6158628fc8c950f9cf1199", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/0e1d1a958283b06d40748355547b455418a52be5", + "reference": "0e1d1a958283b06d40748355547b455418a52be5", "shasum": "" }, "require": { - "php": ">=7.4.2" + "php": "^7.4.2 || ^8.0" }, "require-dev": { "ext-bcmath": "*" @@ -51,7 +51,7 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/0.16.1" + "source": "https://github.com/aeon-php/calendar/tree/1.0.0" }, "funding": [ { @@ -59,20 +59,20 @@ "type": "github" } ], - "time": "2021-02-23T08:58:57+00:00" + "time": "2021-06-06T10:10:28+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { @@ -81,7 +81,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -110,7 +110,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" }, "funding": [ { @@ -126,20 +126,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.22.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { @@ -151,7 +151,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -189,7 +189,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { @@ -205,20 +205,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", "shasum": "" }, "require": { @@ -230,7 +230,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -269,7 +269,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" }, "funding": [ { @@ -285,20 +285,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-05-27T09:27:20+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.22.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", "shasum": "" }, "require": { @@ -307,7 +307,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -352,7 +352,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" }, "funding": [ { @@ -368,24 +368,25 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/translation", - "version": "v5.2.3", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949" + "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/c021864d4354ee55160ddcfd31dc477a1bc77949", - "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949", + "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^2.3" @@ -398,7 +399,7 @@ "symfony/yaml": "<4.4" }, "provide": { - "symfony/translation-implementation": "2.0" + "symfony/translation-implementation": "2.3" }, "require-dev": { "psr/log": "~1.0", @@ -408,6 +409,7 @@ "symfony/finder": "^4.4|^5.0", "symfony/http-kernel": "^5.0", "symfony/intl": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "^1.21", "symfony/service-contracts": "^1.1.2|^2", "symfony/yaml": "^4.4|^5.0" }, @@ -445,7 +447,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v5.2.3" + "source": "https://github.com/symfony/translation/tree/v5.3.2" }, "funding": [ { @@ -461,20 +463,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2021-06-06T09:51:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + "reference": "95c812666f3e91db75385749fe219c5e494c7f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95", "shasum": "" }, "require": { @@ -486,7 +488,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -523,7 +525,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" }, "funding": [ { @@ -539,20 +541,20 @@ "type": "tidelift" } ], - "time": "2020-09-28T13:05:58+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/yaml", - "version": "v5.2.3", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0" + "reference": "71719ab2409401711d619765aa255f9d352a59b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/338cddc6d74929f6adf19ca5682ac4b8e109cdb0", - "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0", + "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", + "reference": "71719ab2409401711d619765aa255f9d352a59b2", "shasum": "" }, "require": { @@ -598,7 +600,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.3" + "source": "https://github.com/symfony/yaml/tree/v5.3.2" }, "funding": [ { @@ -614,7 +616,7 @@ "type": "tidelift" } ], - "time": "2021-02-03T04:42:09+00:00" + "time": "2021-06-06T09:51:56+00:00" } ], "packages-dev": [ @@ -747,16 +749,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.4", + "version": "v4.10.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", "shasum": "" }, "require": { @@ -797,9 +799,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" }, - "time": "2020-12-20T10:01:03+00:00" + "time": "2021-05-03T19:11:20+00:00" }, { "name": "phar-io/manifest", @@ -1072,16 +1074,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.2", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { @@ -1133,22 +1135,22 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" }, - "time": "2020-12-19T10:15:11+00:00" + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -1204,7 +1206,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" }, "funding": [ { @@ -1212,7 +1214,7 @@ "type": "github" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1457,16 +1459,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.2", + "version": "9.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276", + "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276", "shasum": "" }, "require": { @@ -1496,7 +1498,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", + "sebastian/type": "^2.3.2", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -1544,7 +1546,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5" }, "funding": [ { @@ -1556,7 +1558,7 @@ "type": "github" } ], - "time": "2021-02-02T14:45:58+00:00" + "time": "2021-06-05T04:49:07+00:00" }, { "name": "sebastian/cli-parser", @@ -2064,16 +2066,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { @@ -2116,7 +2118,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" }, "funding": [ { @@ -2124,7 +2126,7 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { "name": "sebastian/lines-of-code", @@ -2411,20 +2413,21 @@ "type": "github" } ], + "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", "shasum": "" }, "require": { @@ -2459,7 +2462,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" }, "funding": [ { @@ -2467,7 +2470,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2021-06-15T12:49:02+00:00" }, { "name": "sebastian/version", @@ -2630,30 +2633,35 @@ }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -2677,9 +2685,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], From d941401805af0daca3ae3b449f4e39f65e4e1142 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sun, 20 Jun 2021 14:32:02 +0000 Subject: [PATCH 42/87] Updated CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a27d3f..783ee90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ -## [Unreleased] - 2021-03-12 +## [Unreleased] - 2021-06-20 ### Changed +- [fb264c](https://github.com/coduo/php-humanizer/commit/fb264c8fbfb94f7a10272ac9fca576d8aa053b4a) - **Aeon Calendar dependency** - [@norberttech](https://github.com/norberttech) - [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertTrue` to assert expected is `true`.** - [@peter279k](https://github.com/peter279k) - [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertFalse` to assert expected is `false`.** - [@peter279k](https://github.com/peter279k) From 6bbcad9921c469d647bae9f62547375b6a6ee4c4 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sun, 20 Jun 2021 14:33:48 +0000 Subject: [PATCH 43/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 783ee90..4f4c82f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-06-20 +## [4.0.2] - 2021-06-20 ### Changed - [fb264c](https://github.com/coduo/php-humanizer/commit/fb264c8fbfb94f7a10272ac9fca576d8aa053b4a) - **Aeon Calendar dependency** - [@norberttech](https://github.com/norberttech) From 57c6ed978f48dc810e5e4540cbec022c57fecb3c Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 1 Jul 2021 22:12:38 +0200 Subject: [PATCH 44/87] Delete FUNDING.yml --- .github/FUNDING.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 4f8e199..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: [norberttech] From e3cd26b89539400c11563f3d3a1e45abb92bb261 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 1 Jul 2021 20:13:01 +0000 Subject: [PATCH 45/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f4c82f..7279915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2021-07-01 + +### Changed +- [57c6ed](https://github.com/coduo/php-humanizer/commit/57c6ed978f48dc810e5e4540cbec022c57fecb3c) - **Delete FUNDING.yml** - [@norberttech](https://github.com/norberttech) + ## [4.0.2] - 2021-06-20 ### Changed From 6a369d9f17855736c5f38261f6765d084e177da2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 13 Sep 2021 12:20:57 +0200 Subject: [PATCH 46/87] Update tests.yml --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5a2eb63..3df048c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,7 +6,7 @@ on: branches: - "4.x" schedule: - - cron: '* 8 * * *' + - cron: '0 8 * * *' jobs: compatibility: From 3107e2b6a568726f4cd40a23847ce1e305c99c95 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 13 Sep 2021 12:21:07 +0200 Subject: [PATCH 47/87] Update static-analyze.yml --- .github/workflows/static-analyze.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 45b6c03..0065d6a 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -6,7 +6,7 @@ on: branches: - "4.x" schedule: - - cron: '* 8 * * *' + - cron: '0 8 * * *' jobs: compatibility: @@ -74,4 +74,4 @@ jobs: run: "composer install --no-interaction --no-progress --no-suggest" - name: "Static Analyze" - run: "composer static:analyze" \ No newline at end of file + run: "composer static:analyze" From 5a28da797b941d35d03940c4d19fee386667ccd1 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Mon, 13 Sep 2021 10:21:17 +0000 Subject: [PATCH 48/87] Updated CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7279915..7da77d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ -## [Unreleased] - 2021-07-01 +## [Unreleased] - 2021-09-13 ### Changed +- [3107e2](https://github.com/coduo/php-humanizer/commit/3107e2b6a568726f4cd40a23847ce1e305c99c95) - **Update static-analyze.yml** - [@norberttech](https://github.com/norberttech) +- [6a369d](https://github.com/coduo/php-humanizer/commit/6a369d9f17855736c5f38261f6765d084e177da2) - **Update tests.yml** - [@norberttech](https://github.com/norberttech) - [57c6ed](https://github.com/coduo/php-humanizer/commit/57c6ed978f48dc810e5e4540cbec022c57fecb3c) - **Delete FUNDING.yml** - [@norberttech](https://github.com/norberttech) ## [4.0.2] - 2021-06-20 From e5e75672efb7b18e4d1195afabd374fb59bf67d2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Tue, 7 Jun 2022 20:50:10 +0200 Subject: [PATCH 49/87] Add support for php 8.1 dependencies (#129) * Add support for php 8.1 dependencies * Replaced phive with separated composer for tools --- .gitattributes | 5 +- .github/workflows/static-analyze.yml | 14 +- .github/workflows/tests.yml | 15 +- .gitignore | 3 +- .phive/phars.xml | 6 - .php_cs => .php-cs-fixer.php | 20 +- composer.json | 29 +- composer.lock | 465 +- psalm.xml | 3 +- .../PHPHumanizer/Collection/Formatter.php | 8 + .../PHPHumanizer/Number/RomanNumeral.php | 2 +- .../PHPHumanizer/String/BinarySuffix.php | 4 +- .../PHPHumanizer/String/MetricSuffix.php | 2 + .../PHPHumanizer/String/WordBreakpoint.php | 8 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 2 +- tools/.gitignore | 1 + tools/composer.json | 11 + tools/composer.lock | 4827 +++++++++++++++++ tools/php-cs-fixer | Bin 0 -> 1852521 bytes 19 files changed, 5127 insertions(+), 298 deletions(-) delete mode 100644 .phive/phars.xml rename .php_cs => .php-cs-fixer.php (95%) create mode 100644 tools/.gitignore create mode 100644 tools/composer.json create mode 100644 tools/composer.lock create mode 100755 tools/php-cs-fixer diff --git a/.gitattributes b/.gitattributes index d5fe021..85ff30c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,10 +2,11 @@ *.phpt text eol=lf /composer.lock export-ignore /.github/ export-ignore -/.phive/ export-ignore /tests export-ignore +/tools export-ignore /.gitattributes export-ignore /.gitignore export-ignore -/.php_cs export-ignore +/.php-cs-fixer.php export-ignore +/baseline.xml export-ignore /phpstan.neon export-ignore /phpunit.xml export-ignore \ No newline at end of file diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 0065d6a..638387e 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -33,16 +33,7 @@ jobs: coverage: "pcov" php-version: "${{ matrix.php-version }}" ini-values: memory_limit=-1 - tools: phive, composer:v2 - - - name: "Cache Phive dependencies" - uses: "actions/cache@v2" - with: - path: | - ~/.phive - key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" - restore-keys: | - ${{ runner.os }}-phive- + tools: composer:v2 - name: "Get Composer Cache Directory" id: composer-cache @@ -58,9 +49,6 @@ jobs: restore-keys: | php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - - name: "Install tools" - run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" - - name: "Install lowest dependencies" if: ${{ matrix.dependencies == 'lowest' }} run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3df048c..a2e656d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,6 +23,7 @@ jobs: php-version: - "7.4" - "8.0" + - "8.1" operating-system: - "ubuntu-latest" @@ -36,16 +37,7 @@ jobs: coverage: "pcov" php-version: "${{ matrix.php-version }}" ini-values: memory_limit=-1 - tools: phive, composer:v2 - - - name: "Cache Phive dependencies" - uses: "actions/cache@v2" - with: - path: | - ~/.phive - key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" - restore-keys: | - ${{ runner.os }}-phive- + tools: composer:v2 - name: "Get Composer Cache Directory" id: composer-cache @@ -61,9 +53,6 @@ jobs: restore-keys: | php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - - name: "Install tools" - run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" - - name: "Install lowest dependencies" if: ${{ matrix.dependencies == 'lowest' }} run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" diff --git a/.gitignore b/.gitignore index 482dd47..a69f258 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ vendor/ bin/ -var/ -tools/ \ No newline at end of file +var/ \ No newline at end of file diff --git a/.phive/phars.xml b/.phive/phars.xml deleted file mode 100644 index a00e5c5..0000000 --- a/.phive/phars.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/.php_cs b/.php-cs-fixer.php similarity index 95% rename from .php_cs rename to .php-cs-fixer.php index d3e6651..66ddb29 100644 --- a/.php_cs +++ b/.php-cs-fixer.php @@ -4,9 +4,8 @@ ->files() ->in([ __DIR__ . '/src', - __DIR__ . '/tests' - ]) - ->notName('*.phpt'); + __DIR__ . '/tests', + ]); if (!\file_exists(__DIR__ . '/var')) { \mkdir(__DIR__ . '/var'); @@ -16,7 +15,9 @@ * This configuration was taken from https://github.com/sebastianbergmann/phpunit/blob/master/.php_cs.dist * and slightly adjusted. */ -return PhpCsFixer\Config::create() +$config = new PhpCsFixer\Config(); + +return $config ->setRiskyAllowed(true) ->setCacheFile(__DIR__.'/var/.php_cs.cache') ->setRules([ @@ -30,7 +31,6 @@ 'continue', 'declare', 'default', - 'die', 'do', 'exit', 'for', @@ -50,7 +50,7 @@ ], 'braces' => true, 'cast_spaces' => true, - 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], + 'class_attributes_separation' => ['elements' => ['const'=>'one', 'method'=>'one', 'property'=>'one']], 'combine_consecutive_issets' => true, 'combine_consecutive_unsets' => true, 'compact_nullable_typehint' => true, @@ -61,6 +61,7 @@ 'dir_constant' => true, 'elseif' => true, 'encoding' => true, + 'echo_tag_syntax' => true, 'explicit_indirect_variable' => true, 'explicit_string_variable' => true, 'full_opening_tag' => true, @@ -85,13 +86,13 @@ 'lowercase_static_reference' => true, 'magic_constant_casing' => true, 'magic_method_casing' => true, - 'method_argument_space' => ['ensure_fully_multiline' => true], + 'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'], 'modernize_types_casting' => false, 'multiline_comment_opening_closing' => true, 'multiline_whitespace_before_semicolons' => true, 'native_constant_invocation' => false, 'native_function_casing' => false, - 'native_function_invocation' => true, + 'native_function_invocation' => ['include'=>['@all']], 'native_function_type_declaration_casing' => true, 'new_with_braces' => false, 'no_alias_functions' => true, @@ -112,7 +113,6 @@ 'no_null_property_initialization' => true, 'no_php4_constructor' => true, 'no_short_bool_cast' => true, - 'no_short_echo_tag' => true, 'no_singleline_whitespace_before_semicolons' => true, 'no_spaces_after_function_name' => true, 'no_spaces_around_offset' => true, @@ -208,7 +208,7 @@ 'standardize_not_equals' => true, 'strict_param' => true, 'ternary_to_null_coalescing' => true, - 'trailing_comma_in_multiline_array' => true, + 'trailing_comma_in_multiline' => true, 'trim_array_spaces' => true, 'unary_operator_spaces' => true, 'visibility_required' => [ diff --git a/composer.json b/composer.json index 2157c14..7be652c 100644 --- a/composer.json +++ b/composer.json @@ -15,9 +15,9 @@ } ], "require": { - "php": "^7.4 | ^8.0", - "symfony/translation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0", + "php": "~7.4 || ~8.0 || ~8.1", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", "aeon-php/calendar": "^0.16.1 || ^1.0" }, "require-dev": { @@ -45,20 +45,21 @@ "@static:analyze", "@test" ], - "cs:php:fix": [ - "tools/php-cs-fixer fix --using-cache=no" + "test": [ + "tools/vendor/bin/phpunit" ], - "test" : [ - "phpunit" + "static:analyze": [ + "tools/vendor/bin/psalm --output-format=compact", + "tools/vendor/bin/phpstan analyze -c phpstan.neon", + "tools/vendor/bin/php-cs-fixer fix --dry-run" ], - "test:mutation": [ - "Composer\\Config::disableProcessTimeout", - "tools/infection" + "cs:php:fix": "tools/vendor/bin/php-cs-fixer fix", + "tools:install": "composer install --working-dir=./tools", + "post-install-cmd": [ + "@tools:install" ], - "static:analyze": [ - "tools/psalm --shepherd --stats", - "tools/phpstan analyze -c phpstan.neon", - "tools/php-cs-fixer fix --dry-run" + "post-update-cmd": [ + "@tools:install" ] } } diff --git a/composer.lock b/composer.lock index 2d9cafb..534a626 100644 --- a/composer.lock +++ b/composer.lock @@ -4,24 +4,24 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8f063f4f28cc22ab51375a30fefe67b7", + "content-hash": "4204f17fb768e8a680f1250930b5d246", "packages": [ { "name": "aeon-php/calendar", - "version": "1.0.0", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "0e1d1a958283b06d40748355547b455418a52be5" + "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/0e1d1a958283b06d40748355547b455418a52be5", - "reference": "0e1d1a958283b06d40748355547b455418a52be5", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", + "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", "shasum": "" }, "require": { - "php": "^7.4.2 || ^8.0" + "php": "^7.4.2 || ~8.0 || ~8.1" }, "require-dev": { "ext-bcmath": "*" @@ -51,28 +51,22 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.0" + "source": "https://github.com/aeon-php/calendar/tree/1.0.4" }, - "funding": [ - { - "url": "https://github.com/norberttech", - "type": "github" - } - ], - "time": "2021-06-06T10:10:28+00:00" + "time": "2022-01-28T13:12:23+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -81,7 +75,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -110,7 +104,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" }, "funding": [ { @@ -126,32 +120,35 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -159,12 +156,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -189,7 +186,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -205,32 +202,35 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -238,12 +238,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -269,7 +269,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -285,20 +285,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -307,7 +307,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -315,12 +315,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -352,7 +352,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -368,31 +368,32 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/translation", - "version": "v5.3.2", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" + "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "url": "https://api.github.com/repos/symfony/translation/zipball/1639abc1177d26bcd4320e535e664cef067ab0ca", + "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "conflict": { "symfony/config": "<4.4", + "symfony/console": "<5.3", "symfony/dependency-injection": "<5.0", "symfony/http-kernel": "<5.0", "symfony/twig-bundle": "<5.0", @@ -402,16 +403,17 @@ "symfony/translation-implementation": "2.3" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -447,7 +449,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "source": "https://github.com/symfony/translation/tree/v5.4.9" }, "funding": [ { @@ -463,20 +465,20 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-05-06T12:33:37+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07", + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07", "shasum": "" }, "require": { @@ -488,7 +490,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -525,7 +527,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1" }, "funding": [ { @@ -541,32 +543,32 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "71719ab2409401711d619765aa255f9d352a59b2" + "reference": "e80f87d2c9495966768310fc531b487ce64237a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", - "reference": "71719ab2409401711d619765aa255f9d352a59b2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -600,7 +602,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.2" + "source": "https://github.com/symfony/yaml/tree/v5.4.3" }, "funding": [ { @@ -616,35 +618,36 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-01-26T16:32:32+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -671,7 +674,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -687,41 +690,42 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -737,7 +741,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -745,20 +749,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nikic/php-parser", - "version": "v4.10.5", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -799,22 +803,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "time": "2021-05-03T19:11:20+00:00" + "time": "2022-05-31T20:59:12+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -859,22 +863,22 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -910,9 +914,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -969,16 +973,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -989,7 +993,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -1019,22 +1024,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -1042,7 +1047,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -1068,39 +1074,39 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -1135,29 +1141,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", + "nikic/php-parser": "^4.13.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1206,7 +1212,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" }, "funding": [ { @@ -1214,20 +1220,20 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2022-03-07T09:28:20+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -1266,7 +1272,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -1274,7 +1280,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -1459,16 +1465,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.5", + "version": "9.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276" + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276", - "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "shasum": "" }, "require": { @@ -1480,11 +1486,11 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -1498,7 +1504,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.2", + "sebastian/type": "^3.0", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -1519,11 +1525,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1546,11 +1552,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -1558,7 +1564,7 @@ "type": "github" } ], - "time": "2021-06-05T04:49:07+00:00" + "time": "2022-04-01T12:37:26+00:00" }, { "name": "sebastian/cli-parser", @@ -1926,16 +1932,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -1977,7 +1983,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -1985,20 +1991,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { @@ -2047,14 +2053,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" }, "funding": [ { @@ -2062,20 +2068,20 @@ "type": "github" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-11-11T14:18:36+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -2118,7 +2124,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -2126,7 +2132,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -2413,33 +2419,32 @@ "type": "github" } ], - "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2462,7 +2467,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" }, "funding": [ { @@ -2470,7 +2475,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-03-15T09:54:48+00:00" }, { "name": "sebastian/version", @@ -2527,16 +2532,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -2565,7 +2570,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -2573,20 +2578,20 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "thunderer/shortcode", - "version": "v0.7.4", + "version": "v0.7.5", "source": { "type": "git", "url": "https://github.com/thunderer/Shortcode.git", - "reference": "79a219febd774ba1ee66a2992fee1145b4367561" + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/79a219febd774ba1ee66a2992fee1145b4367561", - "reference": "79a219febd774ba1ee66a2992fee1145b4367561", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/a4fee30613bd46efb421f8305aff0466a3268a99", + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99", "shasum": "" }, "require": { @@ -2627,27 +2632,27 @@ ], "support": { "issues": "https://github.com/thunderer/Shortcode/issues", - "source": "https://github.com/thunderer/Shortcode/tree/v0.7.4" + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" }, - "time": "2020-03-08T11:25:13+00:00" + "time": "2022-01-13T18:53:33+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -2685,9 +2690,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], @@ -2696,8 +2701,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.4 | ^8.0" + "php": "~7.4 || ~8.0 || ~8.1" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.2.0" } diff --git a/psalm.xml b/psalm.xml index 7d8635e..e836113 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,16 +1,17 @@ + diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 8912ad8..79d8eac 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -26,6 +26,8 @@ public function __construct(TranslatorInterface $translator, string $catalogue = } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ public function format(array $collection, int $limit = null) : string @@ -52,6 +54,8 @@ public function format(array $collection, int $limit = null) : string } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count) : string @@ -67,6 +71,8 @@ private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, i } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ private function formatCommaSeparated(array $collection, int $count) : string @@ -80,6 +86,8 @@ private function formatCommaSeparated(array $collection, int $count) : string } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ private function formatOnlyTwo(array $collection) : string diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index e27a3f2..8141d5a 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -83,7 +83,7 @@ public function toRoman($number) : string */ public function fromRoman(string $string) { - if (\mb_strlen((string) $string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, (string) $string)) { + if (\mb_strlen($string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, $string)) { throw new \InvalidArgumentException(); } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index 25f058f..9332d4a 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -44,7 +44,7 @@ public function __construct(int $number, string $locale = 'en', int $precision = $this->setSpecificPrecisionFormat($precision); } - $this->number = (int) $number; + $this->number = $number; $this->locale = $locale; /* @@ -70,10 +70,12 @@ public function convert() $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); + /** @phpstan-ignore-next-line */ return $formatter->format($value); } } + /** @phpstan-ignore-next-line */ return $formatter->format($this->number); } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 69822f2..d39ad33 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -72,10 +72,12 @@ public function convert() : string $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); + /** @phpstan-ignore-next-line */ return $formatter->format($value); } } + /** @phpstan-ignore-next-line */ return $formatter->format($this->number); } } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 908c18e..909145c 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -16,19 +16,19 @@ final class WordBreakpoint implements Breakpoint public function calculatePosition(string $text, int $charactersCount) : int { if ($charactersCount < 0) { - return (int) \mb_strlen($text); + return \mb_strlen($text); } if ($charactersCount > \mb_strlen($text)) { - return (int) \mb_strlen($text); + return \mb_strlen($text); } $breakpoint = \mb_strpos($text, ' ', $charactersCount); if (false === $breakpoint) { - return (int) \mb_strlen($text); + return \mb_strlen($text); } - return (int) $breakpoint; + return $breakpoint; } } diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index d4db121..5eb04f1 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -30,8 +30,8 @@ public static function build(string $locale) : Translator $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + /** @var \SplFileInfo $file */ foreach ($filter as $file) { - /* @var $file \SplFileInfo */ $resourceName = $file->getBasename('.yml'); [$fileDomain, $fileLocale] = \explode('.', $resourceName); $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); diff --git a/tools/.gitignore b/tools/.gitignore new file mode 100644 index 0000000..5657f6e --- /dev/null +++ b/tools/.gitignore @@ -0,0 +1 @@ +vendor \ No newline at end of file diff --git a/tools/composer.json b/tools/composer.json new file mode 100644 index 0000000..797e9e8 --- /dev/null +++ b/tools/composer.json @@ -0,0 +1,11 @@ +{ + "name": "coduo/php-humanizer", + "description": "PHP Humanizer - Tools", + "autoload": {}, + "require-dev": { + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.6", + "phpstan/phpstan": "^1.0.0", + "friendsofphp/php-cs-fixer": "^3.1" + } +} diff --git a/tools/composer.lock b/tools/composer.lock new file mode 100644 index 0000000..702dbc0 --- /dev/null +++ b/tools/composer.lock @@ -0,0 +1,4827 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "489c61ff2dc7801b7b9e59e0d3622b3a", + "packages": [], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.6.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^7 | ^8 | ^9", + "psalm/phar": "^3.11@dev", + "react/promise": "^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.6.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2022-02-20T17:52:18+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "http://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.5", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-17T14:14:24+00:00" + }, + { + "name": "composer/pcre", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be/" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.0.0" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T20:21:48+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de/" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be/" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl/" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T21:32:43+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.2", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + }, + "time": "2022-03-02T22:36:06+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "shasum": "" + }, + "require": { + "composer/semver": "^3.2", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.13", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^5.4 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2022-03-18T17:20:59+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + }, + "time": "2020-12-01T19:48:11+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.14.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + }, + "time": "2022-05-31T20:59:12+00:00" + }, + { + "name": "openlss/lib-array2xml", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/nullivex/lib-array2xml.git", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "LSS": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Bryan Tong", + "email": "bryan@nullivex.com", + "homepage": "https://www.nullivex.com/" + }, + { + "name": "Tony Butler", + "email": "spudz76@gmail.com", + "homepage": "https://www.nullivex.com/" + } + ], + "description": "Array2XML conversion library credit to lalit.org", + "homepage": "https://www.nullivex.com/", + "keywords": [ + "array", + "array conversion", + "xml", + "xml conversion" + ], + "support": { + "issues": "https://github.com/nullivex/lib-array2xml/issues", + "source": "https://github.com/nullivex/lib-array2xml/tree/master" + }, + "time": "2019-03-29T20:06:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + }, + "time": "2020-10-14T08:32:19+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org/", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com/" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.7.11", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "62fcadcde81b4037e42ad2489119d31c46f00191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/62fcadcde81b4037e42ad2489119d31c46f00191", + "reference": "62fcadcde81b4037e42ad2489119d31c46f00191", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.7.11" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-06-07T08:47:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com/", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-18T06:17:34+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-05T16:45:39+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-20T13:55:35+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-15T08:07:45+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com/", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-08T05:07:18+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-13T20:07:29+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-18T16:06:09+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com/", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-19T10:40:37+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "vimeo/psalm", + "version": "4.23.0", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88", + "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", + "composer/package-versions-deprecated": "^1.8.0", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.3", + "felixfbecker/language-server-protocol": "^1.5", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.13", + "openlss/lib-array2xml": "^1.0", + "php": "^7.1|^8", + "sebastian/diff": "^3.0 || ^4.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25", + "webmozart/path-util": "^2.3" + }, + "provide": { + "psalm/psalm": "self.version" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "brianium/paratest": "^4.0||^6.0", + "ext-curl": "*", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpdocumentor/reflection-docblock": "^5", + "phpmyadmin/sql-parser": "5.1.0||dev-master", + "phpspec/prophecy": ">=1.9.0", + "phpunit/phpunit": "^9.0", + "psalm/plugin-phpunit": "^0.16", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.3 || ^5.0 || ^6.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "suggest": { + "ext-curl": "In order to send data to shepherd", + "ext-igbinary": "^2.0.5 is required, used to serialize caching data" + }, + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown" + } + ], + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php" + ], + "support": { + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm/tree/4.23.0" + }, + "time": "2022-04-28T17:35:49+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "abandoned": "symfony/filesystem", + "time": "2015-12-17T08:42:14+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.2.0" +} diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer new file mode 100755 index 0000000000000000000000000000000000000000..859a4c38b0f1091a195136d34f53c166253e449d GIT binary patch literal 1852521 zcmeFa2Yg(`)izEih#o>S1g?$jm2F9DW1C`QV_A}IfmM)X8?YR)(q2i6SG!`1ZP8Ll zp(KGoD4_%bp@cM&kOY#D4lkiYLINQn^cP5I2?Q|hJI~BHb7$_}UCEg5&HMj;fBzDW z_THIi&YU@O=FFLL511G)=5z7BR3`3c)_NmDBUOhTj{jE0r&W2=yzZe?-Wy1zeUIo! zB3JOT1763{4zIDxTbx?&=jtgH64vxj^%f`kQhvtk$QJxef6C8!hYhGF3-hDH1KG@I zeSda%0TSb1QzDlt=1=rGi^Hi~Kb>Eb@(xStNA)>+l%XdJ2Zs}>wB$1E+Gzi+t8 z7yFL)`wLzn>lKE4ueGJyOQ-t%Ox~y8i2@k!D`t{uKM90&slpIFr-uyFpG{KbGAggC z=(3i^=C-b8R4iUql^XDB27Ri~+L{>EySK5ccX7+n&7HlAmv=AkZ0>DsZ)%QBo$8%b zg-ZFkTsGI6^GC9|LMk&@)7;yzY?(L3JGHsDskx)Gxv`+C-bEn6!>RMCPSK?$ z{ee`*Pu9eiE?v>uyP~FLq^+GQ(cHEoKu0~oCA17?vN@`dM{-EzvYBB&Q}A;B3B^>-$KNDk zzdunVkss#>DZoDt4Cehpz1O_n?=Kco*^D=w7^Qq(F_SMO`qDmgjPg(M{4{}Sq2htR zK2@lhN%c{0tMq$RYoZYs3bv)?oqV#_<398b^XAMrXvU1FR}1EQ2hW%@V}>+kSOkRR zWqd!GhoTYJ36GRCHC!C_*7~_Ts>3~FPW?gkGrUA5N%dPFmEhp|+4a-@-)^3&s)20I zPxKFYHLGIB=d+nutrsg~*Z7&#iGD7&+DqiUYJWX-D@aa6uG-T)?M-JBN$LkyI!Op6 z2(?dsg!Hp8P%{bbWH9ho-Q+xUZ#b3DLxTr$*WZa}3AxM*$%wpJl8oLU% z3PZWRw_2=sb)G!K+7~410mO1RrW@xCRq?9urFUb*K>t~YLTs%=MWYJyf zDMd_I6(CkU2NGmZSqNT#qJXXmHjEfa*`--dk)cTP%L@`i`;oQOJ*bW}*wlJyzu*m~ z*7{y!c6cP4ry*ZB!JmN~s_A7uMO|w#DM6mZzN)vksim{Gw>}oHugCu+pQ=Hv=e#ca zE~@scbtRR$Q9+qvI<21=ixgr8rpRVbDhmNZLDAZx7H&d2r4qMNjQK7c55ahke|=;Y z*90we3imZdP#XC4=FcY(fY~Jk`rld16jH;!X}X%&a&5P0WJ+hLacOk26he7Q^`czl zWq=Pyzf@VwDEE0=B6;do_HXXYq^+ljiC{Q%E_eZ=4n0RF{l4PhQf(>RU-MMTj-ipp zyz(S_8nc;vHtqK`jEs;2M>Zv!Avn^xPM=H+xt=7S^$HL6T#pX5=bnia>WcDR`vESZCKXb+t}XP(Xy<$lb(5pFW9l_ zsyjB@?CLEx+icg(Hrs4-`oI1cBa+Yc#~b?cgqW3PVLRsP~v~$!o z;`gTpQvHqOZFePxN78;vrr_rW68%0YoHIT z-KJe2>o*D#%nh*`fEMpP>uN#zC?j>MSz3Has*q0f=^r$mrHuD-M$pWek6a=d_i-~G zL2j*`?e|-1VSsLbN6j6QZ9g}gWLZpIHJcknftPQsbAn#qI#@3`_l?TgRU95p=zQ04 ziJ*5+%`BIE6Wx4`uuu8IXxf*uQRp^YDCm=oUwcn7PjE9IJ)E|4wNz5ACUo1|8k=&T}O9{+wG` z9CU_`T(+M^FF)B#u1o=0|IH=?^k*L**iEvM0F;&Q$oYdvcf-zHJEG^j^X?&%PMS{@ z(UutYS0vJ@WP(%;x%Opr(2G9uy-vv`&BsG<+#02j?eE*^!a%?O$GtL=&10q{+sZ^P zLvyTr69r75-N^d~R#MR4-#Nh;uewm)_F`eASctPk^e?A9Po)fKPtd=;@!)B~MD;j; zz{mt1{6L?5^_YDn|HSD0ZRCh)E|B>vTsY{dCtqs1n&^W_fNP;}G-AWQx9h?PChJb>oY2N|;%76E60^I+v}C$o#z1O3XLdzl&> zRHpDCcQb{4y2z0!<{J~~{$g5mc^)ek=>Df2aFbMLav8)sG{+~A>i}4cY$8;(NDi69Ep2X4$uV2OGFSmU^w1|hFA!q> z#2F@YvVK(ALgbpo1%uv`xqeu3kquQ9=q!?dLNQ88+Cr`;3IILeiQ}G^q#xm=3ey_H z&*aVpdd3A`K3UT5#_2KF=Jo-+ttyR^PPtW*ONXW@UdGQ+A4>a;6he-)L&cmT>;tMR7ZhmER?zvy+NfwclymUmrDle!d9sf#Vz0t2l|~ue`=a- zqFWqzrvDS4Hm}Qg-T?af4}EGsDS9uHS&81!x8qrNLAQ8s!vm5>yaw<{LgFDq|3Woq z@^A$@z3Mbm)&X2rX+9DxncHGoHU0UlTcDp9op8GpD~5%$gP42{-+3wrVg_xWdu^Kl z$nft1I3{F}vx44po^@z2uw}Z&*u9GnioOCr%~o`hV@6CBG98(MtviN-YoWuMT(OKF*&KCYCe7lTNcp!clh)Xl0mGW z$v{PcwbMC0X!htYnfgo&*QaZU7N_(;s)D!3yc=@|`pGMvyg&*Qr_>Y{IO@pO#vU-} zv`dD+E!jj>r3Fx@{30LWKaAY@5sEpOhG_VZ?y8`l8$GgBK;|>!Dxu?+!LRXi&Li>E zI(1=f5pGRDfmNEk%hp`6D@6MWeMl^|IXv=sxb0pwGY2a-CpJ8H33H z;dJH(^oY9s&lCi4!Xvn`c(5$X+^w~|K~G*h=lele}iWY#)E!b6M+deQCMnu%w{8iyr_8sEU81O3dO9~l+q z4q)b_*LUP|4IBffkwP_t>XvM%CK9dw?GNTkc4K%`0|VqzVDi_b{zRrrn0e4Qu4~#{ zGRf$oQ^uEPD8lI{gM9zRtpgf=ZKmnBp~4nBh3&!C5VYai;q#<0>Fiusm*1Dj7gCAL zB0oplBr=(x*!f&6=mjsHVEU+th!H?Y;}LSF1{+Qk$d^KGf5{>Oz2TvqJ|hfB(6Sr@ z+O!*?*^$#@Ctf#4V9aQxC9TmM{X3b(4f^oVZx=~UaivwPByJ)mpW*6)UNwBhUnRLn zxjUOpw`2ygP8o|h6X+l6E;KP>3fRb0hGybU7N6w;I&Iq9^Q9co0?Wg9@_mx41A6~u zTV5skXriEs68<3jH`q%CJ^954_Lj6Brxooc>oS;8N{vanZnuZo#)CdJ_q?Ly-HG!q zPG#6Vtl`Ro-n9FdzaS|^z$>%4WGj{kHSmj^9CZCR-!p0~Eh$Vb&W`w*#py)Q+wNqR zKx4Zl?vsMV@8~KdQ&bHs1`K3T{{y)GpvPS}wMjCFE1=>karNJPYa&An%SvUR;ywfV z%-heI*`QR&%7#*Aunhsd@8ruLl2Rl&IO_C=vt-kdypPdAPk*@kN0M9wtA`B*%pTed zq8~nggPC82o3CSNB$@5+9v$)Z(iieR$|Ec2_x^I(vr>vkdF2r8`BBb`&J&dSE#?pO z*_{{dBRQvplx8t6(0BS|;%J9f;04{q0s-CgM@vr^gaeK0kjoPfIEZ(VO-=iY(uvF( zxK|B@=Ins6v2QUN==L9LetS%`wrm%ivV21hA(i%l0UF&5+A%zt1O3aMnFc{~));Kw zTK&RMHrY6opj9lIFO$+|Ld#%FspT-hfxi9RF<%tOvej+NcIRliLvVo%41;&F&Vs&h z!{U^nIYXPxpv4kYzyNK{v31azy^k|CNkU{Qp$%l@uf1CY$<%HvgZLxrXs9UYP1DZY zLRc#+J822p5|c{$9SKqsT3F4e0yT|umj-?7jp_>p(($cqCe=)&zkm@H(?!&n!WlvP zKE-AgG&MN)qXIa$obI({o7dAqCx$Myk!)?ChXI@O7!|bZ`B#nQalA>JO-3~$4WRa% zsD-HLHEr{R!J2XmqDM4m$g%~7@F(24L4STzm6_s{m0DXi(6p9};mWk^?c5BYw-)|v zLUGRY!mi&^>hffBEZs9$-8&sQJA(u;xMj>rrQGq_N&yB`Up6noX z(eiYEA+8DOSYp_)vX)r^y>7}+%z~+eKU6}_$wbd|Q?wXoPzv1mpx?Tu-x%!LC^njW z+W3?6H8-wFUdJ60v~%6Bb{4@nlO0UaL+kAkkFd8F&27P_qbvsE7-iK@!(XIt+AoN)3pi8cr zYu5ZoRLWn{I-qtb@chbgx9+B7uz8?oU$N(3gfX}0x6pQ_Tp_+Bo$X7cO;|ubH6nbK zq5yybJ?EA$e_x;^!k{@}C<^psupvzU49v$HduR~QufE%90s*s}>M#hV0;5M2X)cAC zM3hcWWETVU;$3h2yYS?8R>RXWTJ*pusH)pVJKTm$?M`I{0iAK+BPM$6j)IJ&2Ymgb z!_SotH79&nR}=Ko-+ao9g07WhwDuf%qNSpGodgScgH~O7=J8TD*QhxhDeq$dv1V1n zKm zm}w_RIE409Mgy(?#5W2R(Tu$>hjtjZ9q9M2-u5*?bER!+r>17j{X<#1e)Y@|=!^GX z*isP#iWyO>WfTxWi-G>M`8~78Vwxl6WwfP|7R=PDCPlFGg|1O@$<`Z5|6zNL0(!uM z_gpKSxQ2B#}UyNFabfoq{(8pJO!BIpZy-8owjUB@ScXr!*)sSxBgEH2O| zm)vh0A6FehkosqYbxzPi6$A%*#jG=T7Y1py$ue>wG!sh>u{Ofm0NQ!-{bt5q=YV0A zk=(iXQZfSFS!E0OkrCSlo=JeV{^8i;ge%wJ2@ttV!y|>!Fvujf-=ODw<|{)2;>4tA ztx$8*N{cS=tkuFSvByfr{n2o?7grJVsI9gz#>$CF8PF(yy(JT7^jqwdf&TEpTQ3$y zUF8)g=7gQ6W3rFp_Fb4eC7*2Ig9xvVs0` z!?_0v7p`V%n6|8>0&S??X6woztrX`^!f1BjWP#!2>s%qw-#@j-5dtzL zqC&Km43Dxq+eooGgYX@SGeDxC`@H$;KLw#S0-+<0j-7OoUWzyP5&P1t1s(6$Hy=n9N5&{v$%A!R78rtW-hHS@>pHAZ#kEv4qcDhQS zi@!SGOyXRjP|u+lDedvmw3QaP48oDzz@Q&{<_{)H=5i83Fpis!vm=a>WWx%2Y|BHl zq(<&cD})11)EK!kRWg)3!%_yV{@b@76Trh9DTe@?{3LcT`(*k3oZdu{Nu-_G{+YXK zk%9j9$+%g*a-E$JZa3|O4pza8@P19*02&4Q_~{d06dvbQ;t^P+mo)Pswd&`n37vxp z`pZ`J8WyzUuKQmQSl5z=SR|caKGN+ca!uKFnH4G8^-t!#5bVL&j{6U2eEVw;7SMPl zUfE%6%+h|SfWJMq)%<}T+4#;>fpTq2m_J(ZZp2X!BfWdrLkB(gnDag=) znZY7O_l*M5;x!oT!C^fU|F~tU+IB|K+j5nLD>Bg+w@k!r<*0+TBA7JeC2y zoxK>)>lc0M4MB9aEW}F@sTb0*niP#jNjkOLUs%B>WK8YP-bSkh=p)B|->ks9LuUjq zj^lOFx#Jw|eV}6_2C$0730jC;vA-@R*C}DYDzt~Ij2>R4!=e{eDV^zM3 zmUL*vBPpxj#HLylGQ94|_7U``>koT;yujpr)8Togs2q)Mp)tP@j4oHOiv@c3@sFBa zb7OH_3ak_&0KS+F0_f*WXx6_0N z8_NRe87XGq!HNT~Ckg9;&ed`d1T^u|6DGLoTC;#p^OveO4qC&Tux*6xm%PyXw>47p zMP(T_5rc8?dmHs;jC7!vz44`bL0?z~ePgie*|LK^H|reZebzeI0h9TLb+pc)n%o%? zpQQBQ5p?ih-#77Y@)aykQ4Cj9$opbO0G*%va<|mdoua6P0uw$9_)<-SAVQ)gqtY0y ze1|(X=(aEZ>RW=_;Be;R2B8;*4D`zdKZi#f(CT~s@dE*$T@joIeym8WSDo1~dpkEZ zX!T#u+f4A>?&vbxol6a?C!yt;%P5?QCIP*D&QIPEEO&7ujHOqIx!OjP+*tg~%Qe!|`X z=#xAB&PaEb!#erd6u?6if`|^K;-o?8wum3|kOVsIg$KVR60I%|2aPh-%yRz$ee*-x z>?ZlAmCxVht8Ke>rB?IU09ttFcoTqd1B_fLTEH)oyEu?8W{Y|KjAH(Q0l$*UhGv7_ zbjwBm5|$`%U>O@nLM<5#4))5y8V;O-UUS)J%#3t$c@Q;$H-ec(VIpt=ddP8mn7$f| z0^qSu^JE~3+}%NMXiA%HAr&gpmhGSr7R@RQ$ZH($2L1b?KQucXNjT-Cp;n09+PuPZ zVnyp)aw5}`scfKi*vCdJNP*=(c>tPNO>?`*}mvh9!x=hxc$$6EqE1V+|{3;eGf*) zn{!)(o^kNIzY_#^uErcK@#%0`!fR0V|!+HEBr_{$dQ z;)tNj{e>+w=(`th`-I?CuxSm+WUIboN$u$g;Ej%5%aIGv_ERo9NI>1mqSKh9>&zWu z{RXLz*#m7lW0{F&E-K##F*3uW2=5t-7;&FtVS+yQ?=RgXeAYVXv{I=K*u(#6N|jc8}YNcqJ7h(Zbu>rBU zSoY*?$&RfLxeAQ+vn>SO`>~si ze^VDNDAhAnU{cpD*pmGW*AR4e%koa)${j!rSEgF-qVO)uFOrw=Wu$unrWJ zMWqOxbMR?%W({=zE6zGaSQ}gTgl|FSl%H&Qf*FnJmM?RS zK?{4FV|u}X6*MF~5en2~kUKf(vd8Y5FYqzqa#*CdA_k z%SBYqFzpbNOM(Kc@h~le!Tkc=a@IjF3xBS%xo8wa$AuJr5}OlJYiVKDFqdNHK=a4< z8rQHAT(GLi>rlb+^9EYY1$UtL+%U;FcCHAx=EdxF3=JnT(r>baEgauRm zB`y0X+epx}f3n~#fpeo8E^pfF#O`;RZ(}XHBWm;Cf3v{^-ErG{?-68o<-kSe7FG|N z)A|-s(<*BwYcYZzck8YR0d!4(3#fjDcCx@aJx${qngsN;hX$??tV-%fQ^lc?*(v~m zfTh(vuH0Lrfp-68v`Wz20FKL<7NT9#NGV=Q_8p9Zo_);W#_r8`jEW20ri`ep5w+mn zF072XVUf?X?+coFd2}r(~f=-i$hzEUX-vv=@_ z0{YB>cN-%aFKzMVxSliKL^iRT?i6ep9xkc{8Uyt-JHw!#dT+gnskvPdi`AJyGqR9K z)u^l=8?0B^pn=|hXkipdk%eBPH@Z(ROAPlV6Gny?RcQ+W`rskgn*eB=!(R!O zed0*(9?(`Xo1;M@LEBD|K%J*HCH3$K30j!4$ZR8UyG=<+Xeqkakgg{Rwi2x39tiry zV`>i(0l3Dz1WFEIslbzYYfpVAFpr>LpL?hY^|-BNvdXq=>OEMeZlfJEIHF9`A8R_@ z#H|H-$IZ{4C(ODN^AgMz*%WPez^-f~!IoWgTY=vEm+Q=;v}+|xkb>Y=H*Wbga4&Py zgYJ6S9@WB_JM}4n(@Y_lX*WFIvpZrRF!^QMQD!H%>#dZ4>bL}XkT|jAY~{OfKV50i zeg3rk0O8VI&L{!Y%Ng=GVmV`gmayRvfWGzblXezdHzp?lrW0v@vLQEE#C~sg+V>n; zFhGLNm^HUWAYJdi1XAiA2-Y;wDHAjz==Kxt|FIyBp*!ZVaNya`;ISL@>KlGFU696T zY+)8nf|G@Ag}=|n4fLHWjv22E1vE;3{>8lobn)k&GtKP|HG*K8#njjh^snR*0`!UG zkAEt)ZXUzB(UeQwu#VjnY|y01U88m}Pv}4&?S9v+=S_18pzsI(z8T_l8b z4G;OCLnqEM6`SHzjFBvEg3hu(V=|!IZFS|(gq=tjCF95qqi5};dn9P%DVLj2x2vBl7gH-e^p-Ay zKFU%C{qj?b%m#jUAY(MQy+Q_9r!k7~5|5CeU(J1grPS87no0{1xibC8IO}SRH17@W zevAux#&=KNTyWi83nrhzZOiguIrAza@YBH30Db!_!)Et?qtns`!GP-l&akeR@l7(r z`=3~mKrh;Cwi)jhjsb5^Vaj3ulCeQw`c65YmKw=At7TN)KEH4%_h8U_zdPxBB4F2` zI6(LjivBjU-2+YjU_*Ij57idMau;j% zdHs&MPlFC$aQ!c(n$sP{Aj?$9Wz*!7Q_!NA^WzjzP8XAb!Ml}VK#zZRD--o~hu9LB zAimdF%%w*|O9Cqx6f}0peJ2ZVGb{5(pbq=vHg*HE~SW=ZWC30XGh2$i-jl zhmIHC!vi4b?~Z!gEFZf*X$fT4x)fc3LJfhXTkEonm)J^!&j02aCMxIl(GoaIhPsu= zk0keuW_8xQ?nGu4^hX+gWjGm{2ezjAm6_ zb^v1bO?wzkulp5u70|;rKj$}s95Ml6WZZ$53N8v+%)JEk0VW6X1?c1N5tyN6@pr{P`^feF^>Mn_;8S`PwjjUzk#^@rFZy}fKH)pd=^nm;yjfRt@RB~BP zXJ6HIfg?N`g8p>fYrho%?#T(w)tA8)JK|Pq3zx7N4W7q`Lrp+md-jU`B(DUPgPQ1#C(w1{J0*1lN~JNcl}<88R}uZ|nVTIisQZ?1gpW4h zRJ7*ietHjXKvz6*#JiHOlp9(W5m^LRt;l(3>m|6kkG(I@%bxz0S!WWDAgH62F>c4O ztmgn+#(<#Ty`*J|uqmTjG+;1(hv2dtxB+duuJv(&lc`WN9F5>1oSWFrfX;jS{x1uT z1Q?=mRP>sxFI47Swo&zF8UL`rZob3EK7mt}^I$=XIDdLfn98A)>Zwm=2-+lt)9*#N>8! zxL{#L#*~w%+C_aIO->(&u>Zo?pf4S{<2{YW%fqCWM({Oweb)f9IisS-JK) zG)42*5ZVLW*q}e&{w@>Bmz`139Cpz;vz)JF5W@Q&d%K`VtbO4-!d+=c5fc}exQt`; z{=l&Z&}+7M%B*{dM<4KIaM-_dU|!ixTPx6yzw?tn2s=|t8rQ(6n}r>aiL7s+H~(z@ z^8zCNQUouiH#k6Va?^qKee*Okj8))9so1D62kqaMJR=xj&>cR%>%GEF>A)trg3*8s zlEct0j0L*&E68g@P@nsmp74s!6oRf`yFSrv{dsA zmy+FKR~`cMdn`WC-`@FIvs7KGtEHHtWHw#{w=3u$X0AM1Bw0G>l;W8NwgI|(Q+1knck+?Y5TLcQA30TUC>XDNte}al zo~)d%2YIXl?VEMP6OwbU(wxd?0oT`c>e4`0%=yI`l4o*B9$A^SN(I14?3REQ{#IoI z(jO@SXzWIMd*kXq9zX9*DNyDMQjD3K-9&GcViMhN%Jo}Gh7WTA`gTj)90K?~xD`Nm zI&+_ylG@|cxH6rVht-Ku`dpFOkb}IRq%Qi~DQth18|c=tznj2-c*r3}QB((;e$dan{;h7|Z&Eq_oC1HrwFABS zy%)_rHe_h6+Noku*fjRwL9_S$^)FJG%U>65OQ%nnvRQwsE=7C2_}Z8H{LsZ*KhTqxpL3EVuA#*I*+>4W zbbNp+slVk)XV&FUG)aLRIcU?(3I;}_@)*nLG7w8&58@F7^yK1JvjqfG!}1`( z47#P={O!o`8p;pmK#zZTU8~^22^|k^G-`@bL94y@E)i7B3dVzKaSI7v&aD9Y*`7I< z3LGLdUOo#n)>Z(4l^dL=9Ave(FQ$J*;b(72H z>>8nE`QVP>ZP?<0zPs5A#-L(Qj4m2GPxQwWXhJsJr>ObgIWr9D}#Y<_t8tgB4Cjk=CY^`L(rC>4%!S}3S7lz z4s^rAxBWzb5$YbBOZpHr_D6)Po@2EIEqrK#nM`0i&lsR|fVVJIMxyo&+i%}}nVFC_ zj15a>01}Xw!6Mx*WSO6mj8n-79nBPxfa&>4fjN8DBg8p{OqhA-? z^5)4f+C|G`*k2$I(CTe$e?hO`n<>Gof za}#aKq+8kK+uva5(^N191khW4o;PC@B2LkL(qxaDznr1@vy2G3?A6E2jABYD;)wo$ zBZZmitNAFiZ0Nv`Pvy92X+&ol0 z7iuMmJ-aTi5W&+1UKa;_X5PnV2v68}Q4vUH7zXJv+KmN?gFd#?=&&GR^`{~dtxl{r zDCe_d1^Sb-&%8`fA_j6(G4koPz)_(;vXDW)u*dol0f;bc0$|#k4pFEtZ(`4Dl0MXE zUI2K11_u53OFJ14Il{`91zt?I0fZEFJ&(qq*WGoZ88;)0P${fo&{2*7k~mrdboIX% zm>Eul5h{hGue~{+5l7W8VnEO<_jzcp$TY%Olme=QaE4L9eVO4vy&pXJiolJliFoNo z0vitSbqox8-!G?|K`lnV%c-DlakJ!dFzX-aU8mlBweU7|ObF|HNZWCz0&V!af4_iK z>QqA`xI0m{S&MD7V?S^1+jqJkO)t+*6wJ3-cR~9Xp1oFJ$l{J67_`^cX{}G7Ke+$9 z-<8}^Ok~re19V+t9c4RsM!b){eU&fd5+i_FPeTpV67=$GzPF9QM753!(*ZC*oX+kW z=>GHnG+iK?BkJKoU|p-2qf^B3e1SfcM6rvtbPHiNvuN~KKbKXvKA`|;G#`ve zxo+6#0vhO8@6fPMM{W!_>^#6hKXUT$-NJpuSUysjd)g(C_YE#AEO0^3zwU7}mM^5= zVYRP}t8baZ|go4pEl2GHfK|s@>LXCoLM`6Obo{k1B;fqP%QSGX=U` z?x_(A_70!FWIsZq@jZ0eZ>KnqAPd zj+?fpR2Z@7jb#^jS2G^yvK14}`I(5JU`!?*9r`>wNTC0G;r@Dv}I;TVXK1bb5#*h4w$-^aX`Ow(OJg|PQ;{7n9`q( zV~H7O(tJkF-k>qTu=sHt3QR;se1A#ug-_xc=E7%REs%lU)Y}q@@o^2i4McAsKX==8t=gi{Wqf70$ zjn-Mv^XL82xQ!LMxP=rP{RNi23bts{3!f0KDvZ|_77&)~pt%8k_09i&RuC$vsz%To zlGNY8S;?a_=qbMsArZjTpEW&v(}(owU_1wbo&Yay}NKz!Q5yR^R)2#;llv3O*{kGYbfGub=;QAHk{6V=R``g1W=kMQpM_zrAz&4T4v}jnR18VyQqC z!Y~f#Jq!x^#|Iag1(ApujdU6fsx}a*KhcQOxvrqGcW!xDc&p&O7!yN&fEoxR7eel3 zGXZ+!v?t~WaD)de`~|=~L)J}V9)sU&xZ0q*-T9}b0vq80m%|CKa=n223-(Gt z7am^wC&8^?LIr_%4gLgHp4}4A{zX4FE0h)bcK{GSg1*QW`~=?hJLx)ut{ph(T;Z)k z{|*2w-W;ubjawb`CmpB$P(a7WWVgTGe2qM-_CvfrQ8Niz{C?Bkf>%K)Ehdj1P6xkG z=k52^aG(=r?`RhD>dWg6TZ=gEhvC10bm=x433Sib4*Rk&HV!1UKVI7)AnnKP3OeV~ z_v!?x!hj?^S^UgnL4khe)XU6(R6)}O1uN{Z*0eJwr5ut2IcNpicEtmK6OJkjZrJ2b ztHKPaf1z@}_>dM8=zgEMay;$FPz@tEZ?7h60bGpjK4{`sPybXntKh}ydwob>`-+2R z!X8}qb38K$+P-AN_JUZ!on}N$9PNLawI6i*Zg!p6B!x1Qb9Kk81mVZ13mDJdn$#M#AtJ+x<-cwvKjiapPp_9klXO281$S| zx9pNSR_H|xsp`o0sc6%6D=P!&&tALpZNVB_vm(^AiR%hF{hDXYWTS%L#EfY|pMgOG z3~=T6^`1FGvk5%|h20 zZTQtc4-=pYHbIG*_Pf%j$Q<)>4~q+Q*I!++g+Nu{iJ`Q__kSf%T97Xy{IAU>#N$Foug%??)KzDg$JLA<=uuzPlX1*$< zwFgh6LC=fb|FTr;@bcQt1J<%EHeiCQ0)3}if5eSqW%@DLTgsvbt$XElGbC;Vw3>8i zM5k4kux$oC{DQO1)VPA9>~g)BzT7~2L7j)-`D-i=(07L~|BQ&E!eFUn3I7B)%Enb- zL4E;o5)T2OtsgtjMBPcX!>)G{Cm2(uDbh%$>Tc@24;$kPhY zy$d_@oAf`051KU*lwMuZ8%m}HsT z2U`7MG6W8rr&7~E&q4owUDj->9|xp-q(|||JcG*`wuPXlO;0~2TtmC5sXC@W-A#QV=6%wqXXHKJBo10jnlx>WpVz z70`&tP#DxGlJ3I}>_rR$d{o-Zo;=lkIq*E~l7cJy}s&u;mo@EI{|mhfqSc$2944dAab=b)GDJ7+fmUP!+~ zy{iJSfpolw3}b`dwZ$7|O`3YmMqq1k1j|>ZEUE}Gf1)X@=$ITAMh}l3HP>Rs@`^wcpp-rYtrx(m&Zvb?sfnAIb zy@=`(68=UO1NGcbI2f)(Ns zaI<#NaG*!#)=v_+hH<{`JkUHrKsbR#xAAz9i2$=7%a|$|f zLxX96>WYl$ykaC=@1uDKz3q4N zzAXS&H#HT{`@?YFp&$G`b+sp3#oBLTeFI&x?7v z_72epzrD^hag-ig`~@H?-mQxO-nl#I`hvFXJmm@D)AFvz;4^@B#{R#N#L-_tXEfG+ zPJk`HWei~TA=>~Q+&;Cr1_gcTwNL$E<3ZKYP#3h8bp~|C4O`3?(5VqRE@+<}SLix{KK9yM$4MbaY@+O3b95MwBcLZ_*vcar?SYBQjMm+Ffd21efd7!T>n6*lHnM|M@&kl1#*py&fSPu#o!L7( z-Z)gutU(|0c+dm=;;rwP0o|@!c^G``2`J}~`vGP^CqDl~T$r(DfRw5nGfl*rw(toa zsz9$^^m7v-SWT6bwknUatg$PO1G3En1F8NL1^Jd`>B=3t&06``h%xym6zP1O`WTe@ zMxNTAiVFON#Q^%99S_-GD$qObf_d?N=d=0?bQj40T_ppd=;zk0 z4*Tz+^}OyU+g1loB>`_ocH^TyPoQX`zq>j$8}$bR_(DZuj2%UEdDWy%;* zSD!BBN`S7}@5w$XWAV5uVSHjl+am6_hyA#P?FZVsaFSZspcE5{|^agI=K zo7xw@-S~-K6OtUW$R&RN8v42$olT)3SXoP_UsY)2N4b`udpv%kaoCO-tCnLGS*d?~ zm^}~Bg*VQP+M!=YvkoL9W!x!yWV&?Cg?Em>odFXyGBsR&l+l*4M--q0Bhz#qnLyiS zZg0*@jSnY!WJ=%gSfkWx?2!rlY~sjt(KG)rTL8x%GEm@HL&n$Ho`W`@v}KD_XY3)v zLLdK-G4r33PkvuTR30+UV6z4K&)tgV_L{MW467EEy2KZ^*LD$fxBB0hslnKG5e1ZU zN?r3}4;fp|d1_yg)7S~Jp@oe~8V%it${ zqXj>Y=e@~nA)`Z@ud`PUx_0-5>jc@lY;t70$iw})(Gj&t!(Q5KSvi^()I-L{FBt93 zCkE(0YKx}|D%;0kqEURpPXtzM$4y$o8i6&Y9hr zJ|yludnaBg_=mp_{G`9Ox2Q{mAb!l#ZO|Lu zzVVj=J#(X=Sq}9K20A?RUK7*VmcW*^G&Z+&HFt6F2(+`c%gj}Gpd_|OaRFOf&`1BV zmG%A&3$CG~Wyv`R3N zI6r1;`Nji@p8h4U-J1?_d1_yTC(c2soRtJTIzB>IJ>^Y0{WOJ7vg0emdC!qiIf+-D zgrY}sskL-huUD;#9&Kg_&DV(fzP&e4%&7aMycB&4F_XkTa=*sZ)vGS3FEUIez?}L5 zwLGa?kjg9J9ZA=ps(Z(4x_g`28+#kuTU(pkx~I;oIt4rs6ZD<-e)<@8P!w&TOpj8< zYI>|I!@X+kS*bORlJ}}dxP9^{zRIgk@VBhI`Ci6f=c(fJBJCP0`Mj#?!cZz-x4^A9 zU*J_I zv-CyYVYHRvZ>o1vRcgSinaCVva6U*k1a8_LDdbBvA#ask%h*!^)KBM&QkkN!WXnxM zl`2KhqM19FZtSM^T%5}eQyONgrYg*1tr3?!y;rLI&`Lt@O_QzCB3aFCB^p(;%Fz<4ozAP9gT4<|Gj+969j!d3^F(M-h>3DSP%WYi zUcj;zk818n1=V6J)6;6K&Hy!3J=94nmaAq}RgFpESf?6SwzXai+ho1$fCpK7g`q^j z8>S1fJ=z=M_4ytyJVqC?473+iCtn|%I<=~90e!QzA&pZMN!-$yuUQpKWR7U+GCBeI4d^a0^V8jG1=;sC6A(=~QC^nvWs|6MOwKkCp zeyq?x3PZW?Y9?;jv`}H4&$9%ERDoKe$HDV!~ z%pzxZds90oc_Yb1s$lv{rC@Q==098?OKFr02dH{TpTHl=P~%r0Ri-$yM9D*C)(^00 zGu3bQqv$t2lvrg_e;Ev@P-B*gBdO?}Ge}hWlt6Q;l}caH*Q#_LFdh8GI&GDN_jHnY zh!hjaa7v5zg|1D}p>*|IUF@h3=uDLwCe0)h?@Jyw8ubsQZlylMtz43c-_Zhj^Lo`c zOeaZW*9i)u+qr3efxoD$(Z-FnzLqfrs}kgBfs8&*q*%=rGq|~h?r7k9F?^~MI<0wK z@&?GXDKxFrl_rQvuAs^6dc337TjQ&TtQF7!`nW5&$*)Y%2b(iA25HsEWK$V+@+#04 z*1TRdvi`oZfR>+wtA`* z6OmQ>P&KykXG>pIHO>M%mM@|y5sK^RZ0~Mv>~3z-KU!8abT=C|@Q3h5EWIyb1;bH_ z)U`mei0~6dGOE2#sT$WjOHW_|e;lqPIg=Qe*z;F@LXg0-eEQHUGjSrNFg|=Pm0vR| zx8;!L&kJ6WTNtd0L?=n=(bjQO9E7Cbr3N3G-k2iuMY`G|H)=ge`Z$cC&RgmVs#=Dp z61^1u!NzO)I666-j8a>roDrIgkO||m$nmrg;VP0E)5CHVGAS4;s#YdVby#Bjrb;}R zgH(sUY;m`%^==oFpQh}C+{z013r zJA0d&J35;isXH`5D?ML*;oGa3v(a@x6~^X0l^-ALl{rKgjcA3k?MoAgF`8akVD7Z6 zSk$bdW0ar!bD(2*ZK<3|;wql4hbBn{Udr-mGMCX!DoFXgjdq_knWBUhex^ha?s7Cx zb?M$}PfuJymCI;ZjEKyZoXP<>bqS+|`cj^(OQtYT6Pui;ki+ekPe~ABRHHqfEGc+_rwBmS`2>vA-=Li(1A7O5{2}7fr zzYNe}3vY#X{JY4brL7_qrVtj)IB23`5$_Nh!oP5vrt)3Il=`X?-MU6IR9%P~(l>!? zdq6MCw>`9%O=K#kD_{oQK*oB6H7~dZA||y#jgy2zdG;^_i<`~P8HEA)tq>xC^Of|ZAm|zQoT7k1hRSFh6>bWvM5iN~C9@Vj;zFP66iZB+F z#vynb7P^VtlVWqtf=8CjqHAp% z0PcXs`L;51S4KS3>dEMS{i;~=(9Pra<#JkIxmQ-qWfd3M39a|Q*`!8FA&jPmq4JGU z+5?bQFBgoh)|;$H0gDxlxbCi{{8TU?ACPiKv1O}y)cbM@Pv0R)4Ht()IzOCPA3Tj1 z0vv^B2-a?juyAfm-QAFhWSBBVO+a-Vg)?EYsDhblVCyNj@uMczsu}mPIZw*V_%y{U zWHI4Gyh`nZrBJ=neZ#>-1Z^x1Y9=DEPHkQzPp5h(pX|-_Xl;p;so2LxF$GR&SwXSl z(^s_ooUSP`o5;{?lfu*Vh%R2GXkQM?4;gPp8BTRe$Q;^YR$drp<-vFbsMC|2KQLao zNvK_o4jdLpaojD-jOB;2#dK1ZWYld{T2v%YkDG>tMt(XQPifhpk&W*oYJyj~h;ml3 zOc$me@2ZiW{7R9iHv3T?Roi)q_6r9HqrtfHHW+ClgXx!%V2m!Yz)dpJ6yr2z8pjyL zO^q?Kn<9E9r_t9j^jfFeo{?;XnzA|rW0|7A_&P6r z)Q5z4xEIo&xpS%Ji4niXDru@W*Ry_VR>tQ~c78zWY{z2o6%>s-wjxt67@safltzk&?pi5WM3X?XB z(4MZa)TlLdelPCLoH2vC-7G8to4Tt7SLM5x7OZz)J4Fwx3!GKqWy_Ons>B0lGeN@~mQGqk zF+(K}baeES_BUcMQ#T;#?wa=1_}b~~w;eQ2K_Dd+Q+-!fcB*J;r>AFfelqrJ^!Bzj zv^IBjG&DB%_R`93j-i5r4#&_RD!o3|(-WfsCPoNkHJFV>bosEZn63{tB&q>07}`r@ z2ZunkKCn{h?`8UKi`D>80aHym$ zP8Dm5vrj=1=2ung+}hMyv4G{Y5k+qeQrrB@ZlW4#o|v%Z5d!`X9wtrBPr`CsB8^R8 zqqIJ)FYol#5;T{^vf#O2DJynOi23ozjI6A#uI@Qp5W1_1SN5*)N3p$B?a?p=Qj_G# zAEt3fF`uX3rZ9daZ4^1uivR=wjiH9K|4~t6XJ;ib+v2NRU@C7KUhDowdR&+RIGa+m zEZFOY?Xs+ABIGiVnC;ivjZTK1mN=B9?{lN{mBP?tJwApWV!YOmRKcMztR3?+drPzf zMOFiOiD+Ew==9C}mGVxey#V^7W)fjE=6ro=R+i z3@aig6TRaIu#O;(!{CM#iM5Fo#XQpfM2^GLS%_ikJn;8=n%Y}wgSgs+RTG<8KZAB( z#g=z3t~&&2sqaf|F+L$*-2z+%o=G;+zDk-ws3+Q$wusawN*bT|bctq>EpM4H z1{|)^8K8EFz=OroICz00MY5!-XqO7d1qu{4=qpk*hPT4&@CnMrs2Xras~@H)C|EJsMDB{r;ba6=W4 zPptKiZe51S8wEJrM`8klG16@RwJT`rk%9=3Seq5t)EkIvoY zvSc~MfV;6{<3@VpHo)$`);gyM_X*W&PFG4Ns z$|0pGD>Mq2NFG&`s%urTY{BALj;CmywnE_o<`l0-mjB(OSp|*Z-9*MKQ1J{>y-gNdd%`)wJF@c}DObOOC_Kg!JgQJlyjG3O>B5a$%%te7nHN*ar@*?g98d{SEf+v? zfRxl>Ty;R!85odSauIw;-ZmDcG6H3`#}sJD_6(~DaXF#tw}DvsHv}76Y>==?1$pSq zO2+z6RXKM?Q7R3c6!IvWNt&j0kunUTVkSLg^1fCj=;$3^iP6(UorIPnKzK^MSeDMI z5!651ckHG~Fb8l)TS;iJU+iI~eN2E=hueZ^uqz(q5^4>${pCQiN0 z?b=+6Lh2gS2gNKV$JM9VZ3XY6^i?Z|u&64bmsDR4tC4_pNGigvmWr)JPPICeZmqsz zu;yw=!>VAY8$6_K05PxTFuKSIhtd{I&L0++zo)9T8Lwt?ekv`{VA}|`!@{82O;WOM zJXJ5)=nf`pbY{$>s_2#)XAR&vR&-Ihis%_6KQ-c+ZchCK5uYdvKnH8Xdm?I02dIh} zfq3d)o%u(*JZX=Hmn3cT%)`1sXtW@PHLpY4ig|l1vNz$x`=8q~BQsR2@%X+t> zv?i!bThtInAhx##to8j#d7tlf#pC8zjWG(L@{! zqjTb(n)Ts;n7f{S+Nwh9 zo}r^-DUQc{DaY)7z<&V)lL0GT|HcR6^T~0Q3=T_ zDAQ2kJ~Qrys`a#m=Ad23tJ6^uBi2Ur<`2eWSK<-nusf|=6Lt01Fm)&lu8OexT-wLV zMH}@kU}6U=XhG13x}MYLdo{F+pMs^LD{9fpT7e33pc&z_DTRU24!5Lel8L~M%QRNf zO{;J_up2y9wWz4xmL?j$sy7CpR6oo3%G#WS+BQN-bvu_#0LbJ=H?LMudmbh_D)KcE zzf$iW6Hv4Zwsw(LQ*6AK>~@+?c-O>mO+<{Y2kh>pKj0e8oon7L?4iXdY=KT?2D0!| z)h&Px-Ah~A7Pt2{AKguNWwx}pO|6erF9ZzzUq{lZF?5Nd_?v1K4g1o}01m4j_%kf9 zMn$Cy8lF;H`cNWWRSni1_!UvL;MdB$@!w&-unq_D;OHjZ%SP+{#u#e$93O>2P_`Pe z%jg4q08UCyE8R>9do_uW5a=Zr9Rb|AJ(*y>qyFm2Od?#Gc<@qpd8JXi5E%|GdQLB9 zXp=4_QUGGoH18xQ^m>XagF->ZRVih2Wsbg0;6Wawj3f`vqW5}LoH~Z<3=VoSm@P(C zmT=Vuf7vdLDPT@%W}xa+9NVK`j-H#bEOWS6OB=R)RdPwN>BC5-yzx z9`2{)`pHQu^cS60oB*6_hKe&nxSIBUvufm~t{{cZo!i~p*4{>URS5{ajK#FyrgkrK z29*(3Lti^(`jli-<6d+#bW@S`_8Z2~_0SQbFw5kAsa&emvdl#1#jHZJ7g4B@RCHb{ zSMo~5tkO9%Y+VQk`W3DNT{DY{t176AU}3M+u~W4GA}^HTfGpHrZ=G8AK@K$Zq%w5F z6J3WX`$?&S3YqSc(aCGob`nza=t}jc{X|a5f+cU&lA3yBdZf|g;117?(s1;J$XJ8* zP~8%jI+5bs>MvMYdaM2}+ePx`^rSu+NHLQJh)j1Kt97C`(1-4smEtH;l%bPFCJ@Qj z%68+XQylJsYN$rl>D>G1oaRE;cUbWWy4j?ThSGBu{L1j}hqU(*cIZ&_L0R@6MG z9WhabDsDs*$bKyIGlSS9>V^7}R~IOZWuWFMDKi5lFbZ5XM_x4z3}QFr?I^Ks`_j&A z!HMOwwAS#-8*r-A^x+5v-keFc1l`+A8+z1e-J8ed#x<_q)OvItFH+t0xh7QwR3@xa zbg^km+mbS^uLlCt<4C5lNwIoo9yy-luoHiN>)ouq{BQ&hO|P2ASOb7 zv(2K8P+CW*YN<4)dp#uRG-;Z=3@}i9#K;t(ZV}ypD!P%SnHgn7nI%%B(NOJ9hN2k* zZS^<0c*9hTM|BR-tKlsqPupf~L@(nW#g4A7FWuv+-B`#%nH9962Pkak!Wd;m9q<@1w{%x6G1x12K&{c0#3L$1F;69p;bK^mO**r}a#u|4hYys+9v>Dhqo?K#Nc`;)G>wYCX%c6oE%- z%SdHUIYD4?gI3)v)2vqT8 zHyXFg*oY;Lm(mP!t^`thee8&;hbU9}rCk7vk6&pOCJQG?Ri7r^RR$SG2>+t`2TPJofm2$dBD`t@R_d+NQ8-l(Qu^4FM43>y zX-_0n4|2c_sv8_N_OOT%C~GX+cRcO# zrJFEt4;|iz^Yr$UpDG{u(d=92&C7;hf>nIoHtKUWh{fQ(If@?Pf)W(!-LH2|Xwxa7*D*AMG?6}*LNT1V zbIZzptmaxyN-7Oz8p>4|)&8pUTOw^Q7TO0E;Z~A-#PR(WHB};M(22%WhP>od5_b+J zvlR8f2}gfDeMt!GZCX=gwiRK>pqwU1qEq9ZI7(@2d7z?>Coq$Ot70dWAY5@db*GNT z-OETFg#_{|U56)K4Y`UX{#cSeN1{Gm2HA3`M@1Yk3hTzFHD}rm$H~~^kq>d{W^IPF zNV!#d)evUpuDXX#Egyu4^e2@20f{+75h@p$Gc#N%Yeu>i-tkZMRoz5;swH)WzEg{u zy8Pd)vSXV}jkReQXEn#U(nBp0iexua2QT!f|I$nTXRqX_MZ(3j1S?;hNvgyqZmoWi zKF~j!ZqWy{aQz4w0es?xPCa7rwwFG5q&`-Y#GYxLs;j%9dwEyy^0p(}+E=zwdUC&< zH!W=|8kV&*(HrVA&YP|yTRJ+L@rL|b=S^FCZ{yO2wk6G7^pe~^=Oul6MrE2Edft3= zV{=D0t#?zNIiYvUTH3nl@j+TNqC?dP#usV6hks#@$62(}386dE9aT<(G#I3^5hxfH zRnmy1ASr#^>yesKRgT@V@W6G$saF9PD8Rm~M@O}*X~zKVx6V+nphy&kuv%{l*)EEB ztMD&+9K9Pz>s1ECi*%2t+RjiSpglu$r562MI6_7DYFOO)Gj}eX;a^@DIHZ+6x=QzM zQ^cAJ!%~qcO$w7zObI-)T7iBp3iFK4<|VXJ*xTIM+1{zfTva$CLHw~1WrW0(=#0ux z(k8gF{OZq%{I6qKk7-(@p`w4ZTS!E2jTTBlSkoi5gLb!> zHnW?of`X`q>1gQgZtiUBZSQPq?lkRLQDb^(uX4@*$F#=c`Ty4(6BLsTNuqJo{`?3B zAZ#_NPN#-bupD(WVRV##NxxunqAZI5kF6yY%Oeg{No-z}%gYC6m0|cmt&7X^7+Uh5 zWBWg0VYs&RwfZzZK4=@7etx#;%F-)Pe~%2tsgC{O5r#x=2-9HaUFNBR7})ac@fhh34fUL?7> z2wLEtf8LQKPL4Id(yO1ti4nT8Q9gY|%_u3AJ0xx*Kdg@x^%|shka&(6W~)+*d|;fZ z&=Loggymq0Y|iBQN;~OJP?~~pvQ;xEvOxFaWRgwtR#uZK6)h6#Ei#;%B$AY5q}(zG zC$&;LO-w5I|51=r-Syof)_3XuCHbQ>Q;B-QBvTeMu@4Kq#QoJ501;REL%n8m6mzV0 zx&@I`d8(qR{6ht4FmWKUsGZ}zG)?Qp1GV`ka=IWwMlB&OG*ihu1;8{{wZ1gY(cKc4 zeV$%dj$}Y#tL5Kdvy)<(ZxljfQqRG+;HqLZC}FNQnNJt%cycXClO|^3io{M;KUXE{ zPV8MheHDEu{GgH_5yy;IoY74gGQjnSKQK`c!KC%(cGza zx>JA?-0*SPvg{acnsKj|m+e=}B}w|sD}}-_uHr)Q$@Fn>Q#R(WN>x-v#~-Cp>TOTf zRTu^v{Z}CVn4qs_o2h#^0+GtAG&R*Y+D7H4@{ROibGnCxZOz2sNnjxKJ}O9m?p)c$ z_A#{lYW!zL-J!j!c})(ePP0X4ZKyj|WhF|vS5NDSS4JDBY~=2J>Pn$VRwG}^kDbc& z#n2x8ajQO`f9s>6R`5HVo+Lcpq)Ywu$avFs()F&x<7T3Zq9MyisC~!G5v1&)uL=wm z`x@zl0Jc(>5sQ_+&0ohK2+{|3b0wKNh7!4Q@4B}??6+@AKN-j#Je{F2$l3Z2sY166}4i3|) z0`%i)apwY9O9&>28WIk5R2mLwoMHP!mOFM}{mg^vXOp+#yyHRw zMX8($v{KRHDAC%LG+M=gr7;mSu=$y_H8>U9+t@`Pr9PUzh`V@s_i{3ttyHAGAyN;5 zG+fZtkJy~j+}p5hnK#8dwb}Z5uKpeIN!?(<$Bvo02XVX8%@<~1g?u)g6n?EO&twI+_w=D45RQDl84knXJ3cSvBca%HUi!RWAb zGD|ms*0@~^%U)`;d8i*y_*Zo)zy(BN23^3O|MT;q$Y;@U$kSyIY~y9a_V@t z&VRW6co*GIDRt6oxj{%sS5UcId_g4LX;GjcIr#}%Ls#m1BhBLyMI${6XRTY1R3Po? z*WJ@W*m0i?<(k zai|8%=%|^k-R8qvwwFsz;bA!BsJKyoczvVZVf}o?%Hl*HjhS8t-6NCfr)7uW?hy6u zaFebnkxLcxCwiSl`qEc^O)5x7OXE_5Fi*8rPPa0a8crtM&0!tUjL~IKv-)Svo^!~| zSqCTjX3RNo;Gltlnf{DJ4?1vW;@|^k_6;Qc{>02#SUXdbyoGeQlRo-Wry&-yQtMx; z1=$VuXx9f_C_@`+%_#tsskZVSOxtIt>Zz+tX*rh>d5)ygPhY7CKH5MvG+zQ$K9;^i zo&i?U!&{YO=UQGipQk<)cJ`!-8PeJuY*xG%$heUwa-51+GY;OIGgn+I8v-!ieTv4I%FE*H6ts@B@ zHmW0BB6gh#HCjJUu8>|mXil%jW13rO-42a&;iQ`Hp%XVJxI7T&+u)ncqkFTXwdNi& z%86(y8&m?&nS7ey# zr9u&z|F|0HkzMy{q=kZNkUiOZ-3r(S* zzir}Hiu3vWa<;L)4)y|Zx;DI62YN#ZaV-Q@8ugL`M(uu)#TieUdi?{g<-2`-ER-f6?0G)eBg`CE+ztX7 z^p8qBoJzg01qM&zb#ef`O!Sn@gKhz!xM<%&a5Todv*})z8e%PO% zDpP-4f3>$0_yA0-e)(RCM`h6;&y#BIX%W~*EL8_&UguOBums=w5 zGz?Ni7$K4Q0CSY)(H`{K!NY2kkoDmQ_KL`c7Kdu@Dz{5LBVx0SaEG>z(ENU*`6uM0 zt%mfbSmH!GkOA&DA0X8fai*HAQ=ubvyI{>QYfo@$0r^mkV%~prF?l!mboi@)qzcz{ z3k5eiWfmbOq8ox~ji459iA&4K`jz73y7 z=^;oHk;YXsEz!9)GSUMz85Qr2w=^T4Y=uN$)mgI!+t_Tw*$X{qtNt)wcmvB;wh{)U zdRwnzBP%?PLh*G3PY3VQYu;{ zCL3!+)s_~|+KLmoBmXVAj=-p3g?9J@rg4axtux}>l6>xU%*$7RbMXD^i_^*Yy5jC| zMW%ffbS3Nx`In+z;ML}8&jl?}*_VD39wvl|H~B&=pvfg#feyeu=R+B7CWFMcnQK^R znX}1Z7(pqMNg)lySW<|_81Q6WVlk?A0a(tVM2pzwY@p0A72EkaoEPs0a0@XZM@)%k z|7t)Fk9KJHlfk~~U&*!I_huVp*fxCQKDQni)cNGSIkPye;*N*&3l8UF78JOK;~Ogn$O&cV-&ERg@;&uz#vc6=~JWxn6p?X&HtZ+=L<`!+q^x{9Paq|V8M z8(6mUk=DJWvOKf%z?0-#Q9+2-J-K{V&c6ig_;z1zxN>*jX9cu@??&BBQrn8GR&v{b zg#gFlz1c6Y+n6lpiEpT30-VJFl4ZRW_oc>ea9sG$CH>LfY?1%rF;zn=wIR_Z)V{qN zmXvF@f0Zx)d4EYcE$Sa=F%K%+F7KBGM!2uT1M5S;8u6NVOaRwplY*ozep(aUBaf$) zZW;CXaf*fk#p4<6j_b$YxNw|A7+D`8NlYP?h2=9k_o2lzRwrr^Hk)W7XrDk#jZ{gF zcUoFr{gJHllO}{qv-xOU|HAUvY!DE{^A08awso)l6YPY}p#y!kJP4VGIOltju~y6_ zT0hEPGPRkK{^V`gH%bNaCl@>7Flk0a&biSXlb-&^XNN6WEg1UN2)gmrSW?U` z>KQg1-x611KXD5*BELWglEqo*ogKB{pY{|_eVL8~vMlnJKpnaYht0LMwdOApF&5L~ z3g0LiY_42jEHRg0n+y~Mlz!gZ?y9$f0LHz0z=Twp>z6E*VX2z&y@V$uch(EV)c~vY zE=9G>*Dq{uosjkF1uWwcTzbm^$Sk|s;0CZj0D8p$IcjW2b-+2nXI65OkUZ zSu+LwwpPi0)-w=^eB>4^VkT*~z{H&m$9WegSi^`7@^q}ol{0uC+QID>houQ7UOGmH zz9nMFj@SE-*5!D;R#G^CI(X#2?1a!52NUJjRau`+Gg~IeJ*enZQ~m5(X+PPlh#pZH z6}I%o#sD?Ln2hhAi|2zqHFWSh9U+1HWX8o7{r4UD@5|n}ca{`-Eg2iy_L(F~Po~$m zy$>2@O+#vH>A*KM`w^j$qd__1Pa&d}w?IexI5dGDX$psNj)ckhba-|Hyz>5PD#ymb z$U@Mbq}78B0}$T8}4fF8{ry(eoZ-jLIZLZOiQ03UCT<>qmGkp?w|w zF__kkl{LGezpK#zH8n~Lu|Mw*;dmbnVqj?!sq2UH_5Hq?BmAJ$>tD}#`^Y5}znNfC z$*bIKGVQT49ogc8((pMN?X_6H%jG&V#2J3{2Qw=6%t zB}9d*fmnK#0ZFv({jdqqB$M~AhqJdJ#=;AXjcr}|ka)>oyzggE`h(LR632b{3Vp*K zLGURlyzqE914-?SOHcKRuk7)uR8`L&D$t7ko!PFUs6WWNjDb6a@h6vZkB6Fxf|%7Q zF(XIjw2xsYo={+{o>C&xa`&f#tn^7A>@NS?100hN`_t=HH9A6Hu#gx9nKVMo!MXf> zh?CY9|609(?JSSf3mezoNdyh2*tfH^ANn&^;XJ{C?yUG?KDk_-j90^@)#+DPEYr9u z^G+WFx9U|%9@2silqFv%sT7}?p#3g3C9+5jp`BLn5Dpohof?mh4+K%kS5QlYs6q>( zDtYfyPaY9R!rQ_(GF=g;8Epx{1!gLQbHjmaLkT}{KW5HwL#;GSEjMDLGva+e#waBp zIF+UcRcK4o2|wUYQ3a~7(d4D=Tzl``@Rk3Lse#Pw-T^0jTH(wS5swr^JF3#ggHV*D zu|QqVP|+4q1|jZtcJKx)A+Q|fnY=WB%Fe=_I)k16@dmEAu~#mUGaV8kcO6`svAC*`GJD!P-Z(M zU@f1ebYzVj6V-^NSHq7Ueenx{gqt%4sl&Ixqc)vmWxGPaVL}%vD8MOgb1wK6k?7Nq zSa?1)J=Os#QV2{pejU`*wp`?AIRw}yIdJ&;C)}$6nTDWMf1NMp4g@pq0;_KToocW> zh9YxTZ1kGU6AKW(grQ)?EV zD^A#tglKI@{$Z>JW~lEqml6#&8+R$dwATD#GS@C7YfwApMBsf!wzAfW^9i!hUFs*- z);w2?rRMCJTGUR<`jCuDe+wL6|Kxb_CI12zqu;TLJK8XjtH&XfC-DUG1={Wyp}o7r&HrYMcjf%ZLuc6Y8{r686KdID&%7 zJQlvjjq5{v*Ze0mtl2TH&4dVeE>=6_O59WHBI^+4Tq_cdBe2{23XzKQWQYa1@zo8dtG3}=A+4Ld5{ zm5b*~@J?y?^xMHT*pC7vDOU=U$1(>=ZA6TD$^w1YRQ!Oz7RZi6AidZv{94yV2+rnT zgFDnIN8*!zi9ipbDgDqkmT0*AJVPkm-cWXm)J|+sAI6JnEg_XU)rwHipoQM42uIkt z)lwy=$ST-YKI$FA5QT`?D|{@fXH<($vC(H@E~9^!{`!DZYb@uz#1E*4Y$jt!(U0@{ z%poHT$QLs@#gJ>AXFIQ9(eC1ac7Gf9Cv4)^HECBwGpiWFZZKdXo;pAXmD_d!AY-^W z_N|i}7C>AR)DNn$ug0lhQP*D|#3it+>1e~6NrAprpTH$S#RC?JZ)dEPKe^8q(8CiC z$(FE1$w*9|3UKzyQ78>XzYQu;KyQ4PYC|#{h7VIUKBI*Yl3*@^NHckpu7m+X`(@r@ zIqSEWw(elie!Ed(meMGQca&fuR@jFxi#!n6UvUMwW6X@|f|_9Rg_9p?Im4k(&dL`Z zV>pwk=&lrvPI#-IxFwU4S>BZsiXK9nb4G0h`8VUHbZJLya##3D^B8yX%+Ckck}|{C z2=PTA3<8l6a26mVW-vYPUCty;1bQ77fUoG!T3t>27Rc|LHI+#+-ak90E6l}o&=Mz7 zgx;_b)F)ZH5!574HiAB|?P(tyjba)`v}%Y!72EzWIJuhlj;TykF-q;t!K*Z=$h~U8 z3%o9JB?Ikw;A^A>8r;d|6=xT@rdCmK>d2%jJGT?+)+)rioH^^ct2&x+(S23wx?-tVE;`$8hnOW|%xT42bWcm!+#32~cjknLMEU{Z628c!KehwXf_>Kcv!B7u}dark)TUkkuPtibo1=hQ@b_b5|Vn=F&;Q?774{5 zsOF=xvKSqIztFp&DcT8fQ)Gx|&IEyb-5A4ALDxm6B$Qc(cZr9RA4tqjYdpbuBjWtQ z{8oo!{)S-qA-tq8+lzm#A|!}U`ja`5VvKyFQJi)yRPQ<)v_0$GzQHW+s4dEnvOt9y z#3|?e?MHa;_rjV%gVcF4xZA)&Z?fCDSm~8h=`^sD(?8QYuNK{=@%)}kE^pmV|NucB=M``vrdx-C^*HANylJ|&2 zs@;$h&C6m-o$S^DWel9%<%ri{Shrl%{0P=i_ z5;S*or`fzy33xMufMgdK5>3?XdwVep;qO89R~^T3brV4pERY(rOmt&W@LdE((U2)` zi5g8EE-Yc}qOjrx#Z^YwbZdxfI2eIL+}H<>25_;j)sK1Ys>D}>9!^ud3j|8hl zWCQ~V)$+1KY#Fu6g9h7MjxZRtk%kG>E?V6O$ui!)Y;~O^3z>&=BA~EzNP{&^j!q)o z1VrdKMeSGe+8ls*vJ-tdG`gyecz7-tTj6lStsFnzprQOxR#a;XL0e`vrDrql1@>bP z9YBy|D}R{GU)Na7t%wRRv^`i$BA=;x<@C)-Y1*Ni?li8{Z>30r<1lsy8xz9^RrO&K zf*rnFRD`x5hv5Jp&4-sbzTxNM3gW>OkIJMX7PYeJ;6JVqX$bXElmH44&IAjw0HY00Vc`j#j42mi||O%8C&aGzd(TJJHQjB za;HxfzLX-9p5!r=*3w=U4O1MErt{UZ8}YhXBbj6R0IRHi_SAQb$)s&cI;#vT%3n=8 ztu|`S42Rf8Tk2r8$Ox%O>RnNBw1(->+&1ao1vI(*ilEn`3xli5T8|~wk)vK^8Y%FT zg^dK(s4d`PvAf4K;3J)57&Dwcls>MSk$@sEO6#6#S2gmO9%1 zxGVM?LP@7|$sJ4%rad^WX5va-_Qy#ydQxRPyoF1KJFT*5>owrIOr7rbc*Il_v4A?sh3$E>p%lS3V zA4r}O`{jO5u|8ZE+sDm+%qC;hvtY7cTVc17j|$>n_IF?D%|EyT z=+(BAf0R#Hv^%~2XHn4IztwVgG)J(RNLk4k%aM)Ky_g{`D0Ab=G-SO4;)|K_p-krr zT#?2iOUog#HtZ_w`mliVw7gtwxagEyakZKf(+8CzIZ0Bj!q&>qCOB+isSdpcA>Z&$ zU*5qe${=PRY+Am=-M9R~_huucUL9%S8>GY^i_A>UG2p>qr`(?MPyPfCL-)iqxVVKb zN;APEf&+?ii`165sfP&vTE^Rt(@|d{41&%>C3p<14pEM~PRAJ+Sl$_pIHZRhGDU~K zz!b<+UZaD+l<^C>x9dkp(des?MPohJ(a;Buinb!O*a7yxaD5TCiOi@vT$YctS5b>` zF#ita|Hu!sv3N-P(dVaNQ}K+}6ajHDEn6kAY%oST;Ph6t%{X!BiWzv4E+=bh$&ZEp zRHua-4xZ3Zx;179;LyJ~SwWlU7{eDyzc;ZPk7cdS=-$BiAGL9$W(&?Q} z4KsDM09goG@q+?Ejh!6=Q>=&!K5My6dzch1qa?%4F_+?}HWI@SLc5kwa0yiW!sUWd zyl`t}5R-h7EIBlk5j(M&ri!wRjEeSy z+bNkP6d)=X`tEx+dK93ZUh_zgRN25Sv6lWM2}$rCN$@KFAnip_ARmf+cyhMeARAMdzTxp{_=hch_U7)V-xO5~O|Ym3cUcu(y35n+BNh>71qMtmKW zi4^X;uz`mAa#iz$EQ^~`i#o&hSUrW(a*cy^9ADsk+Hel(>B^sY_$54l&DE2Xe{R9f z2|1DElI{_xd8 z?5UX3@YkLqPj=NMX$E0K`lOYAj1%*=TjEjiO2A=DXhgHFR+2~?N40gqY@%%o#AtF@ znpp4)Xt#-@Kmm@YS^Bq3Picw}wGg6ft}2dwyzx|lpGicx??KND zX7=F_r@SN}GtmPT>V(vZl;BADNQ>j!BvpsbEok z=T22oSm*EpCt*N51KElhaEMA7boRpqXPsC1HDscIpTblvm1szAKf0k2)Sl9p2X^m9 z_E~+22b)2h2`5tDe22FX-SN_~Mw>F~pcD+eL{y#K`eJ0{@uS>V;Giv9L#uj!2BQ)2&&7^kz_Y~&!csv7&jilCxlAvb zDn4evBBy%Vbc#PyTed7Z)T{Lvke-3KNAJhtX`F&Cw9Io6JxmldEKlgljn^)#n+N zS(_=?WPt0k-wZtP=^1UOfdnOagDuwxP|QxILsd#zZ}b`#9O|#0%uomeN4YrRM<^*cJNY~Ubzo{S zB@(V>?;QQ2H!c;H~gfl^(yQDXaKFw*f zJT$I{!q5#H+P!hpfm|Ge+Zo0ijZpk8xh)0vFRo#P_2*MuDAk|so+4hhaCgeObuo+8 z${G!YcbQ;RfO4;D9*qWO3vAv%9|OsB8GOVwZKBv@bj!pEyX$Ar_Y{AzWF}G$I4Rj^ zwIj)Aj788L7$^bAgAk{_u=nHU>#&}o$Ru}{DaQ|GdaiT-WIoYgRKsjY{GwKD!CKL9 z+ACgT`tJMo_m6}^pLF_P-0!TdQ(rLiz&^tR_4)IN!QY9q6&q8p%<~4g@|M&tQBf9? ztK?FG^Id@@h<*1$XgYxv7xt3M?aA)xmRedqw5`T%J?);#2f0W;GQv4E@Bw7XFTHH5I;jdvOp1G` zxAG~w%qNOHKu&DvfhAf%S7{m52UMm^DNdK}cA?DC6jAlp;AP}Ej6+)UGIj|qeyOxb zAN_oA&^sfeE&u_trc=luFQCxP+sxZKPUOzw`KEJ-unK$+nST~%2bTH(T_w{Tk zx7n0KL!n?_K4wmraO0<3&Oh6M?WLs{<(lOpu-rel!0>bch$%zPrajinXd-}(_i}ML ze7rj`*W=OTc>UgN{mtGFuQ#7 zi#d=1C#$ECuS-?b90N9zXegX9*&scx*iDn^I@E9k<{Ry!^lM6nzjKR}NUO;AZrm`h zCJLWRdjg#jN&!yW*SBt$B0##iMibngO&<_NHZ~Xt!Cc-*(SD7>Er+e%^z0p6w9IeB zO(@Id=e7+|ZJ^6)x*DES=(u{Waeqh^*(aDZQeQ53T0g# zEiU*1cUwm3x65Q&F>|~K*IH}6wT2pmGJUYPv{z_cq7=1oLb^J?xYR$e$CM!@y_Wqg&# z$?4=mbUa);h{pw_Mi3J&tQx_|IZka5gPWig*IEAYkALJP!&eu$#m?dws79I@k8163 zTOv+~j9Zy=qGzu@!8yNpf(Jh_6ppps3;hEIqA9v1tGXuRy&5Bh_-*Oq8+f785f#_I zqY0dt2e=F#m`<-Q=aR-femQk>yGDr?T+K=agVdS^%~k7Jh> z1NISiYjMKlx+(SYqZ=?#7R$QXf)uzx>Qs`6aG$&0MYvVxv_MG-)~(gL1tr&lTjz-? zT59v0Mh&kQM^rZIntF&#=8f1pzueLim8kz%_<;6WwA|$7ZQs^KGt|JgNS^_Ig40nm zQ{#$K|3yBF{3|KxfK7Ha*vEym6;(h5l;T&}WELMz`qJjNAk2cJOX#5yQF_Rrhy4oB zlLDmmz9OTuPI5^uk6n2Ad-6!ftncNy1PDVBzw3=7wIA-!uUYZw(>uC$#X>BXOHKV& zbRj)hFI>=@AS1Y_G9)eHsyc^*zu43Fo}X1@e}+ z*3OWkIy@DBj3lEFv%P?xUel+3-F!Ffp}?*Bcc3RqjITkXl<^k-rSaZxLXDTTuFwlXdxU_2HLmA7=e0M_uVGof0rb=(I^(FTO zmihxMl_7J-arFqr%r#_nt@+n;Y#B*RRm|A>>Y9V+=;r8+X7HEbQqNKEIu?0AU%ulll5Oy^aEAeoVd#4a`*sFX&FN8H;J%9~@tuow1k8D@HI3boEzPt>rx=MyZGOlj}|I(L{@Lnqeu$x0{zg)97zETQ3bL7Q;h_rS;@2JYW=-Vh~W z&LBUeuSy-)6%m^g1ayFsy7S)I3JXW0*cM5=%c3R$H!dS&Yry}>x}?eaaE5)9OveW5 zjR7~d4Nf71%HepNos)M#4B!f?$Zi)mH&Z)sd!alGN$3sS~gBfsAx~OFKjvb*0RAeOGau(^b_eK*u zp{uRgJBGI4AAwN~W>7Zntn8F1+Z61TRnqvwmDS@>Z~V3^i+?QcNkn%*s!&?4Fd*Xu zx08u4dI-@LmVFD4M(~Q80%2EI2n*7UNsdJ-h4>Ucs|!Z;Lq((sSc)$V`@qh*lNOgx zto7>>2n1ZXD>ol3Z8U#f;%~q(en-g0c(C-(f40I54vJ#K((EJYG*3tHd5h3+pMemU zEDi(_j{YDe&;0sua%B*^sjp==z$}ftbHfq&20sTrWeeyqF6&UeoBP6UDW@pHzyr#e zdmQjH9q6qHkwd1cu@!><>{%d z^LOb7sQH>U52am??HUqj=;6btV!e+d`e=2PO^(7^*rd1~M|@*=IJ#d(lVCzGC5S+{ zj?lj3)n-RWi1bl8d2}?M937#mv+6ixXILrf^8g2^nOgBdCHf1f1t69+WLBtJC;>@i zU~{aQaJq|Bfvf3SGciIS z(6tPrLLx4GKvJTTQi+EI2}1E~pb}QkQ^CjJ3C4d;hf_!%8bKgPSS#bfpf41KZBD|e zkbQ;1WXV7iIfcuRdJ+ZUdsVNPe-hO!;0T^K!BCO@xV2;F8&uHfa7sSay;PtE`GeN7RR@pVy6&vIe9=F%*=+b0$PBcMFIat^oOH zKAHDM2tzHyfiB0*w>Ubbw7!5N9Zphw*n2lYj#N~dg*1lHU76$CoWCEQ0Mr9Y@N<~_ zkO#mi6&%o#b#gW1+@Mo?CunQ5f!~;H3CmwBH=3{b4jSb(!Xr?wlarvPhud!wRutD^ z6&1;9*J8%g7Qhtr2bLR)tqWZiUm@)%|2B>pdyx90Ci2L@<@6ZXJwY|#3+M%wsl?@W z3-V82Vzch35>&(iW-9hOG@`jTmyH*|&xsiv7z6;EldE{ab|sjwIZVC)&y+vt+vULt zPbBL`D(*E~UIUk_3^p`C;bp9{+COFk;B>(iJgz5+8v_fB;3c?aO;>sT#7u^WNg!nr zwIG-(P-hEV=W)6`;&xY-=wMI=i|)!ZShauMWd)QV#;pP~@2Su>dROxajByx#jL8QF z1c_f`D~``HtrI#4q~L@_Jet2r%uAJfN<~_8H7F=>)39gJgQFTvuG@UNrP~oZV(Y~Y z@c3>pQbX}#cy>PLir!SYjuLF%o3b5wfG!_-esA7*FY*Q~-RTl^A(2imH~+Hx8v9XC ztlO!KA52%85zQ-2S`Vx5hkYoqpj|0M30(GRB2T8djZ#-&@A1QWRK3G0Q_Kfky=LNR zL$0H2G~Spw72PJj*qAsx3ny=}URRVPveJ;`SfHK?V$t{dI0rIqjuJOpPA((_eu4%5!Y-N5asJX4nrpdL)%wwqm{*?+RJYIiEMMXVkV!~_5U3KDdUy8%$NUAI)K z23MO11+bkMog`yphU5oZoTS0+dkObd9jZNCH0}KCfnvWuZU_6Du05OKx`fl z;Od5wAe@m>3;YLOt2q#X)xhZ{Jf0$u;IpcjZ`Fy{9kF3)sY*Ffq3#+P+9waRAtHJB6yHLUA@nd+|U`XCKah;H!LeH61;{ zqHgWJdcN~RSMvFuZ*HM5E#cfH7kJ2|L4!I8YCBqNh02atc5uB1}pa z9Xzo&y8cfnhvH49f-KzDvYZ0nHw0z4aVI$fJ&7VYVa@O?L?*iydrvH>M7HuHLtyc< zwdT&e0SSb&hsgwr77sh2u83CChcQNupz6#R(~yOTpu%OVF7gc8wZ>m*w{y_Ycy(1J zaMIK^3|TsbkK1DcEBy6@0l&v+%WBk^W)I(iD5~Td@6}rEaRTpI=A25P_7=FgZ+~%J z(TwrkFGBWvkg3XBBz%)WB6J`jDLpudsXHQ>`Qhpl^KGSJYPp$nehx~Pp~xB4);f;Wpjq$(HRUKD62$5p->9fJ z2Wf-Iari*v zK*C(1AYdiI8ujeS$PWw6dcc?uB!Jm0P*IMCI4rSlK+yXGJo5u!#euUekBXaJUz|?H z*AjEg(+LaeqO)JAiNr(7T|1v&jGUzbGFou>K#s_S)Wlb%IXiwL<`V)aKVx?WW<_-h zJJr!8dk9_=W!tjLGM=NZJL;k2&*~F}yKg$dl_AE-!;y~fV77*(#N!FQhk&}lk)s1> z(*0}~8{kduqqQckF#n78^1pQ7+1l4_t9-`NPU5&edMo)li+9=(4;zOT|J4UN$Pl9} z7pYQAiyUx)49gZ)F}b*HCtfuw(Jmq>FTw}D#!~n>v(4!)V0RNfR4%G z?4k+!rKifIFlNg8aoEHzi8r%LA7ZEZcaXw}r-Hu*--a`FGc1LrK|taiVwF#?rVxzq zxLv`5KE9?tDdvkr*NewPl>r{Qi9$&qBrF`tb!rbNeZ_CtHzoaKq%2b`x6ugQQC`~o z@iG`$LtNvFwA#~fj9Mw&kG+2{)%c);1avl-@q+1Vq19a$^v23bqplea)M#P03 z?ehq4YRH5W7+i>^nL41W>@~Ockyej0Bzl{+cAR*P zhU1S$r%a=O`-PfD1e%J<>*pc!n)G~S=PeDc(Ja&bVzjn694-Q^${%CoO_Z8lZSMY`HU9b# zzy2Vx4{l>+vna_;2Kx1%ieC%sH$GJV)x$sFE7e2YJd_XscZu;N(BcOO;@4l*H}5HR zve_RvlWos9X-<1Xo+FWkn?+gZw$a{{lQ^*ma1SL<7I2t=)g^BP5f49L>79Crfcwa} zdX9W6&rO2jJ4fk8#vnt*gTja^CiT{&$Yu{QZ?s&0gY9&C%9vy|yhB<8?FGeKuw%s# zKrIU7T1j1~7XW33s{i7a`bin~a|9f1K`fmOUQAGXkQa~&r1=&Q7`;Bu5=5q7lUIGo z)-shyL_E8Z(W1V-j4*Y1A@>kkWq}!%bI_(hNmcjt#!yRVUNxc%4ei=9{7`-mv|niXyo{E~A!x=z&L{gg-o>S@mh+F$LI^)81t9i|KWB`0qnZAn^~5_8m{KTpmKukx&pXrKI^)kV z8~i%^_2J4t^>^v5Gkef!x7Qxr@7(_!g^bzcurvEYTdeTyFZN~s3;gx?3I6jrZKT5% zTcdzmvvs)q@E7^X|HyA_zz(6QZ(h9U95a&?RbHn>^4Q^d&5L))wN~ zl~cK})4Z~PgonZyVRNPusIDj(ZpBU*^G*tiDFgPEq-Vt*)H=rQz_AF*3Tn?R*;b@a zr#~#5sVbk@BUO{2*MWO=wnmc~dd!yCNJ+|2f>{W);*rHG>}LbgU_IdNk#FsfS~gJ zu_`Rm5zP@Pb`(pelq>#40s0)3MzQ~(*2zJYf#LEyz@q9mt6r|%(|YkKluS{bPN6NK z%q8WP{DHJyO;p7dthjd-b)!gCQiF`;(=dC{95lYMq88(KO*DGa{PH^}t;<8smg}KK ztBVQAx^Tdl_+H+%0l^UEFOi$f|J~Q@WQP|URP{DoX@fp}Z2*oxKYU2mAJ{KIE)qgQ zV2j|m6;UkZrp@FdxX6R+5!HfMFy6ShBtgSh6%kSThRPD5kb%@AkOQEP$W;$nMWDv# zo)W=SaCkE%p`qP^A0I$6%W_u|5kfP2e~eU=mO(8L4&OnGDluRTpey!5_n;;U1XAPF zu^Q%urH$nZ&eo5#BwpA)iceSPeMd<0E@_hql3zZEUZIN43d(ia= zbs}buN#BVyfFxM%$xyGDX9g{B`8fGgb|?O$HOu#TPLtJirc)cwqt9Eu#uJ1kSuG6q zjM}ZVPnSVB{8M%r{Tb}?(4Vp*6>(>Mw!;gSil$!U6*sXQ{E$Z=Y>UtG1=GT`ULVd! zl3@XY&myVT=1o#4r9!p6;HTX3UKo1y2^=vT+(rsrYav9NXD0qQG#(M3QWhD2cdS10 zsgT!wm|2k6aQIrqY<(<1fjd62;<#Zjbg-NugPwe>d2taNC@~X?g7Bl*Ca#m!c-X%} z(8Ls}Isj8;7lJ?h8J5p#n&3>%c?xLn$NcPaI^L1!S*v&WRR*@Ceu`u6~25NZt;c52Mg}E zChR^{E^vC%e?Mh$(p>FsAFX}y{gH?$%V=MIXa~)d2MJ`**8ccaQkE3vGE-|wW-7>p zNhRPfHIo3Qw8lX5@ZRhf1M%KW%+rKMoHw}r3NQ$XjFUkG@(!iu7aslAfeVusjUiGd zi>JsHZb(a}@XkkVED7QtNEcmc?CI(;YW^sOm1R zg4ltYY9hF5h7ew3&DaxX;(V><6Kh>uFL61ILb{l1RTvhhFm_bm~TKet{%{fm3UyTW7YMm3DR%Q*QJ@#Q&SQcwAmuSaK|)TW#s; zSAeY5W6C913zgsy+t6C8G)rZwX@|UHfpeyF5vJ1DIhZh*lJ&Dmv4}I~l(2}(l@PBWZzE`-M&(+@rVU<9>ORo{ zIuL?lYuI3GMPBwPSl}Y`nQ=kP5I65O0iUozM+9^%Fd}9>8gmbj_w}*3m~U84?+8j# z>?p^4SlQ6KU+1RyNcam$Twfx#S=jnZHNPo%Qlc`-OJ`TE zKoEHmN$0y{Y79i|%{J2QTBK#XZI?GyWQdtcBm}zB{Nq<@G%(2GgJ{1*tbpM{-aJvu z+JvqKDp{-e3DTC|5o2>-z2<9lyK@7`|H-1?B6H!ptPr$5w&@i?QlYh|7i&~4qLQMT zzEoQt7GRIyz~^mTqPQ91xW>QsqxH21-#@u8KI=!1mLF2fAP^#0Xtv5fuMwG>LP61_ z>lQwEd@S*@;%n7RFHyj$0cc&c7Ytx|3@?jviWh_N8KQIKL16je(j?UcrDt6&jwkcv zFX7t`21n_kTyy%bN9*6WJMX`^|Kz_gE4ts8<$Du5R_=?-u065iFTRjA`rtd97MM3i zsKy5TLi@45U^nTM_3LDs6;mXGRJ7pY%7_rFTu5MR)XvS-#~)S7W5V(_@MsrMCzFebsL_ zt?q)t;L&Sa9*@QvII==X@!M=U7y3pe*=>W^!rGYn*TSRO$9Medz;avaK-)&nt{gn+ z%~GB0?~nZK)=BZ!Ws~F-ly*g=#tet{^7kTDS5Ai? zpqcQWGyP?z=qFRp-*WfGO;GrfNq7Q%_Kj&+y4$mNj4j&1y|s9pUj&`j@-1x*6bG{} zDSd7!|62e6;)kw5g+|O(W}+b&IGvd_l8x`PP1_c6&*rFHVsOBlc2{(s)=yxx9>2K!cB zhW$xkOS5g!T3(!nF>b@8vI~?%eCKaj*0=dkSYdLWG^(9Badfiy`}|%$vIhd*B10s-?!C+-eugOM(tW6H4ZmsO--PZ zu%hDuB1AnBv3f9ivLze>!`+NBPD5H(ca+3))`4$>5 zU4}X4qGR(wsCq)o@2c#jc`zvcFZtCnEtIL0HiB>PIsakwGGKeQ+60v6fJ*ChT6pCgvZg10&0cg0NhdO0ybzg}b>OnkBqG0OGnH*wTgPW? zz~(6ztoa~qBJ+%FtmX^hR4CJrE7kac?edz&_LdEWgVi*XcizaE(G6|A2|p?GfSM1> z4f%N>Wr-h*l+B(Co4&5sLL>BuAUWtzC-3_VJj{ymO5_{^>Tpah)Jx-8C|P!e+IR>9 z6C$6@`%n|(4oh8Mpm>^5nQ_8P=#$+jN~Sh}61D-qE6TKCnvB+S7-Zb%!l`lo9lnQe zie6k^Fd**E=+afF=og@8Dn3s)MYv2$TuS;zDBV8;f_~@apRGOc7Unw~OInul5vw96 zyUepVq+k+jCwP&?wdMhfFi6!klwm^3!C*=<#o;afII2s)K0;o`JBCy;NE^O?$O+MY z;j-c~#rqEq8-5ZSUJc#6zsPVdWks;)0o>BIrI5sD;Ith?iOL z9&3nv$I=IqKJpINJ25_eb!&f>!fUE|ClZ7$88=?0!66?=j27dw1!Rw~(CIzrw1l3M zeT3bCb4I=rGbmpnpLFX5%3)*KwWsJBPEVcf{JgMDwR?+2@PlXB2^w)1MrUA|x_Kqx zoYy8tsBvquL>=jILSX>Ozt|!twlf9cxz$r;E1xNMWDG0vH+q6uiv$@g(La;0uGj-f zo&N_hZAy^nH#y?>?4_VxGY?CP^PG-wWpPCgq7agIBwW$)#cy_IyC9Lrgxa zPqp{t~c~E*@jua$pCuI#LSG92s z+jw9+xq#Z=eiIICmq!baA@>aUSH5lv(5v8&B52n7r1qkV>IoKsViY==Zji5; zYYDPDD$*^zE~9|l?;*JWmpkh~Od<#W$|4=$&?@{^8Xh5_lktT^d=1z}u?^8lW|PW?;yI5;R_TzPSP$fM~s0M8yn zDhtywPjvb1GcP@yz0zbynpV5xpWGDFBVpHosCydTK7W^zx4hEYmD zy<&Iu3Em4EQ5+P$pIjC{&xvOBiNr#^7@#ODBrZ)6^d_!WvZGRun7F*mdsQXLeD1#9 zqP%$o8V;l+RS0j556S zD-^>)y$jgByE3O_>bq|a_TDh*?ysVA!c;^k#E_dDUg5ZCq6@g+R1j^~J7_~87$m0a zy+*fx9P-7I&vCLfzx_+@tN2l-3oCaL7CYbsbhbu7@|8Y89Go(C)3Tl46efS4(d2nw zt52A6YXGzevM7mqp$^Cme?f&TVv+n=wRs;W!_)#J#jf*jOPxnNF3_*fAT9RG2_&7U z3c_2ZhKTI$&97#-zxm_}ejhkILPWFqshLulHxfo*F73)*a0!U@IFKYL*C^B7<*2i5 zFH?(xqP%eNU5+p=YkZqblrL0A`1s>gaqUBFvB(-yD`pHFy8$)u^*5;KASHbJZ^(V! zKiE8Yv)_IGV)KXYkDL3*mBrnEJI}hz%i9OCzxj^o{dKK1;61kf(~YgYZ>__F&L93^ zq4tshh@@Lq@4;7Je^vX{_TRR)_n7C4d2~1T_R#tdm_huP9}q<{SoXCCEh5rqOPRgM zEqzj8Kl&(RD*Et6;1`>$XN~2+7M1vhNY8)^0S#&o__*Bo)a3Hfl_3NwZ~o>1bCv5? zSdp+(*=GU%yLIXdCq!Yp(?QK}(1bS2(W&iYqg7OMi|);lz^GhEzw)V~-QcyN2)`52ekRTqPBlIyp^hSNefj*?4A?V8aL z%inHkdO8x5#ZU1Xx$rNy$!(Z9w$kK5r8Cj9}tbG zXSMopMSgsR1BUs@+DZdbQtSJiz$WGO2PiLsTq0PmQjSP!@$*}Yzu?m~Dg49p&<77# zr|iK48%Sr+o)1v;X?7o=;5r8^?sRf>#;Z<}C~p+&*g6q2y;`G}xDn5W+ zFB%L1I6AtVyhrwZSY{wepFenj$0$LrB~@{DLv(z*_J{ioy2IKR!;|UczC>bQaGc?s zqsL4AdVbNPc+`5R2us_D2cf7m3=ImGjFfN-szcBmu4%D?H;{XM=&xLww_~|HL29E( z=@kHZK{o(|gcS6IyAOqlStvp(f8a;~hcja>*y?riX6BCMAwAA|KpgbXNyP=nC&^#OUjrxYYZ!D~rCFv$a_L@(C?ALRwE?V96%y19NB&VRf*ZUWf5)E+?9tE)4d z$dI#Is&HY73)?)K_NNlTM7PL=C8oxA|={^YXcCV{>K%a0ASH*t7SS-X%dwl zu4bP#O8edFmoOq*oUg00!%1H(Y9TSatY)c2HLfm#Hxnm(MufPuzTE8&gUUzoY*M?; znavB{l{UI2XZbG~*YE06x=)L!NL`epuAJ}5g1|6F^Z=&CQgh%O_yaU%TkHboZBj5N zAMpp=lqvMsMt~2BPVxdz8~bOFHuo#+a1M`bB{B@Gz1GU;&4wUj);NP!iHQNn+_A+v zFXA{u{a1&lA@IzuXDF9}3MOl7+-L(7+n=1g-PoWAIM;%8%gy&NbDQ_PD9{>`H}5r9 zcMBy(8{}o;Do!fusCW5potsO#d-EWOupHgeFPk)1UzFg+X?%j12Fo_$=I9&eKf6M4 z2D#v{+56%{@q0uIqr!%?xOi81)m*=tP1mI&Nx*E`A%8Ye7P#FKVv$$=EooVN6klp+dv3ePivFu8Sc{2+bGv@iHK`} zH%553V9fh%o(WNdT}i#0+sXyW#Q{JjHVmj!eYzapdI?kD^%ZiXS3F@iSpd4<+dTLY zg?;o$DQSRHCF~6zE1`0cmN|l|Gh;=+&~dT;-VK;KS^x6u)sxW>`NN<4WLM9z-HAI2 z0Z0nu!$Xv8Tm4HuBtK~4Mxzg?IqNt&g{M$9Kj(p36P3r5cA&Zd|3*jlK^a?m?LGPKf-WV7QqCFsTAp(IQ;Qh~-(tHLn#Uc5!YAB-a<|j`fM$ zLZia^3aDQYINx*$!ML3Jgy5}Z<;#o&Y=j%im*rF*v0AZ{{sn-`2K1}0Q~Z_}ymkZL zw83@n7#?o!{|zreh`R!|8C)XEC>T#wJ(z1H{f#lHPyynH&!BuGp$OXV<>(4mfT6D9 z2i^dItqCH-9dMhdSFabiy&BA)^4>xHYw!FLCmBqejIE~ zuVINX=s<3LLQThUBk0+f539=9%uEK_dZtIi~}7Ib8o!Ph^hI+N`V7QtC%&-mbl6&6q&`x z`M|*cjYSjgKapg`qa$|6IWhLY=9YhZ)P|0af)_{kkL065eq-H7e{Z9p-~FSb_8R}Y z{P_hjvixxQs|5!9d$R)xWuKx<;P;*Jed%E70bFs*5AnaRSRCS3$o~$~?sR@@>gY%` zUHB9IVv+Xk?;mrJLiGxRb^#cdKL2~WX-P94WMdIzsHJcp?^c`W4Rc*ue%Ki=e|77u z(PL-aZhq0}Ec=(8ag}z`8Kb|43-|Y^(_y(_1E$<1-YwQ6&MimB2>EL_S^#zS;88~t zOu5eAKl%IuLeZs-7k6#@uR3H0iheaxZP8mW$)H7#0qA6~xrOycymkDz&e}(u4?na4Q z2-P;LcW8=F-7}rp_sB_xQ|1YG-=mJ)<$+S0Rfv@cq)Lc_1``t7 zp}?9t9Xx3<1DYEpL0t0JR}!$8PN$Y*L~&mH?GC%Q^8lRVi_W3&DfsITlO2qbLFRRN zA%43za9SmGgYG1D?B=6cbmXu?ZHeJy^dGT`TPjEvEm2EW?4T-;p<*s>jhPiLJuo*? zI`ZnfuSDAL*b2C|gPy{|MWrhB0TNd}Za|T6O!lDy;^y8!aw4I;7eHV5KG-q80~+mv z(A?HrH8kOSRP(UVA`9SATuBjvH6c>_HGW}R1IN@j|MJYvz@+T(Y?*=@)0Ru6aL6*? zIkz9v@||{TD8KU`<`M>=L21MeH81|e0_#Jz;X~`XCMOjOLO9CloSdp8 zVfqrpp=24WzdFF66<;X~3+2IeEgiLC94ojdnhd!&v?tAePCu{p0A*cFl zsfAdcOfuIxQ>E${w|&6#qGzEjV9}1P`Bs__`U|$blrkp^HeaOAFjs=!DVId4hC2T$ zRzHSyh3tk!zN#!PQ~hB?Db}Vx*q2+Hf`j1JZy0Z*X@|p;kNY0(iU`B41_56pJc>SKb_jZ8DW>W<|M|*xoj{D z1ZiM@gZIZ66ddcad_1cDN$n@{Sg`0;Un=Jv$A}rNCF|uwv0VJ;f|DV`hy}xKYq&$U z>J{7P96haGAPmC3x3Yfz7a}4hfvdiT0oDGPwUUA&dVl%=Q{!QOI-K|d(l)haVnxW9 zC`&(}NK5|?!l)eRb7BlV2{T%-m;ePS)VczhZEPfYy0UU`nbN`7T(`_FWbvWsVL6h? zDa2cgS5k7p{zZwl1fO_{397zVkU7GsK@Dv1sxpldZ2j3%J@}5+9YgC>+&g80<)8|m z=zUPp*p6Kk^t$W|GOF??|3r`g>WMVlj+0mDs;p5hYcVV}jXX{_;YP55A#M!nfq0r! z^I$HbLJnsYfM)l|qd@Y5)+~BExJK3S&_YNP?=~|@=4tf>T(eE)lO?T?Q1*Q&S6*1qgyjTX-RVJASD9qssUF$y1Om>d zJ2i>K$ErBaK|karpW%Rj#3g$gC6hU!UnKb~)*HW(Sae-rP;*;ZdZi5iK1dWq6prNytD!@ z3r+e~Y&9QA7RHlU=M9Cc9Bj0scl9NQV8p~|8P z=)B_;oeq6Qxd|dHAG4wp-*vXxVqCBeT=YR;LM@SLaVO-(lk*{3wz@ih-tuHOCu2); zDY!MIxXzlddK@5|Pet)#3ebGSd;?c}R*h1bn&se>w|T)Pi+o1r6;_H`@Ra>TMXF zN@KvV`haFjBPEa{;(XLf%saSc@*zbWcF!!rq}wv2SA(XsN1KoXQWJp45=UnG zTr7oc`A^#84O-Bys8hlYg%1#0Yd1;yJC`=DTRLBlw0^Mr!r+5@8S58o7N5#}Qxh3C zt5}DQ8>$Azr*Tu>o880z&#FIO zMR6p?;uXGKjUNLgT(j-n7vUGZR3uUIk`>a+ghEO6_(nM71ovu-;_754a%T%vD5#p# zLrzLp2l>VZlTqaDGQK2X6m{OpzLE?!(SC)hPwA~q2|93v(m9g=D(#U}9-Noax#Q17 zgNNda%Y{%+q3~468fF5N>B4kV2yQtUVL`BnJ;Brd<;V{gq$n7Pt#IU^+P=Y#AG8xk zJkC|b3Ib)N>B+!~^CBnygyU?~56w81R*ukx@eO%{*;9!`BEAM~N(|`{e7?L> z0E1>R6j8U&mUhdJJt=P>q*OFSP24#{$#sx{3kxj{UMF8-@C5gGI*p|udf5o-A=>pI#M0Z0ptK92bHq5MF2{!4VkY>e0cF1=cZlf)W_o8KeE$M);^?9) z#MOWCT?N+_!~_+L1Tf|5ek0xrPJjBj&G@#aEQtZmgaQ2X#9pGpouy_GlPjr-sNDi(Jrq6XqZG&|=1et;T zn6oHpXlJ2u{R0sdAVf#3J&Fx$Z zbrr({I>1plF5s&{2zIbED5J#RD4h5Ukf*GP`&_~EmYf=XSHh{d2J^dyGNe|HJ5fDRPDr-n-SzG3Z z3V5|TLf{+5H^DA8BEO)@z}_hE<6uZ`LgfUG{0obhh~7V zG;Gwq6IEK9mclslw!5bMCth9T{t^7Aa4u) zsay_RwwsKeM3$zHDFD*HgM=u6XL6)~GE#JHplL??pbTTUU`5DZdNfG3v!StV)bFbYRh-dm0O}>kxLb2+JV8j1V?SDLPAgqLjP( zWK45!gh0f|c0d~b-P1dKM;;}ZiTiqE16I-O0I9CAcOb<;c$y+(6?akFiE8>i?r8u= zpDxse_F%}ZiEO`tf`P6o4K`mS5wALkK%7%ix*tU|Q~oKmH1C~>%rpcDa(ico8UaQd zOC!J*T`5O6O6PMkYVg%hDlv3@H#RQGA@}iqI6|eUunbyDx`yucUU36bh|*)kI&W|( zHg4KMI`&V!(bXWt(>GE0&8l^BhP)^bt7#J{p%4@I?K4eP)KWv?Qol>^WP;&`gsG-7 zA$`86NaX%PW(Fn`vRZnV!!;!UNtI>6rP+FY&L`+$Cdn-!5A4tM(RCqpyRgn!S8WDQ zFa}v^Xu(zFlVL|(=-UryCHtcd-I!TFqWki9$(516T5ljAS2y9rn{PC0A)%|A-fqd# z;x3TU{DuMMsBu-Jx24{qZ#{=-K)N6Fd276g<1b&HW_#O zD6J3IFUu}tJah7VCwuZQ`>6T2{rdIp>n^W<5vy3ffsH@!N(hji(y;RKYMm1A01k*z>BV)tTp1~bnl<2+rVmrb*n0*hTwJKKB@9rBis#FJhKIv35U(L1K3M2#}71F&g-?oB5juBFQmLhY~Q zDK-H9#aL>V{I(Bn(|M@S1kNd;?vSJ?PA2_^cu=M82nO^}wfo~h!cUct#fR_%#6NOp zKzt+o8w`?rV)oyac%C_zl(ehB!z8#va%$HM^bwKpA3P)iy&%KIFcoIZQyTw8&tlmbZVukuyVG5B-7bvhek>}`=#rnl<2u)l@ z=e14Hlu+ad-wN`1{gj~2aEaZ@NY@hmXc_r9i#l}At}dmdUb~YV$I#z25=Y2Ktw88g zyZQKaz|<1{0CgC-RPE%6>@|JtM^;=e-w>6b+tC&^kB^vKdg7G;Qo*`7Yu_Qa0HV%< zA}0zSN(m#xL@O3(#SRufY6m-PpsMn@n&>_ND6mx!XI}EOg0+#z7BcZ`MaI?mgsyBv z@5^~)=M{du8$7qi$c03GLN<_CB=4ZP z$oF6Q_pvkk7#H)5-*y>Z)Rn^IUAnPEY$n~bjv)eZje#HjpjQ!xP)t1ZweXJSWp4}> z40UhQ7XuW=AD*U9oEoX(jOg(ID%1BoAVi5zKJLX@uZ8AQoXm(H>Ki6 z3K`y=jBt5eX+8Lr>LiBkFn^*w>%tnMeh#>IS9uSLRSpaDL5H;D0rFY*eNcI_o+?^& zahzBIIbnvDol*s~$Vp+%tc_B@Kr143QJD(vO9+2rRfa!o**k^zu!XITR`cuDFT|hq zf`cpQHWi;6eOj}GK=q3P5@tB^J~%y%tJeiD0FIWZsk|LwflFDKFlC@LS7)03@ zDX`d2UdvvxBs`s9y0;8m4LzD&gJwTyqgL_RsYFr9Rd8aUR2lXqku4xh#^Bn?9=26bW-{nv5qqO<@Z%&C0Mk@~ zAYA1fp0IK+!|}=Js-I4~g-27NaNrpApwkW`+aY4A-*6p#^Vs(I5Me@QrW-ev|ugd7nh#V1H5FV-hIjOqtd-);NPD zf1ZKsO@gql=lvJ3toq%-$@!!UHN$wblf)znwWJ3S5tI44{RvDc=mogn<$VT#FtYA3 zDtePB3gnI%=zbNR9c5D2xsx;K0^8tMVyye%lhadZL;0{*;FqVPE0i2(9XSvO6&~km z%DH61@w=umw5u_&+@~1rq56<(GKTUXASn`il#M*;!_-Ej&{P+v+%lQ0aR2NBUZgd^ z6@1*<^C|EZ$fT%H0RgdTq%)seSm_e%Hn9q^h%U?M4>PO+HfatV#O+(0lexu#CPZ&3 zQKtgIMPKNXD>3^Ic_=(XlQH~f18x_D$f2M-| z5FXZ6B#K7MN$SGIg6QM`YR_Nf>^)Vh+&ZJ$Bw zxTyLDk43i1rP%KZ3hs>nlM>>Ni|CZ+T^JVw#R2pt9!hn4eU=~(Ixu+8``-1eOJ^(z zi+((;;Te4}=L)FajaMKsV#YU3ZWq}4^=dQ1&9jFXV=-poa#})hv6)=*2 z&#?vI`oGEQpeQnxC7@G!19;E?;cBChP;~>|o-U4l;4q^jAf*;c7pimp-n0+jGCnc& zu>e@o031%0*0h(FnLq|jSvZdB2T{y1R=j(q8WTzuV7bW7fcc z9XlPKq!OL2gX}G?yb%=MqKf(CY;=8jt{${>N$@tPcH$iDnog3iE!>c*`ZItskB zsuk)N4{#+;f+4hm1enX_k_DkCqL(0TggQt)7|7h4!xIP<);kqrt*9|TH0XOwPs(R^ zA>W4VxrD)kfWr^l1zcRnrG&C86p*PXXf%Ibs@3piaKe^gMGQ{C)?h zdm_#eM?{EgRxipSTle6{G8btId2F0WnQFTcULgp*`QS`NTZ^6u(W@zrv4427CH!(G z{x;daB1p+Dx`|URZejDu=?bJ^;bXD#6N|_NN6|qb9$|7l8hgX>70vpO_Zmdg=t~-IRnH-Wa%UL9z?n(8#i)6b%&KbR-r{0kLRX^-5;9p<|or?%^?hVTGgDpt=I2& zFTilP7sShOv&9NDsrp#P1jc8F(YlE9mu*d(r1mY1hiEDT+$qX2!Ws{zig)G*Z>m{I z5w~=$6s#^(8CcfAps|lR9q5svxeXq!CZrL1ONqFHndOKTdzZXDF_5495IA=+t(qB;_SiY=+$;VxE2C z9HfeFDRQqaySR363ctepaW@`HRJYHS6;UfiO%Uphq)_>}QaBIGC{y8pcCHRpwlHIp zH6j?Hv}dO(Du{&Y(_xg8DqAic)XAbgo19SI4K{;UMZSk70ZNxQDKU#BlanOc`Wnf% zEtFr8V~wgF%5LhaRyCrms;N3H9cU9(Ih^Dgeh?K&TB-WSy>I{Ua(I@WkW{=#h#T|8 z<&oTb&>3)V2?R~f+P#B6ewp=5ovl2eZ5KB)(X)tCKn4J`jhl;L?uw?@zFXOHh zJ#7r;3U&{jDED#r@r}`3bOTrqH|fg24n$1Xbh8;wfOybCr#5>7-TDD*4=WcWUniSq-1^1y$ovRR)D3ko znPCBFTmj%_sD>a}8cdAqmcWs`bZ92Se%Y7^GyA%FX4!+Y8cdSuA2!c>Yw5=Hee+0+7D z6z~!dEW0ydV|Rz}s~o~_Z-cOM3OR(o8*|@gaD5Yrpayf5fah?1GR%F`{W^#6Pq$#M zdI}{7JxE3w0nP~*CAV+7f674mwvNJ`+`g%VIR~j~F|`fGlif|y{kD=YZ2L=tN@()I z62iVKHGkX9srlP)ZdsFRpmUh$_qaPS-{h-NNueo%Dxv)}z~uWW(G05h)3=q-=D<{u z#vMrZ+wLDoLV>aUuEl3p1%mwJZHphZqXY-}6vMH^oj2sS-9Kg^{h@LTq$E%Y^QQyp z4<(WG$I5k1K&pm02Pq>2C`D#RQ^mUL-uYwK$d%bS_Ad=&j89{Hqog6@MIM`-MwpB8 zEZN(Pe?;O%5)RJ*Nl6z%XdkVoWihlE5i60@aED_`?Pa``EFLi=B~$$NYR0XXYP&bJ zG$6c4n(si6*Drx}$~&&;eBh0S(9=U<>4#8JPHkr8#QT z9og$vq2x*!f(ZZ2`YDc|g{;@zGZIVAauh{2;?`O6!tO3~tjnwvOpZ#b*8H1f7FLWS z2??hSlLoY>a}K3DZk)N6DllB8pWlEnEP0IJeHH2*SSMjULLLX^7~99SVD5<4)%Wv; zCe+zN=awdp)t05O%G8RIVz1S8su$Q27*E%wKfyhZTp1xF*$U*iS%S|EV>`ww=9TUh zOhyPSDH4OJU|U(EK1oI5qJ`=3)=DdhK^n>O@C&@5s%*UAjd}NsV?zEP)An+{QJ2*h zsrQxGv09x4z$(Jv|JCbRch08+!4(ZzI6;FZ$MyVgJ5F@wr8tT{2cGoJrqen zg+__cv*`n;+($Z>pJa_H$fUeG>^p$>`>14*wZT{l88QcWn52Bx3%LV?K-I;?BEGUk zQob5GWU`0Qc3dmZa*AupZsPmGS~}*X4_)7nOr$8tfslgaTqMbuu`3QklbURb&>uXg z^7W3FrKtH}p+Y#vc z<$6HC_~(=_Wj;VZOrB%Khr+v4De5DtQ01Ga*W4ZcKGzIV#fpl7Nij0-Fd)9g;hEli z!oI?bSP3Dh95o6|qI0k-(O6Vq=Kz7QlO<9bSRnH%ZebNNh85ObkzZW})W7~^$yAk$ zET1A+k*u|<4~FrujI|k^+JfBF_iQ><=bHIo2#JAWH<&(Uw8oC6FX_OxRLc^_;cvLs zq8EwMz+Y99Dl{T8OP{dm(@U_7RzOi=$5}o+b0UZ`_q}PVLwzqq|`8g?3mv)OMerVT%S8r=3-F7q~7#CEo zQ8eX!qKr=I;TkTqY)Nsi`)hH;r#J`U&S0$4 z!v^)yJKI8h;^acQoVnp4aL$UBmOc}>$(1UozzV-|#~KCrcHK^(YI4|qFi?6U(0czGx$(O52K`){QxUFf z$ZrEfW%)b#BPexYdPHwxu6_h)Fv7t1-cgJQ#5q(2MwHMec2>%03K$E>&bU%Nnc?t- zI{H3zAp4mtDwPntk+szI!2o0|N<*`PEVE4pMH=BV^Pu$W<5xf{AEgGB^)7V5vB8C~ zLE?s!5%ojL4XzBaE~`~xDf2xDu#B6#n+Swv5kpGnMx>WVH5$f3SfVkTti70nJa z5S5Dwt4~TM`pj)e#t2){_RvR3FY|9cqs=6kZ+p^n^S9rcNg-+)KN*_L4In!z3_&o1 zo*44}AwaoIWOJ=T(`ZPIb>*8lifdlV!=R1jvx-KLaZyUzqjCwZlBIJFR>f-nxx#}6t7(IagQc|e(tDRgcU%qt8K zMrq8-0$*}9wQcAmu^~cRm0Yq*ydRlB_$YK1QCV9HC&KTAlNF+ucA-E9k5@xUcLT{@ zF<8mC;%h~4E#oRn$l%2i&H!cET;~C_0n5Z7qH#wk$WKo15%Ih9rFiTopyBO}m06hA%;737ovvCjHw= zjdBR7=ZI11Rp7r06jf7#5WcN+BsE$vnD-1hE&#qId=-Gq5$&gU^N_p|uwW%EHc&wb z${#a~iA%tdNrTXH)N{nGEEAP-R^kg`2R11dP1Q|l&Jf?@RrlGWy1rIKxsSVo1}JQz zu=pP34m4zcR)OvCHQMWk_m#~emch8Mz!_d2E{9KkN%S#rfx`CHzI;Am`v$}&_lhlb z#;eT^>i%?=w5+)Pj;rjIidLks0c#Vr@N9`CGPB-AMNM=gM9{U9!cA(5p=uJK z_c7OSag5!@=&V*2#>vlp1;vD1@zdU z>@*k9dE=m7)vhRue`jEqzb77M*Km1WbOPv|o!#)evhh@1P+^tH1K#0L;`y4NQ@*Gi zb$!S42%`=W#D}CIM#3nFmJ^bEpqaueTwXN225ebxBU!}kA*O?aiPA&RPJZ1woO_qM z7Of&j96XR;ra*1&q_n~dd@LmaU{4U#LRQR+9e=`^$fr)XZXPj@uW5qF{LP>h;p=> zq)@9sUnuJBg%T5AI9b_?GESDWN5P0K;Duck9)xB}9(?bFVnaE)_{x6|U!|yGgY@sv zD8&{gV(4sszac7cz^~q3YonIYnPb>(znlz#OcB@1$e|dY!M~~ono}g9bhBS+-&Vub z0yeOfaxE7%4TCbad4~GPXE>9fZK~}=;Q8lr&3atmQ*ae<7O+p=*CGmus+WE?=C8x| z4yZo>#VWkn0*B`*&ZU?vOlIT@OJ07Qt*$B^#hb`cI{}Kmx6`>g4Opdl74Wde6eR8R zenVH1^LqgRhZRlhIdJ<;`J6PMD@#!Sa3J*A{4g;{_he5Y9h*Zpoq6ZsG z3yJc^8sx)lalcDBbuCzTGXxIdMy7diS8G18X*ZfqR9Mga+&2ik@PF;5e`Fi$>WA}j!EehU0S5sMzhf* zRX08Z)5GiF8UWKQXzg%8G!WP)jaHvz6<5Xo%=KX1_JPt27tuY&b{l50d14z}XB#&dxHReC_dwW^avo-% ziyQ%s8fb957eEm=dl5Rs#8chVH@fpw{VQG;iT>}a=e=-+0ogPUvH5d2 z$sGGrQWpr#uzi?e8oulJN-+Ej4}#);Q?B8`$FA&h0m)5-H%nBD-WYI+3SDGK5NC+G zJ%udD*gQ!dh!+A7r5jvVe#&J7h&PcS?&Nenu{PV`(%HlVE4M)62*M71;TZP{|6%kf zxG}m83O!YRIYh-WIpJvW@C3&{h&1RS;kFsBfM|i9zJ%-*^Qvk_dSjh9%1o}N$|txw zBb2C)nc(E~f#6TB0r)aP2Y+6tN0>73eCKc5&oJNH+P&KCZvD9V>WA%pWpnQ7GFlRe zLo++NcY_Xg1BZfh;FC}OwwY}IZEG9#Xm($HG`|i#kb)Bxi0rOn{zWNdUx=Cq%A>YN z9g{nVgp~%^XBG`NN|1dR$n}a!^C#6aI?)cSx{QK_{oiriLFn?cJ3Y#<`MbG@Svn_BGR)@r2~Rxi1c8199V+q0 z+mm=w0FI_gP6YsdKmpkO(8V7`W?Yzu*bt~5w)*7bf%so@mLTT-f~N)B+|?iHedlf} z8n@~RkIV`s%2{S1XHNOwfm!Lc`v2H__x?7HBVG7^ehOG&7N9Ir7iZ7DODnP|3bJ`Z zky?_9lb29nhy*3X6rcq_ON#C9ex9c;eVZ8olw@yqf6MGzn3=v*S6A1qtE;O!nCJ=o zz!zp*vibXB!4}-EShA^HFFrAQ01_;8H9>nY8O!yQuI;tn$#lSMII7;Gx^8EFfY(=M zZ?Vr-csk|HXJPv@lNOFBQOq0`ECFaM(a-0FI-w0=-C;$g!%K^}yf4tp6;`~WsVQqN z#Wl;N&!TsfsAWpEH@d4TT3TGbfk9|+9?fkii>V(oIaI*$C$Ux7GMJBE$NR;i3cA+r z+6`o(DcUTG9uZbdhftHlabn!$j-F->% zDijFaAQXCF56!Ns^Q&$TFp6#P$Q>&C>G}z|g9kX5T)#QaB8xY->+6~R!kdY@@0jD7 z0{pRU8ZW7$K2AqyuC-XZI@mPUPT!vi_hhdow{t%~?&V55Wsfb;D zIQ)@-n21o2O0r3*6E|!6U_qW#w5uj;EF#P@J}P=x5Bfw6;>5`ui=$xDomS>)Cqx~E z-GJQvloV&zQG`Dm2Um{bF*=yrxI~ZVtl4f0>4u;r`UpL&ot-cl$N38;LxxQ0p`4`K zWiL4hIIM(gHaiI<2&uQaMST7upmwfsWC-yDybs|$4qfANhyu8loZKI8@)QBHUAMH8 zE!=E6!YM}uGuiH|3;gK3Q@TF9uaUHg zejh_rgKYxJMy!9OhXHu)f~`+cRuw{C4$3Vrayuo4oK!a-@Yo`@OHIM`^5RoIfmwq4 zFgkbdpt0l&l4Ge0-6qdJ34KyL;Ll}8BUTE80yBYhMX_E?x*2_9aD0Z#6em5wO4?^c zE;dE`^Ve_sJoi~$Uz-mmFOXjD#|0E$@ZP%JhZ-Qk$&A=?A(3t}%z&No`~pW&!}Ywy z9)leAt7#qQf$rSWKrElo3>7--J}=rpNlLl^>l)W}zM7L%*&2A)wbT*F!NH{+ptse` zhQfL;b&~L*Ni`YGj;~;r&t^!b4PX+=i&R-$a|GdtuDhS4zK3e^P&+Bb6cm)z>zZk8H88;*nKyW zol^o6^pNRR->Tin7S3YLP97O$`#TI+GrOswT3n-=&Wq68g)tZ=s! zZKRCCNK8@K2qKK_nd=jl9mx_Bd0&N~Lz@&aGB)=@6mk3UoUnr&YQ}Vqelpfe9*-bhD zZXv~O@*dJxGh2SAeRBAx?m-_Hc^r4!*HD?wX5qNzjM(9b8GUpqODdj*CCwD1QKJt= zS5i%RHmUMR6p%RcHrM?AfvQhKZ&kfR!#F&k1RgyNGy&ztS%$VXxIDW;ur_Jg=~_LJBzsW*;#-j zJvwMaUAAe=SO;2|hSxB>%GQ&hW9Pf&awVb`Ex!P1df3QJg?fXKEmoIUF5Qb(i{eVG z*Hl7%+Ij(drfhox|%dAnq)Xi8dS;n4LxCd z1%XQGfTWgiwBkbySo+v`RBK*|j zsbNPhr5jN5;T%h-I@l<=(nmJbq+Kah3#TfI5RVB*UtF+es4J~kw7QbgJ79J##D$r` z?{Vn|lV^INP#5^O&2LHf6YNm_2t?F9TUiSUQ*0iEoxpqE* zyN>!IFBQfDtCU4k*~{+ud?T(O89>rJR-*%u)sk+ZU!bed99zi>p=pgdutu=4Zs0uM zd?5Fw&pPd2RQnH~1Qv_MH)x(9iz)alyeNW|I4V&dg?HenfdX3F$CtV@=Q zkr7V;Q*#dqq(7mRwHAe(O=`3r5T9Y$H}*J9HDeIS4=?_NY3k5lsW`s1hS={fVI`iP z^dBB|cm9ODDfqd&e|X&OpX_{NkB0{*dk4?D`qcf)-iiMD=J4cDf9*Zie~-E+&yEiC z_sO?Mhu`7nb2$J;h9ptE78;PjyT-@_M@>GIF#etK`_3t0ZRG&+5#1wqwlpHqE2G)o z7<;YfxD9LqpISmhdE+H5DpfT#^qt=A{7`Oxziykg)3(<7rG?Ai5Dvri(n55Re&X^1 z4o0(YkUVfK)5q~9LE;wjq0*IX4}Y%k2M=>)T?suPGnn?8t#95{CnwCDN@~cdLa@pn zupq^S9|j|Bg*jZj+MuGI$3Yth+TMP+f4KXnzMO*EeRj0}R}kvXZWja<@b_%c(*Lm$5d;*&KrUrrvqSzXM=6VQN z${MM3MYzO65k{GnR|)Gp;ZzDac9LvFRhlSQNj*uRsmsaR;dFoWdW2947XtZ0su_5O zdZ7*=xxK+H2rgpWTt$~uhK9V&gle{xM;qG+WM7tW2IA7CqTXts+H$!UMCB0%u6sKOM1Y?j_WG9j?oBJx&8yrum7(V=v(x#?Qe8cmdN zs*o*2`QS}Bbj{>l1-PK>;C)MYY?ZWa;ChZ*dcO`1mJYv|$!rFLhNC$QV_R_^ZTRbq z*aTck_S@U%*swpFi#R!vSWclZP}_2(NK?2ohWCU(f6)pbIQo!#G0rW#Rxb1nmg>p} zoX$NW3Rc{7c{DkbVWWw{5P_!o5^wEKH)OoD+7pq*&}vU^A7C9h06QFnjuNq=|eDb&xdW?m-zvTD^Zm*L0(S$Zn>>9LU^3jcB4 zsXB`J7xuW$QjQRn+{l_4()enLsE%kl8RiICCV)F;U{q$pCZ5 zvXJvqhJ8!mW`BkRiXp^7zJczf0sO0YB)^Qv*&mKyB0snFAF>W6>j90EykZq4GTwD! zx`q!esU&g)wkpYpCZdcd!KfbVjxTbBuUcMaprobI>g}Vk}hsWcaG6 zxLRHhei+8q1Rdi!^+YsIa~_nQ%uLpEBpsy_R+n;#WA|~P??k2 zz9TWZ?8+m~ljhh{S{lutN(u)y3YK&8Cej45JR#QP4)Vo@v(;`bFL0ZuQ=z2T!cIw_ zEz3ESYxc?Hg{*5xSq7p*fVnDXoU;_sD3eZ9#Q=;rg^4DlV}Rg*w}bfL7<9S7eF`@- zoCnDi)Fc9BB_)M8*ZPdp-nJ^?;zIK_MCG2OeS&uvOWnyafuaIof+IlKM)FhEZmOB0 zbR{}74)JPq0UnjXQ9H>&rjV}6DFh{9ni5m2oGH+I$}x=FCmbRPQOn9|w0ABRBA6ZAC1Igs-|2BVe<`3)7^a7>PV8AXNU&k3expFt~vw%@>&5Ao=4WPuhlg!K^wF zOkKW%mz=HmR#>I5bos@Ical%iwsg;?*e@F)S(tLjGbysk}VG?*2^0N8c#Kme2^aU3RpGokK;^dlJiOj?X3ixtcEAgY)Uv)Zf5$JXbqyBHw0tyozNc34!+-xGmkm&M>s-Sp*a7kDfW>7Go+8@WLm_zL_%f_+pXka?L z`AC?n@?L8tJWH$VYk@3p9Cc&xH<$(7BcvC0X-&ayiBA9rN-2_v##hchMXm`z*oi{3 zX&DKR{6e5gYND~aqF<0gC2>4wuzgd*@9Rn;=JM`}jglbZjMa>R6S~qaOV8B;OoINY zIRoARhXsxpGhZ$yQU06;Kp2SYZ>_(aPOjdla6WCH58>uKL+r{q(GHCMz<+1Mq5Lz# zh1xU%k+Skrq|r&S*l$s;28>8}zmiEEA{>V$;kh+iOk|kBCTrOw z24;k2CTGlkI(MsTef|CdlXYqBl)YgP&RSJ)RccpzXAzoRg}8`K-4T03jenf7IeP_7 zyw|(go89ake=df9*4GB-8_GS66k!)Br#x*7r@V*+6|N=~#pf6EZl*=Ffl!sxh*4p$$otnbXSO zI=xpndp9@WFPiqo&u?~m)318tjrHo>fE=_DF}^9p)YkQ;BZm;E3TSaJfLA}g`+O_> zz9(w@2M8(H5NRMRN9EigNG=Rq{z`cTomHh3l1GgwBNADZNSsVA!$VNW7i*V;3YtbC5b z5l?aiV8(Lu$@zr;0&(*E<3NNjGd5sT7a&Bj=mAVrha9PnLrMLkFH4O*<+}T*stQ*^ z`fQJMukALIF1RK|RWPxmzN<@UjE^L@gp_wKFTwe~J{@fSV`uaKzq9%8{mti}cfR^# zZ}#)LIzY85yB6{5E0mYs6m)I=Kzn<7=Q;jQ6|&ephHfDm)V zPN+}FvW?O+DY9rigR2NqWC8@KmI#6vRlow?Fh8PYYIhbPpt)~|w|Fju$=LIR5Ppah z-N{X0jN`i+|1h4s9k;M<{J5p{sOU@>o=%A$yu5My>z~#Q%wKNvmJd7=7r)?l)C>o%u256oNB@&9{8dWAU>fGeKtMja# z<<+CzYRVLugB3UE@(P9O#Br4HdzO#X{Pku(nP`&a3NK&d5FTX`@+zp9+ToFHNw@BV z0z}Q`E$q;A{~}Qu$C$VFS_^-_Yu%qoRO$mBnI4RJb=i1R978y#ho6$(a&)E-1G*Q- zG{jo;-P~#oU$(x7jQYNXJ%R6gk0+Dwy;W&K8=X#ZBN`IFcu%3)>GN0-zrCt;DV6Pa zD`sf6o-ao~3|rqzFZZFSVgCo0|BUAkzQ5J_em5ktzK?u7uOED`_p;$~ZnQ%o`wpRR ztezA^-CM05r|9S7s~5=!ZT!K503Js!u*LD*x6uL%_XG5bA?=7b0${vu+XtO=K_LG$ ze1EIOAAcTP=6%hiGo*YXl3#NWY#EakC*#M_p!NOF=ppp>vv&3K@?JV$-Iw+r2>MAA z_9nitmpaH$jBokZ`RZSkgf=?8)86xqn^}pC?CIz12^|^nWv|)j>DTLDJ^$*o$G^AF zKhM4|Y0@VktCIs-`E=E}LOmW(E?rw(3;G~_ zfi9_diXPaY{Kf5PR|x?feSta1>q7>H7ViLm^&QuONu&CY;cekLPjySdtx6?zn@81- zYQ22!LmRk)C==Nw7R&k%!}swsAJUK7gp7_NmY<>Z!AqzgFhIP?JNf$_J{Uyy1! zQI#!h>R{^@V+EuFPQvTwE5e|d*R=+*Gc%n1#TNnq7Y zYd1D5mqs_vv{X+|>?eMPe^LB%Q*7ashewgC*n ziL~_w)_DIvuMigRGh0C@EG0NmaJx4dp!H70jngj)A&gCQa*M({N-hul8CI?CiqV!+ zl*N|PC07_0$qC8@3mOd^Os1~~mpGYvuA>)~d>me4(8_aO58iajRjhkuqz79`n3VZM zB0%jE&>i4*G|3VAwHfa(SdSe6N^d23>(f;(;>2|n9L6bnM9C+j2%M<(syL^fHo6Oi zg)&$W4!AC(Dp=m4KX?IxI;a3e*xg8L7zeUCky`U& ztAdnHB9UOP6T8#b0VlE+jui66P;B&$x8Mi6d3)>ThC#A^@1tO8z!#l&HX$pMqOS^) zpb^xPEzv@d+NBJUkgb(EV_CR)vRTn&Hk;_LZofJ?r%*R?XDdWX5nDg!#uO|GC?Enh zw}xz(T&&EEWuD0PU{2d2*0(0gy`+4ZxhW zpW`MU^Bm{0U6{GGCp^V9(x6bJR7$3wh$jG`7IXSC0(VVo8navYcjb&$FUCgCcHR!A zdY)?!0#I^qEX$6t?0e95LC+1R$@VFs9?C7sbjHag$_oyarDsSN!|ujE97EO9WEZ1% zbsaaHDFfFWS}NBkqjCB)kn?6CL?47L(Y$GY{=Kz82@pCAJ;d`}h8?!<|FLyX!wtDUxq3bDGL3<6A>d%-?pA(4 z{ct3~{X;0Bkq{n)o*(Bqe2PpIIBlg)Tb>3;fYT}%Px{_bV4)U-VZn&=4JQIwx|DJE z@ePO~k*X!$IC=zd)Mz!t?&V6On#dVuLj$V(K2YAMWhECsT|kd@iUAj8R_3fkfL3m?;oM-OsDQYvtx zg3xK8NZF4$0lfwlm$>xoNQK0%BNMtXw4LNwrL<2S0t!y!+JDl z8WA81o|p}DIC!UYDi)I@@=Ial%t6;X3s%PRacI|(_j~0KdWoT+jLv}`ukz)o)7y+h zj>#IPjfgVoJ+g}M0N6ygjcznrylWMcSGqbB-~whG+9(SAO{UfV5|Vy6`0`mBqYDf$%Ci0} zF<1;8RJ(mQkKH6D!2aar=qzR~2{{pA(n>n}mZDNK(au|z)JhT~vT+N2G34+K@xp&a zRB&z!GYji0!tBD&y%Y6AYii0$YXGn#O&p)(Fn;%$4qzq$KA+iv40th-(-wIHLR^et z$_o=q{}eL{w+^qS7M&WXRd;%@*9^)(smy$Z9zLvBQKr z{oUg}FTOhJKYqqjTKy-7k1Cnhs{8vGzG3B;t(Mrql98qL7SV&uSOKpVK*huNO?`Y1 zKlqO=Y#VUkaKUU*(}mLVH8h-;xR<>ziF`WV&8=3q|LhoGKI-Dw+3wCs_Yv2y^Bm00 zX)+-#pus;u&#Q4!#>L|c!^;a8A0;4C+3+aDu_o*+6$iBi0>3LHfl@KXoyq~H8c3%n zN~u<$U?%D2M*>Xf%P|J(uQr)T1OroXhA~=Q^MK*#EqQ0U=nQQC6_me zooMcNC4Rx`3|O09bU~xR>PZ1@_@zMBJ8rW68f zHAEW}8W@-EVl}SqNHuXeLvlp90pS%cqG}DO#<3B|Dy$86>QZTn{bWdHZxDbCnu6yl z`$UQOFWD;=785Tm7w%4iBH`l~B`Yfg-l}T$)%XRhrMxSXVsUSPMX`Z-eKH$w>t zy(IEx$)l?lXsoZ5$&d<*%kWv>Mk+dDeczCX$Y0171?$2KMVB`Wq)ii9&4x_-V3JdL zG+hK~1?RRIUjWih!jEcrbWR8Lh{2RtD@q8>%{ZYnwsYWntaV~2(ua>n<~sbxd2HCe zu+`@4QWGA5L8TIoIgs!QR~2Ako=k*Od|JIS5jgc3u|KJ}!Lrh0L$VA!iYK4Ox=%he z*|!wq*@rsO%>tF>n#v?$Xri(Pk(B7F*XDXkMAa@~p*%7@5NuMV3f8MFwFNvdE@2?i z17}lBD3V>tmC$FlkZNRTGSqZ75;iK#7vjCH%jOPk&E-An%W9YUKIt<|`-+_=3p6gP zNG3^-@g=*9PYnZXm`C_0aV9WPBWsM5q|+*0vh(WO1|Ui-gR>oqS4&u$8Bu7FuFhmx zha>%@;o#3oL`rxUNi4iFf(*|oag;B0w!+(p)ZitHijKd-|PtKDHEc~ockx{na+ zwXr2x4^BARBwu}$20!x6T}5!_(LFNnYN@wZElZs>SVyicmow|G1Y0(l|3}#WM|ho! zAt)@%VLlLpS^+M>6>BqaO&?ZSDpezz1}-g`7Sh;P#>)(cWoK2X-`LziBGpMCAAwuC z(yA9!*mOI6^n&BJw>SO~fn4WSAiUSefaMJp4P%6<$4FQ}ErnJL&e~EXO}Mn4sGA?l zQ!+_YtokR!*}=U#gk4E;p%Na76ssVUyw)N)Wwdv^8y+Lp--)7*(}ai0`uv-$c51Ea zkTteY03>eM1?sD|8SFN=OQp4i*FFR;-0bZLL9r#37VF%GEE2;$iHQn+Zjd<*$r_8e zQXXj4C6G>k3&vb^(N~%8OD#tIklKnnm!kpv--!^BmO!hR4T!9yDJd%85cxHpeyIdL zt##lEH$%0is0gUMWSp#qwbBWjCkC|ps((Mb{d??}!Hq2b_||LYN5c7y77v)sWG}_~ z69{cjrSKYu#t((sbaN(iu&e)^cMuB#=^bZqo{yScAP#h)&-qkTPj1#bl1{ZgJkD3x z$HXS4AU-Z+lLw$c_^~@`6WR9a^|EjF83eDcu9`%8ubW z*fQLg8?rZ2Gyq^-sYv_ncpcz|=z;#9qi{z}S;L518)*|f7r<)vE_ge#)s{MJ8?Y)B zs}x`W$XA_5q0`u)bszP%Voq~GnNMh}RP8va=fh5l8?qdyk!bB#Abtf;?Kl%S!IqBl zAmLd-fcd%-#!3P%2ZmRXg~cotwp5h67NW$CX>zoYNA<3;u?x)_0W#-Jd@0}K_4S`H ziQxAt0Mp2Pf)0JavC1JRqCY~r5!B~8hVk44>Ge(oh2OrJCgw_muu8lug=4BBR6FoF zwKkpQCe~KgXPof>gsBM9JwF>9A7;2`o#hPIOem0VWjYk2<-o6Ju2*}`7kbJ~nqX*# zz}VFi`@Inc=XM5!K3)Tggmo-2=&K+kbrS=B)y{)jm--87SyxFu7}y02NfW^+79yiP z{E>zzC@0nRZOR3|ID!faf-W7@@(lY+R@#!8&YIFy6Gdszb4k}FP4)Yu@sEgD3xX05 zQidRMX4aQp!xu7D<6P$G!lH~C!jB@HMa`9;EN(50vzEXVly_%PC!D+N1l`!Hkld&o zM%A#yI8rvd`5^1$RScDCCfFZ8$!krLLdw5ir(F3C7}WCO#}7&W{iipUem* z$T^wkHo)V_v^)MWSk2)gmAq8=4jg=xaj)PM%dWJODyH?J7!Kt`xa_-Npqv)Ly2M|y zX3_MLwVFu9(1FFrX`3}tG3k-ZH+c*SMZH9)}uN+b)Cgc?qu6% z3!t=uDxYg+w1l-Nzo6wr3NME@EzCAoT(4Lr#rYhGE0^0!<<}}lZIXl-U%#9nJO2-B zUn5Ndi3Hg(8V=w*olSSHcz$xgi1^1`&4CTAaG%p?w(GY_6sKo0Tv?nqu2LJnm+|nP z7{r)gVY6PIx3@tXyO(fuB;V!GW<4dr(Lb8~pm#`>0uSS@S+Y;lYp1Nr=3Sh_sqetf zugyBW<2RSQlWT8$F(J3PlOh8$0Svm8(T-n)Oh*zCQ#xOkpqeTpw{Y7Vo!XB;h;*b_r&RCfFxPMLWORAzaW zT%#HsQzEGCk}>$Ze)@&pr%Er51V85Rh1~t|r{VjzlPQkSNs;LU7! zG#I}`u0PJDa1cx*GAg~EjCoM(g7tQXre4Ioc=mXisGYbiQ~uBFvXQzZz2AqUG3n+Q=Uu!vlIQOr5fM;iH-@bqPxBCyCfBr!7{!;AcH8$3OT~n1@ z|ACM(aBr=7=7}{P73m)CTd;7y{#2NZ)pvN3p%hqf=TeGtzQZw699+gIc@~{$!_RCy zyKn=&KxWm>8YJ0mB)0t=`4uoSeb`JMzP8`U1zz2W51mjt zNCCQ>Tyej+{c<`Sj*-YFrXFc;u22oz_MuYV;Mx0uv{ylY`~JntKmLC9;PL6^-&O+L*xcM~x#ray zfByOBE$CZFCvZ!JxFF=eUP1tZQ3%ZIR14~+Z{RSB+$MbS@`m8Oj7KLSK2s3|z9GUbq zgyEsFa>nT?K_XAwfjix!c?;!~5uA^PNC$hVF?kEB{8{r;%WiQ^u|=PGnWywOJl~l; zeKkN3Ip8lFNlHC@?|{~p#6Z}}Bcwv6|LNIugbfr0PgdnhWNZZd^wpc)nYgcd$$tYH zQ7Und(H}MnIM>**P*nA%>bQt@X8)z#Cc~*+jx2RGo73!rD{Vo9Bnm#}$$mv*&BA5@ z)oqC7rp~?{oe!T*ClHvk&{;VnXlV~U={*ZncIDIvfkq`$iOLIa&CoB566lalTkZtY0 z8lL@7Bc;pkK`UoJkZE9VVuTytaYx{Vd2g=;K;b-dJ8|a?t|-+QexKRgHgu7as$Kpr zWqN0lCVThr$3 zy{ND^M@e~(fAl3ewmE{9NixZHFo#%|`~}GBLV=B_sTc1<(aK3m%}|AiC+2@|M2Oi; z*>^Pj$JXCxlX3qX);{iaBdPTP7t&Ng;EiMEiYi_hE=$n{i-y4iT!KgiA(upPtHO33 z3V?>^r+$+ZQsK!BuM11yT0huD1zdJExir zHV|P-z@BI^e5|2RG$F$lw5r`+0Gg^E zcC64G#xxle*oqrWw{PE8r-h}9>h~Y*9rgQi&E3BV@2^aL(rC(l&@ho8r;ifmP+K~o z-`ek>f_SJlFgqVYi|LoiGx9t)Ray(&B1PV!S*k@M+HEueA~u7sto>>}e=`GKUm}V3 z)r&2xt=o@PFdbgNX?7d`zqxz7Da!Zl>F{!hjnvugbF(lIPoGJjEzT0tMH@+~cO*!o z5S-gQ`Us;ulcfDtzK*RaEnaKD$>m4=4< z?eG#AX#ldALL#%}-V71mJNtXz9PB*Y@AjYWBLU*Khx?DZN1&A(y?6Io;p6YmTfKK* z+=!jV?3y?RI7C+U`Tp?7AurH|Td_jkU_v!v0($eb-9N3HxJY#%4oMsz#=o}diw2#* z#(y84;YcV(_8LO%>E+;T$h{X@Tvk|Gkfr8#?rO{2WrG9~VF)O#L380I4Q1_!EY$jz zOBu7Ak}p#g#DQi~ zg2H(IPGpjs$sU?s1?qRrDU2wTG_0N-OxS3Ah205AOtDSU=m}=iL#4S^=LFMtDw+P1 z83lxL1MrK>$=MIbSVA&RZ;sajB!y4cLotS|%PFv^qe$}-ze(#3f;G9+heK0_@2Npq zx)@XILFQ_6ZX%=U%Q0-0M-zB@SVU}x@cPfY z$KlQJ-Pz?8uh@nM`y4m)au@JA3V=$Mi{whQ?-29!ME&v@0{((kjC?)kqjT_d(+d_2 z-<&70O0s7gUy^R(lPoR)sBBqw#BeHWI6T)7xphWnp*EFPE)Wec4Bs>FR!TeAed6$tP&h5 za~8A{T{k?6$`z zM|%g~;BM&t?%~1l$}TfEbDLJ1!4K&I|Dt&()@b_$swIU6&jXT=sVb5XIs!kxYyn3&8s{sMYheVgW{1`{*tgj3;gy!X-?}I9n#Jn}tv_%? zxoY8Mj;Rmt*$9Pm^);QT7np6>XiZ~H_yp zEJ3*z>7OC>a5v2u*)M*Zib9FXJ10oUke)fwQw25Mgt-3onR{f(*SU6sDlLKmtx~NN zofFKUX3X?St=w;yC+m1EbqXb}6@x0<)Hu6mBm&$VJeI+2U#xqFHrWe#I5>YIH*qsw zESyz~SuONqNIbzT&T{7}RhXgVn&|hRbWgrLeAMroSy6+zhz(UdNLz-ow#?4L!F)5F zT)j!h-Z(>hV=Ty(O77!;%?TJcvRfqcr=jz8RPtoy**bhXW>`QZibiPlAVDnH+&fGD z6HO<ChMSu;nP5peQCw(jCp> zc6i$Qq8g<2w5)U93RR6}B*L`lqGrM4&NU_@qHRIb-%Upr!V!x%H!mgx;YOyH;rIy_ z5x50J6OhD5YM71)sgBjLxcjX9s+enip&!C> znS-$xugKcTjEdJY1bv^CW$8`8aWrvyxL3`?RTzA$Z2*=Msi{j*?o$QJ^N#UTJ2U2Y zOYf?HC7AYxkEaMrknrtTzD%@!!4z=>>cof{|+BRm)3dsQ1+UG5sGoRY*>d4 z=2$ao6W_#cN{R(|qIK5SK9)(Ssq3@T*l#Jp6Fe>GZzsigO}80t7PRw-f!N97v)&z7 zE3Ow%Q|jX;h7qiqN`}Xv-6LKSJGj)flSl^6cn}PW=uzR+T!;PHtE)M;$ouX=>*x(4 zxHOg*x{du7wQ7UN!3quHOf_H|uvDR^Oy{Y(E+)wCGX0Tz8=w&alF$ZxFMP`_x1gF3 z2bINzoex~y65F6r?bjcgYYnKd)?^FOZ1lKH!dHT7FkFqXz43!J>q98VZ6gHarKei) z&%h=Al5Igu6Jn|8|I?nm2Nn<{rK88Nxzk9s!&r<@Nz3aw(!S1Ku+HifR`{5OwQ1ON z2nfvS@M|348(j)1s_S@HF7%0p+^nTUAuYgiRYB z!Z-R!d15!dkeFGvH-9%zTS=1%p{I5We`&=${s_2fk=IF zg6J&wSAcb*wb`z)Ko7PPh&f2xOh!7`FdV33Oia*nLt^r z3+g2?<<;4XtGKC!g(ndJ49Qrym)HVHiZSdl@UQ}X!tp!g4d15ONO~tz+}bjo(c~xP zCoVfP4R>spBbZ>pX}8w)Z^-Tl#TeB8pS# ztS1p$u>b_)ip?8a!GMMNES^*4PvxBQ?LXU`Dx~F{>f3xy<(LYC-S;c=@{iTD{4P1?T5!V)H2@W+&RlP1mQ7k5!imi*pJv0(u~((9gn>)Q z4>k{RvL$IcGI2H^pH_!D=hemGo;Ze#WwWpB#p>NbxX^Aw6sq8;-((u*au5xLq#{DpSGs9+R5}t($fSxn%6?EYY9T zgCix#6+hTscr-bC$Qa7r4lf6jLkE=*lu*WhR7%LscnoA-_I-JvGl=zkaz-bB9s~^= zj3Lg2xB+U^pbUYu>vQaB1NZnV_1jd@CQ=thi)}t&LzvQt7D;P%g0~E_6v&!&>Fb8h z2>uv1V`o;482f{TRpA-mos?#L24| zYb-7pzSC(VbjhUD4I$xIH2p7X=O#m(~iuUPq82ZR~VyA%26})**=r433 zPOC6Xiy+sQo{4w;{Oyg|sLPB{}e?z2cl7s$pBvE8pnNZ=^@}Rxxwh zW&pKrXrni9#m02-`WDkMYAhjkK3gz!=5Htb=YnZz6ea0d&GgFjI0Qhbk&kMYS#yA*%0+V;Td$$l{*In8;~jrRHe>i&ff z)Dj9?j+OgKjF7~<;zIOw4NLW1b;N(h7q+#CxK$>!5|JL`R&h8NB`HIaDAHrxw96Br zX!|q?&aH(D)ZXs2;m`C8NhCDyg~Rd2u;1<>rT)stpzz1^JY)pXp=X(w$j?KRBEKpP zw=NOAoudrRF(d&QS3$_HhO-fTCpf1uoethx2&p%Tafd+#@(ca_9x8ng4-@$ud^e!zWMT_T3`4i48Eg;Q(ymEUg>` zZoP%^GP#??w2<9nC?A8k$gpy137BQ=thzfA5-ujEyX^YYN&-pJ-KRo|Z z*;6B|9sBOH6> ztU)0|w${9mjT4|`7^`ngbb(!DAXf)z#k1--oHAMr=fdQQj|fogi{2u$ zZ6O!?)g{twK?{X$d(K@{@KS7JpWlYx#DHs|N+|(0c(@yq%+vz)P@cBMU_>Nb_EB_( zS?81ktEv&+E z&YT>Z_x`=fe|cT?MQ9@3QagP3f4jRU)K89fP7aSu^wj$5u4@F+K<>(py-0F#|G!;o zX@Op$-0i|27vpEWine1c3;w)^ z!zU0l=O>c`yY<50BwLf^rm`KRB<=zAtO?S&EB4*Ddnesvr0t_`DWZppVI~Z9=rw{q z)f{Y>M-R|KRkA))bw@#hJ&hZxnQJKmYlYD<675KLq%cTGPvf#D3oK3?*tNc5E7~r` z5CF9iL?@UdPIU)17W`08$5SH2z{5t z5T~3)MC9dOV$op45v(Gz2?DE{Qq7iwE4by9))Jkym~#moXF4f{0#UlFGGZ0hRGBH+ z_5@|XlJ}^AfDhdgbw@)Ql2oVIRER&*I?#SG@#-Iv&9MIN{?73+JX?~iXm5vyOz{q$ z_!J{y8$o+oi*%)pC(?!KKt58i5FwOjx-op6oMWHHj*MR2PwBEI^)0jNmVIAgZ|-1% z2=@_`(3f$sEieE-iCHIy`i403qaC-RHPAwMGd&fUQrc?c$$0Yxw+&^NZ6-TxRN5A7 zu!-qK4|Qf@t!QEWGi{#b)=y#axR4e$7*#nwMs>H!ch$ZyZMczhGS^O6lDccqeTQfR zqz(|VAil|@kZaY>ej*{kY1SaZJGe-z_sYZ~`F<`Ez~;E=kATuAlKpSi*br{(I@(}s z>$hi_QXr^NkWw~}mLs`^#v{^#g$V3r_JQv(RzQO|-m12Vw{Fk1H7c&A%ssshOa)() z3pjYKGx;c9m7a0 z8`F$#%E{b>@&5Fv`%VA&>HZ#~Lc9BWPx?r6ck=A03k6?WwM4Z}>9mXWstfh0%d?b0 z?k=YD@;q5pw1_B5hUIg*SYcqBcg29r1;3E$Q9`Okb18MH)*+xGT^H~)MdGs89UUOv z+-j-kUsQ!?m)#YU4Bm?{$e5OEoh`f`p6@fxplA>}b8L|V2B}HDtE7&QwnBvBXd!Ko zaEMJ7G&RqG%6zB_j#*&dv@1XrtD0>mD@HkpP{JPWEkXP=wR3vEp-~YOV z!;Md(6vo(_Rph^@py_6|ngrqirOSVTu)lU7P8m1LzH3BpRG5}W=TOwE-AR*aQ zlx+^0*XqY*-1Fk_8{D)U5>z6<28lFZObhKl^_I${ zTP=!Tb&L~9Yt*-yul0_~3h|hWlvo5qul0Fd$5y52gCeCQAAOeoT@sXo4fn9}64tM_ zIk=6_WvCuTiWzmsNQ?YHHBuZiOguip%aXfcLroFG1|H>1luX2q*~S$?mLs=Dq6rZ! zA_JwTl}Ml<&U`+hFTH_ZZZx@?Nn_s*W^Te!N02(7?-EbRN{|F^KqF0X(_%NMAlU*4G=a-_Mb+=UQcZI$y4*W5pUm})~ z1YJkOsjL9O$2w7P)bTLzk#ZGPMr0099#7GbdtK=T;ehP=fu}iYwPdycBlM0W)lq*- zC2%(lU5d(zXi7^$u0JSFJL~V0M`>1+L>Wikr@YF7PU>q#WPD0jm$0#GX|+Yq3JloJGgv>B>DdUkr!E}LRh-)j9^O(*OWu?5tJ;Cg2?a~(Ua54tyWY&76eO} z`V40-QxhtOelmCiW{xb>!q+8{&Iuyhx;uYDGU_wj7-6q=caFP!1I9wj-rpV`oa`Mu z;}=|$cZqWY_Tf<%j@%=CFQGc&{o|cy`zI_v^0M8(?8%FXmpQ~|+?u6nt&y=_zr&oh z0*?=mP=fnRNGuWGb$52Z#d{>t@Rq(gJYid-3oEqum`|EQ(_bCz?mv4(K<#~h!aLh| z+>sj)^09w-fUWd3TV@ZP>7>Eab$p^Ouh%67y4Lq1uxg>ulS`6TjQWae=Z+y2bwpo* z9|*0u5SLq+JLB>sho1X@NIn}%ARRBT40dN2cdfy>)>c6k6xJPVWB#;8fhQ&>GClIQ z=@5AOWv#td4SM!wlmamY7n6y%!$sfv!@X^3h>fkk7$7bQb|2!p<>)eB^3SeJ;7_ge zhgd0Gry!?R(%IzFIyH9lT#lhsVzM2)NFsnwhyb8CoTAqVXrtK)mL;4({)rGN)U!+6 zrN$@)zTzJ+ZLUc^(Y$H^&_Vd@X=Hl!m_n(a&5`rh_o2U6?!A?HXi_UzG{Use z_YPE|>IYZ4M14aj5S{^)3w^ zt*b^GUQXAT&ribRXSOI@WS*ZQiWJnyQwbf$0|AtPEZ7`jhn>nee7m4 zz97D(7zU^C9Dt_#$>rt92N+NKA^}ByFydoQO(aM23)OgIqdZ9wEI?QiPIpj9f?0>3 zCQ9&2`6qvXb3r{K$k2+D^B2N>Wj?Bo>l!K%K9D-DD-#?d6f+W%dXZLpMS5o%Y)z3sLnj8*&2sCm=$Fe zTM`*Co*2vIpEKBf-h^LRGv%V_jWzMU-;6o+}fq%No8t zLGzxoT6rya)(^E4ETu8AvVYwDkkJ1?5rGK6AOoJsA3e?;)S+k0^P6aiC99k7g~;R@ z&D~LdCAf<0k4sC^_S_@`ThYOQ-hxOfL-=ivzqv~}?6;L*BmEt>!#QXTBh3f*0U%|4 zH2|ib-(dV0A%dpMQv!_x&w3#Wb*>Q$s_gzZ-MWt^|F7tpWI&z%r90|=JbX`1-X-~0 zL{`=N5I;#EUG>N}l2h=cdTVfjJ5Th`AL6KZOi-Ock``vG)m-s~#)mTq4_A^i(?wQO zY+w>ZO$Z+87YD`%+^E!ZP*8R|EuMI??e(JKnr6pX3(gWLk0a-U=`Ef-AN-?5vBJtU z@H2I|&g)aRIgiUTOz-$eZCJQTJTiskKS74ps5IBya*vJ_Wj%|w&Vz>PQM7=BEFzOG zIoH-kgQge{5y+ri?IdkWtd&@O5=RsmAVcwks0wdI0!B62&b`+_gLuv$LL8WIiUeF^ z276cVF? zULXBN5b>S%Ejw7F>h)3xya|flz+IISRl@!o8k0e#I-HD3^fno2s;0@Opqk0&in0TW zP_0T*{-wLh`F?e}k*pYPjQ08sH~A8AAzV5>FWve2Gjff?e{hTpdZUXGTnu=)Zl%aR zD>Y@FWH)U2v0sx%sW1Y8LjueX;ACM!blNAcMhmyIK8Yx@m~O1SsmUPbXh*UnG7|#Q zVvrUgiGK3}kr5{ylMKCa5Dl9Aqw^Kx7bui^i1wduY$LauzUYmAqMT4SaM7^LQ0L$7 z+`V%LcYi{Vz%n{QLS&x*C8NfrN3F?NjuQi5W`p{-t-GHi2>r*=bTZ~<;1-E`juPJnB{mMS0 zO^olpd zz4Xt7bBMy)A;+jjMBb{Lh`5PzrVcF?3CO!m*;IM14Evq5J%^whFF=ya=X_13f>>sEGst+baA%AokqUep4l#&k^Vla2s# zBsew1-B^rvx1JDf=ul?L(WCzH)fsm+CsVnXx8~ABy&GM%DCps~6zujtwpnG9>TZl= zl(niCg30XIOhFCe%+#FowgMP88I5So)P)SY7hIESyZhEPOfvN&9884j3sN^stD5q!Ea2NV+S2j+*B6uVdl1CyHb)u-AQ2YR znd!zwWY*wEoLm&`S{#Lxt88Wy{hvj$M*2VYW|HmR>dHh4wWNyFv(9z|A7M}1(^$x2xL-od^ZV`x7 zSEMT$mbb2xo!u(`Wbk%ue zxJ>&eV)k5D+3>T5>|Kd9I~NxCp|Qj@FHFY1QdxiBxM(Q{YL~K{RIc zp^YsJXCv8Yv1bxhh-agj*blz+PmXpN8b~s7q|dn`3KEj_VNr{002hwG+o6L}<_6=W zWpUhX`eZST4WA9q4PO;!4IdQ;4Id@6ui+cUE?-pZe>j}K9S+COWUZxv)=8Ns$c8pT z_T?z?F>IZ%fXJkH*5tx@bqJ3UhH{1=#^E9Sy}R(-4)-pkQ=SRHR?-?0cNVi0Rs4yH&PAz8 zKEsP42@jE+THG!#;!$}||CheHnBcVATRKmidy3*8{V}Nn#^M-}CtgCOWQ3g?cwpcT zFsxy6H}KC5#H=ldzgr6dOQ=kBm|;;GvUE3wBT8_jG#^6&EsQCtkOVzuF-|`Hq{$Gv zxF{&lBS=7s2oFK*-F=PtYcUO$14*Sm4ek=aLwKTq1U-qL3)WWW#WP-uq|DAd*Tex#~)V zSuV!HSsAdxu+bl0df2_z#6oWH?9x+%EsN5(TaCSQPsl?JE%fj+KZfgjZRqKv;>9p@ zy(p88A&|GRhag0EQ&*JRpl;uHoSQGq$*U+yqsjD53jxm1p+0G#m_>&bW@m^IJMgQ~ zrX5qm1GDLvoy~kI+^3oaJ!HcU&=OOWcy(LQ|DyU2KT{Y+J5mE@WWfBm4n{K@ykvfg z8z(dXTD==s@nUoKZg3w+d&g@<5?+#$c;6)6{Up;RJ~zz;{0l41TIa$0Omzmgb6j3B zept0`COU3?v4u;3$Xld8Wg^nyY>p(*TQ@NE1RUgv&74k~n=re_{l|NM=^phTKV$ll z{*%K;UEPa~jCi51s{?p#yuToj0&wEe_p={bZ*gBBveIH)$kxFP{O_B(`<`1%tsimF z0F{wX)`FqezQ)$p%a_Axe>j~^rZ}*ySiRNi_F*I(A#VzjsO;{XbRS`T=+pq?oE2lA z7;eyupkKOBRGec;S?D5ENXgE8YHo*`_&}10tW}^c$dt zB>-b6ZjQweX_?Nt{`(a*olp;Xvom>R0gVhPv1%wYW5r-EeNPdz&4c_Bx9KfXcSlC-SvX1`FjyH^Iq{w?G^&95E6=T_L}riTQ`xUOVdMTgq2K0Xirl~G-Zow{hTI}Iymfi zpFBPJE7_rJE&~sqKT1Hs2O)9$3fAHn6S0-99#=uoM9_oENY6AmQcsQk+2!aA=PIQ) zxxO;?u(9Qlp~OmhwGl&Ncx56axG6gBEe(Pjd^Nhrk}0Ry#3LtMuxByPa(b*x(3<1A zSQ94@fCszG->63uQe3#RmfP<8gV!(42k5dSce0LhVO9E&bdifY*g=-R_pg!7V)qis z(y!A|blpSo4B<#wl8XuoQqoN#lTxv1gIa9?%OuDw(yxubx|v+)P)jCvUA6`ova>h7 z;0ZP16SM8@b0{!pbGiA1Un_WL>;!3P{l(<`J>uy|9_fT8Ihz@6m-hpo0@}n0CnG5? znuN@}N$?WS9Id36lUq%M{i?{n9>O_H9ozM0C{>M``Ry`>t@8~LjGQ9E8a@8p`A&*< zfU1Z@_+D7CKq4QJ?Jd@qbZ>a;3XhM_nJ+$JX_>BpQvn-Ho4O3+TB(NM*Vs);@v@W& zlx|;BIE7$%lk9LH18Ibu4#YrSZ$nr<0`a+rBf_0xt}7+ErJWKJ>U*xcIC>3&s!&UQ zxFX4jM;V=^rgAhfg>*Vz)o=2X0an@8KBnO=vB9??BjP#|1qP+%9N**m&hBW zioL?cmEsaGEh`+#`K`ht#QFX~>0P47{!^YzShB}|!bQBoHhy_`XOSHxu4Ebi@?G~R zlj}mj$TzETJ}VtebrPs+0Av%9yh6qY_z@W8d4U6%Gd=SM8@h!M)1hAH391H{tKS&W zGYfJt9#%fmdE&qWmATg4dtdZ!d@0X=Y~8j$< z*yHY_{?5Up!7g|&-jzwI7%k!exdEMUWc6YId7Fw%*ngj-WS z=ZUV?+P~`^{SKQ4hG_f{uyQFSgaA1S`I?ELIGh{_sSz(1p*H4+j5&)LpSyE(;zMJ# z7>c0D`+w7sl9m52=YIO?BQv|^aZ-`@?u|pB!LP`-ugP|gWV3pOwC~BLweVoBxMXkI z?^MPPPrO)Jtmzn}UllR{wvL-_-u<{swKB2v(F_?$4TF6jl6HdU1ml7%5y7pxWvzTS zD#npvke3Q;izK1hcg%8vcOiZeRl#>+Xaou`iu*6c(czl9(n9^wB2#lQhJwH3JP2g<_`d+cxih{6SO#p30i1;p@kl_?%@TjCQZie zFYnOy=qyMjo}K9ynL&?BMQk{yMf{0aSL>Hg29%DY8T|W>TX&-I2*L*3W(jy`6F#)~ z0%KUeJf;GUMv&1XpIQ;U3&G&9c+^=eIyX5~BsvsYKh?PDdQ+hnx>jXFiSm+@s9!*U zm$YCxN}<0?8c_m1NbizHNiGSI(G`h1#jhAMi?gKA8VK1fI(M-dp}t*eUxF%p+KHs= zrYTS5U?eaBD;Q&nx5iUz|E=Vhh=ZssS1g3$d#~;&)paXH-d(BrsjL`S1*t6j7Pmg0 zPtItF{?lD*X|UZMPu>DVNq9zQMoc|Yx!cmOFB7AMC&#wFh_*>FK@r!TH5ei7~d3X^ffVH?yjc`0D1rLvK^+d}U#B zUUI(0XXa=*<(5rmYtTR;dlv}@>8g@02yGG8SgV>-qug4AL6TV)a?OalFrh9a%g{w3 z)eHiUf6=p`5ay5A_T@pFqJfI8A#N&bhg+j;H_clQ38w&L7p+OHjje@ZMyrVnQ>B@t zf=0?{$g-R9wi8G^jG=Hn0w7OE4RqRtU)mt?>`A5XAh<05x<4GhoWDYu=vBO$@(x?A zOzkESmp0nqRdf+w3s44y_JihvUdB4;H?eOsqQQtvOjA0lMuIBpGZu8p#Xz7&a~ad1 z&52s540;Ee!d?$m8&RK)7Lcn;ukeZqyJA7{_pL_iAjbwTL7mx~FN3Iv1hkAur^W2r z_=B>M%@8%A*iNYjA(j6hdp~Y;zWS_giA z6ui&!`p_ubXtwv`&+8j)Xp{P|(I$lj{i*?+3M`?+t+r4)u`r%T8W1{kYEu;Dv{Q$_ z+O+xc=Ghh5ShEAj`UKBjn8T)#I&3vb0-KbI6a3W;Yge%=j6yhZZ#3>}#I)CxO9xJ| z>kBJ}dO0@RNcysE3C^9-ftVcm8%eQn^#c10VUs~Oo3moJq*aBFQ(p22`@*?Q$uBSj zO$j6xM^->o{Mc+sNw~7%dL+GwdKN5UN2!_)4MHPj`W1;Ga@}d9Gna&8GNXF46c-xKC8r$Ge3UuT;K~JLwfGcY%Jb@u%h!51ztD`ZH7DV( zZ=v`FPqK3hIyx8n3D?PNNZh1MlSm7lBDrfD+5zBLpPj+HrJL^*87+CoBR1OfAnQzU zzb=&}z5I0UAD*9jQRd-oU!jsty;Kp^5T_6mRr;8{pcA;S*0jYvsexCf@q-xm;T+W0 zLivellENSv7$uz+Z`{#3qxooX8C#U%`iK#}ftln*4~B0Wic$6$GOaf`9PG*TM*tW8 zLukbMT4ir8u74bgM~+3ubHTCt2@wS}MGm-`A#v8nH3qNxmd&mGoL6#wX7hlcG;LE5 z1~ezAwSpRN0CQTi!4UzBV2rVwyQcjZfkUkj;MEU`3+6K&!oUQ(*WxlEVrZMx!X%33 zq20n3p>uC&mCeMsL8)@DYO}0iFt8K&t zF)fMU(~QbT9hx@UTj=6t|39xLb4E8NB%Q$xQ{{GhW2+sczM(a(5Z1s}d;K2wLPgcc z$7CBf>qevxg?>pJPRW6Kzg)wl@bLgg0jB8$PXU`^q|4c-+1_`Ofs?G602Qn#6b zez|70SYRi3P8o#kQQJEA^@^S|k3p&q=c>BwDAj~V1|gyfifvb;5MA8!8tu&Z? z*bv1UH-@41oLsLz6`1Qg(u4KddMOYAWiH5$M=x>5C9=_t=el|lE-7GG3!oi!z{pGT z68oxjg3qDlGbHP{nh$r#c**vcc7fKcx!I|-BTWm@xYjRka3Tu=pqUa9j9FqxrwOq7 zi|OPw{+UlAeI(^Mdx;((u;U$b^I)iQm&`FP5)!%3{W<+mx~bSlFbnB&olkU^l~P$q zMP^S>RR}MWUVK}L+E`7)i==oQ0`SbEf+3mtN zRZ~o`(@zsuKvqa6B0M>4&X)QcjVsCg3c}JC03OURS;Epvx?-_(Wtez}bpuW8ye~64 zOBduRmMLf{$jlsqf|dk`;vJDF1Rp0-IjF$HuMUU2rbrInfxNS9baFt)=Ra=ar}@W8 zdReB^O54uY1%o&U2403G%j{JG9ETG?kW{e6*eXarZNTJnVFjn<+LI;BUCDMY_g0$r-r%HHStfBJfdJCMwsYuuxO~?A6uy2PDa$?68sFYTYCE{bXZ| z4Xq++GZcvlh)@n#=5cun;N@r#o*YUMIh@WE8)2TSadD9o6tvN_4uzOxnUSp5f@Ym^ zFENai4`lI!i>Nba@_`34K3^GVWRO20Y+t|=Sh)PPuX+xf)vIT$yU&jH|GJ2!Ryc3U zQGsouqJ+{D6Q>i=xJZO3f339*05i2AAs?B@iUP4*VUZ@1KqVndHy^oqs9F%_hFV0a z7D(x!M`a3vebUt{Swvh_AddZT;b;b9h^mypk!WZ_5yD(DM(yU0^5jG{Gw;PBjZB&Z z*AmFU8xm~lAnS41*m8+Fg~?L$csE4h`S5ZM-kG8>Z1K3OojTQGl$mzB0>;8Y79r<= zYT`fm4HD9^<5mGPT#-4_=aj8+dAgzFjtP~#zY^alfvH=e81_;iF1v!h;}O^I5DS zPFvqt*t#5!u4!Jc2LsRvg9z?RvEJ@Lm2@Ws{dRm7t)Otf@!O_uolJ)k8>pk8hdC4A zwv2c#UVd`K9F*M<65e5L>3U9lq*&VG=n*7TzPj@O4u{G&uZhl*hJ9dwP^7f8WvyP% zNLKI|R#*xg3FMAK&tl&3cy#nMR_GkeibhQ=AuaM$bY;w zq3A=ifmWbdh}!1aa_6H=pD!d8g;8PzlSbO9iI$2!GQnGVX*4U|hB9&G!dAX=t zT}1kNm4@;)91N)nhHPSk3{~HIJ!-0IfUutViZVn8Sgb(olbM^9R1TY z7y?m5ex|wCatG_pb3t{`BNZws9^5YmOlg{QCGY@bk$EkK0D}{YD31_Ip zL=;gNpYm9)OyDPs)j)hx8m^(^eL9#9UN4B$fK0_-8KwX#xla7W^hN75Hwe{69fR0vC$-ss}bFu76}8*>^q{f#ulnO_Fq80#&4g zqRY_fSXV+qR~{yk7a(2)75RMW=4@Wn+v3cqDlJ;IamAAfE~FjG31aSM7_oBIbk`)G^KHd9!v(Ey4SgTQ>_qS?w`-< z5>!?UK6xuvnf$UVYO016SSF@!G@FbUTUQ@xTE%XV|M%78>hhe%m1^wEZKu14(twd8 zap_PYMYUUN@4iAf0LTUhihT?-T4ZJiydJ%LHAkjm#tfhc%!L=jR|B|~r>SwUvNj%* z5EVE1taR?yD3J0C{xg{pS`;%qUkegPq)_)ip6$pH8vH&u#Cae-$N2Yh29}r^pW0?P z#ho<{B)4>+^N%zdP~Pu7Ld4S^uFHgmPjLW8x9HYwMA*Q}!>mcMFs_;=_^q)S_;$1z zvaiUo=CZJbOPNGO0J*%3{Ay3m`N~Vti+Lu`Bu=VbN`bv|S1P4pbL(&)I!iY6itoR6&V&@qjf zqam(qm=2YXGoxt3U7N}UnUh0~;mlf5-CRAr+jad;lPNB+H@3yhq)Y@)aOISSTq+Dh zO>(zwwW_HR?g#^2BY`f+P2eYj7GD^ACtetAT=p@5Ba_X*lf?A1`Q!~9FaAk*ECWef zZzt0qQ0IgAEV3#?g{<+Cti)$)^BZ7LJS>=Jrnv(h4lj){BfhybLfttm+Cn`*3;jGF z&w!E6M;&l`Zf^;9(E!2&SpB7Se+RHqV-&+)LK~C%$`HkkuPW0qbbGi5nOj$w9g-~h z#<42ZGb^w^(JQ}G9gap&Xn;D}qb@QZA9bOhDeX#nT@7tWTt`YpeIar(%{I6?_XGD2 zo;`WkJ>r`UVWtV-?nV-Gt!9Ke3J3D~!wmj|ggNXEW+335@%f(zmsbHpVDcqSB6ZYc zacFK(I9B3P5T{sdoz8<)%z3X(g09Jsbj+*GsMB08)4b#@uI7b~8*%)l7GHDcHmj@j zZbdQwch&LM$SPmGGlsryAfI>n5(dh?iV|2n4bqsbZC z8V`5I;|X^SCP=C)X0LzXowlzh<6bN<>*3q}uR(}{OIN$;4M@G}E58(J<=T4D(8H_ICAJ0XYeg0MQ|`EOHyU$72{9TEE?asLnPV<+jpJpEwTX-<@rFUwt4jFa|oup<_XWfNqemtPU-C1)b_4du1 zIE{X@^)+r+Yjs*1e7M~k>p*eGTI;7@ut7Rbi*B}n_ zA(SE?EpFW!!fKjK%O*nG4y`I&H8nrTXi?`->7fBL{&aUdn^3bb9Bo**GiF}Ug6UL* zq_YoQ3Su?*OW?E#b6-=KyR$|`wO=J@im|53`q;F9WjDhhcA!6ehZ96lH9{dsNymeL zYidT#IAR@9KI8zSdQG$!(*Uy8lELH5=87XPO8N>(M&Dc_psy@)hRx0~;~5--O$Gj| zkZ4wQHI(2CX&L6+xfNoSNs4kSjbb2UYnGdKukq{Q^d&gCasymjzPNGGCY73I$S<&V zy4DH3Wb(D+RGzRIMoND7YDi{bcM!VJsj{TT+X)%-hE=k*`2Ybu7`NOL$K6i8f`+D0 z5VmEIDbHI9lotC9;Hl*Y%TVT(>X_<>!7ONfGaafA;fdbx*J(dP_}WBoXl#8SR#lbl zd@u1u-}|bnD*#JKEU-IH_CKqo5)fvD}0AHf)CHd1B|0LwaE9? ze=W)_fHk4={jF9Y-R2U38p|RgREibQQ08M6LD{6Kj5)7ZZ6Tnk*7tt|$W@)JaS|4; z1fPr*S@B{e_!=Yf#lQh2gW=d*$^0z_w3sxCC2@@@+Wx1TB2%C;k-l(1O*4d{{R%S# zQz-HEB1zC06R~;31jAON;XNyoczEdkLJc-mY(#6f(r8%?`5oblPotR?+-Ksh7blxK z$?8>P(@z$(y(?B*wOQG5*GR$I4g!%@r8BZ`;b6FINJw~oZT$t}YnAGu`vyL?N*fNs zM>Nq0hEn#&K;bPUn;RrJA&8y8X@iGX2(`{@zJQi$Jm{lwBe z@JSE;V;(ng8M}=bDWJYpFXyp^nwO)lf5Ab0BXpLE*_egdB_~78i>;lAGnk4%2M#Ln zUT$wAoxzD(sL@^RdxWA}Mu^~<_KPf&T{j_eue%u3;Fb1N85z{YMqd4Z*#Q=NjKob` z-`vlX(VeEllU>auOTsOB=fdFis^sLeMnhD((76pgq)n6^B-;v@9^Y=YY36a6G7z{j zBL{~E-J}(}m4Y!GAaQN5+A?n(L4lC{O=iAYOabsM3Mo`OssIBK+_14C^Z_%Pu`kS( z$E?Q!cZNPk-Pt9MeCQzRceskRYP|VGSDN8bHoEFbBd&$u{jo~_yG$+W{hG^E=q;N| z5`!={OCuDSLu8jLEzxuV?c#E?ohG_zqF@#Nq>aVoTSI-iJEzf8_v<$17$)&qekky7 zy_ud06l$~`WwJ5d9t?{hS+f$lUKACg! zyle;z3acsmE@Z9enDUI4RbgyA*MlxXd+CaImBZ3$()*o$t_Wr9{Z-h|D*cFPPEsfx z>+)RKZCbpp--Uo`1b;RQRm`R>NXV;!rIy0gn{zm)%>bft@74+S6@+Ku-+WzyVc2R) z>pqmVT~pafURNt_nyW!>3Zl+Nik9jq$@7*sOsjVydOp-NXIE17qv5 zhm#_CXYmBFSK$O70kzlHjUh+{{#8zIRe{RILP9($lthuLp}269o!6j{tNiAf6O3sU zXp9a&8918S)K`KHCV;X8GxNev;RBO@IVcH43Qz9FNL3ygI>u zU>P!m#c?q^%?MF+dXr`cwg*xt^q*h!Vxy`ylCKffLq7A4%jFwv-z z3s+u27piv|C2DDV5CX?=x7W4wmE}6GCL~y;-OQ0z(aP&QX{nm1uC'^g7%hYO# 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�m$MJO@XIb1Lfoum@DyKQ(wrhvu_Oz8vM` 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�bl(HqYO$0W-H}klZ|YdrFZo)@*N_dT4(FC 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 EKPCXzng9R* literal 0 HcmV?d00001 From 1158b443ef197a0bc84bf4aff46743fb2767b4a4 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 7 Jun 2022 18:50:44 +0000 Subject: [PATCH 50/87] Updated CHANGELOG.md --- CHANGELOG.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7da77d0..45091bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,15 @@ -## [Unreleased] - 2021-09-13 +## [Unreleased] - 2022-06-07 + +### Added +- [#129](https://github.com/coduo/php-humanizer/pull/129) - **support for PHP 8.1 and symfony 6 dependencies** - [@norberttech](https://github.com/norberttech) ### Changed -- [3107e2](https://github.com/coduo/php-humanizer/commit/3107e2b6a568726f4cd40a23847ce1e305c99c95) - **Update static-analyze.yml** - [@norberttech](https://github.com/norberttech) -- [6a369d](https://github.com/coduo/php-humanizer/commit/6a369d9f17855736c5f38261f6765d084e177da2) - **Update tests.yml** - [@norberttech](https://github.com/norberttech) - [57c6ed](https://github.com/coduo/php-humanizer/commit/57c6ed978f48dc810e5e4540cbec022c57fecb3c) - **Delete FUNDING.yml** - [@norberttech](https://github.com/norberttech) +### Updated +- [3107e2](https://github.com/coduo/php-humanizer/commit/3107e2b6a568726f4cd40a23847ce1e305c99c95) - **static-analyze.yml** - [@norberttech](https://github.com/norberttech) +- [6a369d](https://github.com/coduo/php-humanizer/commit/6a369d9f17855736c5f38261f6765d084e177da2) - **tests.yml** - [@norberttech](https://github.com/norberttech) + ## [4.0.2] - 2021-06-20 ### Changed From d62bb254b28654ed364accf262eeb1ff0663e392 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 7 Jun 2022 18:51:30 +0000 Subject: [PATCH 51/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45091bf..e5d8d94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2022-06-07 +## [4.0.3] - 2022-06-07 ### Added - [#129](https://github.com/coduo/php-humanizer/pull/129) - **support for PHP 8.1 and symfony 6 dependencies** - [@norberttech](https://github.com/norberttech) From ce1579e12bec5a9b9d28a1e0c16652f452983816 Mon Sep 17 00:00:00 2001 From: "Chun-Sheng, Li" Date: Wed, 30 Nov 2022 03:58:46 +0800 Subject: [PATCH 52/87] Using assertSame to make assertEquals restricted (#131) --- .../Tests/CollectionHumanizerTest.php | 2 +- .../Tests/DateTimeHumanizerTest.php | 8 ++-- .../Tests/NumberHumanizerTest.php | 40 +++++++++---------- .../Tests/StringHumanizerTest.php | 10 ++--- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 85ac75a..76737e0 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -21,7 +21,7 @@ final class CollectionHumanizerTest extends TestCase */ public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void { - $this->assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); + $this->assertSame($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } public function oxfordCollectionProvider() diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 8ea725d..2d709a8 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -26,7 +26,7 @@ class DateTimeHumanizerTest extends TestCase */ public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertSame($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** @@ -34,7 +34,7 @@ public function test_humanize_difference_between_dates(string $firstDate, string */ public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + $this->assertSame($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); } /** @@ -42,7 +42,7 @@ public function test_humanize_time_period(string $firstDate, string $secondDate, */ public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + $this->assertSame($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); } /** @@ -50,7 +50,7 @@ public function test_humanize_precise_difference_between_dates(string $firstDate */ public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertSame($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index d0b6142..ccca05e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -24,7 +24,7 @@ class NumberHumanizerTest extends TestCase */ public function test_return_ordinal_suffix($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number)); + $this->assertSame($expected, NumberHumanizer::ordinal($number)); } /** @@ -35,7 +35,7 @@ public function test_return_ordinal_suffix($expected, $number) : void */ public function test_return_ordinal_suffix_dutch($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'nl')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'nl')); } /** @@ -46,7 +46,7 @@ public function test_return_ordinal_suffix_dutch($expected, $number) : void */ public function test_return_ordinal_suffix_indonesian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'id')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'id')); } /** @@ -57,7 +57,7 @@ public function test_return_ordinal_suffix_indonesian($expected, $number) : void */ public function test_return_ordinal_suffix_spanish($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'es')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'es')); } /** @@ -68,7 +68,7 @@ public function test_return_ordinal_suffix_spanish($expected, $number) : void */ public function test_return_ordinal_suffix_italian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'it')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'it')); } /** @@ -79,7 +79,7 @@ public function test_return_ordinal_suffix_italian($expected, $number) : void */ public function test_return_ordinal_suffix_german($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'de')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'de')); } /** @@ -90,7 +90,7 @@ public function test_return_ordinal_suffix_german($expected, $number) : void */ public function test_return_ordinal_suffix_french($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'fr')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'fr')); } /** @@ -102,7 +102,7 @@ public function test_return_ordinal_suffix_french($expected, $number) : void */ public function test_ordinalize_numbers($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number)); + $this->assertSame($expected, NumberHumanizer::ordinalize($number)); } /** @@ -114,7 +114,7 @@ public function test_ordinalize_numbers($expected, $number) : void */ public function test_ordinalize_numbers_dutch($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'nl')); } /** @@ -126,7 +126,7 @@ public function test_ordinalize_numbers_dutch($expected, $number) : void */ public function test_ordinalize_numbers_indonesian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'id')); } /** @@ -137,7 +137,7 @@ public function test_ordinalize_numbers_indonesian($expected, $number) : void */ public function test_ordinalize_numbers_portuguese($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'pt')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'pt')); } /** @@ -148,7 +148,7 @@ public function test_ordinalize_numbers_portuguese($expected, $number) : void */ public function test_ordinalize_numbers_spanish($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'es')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'es')); } /** @@ -159,7 +159,7 @@ public function test_ordinalize_numbers_spanish($expected, $number) : void */ public function test_ordinalize_numbers_italian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'it')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'it')); } /** @@ -170,7 +170,7 @@ public function test_ordinalize_numbers_italian($expected, $number) : void */ public function test_ordinalize_numbers_german($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'de')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'de')); } /** @@ -181,7 +181,7 @@ public function test_ordinalize_numbers_german($expected, $number) : void */ public function test_ordinalize_numbers_french($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'fr')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'fr')); } /** @@ -193,7 +193,7 @@ public function test_ordinalize_numbers_french($expected, $number) : void */ public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void { - $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); + $this->assertSame($expected, NumberHumanizer::binarySuffix($number, $locale)); } /** @@ -206,7 +206,7 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num */ public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void { - $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); + $this->assertSame($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void @@ -232,7 +232,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_p */ public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void { - $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); + $this->assertSame($expected, NumberHumanizer::metricSuffix($number, $locale)); } public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void @@ -250,7 +250,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_m */ public function test_converts_numbers_to_roman($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::toRoman($number)); + $this->assertSame($expected, NumberHumanizer::toRoman($number)); } /** @@ -261,7 +261,7 @@ public function test_converts_numbers_to_roman($expected, $number) : void */ public function test_convert_roman_numbers_to_arabic($number, $expected) : void { - $this->assertEquals($expected, NumberHumanizer::fromRoman($number)); + $this->assertSame($expected, NumberHumanizer::fromRoman($number)); } /** diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 2312c74..9a27009 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -27,7 +27,7 @@ class StringHumanizerTest extends TestCase */ public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void { - $this->assertEquals($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); + $this->assertSame($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); } /** @@ -40,7 +40,7 @@ public function test_humanize_strings($input, $expected, $capitalize, $separator */ public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void { - $this->assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); + $this->assertSame($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } /** @@ -54,7 +54,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char */ public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void { - $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); + $this->assertSame($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } /** @@ -65,7 +65,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char */ public function test_remove_all_shortcodes_from_text($text, $expected) : void { - $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); + $this->assertSame($expected, StringHumanizer::removeShortcodes($text)); } /** @@ -76,7 +76,7 @@ public function test_remove_all_shortcodes_from_text($text, $expected) : void */ public function test_remove_only_shortcode_tags_from_text($text, $expected) : void { - $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); + $this->assertSame($expected, StringHumanizer::removeShortcodeTags($text)); } public function removeAllShortcodesProvider() From 950ddc0b2e7291e2fb4faeb30d213c5512aa0a7c Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 29 Nov 2022 19:59:11 +0000 Subject: [PATCH 53/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5d8d94..b117856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2022-11-29 + +### Changed +- [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) + ## [4.0.3] - 2022-06-07 ### Added From bb832d503a44e8fc9222a7f7c37b097edbc15585 Mon Sep 17 00:00:00 2001 From: "Chun-Sheng, Li" Date: Wed, 30 Nov 2022 23:03:49 +0800 Subject: [PATCH 54/87] Fix CI status badge URL (#132) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 164d37a..37c7b7a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) - 4.x +* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) - 4.x [Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) From 9e7e2c48f8579dc555ec48f28771e82f76089cc4 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 30 Nov 2022 15:04:19 +0000 Subject: [PATCH 55/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b117856..daa876d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ -## [Unreleased] - 2022-11-29 +## [Unreleased] - 2022-11-30 ### Changed - [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) +### Fixed +- [#132](https://github.com/coduo/php-humanizer/pull/132) - **Fix the CI status badge URL.** - [@peter279k](https://github.com/peter279k) + ## [4.0.3] - 2022-06-07 ### Added From d8b65fadd3e242a7a0409c392609d1764df93b00 Mon Sep 17 00:00:00 2001 From: JeronyMo Date: Mon, 8 Jan 2024 13:20:18 +0100 Subject: [PATCH 56/87] Czech and Slovak added (#133) --- .../Resources/translations/difference.cs.yml | 35 +++++++++++++++++++ .../Resources/translations/difference.sk.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.cs.yml | 3 ++ .../Resources/translations/oxford.sk.yml | 3 ++ 4 files changed, 76 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml new file mode 100644 index 0000000..8c95565 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] právě teď" + future: "[0,Inf] právě teď" +second: + past: "{1} před vteřinou|[2, 4] před %count% vteřinami|[5,Inf] před %count% vteřinami" + future: "{1} za vteřinu|[2, 4] za %count% vteřiny|[5,Inf] za %count% vteřin" +minute: + past: "{1} před minutou|[2, Inf] před %count% minutami" + future: "{1} za minutu|[2, 4] za %count% minuty|[5,Inf] za %count% minut" +hour: + past: "{1} před hodinou|[2, Inf] před %count% hodinami" + future: "{1} za hodinu|[2, 4] za %count% hodiny|[5,Inf] za %count% hodin" +day: + past: "{1} včera|[2, Inf] před %count% dny" + future: "{1} zítra|[2, 4] za %count% dny|[5,Inf] za %count% dní" +week: + past: "{1} minulý týden|[2, Inf] před %count% týdny" + future: "{1} za týden|[2, 4] za %count% týdny|[5,Inf] za %count% týdnů" +month: + past: "{1} minulý měsíc|[2, Inf] před %count% měsíci" + future: "{1} za měsíc|[2, 4] za %count% měsíce|[5,Inf] za %count% měsíců" +year: + past: "{1} minulý rok|[2, Inf] před %count% lety" + future: "{1} za rok|[2, 4] za %count% roky|[5,Inf] za %count% let" + +compound: + second: "{1} %count% vteřina |[2,4] %count% vteřiny|[5,Inf] %count% vteřin" + minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" + hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodin" + day: "{1} %count% den |[2,4] %count% dny|[5,Inf] %count% dní" + week: "{1} %count% týden|[2,4] %count% týdny|[5,Inf] %count% týdnů" + month: "{1} %count% měsíc|[2,4] %count% měsíce|[5,Inf] %count% měsíců" + year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% let" + past: "před %value% " + future: "%value% odteď" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml new file mode 100644 index 0000000..f9a7591 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] práve teraz" + future: "[0,Inf] práve teraz" +second: + past: "{1} pred sekundou|[2, 4] pred %count% sekundami|[5,Inf] pred %count% sekundami" + future: "{1} o sekundu|[2, 4] o %count% sekundy|[5,Inf] o %count% sekúnd" +minute: + past: "{1} pred minútou|[2, Inf] pred %count% minútami" + future: "{1} o minútu|[2, 4] o %count% minúty|[5,Inf] o %count% minút" +hour: + past: "{1} pred hodinou|[2, Inf] pred %count% hodinami" + future: "{1} o hodinu|[2, 4] o %count% hodiny|[5,Inf] o %count% hodín" +day: + past: "{1} včera|[2, Inf] pred %count% dňami" + future: "{1} zajtra|[2, 4] o %count% dni|[5,Inf] o %count% dní" +week: + past: "{1} minulý týždeň|[2, Inf] pred %count% týždňami" + future: "{1} o týždeň|[2, 4] o %count% týždne|[5,Inf] o %count% týždňov" +month: + past: "{1} minulý mesiac|[2, Inf] pred %count% mesiacmi" + future: "{1} o mesiac|[2, 4] o %count% mesiace|[5,Inf] o %count% mesiacov" +year: + past: "{1} minulý rok|[2, Inf] pred %count% rokmi" + future: "{1} za rok|[2, 4] o %count% roky|[5,Inf] o %count% rokov" + +compound: + second: "{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekúnd" + minute: "{1} %count% minúta|[2,4] %count% minúty|[5,Inf] %count% minút" + hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodín" + day: "{1} %count% deň|[2,4] %count% dni|[5,Inf] %count% dní" + week: "{1} %count% týždeň|[2,4] %count% týždne|[5,Inf] %count% týždňov" + month: "{1} %count% mesiac|[2,4] %count% mesiace|[5,Inf] %count% mesiacov" + year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% rokov" + past: "%value% dozadu" + future: "%value% od teraz" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml new file mode 100644 index 0000000..2075228 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml @@ -0,0 +1,3 @@ +only_two: "%first% a %second%" +comma_separated: "%list%, a %last%" +comma_separated_with_limit: "[1,4] %list%, a %count% další|[5,Inf] %list%, a %count% dalších" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml new file mode 100644 index 0000000..d47f17b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml @@ -0,0 +1,3 @@ +only_two: "%first% a %second%" +comma_separated: "%list%, a %last%" +comma_separated_with_limit: "[1,4] %list%, a %count% ďalší|[5,Inf] %list%, a %count% ďalších" \ No newline at end of file From 3b63d9b290581ffd1d0d73d8b360ed268e1ee11a Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Mon, 8 Jan 2024 12:20:39 +0000 Subject: [PATCH 57/87] Updated CHANGELOG.md --- CHANGELOG.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index daa876d..908dddd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ -## [Unreleased] - 2022-11-30 +## [Unreleased] - 2024-01-08 + +### Added +- [#133](https://github.com/coduo/php-humanizer/pull/133) - **Slovak translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) +- [#133](https://github.com/coduo/php-humanizer/pull/133) - **Czech translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) ### Changed - [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) @@ -316,4 +320,54 @@ - [#7](https://github.com/coduo/php-humanizer/pull/7) - **precise date calculations** - [@defrag](https://github.com/defrag) - [#2](https://github.com/coduo/php-humanizer/pull/2) - **typos** - [@pborreli](https://github.com/pborreli) +## Contributors + +- @4t87ux8 +- @a-ungurianu +- @arrowrowe +- @Borales +- @brianwozeniak +- @cnkt +- @dagaa +- @ddmler +- @dedik +- @defrag +- @dizzy7 +- @doenietzomoeilijk +- @drgomesp +- @Forst +- @Gnomino +- @hjason2042@gmail.com +- @hyperpanic +- @IgorDePaula +- @isnani +- @jebog +- @jerony-mo +- @jfcherng +- @lightglitch +- @lpopov +- @martinbutt +- @mattallty +- @mostertb +- @naprirfan +- @norberttech +- @norzechowicz +- @NoUseFreak +- @nwatth +- @omissis +- @orestes +- @Ozmodiar +- @pborreli +- @percymamedy +- @peter279k +- @sam002 +- @sarelvdwalt +- @serima +- @smeeckaert +- @tbreuss +- @Th3Mouk +- @thunderer +- @vinicius73 +- @vinkla + Generated by [Automation](https://github.com/aeon-php/automation) \ No newline at end of file From c5023fa601eca56a39f23e9a8274d80f4a4a6c6a Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 11 Apr 2024 12:11:27 +0200 Subject: [PATCH 58/87] Updated project to latest versio of php and dependencies --- .github/workflows/changelog-update.yml | 2 +- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 6 +- README.md | 6 +- composer.json | 8 +- composer.lock | 833 +++++++------------------ 6 files changed, 244 insertions(+), 613 deletions(-) diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml index c444e15..603fb4b 100644 --- a/.github/workflows/changelog-update.yml +++ b/.github/workflows/changelog-update.yml @@ -7,7 +7,7 @@ name: "Changelog - Update Unreleased" on: push: branches: - - 4.x + - 5.x jobs: changelog-update-unreleased: diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 638387e..3c32bb3 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -4,7 +4,7 @@ on: pull_request: push: branches: - - "4.x" + - "5.x" schedule: - cron: '0 8 * * *' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a2e656d..7a80269 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -4,7 +4,7 @@ on: pull_request: push: branches: - - "4.x" + - "5.x" schedule: - cron: '0 8 * * *' @@ -21,9 +21,9 @@ jobs: - "lowest" - "highest" php-version: - - "7.4" - - "8.0" - "8.1" + - "8.2" + - "8.3" operating-system: - "ubuntu-latest" diff --git a/README.md b/README.md index 37c7b7a..70a8769 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # PHP Humanizer -![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) +![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) - 4.x +* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) - 5.x -[Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) +[Readme for 5.x version](https://github.com/coduo/php-humanizer/tree/5.x/README.md) diff --git a/composer.json b/composer.json index 7be652c..30d3045 100644 --- a/composer.json +++ b/composer.json @@ -15,10 +15,10 @@ } ], "require": { - "php": "~7.4 || ~8.0 || ~8.1", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "aeon-php/calendar": "^0.16.1 || ^1.0" + "php": "~8.1 || ~8.2 || ~8.3", + "symfony/translation": "~5.4||~6.4||~7", + "symfony/yaml": "~5.4||~6.4||~7", + "aeon-php/calendar": "^1.0" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock index 534a626..8ae0f87 100644 --- a/composer.lock +++ b/composer.lock @@ -4,27 +4,28 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4204f17fb768e8a680f1250930b5d246", + "content-hash": "2d526990fac84bbb17c6b9e1351ec4b6", "packages": [ { "name": "aeon-php/calendar", - "version": "1.0.4", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25" + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", - "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", "shasum": "" }, "require": { - "php": "^7.4.2 || ~8.0 || ~8.1" + "php": "~8.1.10 || ~8.2" }, "require-dev": { - "ext-bcmath": "*" + "ext-bcmath": "*", + "ext-pcov": "*" }, "suggest": { "ext-bcmath": "Compare time units with high precision" @@ -51,31 +52,31 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.4" + "source": "https://github.com/aeon-php/calendar/tree/1.0.9" }, - "time": "2022-01-28T13:12:23+00:00" + "time": "2023-08-29T09:47:37+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -104,7 +105,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -120,20 +121,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -147,9 +148,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -186,7 +184,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -202,20 +200,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -229,9 +227,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -269,90 +264,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -368,57 +280,55 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/translation", - "version": "v5.4.9", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca" + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/1639abc1177d26bcd4320e535e664cef067ab0ca", - "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca", + "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -449,7 +359,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.9" + "source": "https://github.com/symfony/translation/tree/v6.4.4" }, "funding": [ { @@ -465,32 +375,29 @@ "type": "tidelift" } ], - "time": "2022-05-06T12:33:37+00:00" + "time": "2024-02-20T13:16:58+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "1211df0afa701e45a04253110e959d4af4ef0f07" + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07", - "reference": "1211df0afa701e45a04253110e959d4af4ef0f07", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -500,7 +407,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -527,7 +437,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" }, "funding": [ { @@ -543,35 +453,32 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.3", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" + "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", + "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -602,7 +509,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.3" + "source": "https://github.com/symfony/yaml/tree/v6.4.3" }, "funding": [ { @@ -618,36 +525,36 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:32:32+00:00" + "time": "2024-01-23T14:51:35+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -674,7 +581,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -690,20 +597,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -741,7 +648,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -749,29 +656,31 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -779,7 +688,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -803,26 +712,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -863,9 +773,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -918,252 +834,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org/", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com/" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1178,8 +867,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -1212,7 +901,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -1220,7 +910,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1465,20 +1155,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "9.6.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -1489,31 +1179,26 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -1521,7 +1206,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -1552,7 +1237,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" }, "funding": [ { @@ -1562,22 +1248,26 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-04-01T12:37:26+00:00" + "time": "2024-04-05T04:35:58+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -1612,7 +1302,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -1620,7 +1310,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -1735,16 +1425,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -1797,7 +1487,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -1805,24 +1495,24 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -1854,7 +1544,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -1862,20 +1552,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -1920,7 +1610,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -1928,20 +1618,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -1983,7 +1673,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -1991,20 +1681,20 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -2060,7 +1750,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -2068,20 +1758,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -2124,7 +1814,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -2132,24 +1822,24 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2181,7 +1871,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -2189,7 +1879,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -2305,16 +1995,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -2353,10 +2043,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -2364,20 +2054,20 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -2389,7 +2079,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2410,8 +2100,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -2419,20 +2108,20 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -2444,7 +2133,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2467,7 +2156,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -2475,7 +2164,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -2532,16 +2221,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -2570,7 +2259,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -2578,7 +2267,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "thunderer/shortcode", @@ -2635,64 +2324,6 @@ "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" }, "time": "2022-01-13T18:53:33+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], @@ -2701,8 +2332,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~7.4 || ~8.0 || ~8.1" + "php": "~8.1 || ~8.2 || ~8.3" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } From fe058ca2ecb9aa90f8c688a25a9327b7c2050156 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 11 Apr 2024 12:13:17 +0200 Subject: [PATCH 59/87] Fixed static analyze github workflow php version --- .github/workflows/static-analyze.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 3c32bb3..9f40c7a 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -19,7 +19,7 @@ jobs: dependencies: - "locked" php-version: - - "7.4" + - "8.1" operating-system: - "ubuntu-latest" From 90efee54b12d083d7d4ec62d52cdb7f2a5c9641d Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 11 Apr 2024 12:26:35 +0200 Subject: [PATCH 60/87] Fixed development tools dependencies configuration --- composer.json | 6 +- composer.lock | 2339 ----------------- phpunit.xml.dist | 41 +- psalm.xml | 2 + .../Tests/CollectionHumanizerTest.php | 18 +- .../Tests/DateTimeHumanizerTest.php | 86 +- .../Tests/NumberHumanizerTest.php | 703 ++--- .../Tests/StringHumanizerTest.php | 136 +- tools/composer.json | 8 +- tools/composer.lock | 1992 ++++++-------- tools/php-cs-fixer | Bin 1852521 -> 0 bytes 11 files changed, 1260 insertions(+), 4071 deletions(-) delete mode 100644 composer.lock delete mode 100755 tools/php-cs-fixer diff --git a/composer.json b/composer.json index 30d3045..138d0f5 100644 --- a/composer.json +++ b/composer.json @@ -21,8 +21,7 @@ "aeon-php/calendar": "^1.0" }, "require-dev": { - "thunderer/shortcode": "^0.7", - "phpunit/phpunit": "^9.4" + "thunderer/shortcode": "^0.7" }, "config": { "bin-dir": "bin" @@ -55,11 +54,12 @@ ], "cs:php:fix": "tools/vendor/bin/php-cs-fixer fix", "tools:install": "composer install --working-dir=./tools", + "tools:update": "composer update --working-dir=./tools", "post-install-cmd": [ "@tools:install" ], "post-update-cmd": [ - "@tools:install" + "@tools:update" ] } } diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 8ae0f87..0000000 --- a/composer.lock +++ /dev/null @@ -1,2339 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "2d526990fac84bbb17c6b9e1351ec4b6", - "packages": [ - { - "name": "aeon-php/calendar", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/aeon-php/calendar.git", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", - "shasum": "" - }, - "require": { - "php": "~8.1.10 || ~8.2" - }, - "require-dev": { - "ext-bcmath": "*", - "ext-pcov": "*" - }, - "suggest": { - "ext-bcmath": "Compare time units with high precision" - }, - "type": "library", - "autoload": { - "psr-4": { - "Aeon\\": [ - "src/Aeon" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP type safe, immutable calendar library", - "keywords": [ - "calendar", - "date", - "datetime", - "immutable", - "time" - ], - "support": { - "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.9" - }, - "time": "2023-08-29T09:47:37+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.4.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^4.18|^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-02-20T13:16:58+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.4.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com/", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T14:51:35+00:00" - }, - { - "name": "symfony/yaml", - "version": "v6.4.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T14:51:35+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.0.2", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" - }, - "time": "2024-03-05T20:51:40+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.31", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:37:42+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.19", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-04-05T04:35:58+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:19:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:33:00+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:35:11+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-14T16:00:52+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "thunderer/shortcode", - "version": "v0.7.5", - "source": { - "type": "git", - "url": "https://github.com/thunderer/Shortcode.git", - "reference": "a4fee30613bd46efb421f8305aff0466a3268a99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/a4fee30613bd46efb421f8305aff0466a3268a99", - "reference": "a4fee30613bd46efb421f8305aff0466a3268a99", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": ">=4.1", - "symfony/yaml": ">=2.0" - }, - "suggest": { - "ext-dom": "if you want to use XML serializer", - "ext-json": "if you want to use JSON serializer", - "symfony/yaml": "if you want to use YAML serializer" - }, - "type": "library", - "autoload": { - "psr-4": { - "Thunder\\Shortcode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tomasz Kowalczyk", - "email": "tomasz@kowalczyk.cc" - } - ], - "description": "Advanced shortcode (BBCode) parser and engine for PHP", - "keywords": [ - "bbcode", - "engine", - "library", - "parser", - "shortcode" - ], - "support": { - "issues": "https://github.com/thunderer/Shortcode/issues", - "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" - }, - "time": "2022-01-13T18:53:33+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "~8.1 || ~8.2 || ~8.3" - }, - "platform-dev": [], - "plugin-api-version": "2.6.0" -} diff --git a/phpunit.xml.dist b/phpunit.xml.dist index e4936a9..9f54b7e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,23 +1,22 @@ - - - ./tests/ - - - - - - ./src/ - - - - - - - \ No newline at end of file + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" + colors="true" + bootstrap="vendor/autoload.php" + cacheDirectory="var/phpunit/cache"> + + + ./tests/ + + + + + + + + + + ./src/ + + + diff --git a/psalm.xml b/psalm.xml index e836113..96ca92a 100644 --- a/psalm.xml +++ b/psalm.xml @@ -7,6 +7,8 @@ cacheDirectory="var/psalm/cache" errorBaseline="baseline.xml" errorLevel="1" + findUnusedBaselineEntry="false" + findUnusedCode="false" > diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 76737e0..f11b6d4 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -16,15 +16,7 @@ final class CollectionHumanizerTest extends TestCase { - /** - * @dataProvider oxfordCollectionProvider - */ - public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void - { - $this->assertSame($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); - } - - public function oxfordCollectionProvider() + public static function oxfordCollectionProvider() { return [ // English @@ -90,4 +82,12 @@ public function oxfordCollectionProvider() [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'ja', 'Michal, Norbert, Lukasz と Pawel'], ]; } + + /** + * @dataProvider oxfordCollectionProvider + */ + public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void + { + $this->assertSame($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 2d709a8..600f06a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -21,47 +21,7 @@ class DateTimeHumanizerTest extends TestCase { - /** - * @dataProvider humanizeDataProvider - */ - public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); - } - - /** - * @dataProvider humanizeDataProvider - */ - public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); - } - - /** - * @dataProvider preciseDifferenceDataProvider - */ - public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); - } - - /** - * @dataProvider preciseDifferenceDataProvider - */ - public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); - } - - /** - * @dataProvider timeUnitDataProvider - */ - public function test_humanize_time_unit(Unit $unit, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::timeUnit($unit, $locale)); - } - - public function humanizeDataProvider() : array + public static function humanizeDataProvider() : array { return [ // English @@ -279,7 +239,7 @@ public function humanizeDataProvider() : array ]; } - public function preciseDifferenceDataProvider() : array + public static function preciseDifferenceDataProvider() : array { return [ // Azerbaijani @@ -474,7 +434,7 @@ public function preciseDifferenceDataProvider() : array ]; } - public function timeUnitDataProvider() : array + public static function timeUnitDataProvider() : array { return [ // English @@ -508,4 +468,44 @@ public function timeUnitDataProvider() : array [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'], ]; } + + /** + * @dataProvider humanizeDataProvider + */ + public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + } + + /** + * @dataProvider humanizeDataProvider + */ + public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + */ + public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + */ + public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + } + + /** + * @dataProvider timeUnitDataProvider + */ + public function test_humanize_time_unit(Unit $unit, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timeUnit($unit, $locale)); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index ccca05e..e5bcf2b 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -17,566 +17,569 @@ class NumberHumanizerTest extends TestCase { /** - * @dataProvider ordinalIndicatorProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix($expected, $number) : void + public static function ordinalIndicatorProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number)); + return [ + ['st', 1], + ['nd', 2], + ['rd', 23], + ['nd', 1002], + ['th', -111], + ]; } /** - * @dataProvider ordinalIndicatorDutchProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_dutch($expected, $number) : void + public static function ordinalIndicatorDutchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'nl')); + return [ + ['e', 1], + ['e', 2], + ['e', 23], + ['e', 1002], + ['e', -111], + ]; } /** - * @dataProvider ordinalIndicatorIndonesianProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_indonesian($expected, $number) : void + public static function ordinalIndicatorIndonesianProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'id')); + return [ + ['ke-', 1], + ['ke-', 2], + ['ke-', 23], + ['ke-', 1002], + ['ke-', -111], + ]; } /** - * @dataProvider ordinalSuffixPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_spanish($expected, $number) : void + public static function ordinalizeDataProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'es')); + return [ + ['1st', 1], + ['2nd', 2], + ['23rd', 23], + ['1002nd', 1002], + ['-111th', -111], + ]; } /** - * @dataProvider ordinalSuffixPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_italian($expected, $number) : void + public static function ordinalizeDataDutchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'it')); + return [ + ['1e', 1], + ['2e', 2], + ['23e', 23], + ['1002e', 1002], + ['-111e', -111], + ]; } /** - * @dataProvider ordinalSuffixGermanProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_german($expected, $number) : void + public static function ordinalizeDataIndonesianProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'de')); + return [ + ['ke-1', 1], + ['ke-2', 2], + ['ke-23', 23], + ['ke-1002', 1002], + ['ke--111', -111], + ]; } /** - * @dataProvider ordinalSuffixFrenchProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_french($expected, $number) : void + public static function ordinalizeDataPtEsItProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'fr')); + return [ + ['1o', 1], + ['2o', 2], + ['23o', 23], + ['1002o', 1002], + ['-111o', -111], + ]; } /** - * @dataProvider ordinalizeDataProvider - * @depends test_return_ordinal_suffix - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers($expected, $number) : void + public static function ordinalizeDataGermanProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number)); + return [ + ['1.', 1], + ['2.', 2], + ['23.', 23], + ['1002.', 1002], + ['-111.', -111], + ]; } /** - * @dataProvider ordinalizeDataDutchProvider - * @depends test_return_ordinal_suffix_dutch - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_dutch($expected, $number) : void + public static function ordinalizeDataFrenchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'nl')); + return [ + ['1er', 1], + ['2e', 2], + ['23e', 23], + ['1002e', 1002], + ['-111e', -111], + ]; } /** - * @dataProvider ordinalizeDataIndonesianProvider - * @depends test_return_ordinal_suffix_indonesian - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_indonesian($expected, $number) : void + public static function ordinalSuffixPtEsItProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'id')); + return [ + ['o', 1], + ['o', 2], + ['o', 23], + ['o', 1002], + ['o', -111], + ]; } /** - * @dataProvider ordinalizeDataPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_portuguese($expected, $number) : void + public static function ordinalSuffixGermanProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'pt')); + return [ + ['.', 1], + ['.', 2], + ['.', 23], + ['.', 1002], + ['.', -111], + ]; } /** - * @dataProvider ordinalizeDataPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_spanish($expected, $number) : void + public static function ordinalSuffixFrenchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'es')); + return [ + ['er', 1], + ['e', 2], + ['e', 23], + ['e', 1002], + ['e', -111], + ]; } /** - * @dataProvider ordinalizeDataPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_italian($expected, $number) : void + public static function binarySuffixDataProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'it')); - } + return [ + [-1, -1], + ['0 bytes', 0], + ['1 bytes', 1], + ['1 kB', 1024], + ['1 kB', 1025], + ['1.5 kB', 1536], + ['84.4 kB', 86450], + ['5 MB', 1048576 * 5], + ['2 GB', 1073741824 * 2], + ['3 TB', 1099511627776 * 3], + ['1.18 PB', 1325899906842624], - /** - * @dataProvider ordinalizeDataGermanProvider - * - * @param $expected - * @param $number - */ - public function test_ordinalize_numbers_german($expected, $number) : void - { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'de')); + ['1,5 kB', 1536, 'pl'], + ['1,18 PB', 1325899906842624, 'pl'], + ]; } /** - * @dataProvider ordinalizeDataFrenchProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_french($expected, $number) : void + public static function preciseBinarySuffixDataProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'fr')); + return [ + // Negative case + [-1, -1, 3], + + // Byte Cases + ['0 bytes', 0, 3], + ['1 bytes', 1, 0], + ['1023 bytes', 1023, 3], + + // Kilobyte Cases + ['1.000 kB', 1024, 3], + ['2 kB', 1588, 0], + ['1.6 kB', 1588, 1], + ['1.55 kB', 1588, 2], + ['1.551 kB', 1588, 3], + + // Megabyte Cases + ['5.00 MB', (1048576 * 5), 2], + ['5.00 MB', (1048576 * 5) + 600, 2], + ['5.001 MB', (1048576 * 5) + 600, 3], + + // Gigabyte Cases + ['2 GB', 1073741824 * 2, 0], + ['2.0 GB', 1073741824 * 2, 1], + + // Terabyte Cases + ['3.00 TB', 1099511627776 * 3, 2], + + // Petabyte Case + ['1.178 PB', 1325899906842624, 3], + + // Locale Cases + ['1,500 kB', 1536, 3, 'pl'], + ['1,178 PB', 1325899906842624, 3, 'pl'], + ]; } /** - * @dataProvider binarySuffixDataProvider - * - * @param $expected - * @param $number - * @param string $locale + * @return array */ - public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void + public static function metricSuffixDataProvider() { - $this->assertSame($expected, NumberHumanizer::binarySuffix($number, $locale)); - } - - /** - * @dataProvider preciseBinarySuffixDataProvider - * - * @param $expected - * @param $number - * @param string $locale - * @param int $precision + return [ + ['-1', -1], + ['0', 0], + ['1', 1], + ['101', 101], + ['1k', 1000], + ['1.2k', 1240], + ['1.24M', 1240000], + ['3.5M', 3500000], + + ['1,2k', 1240, 'pl'], + ['1,24M', 1240000, 'pl'], + ['3,5M', 3500000, 'pl'], + ]; + } + + /** + * @return array */ - public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void + public static function romanDataProvider() { - $this->assertSame($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); + return [ + ['I', 1], + ['V', 5], + ['IX', 9], + ['X', 10], + ['CXXV', 125], + ['MCCC', 1300], + ['MMMCMXCIX', 3999], + ]; } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void + /** + * @return array + */ + public static function romanExceptionProvider() { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::preciseBinarySuffix(1, -1); + return [ + [-1], + [4000], + ]; } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() : void + /** + * @return array + */ + public static function arabicExceptionProvider() { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::preciseBinarySuffix(1, 4); + return [ + [''], + ['foobar'], + ]; } /** - * @dataProvider metricSuffixDataProvider + * @dataProvider ordinalIndicatorProvider * * @param $expected * @param $number - * @param string $locale */ - public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void + public function test_return_ordinal_suffix($expected, $number) : void { - $this->assertSame($expected, NumberHumanizer::metricSuffix($number, $locale)); + $this->assertSame($expected, NumberHumanizer::ordinal($number)); } - public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void + /** + * @dataProvider ordinalIndicatorDutchProvider + * + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_dutch($expected, $number) : void { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::metricSuffix('as12'); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'nl')); } /** - * @dataProvider romanDataProvider + * @dataProvider ordinalIndicatorIndonesianProvider * * @param $expected * @param $number */ - public function test_converts_numbers_to_roman($expected, $number) : void + public function test_return_ordinal_suffix_indonesian($expected, $number) : void { - $this->assertSame($expected, NumberHumanizer::toRoman($number)); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'id')); } /** - * @dataProvider romanDataProvider + * @dataProvider ordinalSuffixPtEsItProvider * * @param $expected * @param $number */ - public function test_convert_roman_numbers_to_arabic($number, $expected) : void + public function test_return_ordinal_suffix_spanish($expected, $number) : void { - $this->assertSame($expected, NumberHumanizer::fromRoman($number)); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'es')); } /** - * @dataProvider romanExceptionProvider + * @dataProvider ordinalSuffixPtEsItProvider * + * @param $expected * @param $number */ - public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) : void + public function test_return_ordinal_suffix_italian($expected, $number) : void { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::toRoman($number); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'it')); } /** - * @dataProvider arabicExceptionProvider + * @dataProvider ordinalSuffixGermanProvider * + * @param $expected * @param $number */ - public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) : void + public function test_return_ordinal_suffix_german($expected, $number) : void { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::fromRoman($number); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'de')); } /** - * @return array + * @dataProvider ordinalSuffixFrenchProvider + * + * @param $expected + * @param $number */ - public function ordinalIndicatorProvider() + public function test_return_ordinal_suffix_french($expected, $number) : void { - return [ - ['st', 1], - ['nd', 2], - ['rd', 23], - ['nd', 1002], - ['th', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'fr')); } /** - * @return array + * @dataProvider ordinalizeDataProvider + * + * @depends test_return_ordinal_suffix + * + * @param $expected + * @param $number */ - public function ordinalIndicatorDutchProvider() + public function test_ordinalize_numbers($expected, $number) : void { - return [ - ['e', 1], - ['e', 2], - ['e', 23], - ['e', 1002], - ['e', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number)); } /** - * @return array + * @dataProvider ordinalizeDataDutchProvider + * + * @depends test_return_ordinal_suffix_dutch + * + * @param $expected + * @param $number */ - public function ordinalIndicatorIndonesianProvider() + public function test_ordinalize_numbers_dutch($expected, $number) : void { - return [ - ['ke-', 1], - ['ke-', 2], - ['ke-', 23], - ['ke-', 1002], - ['ke-', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'nl')); } /** - * @return array + * @dataProvider ordinalizeDataIndonesianProvider + * + * @depends test_return_ordinal_suffix_indonesian + * + * @param $expected + * @param $number */ - public function ordinalizeDataProvider() + public function test_ordinalize_numbers_indonesian($expected, $number) : void { - return [ - ['1st', 1], - ['2nd', 2], - ['23rd', 23], - ['1002nd', 1002], - ['-111th', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'id')); } /** - * @return array + * @dataProvider ordinalizeDataPtEsItProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataDutchProvider() + public function test_ordinalize_numbers_portuguese($expected, $number) : void { - return [ - ['1e', 1], - ['2e', 2], - ['23e', 23], - ['1002e', 1002], - ['-111e', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'pt')); } /** - * @return array + * @dataProvider ordinalizeDataPtEsItProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataIndonesianProvider() + public function test_ordinalize_numbers_spanish($expected, $number) : void { - return [ - ['ke-1', 1], - ['ke-2', 2], - ['ke-23', 23], - ['ke-1002', 1002], - ['ke--111', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'es')); } /** - * @return array + * @dataProvider ordinalizeDataPtEsItProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataPtEsItProvider() + public function test_ordinalize_numbers_italian($expected, $number) : void { - return [ - ['1o', 1], - ['2o', 2], - ['23o', 23], - ['1002o', 1002], - ['-111o', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'it')); } /** - * @return array + * @dataProvider ordinalizeDataGermanProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataGermanProvider() + public function test_ordinalize_numbers_german($expected, $number) : void { - return [ - ['1.', 1], - ['2.', 2], - ['23.', 23], - ['1002.', 1002], - ['-111.', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'de')); } /** - * @return array + * @dataProvider ordinalizeDataFrenchProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataFrenchProvider() + public function test_ordinalize_numbers_french($expected, $number) : void { - return [ - ['1er', 1], - ['2e', 2], - ['23e', 23], - ['1002e', 1002], - ['-111e', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'fr')); } /** - * @return array + * @dataProvider binarySuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale */ - public function ordinalSuffixPtEsItProvider() + public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void { - return [ - ['o', 1], - ['o', 2], - ['o', 23], - ['o', 1002], - ['o', -111], - ]; + $this->assertSame($expected, NumberHumanizer::binarySuffix($number, $locale)); } /** - * @return array + * @dataProvider preciseBinarySuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale + * @param int $precision */ - public function ordinalSuffixGermanProvider() + public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void { - return [ - ['.', 1], - ['.', 2], - ['.', 23], - ['.', 1002], - ['.', -111], - ]; + $this->assertSame($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } - /** - * @return array - */ - public function ordinalSuffixFrenchProvider() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void { - return [ - ['er', 1], - ['e', 2], - ['e', 23], - ['e', 1002], - ['e', -111], - ]; + $this->expectException(\InvalidArgumentException::class); + + NumberHumanizer::preciseBinarySuffix(1, -1); } - /** - * @return array - */ - public function binarySuffixDataProvider() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() : void { - return [ - [-1, -1], - ['0 bytes', 0], - ['1 bytes', 1], - ['1 kB', 1024], - ['1 kB', 1025], - ['1.5 kB', 1536], - ['84.4 kB', 86450], - ['5 MB', 1048576 * 5], - ['2 GB', 1073741824 * 2], - ['3 TB', 1099511627776 * 3], - ['1.18 PB', 1325899906842624], + $this->expectException(\InvalidArgumentException::class); - ['1,5 kB', 1536, 'pl'], - ['1,18 PB', 1325899906842624, 'pl'], - ]; + NumberHumanizer::preciseBinarySuffix(1, 4); } /** - * @return array + * @dataProvider metricSuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale */ - public function preciseBinarySuffixDataProvider() + public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void { - return [ - // Negative case - [-1, -1, 3], - - // Byte Cases - ['0 bytes', 0, 3], - ['1 bytes', 1, 0], - ['1023 bytes', 1023, 3], - - // Kilobyte Cases - ['1.000 kB', 1024, 3], - ['2 kB', 1588, 0], - ['1.6 kB', 1588, 1], - ['1.55 kB', 1588, 2], - ['1.551 kB', 1588, 3], - - // Megabyte Cases - ['5.00 MB', (1048576 * 5), 2], - ['5.00 MB', (1048576 * 5) + 600, 2], - ['5.001 MB', (1048576 * 5) + 600, 3], - - // Gigabyte Cases - ['2 GB', 1073741824 * 2, 0], - ['2.0 GB', 1073741824 * 2, 1], - - // Terabyte Cases - ['3.00 TB', 1099511627776 * 3, 2], + $this->assertSame($expected, NumberHumanizer::metricSuffix($number, $locale)); + } - // Petabyte Case - ['1.178 PB', 1325899906842624, 3], + public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void + { + $this->expectException(\InvalidArgumentException::class); - // Locale Cases - ['1,500 kB', 1536, 3, 'pl'], - ['1,178 PB', 1325899906842624, 3, 'pl'], - ]; + NumberHumanizer::metricSuffix('as12'); } /** - * @return array + * @dataProvider romanDataProvider + * + * @param $expected + * @param $number */ - public function metricSuffixDataProvider() + public function test_converts_numbers_to_roman($expected, $number) : void { - return [ - ['-1', -1], - ['0', 0], - ['1', 1], - ['101', 101], - ['1k', 1000], - ['1.2k', 1240], - ['1.24M', 1240000], - ['3.5M', 3500000], - - ['1,2k', 1240, 'pl'], - ['1,24M', 1240000, 'pl'], - ['3,5M', 3500000, 'pl'], - ]; + $this->assertSame($expected, NumberHumanizer::toRoman($number)); } /** - * @return array + * @dataProvider romanDataProvider + * + * @param $expected + * @param $number */ - public function romanDataProvider() + public function test_convert_roman_numbers_to_arabic($number, $expected) : void { - return [ - ['I', 1], - ['V', 5], - ['IX', 9], - ['X', 10], - ['CXXV', 125], - ['MCCC', 1300], - ['MMMCMXCIX', 3999], - ]; + $this->assertSame($expected, NumberHumanizer::fromRoman($number)); } /** - * @return array + * @dataProvider romanExceptionProvider + * + * @param $number */ - public function romanExceptionProvider() + public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) : void { - return [ - [-1], - [4000], - ]; + $this->expectException(\InvalidArgumentException::class); + + NumberHumanizer::toRoman($number); } /** - * @return array + * @dataProvider arabicExceptionProvider + * + * @param $number */ - public function arabicExceptionProvider() + public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) : void { - return [ - [''], - ['foobar'], - ]; + $this->expectException(\InvalidArgumentException::class); + + NumberHumanizer::fromRoman($number); } } diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 9a27009..692364f 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -16,70 +16,7 @@ class StringHumanizerTest extends TestCase { - /** - * @dataProvider humanizeStringProvider - * - * @param $input - * @param $expected - * @param $capitalize - * @param $separator - * @param array $forbiddenWords - */ - public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void - { - $this->assertSame($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); - } - - /** - * @dataProvider truncateStringProvider - * - * @param $text - * @param $expected - * @param $charactersCount - * @param string $append - */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void - { - $this->assertSame($expected, StringHumanizer::truncate($text, $charactersCount, $append)); - } - - /** - * @dataProvider truncateHtmlStringProvider - * - * @param $text - * @param $charactersCount - * @param $allowedTags - * @param $expected - * @param $append - */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void - { - $this->assertSame($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); - } - - /** - * @dataProvider removeAllShortcodesProvider - * - * @param $text - * @param $expected - */ - public function test_remove_all_shortcodes_from_text($text, $expected) : void - { - $this->assertSame($expected, StringHumanizer::removeShortcodes($text)); - } - - /** - * @dataProvider removeShortcodeTagsProvider - * - * @param $text - * @param $expected - */ - public function test_remove_only_shortcode_tags_from_text($text, $expected) : void - { - $this->assertSame($expected, StringHumanizer::removeShortcodeTags($text)); - } - - public function removeAllShortcodesProvider() + public static function removeAllShortcodesProvider() { return [ ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'], @@ -87,7 +24,7 @@ public function removeAllShortcodesProvider() ]; } - public function removeShortcodeTagsProvider() + public static function removeShortcodeTagsProvider() { return [ ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'], @@ -98,7 +35,7 @@ public function removeShortcodeTagsProvider() /** * @return array */ - public function humanizeStringProvider() + public static function humanizeStringProvider() { return [ ['news_count', 'News count', true, '_', ['id']], @@ -114,7 +51,7 @@ public function humanizeStringProvider() /** * @return array */ - public function truncateStringProvider() + public static function truncateStringProvider() { $longText = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; $shortText = 'Short text'; @@ -142,7 +79,7 @@ public function truncateStringProvider() /** * @return array */ - public function truncateHtmlStringProvider() + public static function truncateHtmlStringProvider() { $text = ''; @@ -162,4 +99,67 @@ public function truncateHtmlStringProvider() [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'], ]; } + + /** + * @dataProvider humanizeStringProvider + * + * @param $input + * @param $expected + * @param $capitalize + * @param $separator + * @param array $forbiddenWords + */ + public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void + { + $this->assertSame($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); + } + + /** + * @dataProvider truncateStringProvider + * + * @param $text + * @param $expected + * @param $charactersCount + * @param string $append + */ + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void + { + $this->assertSame($expected, StringHumanizer::truncate($text, $charactersCount, $append)); + } + + /** + * @dataProvider truncateHtmlStringProvider + * + * @param $text + * @param $charactersCount + * @param $allowedTags + * @param $expected + * @param $append + */ + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void + { + $this->assertSame($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); + } + + /** + * @dataProvider removeAllShortcodesProvider + * + * @param $text + * @param $expected + */ + public function test_remove_all_shortcodes_from_text($text, $expected) : void + { + $this->assertSame($expected, StringHumanizer::removeShortcodes($text)); + } + + /** + * @dataProvider removeShortcodeTagsProvider + * + * @param $text + * @param $expected + */ + public function test_remove_only_shortcode_tags_from_text($text, $expected) : void + { + $this->assertSame($expected, StringHumanizer::removeShortcodeTags($text)); + } } diff --git a/tools/composer.json b/tools/composer.json index 797e9e8..cb3fa9f 100644 --- a/tools/composer.json +++ b/tools/composer.json @@ -3,9 +3,9 @@ "description": "PHP Humanizer - Tools", "autoload": {}, "require-dev": { - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.6", - "phpstan/phpstan": "^1.0.0", - "friendsofphp/php-cs-fixer": "^3.1" + "phpunit/phpunit": "^10", + "vimeo/psalm": "^5", + "phpstan/phpstan": "^1", + "friendsofphp/php-cs-fixer": "^3.53" } } diff --git a/tools/composer.lock b/tools/composer.lock index 702dbc0..e9af767 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "489c61ff2dc7801b7b9e59e0d3622b3a", + "content-hash": "007f999564b058c9d31a3924f5bdb9bc", "packages": [], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -30,8 +30,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -86,7 +86,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -94,7 +94,7 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", @@ -173,91 +173,18 @@ ], "time": "2021-03-30T17:13:30+00:00" }, - { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.5", - "source": { - "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" - }, - "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "support": { - "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" - }, - "funding": [ - { - "url": "https://packagist.com/", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-01-17T14:14:24+00:00" - }, { "name": "composer/pcre", - "version": "3.0.0", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { @@ -299,7 +226,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.1.3" }, "funding": [ { @@ -315,20 +242,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2024-03-19T10:26:25+00:00" }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { @@ -378,9 +305,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -396,20 +323,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -420,7 +347,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -444,9 +371,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -462,7 +389,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-03-26T18:29:49+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -502,89 +429,17 @@ "time": "2019-12-04T15:06:13+00:00" }, { - "name": "doctrine/annotations", - "version": "1.13.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" - }, - "time": "2021-08-05T19:00:23+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", + "name": "doctrine/deprecations", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -592,132 +447,33 @@ }, "require-dev": { "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -820,54 +576,113 @@ }, "time": "2022-03-02T22:36:06+00:00" }, + { + "name": "fidry/cpu-core-counter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-02-07T09:43:46+00:00" + }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.8.0", + "version": "v3.53.0", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/69a19093a9ded8d1baac62ed6c009b8bc148d008", + "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008", "shasum": "" }, "require": { - "composer/semver": "^3.2", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "php-cs-fixer/diff": "^2.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { + "facile-it/paraunit": "^1.3 || ^2.0", + "infection/infection": "^0.27.11", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "keradus/cli-executor": "^2.1", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -897,9 +712,15 @@ } ], "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.53.0" }, "funding": [ { @@ -907,20 +728,20 @@ "type": "github" } ], - "time": "2022-03-18T17:20:59+00:00" + "time": "2024-04-08T15:03:00+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -958,7 +779,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -966,20 +787,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", "shasum": "" }, "require": { @@ -990,7 +811,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -1015,27 +836,27 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2024-01-31T06:18:54+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.19.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", @@ -1071,79 +892,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" - }, - "time": "2022-05-31T20:59:12+00:00" - }, - { - "name": "openlss/lib-array2xml", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/nullivex/lib-array2xml.git", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "LSS": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Bryan Tong", - "email": "bryan@nullivex.com", - "homepage": "https://www.nullivex.com/" - }, - { - "name": "Tony Butler", - "email": "spudz76@gmail.com", - "homepage": "https://www.nullivex.com/" - } - ], - "description": "Array2XML conversion library credit to lalit.org", - "homepage": "https://www.nullivex.com/", - "keywords": [ - "array", - "array conversion", - "xml", - "xml conversion" - ], - "support": { - "issues": "https://github.com/nullivex/lib-array2xml/issues", - "source": "https://github.com/nullivex/lib-array2xml/tree/master" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" }, - "time": "2019-03-29T20:06:56+00:00" + "time": "2024-03-17T08:10:35+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1184,9 +953,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -1239,58 +1014,6 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "time": "2020-10-14T08:32:19+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -1403,25 +1126,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -1447,89 +1178,69 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.15.0", + "name": "phpstan/phpdoc-parser", + "version": "1.28.0", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" + "PHPStan\\PhpDocParser\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com/" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "license": [ + "MIT" ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2024-04-03T18:51:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.7.11", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "62fcadcde81b4037e42ad2489119d31c46f00191" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/62fcadcde81b4037e42ad2489119d31c46f00191", - "reference": "62fcadcde81b4037e42ad2489119d31c46f00191", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -1553,9 +1264,16 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.7.11" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -1566,57 +1284,53 @@ "url": "https://github.com/phpstan", "type": "github" }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, { "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", "type": "tidelift" } ], - "time": "2022-06-07T08:47:03+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -1644,7 +1358,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -1652,32 +1367,32 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -1704,7 +1419,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -1712,28 +1428,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -1741,7 +1457,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -1767,7 +1483,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -1775,32 +1491,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -1826,7 +1542,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -1834,32 +1551,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1885,7 +1602,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -1893,24 +1610,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "10.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -1920,32 +1636,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -1953,7 +1663,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -1984,7 +1694,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.17" }, "funding": [ { @@ -1994,77 +1705,37 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2022-04-01T12:37:26+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + }, { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2024-04-05T04:39:01+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2091,9 +1762,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -2147,30 +1818,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2191,34 +1862,34 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2241,7 +1912,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -2249,32 +1921,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2297,7 +1969,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -2305,32 +1977,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2352,7 +2024,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -2360,34 +2032,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2426,7 +2100,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -2434,33 +2109,33 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -2483,7 +2158,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -2491,33 +2167,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2549,7 +2225,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -2557,27 +2234,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -2585,7 +2262,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -2604,7 +2281,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -2612,7 +2289,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -2620,34 +2298,34 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2689,7 +2367,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -2697,38 +2376,35 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2747,13 +2423,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -2761,33 +2438,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2810,7 +2487,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -2818,34 +2496,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2867,7 +2545,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -2875,32 +2553,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2922,7 +2600,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -2930,32 +2608,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2982,10 +2660,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -2993,32 +2671,32 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3033,14 +2711,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -3048,32 +2727,29 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "sebastian/type", - "version": "3.0.0", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3092,11 +2768,11 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -3104,109 +2780,114 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "spatie/array-to-xml", + "version": "3.2.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/spatie/array-to-xml.git", + "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab", + "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-dom": "*", + "php": "^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "require-dev": { + "mockery/mockery": "^1.2", + "pestphp/pest": "^1.21", + "spatie/pest-plugin-snapshots": "^1.1" }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Spatie\\ArrayToXml\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://freek.dev/", + "role": "Developer" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Convert an array to xml", + "homepage": "https://github.com/spatie/array-to-xml", + "keywords": [ + "array", + "convert", + "xml" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/spatie/array-to-xml/tree/3.2.3" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-02-07T10:39:02+00:00" }, { "name": "symfony/console", - "version": "v5.4.9", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", + "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3235,12 +2916,12 @@ "homepage": "https://symfony.com/", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.9" + "source": "https://github.com/symfony/console/tree/v6.4.6" }, "funding": [ { @@ -3256,29 +2937,29 @@ "type": "tidelift" } ], - "time": "2022-05-18T06:17:34+00:00" + "time": "2024-03-29T19:07:53+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3307,7 +2988,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -3323,48 +3004,43 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.9", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3392,7 +3068,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" }, "funding": [ { @@ -3408,33 +3084,30 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:45:39+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "4e64b49bf370ade88e567de29465762e316e4224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", + "reference": "4e64b49bf370ade88e567de29465762e316e4224", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3471,7 +3144,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" }, "funding": [ { @@ -3487,27 +3160,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.9", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" + "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", - "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9919b5509ada52cc7f66f9a35c86a4a29955c9d3", + "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -3535,7 +3207,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.9" + "source": "https://github.com/symfony/filesystem/tree/v6.4.6" }, "funding": [ { @@ -3551,26 +3223,27 @@ "type": "tidelift" } ], - "time": "2022-05-20T13:55:35+00:00" + "time": "2024-03-21T19:36:20+00:00" }, { "name": "symfony/finder", - "version": "v5.4.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -3598,7 +3271,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.8" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -3614,27 +3287,25 @@ "type": "tidelift" } ], - "time": "2022-04-15T08:07:45+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + "reference": "22301f0e7fdeaacc14318928612dee79be99860e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22301f0e7fdeaacc14318928612dee79be99860e", + "reference": "22301f0e7fdeaacc14318928612dee79be99860e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -3667,7 +3338,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + "source": "https://github.com/symfony/options-resolver/tree/v6.4.0" }, "funding": [ { @@ -3683,20 +3354,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-08-08T10:16:24+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -3710,9 +3381,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3749,7 +3417,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -3765,20 +3433,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -3789,9 +3457,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3830,7 +3495,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -3846,20 +3511,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -3870,9 +3535,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3914,7 +3576,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -3930,20 +3592,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -3957,9 +3619,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3997,86 +3656,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -4092,20 +3672,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -4113,9 +3693,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4159,7 +3736,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -4175,20 +3752,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", "shasum": "" }, "require": { @@ -4196,9 +3773,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4238,7 +3812,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" }, "funding": [ { @@ -4254,25 +3828,24 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v5.4.8", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" + "reference": "710e27879e9be3395de2b98da3f52a946039f297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -4300,7 +3873,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.8" + "source": "https://github.com/symfony/process/tree/v6.4.4" }, "funding": [ { @@ -4316,37 +3889,33 @@ "type": "tidelift" } ], - "time": "2022-04-08T05:07:18+00:00" + "time": "2024-02-20T12:31:00+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4356,7 +3925,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4383,7 +3955,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" }, "funding": [ { @@ -4399,25 +3971,25 @@ "type": "tidelift" } ], - "time": "2022-03-13T20:07:29+00:00" + "time": "2023-12-19T21:51:00+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.5", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/416596166641f1f728b0a64f5b9dd07cceb410c1", + "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.1", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -4445,7 +4017,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.3" }, "funding": [ { @@ -4461,38 +4033,38 @@ "type": "tidelift" } ], - "time": "2022-02-18T16:06:09+00:00" + "time": "2024-01-23T14:35:58+00:00" }, { "name": "symfony/string", - "version": "v5.4.9", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4531,7 +4103,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.9" + "source": "https://github.com/symfony/string/tree/v6.4.4" }, "funding": [ { @@ -4547,20 +4119,20 @@ "type": "tidelift" } ], - "time": "2022-04-19T10:40:37+00:00" + "time": "2024-02-01T13:16:41+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -4589,7 +4161,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -4597,28 +4169,28 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vimeo/psalm", - "version": "4.23.0", + "version": "5.23.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88" + "reference": "8471a896ccea3526b26d082f4461eeea467f10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88", - "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4", + "reference": "8471a896ccea3526b26d082f4461eeea467f10a4", "shasum": "" }, "require": { "amphp/amp": "^2.4.2", "amphp/byte-stream": "^1.5", - "composer/package-versions-deprecated": "^1.8.0", + "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^2.0 || ^3.0", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -4627,34 +4199,38 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.5", + "felixfbecker/advanced-json-rpc": "^3.1", + "felixfbecker/language-server-protocol": "^1.5.2", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.13", - "openlss/lib-array2xml": "^1.0", - "php": "^7.1|^8", - "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", - "symfony/polyfill-php80": "^1.25", - "webmozart/path-util": "^2.3" + "nikic/php-parser": "^4.16", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "spatie/array-to-xml": "^2.17.0 || ^3.0", + "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "nikic/php-parser": "4.17.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0||^6.0", + "amphp/phpunit-util": "^2.0", + "bamarni/composer-bin-plugin": "^1.4", + "brianium/paratest": "^6.9", "ext-curl": "*", + "mockery/mockery": "^1.5", + "nunomaduro/mock-final-classes": "^1.1", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0||dev-master", - "phpspec/prophecy": ">=1.9.0", - "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.16", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3 || ^5.0 || ^6.0", - "weirdan/prophecy-shim": "^1.0 || ^2.0" + "phpstan/phpdoc-parser": "^1.6", + "phpunit/phpunit": "^9.6", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -4667,20 +4243,17 @@ "psalm-refactor", "psalter" ], - "type": "library", + "type": "project", "extra": { "branch-alias": { - "dev-master": "4.x-dev", + "dev-master": "5.x-dev", + "dev-4.x": "4.x-dev", "dev-3.x": "3.x-dev", "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, "autoload": { - "files": [ - "src/functions.php", - "src/spl_object_id.php" - ], "psr-4": { "Psalm\\": "src/Psalm/" } @@ -4698,13 +4271,15 @@ "keywords": [ "code", "inspection", - "php" + "php", + "static analysis" ], "support": { + "docs": "https://psalm.dev/docs", "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.23.0" + "source": "https://github.com/vimeo/psalm" }, - "time": "2022-04-28T17:35:49+00:00" + "time": "2024-03-11T20:33:46+00:00" }, { "name": "webmozart/assert", @@ -4763,57 +4338,6 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - }, - "abandoned": "symfony/filesystem", - "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], @@ -4823,5 +4347,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer deleted file mode 100755 index 859a4c38b0f1091a195136d34f53c166253e449d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1852521 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'^g7%hYO# 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�m$MJO@XIb1Lfoum@DyKQ(wrhvu_Oz8vM` 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�bl(HqYO$0W-H}klZ|YdrFZo)@*N_dT4(FC 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 EKPCXzng9R* From 75da4465ed30a2a42ba8ca6f469fa19b165d1090 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Apr 2024 10:28:27 +0000 Subject: [PATCH 61/87] Updated CHANGELOG.md --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 908dddd..df52d6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2024-01-08 +## [Unreleased] - 2024-04-11 ### Added - [#133](https://github.com/coduo/php-humanizer/pull/133) - **Slovak translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) @@ -8,8 +8,13 @@ - [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) ### Fixed +- [90efee](https://github.com/coduo/php-humanizer/commit/90efee54b12d083d7d4ec62d52cdb7f2a5c9641d) - **development tools dependencies configuration** - [@norberttech](https://github.com/norberttech) +- [fe058c](https://github.com/coduo/php-humanizer/commit/fe058ca2ecb9aa90f8c688a25a9327b7c2050156) - **static analyze github workflow php version** - [@norberttech](https://github.com/norberttech) - [#132](https://github.com/coduo/php-humanizer/pull/132) - **Fix the CI status badge URL.** - [@peter279k](https://github.com/peter279k) +### Updated +- [c5023f](https://github.com/coduo/php-humanizer/commit/c5023fa601eca56a39f23e9a8274d80f4a4a6c6a) - **project to latest versio of php and dependencies** - [@norberttech](https://github.com/norberttech) + ## [4.0.3] - 2022-06-07 ### Added From b18a11af5c694d8041fe585d687a6d5c4b8f78db Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:30:21 +0200 Subject: [PATCH 62/87] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 70a8769..55c25a5 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,11 @@ # PHP Humanizer -![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) +[![Tests](https://github.com/coduo/php-humanizer/actions/workflows/tests.yml/badge.svg?branch=5.x)](https://github.com/coduo/php-humanizer/actions/workflows/tests.yml) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) -### Tests -* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) - 5.x - [Readme for 5.x version](https://github.com/coduo/php-humanizer/tree/5.x/README.md) From 9d5058698294312d79f6def8613e8011466c4f84 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Apr 2024 10:30:46 +0000 Subject: [PATCH 63/87] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index df52d6f..15ad3f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [#132](https://github.com/coduo/php-humanizer/pull/132) - **Fix the CI status badge URL.** - [@peter279k](https://github.com/peter279k) ### Updated +- [b18a11](https://github.com/coduo/php-humanizer/commit/b18a11af5c694d8041fe585d687a6d5c4b8f78db) - **README.md** - [@norberttech](https://github.com/norberttech) - [c5023f](https://github.com/coduo/php-humanizer/commit/c5023fa601eca56a39f23e9a8274d80f4a4a6c6a) - **project to latest versio of php and dependencies** - [@norberttech](https://github.com/norberttech) ## [4.0.3] - 2022-06-07 From e7b2492852a8b647eaa570495dbc2ec5dce31f40 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Apr 2024 10:31:58 +0000 Subject: [PATCH 64/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15ad3f8..59b4b95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2024-04-11 +## [5.0.0] - 2024-04-11 ### Added - [#133](https://github.com/coduo/php-humanizer/pull/133) - **Slovak translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) From fb621fda3e73428af8bba55f697c51daf002580b Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 19 Jan 2025 22:13:07 -0600 Subject: [PATCH 65/87] Updated project to PHP 8.4 --- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 2 +- baseline.xml | 26 - composer.json | 9 +- composer.lock | 599 +++++ psalm.xml | 20 - .../PHPHumanizer/Aeon/Calendar/Formatter.php | 4 + .../Aeon/Calendar/UnitCompound.php | 4 + tools/composer.json | 1 - tools/composer.lock | 2228 ++++++++--------- 10 files changed, 1632 insertions(+), 1263 deletions(-) delete mode 100644 baseline.xml create mode 100644 composer.lock delete mode 100644 psalm.xml diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 9f40c7a..c7f27f0 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -19,7 +19,7 @@ jobs: dependencies: - "locked" php-version: - - "8.1" + - "8.2" operating-system: - "ubuntu-latest" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7a80269..02651fc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,9 +21,9 @@ jobs: - "lowest" - "highest" php-version: - - "8.1" - "8.2" - "8.3" + - "8.4" operating-system: - "ubuntu-latest" diff --git a/baseline.xml b/baseline.xml deleted file mode 100644 index 96ef6bc..0000000 --- a/baseline.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - $diff->{$unit->getDateIntervalSymbol()} - - - - - new $strategy() - - - - - $resourceName - - - $file - $resourceName - - - getBasename - getPathname - - - diff --git a/composer.json b/composer.json index 138d0f5..288b011 100644 --- a/composer.json +++ b/composer.json @@ -15,13 +15,13 @@ } ], "require": { - "php": "~8.1 || ~8.2 || ~8.3", + "php": "~8.2 || ~8.3 || ~8.4", "symfony/translation": "~5.4||~6.4||~7", - "symfony/yaml": "~5.4||~6.4||~7", - "aeon-php/calendar": "^1.0" + "symfony/yaml": "~5.4||~6.4||~7" }, "require-dev": { - "thunderer/shortcode": "^0.7" + "thunderer/shortcode": "^0.7", + "aeon-php/calendar": "^1.0" }, "config": { "bin-dir": "bin" @@ -48,7 +48,6 @@ "tools/vendor/bin/phpunit" ], "static:analyze": [ - "tools/vendor/bin/psalm --output-format=compact", "tools/vendor/bin/phpstan analyze -c phpstan.neon", "tools/vendor/bin/php-cs-fixer fix --dry-run" ], diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..1cbd9dc --- /dev/null +++ b/composer.lock @@ -0,0 +1,599 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "3641b1dd174b159ca3de92420f61b789", + "packages": [ + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.2.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/e2674a30132b7cc4d74540d6c2573aa363f05923", + "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.2.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-07T08:18:10+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-23T06:56:12+00:00" + } + ], + "packages-dev": [ + { + "name": "aeon-php/calendar", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/aeon-php/calendar.git", + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "shasum": "" + }, + "require": { + "php": "~8.1.10 || ~8.2" + }, + "require-dev": { + "ext-bcmath": "*", + "ext-pcov": "*" + }, + "suggest": { + "ext-bcmath": "Compare time units with high precision" + }, + "type": "library", + "autoload": { + "psr-4": { + "Aeon\\": [ + "src/Aeon" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP type safe, immutable calendar library", + "keywords": [ + "calendar", + "date", + "datetime", + "immutable", + "time" + ], + "support": { + "issues": "https://github.com/aeon-php/calendar/issues", + "source": "https://github.com/aeon-php/calendar/tree/1.0.9" + }, + "time": "2023-08-29T09:47:37+00:00" + }, + { + "name": "thunderer/shortcode", + "version": "v0.7.6", + "source": { + "type": "git", + "url": "https://github.com/thunderer/Shortcode.git", + "reference": "9f81424b4909007483d93c5defc0917d8a58debd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/9f81424b4909007483d93c5defc0917d8a58debd", + "reference": "9f81424b4909007483d93c5defc0917d8a58debd", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "suggest": { + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer", + "symfony/yaml": "if you want to use YAML serializer" + }, + "type": "library", + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": [ + "bbcode", + "engine", + "library", + "parser", + "shortcode" + ], + "support": { + "issues": "https://github.com/thunderer/Shortcode/issues", + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.6" + }, + "time": "2024-12-15T21:57:40+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~8.2 || ~8.3 || ~8.4" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/psalm.xml b/psalm.xml deleted file mode 100644 index 96ca92a..0000000 --- a/psalm.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php index 65ec949..21cf462 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -26,6 +26,10 @@ public function __construct(TranslatorInterface $translator) public function timeUnit(Unit $unit, string $locale = 'en') : string { + if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); + } + $parts = []; foreach ((new UnitCompound($unit))->components() as $component) { diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php index 117d5e3..c754296 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -37,6 +37,10 @@ public function __construct(Unit $timeUnit) */ public function components() : array { + if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); + } + $unit = $this->unit; $compoundResults = []; diff --git a/tools/composer.json b/tools/composer.json index cb3fa9f..31cd76d 100644 --- a/tools/composer.json +++ b/tools/composer.json @@ -4,7 +4,6 @@ "autoload": {}, "require-dev": { "phpunit/phpunit": "^10", - "vimeo/psalm": "^5", "phpstan/phpstan": "^1", "friendsofphp/php-cs-fixer": "^3.53" } diff --git a/tools/composer.lock b/tools/composer.lock index e9af767..7fdbcf4 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -4,48 +4,35 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "007f999564b058c9d31a3924f5bdb9bc", + "content-hash": "52130002fb8d6b03652b0158924085b4", "packages": [], "packages-dev": [ { - "name": "amphp/amp", - "version": "v2.6.4", + "name": "clue/ndjson-react", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.3", + "react/stream": "^1.2" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "react/promise": "^2", - "vimeo/psalm": "^3.12" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], "psr-4": { - "Amp\\": "lib" + "Clue\\React\\NDJson\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -54,149 +41,68 @@ ], "authors": [ { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Christian Lück", + "email": "christian@clue.engineering" } ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" ], "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.4" + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" }, "funding": [ { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T18:52:26+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" + "url": "https://clue.engineering/support", + "type": "custom" }, { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", + "url": "https://github.com/clue", "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2022-12-23T10:58:28+00:00" }, { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { "dev-main": "3.x-dev" } @@ -226,7 +132,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -242,28 +148,28 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -307,7 +213,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -323,20 +229,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.4", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -373,7 +279,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -389,205 +295,67 @@ "type": "tidelift" } ], - "time": "2024-03-26T18:29:49+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "doctrine/deprecations", - "version": "1.1.3", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Evenement\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" - }, - "time": "2024-01-30T19:34:25+00:00" - }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], "authors": [ { - "name": "Felix Becker", - "email": "felix.b@outlook.com" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "PHP classes for the Language Server Protocol", + "description": "Événement is a very simple event dispatching library for PHP", "keywords": [ - "language", - "microsoft", - "php", - "server" + "event-dispatcher", + "event-emitter" ], "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "time": "2022-03-02T22:36:06+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { @@ -627,7 +395,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" }, "funding": [ { @@ -635,54 +403,61 @@ "type": "github" } ], - "time": "2024-02-07T09:43:46+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.53.0", + "version": "v3.68.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008" + "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/69a19093a9ded8d1baac62ed6c009b8bc148d008", - "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff", + "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff", "shasum": "" }, "require": { + "clue/ndjson-react": "^1.0", "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", - "symfony/finder": "^5.4 || ^6.0 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-mbstring": "^1.28", - "symfony/polyfill-php80": "^1.28", - "symfony/polyfill-php81": "^1.28", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", + "sebastian/diff": "^4.0 || ^5.1 || ^6.0", + "symfony/console": "^5.4 || ^6.4 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", + "symfony/finder": "^5.4 || ^6.4 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", + "symfony/polyfill-mbstring": "^1.31", + "symfony/polyfill-php80": "^1.31", + "symfony/polyfill-php81": "^1.31", + "symfony/process": "^5.4 || ^6.4 || ^7.2", + "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", - "infection/infection": "^0.27.11", - "justinrainbow/json-schema": "^5.2", + "facile-it/paraunit": "^1.3.1 || ^2.4", + "infection/infection": "^0.29.8", + "justinrainbow/json-schema": "^5.3 || ^6.0", "keradus/cli-executor": "^2.1", - "mikey179/vfsstream": "^1.6.11", + "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", - "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", - "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.22 || ^10.5.40 || ^11.5.2", + "symfony/var-dumper": "^5.4.48 || ^6.4.15 || ^7.2.0", + "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.2.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -695,7 +470,10 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -720,7 +498,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.53.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1" }, "funding": [ { @@ -728,20 +506,20 @@ "type": "github" } ], - "time": "2024-04-08T15:03:00+00:00" + "time": "2025-01-17T09:20:36+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -749,11 +527,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -779,7 +558,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -787,80 +566,31 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" - }, - "time": "2024-01-31T06:18:54+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nikic/php-parser", - "version": "v4.19.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -868,7 +598,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -892,9 +622,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-03-17T08:10:35+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -1015,351 +745,132 @@ "time": "2022-02-21T01:04:05+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpstan/phpstan", + "version": "1.12.15", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1", + "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.2|^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org/", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", + "dev", "static analysis" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, - "time": "2020-06-27T09:03:43+00:00" + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-01-05T16:40:22+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "phpunit/php-code-coverage", + "version": "10.1.16", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" - }, - "time": "2024-02-23T11:10:43+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.28.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" - }, - "time": "2024-04-03T18:51:33+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.10.66", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", - "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2024-03-28T16:17:31+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "10.1.14", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.1" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -1367,7 +878,7 @@ "type": "github" } ], - "time": "2024-03-12T15:33:41+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1614,16 +1125,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.17", + "version": "10.5.41", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" + "reference": "e76586fa3d49714f230221734b44892e384109d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", - "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e76586fa3d49714f230221734b44892e384109d7", + "reference": "e76586fa3d49714f230221734b44892e384109d7", "shasum": "" }, "require": { @@ -1633,26 +1144,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.3", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -1695,7 +1206,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.17" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.41" }, "funding": [ { @@ -1711,34 +1222,484 @@ "type": "tidelift" } ], - "time": "2024-04-05T04:39:01+00:00" + "time": "2025-01-13T09:33:05+00:00" }, { "name": "psr/container", "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.6", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.6" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-01-01T16:37:48+00:00" + }, + { + "name": "react/dns", + "version": "v1.13.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.13.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-13T14:18:03+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/promise", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=7.1.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" }, + "type": "library", "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Psr\\Container\\": "src/" + "React\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1747,51 +1708,75 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "promise", + "promises" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" }, - "time": "2021-11-05T16:47:00+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "react/socket", + "version": "v1.16.0", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/reactphp/socket.git", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { - "php": ">=7.2.0" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "React\\Socket\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1800,48 +1785,73 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Standard interfaces for event handling.", + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", "keywords": [ - "events", - "psr", - "psr-14" + "Connection", + "Socket", + "async", + "reactphp", + "stream" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, - "time": "2019-01-08T18:20:26+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-07-26T10:38:09+00:00" }, { - "name": "psr/log", - "version": "3.0.0", + "name": "react/stream", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { - "php": ">=8.0.0" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "React\\Stream\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1850,21 +1860,48 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", "keywords": [ - "log", - "psr", - "psr-3" + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, - "time": "2021-07-14T16:46:02+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" }, { "name": "sebastian/cli-parser", @@ -2036,16 +2073,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.1", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", "shasum": "" }, "require": { @@ -2056,7 +2093,7 @@ "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -2101,7 +2138,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" }, "funding": [ { @@ -2109,7 +2146,7 @@ "type": "github" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2024-10-18T14:56:07+00:00" }, { "name": "sebastian/complexity", @@ -2782,112 +2819,48 @@ ], "time": "2023-02-07T11:34:05+00:00" }, - { - "name": "spatie/array-to-xml", - "version": "3.2.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab", - "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": "^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "spatie/pest-plugin-snapshots": "^1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\ArrayToXml\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev/", - "role": "Developer" - } - ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", - "keywords": [ - "array", - "convert", - "xml" - ], - "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.2.3" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-02-07T10:39:02+00:00" - }, { "name": "symfony/console", - "version": "v6.4.6", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2921,7 +2894,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.6" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -2937,20 +2910,20 @@ "type": "tidelift" } ], - "time": "2024-03-29T19:07:53+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -2958,12 +2931,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -2988,7 +2961,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -3004,28 +2977,28 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.3", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", - "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3034,13 +3007,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3068,7 +3041,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -3084,20 +3057,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "4e64b49bf370ade88e567de29465762e316e4224" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", - "reference": "4e64b49bf370ade88e567de29465762e316e4224", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -3106,12 +3079,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -3144,7 +3117,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -3160,27 +3133,30 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/9919b5509ada52cc7f66f9a35c86a4a29955c9d3", - "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3207,7 +3183,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.6" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -3223,27 +3199,27 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:36:20+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v6.4.0", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3271,7 +3247,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.0" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -3287,24 +3263,24 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:30:12+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.0", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "22301f0e7fdeaacc14318928612dee79be99860e" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22301f0e7fdeaacc14318928612dee79be99860e", - "reference": "22301f0e7fdeaacc14318928612dee79be99860e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -3338,7 +3314,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -3354,24 +3330,24 @@ "type": "tidelift" } ], - "time": "2023-08-08T10:16:24+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -3382,8 +3358,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3417,7 +3393,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -3433,24 +3409,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3458,8 +3434,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3495,7 +3471,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -3511,24 +3487,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3536,8 +3512,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3576,7 +3552,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -3592,24 +3568,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3620,8 +3596,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3656,7 +3632,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -3672,30 +3648,30 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3736,7 +3712,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -3752,30 +3728,30 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3812,7 +3788,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -3828,24 +3804,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v6.4.4", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "710e27879e9be3395de2b98da3f52a946039f297" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", - "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -3873,7 +3849,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.4" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -3889,37 +3865,38 @@ "type": "tidelift" } ], - "time": "2024-02-20T12:31:00+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -3955,7 +3932,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -3971,24 +3948,24 @@ "type": "tidelift" } ], - "time": "2023-12-19T21:51:00+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.4.3", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1" + "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/416596166641f1f728b0a64f5b9dd07cceb410c1", - "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", + "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -4017,7 +3994,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.3" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.2" }, "funding": [ { @@ -4033,24 +4010,24 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:35:58+00:00" + "time": "2024-12-18T14:28:33+00:00" }, { "name": "symfony/string", - "version": "v6.4.4", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", - "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4060,11 +4037,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4103,7 +4081,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.4" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -4119,7 +4097,7 @@ "type": "tidelift" } ], - "time": "2024-02-01T13:16:41+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "theseer/tokenizer", @@ -4170,182 +4148,14 @@ } ], "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "vimeo/psalm", - "version": "5.23.1", - "source": { - "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "8471a896ccea3526b26d082f4461eeea467f10a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4", - "reference": "8471a896ccea3526b26d082f4461eeea467f10a4", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer-runtime-api": "^2", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", - "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.16", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", - "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" - }, - "conflict": { - "nikic/php-parser": "4.17.0" - }, - "provide": { - "psalm/psalm": "self.version" - }, - "require-dev": { - "amphp/phpunit-util": "^2.0", - "bamarni/composer-bin-plugin": "^1.4", - "brianium/paratest": "^6.9", - "ext-curl": "*", - "mockery/mockery": "^1.5", - "nunomaduro/mock-final-classes": "^1.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpdoc-parser": "^1.6", - "phpunit/phpunit": "^9.6", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "ext-curl": "In order to send data to shepherd", - "ext-igbinary": "^2.0.5 is required, used to serialize caching data" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalter" - ], - "type": "project", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev", - "dev-4.x": "4.x-dev", - "dev-3.x": "3.x-dev", - "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown" - } - ], - "description": "A static analysis tool for finding errors in PHP applications", - "keywords": [ - "code", - "inspection", - "php", - "static analysis" - ], - "support": { - "docs": "https://psalm.dev/docs", - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm" - }, - "time": "2024-03-11T20:33:46+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, - "platform": [], - "platform-dev": [], + "platform": {}, + "platform-dev": {}, "plugin-api-version": "2.6.0" } From 76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 19 Jan 2025 22:17:24 -0600 Subject: [PATCH 66/87] Fixed failing tests --- src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php | 2 +- src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php index 21cf462..69e23a2 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -26,7 +26,7 @@ public function __construct(TranslatorInterface $translator) public function timeUnit(Unit $unit, string $locale = 'en') : string { - if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + if (!\interface_exists('\Aeon\Calendar\Gregorian\Calendar')) { throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); } diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php index c754296..4d30794 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -37,7 +37,7 @@ public function __construct(Unit $timeUnit) */ public function components() : array { - if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + if (!\interface_exists('\Aeon\Calendar\Gregorian\Calendar')) { throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); } From a7ef126512f21641997a43d52a07d2af19a0e643 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Mon, 20 Jan 2025 04:17:54 +0000 Subject: [PATCH 67/87] Updated CHANGELOG.md --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59b4b95..acc422e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [Unreleased] - 2025-01-20 + +### Fixed +- [76e7b6](https://github.com/coduo/php-humanizer/commit/76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9) - **failing tests** - [@norberttech](https://github.com/norberttech) + +### Updated +- [fb621f](https://github.com/coduo/php-humanizer/commit/fb621fda3e73428af8bba55f697c51daf002580b) - **project to PHP 8.4** - [@norberttech](https://github.com/norberttech) + ## [5.0.0] - 2024-04-11 ### Added From f70d3a9e344f5be2423415bfba3bc1a0cfe3c94c Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:32:34 -0600 Subject: [PATCH 68/87] Removed symfony/yaml dependency (#136) --- composer.json | 3 +- composer.lock | 153 +----------------- .../Resources/translations/difference.af.php | 47 ++++++ .../Resources/translations/difference.af.yml | 35 ---- .../Resources/translations/difference.az.php | 47 ++++++ .../Resources/translations/difference.az.yml | 35 ---- .../Resources/translations/difference.bg.php | 47 ++++++ .../Resources/translations/difference.bg.yml | 35 ---- .../Resources/translations/difference.cs.php | 47 ++++++ .../Resources/translations/difference.cs.yml | 35 ---- .../Resources/translations/difference.da.php | 47 ++++++ .../Resources/translations/difference.da.yml | 35 ---- .../Resources/translations/difference.de.php | 47 ++++++ .../Resources/translations/difference.de.yml | 35 ---- .../Resources/translations/difference.en.php | 47 ++++++ .../Resources/translations/difference.en.yml | 35 ---- .../Resources/translations/difference.es.php | 47 ++++++ .../Resources/translations/difference.es.yml | 35 ---- .../Resources/translations/difference.fr.php | 47 ++++++ .../Resources/translations/difference.fr.yml | 35 ---- .../Resources/translations/difference.id.php | 47 ++++++ .../Resources/translations/difference.id.yml | 35 ---- .../Resources/translations/difference.it.php | 47 ++++++ .../Resources/translations/difference.it.yml | 35 ---- .../Resources/translations/difference.ja.php | 47 ++++++ .../Resources/translations/difference.ja.yml | 35 ---- .../Resources/translations/difference.nl.php | 47 ++++++ .../Resources/translations/difference.nl.yml | 35 ---- .../Resources/translations/difference.no.php | 47 ++++++ .../Resources/translations/difference.no.yml | 35 ---- .../Resources/translations/difference.pl.php | 47 ++++++ .../Resources/translations/difference.pl.yml | 35 ---- .../Resources/translations/difference.pt.php | 47 ++++++ .../Resources/translations/difference.pt.yml | 35 ---- .../translations/difference.pt_BR.php | 47 ++++++ .../translations/difference.pt_BR.yml | 35 ---- .../Resources/translations/difference.ro.php | 47 ++++++ .../Resources/translations/difference.ro.yml | 35 ---- .../Resources/translations/difference.ru.php | 47 ++++++ .../Resources/translations/difference.ru.yml | 35 ---- .../Resources/translations/difference.sk.php | 47 ++++++ .../Resources/translations/difference.sk.yml | 35 ---- .../Resources/translations/difference.th.php | 47 ++++++ .../Resources/translations/difference.th.yml | 35 ---- .../Resources/translations/difference.tr.php | 47 ++++++ .../Resources/translations/difference.tr.yml | 35 ---- .../Resources/translations/difference.uk.php | 47 ++++++ .../Resources/translations/difference.uk.yml | 35 ---- .../translations/difference.zh_CN.php | 47 ++++++ .../translations/difference.zh_CN.yml | 35 ---- .../translations/difference.zh_TW.php | 47 ++++++ .../translations/difference.zh_TW.yml | 35 ---- .../Resources/translations/oxford.cs.php | 7 + .../Resources/translations/oxford.cs.yml | 3 - .../Resources/translations/oxford.da.php | 7 + .../Resources/translations/oxford.da.yml | 3 - .../Resources/translations/oxford.en.php | 7 + .../Resources/translations/oxford.en.yml | 3 - .../Resources/translations/oxford.es.php | 7 + .../Resources/translations/oxford.es.yml | 3 - .../Resources/translations/oxford.fr.php | 7 + .../Resources/translations/oxford.fr.yml | 3 - .../Resources/translations/oxford.id.php | 7 + .../Resources/translations/oxford.id.yml | 3 - .../Resources/translations/oxford.it.php | 7 + .../Resources/translations/oxford.it.yml | 3 - .../Resources/translations/oxford.ja.php | 7 + .../Resources/translations/oxford.ja.yml | 3 - .../Resources/translations/oxford.nl.php | 7 + .../Resources/translations/oxford.nl.yml | 3 - .../Resources/translations/oxford.pl.php | 7 + .../Resources/translations/oxford.pl.yml | 3 - .../Resources/translations/oxford.ro.php | 7 + .../Resources/translations/oxford.ro.yml | 3 - .../Resources/translations/oxford.ru.php | 7 + .../Resources/translations/oxford.ru.yml | 3 - .../Resources/translations/oxford.sk.php | 7 + .../Resources/translations/oxford.sk.yml | 3 - .../Resources/translations/oxford.th.php | 7 + .../Resources/translations/oxford.th.yml | 3 - .../Resources/translations/oxford.uk.php | 7 + .../Resources/translations/oxford.uk.yml | 3 - .../Resources/translations/oxford.zh_CN.php | 7 + .../Resources/translations/oxford.zh_CN.yml | 3 - .../Resources/translations/oxford.zh_TW.php | 7 + .../Resources/translations/oxford.zh_TW.yml | 3 - src/Coduo/PHPHumanizer/Translator/Builder.php | 10 +- tools/composer.lock | 10 +- 88 files changed, 1306 insertions(+), 1090 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.af.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.az.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.da.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.de.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.en.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.es.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.id.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.it.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.no.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.th.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml diff --git a/composer.json b/composer.json index 288b011..09a84f6 100644 --- a/composer.json +++ b/composer.json @@ -16,8 +16,7 @@ ], "require": { "php": "~8.2 || ~8.3 || ~8.4", - "symfony/translation": "~5.4||~6.4||~7", - "symfony/yaml": "~5.4||~6.4||~7" + "symfony/translation": "~5.4||~6.4||~7" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock index 1cbd9dc..85fbb82 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3641b1dd174b159ca3de92420f61b789", + "content-hash": "228b5a151bff2e843fe879dea870439c", "packages": [ { "name": "symfony/deprecation-contracts", @@ -73,85 +73,6 @@ ], "time": "2024-09-25T14:20:29+00:00" }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, { "name": "symfony/polyfill-mbstring", "version": "v1.31.0", @@ -404,78 +325,6 @@ } ], "time": "2024-09-25T14:20:29+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-10-23T06:56:12+00:00" } ], "packages-dev": [ diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.php new file mode 100644 index 0000000..bc387fa --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] nou nou', + 'future' => '[0,Inf] netnou', + ], + 'second' => [ + 'past' => '[0,1] %count% sekonde gelede|[2,Inf] %count% sekondes gelede', + 'future' => '[0,1] %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af', + ], + 'minute' => [ + 'past' => '{1} %count% minuut gelede|[2,Inf] %count% minute gelede', + 'future' => '{1} %count% minuut van nou af|[2,Inf] %count% minute van nou af', + ], + 'hour' => [ + 'past' => '{1} %count% uur gelede|[2,Inf] %count% ure gelede', + 'future' => '{1} %count% uur van nou af|[2,Inf] %count% ure van nou af', + ], + 'day' => [ + 'past' => '{1} %count% dag gelede|[2,Inf] %count% dae gelede', + 'future' => '{1} %count% dag van nou af|[2,Inf] %count% dae van nou af', + ], + 'week' => [ + 'past' => '{1} %count% week gelede|[2,Inf] %count% weke gelede', + 'future' => '{1} %count% week van nou af|[2,Inf] %count% weke van nou af', + ], + 'month' => [ + 'past' => '{1} %count% maand gelede|[2,Inf] %count% maande gelede', + 'future' => '{1} %count% maand van nou af|[2,Inf] %count% maande van nou af', + ], + 'year' => [ + 'past' => '{1} %count% jaar gelede|[2,Inf] %count% jaar gelede', + 'future' => '{1} %count% jaar van nou af|[2,Inf] %count% jaar van nou af', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekonde|[2,Inf] %count% sekondes', + 'minute' => '{1} %count% minuut|[2,Inf] %count% minute', + 'hour' => '{1} %count% uur|[2,Inf] %count% ure', + 'day' => '{1} %count% dag|[2,Inf] %count% dae', + 'week' => '{1} %count% week|[2,Inf] %count% weke', + 'month' => '{1} %count% maand|[2,Inf] %count% maande', + 'year' => '{1} %count% jaar|[2,Inf] %count% jaar', + 'past' => '%value% gelede', + 'future' => '%value% van nou af', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml deleted file mode 100644 index 6d4f8dd..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] nou nou" - future: "[0,Inf] netnou" -second: - past: "[0,1] %count% sekonde gelede|[2,Inf] %count% sekondes gelede" - future: "[0,1] %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af" -minute: - past: "{1} %count% minuut gelede|[2,Inf] %count% minute gelede" - future: "{1} %count% minuut van nou af|[2,Inf] %count% minute van nou af" -hour: - past: "{1} %count% uur gelede|[2,Inf] %count% ure gelede" - future: "{1} %count% uur van nou af|[2,Inf] %count% ure van nou af" -day: - past: "{1} %count% dag gelede|[2,Inf] %count% dae gelede" - future: "{1} %count% dag van nou af|[2,Inf] %count% dae van nou af" -week: - past: "{1} %count% week gelede|[2,Inf] %count% weke gelede" - future: "{1} %count% week van nou af|[2,Inf] %count% weke van nou af" -month: - past: "{1} %count% maand gelede|[2,Inf] %count% maande gelede" - future: "{1} %count% maand van nou af|[2,Inf] %count% maande van nou af" -year: - past: "{1} %count% jaar gelede|[2,Inf] %count% jaar gelede" - future: "{1} %count% jaar van nou af|[2,Inf] %count% jaar van nou af" - -compound: - second: "[0,1] %count% sekonde|[2,Inf] %count% sekondes" - minute: "{1} %count% minuut|[2,Inf] %count% minute" - hour: "{1} %count% uur|[2,Inf] %count% ure" - day: "{1} %count% dag|[2,Inf] %count% dae" - week: "{1} %count% week|[2,Inf] %count% weke" - month: "{1} %count% maand|[2,Inf] %count% maande" - year: "{1} %count% jaar|[2,Inf] %count% jaar" - past: "%value% gelede" - future: "%value% van nou af" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.php new file mode 100644 index 0000000..99d7920 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] indi', + 'future' => '[0,Inf] indi', + ], + 'second' => [ + 'past' => '[0,1] %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl', + 'future' => '[0,1] %count% saniyə sonra|[2,Inf] %count% saniyə sonra', + ], + 'minute' => [ + 'past' => '{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl', + 'future' => '{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra', + ], + 'hour' => [ + 'past' => '{1} %count% saat əvvəl|[2,Inf] %count% saat əvvəl', + 'future' => '{1} %count% saat sonra|[2,Inf] %count% saat sonra', + ], + 'day' => [ + 'past' => '{1} %count% gün əvvəl|[2,Inf] %count% gün əvvəl', + 'future' => '{1} %count% gün sonra|[2,Inf] %count% gün sonra', + ], + 'week' => [ + 'past' => '{1} %count% həftə əvvəl|[2,Inf] %count% həftə əvvəl', + 'future' => '{1} %count% həftə sonra|[2,Inf] %count% həftə sonra', + ], + 'month' => [ + 'past' => '{1} %count% ay əvvəl|[2,Inf] %count% ay əvvəl', + 'future' => '{1} %count% ay sonra|[2,Inf] %count% ay sonra', + ], + 'year' => [ + 'past' => '{1} %count% il əvvəl|[2,Inf] %count% il əvvəl', + 'future' => '{1} %count% il sonra|[2,Inf] %count% il sonra', + ], + 'compound' => [ + 'second' => '[0,1] %count% saniyə|[2,Inf] %count% saniyə', + 'minute' => '{1} %count% dəqiqə|[2,Inf] %count% dəqiqə', + 'hour' => '{1} %count% saat|[2,Inf] %count% saat', + 'day' => '{1} %count% gün|[2,Inf] %count% gün', + 'week' => '{1} %count% həftə|[2,Inf] %count% həftə', + 'month' => '{1} %count% ay|[2,Inf] %count% ay', + 'year' => '{1} %count% il|[2,Inf] %count% il', + 'past' => '%value% əvvəl', + 'future' => '%value% sonra', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml deleted file mode 100644 index 7eceb68..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] indi" - future: "[0,Inf] indi" -second: - past: "[0,1] %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" - future: "[0,1] %count% saniyə sonra|[2,Inf] %count% saniyə sonra" -minute: - past: "{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl" - future: "{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra" -hour: - past: "{1} %count% saat əvvəl|[2,Inf] %count% saat əvvəl" - future: "{1} %count% saat sonra|[2,Inf] %count% saat sonra" -day: - past: "{1} %count% gün əvvəl|[2,Inf] %count% gün əvvəl" - future: "{1} %count% gün sonra|[2,Inf] %count% gün sonra" -week: - past: "{1} %count% həftə əvvəl|[2,Inf] %count% həftə əvvəl" - future: "{1} %count% həftə sonra|[2,Inf] %count% həftə sonra" -month: - past: "{1} %count% ay əvvəl|[2,Inf] %count% ay əvvəl" - future: "{1} %count% ay sonra|[2,Inf] %count% ay sonra" -year: - past: "{1} %count% il əvvəl|[2,Inf] %count% il əvvəl" - future: "{1} %count% il sonra|[2,Inf] %count% il sonra" - -compound: - second: "[0,1] %count% saniyə|[2,Inf] %count% saniyə" - minute: "{1} %count% dəqiqə|[2,Inf] %count% dəqiqə" - hour: "{1} %count% saat|[2,Inf] %count% saat" - day: "{1} %count% gün|[2,Inf] %count% gün" - week: "{1} %count% həftə|[2,Inf] %count% həftə" - month: "{1} %count% ay|[2,Inf] %count% ay" - year: "{1} %count% il|[2,Inf] %count% il" - past: "%value% əvvəl" - future: "%value% sonra" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php new file mode 100644 index 0000000..5f8c92e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] в момента', + 'future' => '[0,Inf] в момента', + ], + 'second' => [ + 'past' => '[0,1] преди %count% секунда|[2,Inf] преди %count% секунди', + 'future' => '[0,1] след %count% секунда|[2,Inf] след %count% секунди', + ], + 'minute' => [ + 'past' => '{1} преди %count% минута|[2,Inf] преди %count% минути', + 'future' => '{1} след %count% минута|[2,Inf] след %count% минути', + ], + 'hour' => [ + 'past' => '{1} преди %count% час|[2,Inf] преди %count% часа', + 'future' => '{1} след %count% час|[2,Inf] след %count% часа', + ], + 'day' => [ + 'past' => '{1} преди %count% ден|[2,Inf] преди %count% дни', + 'future' => '{1} след %count% ден|[2,Inf] след %count% дни', + ], + 'week' => [ + 'past' => '{1} преди %count% седмица|[2,Inf] преди %count% седмици', + 'future' => '{1} след %count% седмица|[2,Inf] след %count% седмици', + ], + 'month' => [ + 'past' => '{1} преди %count% месец|[2,Inf] преди %count% месеца', + 'future' => '{1} след %count% месец|[2,Inf] след %count% месеца', + ], + 'year' => [ + 'past' => '{1} преди %count% година|[2,Inf] преди %count% години', + 'future' => '{1} след %count% година|[2,Inf] след %count% години', + ], + 'compound' => [ + 'second' => '[0,1] %count% секунда|[2,Inf] %count% секунди', + 'minute' => '{1} %count% минута|[2,Inf] %count% минути', + 'hour' => '{1} %count% час|[2,Inf] %count% часа', + 'day' => '{1} %count% ден|[2,Inf] %count% дни', + 'week' => '{1} %count% седмица|[2,Inf] %count% седмица', + 'month' => '{1} %count% месец|[2,Inf] %count% месеца', + 'year' => '{1} %count% година|[2,Inf] %count% години', + 'past' => '%value% преди това', + 'future' => '%value% след това', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml deleted file mode 100644 index 0ef236f..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] в момента" - future: "[0,Inf] в момента" -second: - past: "[0,1] преди %count% секунда|[2,Inf] преди %count% секунди" - future: "[0,1] след %count% секунда|[2,Inf] след %count% секунди" -minute: - past: "{1} преди %count% минута|[2,Inf] преди %count% минути" - future: "{1} след %count% минута|[2,Inf] след %count% минути" -hour: - past: "{1} преди %count% час|[2,Inf] преди %count% часа" - future: "{1} след %count% час|[2,Inf] след %count% часа" -day: - past: "{1} преди %count% ден|[2,Inf] преди %count% дни" - future: "{1} след %count% ден|[2,Inf] след %count% дни" -week: - past: "{1} преди %count% седмица|[2,Inf] преди %count% седмици" - future: "{1} след %count% седмица|[2,Inf] след %count% седмици" -month: - past: "{1} преди %count% месец|[2,Inf] преди %count% месеца" - future: "{1} след %count% месец|[2,Inf] след %count% месеца" -year: - past: "{1} преди %count% година|[2,Inf] преди %count% години" - future: "{1} след %count% година|[2,Inf] след %count% години" - -compound: - second: "[0,1] %count% секунда|[2,Inf] %count% секунди" - minute: "{1} %count% минута|[2,Inf] %count% минути" - hour: "{1} %count% час|[2,Inf] %count% часа" - day: "{1} %count% ден|[2,Inf] %count% дни" - week: "{1} %count% седмица|[2,Inf] %count% седмица" - month: "{1} %count% месец|[2,Inf] %count% месеца" - year: "{1} %count% година|[2,Inf] %count% години" - past: "%value% преди това" - future: "%value% след това" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php new file mode 100644 index 0000000..5417a4a --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] právě teď', + 'future' => '[0,Inf] právě teď', + ], + 'second' => [ + 'past' => '{1} před vteřinou|[2, 4] před %count% vteřinami|[5,Inf] před %count% vteřinami', + 'future' => '{1} za vteřinu|[2, 4] za %count% vteřiny|[5,Inf] za %count% vteřin', + ], + 'minute' => [ + 'past' => '{1} před minutou|[2, Inf] před %count% minutami', + 'future' => '{1} za minutu|[2, 4] za %count% minuty|[5,Inf] za %count% minut', + ], + 'hour' => [ + 'past' => '{1} před hodinou|[2, Inf] před %count% hodinami', + 'future' => '{1} za hodinu|[2, 4] za %count% hodiny|[5,Inf] za %count% hodin', + ], + 'day' => [ + 'past' => '{1} včera|[2, Inf] před %count% dny', + 'future' => '{1} zítra|[2, 4] za %count% dny|[5,Inf] za %count% dní', + ], + 'week' => [ + 'past' => '{1} minulý týden|[2, Inf] před %count% týdny', + 'future' => '{1} za týden|[2, 4] za %count% týdny|[5,Inf] za %count% týdnů', + ], + 'month' => [ + 'past' => '{1} minulý měsíc|[2, Inf] před %count% měsíci', + 'future' => '{1} za měsíc|[2, 4] za %count% měsíce|[5,Inf] za %count% měsíců', + ], + 'year' => [ + 'past' => '{1} minulý rok|[2, Inf] před %count% lety', + 'future' => '{1} za rok|[2, 4] za %count% roky|[5,Inf] za %count% let', + ], + 'compound' => [ + 'second' => '{1} %count% vteřina |[2,4] %count% vteřiny|[5,Inf] %count% vteřin', + 'minute' => '{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut', + 'hour' => '{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodin', + 'day' => '{1} %count% den |[2,4] %count% dny|[5,Inf] %count% dní', + 'week' => '{1} %count% týden|[2,4] %count% týdny|[5,Inf] %count% týdnů', + 'month' => '{1} %count% měsíc|[2,4] %count% měsíce|[5,Inf] %count% měsíců', + 'year' => '{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% let', + 'past' => 'před %value% ', + 'future' => '%value% odteď', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml deleted file mode 100644 index 8c95565..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] právě teď" - future: "[0,Inf] právě teď" -second: - past: "{1} před vteřinou|[2, 4] před %count% vteřinami|[5,Inf] před %count% vteřinami" - future: "{1} za vteřinu|[2, 4] za %count% vteřiny|[5,Inf] za %count% vteřin" -minute: - past: "{1} před minutou|[2, Inf] před %count% minutami" - future: "{1} za minutu|[2, 4] za %count% minuty|[5,Inf] za %count% minut" -hour: - past: "{1} před hodinou|[2, Inf] před %count% hodinami" - future: "{1} za hodinu|[2, 4] za %count% hodiny|[5,Inf] za %count% hodin" -day: - past: "{1} včera|[2, Inf] před %count% dny" - future: "{1} zítra|[2, 4] za %count% dny|[5,Inf] za %count% dní" -week: - past: "{1} minulý týden|[2, Inf] před %count% týdny" - future: "{1} za týden|[2, 4] za %count% týdny|[5,Inf] za %count% týdnů" -month: - past: "{1} minulý měsíc|[2, Inf] před %count% měsíci" - future: "{1} za měsíc|[2, 4] za %count% měsíce|[5,Inf] za %count% měsíců" -year: - past: "{1} minulý rok|[2, Inf] před %count% lety" - future: "{1} za rok|[2, 4] za %count% roky|[5,Inf] za %count% let" - -compound: - second: "{1} %count% vteřina |[2,4] %count% vteřiny|[5,Inf] %count% vteřin" - minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" - hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodin" - day: "{1} %count% den |[2,4] %count% dny|[5,Inf] %count% dní" - week: "{1} %count% týden|[2,4] %count% týdny|[5,Inf] %count% týdnů" - month: "{1} %count% měsíc|[2,4] %count% měsíce|[5,Inf] %count% měsíců" - year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% let" - past: "před %value% " - future: "%value% odteď" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.php new file mode 100644 index 0000000..e9feff4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] lige nu', + 'future' => '[0,Inf] lige nu', + ], + 'second' => [ + 'past' => '[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden', + 'future' => '[0,1] %count% sekund fra nu|[2,Inf] %count% sekunder fra nu', + ], + 'minute' => [ + 'past' => '{1} %count% minut siden|[2,Inf] %count% minutter siden', + 'future' => '{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu', + ], + 'hour' => [ + 'past' => '{1} %count% time siden|[2,Inf] %count% timer siden', + 'future' => '{1} %count% time fra nu|[2,Inf] %count% timer fra nu', + ], + 'day' => [ + 'past' => '{1} %count% dag siden|[2,Inf] %count% dage siden', + 'future' => '{1} %count% dag fra nu|[2,Inf] %count% dage fra nu', + ], + 'week' => [ + 'past' => '{1} %count% uge siden|[2,Inf] %count% uger siden', + 'future' => '{1} %count% uge fra nu|[2,Inf] %count% uger fra nu', + ], + 'month' => [ + 'past' => '{1} %count% måned siden|[2,Inf] %count% måneder siden', + 'future' => '{1} %count% måned fra nu|[2,Inf] %count% måneder fra nu', + ], + 'year' => [ + 'past' => '{1} %count% år siden|[2,Inf] %count% år siden', + 'future' => '{1} %count% år fra nu|[2,Inf] %count% år fra nu', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekund|[2,Inf] %count% sekunder', + 'minute' => '{1} %count% minut|[2,Inf] %count% minutter', + 'hour' => '{1} %count% time|[2,Inf] %count% timer', + 'day' => '{1} %count% dag|[2,Inf] %count% dage', + 'week' => '{1} %count% uge|[2,Inf] %count% uger', + 'month' => '{1} %count% måned|[2,Inf] %count% måneder', + 'year' => '{1} %count% år|[2,Inf] %count% år', + 'past' => '%value% siden', + 'future' => '%value% fra nu', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml deleted file mode 100644 index 8be37e2..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] lige nu" - future: "[0,Inf] lige nu" -second: - past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "[0,1] %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" -minute: - past: "{1} %count% minut siden|[2,Inf] %count% minutter siden" - future: "{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu" -hour: - past: "{1} %count% time siden|[2,Inf] %count% timer siden" - future: "{1} %count% time fra nu|[2,Inf] %count% timer fra nu" -day: - past: "{1} %count% dag siden|[2,Inf] %count% dage siden" - future: "{1} %count% dag fra nu|[2,Inf] %count% dage fra nu" -week: - past: "{1} %count% uge siden|[2,Inf] %count% uger siden" - future: "{1} %count% uge fra nu|[2,Inf] %count% uger fra nu" -month: - past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" - future: "{1} %count% måned fra nu|[2,Inf] %count% måneder fra nu" -year: - past: "{1} %count% år siden|[2,Inf] %count% år siden" - future: "{1} %count% år fra nu|[2,Inf] %count% år fra nu" - -compound: - second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" - minute: "{1} %count% minut|[2,Inf] %count% minutter" - hour: "{1} %count% time|[2,Inf] %count% timer" - day: "{1} %count% dag|[2,Inf] %count% dage" - week: "{1} %count% uge|[2,Inf] %count% uger" - month: "{1} %count% måned|[2,Inf] %count% måneder" - year: "{1} %count% år|[2,Inf] %count% år" - past: "%value% siden" - future: "%value% fra nu" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.php new file mode 100644 index 0000000..cdf7808 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] jetzt gerade', + 'future' => '[0,Inf] jetzt gerade', + ], + 'second' => [ + 'past' => '[0,1] vor %count% Sekunde|[2,Inf] vor %count% Sekunden', + 'future' => '[0,1] in %count% Sekunde|[2,Inf] in %count% Sekunden', + ], + 'minute' => [ + 'past' => '{1} vor %count% Minute|[2,Inf] vor %count% Minuten', + 'future' => '{1} in %count% Minute|[2,Inf] in %count% Minuten', + ], + 'hour' => [ + 'past' => '{1} vor %count% Stunde|[2,Inf] vor %count% Stunden', + 'future' => '{1} in %count% Stunde|[2,Inf] in %count% Stunden', + ], + 'day' => [ + 'past' => '{1} vor %count% Tag|[2,Inf] vor %count% Tagen', + 'future' => '{1} in %count% Tag|[2,Inf] in %count% Tagen', + ], + 'week' => [ + 'past' => '{1} vor %count% Woche|[2,Inf] vor %count% Wochen', + 'future' => '{1} in %count% Woche|[2,Inf] in %count% Wochen', + ], + 'month' => [ + 'past' => '{1} vor %count% Monat|[2,Inf] vor %count% Monaten', + 'future' => '{1} in %count% Monat|[2,Inf] in %count% Monaten', + ], + 'year' => [ + 'past' => '{1} vor %count% Jahr|[2,Inf] vor %count% Jahren', + 'future' => '{1} in %count% Jahr|[2,Inf] in %count% Jahren', + ], + 'compound' => [ + 'second' => '[0,1] %count% Sekunde|[2,Inf] %count% Sekunden', + 'minute' => '{1} %count% Minute|[2,Inf] %count% Minuten', + 'hour' => '{1} %count% Stunde|[2,Inf] %count% Stunden', + 'day' => '{1} %count% Tag|[2,Inf] %count% Tagen', + 'week' => '{1} %count% Woche|[2,Inf] %count% Wochen', + 'month' => '{1} %count% Monat|[2,Inf] %count% Monaten', + 'year' => '{1} %count% Jahr|[2,Inf] %count% Jahren', + 'past' => 'vor %value%', + 'future' => 'in %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml deleted file mode 100644 index b5a1e40..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] jetzt gerade" - future: "[0,Inf] jetzt gerade" -second: - past: "[0,1] vor %count% Sekunde|[2,Inf] vor %count% Sekunden" - future: "[0,1] in %count% Sekunde|[2,Inf] in %count% Sekunden" -minute: - past: "{1} vor %count% Minute|[2,Inf] vor %count% Minuten" - future: "{1} in %count% Minute|[2,Inf] in %count% Minuten" -hour: - past: "{1} vor %count% Stunde|[2,Inf] vor %count% Stunden" - future: "{1} in %count% Stunde|[2,Inf] in %count% Stunden" -day: - past: "{1} vor %count% Tag|[2,Inf] vor %count% Tagen" - future: "{1} in %count% Tag|[2,Inf] in %count% Tagen" -week: - past: "{1} vor %count% Woche|[2,Inf] vor %count% Wochen" - future: "{1} in %count% Woche|[2,Inf] in %count% Wochen" -month: - past: "{1} vor %count% Monat|[2,Inf] vor %count% Monaten" - future: "{1} in %count% Monat|[2,Inf] in %count% Monaten" -year: - past: "{1} vor %count% Jahr|[2,Inf] vor %count% Jahren" - future: "{1} in %count% Jahr|[2,Inf] in %count% Jahren" - -compound: - second: "[0,1] %count% Sekunde|[2,Inf] %count% Sekunden" - minute: "{1} %count% Minute|[2,Inf] %count% Minuten" - hour: "{1} %count% Stunde|[2,Inf] %count% Stunden" - day: "{1} %count% Tag|[2,Inf] %count% Tagen" - week: "{1} %count% Woche|[2,Inf] %count% Wochen" - month: "{1} %count% Monat|[2,Inf] %count% Monaten" - year: "{1} %count% Jahr|[2,Inf] %count% Jahren" - past: "vor %value%" - future: "in %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.php new file mode 100644 index 0000000..a677387 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] just now', + 'future' => '[0,Inf] just now', + ], + 'second' => [ + 'past' => '[0,1] %count% second ago|[2,Inf] %count% seconds ago', + 'future' => '[0,1] %count% second from now|[2,Inf] %count% seconds from now', + ], + 'minute' => [ + 'past' => '{1} %count% minute ago|[2,Inf] %count% minutes ago', + 'future' => '{1} %count% minute from now|[2,Inf] %count% minutes from now', + ], + 'hour' => [ + 'past' => '{1} %count% hour ago|[2,Inf] %count% hours ago', + 'future' => '{1} %count% hour from now|[2,Inf] %count% hours from now', + ], + 'day' => [ + 'past' => '{1} %count% day ago|[2,Inf] %count% days ago', + 'future' => '{1} %count% day from now|[2,Inf] %count% days from now', + ], + 'week' => [ + 'past' => '{1} %count% week ago|[2,Inf] %count% weeks ago', + 'future' => '{1} %count% week from now|[2,Inf] %count% weeks from now', + ], + 'month' => [ + 'past' => '{1} %count% month ago|[2,Inf] %count% months ago', + 'future' => '{1} %count% month from now|[2,Inf] %count% months from now', + ], + 'year' => [ + 'past' => '{1} %count% year ago|[2,Inf] %count% years ago', + 'future' => '{1} %count% year from now|[2,Inf] %count% years from now', + ], + 'compound' => [ + 'second' => '[0,1] %count% second|[2,Inf] %count% seconds', + 'minute' => '{1} %count% minute|[2,Inf] %count% minutes', + 'hour' => '{1} %count% hour|[2,Inf] %count% hours', + 'day' => '{1} %count% day|[2,Inf] %count% days', + 'week' => '{1} %count% week|[2,Inf] %count% weeks', + 'month' => '{1} %count% month|[2,Inf] %count% months', + 'year' => '{1} %count% year|[2,Inf] %count% years', + 'past' => '%value% ago', + 'future' => '%value% from now', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml deleted file mode 100644 index 2a6a906..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] just now" - future: "[0,Inf] just now" -second: - past: "[0,1] %count% second ago|[2,Inf] %count% seconds ago" - future: "[0,1] %count% second from now|[2,Inf] %count% seconds from now" -minute: - past: "{1} %count% minute ago|[2,Inf] %count% minutes ago" - future: "{1} %count% minute from now|[2,Inf] %count% minutes from now" -hour: - past: "{1} %count% hour ago|[2,Inf] %count% hours ago" - future: "{1} %count% hour from now|[2,Inf] %count% hours from now" -day: - past: "{1} %count% day ago|[2,Inf] %count% days ago" - future: "{1} %count% day from now|[2,Inf] %count% days from now" -week: - past: "{1} %count% week ago|[2,Inf] %count% weeks ago" - future: "{1} %count% week from now|[2,Inf] %count% weeks from now" -month: - past: "{1} %count% month ago|[2,Inf] %count% months ago" - future: "{1} %count% month from now|[2,Inf] %count% months from now" -year: - past: "{1} %count% year ago|[2,Inf] %count% years ago" - future: "{1} %count% year from now|[2,Inf] %count% years from now" - -compound: - second: "[0,1] %count% second|[2,Inf] %count% seconds" - minute: "{1} %count% minute|[2,Inf] %count% minutes" - hour: "{1} %count% hour|[2,Inf] %count% hours" - day: "{1} %count% day|[2,Inf] %count% days" - week: "{1} %count% week|[2,Inf] %count% weeks" - month: "{1} %count% month|[2,Inf] %count% months" - year: "{1} %count% year|[2,Inf] %count% years" - past: "%value% ago" - future: "%value% from now" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.php new file mode 100644 index 0000000..5d3cfdd --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] ahora mismo', + 'future' => '[0,Inf] ahora mismo', + ], + 'second' => [ + 'past' => '[0,1] hace %count% segundo |[2,Inf] hace %count% segundos', + 'future' => '[0,1] dentro de %count% segundo|[2,Inf] dentro de %count% segundos', + ], + 'minute' => [ + 'past' => '{1} hace %count% minuto|[2,Inf] hace %count% minutos', + 'future' => '{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos', + ], + 'hour' => [ + 'past' => '{1} hace %count% hora|[2,Inf] hace %count% horas', + 'future' => '{1} dentro de %count% hora|[2,Inf] dentro de %count% horas', + ], + 'day' => [ + 'past' => '{1} hace %count% día|[2,Inf] hace %count% días', + 'future' => '{1} dentro de %count% día|[2,Inf] dentro de %count% días', + ], + 'week' => [ + 'past' => '{1} hace %count% semana|[2,Inf] hace %count% semanas', + 'future' => '{1} dentro de %count% semana|[2,Inf] dentro de %count% semanas', + ], + 'month' => [ + 'past' => '{1} hace %count% mes|[2,Inf] hace %count% meses', + 'future' => '{1} dentro de %count% mes|[2,Inf] dentro de %count% meses', + ], + 'year' => [ + 'past' => '{1} hace %count% año|[2,Inf] hace %count% años', + 'future' => '{1} dentro de %count% año|[2,Inf] dentro de %count% años', + ], + 'compound' => [ + 'second' => '[0,1] %count% segundo|[2,Inf] %count% segundos', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minutos', + 'hour' => '{1} %count% hora|[2,Inf] %count% horas', + 'day' => '{1} %count% día|[2,Inf] %count% días', + 'week' => '{1} %count% semana|[2,Inf] %count% semanas', + 'month' => '{1} %count% mes|[2,Inf] %count% meses', + 'year' => '{1} %count% año|[2,Inf] %count% años', + 'past' => 'hace %value%', + 'future' => 'dentro de %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml deleted file mode 100644 index 8105a11..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] ahora mismo" - future: "[0,Inf] ahora mismo" -second: - past: "[0,1] hace %count% segundo |[2,Inf] hace %count% segundos" - future: "[0,1] dentro de %count% segundo|[2,Inf] dentro de %count% segundos" -minute: - past: "{1} hace %count% minuto|[2,Inf] hace %count% minutos" - future: "{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos" -hour: - past: "{1} hace %count% hora|[2,Inf] hace %count% horas" - future: "{1} dentro de %count% hora|[2,Inf] dentro de %count% horas" -day: - past: "{1} hace %count% día|[2,Inf] hace %count% días" - future: "{1} dentro de %count% día|[2,Inf] dentro de %count% días" -week: - past: "{1} hace %count% semana|[2,Inf] hace %count% semanas" - future: "{1} dentro de %count% semana|[2,Inf] dentro de %count% semanas" -month: - past: "{1} hace %count% mes|[2,Inf] hace %count% meses" - future: "{1} dentro de %count% mes|[2,Inf] dentro de %count% meses" -year: - past: "{1} hace %count% año|[2,Inf] hace %count% años" - future: "{1} dentro de %count% año|[2,Inf] dentro de %count% años" - -compound: - second: "[0,1] %count% segundo|[2,Inf] %count% segundos" - minute: "{1} %count% minuto|[2,Inf] %count% minutos" - hour: "{1} %count% hora|[2,Inf] %count% horas" - day: "{1} %count% día|[2,Inf] %count% días" - week: "{1} %count% semana|[2,Inf] %count% semanas" - month: "{1} %count% mes|[2,Inf] %count% meses" - year: "{1} %count% año|[2,Inf] %count% años" - past: "hace %value%" - future: "dentro de %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php new file mode 100644 index 0000000..33e71c2 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] à l\'instant', + 'future' => '[0,Inf] à l\'instant', + ], + 'second' => [ + 'past' => '[0,1] il y a %count% seconde|[2,Inf] il y a %count% secondes', + 'future' => '[0,1] il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes', + ], + 'minute' => [ + 'past' => '{1} il y a %count% minute|[2,Inf] il y a %count% minutes', + 'future' => '{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes', + ], + 'hour' => [ + 'past' => '{1} il y a %count% heure|[2,Inf] il y a %count% heure', + 'future' => '{1} il y a maintenant %count% heure|[2,Inf] il y a maintenant %count% heures', + ], + 'day' => [ + 'past' => '{1} il y a %count% jour|[2,Inf] il y a %count% jours', + 'future' => '{1} il y a maintenant %count% jour|[2,Inf] il y a maintenant %count% jours', + ], + 'week' => [ + 'past' => '{1} il y a %count% semaine|[2,Inf] il y a %count% semaines', + 'future' => '{1} il y a maintenant %count% semaine|[2,Inf] il y a maintenant %count% semaines', + ], + 'month' => [ + 'past' => '{1} il y a %count% mois|[2,Inf] il y a %count% mois', + 'future' => '{1} %count% mois maintenant|[2,Inf] %count% mois maintenant', + ], + 'year' => [ + 'past' => '{1} il y a %count% année|[2,Inf] il y a %count% années', + 'future' => '{1} il y a maintenant %count% année|[2,Inf] il y a maintenant %count% années', + ], + 'compound' => [ + 'second' => '[0,1] %count% seconde|[2,Inf] %count% secondes', + 'minute' => '{1} %count% minute|[2,Inf] %count% minutes', + 'hour' => '{1} %count% heure|[2,Inf] %count% heures', + 'day' => '{1} %count% jour|[2,Inf] %count% jours', + 'week' => '{1} %count% semaine|[2,Inf] %count% semaines', + 'month' => '{1} %count% mois|[2,Inf] %count% mois', + 'year' => '{1} %count% année|[2,Inf] %count% années', + 'past' => '%value% il y a', + 'future' => '%value% maintenant', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml deleted file mode 100644 index e89fcec..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] à l'instant" - future: "[0,Inf] à l'instant" -second: - past: "[0,1] il y a %count% seconde|[2,Inf] il y a %count% secondes" - future: "[0,1] il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" -minute: - past: "{1} il y a %count% minute|[2,Inf] il y a %count% minutes" - future: "{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes" -hour: - past: "{1} il y a %count% heure|[2,Inf] il y a %count% heure" - future: "{1} il y a maintenant %count% heure|[2,Inf] il y a maintenant %count% heures" -day: - past: "{1} il y a %count% jour|[2,Inf] il y a %count% jours" - future: "{1} il y a maintenant %count% jour|[2,Inf] il y a maintenant %count% jours" -week: - past: "{1} il y a %count% semaine|[2,Inf] il y a %count% semaines" - future: "{1} il y a maintenant %count% semaine|[2,Inf] il y a maintenant %count% semaines" -month: - past: "{1} il y a %count% mois|[2,Inf] il y a %count% mois" - future: "{1} %count% mois maintenant|[2,Inf] %count% mois maintenant" -year: - past: "{1} il y a %count% année|[2,Inf] il y a %count% années" - future: "{1} il y a maintenant %count% année|[2,Inf] il y a maintenant %count% années" - -compound: - second: "[0,1] %count% seconde|[2,Inf] %count% secondes" - minute: "{1} %count% minute|[2,Inf] %count% minutes" - hour: "{1} %count% heure|[2,Inf] %count% heures" - day: "{1} %count% jour|[2,Inf] %count% jours" - week: "{1} %count% semaine|[2,Inf] %count% semaines" - month: "{1} %count% mois|[2,Inf] %count% mois" - year: "{1} %count% année|[2,Inf] %count% années" - past: "%value% il y a" - future: "%value% maintenant" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.php new file mode 100644 index 0000000..2f8eecc --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] baru saja', + 'future' => '[0,Inf] baru saja', + ], + 'second' => [ + 'past' => '[0,1] %count% detik yang lalu|[2,Inf] %count% detik yang lalu', + 'future' => '[0,1] %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang', + ], + 'minute' => [ + 'past' => '{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu', + 'future' => '{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang', + ], + 'hour' => [ + 'past' => '{1} %count% jam yang lalu|[2,Inf] %count% jam yang lalu', + 'future' => '{1} %count% jam dari sekarang|[2,Inf] %count% jam dari sekarang', + ], + 'day' => [ + 'past' => '{1} %count% hari yang lalu|[2,Inf] %count% hari yang lalu', + 'future' => '{1} %count% hari dari sekarang|[2,Inf] %count% hari dari sekarang', + ], + 'week' => [ + 'past' => '{1} %count% minggu yang lalu|[2,Inf] %count% minggu yang lalu', + 'future' => '{1} %count% minggu dari sekarang|[2,Inf] %count% minggu dari sekarang', + ], + 'month' => [ + 'past' => '{1} %count% bulan yang lalu|[2,Inf] %count% bulan yang lalu', + 'future' => '{1} %count% bulan dari sekarang|[2,Inf] %count% bulan dari sekarang', + ], + 'year' => [ + 'past' => '{1} %count% tahun yang lalu|[2,Inf] %count% tahun yang lalu', + 'future' => '{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang', + ], + 'compound' => [ + 'second' => '[0,1] %count% detik|[2,Inf] %count% detik', + 'minute' => '{1} %count% menit|[2,Inf] %count% menit', + 'hour' => '{1} %count% jam|[2,Inf] %count% jam', + 'day' => '{1} %count% hari|[2,Inf] %count% hari', + 'week' => '{1} %count% minggu|[2,Inf] %count% minggu', + 'month' => '{1} %count% bulan|[2,Inf] %count% bulan', + 'year' => '{1} %count% tahun|[2,Inf] %count% tahun', + 'past' => '%value% yang lalu', + 'future' => '%value% dari sekarang', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml deleted file mode 100644 index 9996408..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] baru saja" - future: "[0,Inf] baru saja" -second: - past: "[0,1] %count% detik yang lalu|[2,Inf] %count% detik yang lalu" - future: "[0,1] %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" -minute: - past: "{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu" - future: "{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang" -hour: - past: "{1} %count% jam yang lalu|[2,Inf] %count% jam yang lalu" - future: "{1} %count% jam dari sekarang|[2,Inf] %count% jam dari sekarang" -day: - past: "{1} %count% hari yang lalu|[2,Inf] %count% hari yang lalu" - future: "{1} %count% hari dari sekarang|[2,Inf] %count% hari dari sekarang" -week: - past: "{1} %count% minggu yang lalu|[2,Inf] %count% minggu yang lalu" - future: "{1} %count% minggu dari sekarang|[2,Inf] %count% minggu dari sekarang" -month: - past: "{1} %count% bulan yang lalu|[2,Inf] %count% bulan yang lalu" - future: "{1} %count% bulan dari sekarang|[2,Inf] %count% bulan dari sekarang" -year: - past: "{1} %count% tahun yang lalu|[2,Inf] %count% tahun yang lalu" - future: "{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang" - -compound: - second: "[0,1] %count% detik|[2,Inf] %count% detik" - minute: "{1} %count% menit|[2,Inf] %count% menit" - hour: "{1} %count% jam|[2,Inf] %count% jam" - day: "{1} %count% hari|[2,Inf] %count% hari" - week: "{1} %count% minggu|[2,Inf] %count% minggu" - month: "{1} %count% bulan|[2,Inf] %count% bulan" - year: "{1} %count% tahun|[2,Inf] %count% tahun" - past: "%value% yang lalu" - future: "%value% dari sekarang" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.php new file mode 100644 index 0000000..4389c53 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] adesso', + 'future' => '[0,Inf] adesso', + ], + 'second' => [ + 'past' => '[0,1] %count% secondo fa|[2,Inf] %count% secondi fa', + 'future' => '[0,1] %count% secondo da adesso|[2,Inf] %count% secondi da adesso', + ], + 'minute' => [ + 'past' => '{1} %count% minuto fa|[2,Inf] %count% minuti fa', + 'future' => '{1} %count% minuto da adesso|[2,Inf] %count% minuti da adesso', + ], + 'hour' => [ + 'past' => '{1} %count% ora fa|[2,Inf] %count% ore fa', + 'future' => '{1} %count% ora da adesso|[2,Inf] %count% ore da adesso', + ], + 'day' => [ + 'past' => '{1} %count% giorno fa|[2,Inf] %count% giorni fa', + 'future' => '{1} %count% giorno da adesso|[2,Inf] %count% giorni da adesso', + ], + 'week' => [ + 'past' => '{1} %count% settimana fa|[2,Inf] %count% settimane fa', + 'future' => '{1} %count% settimana da adesso|[2,Inf] %count% settimane da adesso', + ], + 'month' => [ + 'past' => '{1} %count% mese fa|[2,Inf] %count% mesi fa', + 'future' => '{1} %count% mese da adesso|[2,Inf] %count% mesi da adesso', + ], + 'year' => [ + 'past' => '{1} %count% anno fa|[2,Inf] %count% anni fa', + 'future' => '{1} %count% anno da adesso|[2,Inf] %count% anni da adesso', + ], + 'compound' => [ + 'second' => '[0,1] %count% secondo|[2,Inf] %count% secondi', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minuti', + 'hour' => '{1} %count% ora|[2,Inf] %count% ore', + 'day' => '{1} %count% giorno|[2,Inf] %count% giorni', + 'week' => '{1} %count% settimana|[2,Inf] %count% settimane', + 'month' => '{1} %count% mese|[2,Inf] %count% mesi', + 'year' => '{1} %count% anno|[2,Inf] %count% anni', + 'past' => '%value% fa', + 'future' => '%value% da adesso', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml deleted file mode 100644 index 554365f..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] adesso" - future: "[0,Inf] adesso" -second: - past: "[0,1] %count% secondo fa|[2,Inf] %count% secondi fa" - future: "[0,1] %count% secondo da adesso|[2,Inf] %count% secondi da adesso" -minute: - past: "{1} %count% minuto fa|[2,Inf] %count% minuti fa" - future: "{1} %count% minuto da adesso|[2,Inf] %count% minuti da adesso" -hour: - past: "{1} %count% ora fa|[2,Inf] %count% ore fa" - future: "{1} %count% ora da adesso|[2,Inf] %count% ore da adesso" -day: - past: "{1} %count% giorno fa|[2,Inf] %count% giorni fa" - future: "{1} %count% giorno da adesso|[2,Inf] %count% giorni da adesso" -week: - past: "{1} %count% settimana fa|[2,Inf] %count% settimane fa" - future: "{1} %count% settimana da adesso|[2,Inf] %count% settimane da adesso" -month: - past: "{1} %count% mese fa|[2,Inf] %count% mesi fa" - future: "{1} %count% mese da adesso|[2,Inf] %count% mesi da adesso" -year: - past: "{1} %count% anno fa|[2,Inf] %count% anni fa" - future: "{1} %count% anno da adesso|[2,Inf] %count% anni da adesso" - -compound: - second: "[0,1] %count% secondo|[2,Inf] %count% secondi" - minute: "{1} %count% minuto|[2,Inf] %count% minuti" - hour: "{1} %count% ora|[2,Inf] %count% ore" - day: "{1} %count% giorno|[2,Inf] %count% giorni" - week: "{1} %count% settimana|[2,Inf] %count% settimane" - month: "{1} %count% mese|[2,Inf] %count% mesi" - year: "{1} %count% anno|[2,Inf] %count% anni" - past: "%value% fa" - future: "%value% da adesso" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php new file mode 100644 index 0000000..3960542 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] たった今', + 'future' => '[0,Inf] たった今', + ], + 'second' => [ + 'past' => '[0,1] %count% 秒前|[2,Inf] %count% 秒前', + 'future' => '[0,1] %count% 秒後|[2,Inf] %count% 秒後', + ], + 'minute' => [ + 'past' => '{1} %count% 分前|[2,Inf] %count% 分前', + 'future' => '{1} %count% 分後|[2,Inf] %count% 分後', + ], + 'hour' => [ + 'past' => '{1} %count% 時間前|[2,Inf] %count% 時間前', + 'future' => '{1} %count% 時間後|[2,Inf] %count% 時間後', + ], + 'day' => [ + 'past' => '{1} %count% 日前|[2,Inf] %count% 日前', + 'future' => '{1} %count% 日後|[2,Inf] %count% 日後', + ], + 'week' => [ + 'past' => '{1} %count% 週間前|[2,Inf] %count% 週間前', + 'future' => '{1} %count% 週間後|[2,Inf] %count% 週間後', + ], + 'month' => [ + 'past' => '{1} %count% ヶ月前|[2,Inf] %count% ヶ月前', + 'future' => '{1} %count% ヶ月後|[2,Inf] %count% ヶ月後', + ], + 'year' => [ + 'past' => '{1} %count% 年前|[2,Inf] %count% 年前', + 'future' => '{1} %count% 年後|[2,Inf] %count% 年後', + ], + 'compound' => [ + 'second' => '[0,1] %count% 秒|[2,Inf] %count% 秒', + 'minute' => '{1} %count% 分|[2,Inf] %count% 分', + 'hour' => '{1} %count% 時間|[2,Inf] %count% 時間', + 'day' => '{1} %count% 日|[2,Inf] %count% 日', + 'week' => '{1} %count% 週間|[2,Inf] %count% 週間', + 'month' => '{1} %count% 月|[2,Inf] %count% 月', + 'year' => '{1} %count% 年|[2,Inf] %count% 年', + 'past' => '%value%前', + 'future' => '%value%後', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml deleted file mode 100644 index 055fa3d..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] たった今" - future: "[0,Inf] たった今" -second: - past: "[0,1] %count% 秒前|[2,Inf] %count% 秒前" - future: "[0,1] %count% 秒後|[2,Inf] %count% 秒後" -minute: - past: "{1} %count% 分前|[2,Inf] %count% 分前" - future: "{1} %count% 分後|[2,Inf] %count% 分後" -hour: - past: "{1} %count% 時間前|[2,Inf] %count% 時間前" - future: "{1} %count% 時間後|[2,Inf] %count% 時間後" -day: - past: "{1} %count% 日前|[2,Inf] %count% 日前" - future: "{1} %count% 日後|[2,Inf] %count% 日後" -week: - past: "{1} %count% 週間前|[2,Inf] %count% 週間前" - future: "{1} %count% 週間後|[2,Inf] %count% 週間後" -month: - past: "{1} %count% ヶ月前|[2,Inf] %count% ヶ月前" - future: "{1} %count% ヶ月後|[2,Inf] %count% ヶ月後" -year: - past: "{1} %count% 年前|[2,Inf] %count% 年前" - future: "{1} %count% 年後|[2,Inf] %count% 年後" - -compound: - second: "[0,1] %count% 秒|[2,Inf] %count% 秒" - minute: "{1} %count% 分|[2,Inf] %count% 分" - hour: "{1} %count% 時間|[2,Inf] %count% 時間" - day: "{1} %count% 日|[2,Inf] %count% 日" - week: "{1} %count% 週間|[2,Inf] %count% 週間" - month: "{1} %count% 月|[2,Inf] %count% 月" - year: "{1} %count% 年|[2,Inf] %count% 年" - past: "%value%前" - future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php new file mode 100644 index 0000000..57851ca --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] zojuist', + 'future' => '[0,Inf] zojuist', + ], + 'second' => [ + 'past' => '[0,1] %count% seconde geleden|[2,Inf] %count% seconden geleden', + 'future' => '[0,1] over %count% seconde|[2,Inf] over %count% seconden', + ], + 'minute' => [ + 'past' => '{1} %count% minuut geleden|[2,Inf] %count% minuten geleden', + 'future' => '{1} over %count% minuut|[2,Inf] over %count% minuten', + ], + 'hour' => [ + 'past' => '{1} %count% uur geleden|[2,Inf] %count% uren geleden', + 'future' => '{1} over %count% uur|[2,Inf] over %count% uren', + ], + 'day' => [ + 'past' => '{1} %count% dag geleden|[2,Inf] %count% dagen geleden', + 'future' => '{1} over %count% dag|[2,Inf] over %count% dagen', + ], + 'week' => [ + 'past' => '{1} %count% week geleden|[2,Inf] %count% weken geleden', + 'future' => '{1} over %count% week|[2,Inf] over %count% weken', + ], + 'month' => [ + 'past' => '{1} %count% maand geleden|[2,Inf] %count% maanden geleden', + 'future' => '{1} over %count% maand|[2,Inf] over %count% maanden', + ], + 'year' => [ + 'past' => '{1} %count% jaar geleden|[2,Inf] %count% jaren geleden', + 'future' => '{1} over %count% jaar|[2,Inf] over %count% jaren', + ], + 'compound' => [ + 'second' => '[0,1] %count% seconde|[2,Inf] %count% seconden', + 'minute' => '{1} %count% minuut|[2,Inf] %count% minuten', + 'hour' => '{1} %count% uur|[2,Inf] %count% uren', + 'day' => '{1} %count% dag|[2,Inf] %count% dagen', + 'week' => '{1} %count% week|[2,Inf] %count% weken', + 'month' => '{1} %count% maand|[2,Inf] %count% maanden', + 'year' => '{1} %count% jaar|[2,Inf] %count% jaren', + 'past' => '%value% geleden', + 'future' => '%value% vanaf nu', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml deleted file mode 100644 index d36c5cb..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] zojuist" - future: "[0,Inf] zojuist" -second: - past: "[0,1] %count% seconde geleden|[2,Inf] %count% seconden geleden" - future: "[0,1] over %count% seconde|[2,Inf] over %count% seconden" -minute: - past: "{1} %count% minuut geleden|[2,Inf] %count% minuten geleden" - future: "{1} over %count% minuut|[2,Inf] over %count% minuten" -hour: - past: "{1} %count% uur geleden|[2,Inf] %count% uren geleden" - future: "{1} over %count% uur|[2,Inf] over %count% uren" -day: - past: "{1} %count% dag geleden|[2,Inf] %count% dagen geleden" - future: "{1} over %count% dag|[2,Inf] over %count% dagen" -week: - past: "{1} %count% week geleden|[2,Inf] %count% weken geleden" - future: "{1} over %count% week|[2,Inf] over %count% weken" -month: - past: "{1} %count% maand geleden|[2,Inf] %count% maanden geleden" - future: "{1} over %count% maand|[2,Inf] over %count% maanden" -year: - past: "{1} %count% jaar geleden|[2,Inf] %count% jaren geleden" - future: "{1} over %count% jaar|[2,Inf] over %count% jaren" - -compound: - second: "[0,1] %count% seconde|[2,Inf] %count% seconden" - minute: "{1} %count% minuut|[2,Inf] %count% minuten" - hour: "{1} %count% uur|[2,Inf] %count% uren" - day: "{1} %count% dag|[2,Inf] %count% dagen" - week: "{1} %count% week|[2,Inf] %count% weken" - month: "{1} %count% maand|[2,Inf] %count% maanden" - year: "{1} %count% jaar|[2,Inf] %count% jaren" - past: "%value% geleden" - future: "%value% vanaf nu" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.php new file mode 100644 index 0000000..3da884d --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] akkurat nå', + 'future' => '[0,Inf] akkurat nå', + ], + 'second' => [ + 'past' => '[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden', + 'future' => '[0,1] %count% sekund fra nå|[2,Inf] %count% sekunder fra nå', + ], + 'minute' => [ + 'past' => '{1} %count% minutt siden|[2,Inf] %count% minutter siden', + 'future' => '{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå', + ], + 'hour' => [ + 'past' => '{1} %count% time siden|[2,Inf] %count% timer siden', + 'future' => '{1} %count% time fra nå|[2,Inf] %count% timer fra nå', + ], + 'day' => [ + 'past' => '{1} %count% dag siden|[2,Inf] %count% dager siden', + 'future' => '{1} %count% dag fra nå|[2,Inf] %count% dager fra nå', + ], + 'week' => [ + 'past' => '{1} %count% uke siden|[2,Inf] %count% uker siden', + 'future' => '{1} %count% uke fra nå|[2,Inf] %count% uker fra nå', + ], + 'month' => [ + 'past' => '{1} %count% måned siden|[2,Inf] %count% måneder siden', + 'future' => '{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå', + ], + 'year' => [ + 'past' => '{1} %count% år siden|[2,Inf] %count% år siden', + 'future' => '{1} %count% år fra nå|[2,Inf] %count% år fra nå', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekund|[2,Inf] %count% sekunder', + 'minute' => '{1} %count% minutt|[2,Inf] %count% minutter', + 'hour' => '{1} %count% time|[2,Inf] %count% timer', + 'day' => '{1} %count% dag|[2,Inf] %count% dager', + 'week' => '{1} %count% uke|[2,Inf] %count% uker', + 'month' => '{1} %count% måned|[2,Inf] %count% måneder', + 'year' => '{1} %count% år|[2,Inf] %count% år', + 'past' => '%value% siden', + 'future' => '%value% fra nå', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml deleted file mode 100644 index 06a7f3e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] akkurat nå" - future: "[0,Inf] akkurat nå" -second: - past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "[0,1] %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" -minute: - past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" - future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" -hour: - past: "{1} %count% time siden|[2,Inf] %count% timer siden" - future: "{1} %count% time fra nå|[2,Inf] %count% timer fra nå" -day: - past: "{1} %count% dag siden|[2,Inf] %count% dager siden" - future: "{1} %count% dag fra nå|[2,Inf] %count% dager fra nå" -week: - past: "{1} %count% uke siden|[2,Inf] %count% uker siden" - future: "{1} %count% uke fra nå|[2,Inf] %count% uker fra nå" -month: - past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" - future: "{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå" -year: - past: "{1} %count% år siden|[2,Inf] %count% år siden" - future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" - -compound: - second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" - minute: "{1} %count% minutt|[2,Inf] %count% minutter" - hour: "{1} %count% time|[2,Inf] %count% timer" - day: "{1} %count% dag|[2,Inf] %count% dager" - week: "{1} %count% uke|[2,Inf] %count% uker" - month: "{1} %count% måned|[2,Inf] %count% måneder" - year: "{1} %count% år|[2,Inf] %count% år" - past: "%value% siden" - future: "%value% fra nå" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php new file mode 100644 index 0000000..05fb2f3 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] w tym momencie', + 'future' => '[0,Inf] w tym momencie', + ], + 'second' => [ + 'past' => '[0,1] sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu', + 'future' => '[0,1] za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund', + ], + 'minute' => [ + 'past' => '{1} minutę temu|[2, 4] %count% minuty temu|[5,Inf] %count% minut temu', + 'future' => '{1} za minutę|[2, 4] za %count% minuty|[5,Inf] za %count% minut', + ], + 'hour' => [ + 'past' => '{1} godzinę temu|[2, 4] %count% godziny temu|[5,Inf] %count% godzin temu', + 'future' => '{1} za godzinę|[2, 4] za %count% godziny|[5,Inf] za %count% godzin', + ], + 'day' => [ + 'past' => '{1} wczoraj|[2, Inf] %count% dni temu', + 'future' => '{1} jutro|[2, Inf] za %count% dni', + ], + 'week' => [ + 'past' => '{1} tydzień temu|[2, 4] %count% tygodnie temu|[5,Inf] %count% tygodni temu', + 'future' => '{1} za tydzień|[2, 4] za %count% tygodnie|[5,Inf] za %count% tygodni', + ], + 'month' => [ + 'past' => '{1} miesiąc temu|[2, 4] %count% miesiące temu|[5,Inf] %count% miesięcy temu', + 'future' => '{1} za miesiąc|[2, 4] za %count% miesiące|[5,Inf] za %count% miesięcy', + ], + 'year' => [ + 'past' => '{1} rok temu|[2, 4] %count% lata temu|[5,Inf] %count% lat temu', + 'future' => '{1} za rok|[2, 4] za %count% lata|[5,Inf] za %count% lat', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund', + 'minute' => '{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut', + 'hour' => '{1} %count% godzina|[2,4] %count% godziny|[5,Inf] %count% godzin', + 'day' => '{1} %count% dzień|[2,Inf] %count% dni', + 'week' => '{1} %count% tydzień|[2,4] %count% tygodnie|[5,Inf] %count% tygodni', + 'month' => '{1} %count% miesiąc|[2,4] %count% miesiące|[5,Inf] %count% miesięcy', + 'year' => '{1} %count% rok|[2,4] %count% lata|[5,Inf] %count% lat', + 'past' => '%value% temu', + 'future' => '%value% od teraz', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml deleted file mode 100644 index 45fcc71..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] w tym momencie" - future: "[0,Inf] w tym momencie" -second: - past: "[0,1] sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu" - future: "[0,1] za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund" -minute: - past: "{1} minutę temu|[2, 4] %count% minuty temu|[5,Inf] %count% minut temu" - future: "{1} za minutę|[2, 4] za %count% minuty|[5,Inf] za %count% minut" -hour: - past: "{1} godzinę temu|[2, 4] %count% godziny temu|[5,Inf] %count% godzin temu" - future: "{1} za godzinę|[2, 4] za %count% godziny|[5,Inf] za %count% godzin" -day: - past: "{1} wczoraj|[2, Inf] %count% dni temu" - future: "{1} jutro|[2, Inf] za %count% dni" -week: - past: "{1} tydzień temu|[2, 4] %count% tygodnie temu|[5,Inf] %count% tygodni temu" - future: "{1} za tydzień|[2, 4] za %count% tygodnie|[5,Inf] za %count% tygodni" -month: - past: "{1} miesiąc temu|[2, 4] %count% miesiące temu|[5,Inf] %count% miesięcy temu" - future: "{1} za miesiąc|[2, 4] za %count% miesiące|[5,Inf] za %count% miesięcy" -year: - past: "{1} rok temu|[2, 4] %count% lata temu|[5,Inf] %count% lat temu" - future: "{1} za rok|[2, 4] za %count% lata|[5,Inf] za %count% lat" - -compound: - second: "[0,1] %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund" - minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" - hour: "{1} %count% godzina|[2,4] %count% godziny|[5,Inf] %count% godzin" - day: "{1} %count% dzień|[2,Inf] %count% dni" - week: "{1} %count% tydzień|[2,4] %count% tygodnie|[5,Inf] %count% tygodni" - month: "{1} %count% miesiąc|[2,4] %count% miesiące|[5,Inf] %count% miesięcy" - year: "{1} %count% rok|[2,4] %count% lata|[5,Inf] %count% lat" - past: "%value% temu" - future: "%value% od teraz" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php new file mode 100644 index 0000000..6684afd --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] agora', + 'future' => '[0,Inf] agora', + ], + 'second' => [ + 'past' => '[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás', + 'future' => '[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora', + ], + 'minute' => [ + 'past' => '{1} %count% minuto atrás|[2,Inf] %count% minutos atrás', + 'future' => '{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora', + ], + 'hour' => [ + 'past' => '{1} %count% hora atrás|[2,Inf] %count% horas atrás', + 'future' => '{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora', + ], + 'day' => [ + 'past' => '{1} %count% dia atrás|[2,Inf] %count% dias atrás', + 'future' => '{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora', + ], + 'week' => [ + 'past' => '{1} %count% semana atrás|[2,Inf] %count% semanas atrás', + 'future' => '{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora', + ], + 'month' => [ + 'past' => '{1} %count% mês atrás|[2,Inf] %count% meses atrás', + 'future' => '{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora', + ], + 'year' => [ + 'past' => '{1} %count% ano atrás|[2,Inf] %count% anos atrás', + 'future' => '{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora', + ], + 'compound' => [ + 'second' => '[0,1] %count% segundo|[2,Inf] %count% segundos', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minutos', + 'hour' => '{1} %count% hora|[2,Inf] %count% horas', + 'day' => '{1} %count% dia|[2,Inf] %count% dias', + 'week' => '{1} %count% semana|[2,Inf] %count% semana', + 'month' => '{1} %count% mês|[2,Inf] %count% meses', + 'year' => '{1} %count% ano|[2,Inf] %count% anos', + 'past' => '%value% atrás', + 'future' => '%value% a partir de agora', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml deleted file mode 100644 index a5e7ea7..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] agora" - future: "[0,Inf] agora" -second: - past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" -minute: - past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" - future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" -hour: - past: "{1} %count% hora atrás|[2,Inf] %count% horas atrás" - future: "{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora" -day: - past: "{1} %count% dia atrás|[2,Inf] %count% dias atrás" - future: "{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora" -week: - past: "{1} %count% semana atrás|[2,Inf] %count% semanas atrás" - future: "{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora" -month: - past: "{1} %count% mês atrás|[2,Inf] %count% meses atrás" - future: "{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora" -year: - past: "{1} %count% ano atrás|[2,Inf] %count% anos atrás" - future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" - -compound: - second: "[0,1] %count% segundo|[2,Inf] %count% segundos" - minute: "{1} %count% minuto|[2,Inf] %count% minutos" - hour: "{1} %count% hora|[2,Inf] %count% horas" - day: "{1} %count% dia|[2,Inf] %count% dias" - week: "{1} %count% semana|[2,Inf] %count% semana" - month: "{1} %count% mês|[2,Inf] %count% meses" - year: "{1} %count% ano|[2,Inf] %count% anos" - past: "%value% atrás" - future: "%value% a partir de agora" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php new file mode 100644 index 0000000..91f4ee5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] atrás', + 'future' => '[0,Inf] a partir de agora', + ], + 'second' => [ + 'past' => '[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás', + 'future' => '[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora', + ], + 'minute' => [ + 'past' => '{1} %count% minuto atrás|[2,Inf] %count% minutos atrás', + 'future' => '{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora', + ], + 'hour' => [ + 'past' => '{1} %count% hora atrás|[2,Inf] %count% horas atrás', + 'future' => '{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora', + ], + 'day' => [ + 'past' => '{1} %count% dia atrás|[2,Inf] %count% dias atrás', + 'future' => '{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora', + ], + 'week' => [ + 'past' => '{1} %count% semana atrás|[2,Inf] %count% semanas atrás', + 'future' => '{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora', + ], + 'month' => [ + 'past' => '{1} %count% mês atrás|[2,Inf] %count% meses atrás', + 'future' => '{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora', + ], + 'year' => [ + 'past' => '{1} %count% ano atrás|[2,Inf] %count% anos atrás', + 'future' => '{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora', + ], + 'compound' => [ + 'second' => '[0,1] %count% segundo|[2,Inf] %count% segundos', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minutos', + 'hour' => '{1} %count% hora|[2,Inf] %count% horas', + 'day' => '{1} %count% dia|[2,Inf] %count% dias', + 'week' => '{1} %count% semana|[2,Inf] %count% semana', + 'month' => '{1} %count% mês|[2,Inf] %count% meses', + 'year' => '{1} %count% ano|[2,Inf] %count% anos', + 'past' => '%value% atrás', + 'future' => '%value% a partir de agora', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml deleted file mode 100644 index 221b8bf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] atrás" - future: "[0,Inf] a partir de agora" -second: - past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" -minute: - past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" - future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" -hour: - past: "{1} %count% hora atrás|[2,Inf] %count% horas atrás" - future: "{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora" -day: - past: "{1} %count% dia atrás|[2,Inf] %count% dias atrás" - future: "{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora" -week: - past: "{1} %count% semana atrás|[2,Inf] %count% semanas atrás" - future: "{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora" -month: - past: "{1} %count% mês atrás|[2,Inf] %count% meses atrás" - future: "{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora" -year: - past: "{1} %count% ano atrás|[2,Inf] %count% anos atrás" - future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" - -compound: - second: "[0,1] %count% segundo|[2,Inf] %count% segundos" - minute: "{1} %count% minuto|[2,Inf] %count% minutos" - hour: "{1} %count% hora|[2,Inf] %count% horas" - day: "{1} %count% dia|[2,Inf] %count% dias" - week: "{1} %count% semana|[2,Inf] %count% semana" - month: "{1} %count% mês|[2,Inf] %count% meses" - year: "{1} %count% ano|[2,Inf] %count% anos" - past: "%value% atrás" - future: "%value% a partir de agora" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php new file mode 100644 index 0000000..5a9726b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] mai înainte', + 'future' => '[0,Inf] imediat', + ], + 'second' => [ + 'past' => '[0,1] %count% secundă în urmă|[2,Inf] %count% secunde în urmă', + 'future' => '[0,1] %count% secundă de acum|[2,Inf] %count% secundă de acum', + ], + 'minute' => [ + 'past' => '{1} %count% minut în urmă|[2,Inf] %count% minute în urmă', + 'future' => '{1} %count% minut de acum|[2,Inf] %count% minute de acum', + ], + 'hour' => [ + 'past' => '{1} %count% oră în urmă|[2,Inf] %count% ore în urmă', + 'future' => '{1} %count% oră de acum|[2,Inf] %count% ore de acum', + ], + 'day' => [ + 'past' => '{1} %count% zi în urmă|[2,Inf] %count% zile în urmă', + 'future' => '{1} %count% zi de acum|[2,Inf] %count% zile de acum', + ], + 'week' => [ + 'past' => '{1} %count% săptămână în urmă|[2,Inf] %count% săptămâni în urmă', + 'future' => '{1} %count% săptămână de acum|[2,Inf] %count% săptămâni de acum', + ], + 'month' => [ + 'past' => '{1} %count% lună în urmă|[2,Inf] %count% luni în urmă', + 'future' => '{1} %count% lună de acum|[2,Inf] %count% luni de acum', + ], + 'year' => [ + 'past' => '{1} %count% an în urmă|[2,Inf] %count% ani în urmă', + 'future' => '{1} %count% an de acum|[2,Inf] %count% ani de acum', + ], + 'compound' => [ + 'second' => '[0,1] %count% secundă|[2,Inf] %count% secunde', + 'minute' => '{1} %count% minut|[2,Inf] %count% minute', + 'hour' => '{1} %count% oră|[2,Inf] %count% ore', + 'day' => '{1} %count% zi|[2,Inf] %count% zile', + 'week' => '{1} %count% săptămană|[2,Inf] %count% săptămani', + 'month' => '{1} %count% lună|[2,Inf] %count% luni', + 'year' => '{1} %count% an|[2,Inf] %count% ani', + 'ago' => 'în urmă', + 'from_now' => 'de acum', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml deleted file mode 100644 index 9d83184..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] mai înainte" - future: "[0,Inf] imediat" -second: - past: "[0,1] %count% secundă în urmă|[2,Inf] %count% secunde în urmă" - future: "[0,1] %count% secundă de acum|[2,Inf] %count% secundă de acum" -minute: - past: "{1} %count% minut în urmă|[2,Inf] %count% minute în urmă" - future: "{1} %count% minut de acum|[2,Inf] %count% minute de acum" -hour: - past: "{1} %count% oră în urmă|[2,Inf] %count% ore în urmă" - future: "{1} %count% oră de acum|[2,Inf] %count% ore de acum" -day: - past: "{1} %count% zi în urmă|[2,Inf] %count% zile în urmă" - future: "{1} %count% zi de acum|[2,Inf] %count% zile de acum" -week: - past: "{1} %count% săptămână în urmă|[2,Inf] %count% săptămâni în urmă" - future: "{1} %count% săptămână de acum|[2,Inf] %count% săptămâni de acum" -month: - past: "{1} %count% lună în urmă|[2,Inf] %count% luni în urmă" - future: "{1} %count% lună de acum|[2,Inf] %count% luni de acum" -year: - past: "{1} %count% an în urmă|[2,Inf] %count% ani în urmă" - future: "{1} %count% an de acum|[2,Inf] %count% ani de acum" - -compound: - second: "[0,1] %count% secundă|[2,Inf] %count% secunde" - minute: "{1} %count% minut|[2,Inf] %count% minute" - hour: "{1} %count% oră|[2,Inf] %count% ore" - day: "{1} %count% zi|[2,Inf] %count% zile" - week: "{1} %count% săptămană|[2,Inf] %count% săptămani" - month: "{1} %count% lună|[2,Inf] %count% luni" - year: "{1} %count% an|[2,Inf] %count% ani" - ago: "în urmă" - from_now: "de acum" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php new file mode 100644 index 0000000..15044e5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] сейчас', + 'future' => '[0,Inf] сейчас', + ], + 'second' => [ + 'past' => '%count% секунду назад|%count% секунды назад|%count% секунд назад', + 'future' => 'через %count% секунду|через %count% секунды|через %count% секунд', + ], + 'minute' => [ + 'past' => '%count% минуту назад|%count% минуты назад|%count% минут назад', + 'future' => 'через %count% минуту|через %count% минуты|через %count% минут', + ], + 'hour' => [ + 'past' => '%count% час назад|%count% часа назад|%count% часов назад', + 'future' => 'через %count% час|через %count% часа|через %count% часов', + ], + 'day' => [ + 'past' => '%count% день назад|%count% дня назад|%count% дней назад', + 'future' => 'через %count% день|через %count% дня|через %count% дней', + ], + 'week' => [ + 'past' => '%count% неделю назад|%count% недели назад|%count% недель назад', + 'future' => 'через %count% неделю|через %count% недели|через %count% недель', + ], + 'month' => [ + 'past' => '%count% месяц назад|%count% месяца назад|%count% месяцев назад', + 'future' => 'через %count% месяц|через %count% месяца|через %count% месяцев', + ], + 'year' => [ + 'past' => '%count% год назад|%count% года назад|%count% лет назад', + 'future' => 'через %count% год|через %count% года|через %count% лет', + ], + 'compound' => [ + 'second' => '%count% секунда|%count% секунды|%count% секунд', + 'minute' => '%count% минута|%count% минуты|%count% минут', + 'hour' => '%count% час|%count% часа|%count% часов', + 'day' => '%count% день|%count% дня|%count% дней', + 'week' => '%count% неделя|%count% недели|%count% недель', + 'month' => '%count% месяц|%count% месяца|%count% месяцев', + 'year' => '%count% год|%count% года|%count% лет', + 'past' => '%value% назад', + 'future' => 'через %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml deleted file mode 100644 index ecbcaec..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] сейчас" - future: "[0,Inf] сейчас" -second: - past: "%count% секунду назад|%count% секунды назад|%count% секунд назад" - future: "через %count% секунду|через %count% секунды|через %count% секунд" -minute: - past: "%count% минуту назад|%count% минуты назад|%count% минут назад" - future: "через %count% минуту|через %count% минуты|через %count% минут" -hour: - past: "%count% час назад|%count% часа назад|%count% часов назад" - future: "через %count% час|через %count% часа|через %count% часов" -day: - past: "%count% день назад|%count% дня назад|%count% дней назад" - future: "через %count% день|через %count% дня|через %count% дней" -week: - past: "%count% неделю назад|%count% недели назад|%count% недель назад" - future: "через %count% неделю|через %count% недели|через %count% недель" -month: - past: "%count% месяц назад|%count% месяца назад|%count% месяцев назад" - future: "через %count% месяц|через %count% месяца|через %count% месяцев" -year: - past: "%count% год назад|%count% года назад|%count% лет назад" - future: "через %count% год|через %count% года|через %count% лет" - -compound: - second: "%count% секунда|%count% секунды|%count% секунд" - minute: "%count% минута|%count% минуты|%count% минут" - hour: "%count% час|%count% часа|%count% часов" - day: "%count% день|%count% дня|%count% дней" - week: "%count% неделя|%count% недели|%count% недель" - month: "%count% месяц|%count% месяца|%count% месяцев" - year: "%count% год|%count% года|%count% лет" - past: "%value% назад" - future: "через %value%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php new file mode 100644 index 0000000..52e6cdf --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] práve teraz', + 'future' => '[0,Inf] práve teraz', + ], + 'second' => [ + 'past' => '{1} pred sekundou|[2, 4] pred %count% sekundami|[5,Inf] pred %count% sekundami', + 'future' => '{1} o sekundu|[2, 4] o %count% sekundy|[5,Inf] o %count% sekúnd', + ], + 'minute' => [ + 'past' => '{1} pred minútou|[2, Inf] pred %count% minútami', + 'future' => '{1} o minútu|[2, 4] o %count% minúty|[5,Inf] o %count% minút', + ], + 'hour' => [ + 'past' => '{1} pred hodinou|[2, Inf] pred %count% hodinami', + 'future' => '{1} o hodinu|[2, 4] o %count% hodiny|[5,Inf] o %count% hodín', + ], + 'day' => [ + 'past' => '{1} včera|[2, Inf] pred %count% dňami', + 'future' => '{1} zajtra|[2, 4] o %count% dni|[5,Inf] o %count% dní', + ], + 'week' => [ + 'past' => '{1} minulý týždeň|[2, Inf] pred %count% týždňami', + 'future' => '{1} o týždeň|[2, 4] o %count% týždne|[5,Inf] o %count% týždňov', + ], + 'month' => [ + 'past' => '{1} minulý mesiac|[2, Inf] pred %count% mesiacmi', + 'future' => '{1} o mesiac|[2, 4] o %count% mesiace|[5,Inf] o %count% mesiacov', + ], + 'year' => [ + 'past' => '{1} minulý rok|[2, Inf] pred %count% rokmi', + 'future' => '{1} za rok|[2, 4] o %count% roky|[5,Inf] o %count% rokov', + ], + 'compound' => [ + 'second' => '{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekúnd', + 'minute' => '{1} %count% minúta|[2,4] %count% minúty|[5,Inf] %count% minút', + 'hour' => '{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodín', + 'day' => '{1} %count% deň|[2,4] %count% dni|[5,Inf] %count% dní', + 'week' => '{1} %count% týždeň|[2,4] %count% týždne|[5,Inf] %count% týždňov', + 'month' => '{1} %count% mesiac|[2,4] %count% mesiace|[5,Inf] %count% mesiacov', + 'year' => '{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% rokov', + 'past' => '%value% dozadu', + 'future' => '%value% od teraz', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml deleted file mode 100644 index f9a7591..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] práve teraz" - future: "[0,Inf] práve teraz" -second: - past: "{1} pred sekundou|[2, 4] pred %count% sekundami|[5,Inf] pred %count% sekundami" - future: "{1} o sekundu|[2, 4] o %count% sekundy|[5,Inf] o %count% sekúnd" -minute: - past: "{1} pred minútou|[2, Inf] pred %count% minútami" - future: "{1} o minútu|[2, 4] o %count% minúty|[5,Inf] o %count% minút" -hour: - past: "{1} pred hodinou|[2, Inf] pred %count% hodinami" - future: "{1} o hodinu|[2, 4] o %count% hodiny|[5,Inf] o %count% hodín" -day: - past: "{1} včera|[2, Inf] pred %count% dňami" - future: "{1} zajtra|[2, 4] o %count% dni|[5,Inf] o %count% dní" -week: - past: "{1} minulý týždeň|[2, Inf] pred %count% týždňami" - future: "{1} o týždeň|[2, 4] o %count% týždne|[5,Inf] o %count% týždňov" -month: - past: "{1} minulý mesiac|[2, Inf] pred %count% mesiacmi" - future: "{1} o mesiac|[2, 4] o %count% mesiace|[5,Inf] o %count% mesiacov" -year: - past: "{1} minulý rok|[2, Inf] pred %count% rokmi" - future: "{1} za rok|[2, 4] o %count% roky|[5,Inf] o %count% rokov" - -compound: - second: "{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekúnd" - minute: "{1} %count% minúta|[2,4] %count% minúty|[5,Inf] %count% minút" - hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodín" - day: "{1} %count% deň|[2,4] %count% dni|[5,Inf] %count% dní" - week: "{1} %count% týždeň|[2,4] %count% týždne|[5,Inf] %count% týždňov" - month: "{1} %count% mesiac|[2,4] %count% mesiace|[5,Inf] %count% mesiacov" - year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% rokov" - past: "%value% dozadu" - future: "%value% od teraz" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.php new file mode 100644 index 0000000..25a6f81 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] เมื่อสักครู่', + 'future' => '[0,Inf] เร็วๆนี้', + ], + 'second' => [ + 'past' => '[1,Inf] %count% วินาทีที่แล้ว', + 'future' => '[1,Inf] อีก %count% วินาที', + ], + 'minute' => [ + 'past' => '[1,Inf] %count% นาทีที่แล้ว', + 'future' => '[1,Inf] อีก %count% นาที', + ], + 'hour' => [ + 'past' => '[1,Inf] %count% ชั่วโมงที่แล้ว', + 'future' => '[1,Inf] อีก %count% ชั่วโมง', + ], + 'day' => [ + 'past' => '[1,Inf] %count% วันที่แล้ว', + 'future' => '[1,Inf] อีก %count% วัน', + ], + 'week' => [ + 'past' => '[1,Inf] %count% สัปดาห์ที่แล้ว', + 'future' => '[1,Inf] อีก %count% สัปดาห์', + ], + 'month' => [ + 'past' => '[1,Inf] %count% เดือนที่แล้ว', + 'future' => '[1,Inf] อีก %count% เดือน', + ], + 'year' => [ + 'past' => '[1,Inf] %count% ปีที่แล้ว', + 'future' => '[1,Inf] อีก %count% ปี', + ], + 'compound' => [ + 'second' => '[0,Inf] %count% วินาที', + 'minute' => '[1,Inf] %count% นาที', + 'hour' => '[1,Inf] %count% ชั่วโมง', + 'day' => '[1,Inf] %count% วัน', + 'week' => '[1,Inf] %count% สัปดาห์', + 'month' => '[1,Inf] %count% เดือน', + 'year' => '[1,Inf] %count% ปี', + 'past' => '%value%ที่แล้ว', + 'future' => 'อีก %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml deleted file mode 100644 index ca7da99..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] เมื่อสักครู่" - future: "[0,Inf] เร็วๆนี้" -second: - past: "[1,Inf] %count% วินาทีที่แล้ว" - future: "[1,Inf] อีก %count% วินาที" -minute: - past: "[1,Inf] %count% นาทีที่แล้ว" - future: "[1,Inf] อีก %count% นาที" -hour: - past: "[1,Inf] %count% ชั่วโมงที่แล้ว" - future: "[1,Inf] อีก %count% ชั่วโมง" -day: - past: "[1,Inf] %count% วันที่แล้ว" - future: "[1,Inf] อีก %count% วัน" -week: - past: "[1,Inf] %count% สัปดาห์ที่แล้ว" - future: "[1,Inf] อีก %count% สัปดาห์" -month: - past: "[1,Inf] %count% เดือนที่แล้ว" - future: "[1,Inf] อีก %count% เดือน" -year: - past: "[1,Inf] %count% ปีที่แล้ว" - future: "[1,Inf] อีก %count% ปี" - -compound: - second: "[0,Inf] %count% วินาที" - minute: "[1,Inf] %count% นาที" - hour: "[1,Inf] %count% ชั่วโมง" - day: "[1,Inf] %count% วัน" - week: "[1,Inf] %count% สัปดาห์" - month: "[1,Inf] %count% เดือน" - year: "[1,Inf] %count% ปี" - past: "%value%ที่แล้ว" - future: "อีก %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php new file mode 100644 index 0000000..8b58d1e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] şimdi', + 'future' => '[0,Inf] şimdi', + ], + 'second' => [ + 'past' => '[0,1] %count% saniye önce|[2,Inf] %count% saniye önce', + 'future' => '[0,1] %count% saniye sonra|[2,Inf] %count% saniye sonra', + ], + 'minute' => [ + 'past' => '{1} %count% dakika önce|[2,Inf] %count% dakika önce', + 'future' => '{1} %count% dakika sonra|[2,Inf] %count% dakika sonra', + ], + 'hour' => [ + 'past' => '{1} %count% saat önce|[2,Inf] %count% saat önce', + 'future' => '{1} %count% saat sonra|[2,Inf] %count% saat sonra', + ], + 'day' => [ + 'past' => '{1} %count% gün önce|[2,Inf] %count% gün önce', + 'future' => '{1} %count% gün sonra|[2,Inf] %count% gün sonra', + ], + 'week' => [ + 'past' => '{1} %count% hafta önce|[2,Inf] %count% hafta önce', + 'future' => '{1} %count% hafta sonra|[2,Inf] %count% hafta sonra', + ], + 'month' => [ + 'past' => '{1} %count% ay önce|[2,Inf] %count% ay önce', + 'future' => '{1} %count% ay sonra|[2,Inf] %count% ay sonra', + ], + 'year' => [ + 'past' => '{1} %count% yıl önce|[2,Inf] %count% yıl önce', + 'future' => '{1} %count% yıl sonra|[2,Inf] %count% yıl sonra', + ], + 'compound' => [ + 'second' => '[0,1] %count% saniye|[2,Inf] %count% saniye', + 'minute' => '{1} %count% dakika|[2,Inf] %count% dakika', + 'hour' => '{1} %count% saat|[2,Inf] %count% saat', + 'day' => '{1} %count% gün|[2,Inf] %count% gün', + 'week' => '{1} %count% hafta|[2,Inf] %count% hafta', + 'month' => '{1} %count% ay|[2,Inf] %count% ay', + 'year' => '{1} %count% yıl|[2,Inf] %count% yıl', + 'past' => '%value% önce', + 'future' => '%value% sonra', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml deleted file mode 100644 index 04325cf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] şimdi" - future: "[0,Inf] şimdi" -second: - past: "[0,1] %count% saniye önce|[2,Inf] %count% saniye önce" - future: "[0,1] %count% saniye sonra|[2,Inf] %count% saniye sonra" -minute: - past: "{1} %count% dakika önce|[2,Inf] %count% dakika önce" - future: "{1} %count% dakika sonra|[2,Inf] %count% dakika sonra" -hour: - past: "{1} %count% saat önce|[2,Inf] %count% saat önce" - future: "{1} %count% saat sonra|[2,Inf] %count% saat sonra" -day: - past: "{1} %count% gün önce|[2,Inf] %count% gün önce" - future: "{1} %count% gün sonra|[2,Inf] %count% gün sonra" -week: - past: "{1} %count% hafta önce|[2,Inf] %count% hafta önce" - future: "{1} %count% hafta sonra|[2,Inf] %count% hafta sonra" -month: - past: "{1} %count% ay önce|[2,Inf] %count% ay önce" - future: "{1} %count% ay sonra|[2,Inf] %count% ay sonra" -year: - past: "{1} %count% yıl önce|[2,Inf] %count% yıl önce" - future: "{1} %count% yıl sonra|[2,Inf] %count% yıl sonra" - -compound: - second: "[0,1] %count% saniye|[2,Inf] %count% saniye" - minute: "{1} %count% dakika|[2,Inf] %count% dakika" - hour: "{1} %count% saat|[2,Inf] %count% saat" - day: "{1} %count% gün|[2,Inf] %count% gün" - week: "{1} %count% hafta|[2,Inf] %count% hafta" - month: "{1} %count% ay|[2,Inf] %count% ay" - year: "{1} %count% yıl|[2,Inf] %count% yıl" - past: "%value% önce" - future: "%value% sonra" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php new file mode 100644 index 0000000..22499b5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] зараз', + 'future' => '[0,Inf] зараз', + ], + 'second' => [ + 'past' => '%count% секунду тому|%count% секунди тому|%count% секунд тому', + 'future' => 'через %count% секунду|через %count% секунди|через %count% секунд', + ], + 'minute' => [ + 'past' => '%count% хвилину тому|%count% хвилини тому|%count% хвилин тому', + 'future' => 'через %count% хвилину|через %count% хвилини|через %count% хвилин', + ], + 'hour' => [ + 'past' => '%count% годину тому|%count% години тому|%count% годин тому', + 'future' => 'через %count% годину|через %count% години|через %count% годин', + ], + 'day' => [ + 'past' => '%count% день тому|%count% дні тому|%count% днів тому', + 'future' => 'через %count% день|через %count% дні|через %count% днів', + ], + 'week' => [ + 'past' => '%count% тиждень тому|%count% тижні тому|%count% тижнів тому', + 'future' => 'через %count% тиждень|через %count% тижні|через %count% тижнів', + ], + 'month' => [ + 'past' => '%count% місяць тому|%count% місяці тому|%count% місяців тому', + 'future' => 'через %count% місяць|через %count% місяці|через %count% місяців', + ], + 'year' => [ + 'past' => '%count% рік тому|%count% роки тому|%count% років тому', + 'future' => 'через %count% рік|через %count% роки|через %count% років', + ], + 'compound' => [ + 'second' => '%count% секунда|%count% секунди|%count% секунд', + 'minute' => '%count% хвилина|%count% хвилини|%count% хвилин', + 'hour' => '%count% година|%count% години|%count% годин', + 'day' => '%count% день|%count% дні|%count% днів', + 'week' => '%count% тиждень|%count% тижні|%count% тижнів', + 'month' => '%count% місяць|%count% місяця|%count% місяців', + 'year' => '%count% рік|%count% роки|%count% років', + 'past' => '%value% тому', + 'future' => 'через %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml deleted file mode 100644 index 58b6daf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] зараз" - future: "[0,Inf] зараз" -second: - past: "%count% секунду тому|%count% секунди тому|%count% секунд тому" - future: "через %count% секунду|через %count% секунди|через %count% секунд" -minute: - past: "%count% хвилину тому|%count% хвилини тому|%count% хвилин тому" - future: "через %count% хвилину|через %count% хвилини|через %count% хвилин" -hour: - past: "%count% годину тому|%count% години тому|%count% годин тому" - future: "через %count% годину|через %count% години|через %count% годин" -day: - past: "%count% день тому|%count% дні тому|%count% днів тому" - future: "через %count% день|через %count% дні|через %count% днів" -week: - past: "%count% тиждень тому|%count% тижні тому|%count% тижнів тому" - future: "через %count% тиждень|через %count% тижні|через %count% тижнів" -month: - past: "%count% місяць тому|%count% місяці тому|%count% місяців тому" - future: "через %count% місяць|через %count% місяці|через %count% місяців" -year: - past: "%count% рік тому|%count% роки тому|%count% років тому" - future: "через %count% рік|через %count% роки|через %count% років" - -compound: - second: "%count% секунда|%count% секунди|%count% секунд" - minute: "%count% хвилина|%count% хвилини|%count% хвилин" - hour: "%count% година|%count% години|%count% годин" - day: "%count% день|%count% дні|%count% днів" - week: "%count% тиждень|%count% тижні|%count% тижнів" - month: "%count% місяць|%count% місяця|%count% місяців" - year: "%count% рік|%count% роки|%count% років" - past: "%value% тому" - future: "через %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php new file mode 100644 index 0000000..2833fef --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] 刚刚', + 'future' => '[0,Inf] 刚刚', + ], + 'second' => [ + 'past' => '[1,Inf] %count% 秒前', + 'future' => '[1,Inf] %count% 秒后', + ], + 'minute' => [ + 'past' => '[1,Inf] %count% 分钟前', + 'future' => '[1,Inf] %count% 分钟后', + ], + 'hour' => [ + 'past' => '[1,Inf] %count% 小时前', + 'future' => '[1,Inf] %count% 小时后', + ], + 'day' => [ + 'past' => '[1,Inf] %count% 天前', + 'future' => '[1,Inf] %count% 天后', + ], + 'week' => [ + 'past' => '[1,Inf] %count% 周前', + 'future' => '[1,Inf] %count% 周后', + ], + 'month' => [ + 'past' => '[1,Inf] %count% 个月前', + 'future' => '[1,Inf] %count% 个月后', + ], + 'year' => [ + 'past' => '[1,Inf] %count% 年前', + 'future' => '[1,Inf] %count% 年后', + ], + 'compound' => [ + 'second' => '[0,Inf] %count% 秒', + 'minute' => '[1,Inf] %count% 分钟', + 'hour' => '[1,Inf] %count% 小时', + 'day' => '[1,Inf] %count% 天', + 'week' => '[1,Inf] %count% 周', + 'month' => '[1,Inf] %count% 个月', + 'year' => '[1,Inf] %count% 年', + 'past' => '%value%前', + 'future' => '%value%后', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml deleted file mode 100644 index d0bddc5..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] 刚刚" - future: "[0,Inf] 刚刚" -second: - past: "[1,Inf] %count% 秒前" - future: "[1,Inf] %count% 秒后" -minute: - past: "[1,Inf] %count% 分钟前" - future: "[1,Inf] %count% 分钟后" -hour: - past: "[1,Inf] %count% 小时前" - future: "[1,Inf] %count% 小时后" -day: - past: "[1,Inf] %count% 天前" - future: "[1,Inf] %count% 天后" -week: - past: "[1,Inf] %count% 周前" - future: "[1,Inf] %count% 周后" -month: - past: "[1,Inf] %count% 个月前" - future: "[1,Inf] %count% 个月后" -year: - past: "[1,Inf] %count% 年前" - future: "[1,Inf] %count% 年后" - -compound: - second: "[0,Inf] %count% 秒" - minute: "[1,Inf] %count% 分钟" - hour: "[1,Inf] %count% 小时" - day: "[1,Inf] %count% 天" - week: "[1,Inf] %count% 周" - month: "[1,Inf] %count% 个月" - year: "[1,Inf] %count% 年" - past: "%value%前" - future: "%value%后" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php new file mode 100644 index 0000000..011ce66 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] 剛剛', + 'future' => '[0,Inf] 剛剛', + ], + 'second' => [ + 'past' => '[1,Inf] %count% 秒前', + 'future' => '[1,Inf] %count% 秒後', + ], + 'minute' => [ + 'past' => '[1,Inf] %count% 分鐘前', + 'future' => '[1,Inf] %count% 分鐘後', + ], + 'hour' => [ + 'past' => '[1,Inf] %count% 小時前', + 'future' => '[1,Inf] %count% 小時後', + ], + 'day' => [ + 'past' => '[1,Inf] %count% 天前', + 'future' => '[1,Inf] %count% 天後', + ], + 'week' => [ + 'past' => '[1,Inf] %count% 週前', + 'future' => '[1,Inf] %count% 週後', + ], + 'month' => [ + 'past' => '[1,Inf] %count% 個月前', + 'future' => '[1,Inf] %count% 個月後', + ], + 'year' => [ + 'past' => '[1,Inf] %count% 年前', + 'future' => '[1,Inf] %count% 年後', + ], + 'compound' => [ + 'second' => '[0,Inf] %count% 秒', + 'minute' => '[1,Inf] %count% 分鐘', + 'hour' => '[1,Inf] %count% 小時', + 'day' => '[1,Inf] %count% 天', + 'week' => '[1,Inf] %count% 週', + 'month' => '[1,Inf] %count% 個月', + 'year' => '[1,Inf] %count% 年', + 'past' => '%value%前', + 'future' => '%value%後', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml deleted file mode 100644 index b11a092..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] 剛剛" - future: "[0,Inf] 剛剛" -second: - past: "[1,Inf] %count% 秒前" - future: "[1,Inf] %count% 秒後" -minute: - past: "[1,Inf] %count% 分鐘前" - future: "[1,Inf] %count% 分鐘後" -hour: - past: "[1,Inf] %count% 小時前" - future: "[1,Inf] %count% 小時後" -day: - past: "[1,Inf] %count% 天前" - future: "[1,Inf] %count% 天後" -week: - past: "[1,Inf] %count% 週前" - future: "[1,Inf] %count% 週後" -month: - past: "[1,Inf] %count% 個月前" - future: "[1,Inf] %count% 個月後" -year: - past: "[1,Inf] %count% 年前" - future: "[1,Inf] %count% 年後" - -compound: - second: "[0,Inf] %count% 秒" - minute: "[1,Inf] %count% 分鐘" - hour: "[1,Inf] %count% 小時" - day: "[1,Inf] %count% 天" - week: "[1,Inf] %count% 週" - month: "[1,Inf] %count% 個月" - year: "[1,Inf] %count% 年" - past: "%value%前" - future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php new file mode 100644 index 0000000..23c9f36 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php @@ -0,0 +1,7 @@ + '%first% a %second%', + 'comma_separated' => '%list%, a %last%', + 'comma_separated_with_limit' => '[1,4] %list%, a %count% další|[5,Inf] %list%, a %count% dalších', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml deleted file mode 100644 index 2075228..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% a %second%" -comma_separated: "%list%, a %last%" -comma_separated_with_limit: "[1,4] %list%, a %count% další|[5,Inf] %list%, a %count% dalších" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php new file mode 100644 index 0000000..e5d4ce8 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php @@ -0,0 +1,7 @@ + '%first% og %second%', + 'comma_separated' => '%list%, og %last%', + 'comma_separated_with_limit' => '{1} %list%, og 1 anden|[2,Inf] %list%, og %count% andre', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml deleted file mode 100644 index ecf652e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% og %second%" -comma_separated: "%list%, og %last%" -comma_separated_with_limit: "{1} %list%, og 1 anden|[2,Inf] %list%, og %count% andre" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php new file mode 100644 index 0000000..c6c07f3 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php @@ -0,0 +1,7 @@ + '%first% and %second%', + 'comma_separated' => '%list%, and %last%', + 'comma_separated_with_limit' => '{1} %list%, and 1 other|[2,Inf] %list%, and %count% others', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml deleted file mode 100644 index 22eb5cf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% and %second%" -comma_separated: "%list%, and %last%" -comma_separated_with_limit: "{1} %list%, and 1 other|[2,Inf] %list%, and %count% others" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php new file mode 100644 index 0000000..618a233 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php @@ -0,0 +1,7 @@ + '%first% y %second%', + 'comma_separated' => '%list%, y %last%', + 'comma_separated_with_limit' => '{1} %list%, y 1 más|[2,Inf] %list%, y %count% más', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml deleted file mode 100644 index 1335e9f..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% y %second%" -comma_separated: "%list%, y %last%" -comma_separated_with_limit: "{1} %list%, y 1 más|[2,Inf] %list%, y %count% más" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php new file mode 100644 index 0000000..0ff0dc2 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php @@ -0,0 +1,7 @@ + '%first% et %second%', + 'comma_separated' => '%list% et %last%', + 'comma_separated_with_limit' => '{1} %list% et 1 autre|[2,Inf] %list% et %count% autres', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml deleted file mode 100644 index d44e036..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% et %second%" -comma_separated: "%list% et %last%" -comma_separated_with_limit: "{1} %list% et 1 autre|[2,Inf] %list% et %count% autres" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php new file mode 100644 index 0000000..5cc8a46 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php @@ -0,0 +1,7 @@ + '%first% dan %second%', + 'comma_separated' => '%list%, dan %last%', + 'comma_separated_with_limit' => '{1} %list%, dan 1 lainnya|[2,Inf] %list%, dan %count% lainnya', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml deleted file mode 100644 index 3ff1323..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% dan %second%" -comma_separated: "%list%, dan %last%" -comma_separated_with_limit: "{1} %list%, dan 1 lainnya|[2,Inf] %list%, dan %count% lainnya" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php new file mode 100644 index 0000000..a135f18 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php @@ -0,0 +1,7 @@ + '%first% e %second%', + 'comma_separated' => '%list% e %last%', + 'comma_separated_with_limit' => '{1} %list% ed un altro|[2,Inf] %list% e %count% altri', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml deleted file mode 100644 index 9441aad..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% e %second%" -comma_separated: "%list% e %last%" -comma_separated_with_limit: "{1} %list% ed un altro|[2,Inf] %list% e %count% altri" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php new file mode 100644 index 0000000..d5ba791 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php @@ -0,0 +1,7 @@ + '%first% と %second%', + 'comma_separated' => '%list% と %last%', + 'comma_separated_with_limit' => '{1} %list% ともうひとり|[2,Inf] %list% ともう %count% 人', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml deleted file mode 100644 index 378f91a..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% と %second%" -comma_separated: "%list% と %last%" -comma_separated_with_limit: "{1} %list% ともうひとり|[2,Inf] %list% ともう %count% 人" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php new file mode 100644 index 0000000..22c5601 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php @@ -0,0 +1,7 @@ + '%first% en %second%', + 'comma_separated' => '%list%, en %last%', + 'comma_separated_with_limit' => '{1} %list%, en 1 andere|[2,Inf] %list%, en %count% andere', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml deleted file mode 100644 index 0ba299b..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% en %second%" -comma_separated: "%list%, en %last%" -comma_separated_with_limit: "{1} %list%, en 1 andere|[2,Inf] %list%, en %count% andere" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php new file mode 100644 index 0000000..3f49e92 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php @@ -0,0 +1,7 @@ + '%first% i %second%', + 'comma_separated' => '%list% i %last%', + 'comma_separated_with_limit' => '{1} %list% i 1 inny|[2,Inf] %list% i %count% innych', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml deleted file mode 100644 index 6a999c0..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% i %second%" -comma_separated: "%list% i %last%" -comma_separated_with_limit: "{1} %list% i 1 inny|[2,Inf] %list% i %count% innych" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php new file mode 100644 index 0000000..451e09c --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php @@ -0,0 +1,7 @@ + '%first% și %second%', + 'comma_separated' => '%list% și %last%', + 'comma_separated_with_limit' => '{1} %list% și încă unul|[2,Inf] %list% și %count% alții', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml deleted file mode 100644 index e991007..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% și %second%" -comma_separated: "%list% și %last%" -comma_separated_with_limit: "{1} %list% și încă unul|[2,Inf] %list% și %count% alții" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php new file mode 100644 index 0000000..5d688d1 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php @@ -0,0 +1,7 @@ + '%first% и %second%', + 'comma_separated' => '%list% и %last%', + 'comma_separated_with_limit' => '{1} %list% и ещё 1|[2,Inf] %list% и ещё %count%', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml deleted file mode 100644 index 903c661..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% и %second%" -comma_separated: "%list% и %last%" -comma_separated_with_limit: "{1} %list% и ещё 1|[2,Inf] %list% и ещё %count%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php new file mode 100644 index 0000000..915779e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php @@ -0,0 +1,7 @@ + '%first% a %second%', + 'comma_separated' => '%list%, a %last%', + 'comma_separated_with_limit' => '[1,4] %list%, a %count% ďalší|[5,Inf] %list%, a %count% ďalších', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml deleted file mode 100644 index d47f17b..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% a %second%" -comma_separated: "%list%, a %last%" -comma_separated_with_limit: "[1,4] %list%, a %count% ďalší|[5,Inf] %list%, a %count% ďalších" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php new file mode 100644 index 0000000..5d282c4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php @@ -0,0 +1,7 @@ + '%first% และ %second%', + 'comma_separated' => '%list% และ %last%', + 'comma_separated_with_limit' => '{1} %list% และอีก 1|[2,Inf] %list% และอีก %count%', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml deleted file mode 100644 index 02dc12e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% และ %second%" -comma_separated: "%list% และ %last%" -comma_separated_with_limit: "{1} %list% และอีก 1|[2,Inf] %list% และอีก %count%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php new file mode 100644 index 0000000..77a11cb --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php @@ -0,0 +1,7 @@ + '%first% та %second%', + 'comma_separated' => '%list% та %last%', + 'comma_separated_with_limit' => '{1} %list% і ще 1|[2,Inf] %list% і ще %count%', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml deleted file mode 100644 index 117fba9..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% та %second%" -comma_separated: "%list% та %last%" -comma_separated_with_limit: "{1} %list% і ще 1|[2,Inf] %list% і ще %count%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php new file mode 100644 index 0000000..5b7d1eb --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php @@ -0,0 +1,7 @@ + '%first% 和 %second%', + 'comma_separated' => '%list%, 和 %last%', + 'comma_separated_with_limit' => '{1} %list% 和另一个|[2,Inf] %list% 和另 %count% 个', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml deleted file mode 100644 index 1bf660e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% 和 %second%" -comma_separated: "%list%, 和 %last%" -comma_separated_with_limit: "{1} %list% 和另一个|[2,Inf] %list% 和另 %count% 个" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php new file mode 100644 index 0000000..633ae70 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php @@ -0,0 +1,7 @@ + '%first% 和 %second%', + 'comma_separated' => '%list%, 和 %last%', + 'comma_separated_with_limit' => '{1} %list% 和另一個|[2,Inf] %list% 和另 %count% 個', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml deleted file mode 100644 index 61dc201..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% 和 %second%" -comma_separated: "%list%, 和 %last%" -comma_separated_with_limit: "{1} %list% 和另一個|[2,Inf] %list% 和另 %count% 個" diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 5eb04f1..7fb7dcf 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -11,7 +11,7 @@ namespace Coduo\PHPHumanizer\Translator; -use Symfony\Component\Translation\Loader\YamlFileLoader; +use Symfony\Component\Translation\Loader\PhpFileLoader; use Symfony\Component\Translation\Translator; final class Builder @@ -25,16 +25,16 @@ public static function build(string $locale) : Translator { if (!isset(self::$translators[$locale])) { $translator = new Translator($locale); - $translator->addLoader('yml', new YamlFileLoader()); + $translator->addLoader('php', new PhpFileLoader()); $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); - $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.php$/'); /** @var \SplFileInfo $file */ foreach ($filter as $file) { - $resourceName = $file->getBasename('.yml'); + $resourceName = $file->getBasename('.php'); [$fileDomain, $fileLocale] = \explode('.', $resourceName); - $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); + $translator->addResource('php', $file->getPathname(), $fileLocale, $fileDomain); } self::$translators[$locale] = $translator; diff --git a/tools/composer.lock b/tools/composer.lock index 7fdbcf4..1edbe03 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -746,16 +746,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.15", + "version": "1.12.16", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1" + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1", - "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9", + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9", "shasum": "" }, "require": { @@ -800,7 +800,7 @@ "type": "github" } ], - "time": "2025-01-05T16:40:22+00:00" + "time": "2025-01-21T14:50:05+00:00" }, { "name": "phpunit/php-code-coverage", From a88623964a2f8bdd801a8fa5b7a6e7c56d32d50e Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 25 Jan 2025 02:32:49 +0000 Subject: [PATCH 69/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acc422e..cad8604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-01-20 +## [Unreleased] - 2025-01-25 ### Fixed - [76e7b6](https://github.com/coduo/php-humanizer/commit/76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9) - **failing tests** - [@norberttech](https://github.com/norberttech) @@ -6,6 +6,9 @@ ### Updated - [fb621f](https://github.com/coduo/php-humanizer/commit/fb621fda3e73428af8bba55f697c51daf002580b) - **project to PHP 8.4** - [@norberttech](https://github.com/norberttech) +### Removed +- [#136](https://github.com/coduo/php-humanizer/pull/136) - **symfony/yaml dependency** - [@norberttech](https://github.com/norberttech) + ## [5.0.0] - 2024-04-11 ### Added From 8c5c8c4d9d4e1bd68322b5ddc65e0afe8f3f4658 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 25 Jan 2025 02:35:17 +0000 Subject: [PATCH 70/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cad8604..94398e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-01-25 +## [5.0.1] - 2025-01-25 ### Fixed - [76e7b6](https://github.com/coduo/php-humanizer/commit/76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9) - **failing tests** - [@norberttech](https://github.com/norberttech) From 3b9f3cfdd1db5b3fd83bb4577e514798eb219c80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Jan 2025 21:37:31 -0600 Subject: [PATCH 71/87] Bump aeon-php/calendar from 1.0.9 to 1.0.11 (#137) Bumps [aeon-php/calendar](https://github.com/aeon-php/calendar) from 1.0.9 to 1.0.11. - [Release notes](https://github.com/aeon-php/calendar/releases) - [Commits](https://github.com/aeon-php/calendar/compare/1.0.9...1.0.11) --- updated-dependencies: - dependency-name: aeon-php/calendar dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/composer.lock b/composer.lock index 85fbb82..0fa54d2 100644 --- a/composer.lock +++ b/composer.lock @@ -330,20 +330,20 @@ "packages-dev": [ { "name": "aeon-php/calendar", - "version": "1.0.9", + "version": "1.0.11", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" + "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/41f4b0ff07247c36b232ddfbcddc62af738be6fe", + "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe", "shasum": "" }, "require": { - "php": "~8.1.10 || ~8.2" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "ext-bcmath": "*", @@ -374,9 +374,19 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.9" + "source": "https://github.com/aeon-php/calendar/tree/1.0.11" }, - "time": "2023-08-29T09:47:37+00:00" + "funding": [ + { + "url": "https://flow-php.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/norberttech", + "type": "github" + } + ], + "time": "2025-01-24T04:47:09+00:00" }, { "name": "thunderer/shortcode", @@ -437,12 +447,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "~8.2 || ~8.3 || ~8.4" }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" + "platform-dev": [], + "plugin-api-version": "2.3.0" } From 04d0eef24d0d46bdea6a13b3d1dbd3a8a178fdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9as=20Lundgren?= <1066486+adevade@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:50:59 +0100 Subject: [PATCH 72/87] Add Swedish translations (#138) --- .../Resources/translations/difference.sv.php | 47 +++++++++++++++++++ .../Resources/translations/oxford.sv.php | 7 +++ .../Tests/DateTimeHumanizerTest.php | 44 +++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php new file mode 100644 index 0000000..9945a5b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] nyss', + 'future' => '[0,Inf] nyss', + ], + 'second' => [ + 'past' => '{0} för 0 sekunder sedan|{1} för 1 sekund sedan|[2,Inf] för %count% sekunder sedan', + 'future' => '{0} om 0 sekunder|{1} om 1 sekund|[2,Inf] om %count% sekunder', + ], + 'minute' => [ + 'past' => '{0} för 0 minuter sedan|{1} för 1 minut sedan|[2,Inf] för %count% minuter sedan', + 'future' => '{0} om 0 minuter|{1} om 1 minut|[2,Inf] om %count% minuter', + ], + 'hour' => [ + 'past' => '{0} för 0 timmar sedan|{1} för 1 timme sedan|[2,Inf] för %count% timmar sedan', + 'future' => '{0} om 0 timmar|{1} om 1 timme|[2,Inf] om %count% timmar', + ], + 'day' => [ + 'past' => '{0} för 0 dagar sedan|{1} för 1 dag sedan|[2,Inf] för %count% dagar sedan', + 'future' => '{0} om 0 dagar|{1} om 1 dag|[2,Inf] om %count% dagar', + ], + 'week' => [ + 'past' => '{0} för 0 veckor sedan|{1} för 1 vecka sedan|[2,Inf] för %count% veckor sedan', + 'future' => '{0} om 0 veckor|{1} om 1 vecka|[2,Inf] om %count% veckor', + ], + 'month' => [ + 'past' => '{0} för 0 månader sedan|{1} för 1 månad sedan|[2,Inf] för %count% månader sedan', + 'future' => '{0} om 0 månader|{1} om 1 månad|[2,Inf] om %count% månader', + ], + 'year' => [ + 'past' => '[0,Inf] för %count% år sedan', + 'future' => '[0,Inf] om %count% år', + ], + 'compound' => [ + 'second' => '{0} 0 sekunder|{1} 1 sekund|[2,Inf] %count% sekunder', + 'minute' => '{0} 0 minuter|{1} 1 minut|[2,Inf] %count% minuter', + 'hour' => '{0} 0 timmar|{1} 1 timme|[2,Inf] %count% timmar', + 'day' => '{0} 0 dagar|{1} 1 dag|[2,Inf] %count% dagar', + 'week' => '{0} 0 veckor|{1} 1 vecka|[2,Inf] %count% veckor', + 'month' => '{0} 0 månader|{1} 1 månad|[2,Inf] %count% månader', + 'year' => '[0,Inf] %count% år', + 'past' => 'för %value% sedan', + 'future' => 'om %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php new file mode 100644 index 0000000..5df6ada --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php @@ -0,0 +1,7 @@ + '%first% och %second%', + 'comma_separated' => '%list%, och %last%', + 'comma_separated_with_limit' => '[1,Inf] %list%, och %count% till', +]; diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 600f06a..72ca15f 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -236,6 +236,25 @@ public static function humanizeDataProvider() : array ['2014-05-01', '2014-04-01', '1 ヶ月前', 'ja'], ['2015-05-01', '2014-04-01', '1 年前', 'ja'], ['2014-05-01', '2016-04-01', '2 年後', 'ja'], + + // Swedish + ['2014-04-26 13:00:00', '2014-04-26 13:00:00', 'nyss', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 13:00:05', 'om 5 sekunder', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 12:59:00', 'för 1 minut sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 12:45:00', 'för 15 minuter sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 13:15:00', 'om 15 minuter', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 14:00:00', 'om 1 timme', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 15:00:00', 'om 2 timmar', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 12:00:00', 'för 1 timme sedan', 'sv'], + ['2014-04-26', '2014-04-25', 'för 1 dag sedan', 'sv'], + ['2014-04-26', '2014-04-24', 'för 2 dagar sedan', 'sv'], + ['2014-04-26', '2014-04-28', 'om 2 dagar', 'sv'], + ['2014-04-01', '2014-04-15', 'om 2 veckor', 'sv'], + ['2014-04-15', '2014-04-07', 'för 1 vecka sedan', 'sv'], + ['2014-01-01', '2014-04-01', 'om 3 månader', 'sv'], + ['2014-05-01', '2014-04-01', 'för 1 månad sedan', 'sv'], + ['2015-05-01', '2014-04-01', 'för 1 år sedan', 'sv'], + ['2014-05-01', '2016-04-01', 'om 2 år', 'sv'], ]; } @@ -431,6 +450,16 @@ public static function preciseDifferenceDataProvider() : array ['2014-04-26 13:00:00', '2014-04-28 23:00:00', '2 日, 10 時間後', 'ja'], ['2014-04-26 13:00:00', '2014-04-25 11:20:00', '1 日, 1 時間, 40 分前', 'ja'], ['2014-04-26 13:00:00', '2016-04-27 13:00:00', '2 年, 1 日後', 'ja'], + + // Swedish + ['2014-04-26 13:00:00', '2014-04-26 12:58:15', 'för 1 minut, 45 sekunder sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 11:20:00', 'för 1 timme, 40 minuter sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-27 13:15:00', 'om 1 dag, 15 minuter', 'sv'], + ['2014-04-26 13:00:00', '2014-05-03 15:00:00', 'om 7 dagar, 2 timmar', 'sv'], + ['2014-04-26 13:00:00', '2015-04-28 17:00:00', 'om 1 år, 2 dagar, 4 timmar', 'sv'], + ['2014-04-26 13:00:00', '2014-04-28 23:00:00', 'om 2 dagar, 10 timmar', 'sv'], + ['2014-04-26 13:00:00', '2014-04-25 11:20:00', 'för 1 dag, 1 timme, 40 minuter sedan', 'sv'], + ['2014-04-26 13:00:00', '2016-04-27 13:00:00', 'om 2 år, 1 dag', 'sv'], ]; } @@ -466,6 +495,21 @@ public static function timeUnitDataProvider() : array 'pl', ], [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'], + + // Swedish + [TimeUnit::seconds(20), '20 sekunder', 'sv'], + [TimeUnit::minutes(20), '20 minuter', 'sv'], + [TimeUnit::minutes(20)->add(TimeUnit::seconds(5)), '20 minuter och 5 sekunder', 'sv'], + [ + TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)), + '2 dagar, 3 timmar, 25 minuter, och 30.2 sekunder', + 'sv', + ], + [RelativeTimeUnit::months(14), '1 år och 2 månader', 'sv'], ]; } From 8873082ace4660527641d6306513315e45087270 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 6 Feb 2025 15:51:17 +0000 Subject: [PATCH 73/87] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94398e9..77a15a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2025-02-06 + +### Added +- [#138](https://github.com/coduo/php-humanizer/pull/138) - **Add Swedish translations** - [@adevade](https://github.com/adevade) + ## [5.0.1] - 2025-01-25 ### Fixed @@ -341,6 +346,7 @@ - @4t87ux8 - @a-ungurianu +- @adevade - @arrowrowe - @Borales - @brianwozeniak From 8c20bccb84a0dd54d007135036eb0aac82f1f8b6 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 6 Feb 2025 16:18:01 +0000 Subject: [PATCH 74/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77a15a5..97a4fa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-02-06 +## [5.0.2] - 2025-02-06 ### Added - [#138](https://github.com/coduo/php-humanizer/pull/138) - **Add Swedish translations** - [@adevade](https://github.com/adevade) From f9020c281ff2767d02b140ef1762ebd5b767e27b Mon Sep 17 00:00:00 2001 From: Watheq Alshowaiter Date: Wed, 19 Feb 2025 12:32:41 +0300 Subject: [PATCH 75/87] Update README.md (#139) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55c25a5..effd462 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ composer require coduo/php-humanizer use Coduo\PHPHumanizer\StringHumanizer; StringHumanizer::humanize('field_name'); // "Field Name" -StringHumanizer::humanize('user_id'); // "User" +StringHumanizer::humanize('user_id'); // "User id" StringHumanizer::humanize('field_name', false); // "field name" ``` From 90ff108897b951fd4db4dc3c9b387e8c93cef7db Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 19 Feb 2025 09:33:03 +0000 Subject: [PATCH 76/87] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97a4fa8..cc9ab9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2025-02-19 + +### Fixed +- [#139](https://github.com/coduo/php-humanizer/pull/139) - **Readme typo** - [@WatheqAlshowaiter](https://github.com/WatheqAlshowaiter) + ## [5.0.2] - 2025-02-06 ### Added @@ -392,5 +397,6 @@ - @thunderer - @vinicius73 - @vinkla +- @WatheqAlshowaiter Generated by [Automation](https://github.com/aeon-php/automation) \ No newline at end of file From a57436fe67225e35dab6741b1451d46964afe383 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 12:18:06 +0100 Subject: [PATCH 77/87] Bump symfony/translation from 7.2.2 to 7.2.4 (#140) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.2.2 to 7.2.4. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.2/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.2.2...v7.2.4) --- updated-dependencies: - dependency-name: symfony/translation dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 0fa54d2..5d44bf5 100644 --- a/composer.lock +++ b/composer.lock @@ -155,16 +155,16 @@ }, { "name": "symfony/translation", - "version": "v7.2.2", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923" + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e2674a30132b7cc4d74540d6c2573aa363f05923", - "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923", + "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", "shasum": "" }, "require": { @@ -230,7 +230,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.2" + "source": "https://github.com/symfony/translation/tree/v7.2.4" }, "funding": [ { @@ -246,7 +246,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:18:10+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/translation-contracts", From d48e7187233dc27875307f192b699f12cea73011 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Wed, 5 Mar 2025 09:28:02 +0100 Subject: [PATCH 78/87] Update action cache from @v2 to @v4 in Github Action workflows (#141)

Change Log

Added

Fixed

Changed

  • Update action cache from @v2 to @v4 in Github Action workflows

Removed

Deprecated

Security


Description

--- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/coduo/php-humanizer?shareId=XXXX-XXXX-XXXX-XXXX). --- .github/workflows/changelog-update.yml | 2 +- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml index 603fb4b..f00f848 100644 --- a/.github/workflows/changelog-update.yml +++ b/.github/workflows/changelog-update.yml @@ -20,7 +20,7 @@ jobs: uses: "actions/checkout@v2" - name: "Restore Automation cache" - uses: "actions/cache@v2" + uses: "actions/cache@v4" with: path: | cache diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index c7f27f0..7970e56 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -41,7 +41,7 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: "Cache Composer dependencies" - uses: "actions/cache@v2" + uses: "actions/cache@v4" with: path: | ${{ steps.composer-cache.outputs.dir }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 02651fc..40e9975 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -45,7 +45,7 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: "Cache Composer dependencies" - uses: "actions/cache@v2" + uses: "actions/cache@v4" with: path: | ${{ steps.composer-cache.outputs.dir }} From b7d798315b5e07d0bc33d847b16e267178e3ad62 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 5 Mar 2025 08:28:15 +0000 Subject: [PATCH 79/87] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc9ab9b..4d299bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ -## [Unreleased] - 2025-02-19 +## [Unreleased] - 2025-03-05 + +### Changed +- [#141](https://github.com/coduo/php-humanizer/pull/141) - **Update action cache from @v2 to @v4 in Github Action workflows** - [@norberttech](https://github.com/norberttech) ### Fixed - [#139](https://github.com/coduo/php-humanizer/pull/139) - **Readme typo** - [@WatheqAlshowaiter](https://github.com/WatheqAlshowaiter) From d9b22dca2344d06b89ee30313a3e898fa1a12b6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 11:35:47 +0200 Subject: [PATCH 80/87] Bump symfony/translation from 7.2.4 to 7.2.6 (#142) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.2.4 to 7.2.6. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.2/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.2.4...v7.2.6) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.2.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index 5d44bf5..a05e0dd 100644 --- a/composer.lock +++ b/composer.lock @@ -75,19 +75,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -135,7 +136,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -151,20 +152,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/translation", - "version": "v7.2.4", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", + "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", "shasum": "" }, "require": { @@ -230,7 +231,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.4" + "source": "https://github.com/symfony/translation/tree/v7.2.6" }, "funding": [ { @@ -246,7 +247,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2025-04-07T19:09:28+00:00" }, { "name": "symfony/translation-contracts", From cf2dfe03f62480221f103101c1c697a409577012 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:30:09 +0200 Subject: [PATCH 81/87] Bump symfony/translation from 7.2.6 to 7.3.0 (#143) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.2.6 to 7.3.0. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.3/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.2.6...v7.3.0) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/composer.lock b/composer.lock index a05e0dd..9744cf0 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -30,7 +30,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -55,7 +55,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -71,7 +71,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -156,16 +156,16 @@ }, { "name": "symfony/translation", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", - "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", "shasum": "" }, "require": { @@ -175,6 +175,7 @@ "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { + "nikic/php-parser": "<5.0", "symfony/config": "<6.4", "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", @@ -188,7 +189,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", "symfony/config": "^6.4|^7.0", "symfony/console": "^6.4|^7.0", @@ -231,7 +232,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.6" + "source": "https://github.com/symfony/translation/tree/v7.3.0" }, "funding": [ { @@ -247,20 +248,20 @@ "type": "tidelift" } ], - "time": "2025-04-07T19:09:28+00:00" + "time": "2025-05-29T07:19:49+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "shasum": "" }, "require": { @@ -273,7 +274,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -309,7 +310,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" }, "funding": [ { @@ -325,7 +326,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-27T08:32:26+00:00" } ], "packages-dev": [ From fe04bf1e5ecb5b401d34867dc2261a5f78096242 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Sep 2025 08:51:51 +0200 Subject: [PATCH 82/87] Bump symfony/translation from 7.3.0 to 7.3.3 (#146) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.3.0 to 7.3.3. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.3/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.3.0...v7.3.3) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.3.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/composer.lock b/composer.lock index 9744cf0..9e557c1 100644 --- a/composer.lock +++ b/composer.lock @@ -75,7 +75,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -136,7 +136,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -147,6 +147,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -156,16 +160,16 @@ }, { "name": "symfony/translation", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", + "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", "shasum": "" }, "require": { @@ -232,7 +236,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.0" + "source": "https://github.com/symfony/translation/tree/v7.3.3" }, "funding": [ { @@ -243,12 +247,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-08-01T21:02:37+00:00" }, { "name": "symfony/translation-contracts", @@ -449,12 +457,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "~8.2 || ~8.3 || ~8.4" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } From 9e530aaa20f994e787001ed2821efd95cf01b765 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 11:28:30 +0200 Subject: [PATCH 83/87] Bump symfony/translation from 7.3.3 to 7.3.4 (#147) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.3.3 to 7.3.4. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.3/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.3.3...v7.3.4) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.3.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 9e557c1..486fedd 100644 --- a/composer.lock +++ b/composer.lock @@ -160,16 +160,16 @@ }, { "name": "symfony/translation", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", "shasum": "" }, "require": { @@ -236,7 +236,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.3" + "source": "https://github.com/symfony/translation/tree/v7.3.4" }, "funding": [ { @@ -256,7 +256,7 @@ "type": "tidelift" } ], - "time": "2025-08-01T21:02:37+00:00" + "time": "2025-09-07T11:39:36+00:00" }, { "name": "symfony/translation-contracts", From 17f435fb83b2d8d67424e7b6c39273eefeb63ddd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 11:00:54 +0100 Subject: [PATCH 84/87] Bump aeon-php/calendar from 1.0.11 to 1.0.12 (#148) Bumps [aeon-php/calendar](https://github.com/aeon-php/calendar) from 1.0.11 to 1.0.12. - [Release notes](https://github.com/aeon-php/calendar/releases) - [Commits](https://github.com/aeon-php/calendar/compare/1.0.11...1.0.12) --- updated-dependencies: - dependency-name: aeon-php/calendar dependency-version: 1.0.12 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 486fedd..441678f 100644 --- a/composer.lock +++ b/composer.lock @@ -340,20 +340,20 @@ "packages-dev": [ { "name": "aeon-php/calendar", - "version": "1.0.11", + "version": "1.0.12", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe" + "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/41f4b0ff07247c36b232ddfbcddc62af738be6fe", - "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/10387ea0944ce9ce071a12d60c398ee852de70b8", + "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "ext-bcmath": "*", @@ -384,7 +384,7 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.11" + "source": "https://github.com/aeon-php/calendar/tree/1.0.12" }, "funding": [ { @@ -396,7 +396,7 @@ "type": "github" } ], - "time": "2025-01-24T04:47:09+00:00" + "time": "2025-12-08T14:44:05+00:00" }, { "name": "thunderer/shortcode", From 3a8c407841987a279e4730e57237b037ba5f190f Mon Sep 17 00:00:00 2001 From: Beno!t POLASZEK Date: Thu, 11 Dec 2025 21:13:32 +0100 Subject: [PATCH 85/87] feat: PHP8.5 + SF 8+ support (#149) * feat: PHP8.5 + SF 8+ support * chore: drop PHP 8.2 support --------- Co-authored-by: Benoit POLASZEK <=> --- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 2 +- .gitignore | 3 +- composer.json | 4 +- composer.lock | 468 ----------- .../PHPHumanizer/Collection/Formatter.php | 2 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 +- .../PHPHumanizer/CollectionHumanizer.php | 2 +- .../PHPHumanizer/String/BinarySuffix.php | 2 +- tools/composer.lock | 726 +++++++++++------- 10 files changed, 458 insertions(+), 755 deletions(-) delete mode 100644 composer.lock diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 7970e56..f637e81 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -19,7 +19,7 @@ jobs: dependencies: - "locked" php-version: - - "8.2" + - "8.3" operating-system: - "ubuntu-latest" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 40e9975..9a8e097 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,9 +21,9 @@ jobs: - "lowest" - "highest" php-version: - - "8.2" - "8.3" - "8.4" + - "8.5" operating-system: - "ubuntu-latest" diff --git a/.gitignore b/.gitignore index a69f258..c2ab8cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ vendor/ bin/ -var/ \ No newline at end of file +var/ +composer.lock diff --git a/composer.json b/composer.json index 09a84f6..ad191e7 100644 --- a/composer.json +++ b/composer.json @@ -15,8 +15,8 @@ } ], "require": { - "php": "~8.2 || ~8.3 || ~8.4", - "symfony/translation": "~5.4||~6.4||~7" + "php": "~8.3 || ~8.4 || ~8.5", + "symfony/translation": "~5.4 || ~6.4 || ~7 || ~8" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 441678f..0000000 --- a/composer.lock +++ /dev/null @@ -1,468 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "228b5a151bff2e843fe879dea870439c", - "packages": [ - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-23T08:48:59+00:00" - }, - { - "name": "symfony/translation", - "version": "v7.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "ec25870502d0c7072d086e8ffba1420c85965174" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", - "reference": "ec25870502d0c7072d086e8ffba1420c85965174", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "nikic/php-parser": "<5.0", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-09-07T11:39:36+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com/", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-27T08:32:26+00:00" - } - ], - "packages-dev": [ - { - "name": "aeon-php/calendar", - "version": "1.0.12", - "source": { - "type": "git", - "url": "https://github.com/aeon-php/calendar.git", - "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/10387ea0944ce9ce071a12d60c398ee852de70b8", - "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8", - "shasum": "" - }, - "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" - }, - "require-dev": { - "ext-bcmath": "*", - "ext-pcov": "*" - }, - "suggest": { - "ext-bcmath": "Compare time units with high precision" - }, - "type": "library", - "autoload": { - "psr-4": { - "Aeon\\": [ - "src/Aeon" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP type safe, immutable calendar library", - "keywords": [ - "calendar", - "date", - "datetime", - "immutable", - "time" - ], - "support": { - "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.12" - }, - "funding": [ - { - "url": "https://flow-php.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/norberttech", - "type": "github" - } - ], - "time": "2025-12-08T14:44:05+00:00" - }, - { - "name": "thunderer/shortcode", - "version": "v0.7.6", - "source": { - "type": "git", - "url": "https://github.com/thunderer/Shortcode.git", - "reference": "9f81424b4909007483d93c5defc0917d8a58debd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/9f81424b4909007483d93c5defc0917d8a58debd", - "reference": "9f81424b4909007483d93c5defc0917d8a58debd", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": ">=4.1", - "symfony/yaml": ">=2.0" - }, - "suggest": { - "ext-dom": "if you want to use XML serializer", - "ext-json": "if you want to use JSON serializer", - "symfony/yaml": "if you want to use YAML serializer" - }, - "type": "library", - "autoload": { - "psr-4": { - "Thunder\\Shortcode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tomasz Kowalczyk", - "email": "tomasz@kowalczyk.cc" - } - ], - "description": "Advanced shortcode (BBCode) parser and engine for PHP", - "keywords": [ - "bbcode", - "engine", - "library", - "parser", - "shortcode" - ], - "support": { - "issues": "https://github.com/thunderer/Shortcode/issues", - "source": "https://github.com/thunderer/Shortcode/tree/v0.7.6" - }, - "time": "2024-12-15T21:57:40+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "~8.2 || ~8.3 || ~8.4" - }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" -} diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 79d8eac..57c62e8 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -30,7 +30,7 @@ public function __construct(TranslatorInterface $translator, string $catalogue = * * @param array $collection */ - public function format(array $collection, int $limit = null) : string + public function format(array $collection, ?int $limit = null) : string { $count = \count($collection); diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 2ec61ef..932a297 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -23,7 +23,7 @@ public function __construct(Formatter $formatter) /** * @param array $collection */ - public function format(array $collection, int $limit = null) : string + public function format(array $collection, ?int $limit = null) : string { return $this->formatter->format($collection, $limit); } diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index dc83f80..7077348 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -20,7 +20,7 @@ final class CollectionHumanizer /** * @param array $collection */ - public static function oxford(array $collection, int $limit = null, string $locale = 'en') : string + public static function oxford(array $collection, ?int $limit = null, string $locale = 'en') : string { $oxford = new Oxford( new Formatter(Builder::build($locale)) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index 9332d4a..a522482 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -34,7 +34,7 @@ final class BinarySuffix 0 => '# bytes', ]; - public function __construct(int $number, string $locale = 'en', int $precision = null) + public function __construct(int $number, string $locale = 'en', ?int $precision = null) { if (!\class_exists(\NumberFormatter::class)) { throw new \RuntimeException('Binary suffix converter requires intl extension!'); diff --git a/tools/composer.lock b/tools/composer.lock index 1edbe03..25cea75 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -152,16 +152,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -213,7 +213,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -223,13 +223,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -346,16 +342,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -365,10 +361,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -395,7 +391,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -403,61 +399,61 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.68.1", + "version": "v3.91.3", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff" + "reference": "9f10aa6390cea91da175ea608880e942d7c0226e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff", - "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/9f10aa6390cea91da175ea608880e942d7c0226e", + "reference": "9f10aa6390cea91da175ea608880e942d7c0226e", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", + "clue/ndjson-react": "^1.3", "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.3", + "composer/xdebug-handler": "^3.0.5", "ext-filter": "*", + "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.2", + "fidry/cpu-core-counter": "^1.3", "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", - "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.1 || ^6.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/finder": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/polyfill-mbstring": "^1.31", - "symfony/polyfill-php80": "^1.31", - "symfony/polyfill-php81": "^1.31", - "symfony/process": "^5.4 || ^6.4 || ^7.2", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.4", - "infection/infection": "^0.29.8", - "justinrainbow/json-schema": "^5.3 || ^6.0", - "keradus/cli-executor": "^2.1", + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31.0", + "justinrainbow/json-schema": "^6.5", + "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.7", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", - "phpunit/phpunit": "^9.6.22 || ^10.5.40 || ^11.5.2", - "symfony/var-dumper": "^5.4.48 || ^6.4.15 || ^7.2.0", - "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.2.0" + "php-coveralls/php-coveralls": "^2.9", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", + "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -472,7 +468,7 @@ "PhpCsFixer\\": "src/" }, "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "src/**/Internal/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -498,7 +494,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.91.3" }, "funding": [ { @@ -506,20 +502,20 @@ "type": "github" } ], - "time": "2025-01-17T09:20:36+00:00" + "time": "2025-12-05T19:45:37+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -558,7 +554,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -566,20 +562,20 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -598,7 +594,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -622,9 +618,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phar-io/manifest", @@ -746,16 +742,11 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.16", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "e0bb5cb78545aae631220735aa706eac633a6be9" - }, + "version": "1.12.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9", - "reference": "e0bb5cb78545aae631220735aa706eac633a6be9", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", + "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", "shasum": "" }, "require": { @@ -800,7 +791,7 @@ "type": "github" } ], - "time": "2025-01-21T14:50:05+00:00" + "time": "2025-09-30T10:16:31+00:00" }, { "name": "phpunit/php-code-coverage", @@ -1125,16 +1116,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.41", + "version": "10.5.60", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e76586fa3d49714f230221734b44892e384109d7" + "reference": "f2e26f52f80ef77832e359205f216eeac00e320c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e76586fa3d49714f230221734b44892e384109d7", - "reference": "e76586fa3d49714f230221734b44892e384109d7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f2e26f52f80ef77832e359205f216eeac00e320c", + "reference": "f2e26f52f80ef77832e359205f216eeac00e320c", "shasum": "" }, "require": { @@ -1144,7 +1135,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", @@ -1155,13 +1146,13 @@ "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", + "sebastian/comparator": "^5.0.4", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", + "sebastian/exporter": "^5.1.4", "sebastian/global-state": "^6.0.2", "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", "sebastian/type": "^4.0.0", "sebastian/version": "^4.0.1" }, @@ -1206,7 +1197,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.41" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.60" }, "funding": [ { @@ -1217,12 +1208,20 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2025-01-13T09:33:05+00:00" + "time": "2025-12-06T07:50:42+00:00" }, { "name": "psr/container", @@ -1526,16 +1525,16 @@ }, { "name": "react/dns", - "version": "v1.13.0", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", "shasum": "" }, "require": { @@ -1590,7 +1589,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.13.0" + "source": "https://github.com/reactphp/dns/tree/v1.14.0" }, "funding": [ { @@ -1598,20 +1597,20 @@ "type": "open_collective" } ], - "time": "2024-06-13T14:18:03+00:00" + "time": "2025-11-18T19:34:28+00:00" }, { "name": "react/event-loop", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", "shasum": "" }, "require": { @@ -1662,7 +1661,7 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" }, "funding": [ { @@ -1670,27 +1669,27 @@ "type": "open_collective" } ], - "time": "2023-11-13T13:48:05+00:00" + "time": "2025-11-17T20:46:25+00:00" }, { "name": "react/promise", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", "shasum": "" }, "require": { "php": ">=7.1.0" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpstan/phpstan": "1.12.28 || 1.4.10", "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", @@ -1735,7 +1734,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "source": "https://github.com/reactphp/promise/tree/v3.3.0" }, "funding": [ { @@ -1743,20 +1742,20 @@ "type": "open_collective" } ], - "time": "2024-05-24T10:39:05+00:00" + "time": "2025-08-19T18:57:03+00:00" }, { "name": "react/socket", - "version": "v1.16.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", "shasum": "" }, "require": { @@ -1815,7 +1814,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" + "source": "https://github.com/reactphp/socket/tree/v1.17.0" }, "funding": [ { @@ -1823,7 +1822,7 @@ "type": "open_collective" } ], - "time": "2024-07-26T10:38:09+00:00" + "time": "2025-11-19T20:47:34+00:00" }, { "name": "react/stream", @@ -2073,16 +2072,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e", + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e", "shasum": "" }, "require": { @@ -2138,15 +2137,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-09-07T05:25:07+00:00" }, { "name": "sebastian/complexity", @@ -2339,16 +2350,16 @@ }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { @@ -2357,7 +2368,7 @@ "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -2405,15 +2416,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", @@ -2649,23 +2672,23 @@ }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -2700,15 +2723,28 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { "name": "sebastian/type", @@ -2821,46 +2857,39 @@ }, { "name": "symfony/console", - "version": "v7.2.1", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" + "reference": "fcb73f69d655b48fcb894a262f074218df08bd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "url": "https://api.github.com/repos/symfony/console/zipball/fcb73f69d655b48fcb894a262f074218df08bd58", + "reference": "fcb73f69d655b48fcb894a262f074218df08bd58", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/string": "^7.4|^8.0" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2894,7 +2923,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" + "source": "https://github.com/symfony/console/tree/v8.0.1" }, "funding": [ { @@ -2905,25 +2934,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-11T03:49:26+00:00" + "time": "2025-12-05T15:25:33+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -2936,7 +2969,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -2961,7 +2994,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -2977,28 +3010,28 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.2.0", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + "reference": "573f95783a2ec6e38752979db139f09fec033f03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03", + "reference": "573f95783a2ec6e38752979db139f09fec033f03", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3007,13 +3040,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3041,7 +3075,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0" }, "funding": [ { @@ -3052,25 +3086,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-10-30T14:17:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -3084,7 +3122,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3117,7 +3155,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -3133,29 +3171,29 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/filesystem", - "version": "v7.2.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + "reference": "d937d400b980523dc9ee946bb69972b5e619058d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d", + "reference": "d937d400b980523dc9ee946bb69972b5e619058d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0" + "symfony/process": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3183,7 +3221,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.2.0" + "source": "https://github.com/symfony/filesystem/tree/v8.0.1" }, "funding": [ { @@ -3194,32 +3232,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:15:23+00:00" + "time": "2025-12-01T09:13:36+00:00" }, { "name": "symfony/finder", - "version": "v7.2.2", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "url": "https://api.github.com/repos/symfony/finder/zipball/7598dd5770580fa3517ec83e8da0c9b9e01f4291", + "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3247,7 +3289,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.2" + "source": "https://github.com/symfony/finder/tree/v8.0.0" }, "funding": [ { @@ -3258,29 +3300,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2025-11-05T14:36:47+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.2.0", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" + "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d2b592535ffa6600c265a3893a7f7fd2bad82dd7", + "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -3314,7 +3360,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v8.0.0" }, "funding": [ { @@ -3325,16 +3371,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-20T11:17:29+00:00" + "time": "2025-11-12T15:55:31+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -3393,7 +3443,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -3404,6 +3454,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3413,16 +3467,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -3471,7 +3525,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -3482,16 +3536,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -3552,7 +3610,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -3563,6 +3621,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3572,19 +3634,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -3632,7 +3695,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -3643,25 +3706,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -3712,7 +3779,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -3723,16 +3790,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -3788,7 +3859,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" }, "funding": [ { @@ -3799,6 +3870,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3806,22 +3881,102 @@ ], "time": "2024-09-09T11:45:10+00:00" }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, { "name": "symfony/process", - "version": "v7.2.0", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" + "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "url": "https://api.github.com/repos/symfony/process/zipball/a0a750500c4ce900d69ba4e9faf16f82c10ee149", + "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -3849,7 +4004,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.0" + "source": "https://github.com/symfony/process/tree/v8.0.0" }, "funding": [ { @@ -3860,25 +4015,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2025-10-16T16:25:44+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -3896,7 +4055,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3932,7 +4091,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -3943,29 +4102,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.2.2", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" + "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", - "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/67df1914c6ccd2d7b52f70d40cf2aea02159d942", + "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -3994,7 +4157,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.2.2" + "source": "https://github.com/symfony/stopwatch/tree/v8.0.0" }, "funding": [ { @@ -4005,44 +4168,47 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-18T14:28:33+00:00" + "time": "2025-08-04T07:36:47+00:00" }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc", + "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -4081,7 +4247,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v8.0.1" }, "funding": [ { @@ -4092,25 +4258,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:26+00:00" + "time": "2025-12-01T09:13:36+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -4139,7 +4309,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -4147,7 +4317,7 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], From b38f769ec45ae708ca76ded6b2ddea2e5938fdfb Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Dec 2025 20:13:52 +0000 Subject: [PATCH 86/87] Updated CHANGELOG.md --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d299bf..29a6943 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,19 @@ -## [Unreleased] - 2025-03-05 +## [Unreleased] - 2025-12-11 + +### Added +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **Symfony 8+ support** - [@bpolaszek](https://github.com/bpolaszek) +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **PHP 8.5 support** - [@bpolaszek](https://github.com/bpolaszek) ### Changed - [#141](https://github.com/coduo/php-humanizer/pull/141) - **Update action cache from @v2 to @v4 in Github Action workflows** - [@norberttech](https://github.com/norberttech) ### Fixed +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **Incorrect nullable types as of PHP 8.4** - [@bpolaszek](https://github.com/bpolaszek) - [#139](https://github.com/coduo/php-humanizer/pull/139) - **Readme typo** - [@WatheqAlshowaiter](https://github.com/WatheqAlshowaiter) +### Removed +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **Removed `composer.lock` from git and added it to `.gitignore` (lock file not required in packages, helps CI to pass)** - [@bpolaszek](https://github.com/bpolaszek) + ## [5.0.2] - 2025-02-06 ### Added @@ -357,6 +365,7 @@ - @adevade - @arrowrowe - @Borales +- @bpolaszek - @brianwozeniak - @cnkt - @dagaa From cf3621540a1003e6089dab8b8fa9420ad3e6f11f Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Dec 2025 21:35:15 +0000 Subject: [PATCH 87/87] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29a6943..7f89e8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-12-11 +## [5.0.3] - 2025-12-11 ### Added - [#149](https://github.com/coduo/php-humanizer/pull/149) - **Symfony 8+ support** - [@bpolaszek](https://github.com/bpolaszek)

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.