├── stubs └── BaseYii.stub ├── src ├── Type │ ├── ActiveQueryObjectType.php │ ├── ActiveRecordObjectType.php │ ├── ContainerDynamicMethodReturnTypeExtension.php │ ├── ActiveRecordDynamicMethodReturnTypeExtension.php │ ├── HeaderCollectionDynamicMethodReturnTypeExtension.php │ ├── ActiveRecordDynamicStaticMethodReturnTypeExtension.php │ └── ActiveQueryDynamicMethodReturnTypeExtension.php ├── Reflection │ ├── RequestMethodsClassReflectionExtension.php │ ├── RequestPropertiesClassReflectionExtension.php │ ├── ResponsePropertiesClassReflectionExtension.php │ ├── UserPropertiesClassReflectionExtension.php │ ├── ComponentPropertyReflection.php │ └── ApplicationPropertiesClassReflectionExtension.php └── ServiceMap.php ├── .php-cs-fixer.php ├── LICENSE ├── composer.json ├── README.md ├── extension.neon ├── CHANGELOG.md └── composer.lock /stubs/BaseYii.stub: -------------------------------------------------------------------------------- 1 | |array{class: class-string}|callable(): T $type 11 | * @param array $params 12 | * 13 | * @return T 14 | */ 15 | public static function createObject($type, array $params = []); 16 | } 17 | -------------------------------------------------------------------------------- /src/Type/ActiveQueryObjectType.php: -------------------------------------------------------------------------------- 1 | modelClass = $modelClass; 28 | $this->asArray = $asArray; 29 | } 30 | 31 | public function getModelClass(): string 32 | { 33 | return $this->modelClass; 34 | } 35 | 36 | public function isAsArray(): bool 37 | { 38 | return $this->asArray; 39 | } 40 | 41 | public function describe(VerbosityLevel $level): string 42 | { 43 | return sprintf('%s<%s>', parent::describe($level), $this->modelClass); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /.php-cs-fixer.php: -------------------------------------------------------------------------------- 1 | in(__DIR__.DIRECTORY_SEPARATOR.'src') 5 | ; 6 | 7 | $config = new PhpCsFixer\Config(); 8 | 9 | return $config 10 | ->setRiskyAllowed(true) 11 | ->setRules([ 12 | '@PHP71Migration' => true, 13 | '@Symfony' => true, 14 | 'array_syntax' => ['syntax' => 'short'], 15 | 'no_superfluous_elseif' => true, 16 | 'no_superfluous_phpdoc_tags' => true, 17 | 'no_unreachable_default_argument_value' => true, 18 | 'no_useless_else' => true, 19 | 'no_useless_return' => true, 20 | 'ordered_imports' => [ 21 | 'imports_order' => null, 22 | 'sort_algorithm' => 'alpha', 23 | ], 24 | 'phpdoc_order' => true, 25 | 'yoda_style' => [ 26 | 'equal' => null, 27 | 'identical' => null, 28 | 'less_and_greater' => null, 29 | 'always_move_variable' => false, 30 | ], 31 | // risky --> 32 | 'strict_param' => true, 33 | ]) 34 | ->setFinder($finder) 35 | ; 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Proget Sp. z o.o. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/Type/ActiveRecordObjectType.php: -------------------------------------------------------------------------------- 1 | isInstanceOf(\ArrayAccess::class)->yes()) { 22 | return TrinaryLogic::createFromBoolean($this->hasProperty($offsetType->getValue())->yes()); 23 | } 24 | 25 | return parent::hasOffsetValueType($offsetType); 26 | } 27 | 28 | public function setOffsetValueType(?Type $offsetType, Type $valueType, bool $unionValues = true): Type 29 | { 30 | if ($offsetType instanceof ConstantStringType && $this->hasProperty($offsetType->getValue())->no()) { 31 | return new ErrorType(); 32 | } 33 | 34 | return $this; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Reflection/RequestMethodsClassReflectionExtension.php: -------------------------------------------------------------------------------- 1 | reflectionProvider = $reflectionProvider; 24 | } 25 | 26 | public function hasMethod(ClassReflection $classReflection, string $methodName): bool 27 | { 28 | if ($classReflection->getName() !== ConsoleRequest::class) { 29 | return false; 30 | } 31 | 32 | return $this->reflectionProvider->getClass(WebRequest::class)->hasMethod($methodName); 33 | } 34 | 35 | public function getMethod(ClassReflection $classReflection, string $methodName): MethodReflection 36 | { 37 | return $this->reflectionProvider->getClass(WebRequest::class)->getNativeMethod($methodName); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/Reflection/RequestPropertiesClassReflectionExtension.php: -------------------------------------------------------------------------------- 1 | reflectionProvider = $reflectionProvider; 25 | } 26 | 27 | public function hasProperty(ClassReflection $classReflection, string $propertyName): bool 28 | { 29 | if ($classReflection->getName() !== ConsoleRequest::class) { 30 | return false; 31 | } 32 | 33 | return $this->reflectionProvider->getClass(WebRequest::class)->hasProperty($propertyName); 34 | } 35 | 36 | public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection 37 | { 38 | return $this->reflectionProvider->getClass(WebRequest::class)->getProperty($propertyName, new OutOfClassScope()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/Reflection/ResponsePropertiesClassReflectionExtension.php: -------------------------------------------------------------------------------- 1 | reflectionProvider = $reflectionProvider; 25 | } 26 | 27 | public function hasProperty(ClassReflection $classReflection, string $propertyName): bool 28 | { 29 | if ($classReflection->getName() !== ConsoleResponse::class) { 30 | return false; 31 | } 32 | 33 | return $this->reflectionProvider->getClass(WebResponse::class)->hasProperty($propertyName); 34 | } 35 | 36 | public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection 37 | { 38 | return $this->reflectionProvider->getClass(WebResponse::class)->getProperty($propertyName, new OutOfClassScope()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "proget-hq/phpstan-yii2", 3 | "type": "library", 4 | "description": "Yii2 extension for PHPStan", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "Arkadiusz Kondas", 9 | "email": "arkadiusz.kondas@gmail.com" 10 | }, 11 | { 12 | "name": "Marcin Michalski", 13 | "email": "marcin@michalski.dev" 14 | } 15 | ], 16 | "require": { 17 | "php": "^7.2|^8.0", 18 | "nikic/php-parser": "^4.1.0", 19 | "phpstan/phpstan": "^1.0" 20 | }, 21 | "require-dev": { 22 | "friendsofphp/php-cs-fixer": "^3.1", 23 | "phpunit/phpunit": "^8.0", 24 | "yiisoft/yii2": "^2.0.42", 25 | "phpstan/phpstan-phpunit": "^1.0" 26 | }, 27 | "autoload": { 28 | "psr-4": { 29 | "Proget\\PHPStan\\Yii2\\": "src/" 30 | } 31 | }, 32 | "autoload-dev": { 33 | "psr-4": { 34 | "Proget\\Tests\\PHPStan\\Yii2\\": "tests/" 35 | } 36 | }, 37 | "scripts": { 38 | "check": [ 39 | "@check-cs", 40 | "@stan", 41 | "@tests" 42 | ], 43 | "check-cs": "@php php-cs-fixer fix --dry-run --diff", 44 | "fix-cs": "@php php-cs-fixer fix", 45 | "stan": "@php phpstan analyse -l max -c ./phpstan.neon ./src ./tests", 46 | "tests": "@php phpunit" 47 | }, 48 | "repositories": [ 49 | { 50 | "type": "composer", 51 | "url": "https://asset-packagist.org" 52 | } 53 | ], 54 | "config": { 55 | "allow-plugins": { 56 | "yiisoft/yii2-composer": true 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/Type/ContainerDynamicMethodReturnTypeExtension.php: -------------------------------------------------------------------------------- 1 | serviceMap = $serviceMap; 28 | } 29 | 30 | public function getClass(): string 31 | { 32 | return Container::class; 33 | } 34 | 35 | public function isMethodSupported(MethodReflection $methodReflection): bool 36 | { 37 | return $methodReflection->getName() === 'get'; 38 | } 39 | 40 | public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type 41 | { 42 | if (isset($methodCall->args[0]) && $methodCall->args[0] instanceof Arg) { 43 | $serviceClass = $this->serviceMap->getServiceClassFromNode($methodCall->args[0]->value); 44 | if ($serviceClass !== null) { 45 | return new ObjectType($serviceClass); 46 | } 47 | } 48 | 49 | return ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/Type/ActiveRecordDynamicMethodReturnTypeExtension.php: -------------------------------------------------------------------------------- 1 | getName(), ['hasOne', 'hasMany'], true); 27 | } 28 | 29 | public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type 30 | { 31 | $arg = $methodCall->args[0]; 32 | if (!$arg instanceof Arg) { 33 | throw new ShouldNotHappenException(sprintf('Unexpected arg %s during method call %s at line %d', \get_class($arg), $methodReflection->getName(), $methodCall->getLine())); 34 | } 35 | 36 | $argType = $scope->getType($arg->value); 37 | if (!$argType instanceof ConstantStringType) { 38 | throw new ShouldNotHappenException(sprintf('Invalid argument provided to method %s'.PHP_EOL.'Hint: You should use ::class instead of ::className()', $methodReflection->getName())); 39 | } 40 | 41 | return new ActiveQueryObjectType($argType->getValue(), false); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/Reflection/UserPropertiesClassReflectionExtension.php: -------------------------------------------------------------------------------- 1 | annotationsProperties = $annotationsProperties; 25 | } 26 | 27 | public function hasProperty(ClassReflection $classReflection, string $propertyName): bool 28 | { 29 | if ($classReflection->getName() !== User::class) { 30 | return false; 31 | } 32 | 33 | return $classReflection->hasNativeProperty($propertyName) 34 | || $this->annotationsProperties->hasProperty($classReflection, $propertyName); 35 | } 36 | 37 | public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection 38 | { 39 | if ($propertyName === 'identity') { 40 | return new ComponentPropertyReflection(new DummyPropertyReflection(), new MixedType()); 41 | } 42 | 43 | if ($classReflection->hasNativeProperty($propertyName)) { 44 | return $classReflection->getNativeProperty($propertyName); 45 | } 46 | 47 | return $this->annotationsProperties->getProperty($classReflection, $propertyName); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Yii2 extension for PHPStan 2 | 3 | [![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.2-8892BF.svg)](https://php.net/) 4 | [![Latest Stable Version](https://img.shields.io/packagist/v/proget-hq/phpstan-yii2.svg)](https://packagist.org/packages/proget-hq/phpstan-yii2) 5 | [![Build Status](https://github.com/proget-hq/phpstan-yii2/workflows/build/badge.svg)](https://github.com/proget-hq/phpstan-yii2/actions?query=workflow%3Abuild) 6 | [![Total Downloads](https://poser.pugx.org/proget-hq/phpstan-yii2/downloads.svg)](https://packagist.org/packages/proget-hq/phpstan-yii2) 7 | [![License](https://poser.pugx.org/proget-hq/phpstan-yii2/license.svg)](https://packagist.org/packages/proget-hq/phpstan-yii2) 8 | 9 | ## What does it do? 10 | 11 | * Provides correct return type for `Yii::$container->get('service_id')` method, 12 | * Provides correct methods and properties for `Yii::$app->request` 13 | * Ignore common problems with response objects (to be removed). 14 | 15 | ## Compatibility 16 | 17 | | PHPStan version | Yii2 extension version | 18 | |-----------------|------------------------| 19 | | 1.x | 0.8.x | 20 | | 0.12 | 0.7.x | 21 | | 0.11 | 0.5.x - 0.6.x | 22 | | 0.10.3 | 0.4.x | 23 | | 0.10 | 0.3.0 | 24 | | 0.9.2 | 0.2.0 | 25 | 26 | ## Installation 27 | 28 | ```sh 29 | composer require --dev proget-hq/phpstan-yii2 30 | ``` 31 | 32 | ## Configuration 33 | 34 | Put this into your `phpstan.neon` config: 35 | 36 | ```neon 37 | includes: 38 | - vendor/proget-hq/phpstan-yii2/extension.neon 39 | parameters: 40 | yii2: 41 | config_path: %rootDir%/../../../config/test.php 42 | ``` 43 | 44 | ## Limitations 45 | 46 | Container closures must have return types. 47 | 48 | You have to provide a path to `config/test.php` or other yii2 config file. 49 | -------------------------------------------------------------------------------- /extension.neon: -------------------------------------------------------------------------------- 1 | parameters: 2 | yii2: 3 | config_path: null 4 | stubFiles: 5 | - stubs/BaseYii.stub 6 | 7 | parametersSchema: 8 | yii2: structure([ 9 | config_path: schema(string(), nullable()) 10 | ]) 11 | 12 | services: 13 | - 14 | class: Proget\PHPStan\Yii2\Reflection\ApplicationPropertiesClassReflectionExtension 15 | tags: [phpstan.broker.propertiesClassReflectionExtension] 16 | - 17 | class: Proget\PHPStan\Yii2\Reflection\RequestMethodsClassReflectionExtension 18 | tags: [phpstan.broker.methodsClassReflectionExtension] 19 | - 20 | class: Proget\PHPStan\Yii2\Reflection\RequestPropertiesClassReflectionExtension 21 | tags: [phpstan.broker.propertiesClassReflectionExtension] 22 | - 23 | class: Proget\PHPStan\Yii2\Reflection\ResponsePropertiesClassReflectionExtension 24 | tags: [phpstan.broker.propertiesClassReflectionExtension] 25 | - 26 | class: Proget\PHPStan\Yii2\Reflection\UserPropertiesClassReflectionExtension 27 | tags: [phpstan.broker.propertiesClassReflectionExtension] 28 | - 29 | class: Proget\PHPStan\Yii2\Type\ActiveQueryDynamicMethodReturnTypeExtension 30 | tags: [phpstan.broker.dynamicMethodReturnTypeExtension] 31 | - 32 | class: Proget\PHPStan\Yii2\Type\ActiveRecordDynamicMethodReturnTypeExtension 33 | tags: [phpstan.broker.dynamicMethodReturnTypeExtension] 34 | - 35 | class: Proget\PHPStan\Yii2\Type\HeaderCollectionDynamicMethodReturnTypeExtension 36 | tags: [phpstan.broker.dynamicMethodReturnTypeExtension] 37 | - 38 | class: Proget\PHPStan\Yii2\Type\ActiveRecordDynamicStaticMethodReturnTypeExtension 39 | tags: [phpstan.broker.dynamicStaticMethodReturnTypeExtension] 40 | - 41 | class: Proget\PHPStan\Yii2\Type\ContainerDynamicMethodReturnTypeExtension 42 | tags: [phpstan.broker.dynamicMethodReturnTypeExtension] 43 | 44 | - Proget\PHPStan\Yii2\ServiceMap(%yii2.config_path%) 45 | -------------------------------------------------------------------------------- /src/Type/HeaderCollectionDynamicMethodReturnTypeExtension.php: -------------------------------------------------------------------------------- 1 | getName() === 'get'; 30 | } 31 | 32 | public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type 33 | { 34 | if (\count($methodCall->args) < 3) { 35 | // $first === true (the default) and the get-method returns something of type string 36 | return new StringType(); 37 | } 38 | 39 | /** @var Arg $arg */ 40 | $arg = $methodCall->args[2]; 41 | if ($arg->value instanceof ConstFetch) { 42 | $value = $arg->value->name->parts[0]; 43 | if ($value === 'true') { 44 | // $first === true, therefore string 45 | return new StringType(); 46 | } 47 | 48 | if ($value === 'false') { 49 | // $first === false, therefore string[] 50 | return new ArrayType(new IntegerType(), new StringType()); 51 | } 52 | } 53 | 54 | // Unable to figure out value of third parameter $first, therefore it can be of either type 55 | return new UnionType([new ArrayType(new IntegerType(), new StringType()), new StringType()]); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/Type/ActiveRecordDynamicStaticMethodReturnTypeExtension.php: -------------------------------------------------------------------------------- 1 | getVariants())->getReturnType(); 32 | if ($returnType instanceof ThisType) { 33 | return true; 34 | } 35 | 36 | if ($returnType instanceof UnionType) { 37 | foreach ($returnType->getTypes() as $type) { 38 | if ($type instanceof ObjectType) { 39 | return \is_a($type->getClassName(), $this->getClass(), true); 40 | } 41 | } 42 | } 43 | 44 | return $returnType instanceof ObjectType && \is_a($returnType->getClassName(), ActiveQuery::class, true); 45 | } 46 | 47 | public function getTypeFromStaticMethodCall(MethodReflection $methodReflection, StaticCall $methodCall, Scope $scope): Type 48 | { 49 | /** @var Name $className */ 50 | $className = $methodCall->class; 51 | $name = $scope->resolveName($className); 52 | 53 | $returnType = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType(); 54 | if ($returnType instanceof ThisType) { 55 | return new ActiveRecordObjectType($name); 56 | } 57 | 58 | if ($returnType instanceof UnionType) { 59 | return TypeCombinator::union( 60 | new NullType(), 61 | new ActiveRecordObjectType($name) 62 | ); 63 | } 64 | 65 | return new ActiveQueryObjectType($name, false); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/Reflection/ComponentPropertyReflection.php: -------------------------------------------------------------------------------- 1 | fallbackProperty = $fallbackProperty; 26 | $this->type = $type; 27 | } 28 | 29 | public function getType(): Type 30 | { 31 | return $this->type; 32 | } 33 | 34 | public function isReadable(): bool 35 | { 36 | return $this->fallbackProperty->isReadable(); 37 | } 38 | 39 | public function isWritable(): bool 40 | { 41 | return $this->fallbackProperty->isWritable(); 42 | } 43 | 44 | public function getDeclaringClass(): ClassReflection 45 | { 46 | return $this->fallbackProperty->getDeclaringClass(); 47 | } 48 | 49 | public function isStatic(): bool 50 | { 51 | return $this->fallbackProperty->isStatic(); 52 | } 53 | 54 | public function isPrivate(): bool 55 | { 56 | return $this->fallbackProperty->isPrivate(); 57 | } 58 | 59 | public function isPublic(): bool 60 | { 61 | return $this->fallbackProperty->isPublic(); 62 | } 63 | 64 | public function getReadableType(): Type 65 | { 66 | return $this->fallbackProperty->getReadableType(); 67 | } 68 | 69 | public function getWritableType(): Type 70 | { 71 | return $this->fallbackProperty->getWritableType(); 72 | } 73 | 74 | public function canChangeTypeAfterAssignment(): bool 75 | { 76 | return $this->fallbackProperty->canChangeTypeAfterAssignment(); 77 | } 78 | 79 | public function isDeprecated(): \PHPStan\TrinaryLogic 80 | { 81 | return $this->fallbackProperty->isDeprecated(); 82 | } 83 | 84 | public function getDeprecatedDescription(): ?string 85 | { 86 | return $this->fallbackProperty->getDeprecatedDescription(); 87 | } 88 | 89 | public function isInternal(): \PHPStan\TrinaryLogic 90 | { 91 | return $this->fallbackProperty->isInternal(); 92 | } 93 | 94 | public function getDocComment(): ?string 95 | { 96 | return $this->fallbackProperty->getDocComment(); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 5 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 6 | 7 | ## Types of changes 8 | * **Added** for new features. 9 | * **Changed** for changes in existing functionality. 10 | * **Deprecated** for soon-to-be removed features. 11 | * **Removed** for now removed features. 12 | * **Fixed** for any bug fixes. 13 | * **Security** in case of vulnerabilities. 14 | 15 | ## [0.8.0] 2022-01-10 16 | ### Added 17 | * Initial phpstan 1.x support 18 | 19 | ## [0.7.6] 2021-08-10 20 | ### Added 21 | * Compatibility with yii 2.0.43 (#45) 22 | 23 | ## [0.7.5] 2021-07-08 24 | ### Added 25 | * Compatibility with phpstan 0.12.91 (#44) 26 | 27 | ## [0.7.4] 2021-04-26 28 | ### Added 29 | * Enable PHP 8.0 (#35) 30 | * Resolve services defined by string & BaseObject configurations (#38) 31 | * Resolve ActiveRecord stan type from static method return type (#40) 32 | * Ensure YII_DEBUG is defined (#41) 33 | 34 | ### Fixed 35 | * ActiveRecord array access (#39) 36 | 37 | ## [0.7.3] 2020-07-13 38 | ### Added 39 | * Add support for non-singleton services (definitions) (#30) 40 | 41 | ## [0.7.2] 2020-05-01 42 | ### Changed 43 | * Replace YiiDynamicStaticMethodReturnTypeExtension with a stub 44 | 45 | ## [0.7.1] 2019-12-16 46 | ### Removed 47 | * 'Call to an undefined method yii\console\Response' ignored error 48 | 49 | ## [0.7.0] 2019-12-12 50 | ### Added 51 | * Support for phpstan 0.12 52 | * GitHub actions 53 | 54 | ### Removed 55 | * Travis CI integration 56 | 57 | ## [0.6.0] 2019-09-12 58 | ### Added 59 | * Support for already initialized components (#15) 60 | * Support for HeaderCollection.get (#17) 61 | 62 | ### Changed 63 | * Required PHP version to at least 7.2 64 | 65 | ## [0.5.0] 2019-05-06 66 | ### Added 67 | * Add support for phpstan 0.11 68 | * Extension tests (Yii2 is now a dev dependency) 69 | 70 | ## [0.4.2] 2018-12-18 71 | ### Fixed 72 | * Allow configuration without singletons (#10) 73 | 74 | ## [0.4.1] 2018-10-25 75 | ### Added 76 | * Update phpstan and move it to require-dev 77 | * Add php-cs-fixer & fix code-style 78 | * Add ServiceMap tests 79 | * Travis CI integration 80 | * Add .gitattributes 81 | 82 | ## [0.4.0] 2018-08-21 83 | ### Added 84 | * Add support for phpstan 0.10.3 85 | 86 | ## [0.3.0] 2018-06-16 87 | ### Added 88 | * Add support for phpstan 0.10 89 | 90 | ## [0.2.0] 2018-03-09 91 | ### Added 92 | * Provides correct methods and properties for Yii::$app->request 93 | 94 | ## [0.1.0] 2018-03-07 95 | ### Added 96 | * first initial release 97 | -------------------------------------------------------------------------------- /src/Reflection/ApplicationPropertiesClassReflectionExtension.php: -------------------------------------------------------------------------------- 1 | annotationsProperties = $annotationsProperties; 41 | $this->serviceMap = $serviceMap; 42 | $this->reflectionProvider = $reflectionProvider; 43 | } 44 | 45 | public function hasProperty(ClassReflection $classReflection, string $propertyName): bool 46 | { 47 | if ($classReflection->getName() !== BaseApplication::class && !$classReflection->isSubclassOf(BaseApplication::class)) { 48 | return false; 49 | } 50 | 51 | if ($classReflection->getName() !== WebApplication::class) { 52 | $classReflection = $this->reflectionProvider->getClass(WebApplication::class); 53 | } 54 | 55 | return $classReflection->hasNativeProperty($propertyName) 56 | || $this->annotationsProperties->hasProperty($classReflection, $propertyName) 57 | || $this->serviceMap->getComponentClassById($propertyName); 58 | } 59 | 60 | public function getProperty(ClassReflection $classReflection, string $propertyName): PropertyReflection 61 | { 62 | if ($classReflection->getName() !== WebApplication::class) { 63 | $classReflection = $this->reflectionProvider->getClass(WebApplication::class); 64 | } 65 | 66 | if (null !== $componentClass = $this->serviceMap->getComponentClassById($propertyName)) { 67 | return new ComponentPropertyReflection(new DummyPropertyReflection(), new ObjectType($componentClass)); 68 | } 69 | 70 | if ($classReflection->hasNativeProperty($propertyName)) { 71 | return $classReflection->getNativeProperty($propertyName); 72 | } 73 | 74 | return $this->annotationsProperties->getProperty($classReflection, $propertyName); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/Type/ActiveQueryDynamicMethodReturnTypeExtension.php: -------------------------------------------------------------------------------- 1 | getVariants())->getReturnType() instanceof ThisType) { 35 | return true; 36 | } 37 | 38 | return \in_array($methodReflection->getName(), ['one', 'all'], true); 39 | } 40 | 41 | public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type 42 | { 43 | $calledOnType = $scope->getType($methodCall->var); 44 | if (!$calledOnType instanceof ActiveQueryObjectType) { 45 | throw new ShouldNotHappenException(sprintf('Unexpected type %s during method call %s at line %d', \get_class($calledOnType), $methodReflection->getName(), $methodCall->getLine())); 46 | } 47 | 48 | $methodName = $methodReflection->getName(); 49 | if ($methodName === 'asArray') { 50 | $argType = isset($methodCall->args[0]) && $methodCall->args[0] instanceof Arg ? $scope->getType($methodCall->args[0]->value) : new ConstantBooleanType(true); 51 | if (!$argType instanceof ConstantBooleanType) { 52 | throw new ShouldNotHappenException(sprintf('Invalid argument provided to asArray method at line %d', $methodCall->getLine())); 53 | } 54 | 55 | return new ActiveQueryObjectType($calledOnType->getModelClass(), $argType->getValue()); 56 | } 57 | 58 | if (!\in_array($methodName, ['one', 'all'], true)) { 59 | return new ActiveQueryObjectType($calledOnType->getModelClass(), $calledOnType->isAsArray()); 60 | } 61 | 62 | if ($methodName === 'one') { 63 | return TypeCombinator::union( 64 | new NullType(), 65 | $calledOnType->isAsArray() ? new ArrayType(new StringType(), new MixedType()) : new ActiveRecordObjectType($calledOnType->getModelClass()) 66 | ); 67 | } 68 | 69 | return new ArrayType( 70 | new IntegerType(), 71 | $calledOnType->isAsArray() ? new ArrayType(new StringType(), new MixedType()) : new ActiveRecordObjectType($calledOnType->getModelClass()) 72 | ); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/ServiceMap.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | private $components = []; 21 | 22 | public function __construct(string $configPath) 23 | { 24 | if (!file_exists($configPath)) { 25 | throw new \InvalidArgumentException(sprintf('Provided config path %s must exist', $configPath)); 26 | } 27 | 28 | \defined('YII_DEBUG') or \define('YII_DEBUG', true); 29 | \defined('YII_ENV_DEV') or \define('YII_ENV_DEV', false); 30 | \defined('YII_ENV_PROD') or \define('YII_ENV_PROD', false); 31 | \defined('YII_ENV_TEST') or \define('YII_ENV_TEST', true); 32 | 33 | $config = require $configPath; 34 | foreach ($config['container']['singletons'] ?? [] as $id => $service) { 35 | $this->addServiceDefinition($id, $service); 36 | } 37 | 38 | foreach ($config['container']['definitions'] ?? [] as $id => $service) { 39 | $this->addServiceDefinition($id, $service); 40 | } 41 | 42 | foreach ($config['components'] ?? [] as $id => $component) { 43 | if (\is_object($component)) { 44 | $this->components[$id] = \get_class($component); 45 | continue; 46 | } 47 | 48 | if (!\is_array($component)) { 49 | throw new \RuntimeException(\sprintf('Invalid value for component with id %s. Expected object or array.', $id)); 50 | } 51 | 52 | if (null !== $class = $component['class'] ?? null) { 53 | $this->components[$id] = $class; 54 | } 55 | } 56 | } 57 | 58 | public function getServiceClassFromNode(Node $node): ?string 59 | { 60 | if ($node instanceof Node\Scalar\String_ && isset($this->services[$node->value])) { 61 | return $this->services[$node->value]; 62 | } 63 | 64 | return null; 65 | } 66 | 67 | public function getComponentClassById(string $id): ?string 68 | { 69 | return $this->components[$id] ?? null; 70 | } 71 | 72 | /** 73 | * @param string|\Closure|array $service 74 | * 75 | * @throws \RuntimeException|\ReflectionException 76 | */ 77 | private function addServiceDefinition(string $id, $service): void 78 | { 79 | $this->services[$id] = $this->guessServiceDefinition($id, $service); 80 | } 81 | 82 | /** 83 | * @param string|\Closure|array $service 84 | * 85 | * @throws \RuntimeException|\ReflectionException 86 | */ 87 | private function guessServiceDefinition(string $id, $service): string 88 | { 89 | if (\is_string($service) && \class_exists($service)) { 90 | return $service; 91 | } 92 | 93 | if ($service instanceof \Closure || \is_string($service)) { 94 | $returnType = (new \ReflectionFunction($service))->getReturnType(); 95 | if (!$returnType instanceof \ReflectionNamedType) { 96 | throw new \RuntimeException(\sprintf('Please provide return type for %s service closure', $id)); 97 | } 98 | 99 | return $returnType->getName(); 100 | } 101 | 102 | if (!\is_array($service)) { 103 | throw new \RuntimeException(\sprintf('Unsupported service definition for %s', $id)); 104 | } 105 | 106 | if (isset($service['class'])) { 107 | return $service['class']; 108 | } 109 | 110 | if (isset($service[0]['class'])) { 111 | return $service[0]['class']; 112 | } 113 | 114 | if (\is_subclass_of($id, BaseObject::class)) { 115 | return $id; 116 | } 117 | 118 | throw new \RuntimeException(\sprintf('Cannot guess service definition for %s', $id)); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "c3524bdd9fe92f0c6bd5328fad355f69", 8 | "packages": [ 9 | { 10 | "name": "nikic/php-parser", 11 | "version": "v4.13.2", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/nikic/PHP-Parser.git", 15 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", 20 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-tokenizer": "*", 25 | "php": ">=7.0" 26 | }, 27 | "require-dev": { 28 | "ircmaxell/php-yacc": "^0.0.7", 29 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 30 | }, 31 | "bin": [ 32 | "bin/php-parse" 33 | ], 34 | "type": "library", 35 | "extra": { 36 | "branch-alias": { 37 | "dev-master": "4.9-dev" 38 | } 39 | }, 40 | "autoload": { 41 | "psr-4": { 42 | "PhpParser\\": "lib/PhpParser" 43 | } 44 | }, 45 | "notification-url": "https://packagist.org/downloads/", 46 | "license": [ 47 | "BSD-3-Clause" 48 | ], 49 | "authors": [ 50 | { 51 | "name": "Nikita Popov" 52 | } 53 | ], 54 | "description": "A PHP parser written in PHP", 55 | "keywords": [ 56 | "parser", 57 | "php" 58 | ], 59 | "support": { 60 | "issues": "https://github.com/nikic/PHP-Parser/issues", 61 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" 62 | }, 63 | "time": "2021-11-30T19:35:32+00:00" 64 | }, 65 | { 66 | "name": "phpstan/phpstan", 67 | "version": "1.3.3", 68 | "source": { 69 | "type": "git", 70 | "url": "https://github.com/phpstan/phpstan.git", 71 | "reference": "151a51f6149855785fbd883e79768c0abc96b75f" 72 | }, 73 | "dist": { 74 | "type": "zip", 75 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/151a51f6149855785fbd883e79768c0abc96b75f", 76 | "reference": "151a51f6149855785fbd883e79768c0abc96b75f", 77 | "shasum": "" 78 | }, 79 | "require": { 80 | "php": "^7.1|^8.0" 81 | }, 82 | "conflict": { 83 | "phpstan/phpstan-shim": "*" 84 | }, 85 | "bin": [ 86 | "phpstan", 87 | "phpstan.phar" 88 | ], 89 | "type": "library", 90 | "extra": { 91 | "branch-alias": { 92 | "dev-master": "1.3-dev" 93 | } 94 | }, 95 | "autoload": { 96 | "files": [ 97 | "bootstrap.php" 98 | ] 99 | }, 100 | "notification-url": "https://packagist.org/downloads/", 101 | "license": [ 102 | "MIT" 103 | ], 104 | "description": "PHPStan - PHP Static Analysis Tool", 105 | "support": { 106 | "issues": "https://github.com/phpstan/phpstan/issues", 107 | "source": "https://github.com/phpstan/phpstan/tree/1.3.3" 108 | }, 109 | "funding": [ 110 | { 111 | "url": "https://github.com/ondrejmirtes", 112 | "type": "github" 113 | }, 114 | { 115 | "url": "https://github.com/phpstan", 116 | "type": "github" 117 | }, 118 | { 119 | "url": "https://www.patreon.com/phpstan", 120 | "type": "patreon" 121 | }, 122 | { 123 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", 124 | "type": "tidelift" 125 | } 126 | ], 127 | "time": "2022-01-07T09:49:03+00:00" 128 | } 129 | ], 130 | "packages-dev": [ 131 | { 132 | "name": "bower-asset/inputmask", 133 | "version": "3.3.11", 134 | "source": { 135 | "type": "git", 136 | "url": "https://github.com/RobinHerbots/Inputmask.git", 137 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" 138 | }, 139 | "dist": { 140 | "type": "zip", 141 | "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", 142 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" 143 | }, 144 | "require": { 145 | "bower-asset/jquery": ">=1.7" 146 | }, 147 | "type": "bower-asset", 148 | "license": [ 149 | "http://opensource.org/licenses/mit-license.php" 150 | ] 151 | }, 152 | { 153 | "name": "bower-asset/jquery", 154 | "version": "3.6.0", 155 | "source": { 156 | "type": "git", 157 | "url": "https://github.com/jquery/jquery-dist.git", 158 | "reference": "e786e3d9707ffd9b0dd330ca135b66344dcef85a" 159 | }, 160 | "dist": { 161 | "type": "zip", 162 | "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/e786e3d9707ffd9b0dd330ca135b66344dcef85a", 163 | "reference": "e786e3d9707ffd9b0dd330ca135b66344dcef85a" 164 | }, 165 | "type": "bower-asset", 166 | "license": [ 167 | "MIT" 168 | ] 169 | }, 170 | { 171 | "name": "bower-asset/punycode", 172 | "version": "v1.3.2", 173 | "source": { 174 | "type": "git", 175 | "url": "https://github.com/mathiasbynens/punycode.js.git", 176 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 177 | }, 178 | "dist": { 179 | "type": "zip", 180 | "url": "https://api.github.com/repos/mathiasbynens/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", 181 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 182 | }, 183 | "type": "bower-asset" 184 | }, 185 | { 186 | "name": "bower-asset/yii2-pjax", 187 | "version": "2.0.7.1", 188 | "source": { 189 | "type": "git", 190 | "url": "https://github.com/yiisoft/jquery-pjax.git", 191 | "reference": "aef7b953107264f00234902a3880eb50dafc48be" 192 | }, 193 | "dist": { 194 | "type": "zip", 195 | "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", 196 | "reference": "aef7b953107264f00234902a3880eb50dafc48be" 197 | }, 198 | "require": { 199 | "bower-asset/jquery": ">=1.8" 200 | }, 201 | "type": "bower-asset", 202 | "license": [ 203 | "MIT" 204 | ] 205 | }, 206 | { 207 | "name": "cebe/markdown", 208 | "version": "1.2.1", 209 | "source": { 210 | "type": "git", 211 | "url": "https://github.com/cebe/markdown.git", 212 | "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86" 213 | }, 214 | "dist": { 215 | "type": "zip", 216 | "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86", 217 | "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86", 218 | "shasum": "" 219 | }, 220 | "require": { 221 | "lib-pcre": "*", 222 | "php": ">=5.4.0" 223 | }, 224 | "require-dev": { 225 | "cebe/indent": "*", 226 | "facebook/xhprof": "*@dev", 227 | "phpunit/phpunit": "4.1.*" 228 | }, 229 | "bin": [ 230 | "bin/markdown" 231 | ], 232 | "type": "library", 233 | "extra": { 234 | "branch-alias": { 235 | "dev-master": "1.2.x-dev" 236 | } 237 | }, 238 | "autoload": { 239 | "psr-4": { 240 | "cebe\\markdown\\": "" 241 | } 242 | }, 243 | "notification-url": "https://packagist.org/downloads/", 244 | "license": [ 245 | "MIT" 246 | ], 247 | "authors": [ 248 | { 249 | "name": "Carsten Brandt", 250 | "email": "mail@cebe.cc", 251 | "homepage": "http://cebe.cc/", 252 | "role": "Creator" 253 | } 254 | ], 255 | "description": "A super fast, highly extensible markdown parser for PHP", 256 | "homepage": "https://github.com/cebe/markdown#readme", 257 | "keywords": [ 258 | "extensible", 259 | "fast", 260 | "gfm", 261 | "markdown", 262 | "markdown-extra" 263 | ], 264 | "support": { 265 | "issues": "https://github.com/cebe/markdown/issues", 266 | "source": "https://github.com/cebe/markdown" 267 | }, 268 | "time": "2018-03-26T11:24:36+00:00" 269 | }, 270 | { 271 | "name": "composer/pcre", 272 | "version": "1.0.0", 273 | "source": { 274 | "type": "git", 275 | "url": "https://github.com/composer/pcre.git", 276 | "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2" 277 | }, 278 | "dist": { 279 | "type": "zip", 280 | "url": "https://api.github.com/repos/composer/pcre/zipball/3d322d715c43a1ac36c7fe215fa59336265500f2", 281 | "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2", 282 | "shasum": "" 283 | }, 284 | "require": { 285 | "php": "^5.3.2 || ^7.0 || ^8.0" 286 | }, 287 | "require-dev": { 288 | "phpstan/phpstan": "^1", 289 | "phpstan/phpstan-strict-rules": "^1.1", 290 | "symfony/phpunit-bridge": "^4.2 || ^5" 291 | }, 292 | "type": "library", 293 | "extra": { 294 | "branch-alias": { 295 | "dev-main": "1.x-dev" 296 | } 297 | }, 298 | "autoload": { 299 | "psr-4": { 300 | "Composer\\Pcre\\": "src" 301 | } 302 | }, 303 | "notification-url": "https://packagist.org/downloads/", 304 | "license": [ 305 | "MIT" 306 | ], 307 | "authors": [ 308 | { 309 | "name": "Jordi Boggiano", 310 | "email": "j.boggiano@seld.be", 311 | "homepage": "http://seld.be" 312 | } 313 | ], 314 | "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 315 | "keywords": [ 316 | "PCRE", 317 | "preg", 318 | "regex", 319 | "regular expression" 320 | ], 321 | "support": { 322 | "issues": "https://github.com/composer/pcre/issues", 323 | "source": "https://github.com/composer/pcre/tree/1.0.0" 324 | }, 325 | "funding": [ 326 | { 327 | "url": "https://packagist.com", 328 | "type": "custom" 329 | }, 330 | { 331 | "url": "https://github.com/composer", 332 | "type": "github" 333 | }, 334 | { 335 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 336 | "type": "tidelift" 337 | } 338 | ], 339 | "time": "2021-12-06T15:17:27+00:00" 340 | }, 341 | { 342 | "name": "composer/semver", 343 | "version": "3.2.7", 344 | "source": { 345 | "type": "git", 346 | "url": "https://github.com/composer/semver.git", 347 | "reference": "deac27056b57e46faf136fae7b449eeaa71661ee" 348 | }, 349 | "dist": { 350 | "type": "zip", 351 | "url": "https://api.github.com/repos/composer/semver/zipball/deac27056b57e46faf136fae7b449eeaa71661ee", 352 | "reference": "deac27056b57e46faf136fae7b449eeaa71661ee", 353 | "shasum": "" 354 | }, 355 | "require": { 356 | "php": "^5.3.2 || ^7.0 || ^8.0" 357 | }, 358 | "require-dev": { 359 | "phpstan/phpstan": "^0.12.54", 360 | "symfony/phpunit-bridge": "^4.2 || ^5" 361 | }, 362 | "type": "library", 363 | "extra": { 364 | "branch-alias": { 365 | "dev-main": "3.x-dev" 366 | } 367 | }, 368 | "autoload": { 369 | "psr-4": { 370 | "Composer\\Semver\\": "src" 371 | } 372 | }, 373 | "notification-url": "https://packagist.org/downloads/", 374 | "license": [ 375 | "MIT" 376 | ], 377 | "authors": [ 378 | { 379 | "name": "Nils Adermann", 380 | "email": "naderman@naderman.de", 381 | "homepage": "http://www.naderman.de" 382 | }, 383 | { 384 | "name": "Jordi Boggiano", 385 | "email": "j.boggiano@seld.be", 386 | "homepage": "http://seld.be" 387 | }, 388 | { 389 | "name": "Rob Bast", 390 | "email": "rob.bast@gmail.com", 391 | "homepage": "http://robbast.nl" 392 | } 393 | ], 394 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 395 | "keywords": [ 396 | "semantic", 397 | "semver", 398 | "validation", 399 | "versioning" 400 | ], 401 | "support": { 402 | "irc": "irc://irc.freenode.org/composer", 403 | "issues": "https://github.com/composer/semver/issues", 404 | "source": "https://github.com/composer/semver/tree/3.2.7" 405 | }, 406 | "funding": [ 407 | { 408 | "url": "https://packagist.com", 409 | "type": "custom" 410 | }, 411 | { 412 | "url": "https://github.com/composer", 413 | "type": "github" 414 | }, 415 | { 416 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 417 | "type": "tidelift" 418 | } 419 | ], 420 | "time": "2022-01-04T09:57:54+00:00" 421 | }, 422 | { 423 | "name": "composer/xdebug-handler", 424 | "version": "2.0.4", 425 | "source": { 426 | "type": "git", 427 | "url": "https://github.com/composer/xdebug-handler.git", 428 | "reference": "0c1a3925ec58a4ec98e992b9c7d171e9e184be0a" 429 | }, 430 | "dist": { 431 | "type": "zip", 432 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/0c1a3925ec58a4ec98e992b9c7d171e9e184be0a", 433 | "reference": "0c1a3925ec58a4ec98e992b9c7d171e9e184be0a", 434 | "shasum": "" 435 | }, 436 | "require": { 437 | "composer/pcre": "^1", 438 | "php": "^5.3.2 || ^7.0 || ^8.0", 439 | "psr/log": "^1 || ^2 || ^3" 440 | }, 441 | "require-dev": { 442 | "phpstan/phpstan": "^1.0", 443 | "phpstan/phpstan-strict-rules": "^1.1", 444 | "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" 445 | }, 446 | "type": "library", 447 | "autoload": { 448 | "psr-4": { 449 | "Composer\\XdebugHandler\\": "src" 450 | } 451 | }, 452 | "notification-url": "https://packagist.org/downloads/", 453 | "license": [ 454 | "MIT" 455 | ], 456 | "authors": [ 457 | { 458 | "name": "John Stevenson", 459 | "email": "john-stevenson@blueyonder.co.uk" 460 | } 461 | ], 462 | "description": "Restarts a process without Xdebug.", 463 | "keywords": [ 464 | "Xdebug", 465 | "performance" 466 | ], 467 | "support": { 468 | "irc": "irc://irc.freenode.org/composer", 469 | "issues": "https://github.com/composer/xdebug-handler/issues", 470 | "source": "https://github.com/composer/xdebug-handler/tree/2.0.4" 471 | }, 472 | "funding": [ 473 | { 474 | "url": "https://packagist.com", 475 | "type": "custom" 476 | }, 477 | { 478 | "url": "https://github.com/composer", 479 | "type": "github" 480 | }, 481 | { 482 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 483 | "type": "tidelift" 484 | } 485 | ], 486 | "time": "2022-01-04T17:06:45+00:00" 487 | }, 488 | { 489 | "name": "doctrine/annotations", 490 | "version": "1.13.2", 491 | "source": { 492 | "type": "git", 493 | "url": "https://github.com/doctrine/annotations.git", 494 | "reference": "5b668aef16090008790395c02c893b1ba13f7e08" 495 | }, 496 | "dist": { 497 | "type": "zip", 498 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", 499 | "reference": "5b668aef16090008790395c02c893b1ba13f7e08", 500 | "shasum": "" 501 | }, 502 | "require": { 503 | "doctrine/lexer": "1.*", 504 | "ext-tokenizer": "*", 505 | "php": "^7.1 || ^8.0", 506 | "psr/cache": "^1 || ^2 || ^3" 507 | }, 508 | "require-dev": { 509 | "doctrine/cache": "^1.11 || ^2.0", 510 | "doctrine/coding-standard": "^6.0 || ^8.1", 511 | "phpstan/phpstan": "^0.12.20", 512 | "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", 513 | "symfony/cache": "^4.4 || ^5.2" 514 | }, 515 | "type": "library", 516 | "autoload": { 517 | "psr-4": { 518 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 519 | } 520 | }, 521 | "notification-url": "https://packagist.org/downloads/", 522 | "license": [ 523 | "MIT" 524 | ], 525 | "authors": [ 526 | { 527 | "name": "Guilherme Blanco", 528 | "email": "guilhermeblanco@gmail.com" 529 | }, 530 | { 531 | "name": "Roman Borschel", 532 | "email": "roman@code-factory.org" 533 | }, 534 | { 535 | "name": "Benjamin Eberlei", 536 | "email": "kontakt@beberlei.de" 537 | }, 538 | { 539 | "name": "Jonathan Wage", 540 | "email": "jonwage@gmail.com" 541 | }, 542 | { 543 | "name": "Johannes Schmitt", 544 | "email": "schmittjoh@gmail.com" 545 | } 546 | ], 547 | "description": "Docblock Annotations Parser", 548 | "homepage": "https://www.doctrine-project.org/projects/annotations.html", 549 | "keywords": [ 550 | "annotations", 551 | "docblock", 552 | "parser" 553 | ], 554 | "support": { 555 | "issues": "https://github.com/doctrine/annotations/issues", 556 | "source": "https://github.com/doctrine/annotations/tree/1.13.2" 557 | }, 558 | "time": "2021-08-05T19:00:23+00:00" 559 | }, 560 | { 561 | "name": "doctrine/instantiator", 562 | "version": "1.4.0", 563 | "source": { 564 | "type": "git", 565 | "url": "https://github.com/doctrine/instantiator.git", 566 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" 567 | }, 568 | "dist": { 569 | "type": "zip", 570 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", 571 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", 572 | "shasum": "" 573 | }, 574 | "require": { 575 | "php": "^7.1 || ^8.0" 576 | }, 577 | "require-dev": { 578 | "doctrine/coding-standard": "^8.0", 579 | "ext-pdo": "*", 580 | "ext-phar": "*", 581 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", 582 | "phpstan/phpstan": "^0.12", 583 | "phpstan/phpstan-phpunit": "^0.12", 584 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 585 | }, 586 | "type": "library", 587 | "autoload": { 588 | "psr-4": { 589 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 590 | } 591 | }, 592 | "notification-url": "https://packagist.org/downloads/", 593 | "license": [ 594 | "MIT" 595 | ], 596 | "authors": [ 597 | { 598 | "name": "Marco Pivetta", 599 | "email": "ocramius@gmail.com", 600 | "homepage": "https://ocramius.github.io/" 601 | } 602 | ], 603 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 604 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 605 | "keywords": [ 606 | "constructor", 607 | "instantiate" 608 | ], 609 | "support": { 610 | "issues": "https://github.com/doctrine/instantiator/issues", 611 | "source": "https://github.com/doctrine/instantiator/tree/1.4.0" 612 | }, 613 | "funding": [ 614 | { 615 | "url": "https://www.doctrine-project.org/sponsorship.html", 616 | "type": "custom" 617 | }, 618 | { 619 | "url": "https://www.patreon.com/phpdoctrine", 620 | "type": "patreon" 621 | }, 622 | { 623 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 624 | "type": "tidelift" 625 | } 626 | ], 627 | "time": "2020-11-10T18:47:58+00:00" 628 | }, 629 | { 630 | "name": "doctrine/lexer", 631 | "version": "1.2.1", 632 | "source": { 633 | "type": "git", 634 | "url": "https://github.com/doctrine/lexer.git", 635 | "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" 636 | }, 637 | "dist": { 638 | "type": "zip", 639 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", 640 | "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", 641 | "shasum": "" 642 | }, 643 | "require": { 644 | "php": "^7.2 || ^8.0" 645 | }, 646 | "require-dev": { 647 | "doctrine/coding-standard": "^6.0", 648 | "phpstan/phpstan": "^0.11.8", 649 | "phpunit/phpunit": "^8.2" 650 | }, 651 | "type": "library", 652 | "extra": { 653 | "branch-alias": { 654 | "dev-master": "1.2.x-dev" 655 | } 656 | }, 657 | "autoload": { 658 | "psr-4": { 659 | "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" 660 | } 661 | }, 662 | "notification-url": "https://packagist.org/downloads/", 663 | "license": [ 664 | "MIT" 665 | ], 666 | "authors": [ 667 | { 668 | "name": "Guilherme Blanco", 669 | "email": "guilhermeblanco@gmail.com" 670 | }, 671 | { 672 | "name": "Roman Borschel", 673 | "email": "roman@code-factory.org" 674 | }, 675 | { 676 | "name": "Johannes Schmitt", 677 | "email": "schmittjoh@gmail.com" 678 | } 679 | ], 680 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", 681 | "homepage": "https://www.doctrine-project.org/projects/lexer.html", 682 | "keywords": [ 683 | "annotations", 684 | "docblock", 685 | "lexer", 686 | "parser", 687 | "php" 688 | ], 689 | "support": { 690 | "issues": "https://github.com/doctrine/lexer/issues", 691 | "source": "https://github.com/doctrine/lexer/tree/1.2.1" 692 | }, 693 | "funding": [ 694 | { 695 | "url": "https://www.doctrine-project.org/sponsorship.html", 696 | "type": "custom" 697 | }, 698 | { 699 | "url": "https://www.patreon.com/phpdoctrine", 700 | "type": "patreon" 701 | }, 702 | { 703 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", 704 | "type": "tidelift" 705 | } 706 | ], 707 | "time": "2020-05-25T17:44:05+00:00" 708 | }, 709 | { 710 | "name": "ezyang/htmlpurifier", 711 | "version": "v4.14.0", 712 | "source": { 713 | "type": "git", 714 | "url": "https://github.com/ezyang/htmlpurifier.git", 715 | "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75" 716 | }, 717 | "dist": { 718 | "type": "zip", 719 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75", 720 | "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75", 721 | "shasum": "" 722 | }, 723 | "require": { 724 | "php": ">=5.2" 725 | }, 726 | "type": "library", 727 | "autoload": { 728 | "psr-0": { 729 | "HTMLPurifier": "library/" 730 | }, 731 | "files": [ 732 | "library/HTMLPurifier.composer.php" 733 | ], 734 | "exclude-from-classmap": [ 735 | "/library/HTMLPurifier/Language/" 736 | ] 737 | }, 738 | "notification-url": "https://packagist.org/downloads/", 739 | "license": [ 740 | "LGPL-2.1-or-later" 741 | ], 742 | "authors": [ 743 | { 744 | "name": "Edward Z. Yang", 745 | "email": "admin@htmlpurifier.org", 746 | "homepage": "http://ezyang.com" 747 | } 748 | ], 749 | "description": "Standards compliant HTML filter written in PHP", 750 | "homepage": "http://htmlpurifier.org/", 751 | "keywords": [ 752 | "html" 753 | ], 754 | "support": { 755 | "issues": "https://github.com/ezyang/htmlpurifier/issues", 756 | "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0" 757 | }, 758 | "time": "2021-12-25T01:21:49+00:00" 759 | }, 760 | { 761 | "name": "friendsofphp/php-cs-fixer", 762 | "version": "v3.4.0", 763 | "source": { 764 | "type": "git", 765 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", 766 | "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad" 767 | }, 768 | "dist": { 769 | "type": "zip", 770 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", 771 | "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", 772 | "shasum": "" 773 | }, 774 | "require": { 775 | "composer/semver": "^3.2", 776 | "composer/xdebug-handler": "^2.0", 777 | "doctrine/annotations": "^1.12", 778 | "ext-json": "*", 779 | "ext-tokenizer": "*", 780 | "php": "^7.2.5 || ^8.0", 781 | "php-cs-fixer/diff": "^2.0", 782 | "symfony/console": "^4.4.20 || ^5.1.3 || ^6.0", 783 | "symfony/event-dispatcher": "^4.4.20 || ^5.0 || ^6.0", 784 | "symfony/filesystem": "^4.4.20 || ^5.0 || ^6.0", 785 | "symfony/finder": "^4.4.20 || ^5.0 || ^6.0", 786 | "symfony/options-resolver": "^4.4.20 || ^5.0 || ^6.0", 787 | "symfony/polyfill-mbstring": "^1.23", 788 | "symfony/polyfill-php80": "^1.23", 789 | "symfony/polyfill-php81": "^1.23", 790 | "symfony/process": "^4.4.20 || ^5.0 || ^6.0", 791 | "symfony/stopwatch": "^4.4.20 || ^5.0 || ^6.0" 792 | }, 793 | "require-dev": { 794 | "justinrainbow/json-schema": "^5.2", 795 | "keradus/cli-executor": "^1.5", 796 | "mikey179/vfsstream": "^1.6.8", 797 | "php-coveralls/php-coveralls": "^2.5.2", 798 | "php-cs-fixer/accessible-object": "^1.1", 799 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", 800 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", 801 | "phpspec/prophecy": "^1.15", 802 | "phpspec/prophecy-phpunit": "^1.1 || ^2.0", 803 | "phpunit/phpunit": "^8.5.21 || ^9.5", 804 | "phpunitgoodpractices/polyfill": "^1.5", 805 | "phpunitgoodpractices/traits": "^1.9.1", 806 | "symfony/phpunit-bridge": "^5.2.4 || ^6.0", 807 | "symfony/yaml": "^4.4.20 || ^5.0 || ^6.0" 808 | }, 809 | "suggest": { 810 | "ext-dom": "For handling output formats in XML", 811 | "ext-mbstring": "For handling non-UTF8 characters." 812 | }, 813 | "bin": [ 814 | "php-cs-fixer" 815 | ], 816 | "type": "application", 817 | "autoload": { 818 | "psr-4": { 819 | "PhpCsFixer\\": "src/" 820 | } 821 | }, 822 | "notification-url": "https://packagist.org/downloads/", 823 | "license": [ 824 | "MIT" 825 | ], 826 | "authors": [ 827 | { 828 | "name": "Fabien Potencier", 829 | "email": "fabien@symfony.com" 830 | }, 831 | { 832 | "name": "Dariusz Rumiński", 833 | "email": "dariusz.ruminski@gmail.com" 834 | } 835 | ], 836 | "description": "A tool to automatically fix PHP code style", 837 | "support": { 838 | "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", 839 | "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.4.0" 840 | }, 841 | "funding": [ 842 | { 843 | "url": "https://github.com/keradus", 844 | "type": "github" 845 | } 846 | ], 847 | "time": "2021-12-11T16:25:08+00:00" 848 | }, 849 | { 850 | "name": "myclabs/deep-copy", 851 | "version": "1.10.2", 852 | "source": { 853 | "type": "git", 854 | "url": "https://github.com/myclabs/DeepCopy.git", 855 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" 856 | }, 857 | "dist": { 858 | "type": "zip", 859 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", 860 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", 861 | "shasum": "" 862 | }, 863 | "require": { 864 | "php": "^7.1 || ^8.0" 865 | }, 866 | "require-dev": { 867 | "doctrine/collections": "^1.0", 868 | "doctrine/common": "^2.6", 869 | "phpunit/phpunit": "^7.1" 870 | }, 871 | "type": "library", 872 | "autoload": { 873 | "psr-4": { 874 | "DeepCopy\\": "src/DeepCopy/" 875 | }, 876 | "files": [ 877 | "src/DeepCopy/deep_copy.php" 878 | ] 879 | }, 880 | "notification-url": "https://packagist.org/downloads/", 881 | "license": [ 882 | "MIT" 883 | ], 884 | "description": "Create deep copies (clones) of your objects", 885 | "keywords": [ 886 | "clone", 887 | "copy", 888 | "duplicate", 889 | "object", 890 | "object graph" 891 | ], 892 | "support": { 893 | "issues": "https://github.com/myclabs/DeepCopy/issues", 894 | "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" 895 | }, 896 | "funding": [ 897 | { 898 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 899 | "type": "tidelift" 900 | } 901 | ], 902 | "time": "2020-11-13T09:40:50+00:00" 903 | }, 904 | { 905 | "name": "paragonie/random_compat", 906 | "version": "v9.99.100", 907 | "source": { 908 | "type": "git", 909 | "url": "https://github.com/paragonie/random_compat.git", 910 | "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" 911 | }, 912 | "dist": { 913 | "type": "zip", 914 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", 915 | "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", 916 | "shasum": "" 917 | }, 918 | "require": { 919 | "php": ">= 7" 920 | }, 921 | "require-dev": { 922 | "phpunit/phpunit": "4.*|5.*", 923 | "vimeo/psalm": "^1" 924 | }, 925 | "suggest": { 926 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 927 | }, 928 | "type": "library", 929 | "notification-url": "https://packagist.org/downloads/", 930 | "license": [ 931 | "MIT" 932 | ], 933 | "authors": [ 934 | { 935 | "name": "Paragon Initiative Enterprises", 936 | "email": "security@paragonie.com", 937 | "homepage": "https://paragonie.com" 938 | } 939 | ], 940 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 941 | "keywords": [ 942 | "csprng", 943 | "polyfill", 944 | "pseudorandom", 945 | "random" 946 | ], 947 | "support": { 948 | "email": "info@paragonie.com", 949 | "issues": "https://github.com/paragonie/random_compat/issues", 950 | "source": "https://github.com/paragonie/random_compat" 951 | }, 952 | "time": "2020-10-15T08:29:30+00:00" 953 | }, 954 | { 955 | "name": "phar-io/manifest", 956 | "version": "2.0.3", 957 | "source": { 958 | "type": "git", 959 | "url": "https://github.com/phar-io/manifest.git", 960 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 961 | }, 962 | "dist": { 963 | "type": "zip", 964 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 965 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 966 | "shasum": "" 967 | }, 968 | "require": { 969 | "ext-dom": "*", 970 | "ext-phar": "*", 971 | "ext-xmlwriter": "*", 972 | "phar-io/version": "^3.0.1", 973 | "php": "^7.2 || ^8.0" 974 | }, 975 | "type": "library", 976 | "extra": { 977 | "branch-alias": { 978 | "dev-master": "2.0.x-dev" 979 | } 980 | }, 981 | "autoload": { 982 | "classmap": [ 983 | "src/" 984 | ] 985 | }, 986 | "notification-url": "https://packagist.org/downloads/", 987 | "license": [ 988 | "BSD-3-Clause" 989 | ], 990 | "authors": [ 991 | { 992 | "name": "Arne Blankerts", 993 | "email": "arne@blankerts.de", 994 | "role": "Developer" 995 | }, 996 | { 997 | "name": "Sebastian Heuer", 998 | "email": "sebastian@phpeople.de", 999 | "role": "Developer" 1000 | }, 1001 | { 1002 | "name": "Sebastian Bergmann", 1003 | "email": "sebastian@phpunit.de", 1004 | "role": "Developer" 1005 | } 1006 | ], 1007 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1008 | "support": { 1009 | "issues": "https://github.com/phar-io/manifest/issues", 1010 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 1011 | }, 1012 | "time": "2021-07-20T11:28:43+00:00" 1013 | }, 1014 | { 1015 | "name": "phar-io/version", 1016 | "version": "3.1.0", 1017 | "source": { 1018 | "type": "git", 1019 | "url": "https://github.com/phar-io/version.git", 1020 | "reference": "bae7c545bef187884426f042434e561ab1ddb182" 1021 | }, 1022 | "dist": { 1023 | "type": "zip", 1024 | "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", 1025 | "reference": "bae7c545bef187884426f042434e561ab1ddb182", 1026 | "shasum": "" 1027 | }, 1028 | "require": { 1029 | "php": "^7.2 || ^8.0" 1030 | }, 1031 | "type": "library", 1032 | "autoload": { 1033 | "classmap": [ 1034 | "src/" 1035 | ] 1036 | }, 1037 | "notification-url": "https://packagist.org/downloads/", 1038 | "license": [ 1039 | "BSD-3-Clause" 1040 | ], 1041 | "authors": [ 1042 | { 1043 | "name": "Arne Blankerts", 1044 | "email": "arne@blankerts.de", 1045 | "role": "Developer" 1046 | }, 1047 | { 1048 | "name": "Sebastian Heuer", 1049 | "email": "sebastian@phpeople.de", 1050 | "role": "Developer" 1051 | }, 1052 | { 1053 | "name": "Sebastian Bergmann", 1054 | "email": "sebastian@phpunit.de", 1055 | "role": "Developer" 1056 | } 1057 | ], 1058 | "description": "Library for handling version information and constraints", 1059 | "support": { 1060 | "issues": "https://github.com/phar-io/version/issues", 1061 | "source": "https://github.com/phar-io/version/tree/3.1.0" 1062 | }, 1063 | "time": "2021-02-23T14:00:09+00:00" 1064 | }, 1065 | { 1066 | "name": "php-cs-fixer/diff", 1067 | "version": "v2.0.2", 1068 | "source": { 1069 | "type": "git", 1070 | "url": "https://github.com/PHP-CS-Fixer/diff.git", 1071 | "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" 1072 | }, 1073 | "dist": { 1074 | "type": "zip", 1075 | "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", 1076 | "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", 1077 | "shasum": "" 1078 | }, 1079 | "require": { 1080 | "php": "^5.6 || ^7.0 || ^8.0" 1081 | }, 1082 | "require-dev": { 1083 | "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", 1084 | "symfony/process": "^3.3" 1085 | }, 1086 | "type": "library", 1087 | "autoload": { 1088 | "classmap": [ 1089 | "src/" 1090 | ] 1091 | }, 1092 | "notification-url": "https://packagist.org/downloads/", 1093 | "license": [ 1094 | "BSD-3-Clause" 1095 | ], 1096 | "authors": [ 1097 | { 1098 | "name": "Sebastian Bergmann", 1099 | "email": "sebastian@phpunit.de" 1100 | }, 1101 | { 1102 | "name": "Kore Nordmann", 1103 | "email": "mail@kore-nordmann.de" 1104 | } 1105 | ], 1106 | "description": "sebastian/diff v3 backport support for PHP 5.6+", 1107 | "homepage": "https://github.com/PHP-CS-Fixer", 1108 | "keywords": [ 1109 | "diff" 1110 | ], 1111 | "support": { 1112 | "issues": "https://github.com/PHP-CS-Fixer/diff/issues", 1113 | "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" 1114 | }, 1115 | "time": "2020-10-14T08:32:19+00:00" 1116 | }, 1117 | { 1118 | "name": "phpdocumentor/reflection-common", 1119 | "version": "2.2.0", 1120 | "source": { 1121 | "type": "git", 1122 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1123 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 1124 | }, 1125 | "dist": { 1126 | "type": "zip", 1127 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1128 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1129 | "shasum": "" 1130 | }, 1131 | "require": { 1132 | "php": "^7.2 || ^8.0" 1133 | }, 1134 | "type": "library", 1135 | "extra": { 1136 | "branch-alias": { 1137 | "dev-2.x": "2.x-dev" 1138 | } 1139 | }, 1140 | "autoload": { 1141 | "psr-4": { 1142 | "phpDocumentor\\Reflection\\": "src/" 1143 | } 1144 | }, 1145 | "notification-url": "https://packagist.org/downloads/", 1146 | "license": [ 1147 | "MIT" 1148 | ], 1149 | "authors": [ 1150 | { 1151 | "name": "Jaap van Otterdijk", 1152 | "email": "opensource@ijaap.nl" 1153 | } 1154 | ], 1155 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1156 | "homepage": "http://www.phpdoc.org", 1157 | "keywords": [ 1158 | "FQSEN", 1159 | "phpDocumentor", 1160 | "phpdoc", 1161 | "reflection", 1162 | "static analysis" 1163 | ], 1164 | "support": { 1165 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 1166 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" 1167 | }, 1168 | "time": "2020-06-27T09:03:43+00:00" 1169 | }, 1170 | { 1171 | "name": "phpdocumentor/reflection-docblock", 1172 | "version": "5.3.0", 1173 | "source": { 1174 | "type": "git", 1175 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1176 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" 1177 | }, 1178 | "dist": { 1179 | "type": "zip", 1180 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", 1181 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", 1182 | "shasum": "" 1183 | }, 1184 | "require": { 1185 | "ext-filter": "*", 1186 | "php": "^7.2 || ^8.0", 1187 | "phpdocumentor/reflection-common": "^2.2", 1188 | "phpdocumentor/type-resolver": "^1.3", 1189 | "webmozart/assert": "^1.9.1" 1190 | }, 1191 | "require-dev": { 1192 | "mockery/mockery": "~1.3.2", 1193 | "psalm/phar": "^4.8" 1194 | }, 1195 | "type": "library", 1196 | "extra": { 1197 | "branch-alias": { 1198 | "dev-master": "5.x-dev" 1199 | } 1200 | }, 1201 | "autoload": { 1202 | "psr-4": { 1203 | "phpDocumentor\\Reflection\\": "src" 1204 | } 1205 | }, 1206 | "notification-url": "https://packagist.org/downloads/", 1207 | "license": [ 1208 | "MIT" 1209 | ], 1210 | "authors": [ 1211 | { 1212 | "name": "Mike van Riel", 1213 | "email": "me@mikevanriel.com" 1214 | }, 1215 | { 1216 | "name": "Jaap van Otterdijk", 1217 | "email": "account@ijaap.nl" 1218 | } 1219 | ], 1220 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1221 | "support": { 1222 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 1223 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" 1224 | }, 1225 | "time": "2021-10-19T17:43:47+00:00" 1226 | }, 1227 | { 1228 | "name": "phpdocumentor/type-resolver", 1229 | "version": "1.6.0", 1230 | "source": { 1231 | "type": "git", 1232 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1233 | "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" 1234 | }, 1235 | "dist": { 1236 | "type": "zip", 1237 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", 1238 | "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", 1239 | "shasum": "" 1240 | }, 1241 | "require": { 1242 | "php": "^7.2 || ^8.0", 1243 | "phpdocumentor/reflection-common": "^2.0" 1244 | }, 1245 | "require-dev": { 1246 | "ext-tokenizer": "*", 1247 | "psalm/phar": "^4.8" 1248 | }, 1249 | "type": "library", 1250 | "extra": { 1251 | "branch-alias": { 1252 | "dev-1.x": "1.x-dev" 1253 | } 1254 | }, 1255 | "autoload": { 1256 | "psr-4": { 1257 | "phpDocumentor\\Reflection\\": "src" 1258 | } 1259 | }, 1260 | "notification-url": "https://packagist.org/downloads/", 1261 | "license": [ 1262 | "MIT" 1263 | ], 1264 | "authors": [ 1265 | { 1266 | "name": "Mike van Riel", 1267 | "email": "me@mikevanriel.com" 1268 | } 1269 | ], 1270 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 1271 | "support": { 1272 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 1273 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" 1274 | }, 1275 | "time": "2022-01-04T19:58:01+00:00" 1276 | }, 1277 | { 1278 | "name": "phpspec/prophecy", 1279 | "version": "v1.15.0", 1280 | "source": { 1281 | "type": "git", 1282 | "url": "https://github.com/phpspec/prophecy.git", 1283 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" 1284 | }, 1285 | "dist": { 1286 | "type": "zip", 1287 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", 1288 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", 1289 | "shasum": "" 1290 | }, 1291 | "require": { 1292 | "doctrine/instantiator": "^1.2", 1293 | "php": "^7.2 || ~8.0, <8.2", 1294 | "phpdocumentor/reflection-docblock": "^5.2", 1295 | "sebastian/comparator": "^3.0 || ^4.0", 1296 | "sebastian/recursion-context": "^3.0 || ^4.0" 1297 | }, 1298 | "require-dev": { 1299 | "phpspec/phpspec": "^6.0 || ^7.0", 1300 | "phpunit/phpunit": "^8.0 || ^9.0" 1301 | }, 1302 | "type": "library", 1303 | "extra": { 1304 | "branch-alias": { 1305 | "dev-master": "1.x-dev" 1306 | } 1307 | }, 1308 | "autoload": { 1309 | "psr-4": { 1310 | "Prophecy\\": "src/Prophecy" 1311 | } 1312 | }, 1313 | "notification-url": "https://packagist.org/downloads/", 1314 | "license": [ 1315 | "MIT" 1316 | ], 1317 | "authors": [ 1318 | { 1319 | "name": "Konstantin Kudryashov", 1320 | "email": "ever.zet@gmail.com", 1321 | "homepage": "http://everzet.com" 1322 | }, 1323 | { 1324 | "name": "Marcello Duarte", 1325 | "email": "marcello.duarte@gmail.com" 1326 | } 1327 | ], 1328 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1329 | "homepage": "https://github.com/phpspec/prophecy", 1330 | "keywords": [ 1331 | "Double", 1332 | "Dummy", 1333 | "fake", 1334 | "mock", 1335 | "spy", 1336 | "stub" 1337 | ], 1338 | "support": { 1339 | "issues": "https://github.com/phpspec/prophecy/issues", 1340 | "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" 1341 | }, 1342 | "time": "2021-12-08T12:19:24+00:00" 1343 | }, 1344 | { 1345 | "name": "phpstan/phpstan-phpunit", 1346 | "version": "1.0.0", 1347 | "source": { 1348 | "type": "git", 1349 | "url": "https://github.com/phpstan/phpstan-phpunit.git", 1350 | "reference": "9eb88c9f689003a8a2a5ae9e010338ee94dc39b3" 1351 | }, 1352 | "dist": { 1353 | "type": "zip", 1354 | "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/9eb88c9f689003a8a2a5ae9e010338ee94dc39b3", 1355 | "reference": "9eb88c9f689003a8a2a5ae9e010338ee94dc39b3", 1356 | "shasum": "" 1357 | }, 1358 | "require": { 1359 | "php": "^7.1 || ^8.0", 1360 | "phpstan/phpstan": "^1.0" 1361 | }, 1362 | "conflict": { 1363 | "phpunit/phpunit": "<7.0" 1364 | }, 1365 | "require-dev": { 1366 | "nikic/php-parser": "^4.13.0", 1367 | "php-parallel-lint/php-parallel-lint": "^1.2", 1368 | "phpstan/phpstan-strict-rules": "^1.0", 1369 | "phpunit/phpunit": "^9.5" 1370 | }, 1371 | "type": "phpstan-extension", 1372 | "extra": { 1373 | "branch-alias": { 1374 | "dev-master": "1.0-dev" 1375 | }, 1376 | "phpstan": { 1377 | "includes": [ 1378 | "extension.neon", 1379 | "rules.neon" 1380 | ] 1381 | } 1382 | }, 1383 | "autoload": { 1384 | "psr-4": { 1385 | "PHPStan\\": "src/" 1386 | } 1387 | }, 1388 | "notification-url": "https://packagist.org/downloads/", 1389 | "license": [ 1390 | "MIT" 1391 | ], 1392 | "description": "PHPUnit extensions and rules for PHPStan", 1393 | "support": { 1394 | "issues": "https://github.com/phpstan/phpstan-phpunit/issues", 1395 | "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.0.0" 1396 | }, 1397 | "time": "2021-10-14T08:03:54+00:00" 1398 | }, 1399 | { 1400 | "name": "phpunit/php-code-coverage", 1401 | "version": "7.0.15", 1402 | "source": { 1403 | "type": "git", 1404 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1405 | "reference": "819f92bba8b001d4363065928088de22f25a3a48" 1406 | }, 1407 | "dist": { 1408 | "type": "zip", 1409 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/819f92bba8b001d4363065928088de22f25a3a48", 1410 | "reference": "819f92bba8b001d4363065928088de22f25a3a48", 1411 | "shasum": "" 1412 | }, 1413 | "require": { 1414 | "ext-dom": "*", 1415 | "ext-xmlwriter": "*", 1416 | "php": ">=7.2", 1417 | "phpunit/php-file-iterator": "^2.0.2", 1418 | "phpunit/php-text-template": "^1.2.1", 1419 | "phpunit/php-token-stream": "^3.1.3 || ^4.0", 1420 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1421 | "sebastian/environment": "^4.2.2", 1422 | "sebastian/version": "^2.0.1", 1423 | "theseer/tokenizer": "^1.1.3" 1424 | }, 1425 | "require-dev": { 1426 | "phpunit/phpunit": "^8.2.2" 1427 | }, 1428 | "suggest": { 1429 | "ext-xdebug": "^2.7.2" 1430 | }, 1431 | "type": "library", 1432 | "extra": { 1433 | "branch-alias": { 1434 | "dev-master": "7.0-dev" 1435 | } 1436 | }, 1437 | "autoload": { 1438 | "classmap": [ 1439 | "src/" 1440 | ] 1441 | }, 1442 | "notification-url": "https://packagist.org/downloads/", 1443 | "license": [ 1444 | "BSD-3-Clause" 1445 | ], 1446 | "authors": [ 1447 | { 1448 | "name": "Sebastian Bergmann", 1449 | "email": "sebastian@phpunit.de", 1450 | "role": "lead" 1451 | } 1452 | ], 1453 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1454 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1455 | "keywords": [ 1456 | "coverage", 1457 | "testing", 1458 | "xunit" 1459 | ], 1460 | "support": { 1461 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1462 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15" 1463 | }, 1464 | "funding": [ 1465 | { 1466 | "url": "https://github.com/sebastianbergmann", 1467 | "type": "github" 1468 | } 1469 | ], 1470 | "time": "2021-07-26T12:20:09+00:00" 1471 | }, 1472 | { 1473 | "name": "phpunit/php-file-iterator", 1474 | "version": "2.0.5", 1475 | "source": { 1476 | "type": "git", 1477 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1478 | "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" 1479 | }, 1480 | "dist": { 1481 | "type": "zip", 1482 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", 1483 | "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", 1484 | "shasum": "" 1485 | }, 1486 | "require": { 1487 | "php": ">=7.1" 1488 | }, 1489 | "require-dev": { 1490 | "phpunit/phpunit": "^8.5" 1491 | }, 1492 | "type": "library", 1493 | "extra": { 1494 | "branch-alias": { 1495 | "dev-master": "2.0.x-dev" 1496 | } 1497 | }, 1498 | "autoload": { 1499 | "classmap": [ 1500 | "src/" 1501 | ] 1502 | }, 1503 | "notification-url": "https://packagist.org/downloads/", 1504 | "license": [ 1505 | "BSD-3-Clause" 1506 | ], 1507 | "authors": [ 1508 | { 1509 | "name": "Sebastian Bergmann", 1510 | "email": "sebastian@phpunit.de", 1511 | "role": "lead" 1512 | } 1513 | ], 1514 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1515 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1516 | "keywords": [ 1517 | "filesystem", 1518 | "iterator" 1519 | ], 1520 | "support": { 1521 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1522 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" 1523 | }, 1524 | "funding": [ 1525 | { 1526 | "url": "https://github.com/sebastianbergmann", 1527 | "type": "github" 1528 | } 1529 | ], 1530 | "time": "2021-12-02T12:42:26+00:00" 1531 | }, 1532 | { 1533 | "name": "phpunit/php-text-template", 1534 | "version": "1.2.1", 1535 | "source": { 1536 | "type": "git", 1537 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1538 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1539 | }, 1540 | "dist": { 1541 | "type": "zip", 1542 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1543 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1544 | "shasum": "" 1545 | }, 1546 | "require": { 1547 | "php": ">=5.3.3" 1548 | }, 1549 | "type": "library", 1550 | "autoload": { 1551 | "classmap": [ 1552 | "src/" 1553 | ] 1554 | }, 1555 | "notification-url": "https://packagist.org/downloads/", 1556 | "license": [ 1557 | "BSD-3-Clause" 1558 | ], 1559 | "authors": [ 1560 | { 1561 | "name": "Sebastian Bergmann", 1562 | "email": "sebastian@phpunit.de", 1563 | "role": "lead" 1564 | } 1565 | ], 1566 | "description": "Simple template engine.", 1567 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1568 | "keywords": [ 1569 | "template" 1570 | ], 1571 | "support": { 1572 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1573 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" 1574 | }, 1575 | "time": "2015-06-21T13:50:34+00:00" 1576 | }, 1577 | { 1578 | "name": "phpunit/php-timer", 1579 | "version": "2.1.3", 1580 | "source": { 1581 | "type": "git", 1582 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1583 | "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" 1584 | }, 1585 | "dist": { 1586 | "type": "zip", 1587 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", 1588 | "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", 1589 | "shasum": "" 1590 | }, 1591 | "require": { 1592 | "php": ">=7.1" 1593 | }, 1594 | "require-dev": { 1595 | "phpunit/phpunit": "^8.5" 1596 | }, 1597 | "type": "library", 1598 | "extra": { 1599 | "branch-alias": { 1600 | "dev-master": "2.1-dev" 1601 | } 1602 | }, 1603 | "autoload": { 1604 | "classmap": [ 1605 | "src/" 1606 | ] 1607 | }, 1608 | "notification-url": "https://packagist.org/downloads/", 1609 | "license": [ 1610 | "BSD-3-Clause" 1611 | ], 1612 | "authors": [ 1613 | { 1614 | "name": "Sebastian Bergmann", 1615 | "email": "sebastian@phpunit.de", 1616 | "role": "lead" 1617 | } 1618 | ], 1619 | "description": "Utility class for timing", 1620 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1621 | "keywords": [ 1622 | "timer" 1623 | ], 1624 | "support": { 1625 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1626 | "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" 1627 | }, 1628 | "funding": [ 1629 | { 1630 | "url": "https://github.com/sebastianbergmann", 1631 | "type": "github" 1632 | } 1633 | ], 1634 | "time": "2020-11-30T08:20:02+00:00" 1635 | }, 1636 | { 1637 | "name": "phpunit/php-token-stream", 1638 | "version": "4.0.4", 1639 | "source": { 1640 | "type": "git", 1641 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1642 | "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" 1643 | }, 1644 | "dist": { 1645 | "type": "zip", 1646 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", 1647 | "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", 1648 | "shasum": "" 1649 | }, 1650 | "require": { 1651 | "ext-tokenizer": "*", 1652 | "php": "^7.3 || ^8.0" 1653 | }, 1654 | "require-dev": { 1655 | "phpunit/phpunit": "^9.0" 1656 | }, 1657 | "type": "library", 1658 | "extra": { 1659 | "branch-alias": { 1660 | "dev-master": "4.0-dev" 1661 | } 1662 | }, 1663 | "autoload": { 1664 | "classmap": [ 1665 | "src/" 1666 | ] 1667 | }, 1668 | "notification-url": "https://packagist.org/downloads/", 1669 | "license": [ 1670 | "BSD-3-Clause" 1671 | ], 1672 | "authors": [ 1673 | { 1674 | "name": "Sebastian Bergmann", 1675 | "email": "sebastian@phpunit.de" 1676 | } 1677 | ], 1678 | "description": "Wrapper around PHP's tokenizer extension.", 1679 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1680 | "keywords": [ 1681 | "tokenizer" 1682 | ], 1683 | "support": { 1684 | "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", 1685 | "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" 1686 | }, 1687 | "funding": [ 1688 | { 1689 | "url": "https://github.com/sebastianbergmann", 1690 | "type": "github" 1691 | } 1692 | ], 1693 | "abandoned": true, 1694 | "time": "2020-08-04T08:28:15+00:00" 1695 | }, 1696 | { 1697 | "name": "phpunit/phpunit", 1698 | "version": "8.5.22", 1699 | "source": { 1700 | "type": "git", 1701 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1702 | "reference": "ddd05b9d844260353895a3b950a9258126c11503" 1703 | }, 1704 | "dist": { 1705 | "type": "zip", 1706 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ddd05b9d844260353895a3b950a9258126c11503", 1707 | "reference": "ddd05b9d844260353895a3b950a9258126c11503", 1708 | "shasum": "" 1709 | }, 1710 | "require": { 1711 | "doctrine/instantiator": "^1.3.1", 1712 | "ext-dom": "*", 1713 | "ext-json": "*", 1714 | "ext-libxml": "*", 1715 | "ext-mbstring": "*", 1716 | "ext-xml": "*", 1717 | "ext-xmlwriter": "*", 1718 | "myclabs/deep-copy": "^1.10.0", 1719 | "phar-io/manifest": "^2.0.3", 1720 | "phar-io/version": "^3.0.2", 1721 | "php": ">=7.2", 1722 | "phpspec/prophecy": "^1.10.3", 1723 | "phpunit/php-code-coverage": "^7.0.12", 1724 | "phpunit/php-file-iterator": "^2.0.4", 1725 | "phpunit/php-text-template": "^1.2.1", 1726 | "phpunit/php-timer": "^2.1.2", 1727 | "sebastian/comparator": "^3.0.2", 1728 | "sebastian/diff": "^3.0.2", 1729 | "sebastian/environment": "^4.2.3", 1730 | "sebastian/exporter": "^3.1.2", 1731 | "sebastian/global-state": "^3.0.0", 1732 | "sebastian/object-enumerator": "^3.0.3", 1733 | "sebastian/resource-operations": "^2.0.1", 1734 | "sebastian/type": "^1.1.3", 1735 | "sebastian/version": "^2.0.1" 1736 | }, 1737 | "require-dev": { 1738 | "ext-pdo": "*" 1739 | }, 1740 | "suggest": { 1741 | "ext-soap": "*", 1742 | "ext-xdebug": "*", 1743 | "phpunit/php-invoker": "^2.0.0" 1744 | }, 1745 | "bin": [ 1746 | "phpunit" 1747 | ], 1748 | "type": "library", 1749 | "extra": { 1750 | "branch-alias": { 1751 | "dev-master": "8.5-dev" 1752 | } 1753 | }, 1754 | "autoload": { 1755 | "classmap": [ 1756 | "src/" 1757 | ] 1758 | }, 1759 | "notification-url": "https://packagist.org/downloads/", 1760 | "license": [ 1761 | "BSD-3-Clause" 1762 | ], 1763 | "authors": [ 1764 | { 1765 | "name": "Sebastian Bergmann", 1766 | "email": "sebastian@phpunit.de", 1767 | "role": "lead" 1768 | } 1769 | ], 1770 | "description": "The PHP Unit Testing framework.", 1771 | "homepage": "https://phpunit.de/", 1772 | "keywords": [ 1773 | "phpunit", 1774 | "testing", 1775 | "xunit" 1776 | ], 1777 | "support": { 1778 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1779 | "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.22" 1780 | }, 1781 | "funding": [ 1782 | { 1783 | "url": "https://phpunit.de/sponsors.html", 1784 | "type": "custom" 1785 | }, 1786 | { 1787 | "url": "https://github.com/sebastianbergmann", 1788 | "type": "github" 1789 | } 1790 | ], 1791 | "time": "2021-12-25T06:58:09+00:00" 1792 | }, 1793 | { 1794 | "name": "psr/cache", 1795 | "version": "1.0.1", 1796 | "source": { 1797 | "type": "git", 1798 | "url": "https://github.com/php-fig/cache.git", 1799 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" 1800 | }, 1801 | "dist": { 1802 | "type": "zip", 1803 | "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", 1804 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", 1805 | "shasum": "" 1806 | }, 1807 | "require": { 1808 | "php": ">=5.3.0" 1809 | }, 1810 | "type": "library", 1811 | "extra": { 1812 | "branch-alias": { 1813 | "dev-master": "1.0.x-dev" 1814 | } 1815 | }, 1816 | "autoload": { 1817 | "psr-4": { 1818 | "Psr\\Cache\\": "src/" 1819 | } 1820 | }, 1821 | "notification-url": "https://packagist.org/downloads/", 1822 | "license": [ 1823 | "MIT" 1824 | ], 1825 | "authors": [ 1826 | { 1827 | "name": "PHP-FIG", 1828 | "homepage": "http://www.php-fig.org/" 1829 | } 1830 | ], 1831 | "description": "Common interface for caching libraries", 1832 | "keywords": [ 1833 | "cache", 1834 | "psr", 1835 | "psr-6" 1836 | ], 1837 | "support": { 1838 | "source": "https://github.com/php-fig/cache/tree/master" 1839 | }, 1840 | "time": "2016-08-06T20:24:11+00:00" 1841 | }, 1842 | { 1843 | "name": "psr/container", 1844 | "version": "1.1.2", 1845 | "source": { 1846 | "type": "git", 1847 | "url": "https://github.com/php-fig/container.git", 1848 | "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" 1849 | }, 1850 | "dist": { 1851 | "type": "zip", 1852 | "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", 1853 | "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", 1854 | "shasum": "" 1855 | }, 1856 | "require": { 1857 | "php": ">=7.4.0" 1858 | }, 1859 | "type": "library", 1860 | "autoload": { 1861 | "psr-4": { 1862 | "Psr\\Container\\": "src/" 1863 | } 1864 | }, 1865 | "notification-url": "https://packagist.org/downloads/", 1866 | "license": [ 1867 | "MIT" 1868 | ], 1869 | "authors": [ 1870 | { 1871 | "name": "PHP-FIG", 1872 | "homepage": "https://www.php-fig.org/" 1873 | } 1874 | ], 1875 | "description": "Common Container Interface (PHP FIG PSR-11)", 1876 | "homepage": "https://github.com/php-fig/container", 1877 | "keywords": [ 1878 | "PSR-11", 1879 | "container", 1880 | "container-interface", 1881 | "container-interop", 1882 | "psr" 1883 | ], 1884 | "support": { 1885 | "issues": "https://github.com/php-fig/container/issues", 1886 | "source": "https://github.com/php-fig/container/tree/1.1.2" 1887 | }, 1888 | "time": "2021-11-05T16:50:12+00:00" 1889 | }, 1890 | { 1891 | "name": "psr/event-dispatcher", 1892 | "version": "1.0.0", 1893 | "source": { 1894 | "type": "git", 1895 | "url": "https://github.com/php-fig/event-dispatcher.git", 1896 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 1897 | }, 1898 | "dist": { 1899 | "type": "zip", 1900 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 1901 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 1902 | "shasum": "" 1903 | }, 1904 | "require": { 1905 | "php": ">=7.2.0" 1906 | }, 1907 | "type": "library", 1908 | "extra": { 1909 | "branch-alias": { 1910 | "dev-master": "1.0.x-dev" 1911 | } 1912 | }, 1913 | "autoload": { 1914 | "psr-4": { 1915 | "Psr\\EventDispatcher\\": "src/" 1916 | } 1917 | }, 1918 | "notification-url": "https://packagist.org/downloads/", 1919 | "license": [ 1920 | "MIT" 1921 | ], 1922 | "authors": [ 1923 | { 1924 | "name": "PHP-FIG", 1925 | "homepage": "http://www.php-fig.org/" 1926 | } 1927 | ], 1928 | "description": "Standard interfaces for event handling.", 1929 | "keywords": [ 1930 | "events", 1931 | "psr", 1932 | "psr-14" 1933 | ], 1934 | "support": { 1935 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 1936 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 1937 | }, 1938 | "time": "2019-01-08T18:20:26+00:00" 1939 | }, 1940 | { 1941 | "name": "psr/log", 1942 | "version": "1.1.4", 1943 | "source": { 1944 | "type": "git", 1945 | "url": "https://github.com/php-fig/log.git", 1946 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11" 1947 | }, 1948 | "dist": { 1949 | "type": "zip", 1950 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", 1951 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11", 1952 | "shasum": "" 1953 | }, 1954 | "require": { 1955 | "php": ">=5.3.0" 1956 | }, 1957 | "type": "library", 1958 | "extra": { 1959 | "branch-alias": { 1960 | "dev-master": "1.1.x-dev" 1961 | } 1962 | }, 1963 | "autoload": { 1964 | "psr-4": { 1965 | "Psr\\Log\\": "Psr/Log/" 1966 | } 1967 | }, 1968 | "notification-url": "https://packagist.org/downloads/", 1969 | "license": [ 1970 | "MIT" 1971 | ], 1972 | "authors": [ 1973 | { 1974 | "name": "PHP-FIG", 1975 | "homepage": "https://www.php-fig.org/" 1976 | } 1977 | ], 1978 | "description": "Common interface for logging libraries", 1979 | "homepage": "https://github.com/php-fig/log", 1980 | "keywords": [ 1981 | "log", 1982 | "psr", 1983 | "psr-3" 1984 | ], 1985 | "support": { 1986 | "source": "https://github.com/php-fig/log/tree/1.1.4" 1987 | }, 1988 | "time": "2021-05-03T11:20:27+00:00" 1989 | }, 1990 | { 1991 | "name": "sebastian/code-unit-reverse-lookup", 1992 | "version": "1.0.2", 1993 | "source": { 1994 | "type": "git", 1995 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1996 | "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" 1997 | }, 1998 | "dist": { 1999 | "type": "zip", 2000 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", 2001 | "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", 2002 | "shasum": "" 2003 | }, 2004 | "require": { 2005 | "php": ">=5.6" 2006 | }, 2007 | "require-dev": { 2008 | "phpunit/phpunit": "^8.5" 2009 | }, 2010 | "type": "library", 2011 | "extra": { 2012 | "branch-alias": { 2013 | "dev-master": "1.0.x-dev" 2014 | } 2015 | }, 2016 | "autoload": { 2017 | "classmap": [ 2018 | "src/" 2019 | ] 2020 | }, 2021 | "notification-url": "https://packagist.org/downloads/", 2022 | "license": [ 2023 | "BSD-3-Clause" 2024 | ], 2025 | "authors": [ 2026 | { 2027 | "name": "Sebastian Bergmann", 2028 | "email": "sebastian@phpunit.de" 2029 | } 2030 | ], 2031 | "description": "Looks up which function or method a line of code belongs to", 2032 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2033 | "support": { 2034 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 2035 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" 2036 | }, 2037 | "funding": [ 2038 | { 2039 | "url": "https://github.com/sebastianbergmann", 2040 | "type": "github" 2041 | } 2042 | ], 2043 | "time": "2020-11-30T08:15:22+00:00" 2044 | }, 2045 | { 2046 | "name": "sebastian/comparator", 2047 | "version": "3.0.3", 2048 | "source": { 2049 | "type": "git", 2050 | "url": "https://github.com/sebastianbergmann/comparator.git", 2051 | "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" 2052 | }, 2053 | "dist": { 2054 | "type": "zip", 2055 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", 2056 | "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", 2057 | "shasum": "" 2058 | }, 2059 | "require": { 2060 | "php": ">=7.1", 2061 | "sebastian/diff": "^3.0", 2062 | "sebastian/exporter": "^3.1" 2063 | }, 2064 | "require-dev": { 2065 | "phpunit/phpunit": "^8.5" 2066 | }, 2067 | "type": "library", 2068 | "extra": { 2069 | "branch-alias": { 2070 | "dev-master": "3.0-dev" 2071 | } 2072 | }, 2073 | "autoload": { 2074 | "classmap": [ 2075 | "src/" 2076 | ] 2077 | }, 2078 | "notification-url": "https://packagist.org/downloads/", 2079 | "license": [ 2080 | "BSD-3-Clause" 2081 | ], 2082 | "authors": [ 2083 | { 2084 | "name": "Sebastian Bergmann", 2085 | "email": "sebastian@phpunit.de" 2086 | }, 2087 | { 2088 | "name": "Jeff Welch", 2089 | "email": "whatthejeff@gmail.com" 2090 | }, 2091 | { 2092 | "name": "Volker Dusch", 2093 | "email": "github@wallbash.com" 2094 | }, 2095 | { 2096 | "name": "Bernhard Schussek", 2097 | "email": "bschussek@2bepublished.at" 2098 | } 2099 | ], 2100 | "description": "Provides the functionality to compare PHP values for equality", 2101 | "homepage": "https://github.com/sebastianbergmann/comparator", 2102 | "keywords": [ 2103 | "comparator", 2104 | "compare", 2105 | "equality" 2106 | ], 2107 | "support": { 2108 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 2109 | "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" 2110 | }, 2111 | "funding": [ 2112 | { 2113 | "url": "https://github.com/sebastianbergmann", 2114 | "type": "github" 2115 | } 2116 | ], 2117 | "time": "2020-11-30T08:04:30+00:00" 2118 | }, 2119 | { 2120 | "name": "sebastian/diff", 2121 | "version": "3.0.3", 2122 | "source": { 2123 | "type": "git", 2124 | "url": "https://github.com/sebastianbergmann/diff.git", 2125 | "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" 2126 | }, 2127 | "dist": { 2128 | "type": "zip", 2129 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", 2130 | "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", 2131 | "shasum": "" 2132 | }, 2133 | "require": { 2134 | "php": ">=7.1" 2135 | }, 2136 | "require-dev": { 2137 | "phpunit/phpunit": "^7.5 || ^8.0", 2138 | "symfony/process": "^2 || ^3.3 || ^4" 2139 | }, 2140 | "type": "library", 2141 | "extra": { 2142 | "branch-alias": { 2143 | "dev-master": "3.0-dev" 2144 | } 2145 | }, 2146 | "autoload": { 2147 | "classmap": [ 2148 | "src/" 2149 | ] 2150 | }, 2151 | "notification-url": "https://packagist.org/downloads/", 2152 | "license": [ 2153 | "BSD-3-Clause" 2154 | ], 2155 | "authors": [ 2156 | { 2157 | "name": "Sebastian Bergmann", 2158 | "email": "sebastian@phpunit.de" 2159 | }, 2160 | { 2161 | "name": "Kore Nordmann", 2162 | "email": "mail@kore-nordmann.de" 2163 | } 2164 | ], 2165 | "description": "Diff implementation", 2166 | "homepage": "https://github.com/sebastianbergmann/diff", 2167 | "keywords": [ 2168 | "diff", 2169 | "udiff", 2170 | "unidiff", 2171 | "unified diff" 2172 | ], 2173 | "support": { 2174 | "issues": "https://github.com/sebastianbergmann/diff/issues", 2175 | "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" 2176 | }, 2177 | "funding": [ 2178 | { 2179 | "url": "https://github.com/sebastianbergmann", 2180 | "type": "github" 2181 | } 2182 | ], 2183 | "time": "2020-11-30T07:59:04+00:00" 2184 | }, 2185 | { 2186 | "name": "sebastian/environment", 2187 | "version": "4.2.4", 2188 | "source": { 2189 | "type": "git", 2190 | "url": "https://github.com/sebastianbergmann/environment.git", 2191 | "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" 2192 | }, 2193 | "dist": { 2194 | "type": "zip", 2195 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", 2196 | "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", 2197 | "shasum": "" 2198 | }, 2199 | "require": { 2200 | "php": ">=7.1" 2201 | }, 2202 | "require-dev": { 2203 | "phpunit/phpunit": "^7.5" 2204 | }, 2205 | "suggest": { 2206 | "ext-posix": "*" 2207 | }, 2208 | "type": "library", 2209 | "extra": { 2210 | "branch-alias": { 2211 | "dev-master": "4.2-dev" 2212 | } 2213 | }, 2214 | "autoload": { 2215 | "classmap": [ 2216 | "src/" 2217 | ] 2218 | }, 2219 | "notification-url": "https://packagist.org/downloads/", 2220 | "license": [ 2221 | "BSD-3-Clause" 2222 | ], 2223 | "authors": [ 2224 | { 2225 | "name": "Sebastian Bergmann", 2226 | "email": "sebastian@phpunit.de" 2227 | } 2228 | ], 2229 | "description": "Provides functionality to handle HHVM/PHP environments", 2230 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2231 | "keywords": [ 2232 | "Xdebug", 2233 | "environment", 2234 | "hhvm" 2235 | ], 2236 | "support": { 2237 | "issues": "https://github.com/sebastianbergmann/environment/issues", 2238 | "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" 2239 | }, 2240 | "funding": [ 2241 | { 2242 | "url": "https://github.com/sebastianbergmann", 2243 | "type": "github" 2244 | } 2245 | ], 2246 | "time": "2020-11-30T07:53:42+00:00" 2247 | }, 2248 | { 2249 | "name": "sebastian/exporter", 2250 | "version": "3.1.4", 2251 | "source": { 2252 | "type": "git", 2253 | "url": "https://github.com/sebastianbergmann/exporter.git", 2254 | "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" 2255 | }, 2256 | "dist": { 2257 | "type": "zip", 2258 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", 2259 | "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", 2260 | "shasum": "" 2261 | }, 2262 | "require": { 2263 | "php": ">=7.0", 2264 | "sebastian/recursion-context": "^3.0" 2265 | }, 2266 | "require-dev": { 2267 | "ext-mbstring": "*", 2268 | "phpunit/phpunit": "^8.5" 2269 | }, 2270 | "type": "library", 2271 | "extra": { 2272 | "branch-alias": { 2273 | "dev-master": "3.1.x-dev" 2274 | } 2275 | }, 2276 | "autoload": { 2277 | "classmap": [ 2278 | "src/" 2279 | ] 2280 | }, 2281 | "notification-url": "https://packagist.org/downloads/", 2282 | "license": [ 2283 | "BSD-3-Clause" 2284 | ], 2285 | "authors": [ 2286 | { 2287 | "name": "Sebastian Bergmann", 2288 | "email": "sebastian@phpunit.de" 2289 | }, 2290 | { 2291 | "name": "Jeff Welch", 2292 | "email": "whatthejeff@gmail.com" 2293 | }, 2294 | { 2295 | "name": "Volker Dusch", 2296 | "email": "github@wallbash.com" 2297 | }, 2298 | { 2299 | "name": "Adam Harvey", 2300 | "email": "aharvey@php.net" 2301 | }, 2302 | { 2303 | "name": "Bernhard Schussek", 2304 | "email": "bschussek@gmail.com" 2305 | } 2306 | ], 2307 | "description": "Provides the functionality to export PHP variables for visualization", 2308 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2309 | "keywords": [ 2310 | "export", 2311 | "exporter" 2312 | ], 2313 | "support": { 2314 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 2315 | "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" 2316 | }, 2317 | "funding": [ 2318 | { 2319 | "url": "https://github.com/sebastianbergmann", 2320 | "type": "github" 2321 | } 2322 | ], 2323 | "time": "2021-11-11T13:51:24+00:00" 2324 | }, 2325 | { 2326 | "name": "sebastian/global-state", 2327 | "version": "3.0.1", 2328 | "source": { 2329 | "type": "git", 2330 | "url": "https://github.com/sebastianbergmann/global-state.git", 2331 | "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" 2332 | }, 2333 | "dist": { 2334 | "type": "zip", 2335 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", 2336 | "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", 2337 | "shasum": "" 2338 | }, 2339 | "require": { 2340 | "php": ">=7.2", 2341 | "sebastian/object-reflector": "^1.1.1", 2342 | "sebastian/recursion-context": "^3.0" 2343 | }, 2344 | "require-dev": { 2345 | "ext-dom": "*", 2346 | "phpunit/phpunit": "^8.0" 2347 | }, 2348 | "suggest": { 2349 | "ext-uopz": "*" 2350 | }, 2351 | "type": "library", 2352 | "extra": { 2353 | "branch-alias": { 2354 | "dev-master": "3.0-dev" 2355 | } 2356 | }, 2357 | "autoload": { 2358 | "classmap": [ 2359 | "src/" 2360 | ] 2361 | }, 2362 | "notification-url": "https://packagist.org/downloads/", 2363 | "license": [ 2364 | "BSD-3-Clause" 2365 | ], 2366 | "authors": [ 2367 | { 2368 | "name": "Sebastian Bergmann", 2369 | "email": "sebastian@phpunit.de" 2370 | } 2371 | ], 2372 | "description": "Snapshotting of global state", 2373 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2374 | "keywords": [ 2375 | "global state" 2376 | ], 2377 | "support": { 2378 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 2379 | "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" 2380 | }, 2381 | "funding": [ 2382 | { 2383 | "url": "https://github.com/sebastianbergmann", 2384 | "type": "github" 2385 | } 2386 | ], 2387 | "time": "2020-11-30T07:43:24+00:00" 2388 | }, 2389 | { 2390 | "name": "sebastian/object-enumerator", 2391 | "version": "3.0.4", 2392 | "source": { 2393 | "type": "git", 2394 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2395 | "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" 2396 | }, 2397 | "dist": { 2398 | "type": "zip", 2399 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", 2400 | "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", 2401 | "shasum": "" 2402 | }, 2403 | "require": { 2404 | "php": ">=7.0", 2405 | "sebastian/object-reflector": "^1.1.1", 2406 | "sebastian/recursion-context": "^3.0" 2407 | }, 2408 | "require-dev": { 2409 | "phpunit/phpunit": "^6.0" 2410 | }, 2411 | "type": "library", 2412 | "extra": { 2413 | "branch-alias": { 2414 | "dev-master": "3.0.x-dev" 2415 | } 2416 | }, 2417 | "autoload": { 2418 | "classmap": [ 2419 | "src/" 2420 | ] 2421 | }, 2422 | "notification-url": "https://packagist.org/downloads/", 2423 | "license": [ 2424 | "BSD-3-Clause" 2425 | ], 2426 | "authors": [ 2427 | { 2428 | "name": "Sebastian Bergmann", 2429 | "email": "sebastian@phpunit.de" 2430 | } 2431 | ], 2432 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2433 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2434 | "support": { 2435 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2436 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" 2437 | }, 2438 | "funding": [ 2439 | { 2440 | "url": "https://github.com/sebastianbergmann", 2441 | "type": "github" 2442 | } 2443 | ], 2444 | "time": "2020-11-30T07:40:27+00:00" 2445 | }, 2446 | { 2447 | "name": "sebastian/object-reflector", 2448 | "version": "1.1.2", 2449 | "source": { 2450 | "type": "git", 2451 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2452 | "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" 2453 | }, 2454 | "dist": { 2455 | "type": "zip", 2456 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", 2457 | "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", 2458 | "shasum": "" 2459 | }, 2460 | "require": { 2461 | "php": ">=7.0" 2462 | }, 2463 | "require-dev": { 2464 | "phpunit/phpunit": "^6.0" 2465 | }, 2466 | "type": "library", 2467 | "extra": { 2468 | "branch-alias": { 2469 | "dev-master": "1.1-dev" 2470 | } 2471 | }, 2472 | "autoload": { 2473 | "classmap": [ 2474 | "src/" 2475 | ] 2476 | }, 2477 | "notification-url": "https://packagist.org/downloads/", 2478 | "license": [ 2479 | "BSD-3-Clause" 2480 | ], 2481 | "authors": [ 2482 | { 2483 | "name": "Sebastian Bergmann", 2484 | "email": "sebastian@phpunit.de" 2485 | } 2486 | ], 2487 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2488 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2489 | "support": { 2490 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2491 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" 2492 | }, 2493 | "funding": [ 2494 | { 2495 | "url": "https://github.com/sebastianbergmann", 2496 | "type": "github" 2497 | } 2498 | ], 2499 | "time": "2020-11-30T07:37:18+00:00" 2500 | }, 2501 | { 2502 | "name": "sebastian/recursion-context", 2503 | "version": "3.0.1", 2504 | "source": { 2505 | "type": "git", 2506 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2507 | "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" 2508 | }, 2509 | "dist": { 2510 | "type": "zip", 2511 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", 2512 | "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", 2513 | "shasum": "" 2514 | }, 2515 | "require": { 2516 | "php": ">=7.0" 2517 | }, 2518 | "require-dev": { 2519 | "phpunit/phpunit": "^6.0" 2520 | }, 2521 | "type": "library", 2522 | "extra": { 2523 | "branch-alias": { 2524 | "dev-master": "3.0.x-dev" 2525 | } 2526 | }, 2527 | "autoload": { 2528 | "classmap": [ 2529 | "src/" 2530 | ] 2531 | }, 2532 | "notification-url": "https://packagist.org/downloads/", 2533 | "license": [ 2534 | "BSD-3-Clause" 2535 | ], 2536 | "authors": [ 2537 | { 2538 | "name": "Sebastian Bergmann", 2539 | "email": "sebastian@phpunit.de" 2540 | }, 2541 | { 2542 | "name": "Jeff Welch", 2543 | "email": "whatthejeff@gmail.com" 2544 | }, 2545 | { 2546 | "name": "Adam Harvey", 2547 | "email": "aharvey@php.net" 2548 | } 2549 | ], 2550 | "description": "Provides functionality to recursively process PHP variables", 2551 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2552 | "support": { 2553 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2554 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" 2555 | }, 2556 | "funding": [ 2557 | { 2558 | "url": "https://github.com/sebastianbergmann", 2559 | "type": "github" 2560 | } 2561 | ], 2562 | "time": "2020-11-30T07:34:24+00:00" 2563 | }, 2564 | { 2565 | "name": "sebastian/resource-operations", 2566 | "version": "2.0.2", 2567 | "source": { 2568 | "type": "git", 2569 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2570 | "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" 2571 | }, 2572 | "dist": { 2573 | "type": "zip", 2574 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", 2575 | "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", 2576 | "shasum": "" 2577 | }, 2578 | "require": { 2579 | "php": ">=7.1" 2580 | }, 2581 | "type": "library", 2582 | "extra": { 2583 | "branch-alias": { 2584 | "dev-master": "2.0-dev" 2585 | } 2586 | }, 2587 | "autoload": { 2588 | "classmap": [ 2589 | "src/" 2590 | ] 2591 | }, 2592 | "notification-url": "https://packagist.org/downloads/", 2593 | "license": [ 2594 | "BSD-3-Clause" 2595 | ], 2596 | "authors": [ 2597 | { 2598 | "name": "Sebastian Bergmann", 2599 | "email": "sebastian@phpunit.de" 2600 | } 2601 | ], 2602 | "description": "Provides a list of PHP built-in functions that operate on resources", 2603 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2604 | "support": { 2605 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 2606 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" 2607 | }, 2608 | "funding": [ 2609 | { 2610 | "url": "https://github.com/sebastianbergmann", 2611 | "type": "github" 2612 | } 2613 | ], 2614 | "time": "2020-11-30T07:30:19+00:00" 2615 | }, 2616 | { 2617 | "name": "sebastian/type", 2618 | "version": "1.1.4", 2619 | "source": { 2620 | "type": "git", 2621 | "url": "https://github.com/sebastianbergmann/type.git", 2622 | "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" 2623 | }, 2624 | "dist": { 2625 | "type": "zip", 2626 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", 2627 | "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", 2628 | "shasum": "" 2629 | }, 2630 | "require": { 2631 | "php": ">=7.2" 2632 | }, 2633 | "require-dev": { 2634 | "phpunit/phpunit": "^8.2" 2635 | }, 2636 | "type": "library", 2637 | "extra": { 2638 | "branch-alias": { 2639 | "dev-master": "1.1-dev" 2640 | } 2641 | }, 2642 | "autoload": { 2643 | "classmap": [ 2644 | "src/" 2645 | ] 2646 | }, 2647 | "notification-url": "https://packagist.org/downloads/", 2648 | "license": [ 2649 | "BSD-3-Clause" 2650 | ], 2651 | "authors": [ 2652 | { 2653 | "name": "Sebastian Bergmann", 2654 | "email": "sebastian@phpunit.de", 2655 | "role": "lead" 2656 | } 2657 | ], 2658 | "description": "Collection of value objects that represent the types of the PHP type system", 2659 | "homepage": "https://github.com/sebastianbergmann/type", 2660 | "support": { 2661 | "issues": "https://github.com/sebastianbergmann/type/issues", 2662 | "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" 2663 | }, 2664 | "funding": [ 2665 | { 2666 | "url": "https://github.com/sebastianbergmann", 2667 | "type": "github" 2668 | } 2669 | ], 2670 | "time": "2020-11-30T07:25:11+00:00" 2671 | }, 2672 | { 2673 | "name": "sebastian/version", 2674 | "version": "2.0.1", 2675 | "source": { 2676 | "type": "git", 2677 | "url": "https://github.com/sebastianbergmann/version.git", 2678 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2679 | }, 2680 | "dist": { 2681 | "type": "zip", 2682 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2683 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2684 | "shasum": "" 2685 | }, 2686 | "require": { 2687 | "php": ">=5.6" 2688 | }, 2689 | "type": "library", 2690 | "extra": { 2691 | "branch-alias": { 2692 | "dev-master": "2.0.x-dev" 2693 | } 2694 | }, 2695 | "autoload": { 2696 | "classmap": [ 2697 | "src/" 2698 | ] 2699 | }, 2700 | "notification-url": "https://packagist.org/downloads/", 2701 | "license": [ 2702 | "BSD-3-Clause" 2703 | ], 2704 | "authors": [ 2705 | { 2706 | "name": "Sebastian Bergmann", 2707 | "email": "sebastian@phpunit.de", 2708 | "role": "lead" 2709 | } 2710 | ], 2711 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2712 | "homepage": "https://github.com/sebastianbergmann/version", 2713 | "support": { 2714 | "issues": "https://github.com/sebastianbergmann/version/issues", 2715 | "source": "https://github.com/sebastianbergmann/version/tree/master" 2716 | }, 2717 | "time": "2016-10-03T07:35:21+00:00" 2718 | }, 2719 | { 2720 | "name": "symfony/console", 2721 | "version": "v5.4.2", 2722 | "source": { 2723 | "type": "git", 2724 | "url": "https://github.com/symfony/console.git", 2725 | "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e" 2726 | }, 2727 | "dist": { 2728 | "type": "zip", 2729 | "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e", 2730 | "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e", 2731 | "shasum": "" 2732 | }, 2733 | "require": { 2734 | "php": ">=7.2.5", 2735 | "symfony/deprecation-contracts": "^2.1|^3", 2736 | "symfony/polyfill-mbstring": "~1.0", 2737 | "symfony/polyfill-php73": "^1.9", 2738 | "symfony/polyfill-php80": "^1.16", 2739 | "symfony/service-contracts": "^1.1|^2|^3", 2740 | "symfony/string": "^5.1|^6.0" 2741 | }, 2742 | "conflict": { 2743 | "psr/log": ">=3", 2744 | "symfony/dependency-injection": "<4.4", 2745 | "symfony/dotenv": "<5.1", 2746 | "symfony/event-dispatcher": "<4.4", 2747 | "symfony/lock": "<4.4", 2748 | "symfony/process": "<4.4" 2749 | }, 2750 | "provide": { 2751 | "psr/log-implementation": "1.0|2.0" 2752 | }, 2753 | "require-dev": { 2754 | "psr/log": "^1|^2", 2755 | "symfony/config": "^4.4|^5.0|^6.0", 2756 | "symfony/dependency-injection": "^4.4|^5.0|^6.0", 2757 | "symfony/event-dispatcher": "^4.4|^5.0|^6.0", 2758 | "symfony/lock": "^4.4|^5.0|^6.0", 2759 | "symfony/process": "^4.4|^5.0|^6.0", 2760 | "symfony/var-dumper": "^4.4|^5.0|^6.0" 2761 | }, 2762 | "suggest": { 2763 | "psr/log": "For using the console logger", 2764 | "symfony/event-dispatcher": "", 2765 | "symfony/lock": "", 2766 | "symfony/process": "" 2767 | }, 2768 | "type": "library", 2769 | "autoload": { 2770 | "psr-4": { 2771 | "Symfony\\Component\\Console\\": "" 2772 | }, 2773 | "exclude-from-classmap": [ 2774 | "/Tests/" 2775 | ] 2776 | }, 2777 | "notification-url": "https://packagist.org/downloads/", 2778 | "license": [ 2779 | "MIT" 2780 | ], 2781 | "authors": [ 2782 | { 2783 | "name": "Fabien Potencier", 2784 | "email": "fabien@symfony.com" 2785 | }, 2786 | { 2787 | "name": "Symfony Community", 2788 | "homepage": "https://symfony.com/contributors" 2789 | } 2790 | ], 2791 | "description": "Eases the creation of beautiful and testable command line interfaces", 2792 | "homepage": "https://symfony.com", 2793 | "keywords": [ 2794 | "cli", 2795 | "command line", 2796 | "console", 2797 | "terminal" 2798 | ], 2799 | "support": { 2800 | "source": "https://github.com/symfony/console/tree/v5.4.2" 2801 | }, 2802 | "funding": [ 2803 | { 2804 | "url": "https://symfony.com/sponsor", 2805 | "type": "custom" 2806 | }, 2807 | { 2808 | "url": "https://github.com/fabpot", 2809 | "type": "github" 2810 | }, 2811 | { 2812 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2813 | "type": "tidelift" 2814 | } 2815 | ], 2816 | "time": "2021-12-20T16:11:12+00:00" 2817 | }, 2818 | { 2819 | "name": "symfony/deprecation-contracts", 2820 | "version": "v2.5.0", 2821 | "source": { 2822 | "type": "git", 2823 | "url": "https://github.com/symfony/deprecation-contracts.git", 2824 | "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" 2825 | }, 2826 | "dist": { 2827 | "type": "zip", 2828 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", 2829 | "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", 2830 | "shasum": "" 2831 | }, 2832 | "require": { 2833 | "php": ">=7.1" 2834 | }, 2835 | "type": "library", 2836 | "extra": { 2837 | "branch-alias": { 2838 | "dev-main": "2.5-dev" 2839 | }, 2840 | "thanks": { 2841 | "name": "symfony/contracts", 2842 | "url": "https://github.com/symfony/contracts" 2843 | } 2844 | }, 2845 | "autoload": { 2846 | "files": [ 2847 | "function.php" 2848 | ] 2849 | }, 2850 | "notification-url": "https://packagist.org/downloads/", 2851 | "license": [ 2852 | "MIT" 2853 | ], 2854 | "authors": [ 2855 | { 2856 | "name": "Nicolas Grekas", 2857 | "email": "p@tchwork.com" 2858 | }, 2859 | { 2860 | "name": "Symfony Community", 2861 | "homepage": "https://symfony.com/contributors" 2862 | } 2863 | ], 2864 | "description": "A generic function and convention to trigger deprecation notices", 2865 | "homepage": "https://symfony.com", 2866 | "support": { 2867 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" 2868 | }, 2869 | "funding": [ 2870 | { 2871 | "url": "https://symfony.com/sponsor", 2872 | "type": "custom" 2873 | }, 2874 | { 2875 | "url": "https://github.com/fabpot", 2876 | "type": "github" 2877 | }, 2878 | { 2879 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2880 | "type": "tidelift" 2881 | } 2882 | ], 2883 | "time": "2021-07-12T14:48:14+00:00" 2884 | }, 2885 | { 2886 | "name": "symfony/event-dispatcher", 2887 | "version": "v5.4.0", 2888 | "source": { 2889 | "type": "git", 2890 | "url": "https://github.com/symfony/event-dispatcher.git", 2891 | "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb" 2892 | }, 2893 | "dist": { 2894 | "type": "zip", 2895 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb", 2896 | "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb", 2897 | "shasum": "" 2898 | }, 2899 | "require": { 2900 | "php": ">=7.2.5", 2901 | "symfony/deprecation-contracts": "^2.1|^3", 2902 | "symfony/event-dispatcher-contracts": "^2|^3", 2903 | "symfony/polyfill-php80": "^1.16" 2904 | }, 2905 | "conflict": { 2906 | "symfony/dependency-injection": "<4.4" 2907 | }, 2908 | "provide": { 2909 | "psr/event-dispatcher-implementation": "1.0", 2910 | "symfony/event-dispatcher-implementation": "2.0" 2911 | }, 2912 | "require-dev": { 2913 | "psr/log": "^1|^2|^3", 2914 | "symfony/config": "^4.4|^5.0|^6.0", 2915 | "symfony/dependency-injection": "^4.4|^5.0|^6.0", 2916 | "symfony/error-handler": "^4.4|^5.0|^6.0", 2917 | "symfony/expression-language": "^4.4|^5.0|^6.0", 2918 | "symfony/http-foundation": "^4.4|^5.0|^6.0", 2919 | "symfony/service-contracts": "^1.1|^2|^3", 2920 | "symfony/stopwatch": "^4.4|^5.0|^6.0" 2921 | }, 2922 | "suggest": { 2923 | "symfony/dependency-injection": "", 2924 | "symfony/http-kernel": "" 2925 | }, 2926 | "type": "library", 2927 | "autoload": { 2928 | "psr-4": { 2929 | "Symfony\\Component\\EventDispatcher\\": "" 2930 | }, 2931 | "exclude-from-classmap": [ 2932 | "/Tests/" 2933 | ] 2934 | }, 2935 | "notification-url": "https://packagist.org/downloads/", 2936 | "license": [ 2937 | "MIT" 2938 | ], 2939 | "authors": [ 2940 | { 2941 | "name": "Fabien Potencier", 2942 | "email": "fabien@symfony.com" 2943 | }, 2944 | { 2945 | "name": "Symfony Community", 2946 | "homepage": "https://symfony.com/contributors" 2947 | } 2948 | ], 2949 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 2950 | "homepage": "https://symfony.com", 2951 | "support": { 2952 | "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.0" 2953 | }, 2954 | "funding": [ 2955 | { 2956 | "url": "https://symfony.com/sponsor", 2957 | "type": "custom" 2958 | }, 2959 | { 2960 | "url": "https://github.com/fabpot", 2961 | "type": "github" 2962 | }, 2963 | { 2964 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2965 | "type": "tidelift" 2966 | } 2967 | ], 2968 | "time": "2021-11-23T10:19:22+00:00" 2969 | }, 2970 | { 2971 | "name": "symfony/event-dispatcher-contracts", 2972 | "version": "v2.5.0", 2973 | "source": { 2974 | "type": "git", 2975 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 2976 | "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" 2977 | }, 2978 | "dist": { 2979 | "type": "zip", 2980 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", 2981 | "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", 2982 | "shasum": "" 2983 | }, 2984 | "require": { 2985 | "php": ">=7.2.5", 2986 | "psr/event-dispatcher": "^1" 2987 | }, 2988 | "suggest": { 2989 | "symfony/event-dispatcher-implementation": "" 2990 | }, 2991 | "type": "library", 2992 | "extra": { 2993 | "branch-alias": { 2994 | "dev-main": "2.5-dev" 2995 | }, 2996 | "thanks": { 2997 | "name": "symfony/contracts", 2998 | "url": "https://github.com/symfony/contracts" 2999 | } 3000 | }, 3001 | "autoload": { 3002 | "psr-4": { 3003 | "Symfony\\Contracts\\EventDispatcher\\": "" 3004 | } 3005 | }, 3006 | "notification-url": "https://packagist.org/downloads/", 3007 | "license": [ 3008 | "MIT" 3009 | ], 3010 | "authors": [ 3011 | { 3012 | "name": "Nicolas Grekas", 3013 | "email": "p@tchwork.com" 3014 | }, 3015 | { 3016 | "name": "Symfony Community", 3017 | "homepage": "https://symfony.com/contributors" 3018 | } 3019 | ], 3020 | "description": "Generic abstractions related to dispatching event", 3021 | "homepage": "https://symfony.com", 3022 | "keywords": [ 3023 | "abstractions", 3024 | "contracts", 3025 | "decoupling", 3026 | "interfaces", 3027 | "interoperability", 3028 | "standards" 3029 | ], 3030 | "support": { 3031 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" 3032 | }, 3033 | "funding": [ 3034 | { 3035 | "url": "https://symfony.com/sponsor", 3036 | "type": "custom" 3037 | }, 3038 | { 3039 | "url": "https://github.com/fabpot", 3040 | "type": "github" 3041 | }, 3042 | { 3043 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3044 | "type": "tidelift" 3045 | } 3046 | ], 3047 | "time": "2021-07-12T14:48:14+00:00" 3048 | }, 3049 | { 3050 | "name": "symfony/filesystem", 3051 | "version": "v5.4.0", 3052 | "source": { 3053 | "type": "git", 3054 | "url": "https://github.com/symfony/filesystem.git", 3055 | "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" 3056 | }, 3057 | "dist": { 3058 | "type": "zip", 3059 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", 3060 | "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", 3061 | "shasum": "" 3062 | }, 3063 | "require": { 3064 | "php": ">=7.2.5", 3065 | "symfony/polyfill-ctype": "~1.8", 3066 | "symfony/polyfill-mbstring": "~1.8", 3067 | "symfony/polyfill-php80": "^1.16" 3068 | }, 3069 | "type": "library", 3070 | "autoload": { 3071 | "psr-4": { 3072 | "Symfony\\Component\\Filesystem\\": "" 3073 | }, 3074 | "exclude-from-classmap": [ 3075 | "/Tests/" 3076 | ] 3077 | }, 3078 | "notification-url": "https://packagist.org/downloads/", 3079 | "license": [ 3080 | "MIT" 3081 | ], 3082 | "authors": [ 3083 | { 3084 | "name": "Fabien Potencier", 3085 | "email": "fabien@symfony.com" 3086 | }, 3087 | { 3088 | "name": "Symfony Community", 3089 | "homepage": "https://symfony.com/contributors" 3090 | } 3091 | ], 3092 | "description": "Provides basic utilities for the filesystem", 3093 | "homepage": "https://symfony.com", 3094 | "support": { 3095 | "source": "https://github.com/symfony/filesystem/tree/v5.4.0" 3096 | }, 3097 | "funding": [ 3098 | { 3099 | "url": "https://symfony.com/sponsor", 3100 | "type": "custom" 3101 | }, 3102 | { 3103 | "url": "https://github.com/fabpot", 3104 | "type": "github" 3105 | }, 3106 | { 3107 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3108 | "type": "tidelift" 3109 | } 3110 | ], 3111 | "time": "2021-10-28T13:39:27+00:00" 3112 | }, 3113 | { 3114 | "name": "symfony/finder", 3115 | "version": "v5.4.2", 3116 | "source": { 3117 | "type": "git", 3118 | "url": "https://github.com/symfony/finder.git", 3119 | "reference": "e77046c252be48c48a40816187ed527703c8f76c" 3120 | }, 3121 | "dist": { 3122 | "type": "zip", 3123 | "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c", 3124 | "reference": "e77046c252be48c48a40816187ed527703c8f76c", 3125 | "shasum": "" 3126 | }, 3127 | "require": { 3128 | "php": ">=7.2.5", 3129 | "symfony/deprecation-contracts": "^2.1|^3", 3130 | "symfony/polyfill-php80": "^1.16" 3131 | }, 3132 | "type": "library", 3133 | "autoload": { 3134 | "psr-4": { 3135 | "Symfony\\Component\\Finder\\": "" 3136 | }, 3137 | "exclude-from-classmap": [ 3138 | "/Tests/" 3139 | ] 3140 | }, 3141 | "notification-url": "https://packagist.org/downloads/", 3142 | "license": [ 3143 | "MIT" 3144 | ], 3145 | "authors": [ 3146 | { 3147 | "name": "Fabien Potencier", 3148 | "email": "fabien@symfony.com" 3149 | }, 3150 | { 3151 | "name": "Symfony Community", 3152 | "homepage": "https://symfony.com/contributors" 3153 | } 3154 | ], 3155 | "description": "Finds files and directories via an intuitive fluent interface", 3156 | "homepage": "https://symfony.com", 3157 | "support": { 3158 | "source": "https://github.com/symfony/finder/tree/v5.4.2" 3159 | }, 3160 | "funding": [ 3161 | { 3162 | "url": "https://symfony.com/sponsor", 3163 | "type": "custom" 3164 | }, 3165 | { 3166 | "url": "https://github.com/fabpot", 3167 | "type": "github" 3168 | }, 3169 | { 3170 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3171 | "type": "tidelift" 3172 | } 3173 | ], 3174 | "time": "2021-12-15T11:06:13+00:00" 3175 | }, 3176 | { 3177 | "name": "symfony/options-resolver", 3178 | "version": "v5.4.0", 3179 | "source": { 3180 | "type": "git", 3181 | "url": "https://github.com/symfony/options-resolver.git", 3182 | "reference": "b0fb78576487af19c500aaddb269fd36701d4847" 3183 | }, 3184 | "dist": { 3185 | "type": "zip", 3186 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b0fb78576487af19c500aaddb269fd36701d4847", 3187 | "reference": "b0fb78576487af19c500aaddb269fd36701d4847", 3188 | "shasum": "" 3189 | }, 3190 | "require": { 3191 | "php": ">=7.2.5", 3192 | "symfony/deprecation-contracts": "^2.1|^3", 3193 | "symfony/polyfill-php73": "~1.0", 3194 | "symfony/polyfill-php80": "^1.16" 3195 | }, 3196 | "type": "library", 3197 | "autoload": { 3198 | "psr-4": { 3199 | "Symfony\\Component\\OptionsResolver\\": "" 3200 | }, 3201 | "exclude-from-classmap": [ 3202 | "/Tests/" 3203 | ] 3204 | }, 3205 | "notification-url": "https://packagist.org/downloads/", 3206 | "license": [ 3207 | "MIT" 3208 | ], 3209 | "authors": [ 3210 | { 3211 | "name": "Fabien Potencier", 3212 | "email": "fabien@symfony.com" 3213 | }, 3214 | { 3215 | "name": "Symfony Community", 3216 | "homepage": "https://symfony.com/contributors" 3217 | } 3218 | ], 3219 | "description": "Provides an improved replacement for the array_replace PHP function", 3220 | "homepage": "https://symfony.com", 3221 | "keywords": [ 3222 | "config", 3223 | "configuration", 3224 | "options" 3225 | ], 3226 | "support": { 3227 | "source": "https://github.com/symfony/options-resolver/tree/v5.4.0" 3228 | }, 3229 | "funding": [ 3230 | { 3231 | "url": "https://symfony.com/sponsor", 3232 | "type": "custom" 3233 | }, 3234 | { 3235 | "url": "https://github.com/fabpot", 3236 | "type": "github" 3237 | }, 3238 | { 3239 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3240 | "type": "tidelift" 3241 | } 3242 | ], 3243 | "time": "2021-11-23T10:19:22+00:00" 3244 | }, 3245 | { 3246 | "name": "symfony/polyfill-ctype", 3247 | "version": "v1.24.0", 3248 | "source": { 3249 | "type": "git", 3250 | "url": "https://github.com/symfony/polyfill-ctype.git", 3251 | "reference": "30885182c981ab175d4d034db0f6f469898070ab" 3252 | }, 3253 | "dist": { 3254 | "type": "zip", 3255 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", 3256 | "reference": "30885182c981ab175d4d034db0f6f469898070ab", 3257 | "shasum": "" 3258 | }, 3259 | "require": { 3260 | "php": ">=7.1" 3261 | }, 3262 | "provide": { 3263 | "ext-ctype": "*" 3264 | }, 3265 | "suggest": { 3266 | "ext-ctype": "For best performance" 3267 | }, 3268 | "type": "library", 3269 | "extra": { 3270 | "branch-alias": { 3271 | "dev-main": "1.23-dev" 3272 | }, 3273 | "thanks": { 3274 | "name": "symfony/polyfill", 3275 | "url": "https://github.com/symfony/polyfill" 3276 | } 3277 | }, 3278 | "autoload": { 3279 | "psr-4": { 3280 | "Symfony\\Polyfill\\Ctype\\": "" 3281 | }, 3282 | "files": [ 3283 | "bootstrap.php" 3284 | ] 3285 | }, 3286 | "notification-url": "https://packagist.org/downloads/", 3287 | "license": [ 3288 | "MIT" 3289 | ], 3290 | "authors": [ 3291 | { 3292 | "name": "Gert de Pagter", 3293 | "email": "BackEndTea@gmail.com" 3294 | }, 3295 | { 3296 | "name": "Symfony Community", 3297 | "homepage": "https://symfony.com/contributors" 3298 | } 3299 | ], 3300 | "description": "Symfony polyfill for ctype functions", 3301 | "homepage": "https://symfony.com", 3302 | "keywords": [ 3303 | "compatibility", 3304 | "ctype", 3305 | "polyfill", 3306 | "portable" 3307 | ], 3308 | "support": { 3309 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" 3310 | }, 3311 | "funding": [ 3312 | { 3313 | "url": "https://symfony.com/sponsor", 3314 | "type": "custom" 3315 | }, 3316 | { 3317 | "url": "https://github.com/fabpot", 3318 | "type": "github" 3319 | }, 3320 | { 3321 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3322 | "type": "tidelift" 3323 | } 3324 | ], 3325 | "time": "2021-10-20T20:35:02+00:00" 3326 | }, 3327 | { 3328 | "name": "symfony/polyfill-intl-grapheme", 3329 | "version": "v1.24.0", 3330 | "source": { 3331 | "type": "git", 3332 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 3333 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" 3334 | }, 3335 | "dist": { 3336 | "type": "zip", 3337 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", 3338 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", 3339 | "shasum": "" 3340 | }, 3341 | "require": { 3342 | "php": ">=7.1" 3343 | }, 3344 | "suggest": { 3345 | "ext-intl": "For best performance" 3346 | }, 3347 | "type": "library", 3348 | "extra": { 3349 | "branch-alias": { 3350 | "dev-main": "1.23-dev" 3351 | }, 3352 | "thanks": { 3353 | "name": "symfony/polyfill", 3354 | "url": "https://github.com/symfony/polyfill" 3355 | } 3356 | }, 3357 | "autoload": { 3358 | "psr-4": { 3359 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 3360 | }, 3361 | "files": [ 3362 | "bootstrap.php" 3363 | ] 3364 | }, 3365 | "notification-url": "https://packagist.org/downloads/", 3366 | "license": [ 3367 | "MIT" 3368 | ], 3369 | "authors": [ 3370 | { 3371 | "name": "Nicolas Grekas", 3372 | "email": "p@tchwork.com" 3373 | }, 3374 | { 3375 | "name": "Symfony Community", 3376 | "homepage": "https://symfony.com/contributors" 3377 | } 3378 | ], 3379 | "description": "Symfony polyfill for intl's grapheme_* functions", 3380 | "homepage": "https://symfony.com", 3381 | "keywords": [ 3382 | "compatibility", 3383 | "grapheme", 3384 | "intl", 3385 | "polyfill", 3386 | "portable", 3387 | "shim" 3388 | ], 3389 | "support": { 3390 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" 3391 | }, 3392 | "funding": [ 3393 | { 3394 | "url": "https://symfony.com/sponsor", 3395 | "type": "custom" 3396 | }, 3397 | { 3398 | "url": "https://github.com/fabpot", 3399 | "type": "github" 3400 | }, 3401 | { 3402 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3403 | "type": "tidelift" 3404 | } 3405 | ], 3406 | "time": "2021-11-23T21:10:46+00:00" 3407 | }, 3408 | { 3409 | "name": "symfony/polyfill-intl-normalizer", 3410 | "version": "v1.24.0", 3411 | "source": { 3412 | "type": "git", 3413 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 3414 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" 3415 | }, 3416 | "dist": { 3417 | "type": "zip", 3418 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", 3419 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", 3420 | "shasum": "" 3421 | }, 3422 | "require": { 3423 | "php": ">=7.1" 3424 | }, 3425 | "suggest": { 3426 | "ext-intl": "For best performance" 3427 | }, 3428 | "type": "library", 3429 | "extra": { 3430 | "branch-alias": { 3431 | "dev-main": "1.23-dev" 3432 | }, 3433 | "thanks": { 3434 | "name": "symfony/polyfill", 3435 | "url": "https://github.com/symfony/polyfill" 3436 | } 3437 | }, 3438 | "autoload": { 3439 | "psr-4": { 3440 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 3441 | }, 3442 | "files": [ 3443 | "bootstrap.php" 3444 | ], 3445 | "classmap": [ 3446 | "Resources/stubs" 3447 | ] 3448 | }, 3449 | "notification-url": "https://packagist.org/downloads/", 3450 | "license": [ 3451 | "MIT" 3452 | ], 3453 | "authors": [ 3454 | { 3455 | "name": "Nicolas Grekas", 3456 | "email": "p@tchwork.com" 3457 | }, 3458 | { 3459 | "name": "Symfony Community", 3460 | "homepage": "https://symfony.com/contributors" 3461 | } 3462 | ], 3463 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 3464 | "homepage": "https://symfony.com", 3465 | "keywords": [ 3466 | "compatibility", 3467 | "intl", 3468 | "normalizer", 3469 | "polyfill", 3470 | "portable", 3471 | "shim" 3472 | ], 3473 | "support": { 3474 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" 3475 | }, 3476 | "funding": [ 3477 | { 3478 | "url": "https://symfony.com/sponsor", 3479 | "type": "custom" 3480 | }, 3481 | { 3482 | "url": "https://github.com/fabpot", 3483 | "type": "github" 3484 | }, 3485 | { 3486 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3487 | "type": "tidelift" 3488 | } 3489 | ], 3490 | "time": "2021-02-19T12:13:01+00:00" 3491 | }, 3492 | { 3493 | "name": "symfony/polyfill-mbstring", 3494 | "version": "v1.24.0", 3495 | "source": { 3496 | "type": "git", 3497 | "url": "https://github.com/symfony/polyfill-mbstring.git", 3498 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" 3499 | }, 3500 | "dist": { 3501 | "type": "zip", 3502 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", 3503 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", 3504 | "shasum": "" 3505 | }, 3506 | "require": { 3507 | "php": ">=7.1" 3508 | }, 3509 | "provide": { 3510 | "ext-mbstring": "*" 3511 | }, 3512 | "suggest": { 3513 | "ext-mbstring": "For best performance" 3514 | }, 3515 | "type": "library", 3516 | "extra": { 3517 | "branch-alias": { 3518 | "dev-main": "1.23-dev" 3519 | }, 3520 | "thanks": { 3521 | "name": "symfony/polyfill", 3522 | "url": "https://github.com/symfony/polyfill" 3523 | } 3524 | }, 3525 | "autoload": { 3526 | "psr-4": { 3527 | "Symfony\\Polyfill\\Mbstring\\": "" 3528 | }, 3529 | "files": [ 3530 | "bootstrap.php" 3531 | ] 3532 | }, 3533 | "notification-url": "https://packagist.org/downloads/", 3534 | "license": [ 3535 | "MIT" 3536 | ], 3537 | "authors": [ 3538 | { 3539 | "name": "Nicolas Grekas", 3540 | "email": "p@tchwork.com" 3541 | }, 3542 | { 3543 | "name": "Symfony Community", 3544 | "homepage": "https://symfony.com/contributors" 3545 | } 3546 | ], 3547 | "description": "Symfony polyfill for the Mbstring extension", 3548 | "homepage": "https://symfony.com", 3549 | "keywords": [ 3550 | "compatibility", 3551 | "mbstring", 3552 | "polyfill", 3553 | "portable", 3554 | "shim" 3555 | ], 3556 | "support": { 3557 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" 3558 | }, 3559 | "funding": [ 3560 | { 3561 | "url": "https://symfony.com/sponsor", 3562 | "type": "custom" 3563 | }, 3564 | { 3565 | "url": "https://github.com/fabpot", 3566 | "type": "github" 3567 | }, 3568 | { 3569 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3570 | "type": "tidelift" 3571 | } 3572 | ], 3573 | "time": "2021-11-30T18:21:41+00:00" 3574 | }, 3575 | { 3576 | "name": "symfony/polyfill-php73", 3577 | "version": "v1.24.0", 3578 | "source": { 3579 | "type": "git", 3580 | "url": "https://github.com/symfony/polyfill-php73.git", 3581 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" 3582 | }, 3583 | "dist": { 3584 | "type": "zip", 3585 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", 3586 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", 3587 | "shasum": "" 3588 | }, 3589 | "require": { 3590 | "php": ">=7.1" 3591 | }, 3592 | "type": "library", 3593 | "extra": { 3594 | "branch-alias": { 3595 | "dev-main": "1.23-dev" 3596 | }, 3597 | "thanks": { 3598 | "name": "symfony/polyfill", 3599 | "url": "https://github.com/symfony/polyfill" 3600 | } 3601 | }, 3602 | "autoload": { 3603 | "psr-4": { 3604 | "Symfony\\Polyfill\\Php73\\": "" 3605 | }, 3606 | "files": [ 3607 | "bootstrap.php" 3608 | ], 3609 | "classmap": [ 3610 | "Resources/stubs" 3611 | ] 3612 | }, 3613 | "notification-url": "https://packagist.org/downloads/", 3614 | "license": [ 3615 | "MIT" 3616 | ], 3617 | "authors": [ 3618 | { 3619 | "name": "Nicolas Grekas", 3620 | "email": "p@tchwork.com" 3621 | }, 3622 | { 3623 | "name": "Symfony Community", 3624 | "homepage": "https://symfony.com/contributors" 3625 | } 3626 | ], 3627 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 3628 | "homepage": "https://symfony.com", 3629 | "keywords": [ 3630 | "compatibility", 3631 | "polyfill", 3632 | "portable", 3633 | "shim" 3634 | ], 3635 | "support": { 3636 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" 3637 | }, 3638 | "funding": [ 3639 | { 3640 | "url": "https://symfony.com/sponsor", 3641 | "type": "custom" 3642 | }, 3643 | { 3644 | "url": "https://github.com/fabpot", 3645 | "type": "github" 3646 | }, 3647 | { 3648 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3649 | "type": "tidelift" 3650 | } 3651 | ], 3652 | "time": "2021-06-05T21:20:04+00:00" 3653 | }, 3654 | { 3655 | "name": "symfony/polyfill-php80", 3656 | "version": "v1.24.0", 3657 | "source": { 3658 | "type": "git", 3659 | "url": "https://github.com/symfony/polyfill-php80.git", 3660 | "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" 3661 | }, 3662 | "dist": { 3663 | "type": "zip", 3664 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", 3665 | "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", 3666 | "shasum": "" 3667 | }, 3668 | "require": { 3669 | "php": ">=7.1" 3670 | }, 3671 | "type": "library", 3672 | "extra": { 3673 | "branch-alias": { 3674 | "dev-main": "1.23-dev" 3675 | }, 3676 | "thanks": { 3677 | "name": "symfony/polyfill", 3678 | "url": "https://github.com/symfony/polyfill" 3679 | } 3680 | }, 3681 | "autoload": { 3682 | "psr-4": { 3683 | "Symfony\\Polyfill\\Php80\\": "" 3684 | }, 3685 | "files": [ 3686 | "bootstrap.php" 3687 | ], 3688 | "classmap": [ 3689 | "Resources/stubs" 3690 | ] 3691 | }, 3692 | "notification-url": "https://packagist.org/downloads/", 3693 | "license": [ 3694 | "MIT" 3695 | ], 3696 | "authors": [ 3697 | { 3698 | "name": "Ion Bazan", 3699 | "email": "ion.bazan@gmail.com" 3700 | }, 3701 | { 3702 | "name": "Nicolas Grekas", 3703 | "email": "p@tchwork.com" 3704 | }, 3705 | { 3706 | "name": "Symfony Community", 3707 | "homepage": "https://symfony.com/contributors" 3708 | } 3709 | ], 3710 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 3711 | "homepage": "https://symfony.com", 3712 | "keywords": [ 3713 | "compatibility", 3714 | "polyfill", 3715 | "portable", 3716 | "shim" 3717 | ], 3718 | "support": { 3719 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" 3720 | }, 3721 | "funding": [ 3722 | { 3723 | "url": "https://symfony.com/sponsor", 3724 | "type": "custom" 3725 | }, 3726 | { 3727 | "url": "https://github.com/fabpot", 3728 | "type": "github" 3729 | }, 3730 | { 3731 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3732 | "type": "tidelift" 3733 | } 3734 | ], 3735 | "time": "2021-09-13T13:58:33+00:00" 3736 | }, 3737 | { 3738 | "name": "symfony/polyfill-php81", 3739 | "version": "v1.24.0", 3740 | "source": { 3741 | "type": "git", 3742 | "url": "https://github.com/symfony/polyfill-php81.git", 3743 | "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" 3744 | }, 3745 | "dist": { 3746 | "type": "zip", 3747 | "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", 3748 | "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", 3749 | "shasum": "" 3750 | }, 3751 | "require": { 3752 | "php": ">=7.1" 3753 | }, 3754 | "type": "library", 3755 | "extra": { 3756 | "branch-alias": { 3757 | "dev-main": "1.23-dev" 3758 | }, 3759 | "thanks": { 3760 | "name": "symfony/polyfill", 3761 | "url": "https://github.com/symfony/polyfill" 3762 | } 3763 | }, 3764 | "autoload": { 3765 | "psr-4": { 3766 | "Symfony\\Polyfill\\Php81\\": "" 3767 | }, 3768 | "files": [ 3769 | "bootstrap.php" 3770 | ], 3771 | "classmap": [ 3772 | "Resources/stubs" 3773 | ] 3774 | }, 3775 | "notification-url": "https://packagist.org/downloads/", 3776 | "license": [ 3777 | "MIT" 3778 | ], 3779 | "authors": [ 3780 | { 3781 | "name": "Nicolas Grekas", 3782 | "email": "p@tchwork.com" 3783 | }, 3784 | { 3785 | "name": "Symfony Community", 3786 | "homepage": "https://symfony.com/contributors" 3787 | } 3788 | ], 3789 | "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", 3790 | "homepage": "https://symfony.com", 3791 | "keywords": [ 3792 | "compatibility", 3793 | "polyfill", 3794 | "portable", 3795 | "shim" 3796 | ], 3797 | "support": { 3798 | "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" 3799 | }, 3800 | "funding": [ 3801 | { 3802 | "url": "https://symfony.com/sponsor", 3803 | "type": "custom" 3804 | }, 3805 | { 3806 | "url": "https://github.com/fabpot", 3807 | "type": "github" 3808 | }, 3809 | { 3810 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3811 | "type": "tidelift" 3812 | } 3813 | ], 3814 | "time": "2021-09-13T13:58:11+00:00" 3815 | }, 3816 | { 3817 | "name": "symfony/process", 3818 | "version": "v5.4.2", 3819 | "source": { 3820 | "type": "git", 3821 | "url": "https://github.com/symfony/process.git", 3822 | "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4" 3823 | }, 3824 | "dist": { 3825 | "type": "zip", 3826 | "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", 3827 | "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", 3828 | "shasum": "" 3829 | }, 3830 | "require": { 3831 | "php": ">=7.2.5", 3832 | "symfony/polyfill-php80": "^1.16" 3833 | }, 3834 | "type": "library", 3835 | "autoload": { 3836 | "psr-4": { 3837 | "Symfony\\Component\\Process\\": "" 3838 | }, 3839 | "exclude-from-classmap": [ 3840 | "/Tests/" 3841 | ] 3842 | }, 3843 | "notification-url": "https://packagist.org/downloads/", 3844 | "license": [ 3845 | "MIT" 3846 | ], 3847 | "authors": [ 3848 | { 3849 | "name": "Fabien Potencier", 3850 | "email": "fabien@symfony.com" 3851 | }, 3852 | { 3853 | "name": "Symfony Community", 3854 | "homepage": "https://symfony.com/contributors" 3855 | } 3856 | ], 3857 | "description": "Executes commands in sub-processes", 3858 | "homepage": "https://symfony.com", 3859 | "support": { 3860 | "source": "https://github.com/symfony/process/tree/v5.4.2" 3861 | }, 3862 | "funding": [ 3863 | { 3864 | "url": "https://symfony.com/sponsor", 3865 | "type": "custom" 3866 | }, 3867 | { 3868 | "url": "https://github.com/fabpot", 3869 | "type": "github" 3870 | }, 3871 | { 3872 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3873 | "type": "tidelift" 3874 | } 3875 | ], 3876 | "time": "2021-12-27T21:01:00+00:00" 3877 | }, 3878 | { 3879 | "name": "symfony/service-contracts", 3880 | "version": "v2.5.0", 3881 | "source": { 3882 | "type": "git", 3883 | "url": "https://github.com/symfony/service-contracts.git", 3884 | "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" 3885 | }, 3886 | "dist": { 3887 | "type": "zip", 3888 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", 3889 | "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", 3890 | "shasum": "" 3891 | }, 3892 | "require": { 3893 | "php": ">=7.2.5", 3894 | "psr/container": "^1.1", 3895 | "symfony/deprecation-contracts": "^2.1" 3896 | }, 3897 | "conflict": { 3898 | "ext-psr": "<1.1|>=2" 3899 | }, 3900 | "suggest": { 3901 | "symfony/service-implementation": "" 3902 | }, 3903 | "type": "library", 3904 | "extra": { 3905 | "branch-alias": { 3906 | "dev-main": "2.5-dev" 3907 | }, 3908 | "thanks": { 3909 | "name": "symfony/contracts", 3910 | "url": "https://github.com/symfony/contracts" 3911 | } 3912 | }, 3913 | "autoload": { 3914 | "psr-4": { 3915 | "Symfony\\Contracts\\Service\\": "" 3916 | } 3917 | }, 3918 | "notification-url": "https://packagist.org/downloads/", 3919 | "license": [ 3920 | "MIT" 3921 | ], 3922 | "authors": [ 3923 | { 3924 | "name": "Nicolas Grekas", 3925 | "email": "p@tchwork.com" 3926 | }, 3927 | { 3928 | "name": "Symfony Community", 3929 | "homepage": "https://symfony.com/contributors" 3930 | } 3931 | ], 3932 | "description": "Generic abstractions related to writing services", 3933 | "homepage": "https://symfony.com", 3934 | "keywords": [ 3935 | "abstractions", 3936 | "contracts", 3937 | "decoupling", 3938 | "interfaces", 3939 | "interoperability", 3940 | "standards" 3941 | ], 3942 | "support": { 3943 | "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" 3944 | }, 3945 | "funding": [ 3946 | { 3947 | "url": "https://symfony.com/sponsor", 3948 | "type": "custom" 3949 | }, 3950 | { 3951 | "url": "https://github.com/fabpot", 3952 | "type": "github" 3953 | }, 3954 | { 3955 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3956 | "type": "tidelift" 3957 | } 3958 | ], 3959 | "time": "2021-11-04T16:48:04+00:00" 3960 | }, 3961 | { 3962 | "name": "symfony/stopwatch", 3963 | "version": "v5.4.0", 3964 | "source": { 3965 | "type": "git", 3966 | "url": "https://github.com/symfony/stopwatch.git", 3967 | "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe" 3968 | }, 3969 | "dist": { 3970 | "type": "zip", 3971 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe", 3972 | "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe", 3973 | "shasum": "" 3974 | }, 3975 | "require": { 3976 | "php": ">=7.2.5", 3977 | "symfony/service-contracts": "^1|^2|^3" 3978 | }, 3979 | "type": "library", 3980 | "autoload": { 3981 | "psr-4": { 3982 | "Symfony\\Component\\Stopwatch\\": "" 3983 | }, 3984 | "exclude-from-classmap": [ 3985 | "/Tests/" 3986 | ] 3987 | }, 3988 | "notification-url": "https://packagist.org/downloads/", 3989 | "license": [ 3990 | "MIT" 3991 | ], 3992 | "authors": [ 3993 | { 3994 | "name": "Fabien Potencier", 3995 | "email": "fabien@symfony.com" 3996 | }, 3997 | { 3998 | "name": "Symfony Community", 3999 | "homepage": "https://symfony.com/contributors" 4000 | } 4001 | ], 4002 | "description": "Provides a way to profile code", 4003 | "homepage": "https://symfony.com", 4004 | "support": { 4005 | "source": "https://github.com/symfony/stopwatch/tree/v5.4.0" 4006 | }, 4007 | "funding": [ 4008 | { 4009 | "url": "https://symfony.com/sponsor", 4010 | "type": "custom" 4011 | }, 4012 | { 4013 | "url": "https://github.com/fabpot", 4014 | "type": "github" 4015 | }, 4016 | { 4017 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4018 | "type": "tidelift" 4019 | } 4020 | ], 4021 | "time": "2021-11-23T10:19:22+00:00" 4022 | }, 4023 | { 4024 | "name": "symfony/string", 4025 | "version": "v5.4.2", 4026 | "source": { 4027 | "type": "git", 4028 | "url": "https://github.com/symfony/string.git", 4029 | "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d" 4030 | }, 4031 | "dist": { 4032 | "type": "zip", 4033 | "url": "https://api.github.com/repos/symfony/string/zipball/e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d", 4034 | "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d", 4035 | "shasum": "" 4036 | }, 4037 | "require": { 4038 | "php": ">=7.2.5", 4039 | "symfony/polyfill-ctype": "~1.8", 4040 | "symfony/polyfill-intl-grapheme": "~1.0", 4041 | "symfony/polyfill-intl-normalizer": "~1.0", 4042 | "symfony/polyfill-mbstring": "~1.0", 4043 | "symfony/polyfill-php80": "~1.15" 4044 | }, 4045 | "conflict": { 4046 | "symfony/translation-contracts": ">=3.0" 4047 | }, 4048 | "require-dev": { 4049 | "symfony/error-handler": "^4.4|^5.0|^6.0", 4050 | "symfony/http-client": "^4.4|^5.0|^6.0", 4051 | "symfony/translation-contracts": "^1.1|^2", 4052 | "symfony/var-exporter": "^4.4|^5.0|^6.0" 4053 | }, 4054 | "type": "library", 4055 | "autoload": { 4056 | "psr-4": { 4057 | "Symfony\\Component\\String\\": "" 4058 | }, 4059 | "files": [ 4060 | "Resources/functions.php" 4061 | ], 4062 | "exclude-from-classmap": [ 4063 | "/Tests/" 4064 | ] 4065 | }, 4066 | "notification-url": "https://packagist.org/downloads/", 4067 | "license": [ 4068 | "MIT" 4069 | ], 4070 | "authors": [ 4071 | { 4072 | "name": "Nicolas Grekas", 4073 | "email": "p@tchwork.com" 4074 | }, 4075 | { 4076 | "name": "Symfony Community", 4077 | "homepage": "https://symfony.com/contributors" 4078 | } 4079 | ], 4080 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 4081 | "homepage": "https://symfony.com", 4082 | "keywords": [ 4083 | "grapheme", 4084 | "i18n", 4085 | "string", 4086 | "unicode", 4087 | "utf-8", 4088 | "utf8" 4089 | ], 4090 | "support": { 4091 | "source": "https://github.com/symfony/string/tree/v5.4.2" 4092 | }, 4093 | "funding": [ 4094 | { 4095 | "url": "https://symfony.com/sponsor", 4096 | "type": "custom" 4097 | }, 4098 | { 4099 | "url": "https://github.com/fabpot", 4100 | "type": "github" 4101 | }, 4102 | { 4103 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4104 | "type": "tidelift" 4105 | } 4106 | ], 4107 | "time": "2021-12-16T21:52:00+00:00" 4108 | }, 4109 | { 4110 | "name": "theseer/tokenizer", 4111 | "version": "1.2.1", 4112 | "source": { 4113 | "type": "git", 4114 | "url": "https://github.com/theseer/tokenizer.git", 4115 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 4116 | }, 4117 | "dist": { 4118 | "type": "zip", 4119 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 4120 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 4121 | "shasum": "" 4122 | }, 4123 | "require": { 4124 | "ext-dom": "*", 4125 | "ext-tokenizer": "*", 4126 | "ext-xmlwriter": "*", 4127 | "php": "^7.2 || ^8.0" 4128 | }, 4129 | "type": "library", 4130 | "autoload": { 4131 | "classmap": [ 4132 | "src/" 4133 | ] 4134 | }, 4135 | "notification-url": "https://packagist.org/downloads/", 4136 | "license": [ 4137 | "BSD-3-Clause" 4138 | ], 4139 | "authors": [ 4140 | { 4141 | "name": "Arne Blankerts", 4142 | "email": "arne@blankerts.de", 4143 | "role": "Developer" 4144 | } 4145 | ], 4146 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 4147 | "support": { 4148 | "issues": "https://github.com/theseer/tokenizer/issues", 4149 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 4150 | }, 4151 | "funding": [ 4152 | { 4153 | "url": "https://github.com/theseer", 4154 | "type": "github" 4155 | } 4156 | ], 4157 | "time": "2021-07-28T10:34:58+00:00" 4158 | }, 4159 | { 4160 | "name": "webmozart/assert", 4161 | "version": "1.10.0", 4162 | "source": { 4163 | "type": "git", 4164 | "url": "https://github.com/webmozarts/assert.git", 4165 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" 4166 | }, 4167 | "dist": { 4168 | "type": "zip", 4169 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", 4170 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", 4171 | "shasum": "" 4172 | }, 4173 | "require": { 4174 | "php": "^7.2 || ^8.0", 4175 | "symfony/polyfill-ctype": "^1.8" 4176 | }, 4177 | "conflict": { 4178 | "phpstan/phpstan": "<0.12.20", 4179 | "vimeo/psalm": "<4.6.1 || 4.6.2" 4180 | }, 4181 | "require-dev": { 4182 | "phpunit/phpunit": "^8.5.13" 4183 | }, 4184 | "type": "library", 4185 | "extra": { 4186 | "branch-alias": { 4187 | "dev-master": "1.10-dev" 4188 | } 4189 | }, 4190 | "autoload": { 4191 | "psr-4": { 4192 | "Webmozart\\Assert\\": "src/" 4193 | } 4194 | }, 4195 | "notification-url": "https://packagist.org/downloads/", 4196 | "license": [ 4197 | "MIT" 4198 | ], 4199 | "authors": [ 4200 | { 4201 | "name": "Bernhard Schussek", 4202 | "email": "bschussek@gmail.com" 4203 | } 4204 | ], 4205 | "description": "Assertions to validate method input/output with nice error messages.", 4206 | "keywords": [ 4207 | "assert", 4208 | "check", 4209 | "validate" 4210 | ], 4211 | "support": { 4212 | "issues": "https://github.com/webmozarts/assert/issues", 4213 | "source": "https://github.com/webmozarts/assert/tree/1.10.0" 4214 | }, 4215 | "time": "2021-03-09T10:59:23+00:00" 4216 | }, 4217 | { 4218 | "name": "yiisoft/yii2", 4219 | "version": "2.0.44", 4220 | "source": { 4221 | "type": "git", 4222 | "url": "https://github.com/yiisoft/yii2-framework.git", 4223 | "reference": "fa89647a2d2c5de1c12c65eb94084404f52a6059" 4224 | }, 4225 | "dist": { 4226 | "type": "zip", 4227 | "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/fa89647a2d2c5de1c12c65eb94084404f52a6059", 4228 | "reference": "fa89647a2d2c5de1c12c65eb94084404f52a6059", 4229 | "shasum": "" 4230 | }, 4231 | "require": { 4232 | "bower-asset/inputmask": "~3.2.2 | ~3.3.5", 4233 | "bower-asset/jquery": "3.6.*@stable | 3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", 4234 | "bower-asset/punycode": "1.3.*", 4235 | "bower-asset/yii2-pjax": "~2.0.1", 4236 | "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", 4237 | "ext-ctype": "*", 4238 | "ext-mbstring": "*", 4239 | "ezyang/htmlpurifier": "~4.6", 4240 | "lib-pcre": "*", 4241 | "paragonie/random_compat": ">=1", 4242 | "php": ">=5.4.0", 4243 | "yiisoft/yii2-composer": "~2.0.4" 4244 | }, 4245 | "bin": [ 4246 | "yii" 4247 | ], 4248 | "type": "library", 4249 | "extra": { 4250 | "branch-alias": { 4251 | "dev-master": "2.0.x-dev" 4252 | } 4253 | }, 4254 | "autoload": { 4255 | "psr-4": { 4256 | "yii\\": "" 4257 | } 4258 | }, 4259 | "notification-url": "https://packagist.org/downloads/", 4260 | "license": [ 4261 | "BSD-3-Clause" 4262 | ], 4263 | "authors": [ 4264 | { 4265 | "name": "Qiang Xue", 4266 | "email": "qiang.xue@gmail.com", 4267 | "homepage": "https://www.yiiframework.com/", 4268 | "role": "Founder and project lead" 4269 | }, 4270 | { 4271 | "name": "Alexander Makarov", 4272 | "email": "sam@rmcreative.ru", 4273 | "homepage": "https://rmcreative.ru/", 4274 | "role": "Core framework development" 4275 | }, 4276 | { 4277 | "name": "Maurizio Domba", 4278 | "homepage": "http://mdomba.info/", 4279 | "role": "Core framework development" 4280 | }, 4281 | { 4282 | "name": "Carsten Brandt", 4283 | "email": "mail@cebe.cc", 4284 | "homepage": "https://cebe.cc/", 4285 | "role": "Core framework development" 4286 | }, 4287 | { 4288 | "name": "Timur Ruziev", 4289 | "email": "resurtm@gmail.com", 4290 | "homepage": "http://resurtm.com/", 4291 | "role": "Core framework development" 4292 | }, 4293 | { 4294 | "name": "Paul Klimov", 4295 | "email": "klimov.paul@gmail.com", 4296 | "role": "Core framework development" 4297 | }, 4298 | { 4299 | "name": "Dmitry Naumenko", 4300 | "email": "d.naumenko.a@gmail.com", 4301 | "role": "Core framework development" 4302 | }, 4303 | { 4304 | "name": "Boudewijn Vahrmeijer", 4305 | "email": "info@dynasource.eu", 4306 | "homepage": "http://dynasource.eu", 4307 | "role": "Core framework development" 4308 | } 4309 | ], 4310 | "description": "Yii PHP Framework Version 2", 4311 | "homepage": "https://www.yiiframework.com/", 4312 | "keywords": [ 4313 | "framework", 4314 | "yii2" 4315 | ], 4316 | "support": { 4317 | "forum": "https://www.yiiframework.com/forum/", 4318 | "irc": "ircs://irc.libera.chat:6697/yii", 4319 | "issues": "https://github.com/yiisoft/yii2/issues?state=open", 4320 | "source": "https://github.com/yiisoft/yii2", 4321 | "wiki": "https://www.yiiframework.com/wiki/" 4322 | }, 4323 | "funding": [ 4324 | { 4325 | "url": "https://github.com/yiisoft", 4326 | "type": "github" 4327 | }, 4328 | { 4329 | "url": "https://opencollective.com/yiisoft", 4330 | "type": "open_collective" 4331 | }, 4332 | { 4333 | "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2", 4334 | "type": "tidelift" 4335 | } 4336 | ], 4337 | "time": "2021-12-30T07:50:56+00:00" 4338 | }, 4339 | { 4340 | "name": "yiisoft/yii2-composer", 4341 | "version": "2.0.10", 4342 | "source": { 4343 | "type": "git", 4344 | "url": "https://github.com/yiisoft/yii2-composer.git", 4345 | "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510" 4346 | }, 4347 | "dist": { 4348 | "type": "zip", 4349 | "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/94bb3f66e779e2774f8776d6e1bdeab402940510", 4350 | "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510", 4351 | "shasum": "" 4352 | }, 4353 | "require": { 4354 | "composer-plugin-api": "^1.0 | ^2.0" 4355 | }, 4356 | "require-dev": { 4357 | "composer/composer": "^1.0 | ^2.0@dev", 4358 | "phpunit/phpunit": "<7" 4359 | }, 4360 | "type": "composer-plugin", 4361 | "extra": { 4362 | "class": "yii\\composer\\Plugin", 4363 | "branch-alias": { 4364 | "dev-master": "2.0.x-dev" 4365 | } 4366 | }, 4367 | "autoload": { 4368 | "psr-4": { 4369 | "yii\\composer\\": "" 4370 | } 4371 | }, 4372 | "notification-url": "https://packagist.org/downloads/", 4373 | "license": [ 4374 | "BSD-3-Clause" 4375 | ], 4376 | "authors": [ 4377 | { 4378 | "name": "Qiang Xue", 4379 | "email": "qiang.xue@gmail.com" 4380 | }, 4381 | { 4382 | "name": "Carsten Brandt", 4383 | "email": "mail@cebe.cc" 4384 | } 4385 | ], 4386 | "description": "The composer plugin for Yii extension installer", 4387 | "keywords": [ 4388 | "composer", 4389 | "extension installer", 4390 | "yii2" 4391 | ], 4392 | "support": { 4393 | "forum": "http://www.yiiframework.com/forum/", 4394 | "irc": "irc://irc.freenode.net/yii", 4395 | "issues": "https://github.com/yiisoft/yii2-composer/issues", 4396 | "source": "https://github.com/yiisoft/yii2-composer", 4397 | "wiki": "http://www.yiiframework.com/wiki/" 4398 | }, 4399 | "funding": [ 4400 | { 4401 | "url": "https://github.com/yiisoft", 4402 | "type": "github" 4403 | }, 4404 | { 4405 | "url": "https://opencollective.com/yiisoft", 4406 | "type": "open_collective" 4407 | }, 4408 | { 4409 | "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-composer", 4410 | "type": "tidelift" 4411 | } 4412 | ], 4413 | "time": "2020-06-24T00:04:01+00:00" 4414 | } 4415 | ], 4416 | "aliases": [], 4417 | "minimum-stability": "stable", 4418 | "stability-flags": [], 4419 | "prefer-stable": false, 4420 | "prefer-lowest": false, 4421 | "platform": { 4422 | "php": "^7.2|^8.0" 4423 | }, 4424 | "platform-dev": [], 4425 | "plugin-api-version": "2.1.0" 4426 | } 4427 | --------------------------------------------------------------------------------