From c39cd8bc5d69ff0b0e1ac55ec6755737f343f570 Mon Sep 17 00:00:00 2001 From: Laminas Bot Date: Fri, 1 Jan 2021 14:07:55 +0000 Subject: [PATCH 01/31] Bumps changelog version to 2.12.1 Updates the CHANGELOG.md file to add a changelog entry for a new 2.12.1 version. --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd4b1fe09..b3497b63a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,28 @@ All notable changes to this project will be documented in this file, in reverse chronological order by release. +## 2.12.1 - TBD + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + ## 2.12.0 - 2021-01-01 ### Added From 15b28b3747376b03b5099b5dfdfa144b25b5c3ba Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 09:46:37 +0000 Subject: [PATCH 02/31] Expect exception rather than try and fail Signed-off-by: George Steel --- test/Helper/DoctypeTest.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/test/Helper/DoctypeTest.php b/test/Helper/DoctypeTest.php index 723ae730c..6861f0f02 100644 --- a/test/Helper/DoctypeTest.php +++ b/test/Helper/DoctypeTest.php @@ -8,6 +8,7 @@ namespace LaminasTest\View\Helper; +use Laminas\View\Exception\DomainException; use Laminas\View\Helper; use PHPUnit\Framework\TestCase; @@ -192,13 +193,11 @@ public function testCanRegisterCustomHtmlDoctype() $this->assertFalse($doctype->isXhtml()); } - public function testMalformedCustomDoctypeRaisesException() + public function testMalformedCustomDoctypeRaisesException(): void { - try { - $doctype = $this->helper->__invoke(''); - $this->fail('Malformed doctype should raise exception'); - } catch (\Exception $e) { - } + $this->expectException(DomainException::class); + $this->expectExceptionMessage('The specified doctype is malformed'); + $this->helper->__invoke(''); } public function testStringificationReturnsDoctypeString() From 37a8a17cc4e16e80395b76137d20ab7482d542b1 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 09:49:42 +0000 Subject: [PATCH 03/31] Rename test so that it describes what it is testing and update the escaper mock expectations so that an assertion occurs. Add supported encodings provider and assert the valid encoding is used. Signed-off-by: George Steel --- test/Helper/EscapeCssTest.php | 36 +++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/test/Helper/EscapeCssTest.php b/test/Helper/EscapeCssTest.php index 43eeedae3..846115353 100644 --- a/test/Helper/EscapeCssTest.php +++ b/test/Helper/EscapeCssTest.php @@ -9,6 +9,7 @@ namespace LaminasTest\View\Helper; use Laminas\Escaper\Escaper; +use Laminas\Escaper\Exception\InvalidArgumentException; use Laminas\View\Helper\EscapeCss as EscapeHelper; use PHPUnit\Framework\TestCase; use stdClass; @@ -27,11 +28,22 @@ class EscapeCssTest extends TestCase 'eucjp-win', 'macroman' ]; + /** @var EscapeHelper */ + private $helper; + protected function setUp(): void { $this->helper = new EscapeHelper; } + /** @return iterable> */ + public function supportedEncodingsProvider() : iterable + { + foreach ($this->supportedEncodings as $encoding) { + yield $encoding => [$encoding]; + } + } + public function testUsesUtf8EncodingByDefault() { $this->assertEquals('UTF-8', $this->helper->getEncoding()); @@ -62,12 +74,14 @@ public function testSettingEscaperObjectAlsoSetsEncoding() $this->assertEquals('big5-hkscs', $escaper->getEncoding()); } - public function testEscapehtmlCalledOnEscaperObject() + public function testEscapeCssIsCalledOnTheEscaperObjectWhenTheHelperIsInvoked(): void { - $escaper = $this->getMockBuilder(Escaper::class)->getMock(); - $escaper->expects($this->any())->method('escapeCss'); + $escaper = $this->createMock(Escaper::class); + $escaper->expects(self::once()) + ->method('escapeCss') + ->with(self::identicalTo('foo')); $this->helper->setEscaper($escaper); - $this->helper->__invoke('foo'); + ($this->helper)('foo'); } public function testAllowsRecursiveEscapingOfArrays() @@ -168,18 +182,16 @@ public function testCanRecurseObjectProperties() */ public function testSettingEncodingToEmptyStringShouldThrowException() { - $this->expectException(\Laminas\Escaper\Exception\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $this->helper->setEncoding(''); $this->helper->getEscaper(); } - public function testSettingValidEncodingShouldNotThrowExceptions() + /** @dataProvider supportedEncodingsProvider */ + public function testSettingValidEncodingShouldNotThrowExceptions(string $encoding): void { - foreach ($this->supportedEncodings as $value) { - $helper = new EscapeHelper; - $helper->setEncoding($value); - $helper->getEscaper(); - } + $this->helper->setEncoding($encoding); + self::assertEquals($encoding, $this->helper->getEncoding()); } /** @@ -190,7 +202,7 @@ public function testSettingValidEncodingShouldNotThrowExceptions() */ public function testSettingEncodingToInvalidValueShouldThrowException() { - $this->expectException(\Laminas\Escaper\Exception\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $this->helper->setEncoding('completely-invalid'); $this->helper->getEscaper(); } From ec4d00e875b760228875aa036f1b6c50b6b642f2 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 10:15:31 +0000 Subject: [PATCH 04/31] Extract supported encodings provider to a trait for re-use with other escaper tests and fix tests that don't assert anything Signed-off-by: George Steel --- test/Helper/EscapeCssTest.php | 20 +-------------- test/Helper/EscapeHtmlAttrTest.php | 35 +++++++++++---------------- test/Helper/EscapeHtmlTest.php | 35 +++++++++++---------------- test/Helper/EscapeJsTest.php | 35 +++++++++++---------------- test/Helper/EscapeUrlTest.php | 35 +++++++++++---------------- test/Helper/EscaperEncodingsTrait.php | 29 ++++++++++++++++++++++ 6 files changed, 86 insertions(+), 103 deletions(-) create mode 100644 test/Helper/EscaperEncodingsTrait.php diff --git a/test/Helper/EscapeCssTest.php b/test/Helper/EscapeCssTest.php index 846115353..c4858d398 100644 --- a/test/Helper/EscapeCssTest.php +++ b/test/Helper/EscapeCssTest.php @@ -16,17 +16,7 @@ class EscapeCssTest extends TestCase { - protected $supportedEncodings = [ - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ]; + use EscaperEncodingsTrait; /** @var EscapeHelper */ private $helper; @@ -36,14 +26,6 @@ protected function setUp(): void $this->helper = new EscapeHelper; } - /** @return iterable> */ - public function supportedEncodingsProvider() : iterable - { - foreach ($this->supportedEncodings as $encoding) { - yield $encoding => [$encoding]; - } - } - public function testUsesUtf8EncodingByDefault() { $this->assertEquals('UTF-8', $this->helper->getEncoding()); diff --git a/test/Helper/EscapeHtmlAttrTest.php b/test/Helper/EscapeHtmlAttrTest.php index 2248acaae..aabb1ef98 100644 --- a/test/Helper/EscapeHtmlAttrTest.php +++ b/test/Helper/EscapeHtmlAttrTest.php @@ -15,17 +15,10 @@ class EscapeHtmlAttrTest extends TestCase { - protected $supportedEncodings = [ - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ]; + use EscaperEncodingsTrait; + + /** @var EscapeHelper */ + private $helper; protected function setUp(): void { @@ -62,12 +55,14 @@ public function testSettingEscaperObjectAlsoSetsEncoding() $this->assertEquals('big5-hkscs', $escaper->getEncoding()); } - public function testEscapehtmlCalledOnEscaperObject() + public function testEscapeHtmlAttrIsCalledOnTheEscaperObjectWhenHelperIsInvoked(): void { - $escaper = $this->getMockBuilder(Escaper::class)->getMock(); - $escaper->expects($this->any())->method('escapeHtmlAttr'); + $escaper = $this->createMock(Escaper::class); + $escaper->expects(self::once()) + ->method('escapeHtmlAttr') + ->with('foo'); $this->helper->setEscaper($escaper); - $this->helper->__invoke('foo'); + ($this->helper)('foo'); } public function testAllowsRecursiveEscapingOfArrays() @@ -173,13 +168,11 @@ public function testSettingEncodingToEmptyStringShouldThrowException() $this->helper->getEscaper(); } - public function testSettingValidEncodingShouldNotThrowExceptions() + /** @dataProvider supportedEncodingsProvider */ + public function testSettingValidEncodingShouldNotThrowExceptions(string $encoding): void { - foreach ($this->supportedEncodings as $value) { - $helper = new EscapeHelper; - $helper->setEncoding($value); - $helper->getEscaper(); - } + $this->helper->setEncoding($encoding); + self::assertEquals($encoding, $this->helper->getEncoding()); } /** diff --git a/test/Helper/EscapeHtmlTest.php b/test/Helper/EscapeHtmlTest.php index 9659b1cd5..509f4c827 100644 --- a/test/Helper/EscapeHtmlTest.php +++ b/test/Helper/EscapeHtmlTest.php @@ -15,17 +15,10 @@ class EscapeHtmlTest extends TestCase { - protected $supportedEncodings = [ - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ]; + use EscaperEncodingsTrait; + + /** @var EscapeHelper */ + private $helper; protected function setUp(): void { @@ -62,12 +55,14 @@ public function testSettingEscaperObjectAlsoSetsEncoding() $this->assertEquals('big5-hkscs', $escaper->getEncoding()); } - public function testEscapehtmlCalledOnEscaperObject() + public function testEscapeHtmlIsCalledOnTheEscaperObjectWhenInvoked(): void { - $escaper = $this->getMockBuilder(Escaper::class)->getMock(); - $escaper->expects($this->any())->method('escapeHtml'); + $escaper = $this->createMock(Escaper::class); + $escaper->expects(self::once()) + ->method('escapeHtml') + ->with('foo'); $this->helper->setEscaper($escaper); - $this->helper->__invoke('foo'); + ($this->helper)('foo'); } public function testAllowsRecursiveEscapingOfArrays() @@ -170,13 +165,11 @@ public function testSettingEncodingToEmptyStringShouldThrowException() $this->helper->getEscaper(); } - public function testSettingValidEncodingShouldNotThrowExceptions() + /** @dataProvider supportedEncodingsProvider */ + public function testSettingValidEncodingShouldNotThrowExceptions(string $encoding): void { - foreach ($this->supportedEncodings as $value) { - $helper = new EscapeHelper; - $helper->setEncoding($value); - $helper->getEscaper(); - } + $this->helper->setEncoding($encoding); + self::assertEquals($encoding, $this->helper->getEncoding()); } /** diff --git a/test/Helper/EscapeJsTest.php b/test/Helper/EscapeJsTest.php index 91a7b5862..51c904a26 100644 --- a/test/Helper/EscapeJsTest.php +++ b/test/Helper/EscapeJsTest.php @@ -15,17 +15,10 @@ class EscapeJsTest extends TestCase { - protected $supportedEncodings = [ - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ]; + use EscaperEncodingsTrait; + + /** @var EscapeHelper */ + private $helper; protected function setUp(): void { @@ -62,12 +55,14 @@ public function testSettingEscaperObjectAlsoSetsEncoding() $this->assertEquals('big5-hkscs', $escaper->getEncoding()); } - public function testEscapehtmlCalledOnEscaperObject() + public function testEscapeJsIsCalledOnTheEscaperObjectWhenHelperInvoked(): void { - $escaper = $this->getMockBuilder(Escaper::class)->getMock(); - $escaper->expects($this->any())->method('escapeJs'); + $escaper = $this->createMock(Escaper::class); + $escaper->expects(self::once()) + ->method('escapeJs') + ->with('foo'); $this->helper->setEscaper($escaper); - $this->helper->__invoke('foo'); + ($this->helper)('foo'); } public function testAllowsRecursiveEscapingOfArrays() @@ -173,13 +168,11 @@ public function testSettingEncodingToEmptyStringShouldThrowException() $this->helper->getEscaper(); } - public function testSettingValidEncodingShouldNotThrowExceptions() + /** @dataProvider supportedEncodingsProvider */ + public function testSettingValidEncodingShouldNotThrowExceptions(string $encoding): void { - foreach ($this->supportedEncodings as $value) { - $helper = new EscapeHelper; - $helper->setEncoding($value); - $helper->getEscaper(); - } + $this->helper->setEncoding($encoding); + self::assertEquals($encoding, $this->helper->getEncoding()); } /** diff --git a/test/Helper/EscapeUrlTest.php b/test/Helper/EscapeUrlTest.php index f959caa16..3291135ec 100644 --- a/test/Helper/EscapeUrlTest.php +++ b/test/Helper/EscapeUrlTest.php @@ -15,17 +15,10 @@ class EscapeUrlTest extends TestCase { - protected $supportedEncodings = [ - 'iso-8859-1', 'iso8859-1', 'iso-8859-5', 'iso8859-5', - 'iso-8859-15', 'iso8859-15', 'utf-8', 'cp866', - 'ibm866', '866', 'cp1251', 'windows-1251', - 'win-1251', '1251', 'cp1252', 'windows-1252', - '1252', 'koi8-r', 'koi8-ru', 'koi8r', - 'big5', '950', 'gb2312', '936', - 'big5-hkscs', 'shift_jis', 'sjis', 'sjis-win', - 'cp932', '932', 'euc-jp', 'eucjp', - 'eucjp-win', 'macroman' - ]; + use EscaperEncodingsTrait; + + /** @var EscapeHelper */ + private $helper; protected function setUp(): void { @@ -62,12 +55,14 @@ public function testSettingEscaperObjectAlsoSetsEncoding() $this->assertEquals('big5-hkscs', $escaper->getEncoding()); } - public function testEscapehtmlCalledOnEscaperObject() + public function testEscapeUrlIsCalledOnTheEscaperObjectWhenHelperInvoked(): void { - $escaper = $this->getMockBuilder(Escaper::class)->getMock(); - $escaper->expects($this->any())->method('escapeUrl'); + $escaper = $this->createMock(Escaper::class); + $escaper->expects(self::once()) + ->method('escapeUrl') + ->with('foo'); $this->helper->setEscaper($escaper); - $this->helper->__invoke('foo'); + ($this->helper)('foo'); } public function testAllowsRecursiveEscapingOfArrays() @@ -173,13 +168,11 @@ public function testSettingEncodingToEmptyStringShouldThrowException() $this->helper->getEscaper(); } - public function testSettingValidEncodingShouldNotThrowExceptions() + /** @dataProvider supportedEncodingsProvider */ + public function testSettingValidEncodingShouldNotThrowExceptions(string $encoding): void { - foreach ($this->supportedEncodings as $value) { - $helper = new EscapeHelper; - $helper->setEncoding($value); - $helper->getEscaper(); - } + $this->helper->setEncoding($encoding); + self::assertEquals($encoding, $this->helper->getEncoding()); } /** diff --git a/test/Helper/EscaperEncodingsTrait.php b/test/Helper/EscaperEncodingsTrait.php new file mode 100644 index 000000000..7625d00c5 --- /dev/null +++ b/test/Helper/EscaperEncodingsTrait.php @@ -0,0 +1,29 @@ +> */ + public function supportedEncodingsProvider() : iterable + { + foreach ($this->supportedEncodings as $encoding) { + yield $encoding => [$encoding]; + } + } +} From 752ab94f894320f2d19638655641e2c5433c35be Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 11:59:12 +0000 Subject: [PATCH 05/31] Update tests so that they all assert something Signed-off-by: George Steel --- test/Helper/GravatarTest.php | 10 +++--- test/Helper/HeadLinkTest.php | 32 +++++++++++-------- test/Helper/HeadMetaTest.php | 9 +++++- test/Helper/HeadScriptTest.php | 33 ++++++++++++-------- test/Helper/HeadStyleTest.php | 36 +++++++++++++--------- test/Helper/Navigation/BreadcrumbsTest.php | 17 +++++----- test/Helper/Navigation/MenuTest.php | 12 +++----- test/Helper/PartialLoopTest.php | 29 +++++++++-------- test/Helper/Placeholder/RegistryTest.php | 12 ++++---- 9 files changed, 108 insertions(+), 82 deletions(-) diff --git a/test/Helper/GravatarTest.php b/test/Helper/GravatarTest.php index 17caa0ad7..8fc547fe0 100644 --- a/test/Helper/GravatarTest.php +++ b/test/Helper/GravatarTest.php @@ -11,10 +11,11 @@ use Laminas\View\Exception; use Laminas\View\Helper\Gravatar; use Laminas\View\Renderer\PhpRenderer as View; -use PHPUnit\Framework\Error\Deprecated as DeprecatedError; use PHPUnit\Framework\TestCase; use ReflectionMethod; +use function method_exists; + /** * @group Laminasview * @group Laminasview_Helper @@ -266,13 +267,14 @@ public function testReturnImgTag() ); } - public function testReturnThisObject() + public function testInvokeReturnsSelf(): void { - $this->assertInstanceOf(Gravatar::class, $this->helper->__invoke()); + self::assertSame($this->helper, ($this->helper)()); } - public function testInvalidKeyPassedToSetOptionsMethod() + public function testInvalidKeyWithoutMatchingSetterPassedToSetOptionsMethodIsIgnored(): void { + self::assertFalse(method_exists($this->helper, 'setUnknown')); $options = [ 'unknown' => ['val' => 1] ]; diff --git a/test/Helper/HeadLinkTest.php b/test/Helper/HeadLinkTest.php index 504fb96e9..140cac5f5 100644 --- a/test/Helper/HeadLinkTest.php +++ b/test/Helper/HeadLinkTest.php @@ -9,11 +9,13 @@ namespace LaminasTest\View\Helper; use Laminas\View\Exception; -use Laminas\View\Exception\ExceptionInterface as ViewException; use Laminas\View\Helper; use Laminas\View\Renderer\PhpRenderer as View; use PHPUnit\Framework\TestCase; +use function array_fill; +use function sprintf; + /** * Test class for Laminas\View\Helper\HeadLink. * @@ -319,18 +321,24 @@ public function testConditionalStylesheetCreationNoIEWidthSpaces() $this->assertStringContainsString('', $string); } - public function testSettingAlternateWithTooFewArgsRaisesException() + public function argumentCountProvider() : iterable { - try { - $this->helper->setAlternate('foo'); - $this->fail('Setting alternate with fewer than 3 args should raise exception'); - } catch (ViewException $e) { - } - try { - $this->helper->setAlternate('foo', 'bar'); - $this->fail('Setting alternate with fewer than 3 args should raise exception'); - } catch (ViewException $e) { - } + return [ + 'One' => [1], + 'Two' => [2], + ]; + } + + /** @dataProvider argumentCountProvider */ + public function testSettingAlternateWithTooFewArgsRaisesException(int $argumentCount): void + { + $arguments = array_fill(0, $argumentCount, 'foo'); + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage(sprintf( + 'Alternate tags require 3 arguments; %d provided', + $argumentCount + )); + $this->helper->setAlternate(...$arguments); } public function testIndentationIsHonored() diff --git a/test/Helper/HeadMetaTest.php b/test/Helper/HeadMetaTest.php index abc34ebc5..6bcb4da89 100644 --- a/test/Helper/HeadMetaTest.php +++ b/test/Helper/HeadMetaTest.php @@ -77,27 +77,34 @@ public function testHeadMetaReturnsObjectInstance() $this->assertInstanceOf(Helper\HeadMeta::class, $placeholder); } - public function testAppendPrependAndSetThrowExceptionsWhenNonMetaValueProvided() + public function testAppendPrependAndSetThrowExceptionsWhenNonMetaValueProvided(): void { try { $this->helper->append('foo'); $this->fail('Non-meta value should not append'); } catch (ViewException $e) { + $this->addToAssertionCount(1); } + try { $this->helper->offsetSet(3, 'foo'); $this->fail('Non-meta value should not offsetSet'); } catch (ViewException $e) { + $this->addToAssertionCount(1); } + try { $this->helper->prepend('foo'); $this->fail('Non-meta value should not prepend'); } catch (ViewException $e) { + $this->addToAssertionCount(1); } + try { $this->helper->set('foo'); $this->fail('Non-meta value should not set'); } catch (ViewException $e) { + $this->addToAssertionCount(1); } } diff --git a/test/Helper/HeadScriptTest.php b/test/Helper/HeadScriptTest.php index c5dac239b..018cc90a7 100644 --- a/test/Helper/HeadScriptTest.php +++ b/test/Helper/HeadScriptTest.php @@ -72,21 +72,28 @@ public function testSetPrependAppendAndOffsetSetThrowExceptionsOnInvalidItems() $this->helper->append('foo'); $this->fail('Append should throw exception with invalid item'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } + try { $this->helper->offsetSet(1, 'foo'); $this->fail('OffsetSet should throw exception with invalid item'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } + try { $this->helper->prepend('foo'); $this->fail('Prepend should throw exception with invalid item'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } + try { $this->helper->set('foo'); $this->fail('Set should throw exception with invalid item'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } } @@ -216,27 +223,27 @@ public function testOverloadOffsetSetScriptWritesToSpecifiedIndex() $this->_testOverloadOffsetSet('script'); } - public function testOverloadingThrowsExceptionWithInvalidMethod() + public function testOverloadingThrowsExceptionWithInvalidMethod(): void { - try { - $this->helper->fooBar('foo'); - $this->fail('Invalid method should raise exception'); - } catch (View\Exception\ExceptionInterface $e) { - } + $this->expectException(View\Exception\BadMethodCallException::class); + $this->expectExceptionMessage('Method "fooBar" does not exist'); + $this->helper->fooBar('foo'); } - public function testOverloadingWithTooFewArgumentsRaisesException() + public function testOverloadingWithTooFewArgumentsRaisesException(): void { try { $this->helper->setScript(); $this->fail('Too few arguments should raise exception'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } try { $this->helper->offsetSetScript(5); $this->fail('Too few arguments should raise exception'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } } @@ -343,16 +350,18 @@ public function testCanRenderArbitraryAttributesOnRequest() $this->assertStringContainsString('bogus="deferred"', $test); } - public function testCanPerformMultipleSerialCaptures() + public function testCanPerformMultipleSerialCaptures(): void { $this->helper->__invoke()->captureStart(); - echo "this is something captured"; + echo 'first capture'; $this->helper->__invoke()->captureEnd(); $this->helper->__invoke()->captureStart(); - - echo "this is something else captured"; + echo 'second capture'; $this->helper->__invoke()->captureEnd(); + + self::assertStringContainsString('first capture', (string) $this->helper); + self::assertStringContainsString('second capture', (string) $this->helper); } public function testCannotNestCaptures() @@ -546,6 +555,6 @@ public function testOmitsTypeAttributeIfNoneGivenAndHtml5Doctype() $this->helper->__invoke()->appendScript('// some script' . PHP_EOL); $test = $this->helper->__invoke()->toString(); - $this->assertNotRegExp('#type="text/javascript"#i', $test); + $this->assertDoesNotMatchRegularExpression('#type="text/javascript"#i', $test); } } diff --git a/test/Helper/HeadStyleTest.php b/test/Helper/HeadStyleTest.php index baa6d5850..c9545d89c 100644 --- a/test/Helper/HeadStyleTest.php +++ b/test/Helper/HeadStyleTest.php @@ -65,21 +65,28 @@ public function testAppendPrependAndSetThrowExceptionsWhenNonStyleValueProvided( $this->helper->append('foo'); $this->fail('Non-style value should not append'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } + try { $this->helper->offsetSet(5, 'foo'); $this->fail('Non-style value should not offsetSet'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } + try { $this->helper->prepend('foo'); $this->fail('Non-style value should not prepend'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } + try { $this->helper->set('foo'); $this->fail('Non-style value should not set'); } catch (View\Exception\ExceptionInterface $e) { + $this->addToAssertionCount(1); } } @@ -253,22 +260,18 @@ public function testOverloadingOffsetSetWritesToSpecifiedIndex() $this->assertStringContainsString('foobar', $item->content); } - public function testInvalidMethodRaisesException() + public function testInvalidMethodRaisesException(): void { - try { - $this->helper->bogusMethod(); - $this->fail('Invalid method should raise exception'); - } catch (View\Exception\ExceptionInterface $e) { - } + $this->expectException(View\Exception\BadMethodCallException::class); + $this->expectExceptionMessage('Method "bogusMethod" does not exist'); + $this->helper->bogusMethod(); } - public function testTooFewArgumentsRaisesException() + public function testTooFewArgumentsRaisesException(): void { - try { - $this->helper->appendStyle(); - $this->fail('Too few arguments should raise exception'); - } catch (View\Exception\ExceptionInterface $e) { - } + $this->expectException(View\Exception\BadMethodCallException::class); + $this->expectExceptionMessage('Method "appendStyle" requires minimally content for the stylesheet'); + $this->helper->appendStyle(); } public function testIndentationIsHonored() @@ -294,15 +297,18 @@ public function testIndentationIsHonored() $this->assertStringContainsString(' }', $string); } - public function testSerialCapturingWorks() + public function testSerialCapturingWorks(): void { $this->helper->__invoke()->captureStart(); - echo "Captured text"; + echo 'first capture'; $this->helper->__invoke()->captureEnd(); $this->helper->__invoke()->captureStart(); - + echo 'second capture'; $this->helper->__invoke()->captureEnd(); + + self::assertStringContainsString('first capture', (string) $this->helper); + self::assertStringContainsString('second capture', (string) $this->helper); } public function testNestedCapturingFails() diff --git a/test/Helper/Navigation/BreadcrumbsTest.php b/test/Helper/Navigation/BreadcrumbsTest.php index 1612bef25..f9eed634e 100644 --- a/test/Helper/Navigation/BreadcrumbsTest.php +++ b/test/Helper/Navigation/BreadcrumbsTest.php @@ -9,7 +9,7 @@ namespace LaminasTest\View\Helper\Navigation; use Laminas\Navigation\Navigation; -use Laminas\View\Exception\ExceptionInterface; +use Laminas\View\Exception\InvalidArgumentException; use Laminas\View\Helper\Navigation\Breadcrumbs; /** @@ -233,17 +233,14 @@ public function testRenderingPartialBySpecifyingAnArrayAsPartial() $this->assertEquals($expected, $this->_helper->render()); } - public function testRenderingPartialShouldFailOnInvalidPartialArray() + public function testRenderingPartialShouldFailOnInvalidPartialArray(): void { $this->_helper->setPartial(['bc.phtml']); - - try { - $this->_helper->render(); - $this->fail( - '$partial was invalid, but no Laminas\View\Exception\ExceptionInterface was thrown' - ); - } catch (ExceptionInterface $e) { - } + $this->expectException(InvalidArgumentException::class); + $this->_helper->render(); + $this->fail( + '$partial was invalid, but no Laminas\View\Exception\ExceptionInterface was thrown' + ); } public function testRenderingPartialWithParams() diff --git a/test/Helper/Navigation/MenuTest.php b/test/Helper/Navigation/MenuTest.php index 3dbf48b85..9ed1129de 100644 --- a/test/Helper/Navigation/MenuTest.php +++ b/test/Helper/Navigation/MenuTest.php @@ -8,6 +8,7 @@ namespace LaminasTest\View\Helper\Navigation; +use Laminas\View\Exception\InvalidArgumentException; use Laminas\View\Helper\Navigation\Menu; /** @@ -294,15 +295,12 @@ public function testRenderingPartialWithParams() $this->assertEquals($expected, $actual); } - public function testRenderingPartialShouldFailOnInvalidPartialArray() + public function testRenderingPartialShouldFailOnInvalidPartialArray(): void { $this->_helper->setPartial(['menu.phtml']); - - try { - $this->_helper->render(); - $this->fail('invalid $partial should throw Laminas\View\Exception\InvalidArgumentException'); - } catch (\Laminas\View\Exception\ExceptionInterface $e) { - } + $this->expectException(InvalidArgumentException::class); + $this->_helper->render(); + $this->fail('invalid $partial should throw Laminas\View\Exception\InvalidArgumentException'); } public function testSetMaxDepth() diff --git a/test/Helper/PartialLoopTest.php b/test/Helper/PartialLoopTest.php index 8bbd44acd..657e01b23 100644 --- a/test/Helper/PartialLoopTest.php +++ b/test/Helper/PartialLoopTest.php @@ -119,7 +119,7 @@ public function testPartialLoopIteratesOverRecursiveIterator() } } - public function testPartialLoopThrowsExceptionWithBadIterator() + public function testPartialLoopThrowsExceptionWithBadIterator(): void { $data = [ ['message' => 'foo'], @@ -133,11 +133,10 @@ public function testPartialLoopThrowsExceptionWithBadIterator() $view->resolver()->addPath($this->basePath . '/application/views/scripts'); $this->helper->setView($view); - try { - $result = $this->helper->__invoke('partialLoop.phtml', $o); - $this->fail('PartialLoop should only work with arrays and iterators'); - } catch (\Exception $e) { - } + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('PartialLoop helper requires iterable data'); + $this->helper->__invoke('partialLoop.phtml', $o); + $this->fail('PartialLoop should only work with arrays and iterators'); } public function testPassingNullDataThrowsException() @@ -227,13 +226,14 @@ public function testShouldNotCastToArrayIfObjectIsTraversable() /** * @group Laminas-3083 */ - public function testEmptyArrayPassedToPartialLoopShouldNotThrowException() + public function testEmptyArrayPassedToPartialLoopShouldNotThrowException(): void { $view = new View(); $view->resolver()->addPath($this->basePath . '/application/views/scripts'); $this->helper->setView($view); $this->helper->__invoke('partialLoop.phtml', []); + $this->addToAssertionCount(1); } /** @@ -436,7 +436,7 @@ public function testPartialLoopIteratesOverRecursiveIteratorInLoopMethod() } } - public function testPartialLoopThrowsExceptionWithBadIteratorInLoopMethod() + public function testPartialLoopThrowsExceptionWithBadIteratorInLoopMethod(): void { $data = [ ['message' => 'foo'], @@ -449,12 +449,10 @@ public function testPartialLoopThrowsExceptionWithBadIteratorInLoopMethod() $view = new View(); $view->resolver()->addPath($this->basePath . '/application/views/scripts'); $this->helper->setView($view); - - try { - $result = $this->helper->Loop('partialLoop.phtml', $o); - $this->fail('PartialLoop should only work with arrays and iterators'); - } catch (\Exception $e) { - } + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('PartialLoop helper requires iterable data'); + $this->helper->Loop('partialLoop.phtml', $o); + $this->fail('PartialLoop should only work with arrays and iterators'); } public function testPassingNullDataThrowsExceptionInLoopMethod() @@ -538,13 +536,14 @@ public function testShouldNotCastToArrayIfObjectIsTraversableInLoopMethod() /** * @group Laminas-3083 */ - public function testEmptyArrayPassedToPartialLoopShouldNotThrowExceptionInLoopMethod() + public function testEmptyArrayPassedToPartialLoopShouldNotThrowExceptionInLoopMethod(): void { $view = new View(); $view->resolver()->addPath($this->basePath . '/application/views/scripts'); $this->helper->setView($view); $this->helper->loop('partialLoop.phtml', []); + $this->addToAssertionCount(1); } /** diff --git a/test/Helper/Placeholder/RegistryTest.php b/test/Helper/Placeholder/RegistryTest.php index 14402e046..aa682692d 100644 --- a/test/Helper/Placeholder/RegistryTest.php +++ b/test/Helper/Placeholder/RegistryTest.php @@ -8,6 +8,7 @@ namespace LaminasTest\View\Helper\Placeholder; +use Laminas\View\Exception\InvalidArgumentException; use Laminas\View\Helper\Placeholder\Container; use Laminas\View\Helper\Placeholder\Registry; use LaminasTest\View\Helper\TestAsset; @@ -110,13 +111,12 @@ public function testContainerClassAccessorsSetState() ); } - public function testSetContainerClassThrowsExceptionWithInvalidContainerClass() + public function testSetContainerClassThrowsExceptionWithInvalidContainerClass(): void { - try { - $this->registry->setContainerClass(TestAsset\BogusContainer::class); - $this->fail('Invalid container classes should not be accepted'); - } catch (\Exception $e) { - } + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid Container class specified'); + $this->registry->setContainerClass(TestAsset\BogusContainer::class); + $this->fail('Invalid container classes should not be accepted'); } public function testDeletingContainerRemovesFromRegistry() From c9103d7fe9fd8d0e7ca54912a469c5fb703dce18 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 12:26:11 +0000 Subject: [PATCH 06/31] Add licence header and CS fix Signed-off-by: George Steel --- test/Helper/EscaperEncodingsTrait.php | 8 +++++++- test/Helper/HeadLinkTest.php | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/Helper/EscaperEncodingsTrait.php b/test/Helper/EscaperEncodingsTrait.php index 7625d00c5..fab89fc8d 100644 --- a/test/Helper/EscaperEncodingsTrait.php +++ b/test/Helper/EscaperEncodingsTrait.php @@ -1,5 +1,11 @@ > */ - public function supportedEncodingsProvider() : iterable + public function supportedEncodingsProvider(): iterable { foreach ($this->supportedEncodings as $encoding) { yield $encoding => [$encoding]; diff --git a/test/Helper/HeadLinkTest.php b/test/Helper/HeadLinkTest.php index 140cac5f5..f70ad9b08 100644 --- a/test/Helper/HeadLinkTest.php +++ b/test/Helper/HeadLinkTest.php @@ -321,7 +321,7 @@ public function testConditionalStylesheetCreationNoIEWidthSpaces() $this->assertStringContainsString('', $string); } - public function argumentCountProvider() : iterable + public function argumentCountProvider(): iterable { return [ 'One' => [1], From 496bab63b5c6f5c17bd7151734a1f366a17c3d9d Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 12:35:07 +0000 Subject: [PATCH 07/31] Change assertion to check that zero iterations occurred Signed-off-by: George Steel --- test/Helper/PartialLoopTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Helper/PartialLoopTest.php b/test/Helper/PartialLoopTest.php index 657e01b23..d5102e155 100644 --- a/test/Helper/PartialLoopTest.php +++ b/test/Helper/PartialLoopTest.php @@ -232,8 +232,8 @@ public function testEmptyArrayPassedToPartialLoopShouldNotThrowException(): void $view->resolver()->addPath($this->basePath . '/application/views/scripts'); $this->helper->setView($view); - $this->helper->__invoke('partialLoop.phtml', []); - $this->addToAssertionCount(1); + ($this->helper)('partialLoop.phtml', []); + self::assertEquals(0, $this->helper->getPartialCounter()); } /** From 2c6a203e94e860da8c91ab3b72c926292318a5a4 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 12:40:13 +0000 Subject: [PATCH 08/31] Split test into individual test for each method that expects exceptions Signed-off-by: George Steel --- test/Helper/HeadMetaTest.php | 47 +++++++++++++++++------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/test/Helper/HeadMetaTest.php b/test/Helper/HeadMetaTest.php index 6bcb4da89..0011bf89d 100644 --- a/test/Helper/HeadMetaTest.php +++ b/test/Helper/HeadMetaTest.php @@ -77,35 +77,32 @@ public function testHeadMetaReturnsObjectInstance() $this->assertInstanceOf(Helper\HeadMeta::class, $placeholder); } - public function testAppendPrependAndSetThrowExceptionsWhenNonMetaValueProvided(): void + public function testThatAppendThrowsExceptionWhenNonMetaValueIsProvided(): void { - try { - $this->helper->append('foo'); - $this->fail('Non-meta value should not append'); - } catch (ViewException $e) { - $this->addToAssertionCount(1); - } + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to append'); + $this->helper->append('foo'); + } - try { - $this->helper->offsetSet(3, 'foo'); - $this->fail('Non-meta value should not offsetSet'); - } catch (ViewException $e) { - $this->addToAssertionCount(1); - } + public function testThatOffsetSetThrowsExceptionWhenNonMetaValueIsProvided(): void + { + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to offsetSet'); + $this->helper->offsetSet(3, 'foo'); + } - try { - $this->helper->prepend('foo'); - $this->fail('Non-meta value should not prepend'); - } catch (ViewException $e) { - $this->addToAssertionCount(1); - } + public function testThatPrependThrowsExceptionWhenNonMetaValueIsProvided(): void + { + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to prepend'); + $this->helper->prepend('foo'); + } - try { - $this->helper->set('foo'); - $this->fail('Non-meta value should not set'); - } catch (ViewException $e) { - $this->addToAssertionCount(1); - } + public function testThatSetThrowsExceptionWhenNonMetaValueIsProvided(): void + { + $this->expectException(Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to set'); + $this->helper->set('foo'); } // @codingStandardsIgnoreStart From 4e431204030de830f89539766a7eb4eda83462a8 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 12:41:57 +0000 Subject: [PATCH 09/31] Remove unnecessary fail() Signed-off-by: George Steel --- test/Helper/Navigation/BreadcrumbsTest.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/Helper/Navigation/BreadcrumbsTest.php b/test/Helper/Navigation/BreadcrumbsTest.php index f9eed634e..0d092d302 100644 --- a/test/Helper/Navigation/BreadcrumbsTest.php +++ b/test/Helper/Navigation/BreadcrumbsTest.php @@ -238,9 +238,6 @@ public function testRenderingPartialShouldFailOnInvalidPartialArray(): void $this->_helper->setPartial(['bc.phtml']); $this->expectException(InvalidArgumentException::class); $this->_helper->render(); - $this->fail( - '$partial was invalid, but no Laminas\View\Exception\ExceptionInterface was thrown' - ); } public function testRenderingPartialWithParams() From 9d908748e5f46d6f3e08f796264561bc8ba2df26 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 12:48:08 +0000 Subject: [PATCH 10/31] Split test into 4 expecting an exception for each incorrectly invoked method Signed-off-by: George Steel --- test/Helper/HeadScriptTest.php | 47 ++++++++++++++++------------------ 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/test/Helper/HeadScriptTest.php b/test/Helper/HeadScriptTest.php index 018cc90a7..6ddf60843 100644 --- a/test/Helper/HeadScriptTest.php +++ b/test/Helper/HeadScriptTest.php @@ -66,35 +66,32 @@ public function testHeadScriptReturnsObjectInstance() $this->assertInstanceOf(Helper\HeadScript::class, $placeholder); } - public function testSetPrependAppendAndOffsetSetThrowExceptionsOnInvalidItems() + public function testAppendThrowsExceptionWithInvalidArguments(): void { - try { - $this->helper->append('foo'); - $this->fail('Append should throw exception with invalid item'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid argument passed to append'); + $this->helper->append('foo'); + } - try { - $this->helper->offsetSet(1, 'foo'); - $this->fail('OffsetSet should throw exception with invalid item'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testPrependThrowsExceptionWithInvalidArguments(): void + { + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid argument passed to prepend'); + $this->helper->prepend('foo'); + } - try { - $this->helper->prepend('foo'); - $this->fail('Prepend should throw exception with invalid item'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testSetThrowsExceptionWithInvalidArguments(): void + { + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid argument passed to set'); + $this->helper->set('foo'); + } - try { - $this->helper->set('foo'); - $this->fail('Set should throw exception with invalid item'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testOffsetSetThrowsExceptionWithInvalidArguments(): void + { + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid argument passed to offsetSet'); + $this->helper->offsetSet(1, 'foo'); } // @codingStandardsIgnoreStart From 45da0d7aee7ecf9650e68730b5224c57494fe5dc Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 13:13:04 +0000 Subject: [PATCH 11/31] Further refactor tests removing unnecessary fail()'s after expecting exceptions Signed-off-by: George Steel --- test/Helper/HeadScriptTest.php | 23 +++++------- test/Helper/HeadStyleTest.php | 47 +++++++++++------------- test/Helper/Navigation/MenuTest.php | 1 - test/Helper/PartialLoopTest.php | 4 +- test/Helper/Placeholder/RegistryTest.php | 1 - 5 files changed, 33 insertions(+), 43 deletions(-) diff --git a/test/Helper/HeadScriptTest.php b/test/Helper/HeadScriptTest.php index 6ddf60843..eb27523ec 100644 --- a/test/Helper/HeadScriptTest.php +++ b/test/Helper/HeadScriptTest.php @@ -227,21 +227,18 @@ public function testOverloadingThrowsExceptionWithInvalidMethod(): void $this->helper->fooBar('foo'); } - public function testOverloadingWithTooFewArgumentsRaisesException(): void + public function testSetScriptRequiresAnArgument(): void { - try { - $this->helper->setScript(); - $this->fail('Too few arguments should raise exception'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + $this->expectException(View\Exception\BadMethodCallException::class); + $this->expectExceptionMessage('Method "setScript" requires at least one argument'); + $this->helper->setScript(); + } - try { - $this->helper->offsetSetScript(5); - $this->fail('Too few arguments should raise exception'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testOffsetSetScriptRequiresTwoArguments(): void + { + $this->expectException(View\Exception\BadMethodCallException::class); + $this->expectExceptionMessage('Method "offsetSetScript" requires at least two arguments, an index and source'); + $this->helper->offsetSetScript(1); } public function testHeadScriptAppropriatelySetsScriptItems() diff --git a/test/Helper/HeadStyleTest.php b/test/Helper/HeadStyleTest.php index c9545d89c..246005585 100644 --- a/test/Helper/HeadStyleTest.php +++ b/test/Helper/HeadStyleTest.php @@ -59,35 +59,32 @@ public function testHeadStyleReturnsObjectInstance() $this->assertInstanceOf(Helper\HeadStyle::class, $placeholder); } - public function testAppendPrependAndSetThrowExceptionsWhenNonStyleValueProvided() + public function testAppendThrowsExceptionGivenNonStyleArgument(): void { - try { - $this->helper->append('foo'); - $this->fail('Non-style value should not append'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to append'); + $this->helper->append('foo'); + } - try { - $this->helper->offsetSet(5, 'foo'); - $this->fail('Non-style value should not offsetSet'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testPrependThrowsExceptionGivenNonStyleArgument(): void + { + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to prepend'); + $this->helper->prepend('foo'); + } - try { - $this->helper->prepend('foo'); - $this->fail('Non-style value should not prepend'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testSetThrowsExceptionGivenNonStyleArgument(): void + { + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to set'); + $this->helper->set('foo'); + } - try { - $this->helper->set('foo'); - $this->fail('Non-style value should not set'); - } catch (View\Exception\ExceptionInterface $e) { - $this->addToAssertionCount(1); - } + public function testOffsetSetThrowsExceptionGivenNonStyleArgument(): void + { + $this->expectException(View\Exception\InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid value passed to offsetSet'); + $this->helper->offsetSet(1, 'foo'); } public function testOverloadAppendStyleAppendsStyleToStack() diff --git a/test/Helper/Navigation/MenuTest.php b/test/Helper/Navigation/MenuTest.php index 9ed1129de..583fceb1d 100644 --- a/test/Helper/Navigation/MenuTest.php +++ b/test/Helper/Navigation/MenuTest.php @@ -300,7 +300,6 @@ public function testRenderingPartialShouldFailOnInvalidPartialArray(): void $this->_helper->setPartial(['menu.phtml']); $this->expectException(InvalidArgumentException::class); $this->_helper->render(); - $this->fail('invalid $partial should throw Laminas\View\Exception\InvalidArgumentException'); } public function testSetMaxDepth() diff --git a/test/Helper/PartialLoopTest.php b/test/Helper/PartialLoopTest.php index d5102e155..a3aa21c1e 100644 --- a/test/Helper/PartialLoopTest.php +++ b/test/Helper/PartialLoopTest.php @@ -136,7 +136,6 @@ public function testPartialLoopThrowsExceptionWithBadIterator(): void $this->expectException(Exception\InvalidArgumentException::class); $this->expectExceptionMessage('PartialLoop helper requires iterable data'); $this->helper->__invoke('partialLoop.phtml', $o); - $this->fail('PartialLoop should only work with arrays and iterators'); } public function testPassingNullDataThrowsException() @@ -452,7 +451,6 @@ public function testPartialLoopThrowsExceptionWithBadIteratorInLoopMethod(): voi $this->expectException(Exception\InvalidArgumentException::class); $this->expectExceptionMessage('PartialLoop helper requires iterable data'); $this->helper->Loop('partialLoop.phtml', $o); - $this->fail('PartialLoop should only work with arrays and iterators'); } public function testPassingNullDataThrowsExceptionInLoopMethod() @@ -543,7 +541,7 @@ public function testEmptyArrayPassedToPartialLoopShouldNotThrowExceptionInLoopMe $this->helper->setView($view); $this->helper->loop('partialLoop.phtml', []); - $this->addToAssertionCount(1); + self::assertEquals(0, $this->helper->getPartialCounter()); } /** diff --git a/test/Helper/Placeholder/RegistryTest.php b/test/Helper/Placeholder/RegistryTest.php index aa682692d..4095948ca 100644 --- a/test/Helper/Placeholder/RegistryTest.php +++ b/test/Helper/Placeholder/RegistryTest.php @@ -116,7 +116,6 @@ public function testSetContainerClassThrowsExceptionWithInvalidContainerClass(): $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Invalid Container class specified'); $this->registry->setContainerClass(TestAsset\BogusContainer::class); - $this->fail('Invalid container classes should not be accepted'); } public function testDeletingContainerRemovesFromRegistry() From 0c9112d38d34cb5c7b5949fc1f6f7e2d68f25c51 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 13:54:26 +0000 Subject: [PATCH 12/31] Fix test failures because they depend on the flash messenger and MVC-i18n packages Signed-off-by: George Steel --- composer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/composer.json b/composer.json index 4b96dca6f..49dc15bc9 100644 --- a/composer.json +++ b/composer.json @@ -40,6 +40,8 @@ "laminas/laminas-log": "^2.7", "laminas/laminas-modulemanager": "^2.7.1", "laminas/laminas-mvc": "^2.7.14 || ^3.0", + "laminas/laminas-mvc-i18n": "^1.1", + "laminas/laminas-mvc-plugin-flashmessenger": "^1.2", "laminas/laminas-navigation": "^2.5", "laminas/laminas-paginator": "^2.5", "laminas/laminas-permissions-acl": "^2.6", From 3e2a6c5901493b155bfbc045ec4813b71fdad0f5 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 14:11:25 +0000 Subject: [PATCH 13/31] - Remove travis.yml - Add GHA ci yml - Add GHA badge to README.md Signed-off-by: George Steel --- .github/workflows/continuous-integration.yml | 33 +++++++++++ .travis.yml | 60 -------------------- README.md | 9 ++- 3 files changed, 37 insertions(+), 65 deletions(-) create mode 100644 .github/workflows/continuous-integration.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml new file mode 100644 index 000000000..907b42d40 --- /dev/null +++ b/.github/workflows/continuous-integration.yml @@ -0,0 +1,33 @@ +name: "Continuous Integration" + +on: + pull_request: + push: + branches: + - '[0-9]+.[0-9]+.x' + - 'refs/pull/*' + tags: + +jobs: + matrix: + name: Generate job matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.matrix.outputs.matrix }} + steps: + - name: Gather CI configuration + id: matrix + uses: laminas/laminas-ci-matrix-action@v1 + + qa: + name: QA Checks + needs: [matrix] + runs-on: ${{ matrix.operatingSystem }} + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.matrix.outputs.matrix) }} + steps: + - name: ${{ matrix.name }} + uses: laminas/laminas-continuous-integration-action@v1 + with: + job: ${{ matrix.job }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f9d8e3877..000000000 --- a/.travis.yml +++ /dev/null @@ -1,60 +0,0 @@ -language: php - -cache: - directories: - - $HOME/.composer/cache - -env: - global: - - COMPOSER_PROCESS_TIMEOUT=600 - - COMPOSER_ARGS="--no-interaction" - - COVERAGE_DEPS="php-coveralls/php-coveralls" - - LOWEST_DEPS_REMOVE="laminas/laminas-router" - - LATEST_DEPS_REQUIRE="laminas/laminas-mvc-plugin-flashmessenger laminas/laminas-mvc-i18n laminas/laminas-mvc-console" - -matrix: - fast_finish: true - include: - - php: 7.3 - env: - - DEPS=lowest - - php: 7.3 - env: - - DEPS=latest - - CS_CHECK=true - - TEST_COVERAGE=true - - php: 7.4 - env: - - DEPS=lowest - - php: 7.4 - env: - - DEPS=latest - - php: 8.0 - env: - - DEPS=lowest - - COMPOSER_ARGS="--no-interaction --ignore-platform-reqs" - - php: 8.0 - env: - - DEPS=latest - - COMPOSER_ARGS="--no-interaction --ignore-platform-reqs" - -before_install: - - if [[ $TEST_COVERAGE != 'true' ]]; then phpenv config-rm xdebug.ini || return 0 ; fi - - if [[ $DEPS == 'lowest' ]]; then travis_retry composer remove $COMPOSER_ARGS --no-update --dev $LOWEST_DEPS_REMOVE ; fi - - if [[ $DEPS == 'latest' ]]; then travis_retry composer require $COMPOSER_ARGS --no-update --dev $LATEST_DEPS_REQUIRE ; fi - -install: - - if [[ $DEPS == 'lowest' ]]; then travis_retry composer update $COMPOSER_ARGS --prefer-lowest ; fi - - if [[ $DEPS == 'latest' ]]; then travis_retry composer update $COMPOSER_ARGS ; fi - - if [[ $TEST_COVERAGE == 'true' ]]; then travis_retry composer require --dev $COMPOSER_ARGS $COVERAGE_DEPS ; fi - - stty cols 120 && composer show - -script: - - if [[ $TEST_COVERAGE == 'true' ]]; then composer test-coverage ; else composer test ; fi - - if [[ $CS_CHECK == 'true' ]]; then composer cs-check ; fi - -after_script: - - if [[ $TEST_COVERAGE == 'true' ]]; then travis_retry php vendor/bin/php-coveralls -v ; fi - -notifications: - email: false diff --git a/README.md b/README.md index 7d83bdb3d..d4eb109dd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # laminas-view -[![Build Status](https://travis-ci.com/laminas/laminas-view.svg?branch=master)](https://travis-ci.com/laminas/laminas-view) -[![Coverage Status](https://coveralls.io/repos/github/laminas/laminas-view/badge.svg?branch=master)](https://coveralls.io/github/laminas/laminas-view?branch=master) +[![Build Status](https://github.com/laminas/laminas-view/workflows/Continuous%20Integration/badge.svg)](https://github.com/laminas/laminas-view/actions?query=workflow%3A"Continuous+Integration") laminas-view provides the “View” layer of the Laminas MVC system. It is a multi-tiered system allowing a variety of mechanisms for extension, @@ -21,6 +20,6 @@ Browse the documentation online at https://docs.laminas.dev/laminas-view/ ## Support -* [Issues](https://github.com/laminas/laminas-view/issues/) -* [Chat](https://laminas.dev/chat/) -* [Forum](https://discourse.laminas.dev/) +- [Issues](https://github.com/laminas/laminas-view/issues/) +- [Chat](https://laminas.dev/chat/) +- [Forum](https://discourse.laminas.dev/) From 260159f4441a130e9fa1bd77f7e8ce1076f6fd99 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 14:11:43 +0000 Subject: [PATCH 14/31] Add composer lock file Signed-off-by: George Steel --- .gitignore | 1 - composer.lock | 5411 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 5411 insertions(+), 1 deletion(-) create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 0b92d9cf2..b33a88187 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /clover.xml -/composer.lock /coveralls-upload.json /docs/html/ /laminas-mkdoc-theme.tgz diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..5a7ecfc07 --- /dev/null +++ b/composer.lock @@ -0,0 +1,5411 @@ +{ + "_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": "6df737fff645eed77625bee1f034bc29", + "packages": [ + { + "name": "laminas/laminas-eventmanager", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ^8.0" + }, + "replace": { + "zendframework/zend-eventmanager": "^3.2.1" + }, + "require-dev": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "container-interop/container-interop": "^1.1, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-eventmanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-eventmanager/issues", + "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", + "source": "https://github.com/laminas/laminas-eventmanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-08-25T11:10:44+00:00" + }, + { + "name": "laminas/laminas-json", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-json.git", + "reference": "1e3b64d3b21dac0511e628ae8debc81002d14e3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-json/zipball/1e3b64d3b21dac0511e628ae8debc81002d14e3c", + "reference": "1e3b64d3b21dac0511e628ae8debc81002d14e3c", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-json": "^3.1.2" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-stdlib": "^2.7.7 || ^3.1", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-json-server": "For implementing JSON-RPC servers", + "laminas/laminas-xml2json": "For converting XML documents to JSON" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://laminas.dev", + "keywords": [ + "json", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-json/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-json/issues", + "rss": "https://github.com/laminas/laminas-json/releases.atom", + "source": "https://github.com/laminas/laminas-json" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-12T15:38:10+00:00" + }, + { + "name": "laminas/laminas-loader", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-loader.git", + "reference": "bcf8a566cb9925a2e7cc41a16db09235ec9fb616" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/bcf8a566cb9925a2e7cc41a16db09235ec9fb616", + "reference": "bcf8a566cb9925a2e7cc41a16db09235ec9fb616", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-loader": "^2.6.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Loader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Autoloading and plugin loading strategies", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "loader" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-loader/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-loader/issues", + "rss": "https://github.com/laminas/laminas-loader/releases.atom", + "source": "https://github.com/laminas/laminas-loader" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-12T16:08:18+00:00" + }, + { + "name": "laminas/laminas-stdlib", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-stdlib.git", + "reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/d81c7ffe602ed0e6ecb18691019111c0f4bf1efe", + "reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ^8.0" + }, + "replace": { + "zendframework/zend-stdlib": "^3.2.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "~9.3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "SPL extensions, array utilities, error handlers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "stdlib" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-stdlib/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-stdlib/issues", + "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", + "source": "https://github.com/laminas/laminas-stdlib" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-11-19T20:18:59+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-09-14T14:23:00+00:00" + } + ], + "packages-dev": [ + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "support": { + "issues": "https://github.com/container-interop/container-interop/issues", + "source": "https://github.com/container-interop/container-interop/tree/master" + }, + "abandoned": "psr/container", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "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": "laminas/laminas-authentication", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-authentication.git", + "reference": "53505e07858d243792b96be763456f786d953501" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-authentication/zipball/53505e07858d243792b96be763456f786d953501", + "reference": "53505e07858d243792b96be763456f786d953501", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-authentication": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-crypt": "^2.6 || ^3.2.1", + "laminas/laminas-db": "^2.8.2", + "laminas/laminas-http": "^2.7", + "laminas/laminas-ldap": "^2.8", + "laminas/laminas-session": "^2.8", + "laminas/laminas-uri": "^2.5.2", + "laminas/laminas-validator": "^2.10.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "laminas/laminas-crypt": "Laminas\\Crypt component", + "laminas/laminas-db": "Laminas\\Db component", + "laminas/laminas-http": "Laminas\\Http component", + "laminas/laminas-ldap": "Laminas\\Ldap component", + "laminas/laminas-session": "Laminas\\Session component", + "laminas/laminas-uri": "Laminas\\Uri component", + "laminas/laminas-validator": "Laminas\\Validator component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev", + "dev-develop": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Authentication\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an API for authentication and includes concrete authentication adapters for common use case scenarios", + "homepage": "https://laminas.dev", + "keywords": [ + "Authentication", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-authentication/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-authentication/issues", + "rss": "https://github.com/laminas/laminas-authentication/releases.atom", + "source": "https://github.com/laminas/laminas-authentication" + }, + "time": "2019-12-31T16:14:48+00:00" + }, + { + "name": "laminas/laminas-cache", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache.git", + "reference": "060b2a71d42b12122a3546594727e7d4b870abd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/060b2a71d42b12122a3546594727e7d4b870abd5", + "reference": "060b2a71d42b12122a3546594727e7d4b870abd5", + "shasum": "" + }, + "require": { + "laminas/laminas-cache-storage-adapter-apc": "^1.0", + "laminas/laminas-cache-storage-adapter-apcu": "^1.0", + "laminas/laminas-cache-storage-adapter-blackhole": "^1.0", + "laminas/laminas-cache-storage-adapter-dba": "^1.0", + "laminas/laminas-cache-storage-adapter-ext-mongodb": "^1.0", + "laminas/laminas-cache-storage-adapter-filesystem": "^1.0", + "laminas/laminas-cache-storage-adapter-memcache": "^1.0", + "laminas/laminas-cache-storage-adapter-memcached": "^1.0", + "laminas/laminas-cache-storage-adapter-memory": "^1.0", + "laminas/laminas-cache-storage-adapter-mongodb": "^1.0", + "laminas/laminas-cache-storage-adapter-redis": "^1.0", + "laminas/laminas-cache-storage-adapter-session": "^1.0", + "laminas/laminas-cache-storage-adapter-wincache": "^1.0", + "laminas/laminas-cache-storage-adapter-xcache": "^1.0", + "laminas/laminas-cache-storage-adapter-zend-server": "^1.0", + "laminas/laminas-eventmanager": "^2.6.3 || ^3.2", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "replace": { + "zendframework/zend-cache": "^2.9.0" + }, + "require-dev": { + "cache/integration-tests": "^0.16", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-serializer": "^2.6", + "phpbench/phpbench": "^0.13", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "laminas/laminas-serializer": "Laminas\\Serializer component" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Cache", + "config-provider": "Laminas\\Cache\\ConfigProvider" + } + }, + "autoload": { + "files": [ + "autoload/patternPluginManagerPolyfill.php" + ], + "psr-4": { + "Laminas\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output", + "homepage": "https://laminas.dev", + "keywords": [ + "cache", + "laminas", + "psr-16", + "psr-6" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-cache/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-cache/issues", + "rss": "https://github.com/laminas/laminas-cache/releases.atom", + "source": "https://github.com/laminas/laminas-cache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-11-08T13:01:19+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-apc", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-apc.git", + "reference": "8b375d994f6e67534f6ae6e995249e706faa30c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-apc/zipball/8b375d994f6e67534f6ae6e995249e706faa30c1", + "reference": "8b375d994f6e67534f6ae6e995249e706faa30c1", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "ext-apc": "APC or compatible extension, to use the APC storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-apc/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-apc/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-apc/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-apc" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:04:12+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-apcu", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-apcu.git", + "reference": "1fdd7585042c1a577f6e630535df1e86e23cf5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-apcu/zipball/1fdd7585042c1a577f6e630535df1e86e23cf5dc", + "reference": "1fdd7585042c1a577f6e630535df1e86e23cf5dc", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for apcu", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-apcu/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-apcu/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-apcu/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-apcu" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:05:19+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-blackhole", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole.git", + "reference": "5f2cb437160fbc01d7f216b11e4f1ff4c9b95c49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-blackhole/zipball/5f2cb437160fbc01d7f216b11e4f1ff4c9b95c49", + "reference": "5f2cb437160fbc01d7f216b11e4f1ff4c9b95c49", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for blackhole", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-blackhole/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:07:07+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-dba", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-dba.git", + "reference": "ad968d3d8a0350af8e6717be58bb96e5a9e77f3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-dba/zipball/ad968d3d8a0350af8e6717be58bb96e5a9e77f3b", + "reference": "ad968d3d8a0350af8e6717be58bb96e5a9e77f3b", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-dba": "DBA, to use the DBA storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for dba", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-dba/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-dba/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-dba/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-dba" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:08:58+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-ext-mongodb", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb.git", + "reference": "011ec5a8ca721ba012d232b1a01b50a55904b99f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-ext-mongodb/zipball/011ec5a8ca721ba012d232b1a01b50a55904b99f", + "reference": "011ec5a8ca721ba012d232b1a01b50a55904b99f", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-mongodb": "MongoDB, to use the ExtMongoDb storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for ext-mongodb", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-ext-mongodb/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:11:06+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-filesystem", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem.git", + "reference": "e803d9942b30396491efbe649a3886450d22385f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-filesystem/zipball/e803d9942b30396491efbe649a3886450d22385f", + "reference": "e803d9942b30396491efbe649a3886450d22385f", + "shasum": "" + }, + "require": { + "laminas/laminas-cache": "^2.10@dev", + "php": "^7.3 || ~8.0.0" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for filesystem", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-filesystem/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-12-31T04:18:10+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-memcache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-memcache.git", + "reference": "62d0fab1cd261b44a81821e986c0110d7dda896b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memcache/zipball/62d0fab1cd261b44a81821e986c0110d7dda896b", + "reference": "62d0fab1cd261b44a81821e986c0110d7dda896b", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for memcache", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memcache/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-memcache/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-memcache/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-memcache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:13:36+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-memcached", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-memcached.git", + "reference": "29599106bb501eb96207b175c460c95487518db1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memcached/zipball/29599106bb501eb96207b175c460c95487518db1", + "reference": "29599106bb501eb96207b175c460c95487518db1", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for memcached", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memcached/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-memcached/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-memcached/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-memcached" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:16:42+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-memory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-memory.git", + "reference": "58f4b45281552bb6673c900fadddad21e0ed05c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memory/zipball/58f4b45281552bb6673c900fadddad21e0ed05c8", + "reference": "58f4b45281552bb6673c900fadddad21e0ed05c8", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for memory", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memory/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-memory/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-memory/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-memory" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:17:47+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-mongodb", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb.git", + "reference": "ef4aa396b55533b8eb3e1d4126c39a78a22e49a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-mongodb/zipball/ef4aa396b55533b8eb3e1d4126c39a78a22e49a6", + "reference": "ef4aa396b55533b8eb3e1d4126c39a78a22e49a6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for mongodb", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-mongodb/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:19:10+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-redis", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-redis.git", + "reference": "3fe904953d17728d7fdaa87be603231f23fb0a4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-redis/zipball/3fe904953d17728d7fdaa87be603231f23fb0a4d", + "reference": "3fe904953d17728d7fdaa87be603231f23fb0a4d", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for redis", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-redis/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-redis/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-redis/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-redis" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:20:13+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-session", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-session.git", + "reference": "0d2276cd61bd162cd38c53aaa22f18137621dc0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-session/zipball/0d2276cd61bd162cd38c53aaa22f18137621dc0c", + "reference": "0d2276cd61bd162cd38c53aaa22f18137621dc0c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-session": "^2.7.4", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "laminas/laminas-session": "Laminas\\Session component" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for session", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-session/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-session/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-session/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-session" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:21:28+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-wincache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-wincache.git", + "reference": "0f54599c5d9aff11b01adadd2742097f923170ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-wincache/zipball/0f54599c5d9aff11b01adadd2742097f923170ba", + "reference": "0f54599c5d9aff11b01adadd2742097f923170ba", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-wincache": "WinCache, to use the WinCache storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for wincache", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-wincache/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-wincache/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-wincache/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-wincache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:22:49+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-xcache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-xcache.git", + "reference": "24049557aa796ec7527bcc8032ed68346232b219" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-xcache/zipball/24049557aa796ec7527bcc8032ed68346232b219", + "reference": "24049557aa796ec7527bcc8032ed68346232b219", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-serializer": "^2.9", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-xcache": "XCache, to use the XCache storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for xcache", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-xcache/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-xcache/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-xcache/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-xcache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:23:46+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-zend-server", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server.git", + "reference": "8d0b0d219a048a92472d89a5e527990f3ea2decc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-zend-server/zipball/8d0b0d219a048a92472d89a5e527990f3ea2decc", + "reference": "8d0b0d219a048a92472d89a5e527990f3ea2decc", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for zend-server", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-zend-server/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:24:25+00:00" + }, + { + "name": "laminas/laminas-coding-standard", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-coding-standard.git", + "reference": "08880ce2fbfe62d471cd3cb766a91da630b32539" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/08880ce2fbfe62d471cd3cb766a91da630b32539", + "reference": "08880ce2fbfe62d471cd3cb766a91da630b32539", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "replace": { + "zendframework/zend-coding-standard": "self.version" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas coding standard", + "homepage": "https://laminas.dev", + "keywords": [ + "Coding Standard", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-coding-standard/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-coding-standard/issues", + "rss": "https://github.com/laminas/laminas-coding-standard/releases.atom", + "source": "https://github.com/laminas/laminas-coding-standard" + }, + "time": "2019-12-31T16:28:26+00:00" + }, + { + "name": "laminas/laminas-config", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-config.git", + "reference": "71ba6d5dd703196ce66b25abc4d772edb094dae1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-config/zipball/71ba6d5dd703196ce66b25abc4d772edb094dae1", + "reference": "71ba6d5dd703196ce66b25abc4d772edb094dae1", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.5 || ^7.0" + }, + "replace": { + "zendframework/zend-config": "self.version" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "laminas/laminas-filter": "^2.6", + "laminas/laminas-i18n": "^2.5", + "laminas/laminas-json": "^2.6.1", + "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "laminas/laminas-filter": "Laminas\\Filter component", + "laminas/laminas-i18n": "Laminas\\I18n component", + "laminas/laminas-json": "Laminas\\Json to use the Json reader or writer classes", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://laminas.dev", + "keywords": [ + "config", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-config/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-config/issues", + "rss": "https://github.com/laminas/laminas-config/releases.atom", + "source": "https://github.com/laminas/laminas-config" + }, + "time": "2019-12-31T16:30:04+00:00" + }, + { + "name": "laminas/laminas-console", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-console.git", + "reference": "478a6ceac3e31fb38d6314088abda8b239ee23a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-console/zipball/478a6ceac3e31fb38d6314088abda8b239ee23a5", + "reference": "478a6ceac3e31fb38d6314088abda8b239ee23a5", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-console": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-filter": "^2.7.2", + "laminas/laminas-json": "^2.6 || ^3.0", + "laminas/laminas-validator": "^2.10.1", + "phpunit/phpunit": "^5.7.23 || ^6.4.3" + }, + "suggest": { + "laminas/laminas-filter": "To support DefaultRouteMatcher usage", + "laminas/laminas-validator": "To support DefaultRouteMatcher usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev", + "dev-develop": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Console\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Build console applications using getopt syntax or routing, complete with prompts", + "homepage": "https://laminas.dev", + "keywords": [ + "console", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-console/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-console/issues", + "rss": "https://github.com/laminas/laminas-console/releases.atom", + "source": "https://github.com/laminas/laminas-console" + }, + "abandoned": "laminas/laminas-cli", + "time": "2019-12-31T16:31:45+00:00" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/5e04bc5ae5990b17159d79d331055e2c645e5cc5", + "reference": "5e04bc5ae5990b17159d79d331055e2c645e5cc5", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-escaper": "^2.6.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.12.2", + "vimeo/psalm": "^3.16" + }, + "suggest": { + "ext-iconv": "*", + "ext-mbstring": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-11-17T21:26:43+00:00" + }, + { + "name": "laminas/laminas-feed", + "version": "2.13.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-feed.git", + "reference": "45d36702d09afd5d8ca01192ecd3b5afaf37126b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-feed/zipball/45d36702d09afd5d8ca01192ecd3b5afaf37126b", + "reference": "45d36702d09afd5d8ca01192ecd3b5afaf37126b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "laminas/laminas-escaper": "^2.5.2", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-servicemanager": "<3.3" + }, + "replace": { + "zendframework/zend-feed": "^2.12.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.7.2", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-db": "^2.8.2", + "laminas/laminas-http": "^2.7", + "laminas/laminas-servicemanager": "^3.3", + "laminas/laminas-validator": "^2.10.1", + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.13.0", + "psr/http-message": "^1.0.1", + "vimeo/psalm": "^4.1" + }, + "suggest": { + "laminas/laminas-cache": "Laminas\\Cache component, for optionally caching feeds between requests", + "laminas/laminas-db": "Laminas\\Db component, for use with PubSubHubbub", + "laminas/laminas-http": "Laminas\\Http for PubSubHubbub, and optionally for use with Laminas\\Feed\\Reader", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for easily extending ExtensionManager implementations", + "laminas/laminas-validator": "Laminas\\Validator component, for validating email addresses used in Atom feeds and entries when using the Writer subcomponent", + "psr/http-message": "PSR-7 ^1.0.1, if you wish to use Laminas\\Feed\\Reader\\Http\\Psr7ResponseDecorator" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Feed\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides functionality for consuming RSS and Atom feeds", + "homepage": "https://laminas.dev", + "keywords": [ + "feed", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-feed/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-feed/issues", + "rss": "https://github.com/laminas/laminas-feed/releases.atom", + "source": "https://github.com/laminas/laminas-feed" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-01-04T19:20:24+00:00" + }, + { + "name": "laminas/laminas-filter", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-filter.git", + "reference": "cfb40b104e92a0b52bee696b74f958798ad8faa4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/cfb40b104e92a0b52bee696b74f958798ad8faa4", + "reference": "cfb40b104e92a0b52bee696b74f958798ad8faa4", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-validator": "<2.10.1" + }, + "replace": { + "zendframework/zend-filter": "^2.9.2" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-crypt": "^3.2.1", + "laminas/laminas-servicemanager": "^3.3", + "laminas/laminas-uri": "^2.6", + "pear/archive_tar": "^1.4.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.3", + "psr/http-factory": "^1.0" + }, + "suggest": { + "laminas/laminas-crypt": "Laminas\\Crypt component, for encryption filters", + "laminas/laminas-i18n": "Laminas\\I18n component for filters depending on i18n functionality", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component, for using the filter chain functionality", + "laminas/laminas-uri": "Laminas\\Uri component, for the UriNormalize filter", + "psr/http-factory-implementation": "psr/http-factory-implementation, for creating file upload instances when consuming PSR-7 in file upload filters" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Filter", + "config-provider": "Laminas\\Filter\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Programmatically filter and normalize data and files", + "homepage": "https://laminas.dev", + "keywords": [ + "filter", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-filter/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-filter/issues", + "rss": "https://github.com/laminas/laminas-filter/releases.atom", + "source": "https://github.com/laminas/laminas-filter" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-01-01T14:37:45+00:00" + }, + { + "name": "laminas/laminas-http", + "version": "2.14.3", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-http.git", + "reference": "bfaab8093e382274efed7fdc3ceb15f09ba352bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/bfaab8093e382274efed7fdc3ceb15f09ba352bb", + "reference": "bfaab8093e382274efed7fdc3ceb15f09ba352bb", + "shasum": "" + }, + "require": { + "laminas/laminas-loader": "^2.5.1", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-uri": "^2.5.2", + "laminas/laminas-validator": "^2.10.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-http": "^2.11.2" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config": "^3.1 || ^2.6", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "paragonie/certainty": "For automated management of cacert.pem" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "http client", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-http/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-http/issues", + "rss": "https://github.com/laminas/laminas-http/releases.atom", + "source": "https://github.com/laminas/laminas-http" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-18T21:58:11+00:00" + }, + { + "name": "laminas/laminas-i18n", + "version": "2.11.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-i18n.git", + "reference": "85678f444b6dcb48e8a04591779e11c24e5bb901" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/85678f444b6dcb48e8a04591779e11c24e5bb901", + "reference": "85678f444b6dcb48e8a04591779e11c24e5bb901", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0" + }, + "replace": { + "zendframework/zend-i18n": "^2.10.1" + }, + "require-dev": { + "laminas/laminas-cache": "^2.6.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config": "^2.6", + "laminas/laminas-eventmanager": "^2.6.2 || ^3.0", + "laminas/laminas-filter": "^2.6.1", + "laminas/laminas-servicemanager": "^3.2.1", + "laminas/laminas-validator": "^2.6", + "laminas/laminas-view": "^2.6.3", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-cache": "Laminas\\Cache component", + "laminas/laminas-config": "Laminas\\Config component", + "laminas/laminas-eventmanager": "You should install this package to use the events in the translator", + "laminas/laminas-filter": "You should install this package to use the provided filters", + "laminas/laminas-i18n-resources": "Translation resources", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component", + "laminas/laminas-validator": "You should install this package to use the provided validators", + "laminas/laminas-view": "You should install this package to use the provided view helpers" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\I18n", + "config-provider": "Laminas\\I18n\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provide translations for your application, and filter and validate internationalized values", + "homepage": "https://laminas.dev", + "keywords": [ + "i18n", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-i18n/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-i18n/issues", + "rss": "https://github.com/laminas/laminas-i18n/releases.atom", + "source": "https://github.com/laminas/laminas-i18n" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-24T13:14:32+00:00" + }, + { + "name": "laminas/laminas-log", + "version": "2.13.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-log.git", + "reference": "6ac20830d4f324b4662fc454fcc1954436bfced3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-log/zipball/6ac20830d4f324b4662fc454fcc1954436bfced3", + "reference": "6ac20830d4f324b4662fc454fcc1954436bfced3", + "shasum": "" + }, + "require": { + "laminas/laminas-servicemanager": "^3.3.0", + "laminas/laminas-stdlib": "^3.0", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0", + "psr/log": "^1.1.2" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "replace": { + "zendframework/zend-log": "^2.12.0" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-db": "^2.6", + "laminas/laminas-escaper": "^2.5", + "laminas/laminas-filter": "^2.5", + "laminas/laminas-mail": "^2.6.1", + "laminas/laminas-validator": "^2.10.1", + "mikey179/vfsstream": "^1.6.7", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.4.1" + }, + "suggest": { + "ext-mongo": "mongo extension to use Mongo writer", + "ext-mongodb": "mongodb extension to use MongoDB writer", + "laminas/laminas-db": "Laminas\\Db component to use the database log writer", + "laminas/laminas-escaper": "Laminas\\Escaper component, for use in the XML log formatter", + "laminas/laminas-mail": "Laminas\\Mail component to use the email log writer", + "laminas/laminas-validator": "Laminas\\Validator component to block invalid log messages" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Log", + "config-provider": "Laminas\\Log\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Log\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Robust, composite logger with filtering, formatting, and PSR-3 support", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "log", + "logging" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-log/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-log/issues", + "rss": "https://github.com/laminas/laminas-log/releases.atom", + "source": "https://github.com/laminas/laminas-log" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-12T16:46:26+00:00" + }, + { + "name": "laminas/laminas-modulemanager", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-modulemanager.git", + "reference": "789bbd4ab391da9221f265f6bb2d594f8f11855b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/789bbd4ab391da9221f265f6bb2d594f8f11855b", + "reference": "789bbd4ab391da9221f265f6bb2d594f8f11855b", + "shasum": "" + }, + "require": { + "laminas/laminas-config": "^3.1 || ^2.6", + "laminas/laminas-eventmanager": "^3.2 || ^2.6.3", + "laminas/laminas-stdlib": "^3.1 || ^2.7", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0", + "webimpress/safe-writer": "^1.0.2 || ^2.1" + }, + "replace": { + "zendframework/zend-modulemanager": "^2.8.4" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-console": "^2.6", + "laminas/laminas-di": "^2.6", + "laminas/laminas-loader": "^2.5", + "laminas/laminas-mvc": "^3.0 || ^2.7", + "laminas/laminas-servicemanager": "^3.0.3 || ^2.7.5", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.16" + }, + "suggest": { + "laminas/laminas-console": "Laminas\\Console component", + "laminas/laminas-loader": "Laminas\\Loader component if you are not using Composer autoloading for your modules", + "laminas/laminas-mvc": "Laminas\\Mvc component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laminas\\ModuleManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Modular application system for laminas-mvc applications", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "modulemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-modulemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-modulemanager/issues", + "rss": "https://github.com/laminas/laminas-modulemanager/releases.atom", + "source": "https://github.com/laminas/laminas-modulemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-08-25T09:29:22+00:00" + }, + { + "name": "laminas/laminas-mvc", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-mvc.git", + "reference": "88da7200cf8f5a970c35d91717a5c4db94981e5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/88da7200cf8f5a970c35d91717a5c4db94981e5e", + "reference": "88da7200cf8f5a970c35d91717a5c4db94981e5e", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-eventmanager": "^3.2", + "laminas/laminas-http": "^2.7", + "laminas/laminas-modulemanager": "^2.8", + "laminas/laminas-router": "^3.0.2", + "laminas/laminas-servicemanager": "^3.3", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-view": "^2.11.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-mvc": "^3.1.1" + }, + "require-dev": { + "http-interop/http-middleware": "^0.4.1", + "laminas/laminas-coding-standard": "^1.0.0", + "laminas/laminas-json": "^2.6.1 || ^3.0", + "laminas/laminas-psr7bridge": "^1.0", + "laminas/laminas-stratigility": ">=2.0.1 <2.2", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.4.2" + }, + "suggest": { + "laminas/laminas-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable", + "laminas/laminas-log": "^2.9.1 To provide log functionality via LogFilterManager, LogFormatterManager, and LogProcessorManager", + "laminas/laminas-mvc-console": "laminas-mvc-console provides the ability to expose laminas-mvc as a console application", + "laminas/laminas-mvc-i18n": "laminas-mvc-i18n provides integration with laminas-i18n, including a translation bridge and translatable route segments", + "laminas/laminas-mvc-middleware": "To dispatch middleware in your laminas-mvc application", + "laminas/laminas-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads", + "laminas/laminas-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests", + "laminas/laminas-mvc-plugin-identity": "To access the authenticated identity (per laminas-authentication) in controllers", + "laminas/laminas-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers", + "laminas/laminas-paginator": "^2.7 To provide pagination functionality via PaginatorPluginManager", + "laminas/laminas-servicemanager-di": "laminas-servicemanager-di provides utilities for integrating laminas-di and laminas-servicemanager in your laminas-mvc application" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Mvc\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas's event-driven MVC layer, including MVC Applications, Controllers, and Plugins", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "mvc" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-mvc/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-mvc/issues", + "rss": "https://github.com/laminas/laminas-mvc/releases.atom", + "source": "https://github.com/laminas/laminas-mvc" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-12-14T21:54:40+00:00" + }, + { + "name": "laminas/laminas-navigation", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-navigation.git", + "reference": "b877f813cbc053a9d6e0a81d882f9e809ba2e827" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-navigation/zipball/b877f813cbc053a9d6e0a81d882f9e809ba2e827", + "reference": "b877f813cbc053a9d6e0a81d882f9e809ba2e827", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^2.7 || ^3.0", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-navigation": "^2.9.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config": "^2.6 || ^3.1", + "laminas/laminas-console": "^2.6", + "laminas/laminas-http": "^2.6", + "laminas/laminas-i18n": "^2.7.3", + "laminas/laminas-log": "^2.9.1", + "laminas/laminas-mvc": "^2.7.9 || ^3.0.4", + "laminas/laminas-permissions-acl": "^2.6", + "laminas/laminas-router": "^3.0.2", + "laminas/laminas-servicemanager": "^3.2.1", + "laminas/laminas-uri": "^2.5.2", + "laminas/laminas-view": "^2.9", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.4.1" + }, + "suggest": { + "laminas/laminas-config": "^2.6 || ^3.1, to provide page configuration (optional, as arrays and Traversables are also allowed)", + "laminas/laminas-permissions-acl": "^2.6, to provide ACL-based access restrictions to pages", + "laminas/laminas-router": "^3.0, to use router-based URI generation with Mvc pages", + "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3, to use the navigation factories", + "laminas/laminas-view": "^2.8.1, to use the navigation view helpers" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Navigation", + "config-provider": "Laminas\\Navigation\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Navigation\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Manage trees of pointers to web pages in order to build navigation systems", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "navigation" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-navigation/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-navigation/issues", + "rss": "https://github.com/laminas/laminas-navigation/releases.atom", + "source": "https://github.com/laminas/laminas-navigation" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-01-26T16:09:44+00:00" + }, + { + "name": "laminas/laminas-paginator", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-paginator.git", + "reference": "f1cf5c29d8dd7d6aa77f490e322326b3b670e28c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-paginator/zipball/f1cf5c29d8dd7d6aa77f490e322326b3b670e28c", + "reference": "f1cf5c29d8dd7d6aa77f490e322326b3b670e28c", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0.4", + "php": "^7.3" + }, + "replace": { + "zendframework/zend-paginator": "^2.8.2" + }, + "require-dev": { + "laminas/laminas-cache": "^2.9.0", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config": "^2.6.0", + "laminas/laminas-db": "^2.11.3", + "laminas/laminas-filter": "^2.9.4", + "laminas/laminas-json": "^2.6.1", + "laminas/laminas-servicemanager": "^3.4.1", + "laminas/laminas-view": "^2.11.4", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "laminas/laminas-cache": "Laminas\\Cache component to support cache features", + "laminas/laminas-db": "Laminas\\Db component", + "laminas/laminas-filter": "Laminas\\Filter component", + "laminas/laminas-json": "Laminas\\Json component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component", + "laminas/laminas-view": "Laminas\\View component" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Paginator", + "config-provider": "Laminas\\Paginator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Paginator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Paginate collections of data from arbitrary sources", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "paginator" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-paginator/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-paginator/issues", + "rss": "https://github.com/laminas/laminas-paginator/releases.atom", + "source": "https://github.com/laminas/laminas-paginator" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-09-10T14:55:55+00:00" + }, + { + "name": "laminas/laminas-permissions-acl", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-permissions-acl.git", + "reference": "d8cd35ed94eef5d3d2533af4a72cf1c2932084bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-permissions-acl/zipball/d8cd35ed94eef5d3d2533af4a72cf1c2932084bb", + "reference": "d8cd35ed94eef5d3d2533af4a72cf1c2932084bb", + "shasum": "" + }, + "require": { + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "replace": { + "zendframework/zend-permissions-acl": "^2.7.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-servicemanager": "^2.7.5 || ^3.0.3", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.5" + }, + "suggest": { + "laminas/laminas-servicemanager": "To support Laminas\\Permissions\\Acl\\Assertion\\AssertionManager plugin manager usage" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Permissions\\Acl\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides a lightweight and flexible access control list (ACL) implementation for privileges management", + "homepage": "https://laminas.dev", + "keywords": [ + "acl", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-permissions-acl/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-permissions-acl/issues", + "rss": "https://github.com/laminas/laminas-permissions-acl/releases.atom", + "source": "https://github.com/laminas/laminas-permissions-acl" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-09-22T14:08:17+00:00" + }, + { + "name": "laminas/laminas-router", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-router.git", + "reference": "2a7068508af4de67d80ea292e0cc7c37563a33c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/2a7068508af4de67d80ea292e0cc7c37563a33c6", + "reference": "2a7068508af4de67d80ea292e0cc7c37563a33c6", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-http": "^2.8.1", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-router": "^3.3.0" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-i18n": "^2.7.4", + "phpunit/phpunit": "^9.4" + }, + "suggest": { + "laminas/laminas-i18n": "^2.7.4, if defining translatable HTTP path segments" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Router", + "config-provider": "Laminas\\Router\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Router\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Flexible routing system for HTTP and console applications", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "routing" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-router/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-router/issues", + "rss": "https://github.com/laminas/laminas-router/releases.atom", + "source": "https://github.com/laminas/laminas-router" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-12-16T22:10:51+00:00" + }, + { + "name": "laminas/laminas-serializer", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-serializer.git", + "reference": "254cf6a17b46d98808c0810939268f63538dcc0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-serializer/zipball/254cf6a17b46d98808c0810939268f63538dcc0c", + "reference": "254cf6a17b46d98808c0810939268f63538dcc0c", + "shasum": "" + }, + "require": { + "laminas/laminas-json": "^3.1", + "laminas/laminas-stdlib": "^3.2", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-serializer": "^2.9.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-math": "^3.3", + "laminas/laminas-servicemanager": "^3.6", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-math": "(^3.3) To support Python Pickle serialization", + "laminas/laminas-servicemanager": "(^3.6) To support plugin manager support" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Serializer", + "config-provider": "Laminas\\Serializer\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Serializer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Serialize and deserialize PHP structures to a variety of representations", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "serializer" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-serializer/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-serializer/issues", + "rss": "https://github.com/laminas/laminas-serializer/releases.atom", + "source": "https://github.com/laminas/laminas-serializer" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-18T14:21:13+00:00" + }, + { + "name": "laminas/laminas-servicemanager", + "version": "3.6.4", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-servicemanager.git", + "reference": "b1445e1a7077c21b0fad0974a1b7a11b9dbe0828" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/b1445e1a7077c21b0fad0974a1b7a11b9dbe0828", + "reference": "b1445e1a7077c21b0fad0974a1b7a11b9dbe0828", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0", + "psr/container": "^1.0" + }, + "conflict": { + "laminas/laminas-code": "<3.3.1", + "zendframework/zend-code": "<3.3.1" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "zendframework/zend-servicemanager": "^3.4.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.0", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-container-config-test": "^0.3", + "laminas/laminas-dependency-plugin": "^2.1", + "mikey179/vfsstream": "^1.6.8", + "ocramius/proxy-manager": "^2.2.3", + "phpbench/phpbench": "^1.0.0-alpha3", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.4" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" + }, + "bin": [ + "bin/generate-deps-for-config-factory", + "bin/generate-factory-for-class" + ], + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Factory-Driven Dependency Injection Container", + "homepage": "https://laminas.dev", + "keywords": [ + "PSR-11", + "dependency-injection", + "di", + "dic", + "laminas", + "service-manager", + "servicemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-servicemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-servicemanager/issues", + "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", + "source": "https://github.com/laminas/laminas-servicemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-03T08:44:41+00:00" + }, + { + "name": "laminas/laminas-session", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-session.git", + "reference": "921e6a9f807ee243a9a4f8a8a297929d0c2b50cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-session/zipball/921e6a9f807ee243a9a4f8a8a297929d0c2b50cd", + "reference": "921e6a9f807ee243a9a4f8a8a297929d0c2b50cd", + "shasum": "" + }, + "require": { + "laminas/laminas-eventmanager": "^3.0", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-session": "^2.9.1" + }, + "require-dev": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-cache": "^2.6.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-db": "^2.7", + "laminas/laminas-http": "^2.5.4", + "laminas/laminas-servicemanager": "^3.0.3", + "laminas/laminas-validator": "^2.6", + "mongodb/mongodb": "^1.0.1", + "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-cache": "Laminas\\Cache component", + "laminas/laminas-db": "Laminas\\Db component", + "laminas/laminas-http": "Laminas\\Http component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component", + "laminas/laminas-validator": "Laminas\\Validator component", + "mongodb/mongodb": "If you want to use the MongoDB session save handler" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Session", + "config-provider": "Laminas\\Session\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Session\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Object-oriented interface to PHP sessions and storage", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "session" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-session/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-session/issues", + "rss": "https://github.com/laminas/laminas-session/releases.atom", + "source": "https://github.com/laminas/laminas-session" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-31T15:33:31+00:00" + }, + { + "name": "laminas/laminas-uri", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-uri.git", + "reference": "79bd4c614c8cf9a6ba715a49fca8061e84933d87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/79bd4c614c8cf9a6ba715a49fca8061e84933d87", + "reference": "79bd4c614c8cf9a6ba715a49fca8061e84933d87", + "shasum": "" + }, + "require": { + "laminas/laminas-escaper": "^2.5", + "laminas/laminas-validator": "^2.10", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-uri": "^2.7.1" + }, + "require-dev": { + "laminas/laminas-coding-standard": "^2.1", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "uri" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-uri/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-uri/issues", + "rss": "https://github.com/laminas/laminas-uri/releases.atom", + "source": "https://github.com/laminas/laminas-uri" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-02-17T21:53:05+00:00" + }, + { + "name": "laminas/laminas-validator", + "version": "2.14.4", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-validator.git", + "reference": "e370c4695db1c81e6dfad38d8c4dbdb37b23d776" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/e370c4695db1c81e6dfad38d8c4dbdb37b23d776", + "reference": "e370c4695db1c81e6dfad38d8c4dbdb37b23d776", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-validator": "^2.13.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.6.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config": "^2.6", + "laminas/laminas-db": "^2.7", + "laminas/laminas-filter": "^2.6", + "laminas/laminas-http": "^2.14.2", + "laminas/laminas-i18n": "^2.6", + "laminas/laminas-math": "^2.6", + "laminas/laminas-servicemanager": "^2.7.11 || ^3.0.3", + "laminas/laminas-session": "^2.8", + "laminas/laminas-uri": "^2.7", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.15.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "vimeo/psalm": "^4.3" + }, + "suggest": { + "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", + "laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator", + "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", + "laminas/laminas-i18n-resources": "Translations of validator messages", + "laminas/laminas-math": "Laminas\\Math component, required by the Csrf validator", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator", + "laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators", + "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Validator", + "config-provider": "Laminas\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "validator" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-validator/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-validator/issues", + "rss": "https://github.com/laminas/laminas-validator/releases.atom", + "source": "https://github.com/laminas/laminas-validator" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-01-24T20:45:49+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.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "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.1.0" + }, + "time": "2021-02-23T14:00:09+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": "phpspec/prophecy-phpunit", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy-phpunit.git", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "phpspec/prophecy": "^1.3", + "phpunit/phpunit": "^9.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\PhpUnit\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integrating the Prophecy mocking library in PHPUnit test cases", + "homepage": "http://phpspec.net", + "keywords": [ + "phpunit", + "prophecy" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy-phpunit/issues", + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" + }, + "time": "2020-07-09T08:33:42+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": "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.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "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": "http://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.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+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": "squizlabs/php_codesniffer", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "2acf168de78487db620ab4bc524135a13cfe6745" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745", + "reference": "2acf168de78487db620ab4bc524135a13cfe6745", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2018-11-07T22:31:41+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": "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": "webimpress/safe-writer", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/webimpress/safe-writer.git", + "reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/5cfafdec5873c389036f14bf832a5efc9390dcdd", + "reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.8 || ^9.3.7", + "vimeo/psalm": "^3.14.2", + "webimpress/coding-standard": "^1.1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.0": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Webimpress\\SafeWriter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Tool to write files safely, to avoid race conditions", + "keywords": [ + "concurrent write", + "file writer", + "race condition", + "safe writer", + "webimpress" + ], + "support": { + "issues": "https://github.com/webimpress/safe-writer/issues", + "source": "https://github.com/webimpress/safe-writer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2020-08-25T07:21:11+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.3 || ~8.0.0" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} From 671824e645a5c3e1d8436840be9e5a74ceaebb95 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 25 Feb 2021 14:32:37 +0000 Subject: [PATCH 15/31] Remove empty tags Signed-off-by: George Steel --- .github/workflows/continuous-integration.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 907b42d40..ab6f8eee9 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -6,7 +6,6 @@ on: branches: - '[0-9]+.[0-9]+.x' - 'refs/pull/*' - tags: jobs: matrix: From 5f5902e71cc4843a2f3189c98e1cd170da8ead92 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 15:20:03 +0000 Subject: [PATCH 16/31] Updates composer lock to include I18N and Flash Messenger dependencies Signed-off-by: George Steel --- composer.lock | 146 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) diff --git a/composer.lock b/composer.lock index 5a7ecfc07..b23983efd 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": "6df737fff645eed77625bee1f034bc29", + "content-hash": "e4dafcda3a5ecc1585516c3011e1f6e5", "packages": [ { "name": "laminas/laminas-eventmanager", @@ -2298,6 +2298,150 @@ ], "time": "2020-12-14T21:54:40+00:00" }, + { + "name": "laminas/laminas-mvc-i18n", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-mvc-i18n.git", + "reference": "4184f6572b5244a5f5781604f1e03d7955e304a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-mvc-i18n/zipball/4184f6572b5244a5f5781604f1e03d7955e304a0", + "reference": "4184f6572b5244a5f5781604f1e03d7955e304a0", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-i18n": "^2.7", + "laminas/laminas-router": "^3.0", + "laminas/laminas-servicemanager": "^2.7.10 || ^3.0.3", + "laminas/laminas-stdlib": "^2.7.6 || ^3.0", + "laminas/laminas-validator": "^2.6", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-mvc": "<3.0.0", + "phpspec/prophecy": "<1.8.0" + }, + "replace": { + "zendframework/zend-mvc-i18n": "self.version" + }, + "require-dev": { + "laminas/laminas-cache": "^2.6.1", + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.5" + }, + "suggest": { + "laminas/laminas-cache": "To enable caching of translation strings" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev", + "dev-develop": "1.2.x-dev" + }, + "laminas": { + "component": "Laminas\\Mvc\\I18n", + "config-provider": "Laminas\\Mvc\\I18n\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Mvc\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Integration between laminas-mvc and laminas-i18n", + "homepage": "https://laminas.dev", + "keywords": [ + "i18n", + "laminas", + "mvc" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-mvc-i18n/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-mvc-i18n/issues", + "rss": "https://github.com/laminas/laminas-mvc-i18n/releases.atom", + "source": "https://github.com/laminas/laminas-mvc-i18n" + }, + "time": "2019-12-31T17:33:41+00:00" + }, + { + "name": "laminas/laminas-mvc-plugin-flashmessenger", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-mvc-plugin-flashmessenger.git", + "reference": "f5a522c3aab215a9b89a0630beb91582f4a3f202" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-flashmessenger/zipball/f5a522c3aab215a9b89a0630beb91582f4a3f202", + "reference": "f5a522c3aab215a9b89a0630beb91582f4a3f202", + "shasum": "" + }, + "require": { + "laminas/laminas-mvc": "^3.0", + "laminas/laminas-session": "^2.8.5", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-view": "^2.10", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-mvc": "<3.0.0" + }, + "replace": { + "zendframework/zend-mvc-plugin-flashmessenger": "self.version" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-i18n": "^2.8", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev", + "dev-develop": "1.3.x-dev" + }, + "laminas": { + "component": "Laminas\\Mvc\\Plugin\\FlashMessenger" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Mvc\\Plugin\\FlashMessenger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Plugin for creating and exposing flash messages via laminas-mvc controllers", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "mvc" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-mvc-plugin-flashmessenger/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-mvc-plugin-flashmessenger/issues", + "rss": "https://github.com/laminas/laminas-mvc-plugin-flashmessenger/releases.atom", + "source": "https://github.com/laminas/laminas-mvc-plugin-flashmessenger" + }, + "time": "2019-12-31T17:33:46+00:00" + }, { "name": "laminas/laminas-navigation", "version": "2.10.1", From 098e333f62e7c7744a1ff649f2c6e86f0be12848 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 15:47:25 +0000 Subject: [PATCH 17/31] Changes the navigation helper test to use the Laminas\Router\RouteMatch as Router v3 is required in dev. Signed-off-by: George Steel --- test/Helper/Navigation/AbstractTest.php | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/test/Helper/Navigation/AbstractTest.php b/test/Helper/Navigation/AbstractTest.php index 0f41e0d66..237037faf 100644 --- a/test/Helper/Navigation/AbstractTest.php +++ b/test/Helper/Navigation/AbstractTest.php @@ -10,7 +10,6 @@ use Laminas\Config\Factory as ConfigFactory; use Laminas\I18n\Translator\Translator; -use Laminas\Mvc\Router\RouteMatch as V2RouteMatch; use Laminas\Mvc\Service\ServiceManagerConfig; use Laminas\Navigation\Navigation; use Laminas\Navigation\Service\DefaultNavigationFactory; @@ -18,7 +17,7 @@ use Laminas\Permissions\Acl\Resource\GenericResource; use Laminas\Permissions\Acl\Role\GenericRole; use Laminas\Router\ConfigProvider as RouterConfigProvider; -use Laminas\Router\RouteMatch as V3RouteMatch; +use Laminas\Router\RouteMatch; use Laminas\ServiceManager\Config; use Laminas\ServiceManager\ServiceManager; use Laminas\View\Renderer\PhpRenderer; @@ -77,8 +76,6 @@ abstract class AbstractTest extends TestCase * @var Navigation\Navigation */ protected $_nav3; - - private $_oldControllerDir; // @codingStandardsIgnoreEnd /** @@ -89,10 +86,6 @@ protected function setUp(): void { $cwd = __DIR__; - $this->routeMatchType = class_exists(V2RouteMatch::class) - ? V2RouteMatch::class - : V3RouteMatch::class; - // read navigation config $this->_files = $cwd . '/_files'; $config = ConfigFactory::fromFile($this->_files . '/navigation.xml', true); @@ -157,7 +150,7 @@ protected function setUp(): void $sm->setAllowOverride(false); $app = $this->serviceManager->get('Application'); - $app->getMvcEvent()->setRouteMatch(new $this->routeMatchType([ + $app->getMvcEvent()->setRouteMatch(new RouteMatch([ 'controller' => 'post', 'action' => 'view', 'id' => '1337', From e022dd5cc339bb63a383de37fe26254e01c37477 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 15:55:50 +0000 Subject: [PATCH 18/31] Remove negotiation of router/route class names as v3 is required in dev Signed-off-by: George Steel --- test/Helper/UrlTest.php | 75 ++++++++++++----------------------------- 1 file changed, 22 insertions(+), 53 deletions(-) diff --git a/test/Helper/UrlTest.php b/test/Helper/UrlTest.php index c094601f8..49eecece0 100644 --- a/test/Helper/UrlTest.php +++ b/test/Helper/UrlTest.php @@ -10,18 +10,12 @@ use Laminas\Mvc\ModuleRouteListener; use Laminas\Mvc\MvcEvent; -use Laminas\Mvc\Router\Http\Literal as LiteralRoute; -use Laminas\Mvc\Router\Http\Segment as SegmentRoute; -use Laminas\Mvc\Router\Http\TreeRouteStack; -use Laminas\Mvc\Router\Http\Wildcard as WildcardRoute; -use Laminas\Mvc\Router\RouteMatch; -use Laminas\Mvc\Router\SimpleRouteStack as Router; -use Laminas\Router\Http\Literal as NextGenLiteralRoute; -use Laminas\Router\Http\Segment as NextGenSegmentRoute; -use Laminas\Router\Http\TreeRouteStack as NextGenTreeRouteStack; -use Laminas\Router\Http\Wildcard as NextGenWildcardRoute; -use Laminas\Router\RouteMatch as NextGenRouteMatch; -use Laminas\Router\SimpleRouteStack as NextGenRouter; +use Laminas\Router\Http\Literal; +use Laminas\Router\Http\Segment; +use Laminas\Router\Http\TreeRouteStack; +use Laminas\Router\Http\Wildcard; +use Laminas\Router\RouteMatch; +use Laminas\Router\SimpleRouteStack; use Laminas\View\Exception; use Laminas\View\Helper\Url as UrlHelper; use PHPUnit\Framework\TestCase; @@ -37,7 +31,7 @@ class UrlTest extends TestCase { /** - * @var Router + * @var SimpleRouteStack */ private $router; @@ -52,39 +46,15 @@ class UrlTest extends TestCase */ protected function setUp(): void { - $this->routeMatchType = class_exists(RouteMatch::class) - ? RouteMatch::class - : NextGenRouteMatch::class; - - $this->literalRouteType = class_exists(LiteralRoute::class) - ? LiteralRoute::class - : NextGenLiteralRoute::class; - - $this->segmentRouteType = class_exists(SegmentRoute::class) - ? SegmentRoute::class - : NextGenSegmentRoute::class; - - $this->treeRouteStackType = class_exists(TreeRouteStack::class) - ? TreeRouteStack::class - : NextGenTreeRouteStack::class; - - $this->wildcardRouteType = class_exists(WildcardRoute::class) - ? WildcardRoute::class - : NextGenWildcardRoute::class; - - $this->routerClass = class_exists(Router::class) - ? Router::class - : NextGenRouter::class; - - $router = new $this->routerClass(); + $router = new SimpleRouteStack(); $router->addRoute('home', [ - 'type' => $this->literalRouteType, + 'type' => Literal::class, 'options' => [ 'route' => '/', ] ]); $router->addRoute('default', [ - 'type' => $this->segmentRouteType, + 'type' => Segment::class, 'options' => [ 'route' => '/:controller[/:action]', ] @@ -138,7 +108,7 @@ public function testPluginWithoutRouteMatchesInEventRaisesExceptionWhenNoRoutePr public function testPluginWithRouteMatchesReturningNoMatchedRouteNameRaisesExceptionWhenNoRouteProvided() { - $this->url->setRouteMatch(new $this->routeMatchType([])); + $this->url->setRouteMatch(new RouteMatch([])); $this->expectException(Exception\RuntimeException::class); $this->expectExceptionMessage('matched'); $this->url->__invoke(); @@ -146,7 +116,7 @@ public function testPluginWithRouteMatchesReturningNoMatchedRouteNameRaisesExcep public function testPassingNoArgumentsWithValidRouteMatchGeneratesUrl() { - $routeMatch = new $this->routeMatchType([]); + $routeMatch = new RouteMatch([]); $routeMatch->setMatchedRouteName('home'); $this->url->setRouteMatch($routeMatch); $url = $this->url->__invoke(); @@ -156,7 +126,7 @@ public function testPassingNoArgumentsWithValidRouteMatchGeneratesUrl() public function testCanReuseMatchedParameters() { $this->router->addRoute('replace', [ - 'type' => $this->segmentRouteType, + 'type' => Segment::class, 'options' => [ 'route' => '/:controller/:action', 'defaults' => [ @@ -164,7 +134,7 @@ public function testCanReuseMatchedParameters() ], ], ]); - $routeMatch = new $this->routeMatchType([ + $routeMatch = new RouteMatch([ 'controller' => 'foo', ]); $routeMatch->setMatchedRouteName('replace'); @@ -176,7 +146,7 @@ public function testCanReuseMatchedParameters() public function testCanPassBooleanValueForThirdArgumentToAllowReusingRouteMatches() { $this->router->addRoute('replace', [ - 'type' => $this->segmentRouteType, + 'type' => Segment::class, 'options' => [ 'route' => '/:controller/:action', 'defaults' => [ @@ -184,7 +154,7 @@ public function testCanPassBooleanValueForThirdArgumentToAllowReusingRouteMatche ], ], ]); - $routeMatch = new $this->routeMatchType([ + $routeMatch = new RouteMatch([ 'controller' => 'foo', ]); $routeMatch->setMatchedRouteName('replace'); @@ -195,9 +165,9 @@ public function testCanPassBooleanValueForThirdArgumentToAllowReusingRouteMatche public function testRemovesModuleRouteListenerParamsWhenReusingMatchedParameters() { - $router = new $this->treeRouteStackType; + $router = new TreeRouteStack(); $router->addRoute('default', [ - 'type' => $this->segmentRouteType, + 'type' => Segment::class, 'options' => [ 'route' => '/:controller/:action', 'defaults' => [ @@ -208,7 +178,7 @@ public function testRemovesModuleRouteListenerParamsWhenReusingMatchedParameters ], 'child_routes' => [ 'wildcard' => [ - 'type' => $this->wildcardRouteType, + 'type' => Wildcard::class, 'options' => [ 'param_delimiter' => '=', 'key_value_delimiter' => '%' @@ -216,8 +186,7 @@ public function testRemovesModuleRouteListenerParamsWhenReusingMatchedParameters ] ] ]); - - $routeMatch = new $this->routeMatchType([ + $routeMatch = new RouteMatch([ ModuleRouteListener::MODULE_NAMESPACE => 'LaminasTest\Mvc\Controller\TestAsset', 'controller' => 'Rainbow' ]); @@ -240,7 +209,7 @@ public function testRemovesModuleRouteListenerParamsWhenReusingMatchedParameters public function testAcceptsNextGenRouterToSetRouter() { - $router = new $this->routerClass(); + $router = new SimpleRouteStack(); $url = new UrlHelper(); $url->setRouter($router); @@ -254,7 +223,7 @@ public function testAcceptsNextGenRouterToSetRouter() public function testAcceptsNextGenRouteMatche() { - $routeMatch = new $this->routeMatchType([]); + $routeMatch = new RouteMatch([]); $url = new UrlHelper(); $url->setRouteMatch($routeMatch); From 2bb6be1d39244caa9c985188b254dd305858bc75 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 16:02:10 +0000 Subject: [PATCH 19/31] Updates the dev requirement of laminas navigation to at least 2.8.1 where support for the Router namespace change was added Signed-off-by: George Steel --- composer.json | 4 ++-- composer.lock | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 49dc15bc9..60ea60da8 100644 --- a/composer.json +++ b/composer.json @@ -42,7 +42,7 @@ "laminas/laminas-mvc": "^2.7.14 || ^3.0", "laminas/laminas-mvc-i18n": "^1.1", "laminas/laminas-mvc-plugin-flashmessenger": "^1.2", - "laminas/laminas-navigation": "^2.5", + "laminas/laminas-navigation": "^2.8.1", "laminas/laminas-paginator": "^2.5", "laminas/laminas-permissions-acl": "^2.6", "laminas/laminas-router": "^3.0.1", @@ -50,8 +50,8 @@ "laminas/laminas-servicemanager": "^3.3", "laminas/laminas-session": "^2.8.1", "laminas/laminas-uri": "^2.5", - "phpspec/prophecy-phpunit": "^2.0", "phpspec/prophecy": "^1.12", + "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.3" }, "conflict": { diff --git a/composer.lock b/composer.lock index b23983efd..c9ced9d4c 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": "e4dafcda3a5ecc1585516c3011e1f6e5", + "content-hash": "617a9b3e2948b76bc82a871747a69841", "packages": [ { "name": "laminas/laminas-eventmanager", From 6c1606db7ea36fe75a534c0b90516f7fd2d5f29c Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 16:13:59 +0000 Subject: [PATCH 20/31] Remove router version negotiation Signed-off-by: George Steel --- test/Helper/UrlIntegrationTest.php | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/test/Helper/UrlIntegrationTest.php b/test/Helper/UrlIntegrationTest.php index b5b1ff196..f73076892 100644 --- a/test/Helper/UrlIntegrationTest.php +++ b/test/Helper/UrlIntegrationTest.php @@ -11,12 +11,10 @@ use Laminas\Console\Console; use Laminas\Console\Request; use Laminas\Http\Request as HttpRequest; -use Laminas\Mvc\Console\ConfigProvider as MvcConsoleConfigProvider; -use Laminas\Mvc\Router\Http as V2HttpRoute; use Laminas\Mvc\Service\ServiceListenerFactory; use Laminas\Mvc\Service\ServiceManagerConfig; use Laminas\Router\ConfigProvider as RouterConfigProvider; -use Laminas\Router\Http as V3HttpRoute; +use Laminas\Router\Http; use Laminas\ServiceManager\Config; use Laminas\ServiceManager\ServiceManager; use PHPUnit\Framework\TestCase; @@ -29,16 +27,15 @@ */ class UrlIntegrationTest extends TestCase { + private $serviceManager; + protected function setUp(): void { - $this->literalRouteType = class_exists(V2HttpRoute\Literal::class) - ? V2HttpRoute\Literal::class - : V3HttpRoute\Literal::class; $config = [ 'router' => [ 'routes' => [ 'test' => [ - 'type' => $this->literalRouteType, + 'type' => Http\Literal::class, 'options' => [ 'route' => '/test', 'defaults' => [ @@ -74,15 +71,8 @@ protected function setUp(): void $this->serviceManager = new ServiceManager(); (new ServiceManagerConfig($serviceConfig))->configureServiceManager($this->serviceManager); - if (! class_exists(V2HttpRoute\Literal::class) && class_exists(RouterConfigProvider::class)) { - $routerConfig = new Config((new RouterConfigProvider())->getDependencyConfig()); - $routerConfig->configureServiceManager($this->serviceManager); - } - - if (class_exists(MvcConsoleConfigProvider::class)) { - $mvcConsoleConfig = new Config((new MvcConsoleConfigProvider())->getDependencyConfig()); - $mvcConsoleConfig->configureServiceManager($this->serviceManager); - } + $routerConfig = new Config((new RouterConfigProvider())->getDependencyConfig()); + $routerConfig->configureServiceManager($this->serviceManager); $this->serviceManager->setAllowOverride(true); $this->serviceManager->setService('config', $config); From 62baf3f59ece1113eb2d330d2def0fabed199a1a Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 16:25:35 +0000 Subject: [PATCH 21/31] "Fix" console related integration test with a comment Signed-off-by: George Steel --- test/Helper/UrlIntegrationTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/Helper/UrlIntegrationTest.php b/test/Helper/UrlIntegrationTest.php index f73076892..6bfcef289 100644 --- a/test/Helper/UrlIntegrationTest.php +++ b/test/Helper/UrlIntegrationTest.php @@ -9,7 +9,6 @@ namespace LaminasTest\View\Helper; use Laminas\Console\Console; -use Laminas\Console\Request; use Laminas\Http\Request as HttpRequest; use Laminas\Mvc\Service\ServiceListenerFactory; use Laminas\Mvc\Service\ServiceManagerConfig; @@ -17,6 +16,7 @@ use Laminas\Router\Http; use Laminas\ServiceManager\Config; use Laminas\ServiceManager\ServiceManager; +use Laminas\Stdlib\RequestInterface; use PHPUnit\Framework\TestCase; /** @@ -112,7 +112,10 @@ public function testUrlHelperUnderConsoleParadigmShouldReturnHttpRoutes() Console::overrideIsConsole(true); $this->serviceManager->get('Application')->bootstrap(); $request = $this->serviceManager->get('Request'); - $this->assertInstanceOf(Request::class, $request); + /** + * Who care what type of request it is? The important thing is that the given path is correct. + */ + $this->assertInstanceOf(RequestInterface::class, $request); $viewHelpers = $this->serviceManager->get('ViewHelperManager'); $urlHelper = $viewHelpers->get('url'); $test = $urlHelper('test'); From 7433878ca27dced39d621f0a5876201b2999c82f Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 17:05:25 +0000 Subject: [PATCH 22/31] Override the request in ServiceManager to be a ConsoleRequest Signed-off-by: George Steel --- test/Helper/UrlIntegrationTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/Helper/UrlIntegrationTest.php b/test/Helper/UrlIntegrationTest.php index 6bfcef289..daa378114 100644 --- a/test/Helper/UrlIntegrationTest.php +++ b/test/Helper/UrlIntegrationTest.php @@ -9,6 +9,7 @@ namespace LaminasTest\View\Helper; use Laminas\Console\Console; +use Laminas\Console\Request as ConsoleRequest; use Laminas\Http\Request as HttpRequest; use Laminas\Mvc\Service\ServiceListenerFactory; use Laminas\Mvc\Service\ServiceManagerConfig; @@ -16,7 +17,6 @@ use Laminas\Router\Http; use Laminas\ServiceManager\Config; use Laminas\ServiceManager\ServiceManager; -use Laminas\Stdlib\RequestInterface; use PHPUnit\Framework\TestCase; /** @@ -27,6 +27,7 @@ */ class UrlIntegrationTest extends TestCase { + /** @var ServiceManager */ private $serviceManager; protected function setUp(): void @@ -110,12 +111,11 @@ public function testUrlHelperWorksWithForceCanonicalFlag() public function testUrlHelperUnderConsoleParadigmShouldReturnHttpRoutes() { Console::overrideIsConsole(true); + $this->serviceManager->setAllowOverride(true); + $this->serviceManager->setService('Request', new ConsoleRequest()); $this->serviceManager->get('Application')->bootstrap(); $request = $this->serviceManager->get('Request'); - /** - * Who care what type of request it is? The important thing is that the given path is correct. - */ - $this->assertInstanceOf(RequestInterface::class, $request); + $this->assertInstanceOf(ConsoleRequest::class, $request); $viewHelpers = $this->serviceManager->get('ViewHelperManager'); $urlHelper = $viewHelpers->get('url'); $test = $urlHelper('test'); From 4fb4759ea27d526af75a4b6cc40e4480dbd4d70b Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 1 Mar 2021 18:27:12 +0000 Subject: [PATCH 23/31] Add conflict for router versions prior to 3 Signed-off-by: George Steel --- composer.json | 3 ++- composer.lock | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 60ea60da8..701c03040 100644 --- a/composer.json +++ b/composer.json @@ -55,7 +55,8 @@ "phpunit/phpunit": "^9.3" }, "conflict": { - "laminas/laminas-servicemanager": "<3.3" + "laminas/laminas-servicemanager": "<3.3", + "laminas/laminas-router": "<3.0.1" }, "suggest": { "laminas/laminas-authentication": "Laminas\\Authentication component", diff --git a/composer.lock b/composer.lock index c9ced9d4c..08cf7c2c4 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": "617a9b3e2948b76bc82a871747a69841", + "content-hash": "bbced11127cfcde0bcbb10b6bdc96393", "packages": [ { "name": "laminas/laminas-eventmanager", From 3eaf18e889f6125466309c698adcb9aff144edf0 Mon Sep 17 00:00:00 2001 From: nafetsrybak Date: Tue, 13 Apr 2021 14:20:09 +0200 Subject: [PATCH 24/31] Correctly attach Json Strategy. Signed-off-by: nafetsrybak --- docs/book/quick-start.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/book/quick-start.md b/docs/book/quick-start.md index b7cde969c..71bb1a316 100644 --- a/docs/book/quick-start.md +++ b/docs/book/quick-start.md @@ -721,7 +721,7 @@ class Module $jsonStrategy = $locator->get('ViewJsonStrategy'); // Attach strategy, which is a listener aggregate, at high priority - $view->getEventManager()->attach($jsonStrategy, 100); + $jsonStrategy->attach($view->getEventManager(), 100); } } ``` From 41303b596e3ac70d5aa8cb42af5dedcbf6122185 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 8 Jul 2021 13:40:55 +0100 Subject: [PATCH 25/31] Ignore linting Signed-off-by: George Steel --- docs/book/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/book/index.md b/docs/book/index.md index fe8400541..30b0c3ef6 100644 --- a/docs/book/index.md +++ b/docs/book/index.md @@ -1 +1,2 @@ -../../README.md \ No newline at end of file + +../../README.md From 7ebf87d13abb9c325659dac8eb38946fa85bf87a Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 8 Jul 2021 13:41:22 +0100 Subject: [PATCH 26/31] Fix fenced blocks must be preceded by blank line Signed-off-by: George Steel --- docs/book/quick-start.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/book/quick-start.md b/docs/book/quick-start.md index 71bb1a316..483dd317a 100644 --- a/docs/book/quick-start.md +++ b/docs/book/quick-start.md @@ -647,6 +647,7 @@ executes prior to the `PhpRendererStrategy`, and thus ensure that a JSON payload is created when the controller returns a `JsonModel`. You could also use the module configuration to add the strategies: + ```php namespace Application; @@ -730,6 +731,7 @@ While the above examples detail using the `JsonStrategy`, the same could be done for the `FeedStrategy`. If you successfully registered the Strategy you need to use the appropriate `ViewModel`: + ```php namespace Application; From 05c70f62045c27d0b3754355ee2db6687b6f6d16 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 8 Jul 2021 13:42:17 +0100 Subject: [PATCH 27/31] Allow inline HTML for
Signed-off-by: George Steel --- docs/book/application-integration/stand-alone.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/book/application-integration/stand-alone.md b/docs/book/application-integration/stand-alone.md index dc42f333c..cfd21b2dd 100644 --- a/docs/book/application-integration/stand-alone.md +++ b/docs/book/application-integration/stand-alone.md @@ -1,3 +1,7 @@ + + # Stand-Alone The view and all view-helpers of laminas-view can also be used stand-alone. From 3912de2d8f6001759a4dc0e44a968df9bbe73e77 Mon Sep 17 00:00:00 2001 From: George Steel Date: Thu, 8 Jul 2021 13:43:17 +0100 Subject: [PATCH 28/31] Ignore level 3 headings in pull-quotes (header-increment) Signed-off-by: George Steel --- docs/book/helpers/escape.md | 1 + docs/book/helpers/head-meta.md | 1 + docs/book/helpers/head-script.md | 1 + docs/book/helpers/head-style.md | 1 + docs/book/helpers/inline-script.md | 1 + docs/book/helpers/intro.md | 3 ++- docs/book/helpers/partial.md | 1 + 7 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/book/helpers/escape.md b/docs/book/helpers/escape.md index 38d252557..020e982c8 100644 --- a/docs/book/helpers/escape.md +++ b/docs/book/helpers/escape.md @@ -14,6 +14,7 @@ More information to the operation and the background of security can be found in the [documentation of laminas-escaper](https://docs.laminas.dev/laminas-escaper/configuration/). + > ### Installation Requirements > > The escape helpers depends on the laminas-escaper component, so be sure to have diff --git a/docs/book/helpers/head-meta.md b/docs/book/helpers/head-meta.md index 958e29d60..a07397686 100644 --- a/docs/book/helpers/head-meta.md +++ b/docs/book/helpers/head-meta.md @@ -31,6 +31,7 @@ whether or not to autoescape values used in meta tags: - `setAutoEscape(bool $autoEscape = true)` (enabled by default) + > ### AutoEscape > > **Disable this flag at your own risk.** The one documented case where it is diff --git a/docs/book/helpers/head-script.md b/docs/book/helpers/head-script.md index 2b0137302..f257a1b47 100644 --- a/docs/book/helpers/head-script.md +++ b/docs/book/helpers/head-script.md @@ -20,6 +20,7 @@ script to load; this is usually in the form of a URL or a path. For the `*Script()` methods, `$script` is the client-side scripting directives you wish to use in the element. + > ### Setting Conditional Comments > > `HeadScript` allows you to wrap the script tag in conditional comments, which diff --git a/docs/book/helpers/head-style.md b/docs/book/helpers/head-style.md index 07fad5f2b..f05e11208 100644 --- a/docs/book/helpers/head-style.md +++ b/docs/book/helpers/head-style.md @@ -3,6 +3,7 @@ The HTML `