From 6c27e551a63026555455be55b04b8a454e1a71aa Mon Sep 17 00:00:00 2001 From: Antonin 0x346e3730 CLAUZIER Date: Fri, 9 Jun 2023 12:42:24 +0400 Subject: [PATCH 1/2] API Module example --- api_module/.gitignore | 2 + api_module/.php-cs-fixer.dist.php | 9 + api_module/LICENSE.md | 47 + api_module/README.md | 21 + api_module/api_module.php | 45 + api_module/composer.json | 28 + api_module/composer.lock | 2481 +++++++++++++++++ api_module/config.xml | 11 + api_module/config_fr.xml | 11 + api_module/example.png | Bin 0 -> 29835 bytes api_module/src/ApiPlatform/Resource/Cat.php | 55 + api_module/tests/phpstan.sh | 31 + api_module/tests/phpstan/phpstan-nightly.neon | 14 + 13 files changed, 2755 insertions(+) create mode 100644 api_module/.gitignore create mode 100644 api_module/.php-cs-fixer.dist.php create mode 100644 api_module/LICENSE.md create mode 100644 api_module/README.md create mode 100644 api_module/api_module.php create mode 100644 api_module/composer.json create mode 100644 api_module/composer.lock create mode 100644 api_module/config.xml create mode 100644 api_module/config_fr.xml create mode 100644 api_module/example.png create mode 100644 api_module/src/ApiPlatform/Resource/Cat.php create mode 100644 api_module/tests/phpstan.sh create mode 100644 api_module/tests/phpstan/phpstan-nightly.neon diff --git a/api_module/.gitignore b/api_module/.gitignore new file mode 100644 index 0000000..6d0b1b1 --- /dev/null +++ b/api_module/.gitignore @@ -0,0 +1,2 @@ +vendor/ +.php-cs-fixer.cache diff --git a/api_module/.php-cs-fixer.dist.php b/api_module/.php-cs-fixer.dist.php new file mode 100644 index 0000000..5b524f8 --- /dev/null +++ b/api_module/.php-cs-fixer.dist.php @@ -0,0 +1,9 @@ +setUsingCache(true)->getFinder(); +$finder->in(__DIR__)->exclude('vendor'); + +return $config; diff --git a/api_module/LICENSE.md b/api_module/LICENSE.md new file mode 100644 index 0000000..5e4bd60 --- /dev/null +++ b/api_module/LICENSE.md @@ -0,0 +1,47 @@ +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + +1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + a) to reproduce the Original Work in copies, either alone or as part of a collective work; + + b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + c) to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + d) to perform the Original Work publicly; and + + e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + +5) External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + +6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + +9) Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + +10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + +12) Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + +13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + +16) Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/api_module/README.md b/api_module/README.md new file mode 100644 index 0000000..0601d64 --- /dev/null +++ b/api_module/README.md @@ -0,0 +1,21 @@ +API Module Example +===================== + +## About + +This example module demonstrates how to modify PrestaShop's new API. + +![](example.png) + +## Install + +1. Copy the `api_modules` directory into PrestaShop's `modules` directory. +2. `composer install` in the module's directory. (`[...]/modules/api_module`) +3. `bin/console prestashop:module install api_module` in PrestaShop's directory. + +## License + +This module is released under the [Academic Free License 3.0][AFL-3.0] + +[report-issue]: https://github.com/PrestaShop/PrestaShop/issues/new/choose +[AFL-3.0]: https://opensource.org/licenses/AFL-3.0 diff --git a/api_module/api_module.php b/api_module/api_module.php new file mode 100644 index 0000000..52753f0 --- /dev/null +++ b/api_module/api_module.php @@ -0,0 +1,45 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 + */ + +use PrestaShop\PrestaShop\Adapter\SymfonyContainer; + +if (!defined('_PS_VERSION_')) { + exit; +} + +if (file_exists(__DIR__ . '/vendor/autoload.php')) { + require_once __DIR__ . '/vendor/autoload.php'; +} + +class api_module extends \Module +{ + public function __construct($name = null, Context $context = null) + { + $this->name = 'api_module'; + $this->displayName = 'API Module'; + $this->version = '0.0.1'; + $this->author = 'PrestaShop'; + $this->description = 'Demo module of how to modify the new API'; + $this->need_instance = 0; + $this->bootstrap = true; + $this->ps_versions_compliancy = ['min' => '8.0.0', 'max' => _PS_VERSION_]; + parent::__construct($name, $context); + } +} diff --git a/api_module/composer.json b/api_module/composer.json new file mode 100644 index 0000000..3264310 --- /dev/null +++ b/api_module/composer.json @@ -0,0 +1,28 @@ +{ + "name": "prestashop/api_module", + "description": "PrestaShop - API Module Example", + "homepage": "https://github.com/PrestaShop", + "license": "AFL-3.0", + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + } + ], + "autoload": { + "psr-4": { + "PrestaShop\\Module\\ApiExample\\": "src/" + } + }, + "require-dev": { + "prestashop/php-dev-tools": "^4.3", + "phpstan/phpstan": "^1.9" + }, + "config": { + "preferred-install": "dist", + "classmap-authoritative": true, + "optimize-autoloader": true, + "prepend-autoloader": false + }, + "type": "prestashop-module" +} diff --git a/api_module/composer.lock b/api_module/composer.lock new file mode 100644 index 0000000..2c09b48 --- /dev/null +++ b/api_module/composer.lock @@ -0,0 +1,2481 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "8a5cb283c2ef24a992747f7ed9cfbd8d", + "packages": [], + "packages-dev": [ + { + "name": "composer/pcre", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/1.0.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-21T20:24:37+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", + "shasum": "" + }, + "require": { + "composer/pcre": "^1", + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-24T20:20:32+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.14.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b", + "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1 || ^2", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.2" + }, + "time": "2022-12-15T06:48:22+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-14T08:49:07+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", + "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", + "shasum": "" + }, + "require": { + "composer/semver": "^3.2", + "composer/xdebug-handler": "^2.0", + "doctrine/annotations": "^1.12", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.2.5 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^4.4.20 || ^5.1.3 || ^6.0", + "symfony/event-dispatcher": "^4.4.20 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.4.20 || ^5.0 || ^6.0", + "symfony/finder": "^4.4.20 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.4.20 || ^5.0 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.23", + "symfony/polyfill-php81": "^1.23", + "symfony/process": "^4.4.20 || ^5.0 || ^6.0", + "symfony/stopwatch": "^4.4.20 || ^5.0 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.8", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^5.2.4 || ^6.0", + "symfony/yaml": "^4.4.20 || ^5.0 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2021-12-11T16:25:08+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + }, + "time": "2022-11-12T15:38:23+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + }, + "abandoned": true, + "time": "2020-10-14T08:32:19+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.10.14", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "d232901b09e67538e5c86a724be841bea5768a7c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d232901b09e67538e5c86a724be841bea5768a7c", + "reference": "d232901b09e67538e5c86a724be841bea5768a7c", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-04-19T13:47:27+00:00" + }, + { + "name": "prestashop/autoindex", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/PrestaShopCorp/autoindex.git", + "reference": "235f3ec115432ffc32d582198ea498467b3946d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShopCorp/autoindex/zipball/235f3ec115432ffc32d582198ea498467b3946d0", + "reference": "235f3ec115432ffc32d582198ea498467b3946d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": "^8.0 || ^7.2", + "symfony/console": "^3.4 || ~4.0 || ~5.0 || ~6.0", + "symfony/finder": "^3.4 || ~4.0 || ~5.0 || ~6.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.83", + "prestashop/php-dev-tools": "1.*" + }, + "bin": [ + "bin/autoindex" + ], + "type": "library", + "autoload": { + "psr-4": { + "PrestaShop\\AutoIndex\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AFL-3.0" + ], + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + } + ], + "description": "Automatically add an 'index.php' in all the current or specified directories and all sub-directories.", + "homepage": "https://github.com/PrestaShopCorp/autoindex", + "support": { + "source": "https://github.com/PrestaShopCorp/autoindex/tree/v2.1.0" + }, + "time": "2022-10-10T08:35:00+00:00" + }, + { + "name": "prestashop/header-stamp", + "version": "v2.2", + "source": { + "type": "git", + "url": "https://github.com/PrestaShopCorp/header-stamp.git", + "reference": "ae1533967ca797e7c8efd5bbbf4351d163253cf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShopCorp/header-stamp/zipball/ae1533967ca797e7c8efd5bbbf4351d163253cf4", + "reference": "ae1533967ca797e7c8efd5bbbf4351d163253cf4", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": "^8.0 || ^7.2", + "symfony/console": "^3.4 || ~4.0 || ~5.0 || ~6.0", + "symfony/finder": "^3.4 || ~4.0 || ~5.0 || ~6.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.83", + "prestashop/php-dev-tools": "1.*" + }, + "bin": [ + "bin/header-stamp" + ], + "type": "library", + "autoload": { + "psr-4": { + "PrestaShop\\HeaderStamp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AFL-3.0" + ], + "authors": [ + { + "name": "PrestaShop SA", + "email": "contact@prestashop.com" + } + ], + "description": "Rewrite your file headers to add the license or to make them up-to-date", + "homepage": "https://github.com/PrestaShopCorp/header-stamp", + "support": { + "issues": "https://github.com/PrestaShopCorp/header-stamp/issues", + "source": "https://github.com/PrestaShopCorp/header-stamp/tree/v2.2" + }, + "time": "2022-10-10T08:26:55+00:00" + }, + { + "name": "prestashop/php-dev-tools", + "version": "v4.3.0", + "source": { + "type": "git", + "url": "https://github.com/PrestaShop/php-dev-tools.git", + "reference": "843275b19729ba810d8ba2b9c97b568e5bbabe03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PrestaShop/php-dev-tools/zipball/843275b19729ba810d8ba2b9c97b568e5bbabe03", + "reference": "843275b19729ba810d8ba2b9c97b568e5bbabe03", + "shasum": "" + }, + "require": { + "friendsofphp/php-cs-fixer": "^3.2", + "php": ">=7.2.5", + "prestashop/autoindex": "^2.0", + "prestashop/header-stamp": "^2.0", + "squizlabs/php_codesniffer": "^3.4", + "symfony/console": "~3.2 || ~4.0 || ~5.0 || ~6.0", + "symfony/filesystem": "~3.2 || ~4.0 || ~5.0 || ~6.0" + }, + "bin": [ + "bin/prestashop-coding-standards" + ], + "type": "library", + "autoload": { + "psr-4": { + "PrestaShop\\CodingStandards\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PrestaShop coding standards", + "support": { + "issues": "https://github.com/PrestaShop/php-dev-tools/issues", + "source": "https://github.com/PrestaShop/php-dev-tools/tree/v4.3.0" + }, + "time": "2022-10-18T14:19:51+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.7.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", + "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2022-06-18T07:21:10+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", + "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.17" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-12-28T14:15:31+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "8e18a9d559eb8ebc2220588f1faa726a2fcd31c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e18a9d559eb8ebc2220588f1faa726a2fcd31c9", + "reference": "8e18a9d559eb8ebc2220588f1faa726a2fcd31c9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.17" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-12-12T15:54:21+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51", + "reference": "ac09569844a9109a5966b9438fc29113ce77cf51", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-21T19:53:16+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "40c08632019838dfb3350f18cf5563b8080055fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/40c08632019838dfb3350f18cf5563b8080055fc", + "reference": "40c08632019838dfb3350f18cf5563b8080055fc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.17" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-12-22T10:31:03+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T13:00:38+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.11" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T16:58:25+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:17:29+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6df7a3effde34d81717bbef4591e5ffe32226d69", + "reference": "6df7a3effde34d81717bbef4591e5ffe32226d69", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-28T13:19:49+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/55733a8664b8853b003e70251c58bc8cb2d82a6b", + "reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.17" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-12-12T15:54:21+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/api_module/config.xml b/api_module/config.xml new file mode 100644 index 0000000..780dc32 --- /dev/null +++ b/api_module/config.xml @@ -0,0 +1,11 @@ + + + api_module + + + + + + 0 + 0 + \ No newline at end of file diff --git a/api_module/config_fr.xml b/api_module/config_fr.xml new file mode 100644 index 0000000..e80e50c --- /dev/null +++ b/api_module/config_fr.xml @@ -0,0 +1,11 @@ + + + api_module + + + + + + 0 + 0 + \ No newline at end of file diff --git a/api_module/example.png b/api_module/example.png new file mode 100644 index 0000000000000000000000000000000000000000..02fc43918d2f6e80fa12de4772cc80af8a37c42a GIT binary patch literal 29835 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 + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + */ + +declare(strict_types=1); + +namespace PrestaShop\Module\ApiExample\ApiPlatform\Resource; + +use ApiPlatform\Metadata\ApiProperty; +use ApiPlatform\Metadata\ApiResource; +use ApiPlatform\Metadata\Get; + +#[ApiResource( + operations: [ + new Get( + uriTemplate: '/cat/{id}', + requirements: ['id' => '\d+'], + ), + ] +)] +class Cat +{ + /** + * @var int + */ + #[ApiProperty(identifier: true)] + private int $id; + + /** + * @var string + */ + private string $name; +} diff --git a/api_module/tests/phpstan.sh b/api_module/tests/phpstan.sh new file mode 100644 index 0000000..8e2a138 --- /dev/null +++ b/api_module/tests/phpstan.sh @@ -0,0 +1,31 @@ +#!/bin/bash +PS_VERSION=$1 + +set -e + +# Docker images prestashop/prestashop may be used, even if the shop remains uninstalled +echo "Pull PrestaShop files (Tag ${PS_VERSION})" + +docker rm -f temp-ps || true +docker volume rm -f ps-volume || true + +docker run -tid --rm -v ps-volume:/var/www/html --name temp-ps prestashop/prestashop:$PS_VERSION + +# The nightly image needs more time to unzip the PrestaShop archive +while [[ -z "$(docker exec -t temp-ps ls)" ]]; do sleep 5; done + +# Clear previous instance of the module in the PrestaShop volume +echo "Clear previous module" + +docker exec -t temp-ps rm -rf /var/www/html/modules/keycloak_connector_demo + +# Run a container for PHPStan, having access to the module content and PrestaShop sources. +# This tool is outside the composer.json because of the compatibility with PHP 5.6 +echo "Run PHPStan using phpstan-${PS_VERSION}.neon file" + +docker run --rm --volumes-from temp-ps \ + -v $PWD:/var/www/html/modules/keycloak_connector_demo \ + -e _PS_ROOT_DIR_=/var/www/html \ + --workdir=/var/www/html/modules/keycloak_connector_demo ghcr.io/phpstan/phpstan:1.9.8 \ + analyse \ + --configuration=/var/www/html/modules/keycloak_connector_demo/tests/phpstan/phpstan-${PS_VERSION}.neon diff --git a/api_module/tests/phpstan/phpstan-nightly.neon b/api_module/tests/phpstan/phpstan-nightly.neon new file mode 100644 index 0000000..de7c586 --- /dev/null +++ b/api_module/tests/phpstan/phpstan-nightly.neon @@ -0,0 +1,14 @@ +includes: + - %currentWorkingDirectory%/vendor/prestashop/php-dev-tools/phpstan/ps-module-extension.neon + +parameters: + paths: + - %currentWorkingDirectory% + excludePaths: + - %currentWorkingDirectory%/vendor/ + # We consider that the extension file will be stored the folder test/phpstan + # From Phpstan 0.12, paths are relative to the .neon file. + # - ../../classes + # - ../../controllers + reportUnmatchedIgnoredErrors: false + level: max From c4a7dce35958b0e6c1877a760315da3f14da8be7 Mon Sep 17 00:00:00 2001 From: Maxime Flasquin Date: Wed, 28 Jun 2023 19:12:00 +0200 Subject: [PATCH 2/2] Review fixes --- api_module/api_module.php | 12 +++++------- api_module/config_fr.xml | 11 ----------- 2 files changed, 5 insertions(+), 18 deletions(-) delete mode 100644 api_module/config_fr.xml diff --git a/api_module/api_module.php b/api_module/api_module.php index 52753f0..4a49306 100644 --- a/api_module/api_module.php +++ b/api_module/api_module.php @@ -18,8 +18,6 @@ * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ -use PrestaShop\PrestaShop\Adapter\SymfonyContainer; - if (!defined('_PS_VERSION_')) { exit; } @@ -28,9 +26,9 @@ require_once __DIR__ . '/vendor/autoload.php'; } -class api_module extends \Module +class Api_Module extends \Module { - public function __construct($name = null, Context $context = null) + public function __construct() { $this->name = 'api_module'; $this->displayName = 'API Module'; @@ -38,8 +36,8 @@ public function __construct($name = null, Context $context = null) $this->author = 'PrestaShop'; $this->description = 'Demo module of how to modify the new API'; $this->need_instance = 0; - $this->bootstrap = true; - $this->ps_versions_compliancy = ['min' => '8.0.0', 'max' => _PS_VERSION_]; - parent::__construct($name, $context); + $this->bootstrap = false; + $this->ps_versions_compliancy = ['min' => '9.0.0', 'max' => _PS_VERSION_]; + parent::__construct(); } } diff --git a/api_module/config_fr.xml b/api_module/config_fr.xml deleted file mode 100644 index e80e50c..0000000 --- a/api_module/config_fr.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - api_module - - - - - - 0 - 0 - \ No newline at end of file