diff --git a/Gemini/.gitignore b/Gemini/.gitignore deleted file mode 100644 index 8e11490f..00000000 --- a/Gemini/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/phpunit.xml -/vendor -/build -.idea - diff --git a/Gemini/README.md b/Gemini/README.md deleted file mode 100644 index 721782c3..00000000 --- a/Gemini/README.md +++ /dev/null @@ -1,206 +0,0 @@ -# ![image](https://cloud.githubusercontent.com/assets/2371345/24554336/902613ac-1603-11e7-9c4f-1c79204388e7.png) Gemini -[![Contribution Guidelines][2]](./CONTRIBUTING.md) -[![LICENSE][3]](./LICENSE) - -## Introduction - -A path mapping service for Islandora 8. Gemini is what links content created in Drupal to data stored in Fedora. It has a very simple API and is built on top of a relational database using Doctrine's [database abstraction layer][4]. - -## Installation - -- Install the database of your choice that is [compatible with Doctrine's DBAL][5]. -- Clone this repository. -- Install `composer`. [Install instructions here.][6] -- `$ cd /path/to/Gemini` and run `$ composer install` -- Then either - - For production, configure your web server appropriately (e.g. add a VirtualHost for Gemini in Apache) OR - - For development, run the PHP built-in web server `$ php -S localhost:8888 -t src` from Gemini root. - -Gemini runs on its own database, and requires one table. You'll need to set that up manually. For example, using MySQL: -```mysql -create database gemini; -CREATE TABLE gemini.Gemini ( - id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, - drupal VARCHAR(2048) NOT NULL UNIQUE, - fedora VARCHAR(2048) NOT NULL UNIQUE -) ENGINE=InnoDB; -``` - -## Configuration - -Gemini accepts [configuration for Doctrine's DBAL](http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html) as the `db.options` array in [its config file](./cfg/config.example.yaml) file. Other settings such as the location of Gemini's log file and the base URL of your Fedora server are also in this configuration file. Reasonable defaults provided. Do not commit the configuration file with your MySQL credentials into Git! - -## Usage - -Gemini associates URL paths between resources in Drupal and Fedora. To link the Drupal and Fedora URIs of a resource, a client must mint a new Fedora URI (using a POST) based on the UUID of the node or file in Drupal, and then persist the Gemini record linking the two URIs (using a PUT). - -#### POST / - -Mints a new Fedora URI: - -`curl -v -H "Authorization: Bearer islandora" -H "Content-Type: application/json" -d 'ab70127a-8579-4c17-af07-b3b1eceebb17' http://localhost:8000/gemini/` - -Returns for example: - -``` -< HTTP/1.1 200 OK -< Date: Mon, 29 Oct 2018 19:03:36 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Vary: Accept-Encoding -< Content-Length: 82 -< Content-Type: text/html; charset=UTF-8 -``` - -`http://localhost:8080/fcrepo/rest/ab/70/12/7a/ab70127a-8579-4c17-af07-b3b1eceebb17` - -#### PUT /{UUID} - -Updates the entry corresponding to the UUID with the Drupal URL: - -`curl -v -H "Authorization: Bearer islandora" -X PUT -H "Content-Type: application/json" -d '{"drupal" : "http://localhost:8000/node/0001", "fedora" : "http://localhost:8080/fcrepo/rest/ab/70/12/7a/ab70127a-8579-4c17-af07-b3b1eceebb17"}' http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17` - - -If successful, returns for example: - -``` -HTTP/1.1 201 Created -< Date: Mon, 29 Oct 2018 19:17:41 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Location: http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17 -< Content-Length: 0 -< Content-Type: text/html; charset=UTF-8 -``` - -resulting in the creation of a new record in the Gemini database: - -``` -mysql> select * from Gemini where uuid = 'ab70127a-8579-4c17-af07-b3b1eceebb17'\G -*************************** 1. row *************************** -fedora_hash: 868afb07dbe25dc0539ba91ce4f0d9e5e2cebdc1124935590544abe14b54466ecf925113bcf057c3b1bbb9056e03e918dd60b50ad2047b9ecf44b60db8fb1a91 -drupal_hash: 1cd9033dc7a45e4034bfba5b832f772b2b8a694ece2ac0c16bcc22a3563ee331a90adc843e3657e491ac550776eaff0ec2db521891da2a3a55609d817598b5da - uuid: ab70127a-8579-4c17-af07-b3b1eceebb17 - drupal_uri: http://localhost:8000/node/0001 - fedora_uri: http://localhost:8080/fcrepo/rest/ab/70/12/7a/ab70127a-8579-4c17-af07-b3b1eceebb17 -dateCreated: 2018-10-29 14:17:42 -dateUpdated: 2018-10-29 14:17:42 -1 row in set (0.00 sec) -``` - -#### GET /{UUID} - -Fetches the Drupal/Fedora URIs corresponding to a UUID: - -`curl -H "Authorization: Bearer islandora" http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17` - -This request returns, for example: - -``` -< HTTP/1.1 200 OK -< Date: Mon, 29 Oct 2018 20:31:25 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Content-Length: 163 -< Content-Type: application/json -``` - -```javascript -{ - "drupal":"http:\/\/localhost:8000\/node\/0001", - "fedora":"http:\/\/localhost:8080\/fcrepo\/rest\/ab\/70\/12\/7a\/ab70127a-8579-4c17-af07-b3b1eceebb17" -} -``` - -#### GET /by_uri - -Fetches the alternate URI from Gemini for the one provided in a `X-Islandora-URI` header and returns: -* 200 OK and the URI in a Location header, if it exists in Gemini. -* 404 Not Found, if it doesn't exist in Gemini. - -`curl -i -H"Authorization: Bearer islandora" -H"X-Islandora-URI: http://localhost:8000/node/2" http://localhost:8000/gemini/by_uri` - -This request returns: -``` -HTTP/1.1 200 OK -Date: Thu, 23 May 2019 19:23:15 GMT -Server: Apache/2.4.18 (Ubuntu) -X-Powered-By: PHP/7.2.18-1+ubuntu16.04.1+deb.sury.org+1 -Location: http://localhost:8080/fcrepo/rest/cf/5d/46/74/cf5d4674-282b-499c-9ebc-4c4815d4f9ac -Cache-Control: no-cache, private -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -``` - -Requesting with the URI from this `Location:` header should return the original URI. - -`curl -i -H"Authorization: Bearer islandora" -H"X-Islandora-URI: http://localhost:8080/fcrepo/rest/cf/5d/46/74/cf5d4674-282b-499c-9ebc-4c4815d4f9ac" http://localhost:8000/gemini/by_uri` - -``` -HTTP/1.1 200 OK -Date: Thu, 23 May 2019 19:25:27 GMT -Server: Apache/2.4.18 (Ubuntu) -X-Powered-By: PHP/7.2.18-1+ubuntu16.04.1+deb.sury.org+1 -Location: http://localhost:8000/node/2 -Cache-Control: no-cache, private -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -``` - -If a mapping cannot be found then a 404 response is returned. - -`curl -i -H"Authorization: Bearer islandora" -H"X-Islandora-URI: http://localhost:8000/node/99" http://localhost:8000/gemini/by_uri` - -``` -HTTP/1.1 404 Not Found -Date: Thu, 23 May 2019 19:26:36 GMT -Server: Apache/2.4.18 (Ubuntu) -X-Powered-By: PHP/7.2.18-1+ubuntu16.04.1+deb.sury.org+1 -Cache-Control: no-cache, private -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -``` - -#### DELETE /{UUID} - -Purges the entry corresponding to the UUID from Gemini's database: - -curl -v -X DELETE -H "Authorization: Bearer islandora" http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17 - -If successful, this request returns, for example: - -``` -< HTTP/1.1 204 No Content -< Date: Mon, 29 Oct 2018 19:51:39 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Content-Type: text/html; charset=UTF-8 -``` - -## Maintainers - -Current maintainers: - -* [Daniel Lamb](https://github.com/dannylamb) - -## Development - -If you would like to contribute, please get involved by attending our weekly [Tech Call](https://github.com/Islandora/docuentation/wiki). We love to hear from you! - -If you would like to contribute code to the project, you need to be covered by an Islandora Foundation [Contributor License Agreement](http://islandora.ca/sites/default/files/islandora_cla.pdf) or [Corporate Contributor License Agreement](http://islandora.ca/sites/default/files/islandora_ccla.pdf). Please see the [Contributors](http://islandora.ca/resources/contributors) pages on Islandora.ca for more information. - -We recommend using the [islandora-playbook](https://github.com/Islandora-Devops/islandora-playbook) to get started. - -## License - -[MIT](https://opensource.org/licenses/MIT) - -[2]: http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg -[3]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square -[4]: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/ -[5]: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/introduction.html -[6]: https://getcomposer.org/download/ diff --git a/Gemini/bin/console b/Gemini/bin/console deleted file mode 100644 index 7365b6e7..00000000 --- a/Gemini/bin/console +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env php -getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); - -$app = require __DIR__.'/../src/app.php'; -$console = require __DIR__.'/../src/console.php'; - -$app->register( - new \Kurl\Silex\Provider\DoctrineMigrationsProvider($console), - array( - 'migrations.directory' => __DIR__ . '/../src/Migrations', - 'migrations.namespace' => 'Islandora\Gemini\Migrations', - 'migrations.name' => 'Gemini Migrations', - 'migrations.table_name' => 'gemini_migrations', - ) -); - -$console->setHelperSet($app['migrations.em_helper_set']); -$console->addCommands($app['migrations.commands']); - -$console->run(); diff --git a/Gemini/cfg/config.example.yaml b/Gemini/cfg/config.example.yaml deleted file mode 100644 index 732cda88..00000000 --- a/Gemini/cfg/config.example.yaml +++ /dev/null @@ -1,32 +0,0 @@ ---- - -debug: false - -# Leave these blank unless you know what you're doing. If you're moving -# data from one server to another and the domain changes, set these -# to your new domain. -fedora_domain: -drupal_domain: - -db.options: - driver: pdo_mysql - host: 127.0.0.1 - port: 3306 - dbname: gemini - user: changeme - password: changeme - -log: - # Valid log levels are: - # DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY, NONE - # log level none won't open logfile - level: NONE - file: ../gemini.log - -syn: - # toggles JWT security for service - enable: false - # Path to the syn config file for authentication. - # example can be found here: - # https://github.com/Islandora/Syn/blob/main/conf/syn-settings.example.xml - config: ../syn-settings.xml diff --git a/Gemini/composer.json b/Gemini/composer.json deleted file mode 100644 index aba33bf9..00000000 --- a/Gemini/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "islandora/gemini", - "description": "Path mapping Service between Fedora and Drupal", - "require": { - "silex/silex": "^2.0", - "islandora/crayfish-commons": "dev-dev", - "doctrine/migrations": "^1.7", - "kurl/silex-doctrine-migrations-provider": "^0.3.1", - "php": "^7.3 || ^7.4" - }, - "require-dev": { - "phpunit/phpunit": "^9.0", - "squizlabs/php_codesniffer": "^3.0", - "sebastian/phpcpd": "^6.0" - }, - "minimum-stability": "dev", - "prefer-stable": true, - "autoload": { - "psr-4": { - "Islandora\\Gemini\\": "src/" - } - }, - "scripts": { - "check": [ - "vendor/bin/phpcs --standard=PSR2 src tests", - "vendor/bin/phpcpd --suffix *.php src" - ], - "test": [ - "@check", - "vendor/bin/phpunit" - ] - }, - "config": { - "sort-packages": true - }, - "license": "MIT", - "authors": [ - { - "name": "Islandora Foundation", - "email": "community@islandora.ca", - "role": "Owner" - }, - { - "name": "Daniel Lamb", - "email": "dlamb@islandora.ca", - "role": "Maintainer" - } - ] -} diff --git a/Gemini/composer.lock b/Gemini/composer.lock deleted file mode 100644 index a95e40c0..00000000 --- a/Gemini/composer.lock +++ /dev/null @@ -1,5422 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "613449030e774cc95052c96b667187da", - "packages": [ - { - "name": "doctrine/cache", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "13e3381b25847283a91948d04640543941309727" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", - "reference": "13e3381b25847283a91948d04640543941309727", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "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": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.10.x" - }, - "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%2Fcache", - "type": "tidelift" - } - ], - "time": "2020-07-07T18:54:01+00:00" - }, - { - "name": "doctrine/dbal", - "version": "2.12.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "adce7a954a1c2f14f85e94aed90c8489af204086" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/adce7a954a1c2f14f85e94aed90c8489af204086", - "reference": "adce7a954a1c2f14f85e94aed90c8489af204086", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.3 || ^8" - }, - "require-dev": { - "doctrine/coding-standard": "^8.1", - "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.12.40", - "phpunit/phpunit": "^9.4", - "psalm/plugin-phpunit": "^0.10.0", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.17.2" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "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" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlanywhere", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.12.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2020-11-14T20:26:58+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "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" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" - }, - "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%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2020-05-29T18:28:51+00:00" - }, - { - "name": "doctrine/migrations", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.6", - "ocramius/proxy-manager": "^1.0|^2.0", - "php": "^7.1", - "symfony/console": "~3.3|^4.0" - }, - "require-dev": { - "doctrine/coding-standard": "^1.0", - "doctrine/orm": "~2.5", - "jdorn/sql-formatter": "~1.1", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "~7.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~3.3|^4.0" - }, - "suggest": { - "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "bin": [ - "bin/doctrine-migrations" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v1.8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations", - "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Michael Simonson", - "email": "contact@mikesimonson.com" - } - ], - "description": "Database Schema migrations using Doctrine DBAL", - "homepage": "https://www.doctrine-project.org/projects/migrations.html", - "keywords": [ - "database", - "migrations" - ], - "support": { - "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/1.8" - }, - "time": "2018-06-06T21:00:30+00:00" - }, - { - "name": "easyrdf/easyrdf", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/easyrdf/easyrdf.git", - "reference": "c7b0a9dbcb211eb7de03ee99ff5b52d17f2a8e64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/c7b0a9dbcb211eb7de03ee99ff5b52d17f2a8e64", - "reference": "c7b0a9dbcb211eb7de03ee99ff5b52d17f2a8e64", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "ext-pcre": "*", - "ext-xmlreader": "*", - "lib-libxml": "*", - "php": ">=7.1.0" - }, - "require-dev": { - "code-lts/doctum": "^5", - "ml/json-ld": "~1.0", - "phpunit/phpunit": "^7", - "semsol/arc2": "^2.4", - "squizlabs/php_codesniffer": "3.*", - "zendframework/zend-http": "~2.3" - }, - "suggest": { - "ml/json-ld": "~1.0", - "semsol/arc2": "~2.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "EasyRdf\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nicholas Humfrey", - "email": "njh@aelius.com", - "homepage": "http://www.aelius.com/njh/", - "role": "Developer" - }, - { - "name": "Alexey Zakhlestin", - "email": "indeyets@gmail.com", - "homepage": "http://indeyets.ru/", - "role": "Developer" - } - ], - "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", - "homepage": "http://www.easyrdf.org/", - "keywords": [ - "Linked Data", - "RDF", - "Semantic Web", - "Turtle", - "rdfa", - "sparql" - ], - "support": { - "forum": "http://groups.google.com/group/easyrdf/", - "issues": "http://github.com/easyrdf/easyrdf/issues", - "source": "https://github.com/easyrdf/easyrdf/tree/1.1.1" - }, - "time": "2020-12-02T08:47:31+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" - }, - "time": "2020-06-16T21:01:06+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" - }, - "time": "2020-09-30T07:37:28+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.7.0" - }, - "time": "2020-09-30T07:37:11+00:00" - }, - { - "name": "islandora/chullo", - "version": "dev-dev", - "source": { - "type": "git", - "url": "https://github.com/Islandora/chullo.git", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Islandora/chullo/zipball/6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "shasum": "" - }, - "require": { - "easyrdf/easyrdf": "^0.9 || ^1", - "guzzlehttp/guzzle": "^6.1.0", - "ml/json-ld": "^1.0.4", - "php": "^7.3 || ^7.4" - }, - "require-dev": { - "mockery/mockery": "^0.9", - "phpunit/phpunit": "^9.0", - "sebastian/phpcpd": "^6.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Islandora\\Chullo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Islandora Foundation", - "email": "community@islandora.ca", - "role": "Owner" - }, - { - "name": "Daniel Lamb", - "email": "dlamb@islandora.ca", - "role": "Maintainer" - }, - { - "name": "Nick Ruest", - "email": "ruestn@gmail.com", - "role": "Maintainer" - } - ], - "description": "A PHP client for interacting with a Fedora 4 server.", - "homepage": "https://github.com/Islandora/chullo", - "support": { - "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/chullo/tree/dev" - }, - "time": "2020-12-11T21:38:08+00:00" - }, - { - "name": "islandora/crayfish-commons", - "version": "dev-dev", - "source": { - "type": "git", - "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d7c0044723c2089f7757fb5c9dd523397938a8e9", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.2", - "islandora/chullo": "dev-dev", - "monolog/monolog": "^1.22", - "namshi/jose": "^7.2", - "pimple/pimple": "~3.0", - "psr/log": "^1.0.1", - "silex/silex": "^2.0", - "symfony/http-foundation": "^3.2.6", - "symfony/security": "^3.2", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.0", - "sebastian/phpcpd": "^3.0", - "squizlabs/php_codesniffer": "^2.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Islandora\\Crayfish\\Commons\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Islandora Foundation", - "email": "community@islandora.ca", - "role": "Owner" - }, - { - "name": "Daniel Lamb", - "email": "dlamb@islandora.ca", - "role": "Maintainer" - } - ], - "description": "Shared code amongst Islandora Crayfish microservices", - "homepage": "https://github.com/Islandora/Crayfish-Commons", - "support": { - "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" - }, - "time": "2020-11-12T23:33:17+00:00" - }, - { - "name": "kurl/silex-doctrine-migrations-provider", - "version": "0.3.2", - "source": { - "type": "git", - "url": "https://github.com/breenie/silex-doctrine-migrations-provider.git", - "reference": "d2b9508b180adc3ce2283b9f04798ad353bdfcf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/breenie/silex-doctrine-migrations-provider/zipball/d2b9508b180adc3ce2283b9f04798ad353bdfcf6", - "reference": "d2b9508b180adc3ce2283b9f04798ad353bdfcf6", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.2", - "doctrine/migrations": "^1.5", - "php": "^5.6|^7.0", - "pimple/pimple": "^3.0", - "silex/api": "^2.0", - "symfony/console": "^2.3 | ^3.0", - "symfony/http-foundation": "3.4.35" - }, - "require-dev": { - "doctrine/orm": "^2.2", - "phpunit/phpunit": "^5.7", - "silex/silex": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Kurl\\Silex\\Provider\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A doctrine migrations provider for silex", - "support": { - "issues": "https://github.com/breenie/silex-doctrine-migrations-provider/issues", - "source": "https://github.com/breenie/silex-doctrine-migrations-provider/tree/0.3.2" - }, - "time": "2020-03-23T11:51:42+00:00" - }, - { - "name": "ml/iri", - "version": "1.1.4", - "target-dir": "ML/IRI", - "source": { - "type": "git", - "url": "https://github.com/lanthaler/IRI.git", - "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lanthaler/IRI/zipball/cbd44fa913e00ea624241b38cefaa99da8d71341", - "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341", - "shasum": "" - }, - "require": { - "lib-pcre": ">=4.0", - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "ML\\IRI": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Markus Lanthaler", - "email": "mail@markus-lanthaler.com", - "homepage": "http://www.markus-lanthaler.com", - "role": "Developer" - } - ], - "description": "IRI handling for PHP", - "homepage": "http://www.markus-lanthaler.com", - "keywords": [ - "URN", - "iri", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/lanthaler/IRI/issues", - "source": "https://github.com/lanthaler/IRI/tree/master" - }, - "time": "2014-01-21T13:43:39+00:00" - }, - { - "name": "ml/json-ld", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/lanthaler/JsonLD.git", - "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/c74a1aed5979ed1cfb1be35a55a305fd30e30b93", - "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ml/iri": "^1.1.1", - "php": ">=5.3.0" - }, - "require-dev": { - "json-ld/tests": "1.0", - "phpunit/phpunit": "^4" - }, - "type": "library", - "autoload": { - "psr-4": { - "ML\\JsonLD\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Markus Lanthaler", - "email": "mail@markus-lanthaler.com", - "homepage": "http://www.markus-lanthaler.com", - "role": "Developer" - } - ], - "description": "JSON-LD Processor for PHP", - "homepage": "http://www.markus-lanthaler.com", - "keywords": [ - "JSON-LD", - "jsonld" - ], - "support": { - "issues": "https://github.com/lanthaler/JsonLD/issues", - "source": "https://github.com/lanthaler/JsonLD/tree/1.2.0" - }, - "time": "2020-06-16T17:45:06+00:00" - }, - { - "name": "monolog/monolog", - "version": "1.25.5", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.25.5" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2020-07-23T08:35:51+00:00" - }, - { - "name": "namshi/jose", - "version": "7.2.3", - "source": { - "type": "git", - "url": "https://github.com/namshi/jose.git", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", - "shasum": "" - }, - "require": { - "ext-date": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-spl": "*", - "php": ">=5.5", - "symfony/polyfill-php56": "^1.0" - }, - "require-dev": { - "phpseclib/phpseclib": "^2.0", - "phpunit/phpunit": "^4.5|^5.0", - "satooshi/php-coveralls": "^1.0" - }, - "suggest": { - "ext-openssl": "Allows to use OpenSSL as crypto engine.", - "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." - }, - "type": "library", - "autoload": { - "psr-4": { - "Namshi\\JOSE\\": "src/Namshi/JOSE/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Nadalin", - "email": "alessandro.nadalin@gmail.com" - }, - { - "name": "Alessandro Cinelli (cirpo)", - "email": "alessandro.cinelli@gmail.com" - } - ], - "description": "JSON Object Signing and Encryption library for PHP.", - "keywords": [ - "JSON Web Signature", - "JSON Web Token", - "JWS", - "json", - "jwt", - "token" - ], - "support": { - "issues": "https://github.com/namshi/jose/issues", - "source": "https://github.com/namshi/jose/tree/master" - }, - "time": "2016-12-05T07:27:31+00:00" - }, - { - "name": "ocramius/proxy-manager", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "57e9272ec0e8deccf09421596e0e2252df440e11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11", - "reference": "57e9272ec0e8deccf09421596e0e2252df440e11", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "zendframework/zend-code": ">2.2.5,<3.0" - }, - "require-dev": { - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "1.5.*" - }, - "suggest": { - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", - "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", - "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", - "zendframework/zend-stdlib": "To use the hydrator proxy", - "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "ProxyManager\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", - "homepage": "https://github.com/Ocramius/ProxyManager", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/Ocramius/ProxyManager/issues", - "source": "https://github.com/Ocramius/ProxyManager/tree/1.0.x" - }, - "time": "2015-08-09T04:28:19+00:00" - }, - { - "name": "pimple/pimple", - "version": "v3.3.1", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" - }, - "time": "2020-11-24T20:35:42+00:00" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" - }, - "time": "2017-02-14T16:28:37+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" - }, - "time": "2020-03-23T09:12:05+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "silex/silex", - "version": "v2.2.4", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Silex.git", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "pimple/pimple": "~3.0", - "symfony/event-dispatcher": "~2.8|^3.0", - "symfony/http-foundation": "~2.8|^3.0", - "symfony/http-kernel": "~2.8|^3.0", - "symfony/routing": "~2.8|^3.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" - }, - "replace": { - "silex/api": "self.version", - "silex/providers": "self.version" - }, - "require-dev": { - "doctrine/dbal": "~2.2", - "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "~5", - "symfony/asset": "~2.8|^3.0", - "symfony/browser-kit": "~2.8|^3.0", - "symfony/config": "~2.8|^3.0", - "symfony/css-selector": "~2.8|^3.0", - "symfony/debug": "~2.8|^3.0", - "symfony/doctrine-bridge": "~2.8|^3.0", - "symfony/dom-crawler": "~2.8|^3.0", - "symfony/expression-language": "~2.8|^3.0", - "symfony/finder": "~2.8|^3.0", - "symfony/form": "~2.8|^3.0", - "symfony/intl": "~2.8|^3.0", - "symfony/monolog-bridge": "~2.8|^3.0", - "symfony/options-resolver": "~2.8|^3.0", - "symfony/phpunit-bridge": "^3.2", - "symfony/process": "~2.8|^3.0", - "symfony/security": "~2.8|^3.0", - "symfony/serializer": "~2.8|^3.0", - "symfony/translation": "~2.8|^3.0", - "symfony/twig-bridge": "~2.8|^3.0", - "symfony/validator": "~2.8|^3.0", - "symfony/var-dumper": "~2.8|^3.0", - "symfony/web-link": "^3.3", - "twig/twig": "~1.28|~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Silex\\": "src/Silex" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "The PHP micro-framework based on the Symfony Components", - "homepage": "http://silex.sensiolabs.org", - "keywords": [ - "microframework" - ], - "support": { - "issues": "https://github.com/silexphp/Silex/issues", - "source": "https://github.com/silexphp/Silex/tree/v2.2.4" - }, - "abandoned": "symfony/flex", - "time": "2018-03-16T23:34:20+00:00" - }, - { - "name": "symfony/console", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.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": "Symfony Console Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/console/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.17", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "65fe7b49868378319b82da3035fb30801b931c47" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/65fe7b49868378319b82da3035fb30801b931c47", - "reference": "65fe7b49868378319b82da3035fb30801b931c47", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "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": "Symfony Debug Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.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": "2020-10-28T20:42:29+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.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": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v3.4.35", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9e4b3ac8fa3348b4811674d23de32d201de225ce", - "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" - }, - "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "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": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/3.4" - }, - "time": "2019-11-11T12:53:10+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" - }, - "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "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": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-11-27T08:42:42+00:00" - }, - { - "name": "symfony/inflector", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/ba33a08d608c5b26ef768b6652876098dd3ace36", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/string": "^5.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Inflector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Inflector Component", - "homepage": "https://symfony.com", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" - ], - "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T12:01:57+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for 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.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/property-access", - "version": "v4.4.17", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/ab8184f093095b40c3e7688bc4eb1d0484da327c", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/inflector": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "symfony/cache": "^3.4|^4.0|^5.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "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": "Symfony PropertyAccess Component", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v4.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": "2020-10-31T22:44:29+00:00" - }, - { - "name": "symfony/routing", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "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": "Symfony Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/security", - "version": "v3.4.39", - "source": { - "type": "git", - "url": "https://github.com/symfony/security.git", - "reference": "fde88ec93c864cd7ad0b8953485ed8bd000f8985" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/fde88ec93c864cd7ad0b8953485ed8bd000f8985", - "reference": "fde88ec93c864cd7ad0b8953485ed8bd000f8985", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "^2.8.31|~3.3.13|~3.4|~4.0", - "symfony/http-kernel": "~3.3|~4.0", - "symfony/polyfill-php56": "~1.0", - "symfony/polyfill-php70": "~1.0", - "symfony/property-access": "~2.8|~3.0|~4.0" - }, - "replace": { - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version" - }, - "require-dev": { - "psr/container": "^1.0", - "psr/log": "~1.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/ldap": "~3.1|~4.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/validator": "^3.2.5|~4.0" - }, - "suggest": { - "psr/container-implementation": "To instantiate the Security class", - "symfony/expression-language": "For using the expression voter", - "symfony/form": "", - "symfony/ldap": "For using the LDAP user and authentication providers", - "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", - "symfony/validator": "For using the user password constraint" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\": "" - }, - "exclude-from-classmap": [ - "/Core/Tests/", - "/Csrf/Tests/", - "/Guard/Tests/", - "/Http/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": "Symfony Security Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security/tree/3.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-03-25T12:02:26+00:00" - }, - { - "name": "symfony/string", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", - "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" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "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": "Symfony String component", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T12:08:07+00:00" - }, - { - "name": "symfony/yaml", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "zendframework/zend-code", - "version": "2.6.3", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "95033f061b083e16cdee60530ec260d7d628b887" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887", - "reference": "95033f061b083e16cdee60530ec260d7d628b887", - "shasum": "" - }, - "require": { - "php": "^5.5 || 7.0.0 - 7.0.4 || ^7.0.6", - "zendframework/zend-eventmanager": "^2.6 || ^3.0" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "^4.8.21", - "zendframework/zend-stdlib": "^2.7 || ^3.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides facilities to generate arbitrary code using an object oriented interface", - "homepage": "https://github.com/zendframework/zend-code", - "keywords": [ - "code", - "zf2" - ], - "support": { - "issues": "https://github.com/zendframework/zend-code/issues", - "source": "https://github.com/zendframework/zend-code/tree/release-2.6" - }, - "abandoned": "laminas/laminas-code", - "time": "2016-04-20T17:26:42+00:00" - }, - { - "name": "zendframework/zend-eventmanager", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "athletic/athletic": "^0.1", - "container-interop/container-interop": "^1.1.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", - "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0" - }, - "suggest": { - "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev", - "dev-develop": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\EventManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://github.com/zendframework/zend-eventmanager", - "keywords": [ - "event", - "eventmanager", - "events", - "zf2" - ], - "support": { - "issues": "https://github.com/zendframework/zend-eventmanager/issues", - "source": "https://github.com/zendframework/zend-eventmanager/tree/master" - }, - "abandoned": "laminas/laminas-eventmanager", - "time": "2018-04-25T15:33:34+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.3", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" - }, - "time": "2020-12-03T17:45:45+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" - }, - "time": "2020-06-27T14:33:11+00:00" - }, - { - "name": "phar-io/version", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.3" - }, - "time": "2020-11-30T09:21:21+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" - }, - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" - }, - "time": "2020-09-29T09:10:42+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:44:49+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-12-04T05:05:53+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:55:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/phpcpd", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-timer": "^5.0", - "sebastian/cli-parser": "^1.0", - "sebastian/version": "^3.0" - }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", - "support": { - "issues": "https://github.com/sebastianbergmann/phpcpd/issues", - "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-12-07T05:39:23+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:18:59+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.5.8", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", - "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": "2020-10-23T02:01:07+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" - }, - "time": "2020-07-08T17:02:28+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "islandora/crayfish-commons": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^7.3 || ^7.4" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/Gemini/phpunit.xml.dist b/Gemini/phpunit.xml.dist deleted file mode 100644 index 42ef5b47..00000000 --- a/Gemini/phpunit.xml.dist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - ./src - - - ./src/index.php - ./src/app.php - ./src/console.php - ./src/Migrations - - - - - - - - ./tests/ - - - - diff --git a/Gemini/src/Controller/GeminiController.php b/Gemini/src/Controller/GeminiController.php deleted file mode 100644 index 7f9f32a0..00000000 --- a/Gemini/src/Controller/GeminiController.php +++ /dev/null @@ -1,174 +0,0 @@ -urlMapper = $urlMapper; - $this->urlMinter = $urlMinter; - $this->urlGenerator = $urlGenerator; - } - - /** - * @param string $uuid - * @return \Symfony\Component\HttpFoundation\Response - */ - public function get($uuid) - { - $result = $this->urlMapper->getUrls($uuid); - if (empty($result)) { - return new Response("Could not locate URL pair for $uuid", 404); - } - return new JsonResponse($result, 200); - } - - /** - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function post(Request $request) - { - // Request contents are a UUID. - $uuid = $request->getContent(); - - if (empty($uuid)) { - return new Response( - "Requests to mint new URLS must contain a UUID in the request body", - 400 - ); - } - - $islandora_fedora_endpoint = $request->headers->get('X-Islandora-Fedora-Endpoint', ''); - - try { - return new Response( - $this->urlMinter->mint($uuid, $islandora_fedora_endpoint), - 200 - ); - } catch (\InvalidArgumentException $e) { - return new Response( - $e->getMessage(), - $e->getCode() - ); - } - } - - /** - * @param string $uuid - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function put($uuid, Request $request) - { - // Reject non json requests. - if (0 !== strpos($request->headers->get('Content-Type'), 'application/json')) { - return new Response("Invalid Content-Type. Expecting application/json", 400); - } - - // Parse request and reject malformed bodies. - $urls = json_decode($request->getContent(), true); - - if (!isset($urls['drupal'])) { - return new Response("Missing 'drupal' entry in request body.", 400); - } - - if (!isset($urls['fedora'])) { - return new Response("Missing 'fedora' entry in request body.", 400); - } - - // Save URL pair. - $is_new = $this->urlMapper->saveUrls( - $uuid, - $urls['drupal'], - $urls['fedora'] - ); - - // Return 201 or 204 depending on if a new record was created. - $response = new Response(null, $is_new ? 201 : 204); - if ($is_new) { - // Add a Location header if a new record was created. - $url = $this->urlGenerator->generate( - 'GET_uuid', - ['uuid' => $uuid], - UrlGenerator::ABSOLUTE_URL - ); - $response->headers->add(['Location' => $url]); - } - return $response; - } - - /** - * @param string $uuid - * @return \Symfony\Component\HttpFoundation\Response - */ - public function delete($uuid) - { - $deleted = $this->urlMapper->deleteUrls($uuid); - return new Response(null, $deleted ? 204 : 404); - } - - /** - * Find the opposite URI for the on provided in X-Islandora-URI. - * - * @param \Symfony\Component\HttpFoundation\Request $request - * The incoming request. - * - * @return \Symfony\Component\HttpFoundation\Response - * A response 200 with Location or 404. - */ - public function getByUri(Request $request) - { - if (!$request->headers->has('X-Islandora-URI')) { - return new Response('Require the X-Islandora-URI header', 400); - } - $uri = $request->headers->get('X-Islandora-URI'); - if (is_array($uri)) { - // Can only return one Location header. - $uri = reset($uri); - } - $uri = $this->urlMapper->findUrls($uri); - $headers = []; - if ($uri) { - $headers['Location'] = $uri; - } - return new Response(null, ($uri ? 200 : 404), $headers); - } -} diff --git a/Gemini/src/Migrations/Version20180530031926.php b/Gemini/src/Migrations/Version20180530031926.php deleted file mode 100644 index edf488b0..00000000 --- a/Gemini/src/Migrations/Version20180530031926.php +++ /dev/null @@ -1,57 +0,0 @@ -addSql( - 'DROP TABLE IF EXISTS Gemini;' - ); - - if ('mysql' == $this->connection->getDatabasePlatform()->getName()) { - $this->addSql( - 'CREATE TABLE Gemini (fedora_hash VARCHAR(128) NOT NULL, - drupal_hash VARCHAR(128) NOT NULL, uuid VARCHAR(36) NOT NULL, - drupal_uri LONGTEXT NOT NULL, fedora_uri LONGTEXT NOT NULL, - dateCreated DATETIME NOT NULL, dateUpdated DATETIME NOT NULL, - UNIQUE KEY(fedora_hash, drupal_hash), PRIMARY KEY(uuid)) - DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB' - ); - } elseif ('postgresql' == $this->connection->getDatabasePlatform()->getName()) { - $this->addSql( - 'CREATE TABLE Gemini ( - fedora_hash VARCHAR(128) NOT NULL, - drupal_hash VARCHAR(128) NOT NULL, - uuid VARCHAR(36) PRIMARY KEY, - drupal_uri TEXT NOT NULL, - fedora_uri TEXT NOT NULL, - dateCreated TIMESTAMP NOT NULL, - dateUpdated TIMESTAMP NOT NULL - );' - ); - $this->addSql( - 'CREATE UNIQUE INDEX fedora_drupal_hash ON Gemini (fedora_hash, drupal_hash);' - ); - } else { - $this->abortIf(true, "Only MySQL/MariaDB and PostgreSQL are supported."); - } - } - - public function down(Schema $schema) - { - // this down() migration is auto-generated, please modify it to your needs - $this->abortIf( - $this->connection->getDatabasePlatform()->getName() !== 'mysql', - 'Migration can only be executed safely on \'mysql\'.' - ); - $this->addSql('DROP TABLE Gemini'); - } -} diff --git a/Gemini/src/UrlMapper/UrlMapper.php b/Gemini/src/UrlMapper/UrlMapper.php deleted file mode 100644 index c71614a9..00000000 --- a/Gemini/src/UrlMapper/UrlMapper.php +++ /dev/null @@ -1,174 +0,0 @@ -connection = $connection; - $this->drupalDomain = $drupalDomain; - $this->fedoraDomain = $fedoraDomain; - } - - /** - * {@inheritDoc} - */ - public function getUrls($uuid) - { - $sql = 'SELECT drupal_uri as drupal, fedora_uri as fedora FROM Gemini WHERE uuid = :uuid'; - $result = $this->connection->fetchAssoc( - $sql, - ['uuid' => $uuid] - ); - - if (!empty($this->drupalDomain) && isset($result['drupal'])) { - $result['drupal'] = $this->replaceDomain($result['drupal'], $this->drupalDomain); - } - - if (!empty($this->fedoraDomain) && isset($result['fedora'])) { - $result['fedora'] = $this->replaceDomain($result['fedora'], $this->fedoraDomain); - } - - return $result; - } - - protected function replaceDomain($url, $domain) - { - $parts = parse_url($url); - return "$parts[scheme]://$domain$parts[path]"; - } - - /** - * {@inheritDoc} - */ - public function saveUrls( - $uuid, - $drupal_uri, - $fedora_uri - ) { - $this->connection->beginTransaction(); - // Hash incomming URIs - $fedora_hash = hash('sha512', $fedora_uri); - $drupal_hash = hash('sha512', $drupal_uri); - $now = date("Y-m-d H:i:s", time()); - $db_data = [ - 'uuid' => $uuid, - 'drupal_uri' => $drupal_uri, - 'fedora_uri' => $fedora_uri, - 'drupal_hash' => $drupal_hash, - 'fedora_hash' => $fedora_hash, - 'dateCreated' => $now, - 'dateUpdated' => $now, - ]; - - try { - // Try to insert first, and if the record already exists, update it. - try { - $this->connection->insert('Gemini', $db_data); - $this->connection->commit(); - return true; - } catch (UniqueConstraintViolationException $e) { - // We want to maintain the creation UNIX Timestamp - unset($db_data['dateCreated']); - unset($db_data['uuid']); - $this->connection->update('Gemini', $db_data, ['uuid' => $uuid]); - $this->connection->commit(); - return false; - } - } catch (\Exception $e) { - $this->connection->rollBack(); - throw $e; - } - } - - /** - * {@inheritDoc} - */ - public function deleteUrls($uuid) - { - $this->connection->beginTransaction(); - - try { - $count = $this->connection->delete( - 'Gemini', - ['uuid' => $uuid] - ); - - $this->connection->commit(); - - return $count > 0; - } catch (\Exception $e) { - $this->connection->rollBack(); - throw $e; - } - } - - /** - * {@inheritdoc} - */ - public function findUrls($uri) - { - $parts = parse_url($uri); - $path = $parts['path']; - - $query = - 'SELECT fedora_uri FROM Gemini WHERE drupal_uri LIKE :path union - SELECT drupal_uri FROM Gemini WHERE fedora_uri LIKE :path'; - - $result = $this->connection->fetchAssoc( - $query, - ['path' => "%$path"] - ); - - if (isset($result['fedora_uri'])) { - if (!empty($this->fedoraDomain)) { - $result['fedora_uri'] = $this->replaceDomain($result['fedora_uri'], $this->fedoraDomain); - } - $result['uri'] = $result['fedora_uri']; - unset($result['fedora_uri']); - } - - if (isset($result['drupal_uri'])) { - if (!empty($this->drupalDomain)) { - $result['drupal_uri'] = $this->replaceDomain($result['drupal_uri'], $this->drupalDomain); - } - $result['uri'] = $result['drupal_uri']; - unset($result['drupal_uri']); - } - - return $result; - } -} diff --git a/Gemini/src/UrlMapper/UrlMapperInterface.php b/Gemini/src/UrlMapper/UrlMapperInterface.php deleted file mode 100644 index 72901c1f..00000000 --- a/Gemini/src/UrlMapper/UrlMapperInterface.php +++ /dev/null @@ -1,63 +0,0 @@ -register(new IslandoraServiceProvider()); -$app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); -$app['debug'] = $app['crayfish.debug']; -$app['gemini.mapper'] = function ($app) { - return new UrlMapper( - $app['db'], - $app['crayfish.drupal_domain'], - $app['crayfish.fedora_domain'] - ); -}; -$app['gemini.minter'] = function ($app) { - return new UrlMinter(); -}; -$app['gemini.controller'] = function ($app) { - return new GeminiController( - $app['gemini.mapper'], - $app['gemini.minter'], - $app['url_generator'] - ); -}; - -$app->get('/by_uri', "gemini.controller:getByUri"); - -$app->get('/{uuid}', "gemini.controller:get"); - -$app->post('/', "gemini.controller:post"); - -$app->put('/{uuid}', "gemini.controller:put"); - -$app->delete('/{uuid}', "gemini.controller:delete"); - -return $app; diff --git a/Gemini/src/console.php b/Gemini/src/console.php deleted file mode 100644 index c286d60b..00000000 --- a/Gemini/src/console.php +++ /dev/null @@ -1,14 +0,0 @@ -getDefinition() - ->addOption(new InputOption('--env', '-e', InputOption::VALUE_REQUIRED, 'The Environment name.', 'dev')); -$console->setDispatcher($app['dispatcher']); - -return $console; diff --git a/Gemini/src/index.php b/Gemini/src/index.php deleted file mode 100644 index 3e23d477..00000000 --- a/Gemini/src/index.php +++ /dev/null @@ -1,4 +0,0 @@ -run(); diff --git a/Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php b/Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php deleted file mode 100644 index af18a309..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php +++ /dev/null @@ -1,76 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->deleteUrls(Argument::any()) - ->willReturn(0); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->delete("abc"); - - $this->assertTrue( - $response->getStatusCode() == 404, - "Response must be 404 when not found" - ); - } - - /** - * @covers ::__construct - * @covers ::delete - */ - public function testReturns204WhenDeleted() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->deleteUrls(Argument::any()) - ->willReturn(1); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->delete("abc"); - - $this->assertTrue( - $response->getStatusCode() == 204, - "Response must be 204 when deleted" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php b/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php deleted file mode 100644 index 5134edff..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php +++ /dev/null @@ -1,163 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->findUrls(Argument::any()) - ->willReturn(['uri' => 'abc']); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - $request->headers->add(['X-Islandora-URI' => 'blah']); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 200, - $response->getStatusCode(), - "Response must be 200 on success" - ); - $this->assertTrue( - $response->headers->has('Location'), - "Response must have Location header" - ); - $this->assertEquals( - 'abc', - $response->headers->get('Location'), - "Location header should be 'abc'" - ); - } - - /** - * @covers ::getByUri - */ - public function testGetByUriFailed() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->findUrls(Argument::any()) - ->willReturn([]); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - $request->headers->add(['X-Islandora-URI' => 'blah']); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 404, - $response->getStatusCode(), - "Response must be 200 on success" - ); - } - - /** - * @covers ::getByUri - */ - public function testGetByUriMultiple() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->findUrls('foo') - ->willReturn(['uri' => 'abc']); - $mapper->findUrls('bar') - ->willReturn(['uri' => 'oops']); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - $request->headers->add(['X-Islandora-URI' => ['foo', 'bar']]); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 200, - $response->getStatusCode(), - "Response must be 200 on success" - ); - $this->assertTrue( - $response->headers->has('Location'), - "Response must have Location header" - ); - $this->assertEquals( - 'abc', - $response->headers->get('Location'), - "Location header should be 'abc'" - ); - } - - /** - * @covers ::getByUri - */ - public function testGetByUriNoToken() - { - $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 400, - $response->getStatusCode(), - "Response must be 400 with no X-Islandora-URI header" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/GetTest.php b/Gemini/tests/Islandora/Gemini/Tests/GetTest.php deleted file mode 100644 index 8ea67256..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/GetTest.php +++ /dev/null @@ -1,76 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->getUrls(Argument::any()) - ->willReturn([]); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->get("abc"); - - $this->assertTrue( - $response->getStatusCode() == 404, - "Response must be 404 when not found" - ); - } - - /** - * @covers ::__construct - * @covers ::get - */ - public function testReturns200WhenFound() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->getUrls(Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->get("abc"); - - $this->assertTrue( - $response->getStatusCode() == 200, - "Response must be 200 when found" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/PostTest.php b/Gemini/tests/Islandora/Gemini/Tests/PostTest.php deleted file mode 100644 index 71821df6..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/PostTest.php +++ /dev/null @@ -1,107 +0,0 @@ -prophesize(UrlMapperInterface::class)->reveal(); - - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $request = Request::create( - "/", - "POST", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - '' - ); - - $response = $controller->post($request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 on empty request" - ); - - $request = Request::create( - "/", - "POST", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - 'abc' - ); - - $response = $controller->post($request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 on request with UUID of length < 8" - ); - } - - /** - * @covers ::__construct - * @covers ::post - */ - public function testReturns200OnSuccess() - { - $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); - - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $request = Request::create( - "/", - "POST", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - '5d150b3a-9d1b-437f-87a9-104b8cf15859' - ); - - $response = $controller->post($request); - - $this->assertTrue( - $response->getStatusCode() == 200, - "Response must be 200 when given a proper UUID" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/PutTest.php b/Gemini/tests/Islandora/Gemini/Tests/PutTest.php deleted file mode 100644 index b0f953dc..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/PutTest.php +++ /dev/null @@ -1,184 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->saveUrls(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(false); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $json_str = '{"drupal" : "http://localhost:8000/node/1?_format=jsonld", "fedora" : ' . - '"http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"}'; - - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - $json_str - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 204, - "Response must be 204 on update" - ); - } - - /** - * @covers ::__construct - * @covers ::put - */ - public function testReturns201OnCreation() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->saveUrls(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class); - $generator->generate(Argument::any(), Argument::any(), Argument::any()) - ->willReturn("http://localhost:8000/gemini/5d150b3a-9d1b-437f-87a9-104b8cf15859"); - $generator = $generator->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $json_str = '{"drupal" : "http://localhost:8000/node/1?_format=jsonld", "fedora" : ' . - '"http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"}'; - - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - $json_str - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 201, - "Response must be 201 on create" - ); - - $this->assertTrue( - $response->headers->has("Location"), - "201 response must contain Location header." - ); - } - - /** - * @covers ::__construct - * @covers ::put - */ - public function testReturns400OnMalformedRequest() - { - $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - // Test non-JSON - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - 'some garbage' - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 on non JSON requests" - ); - - // Test missing 'drupal' - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - '{"fedora" : "http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"}' - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 when 'drupal' entry is missing in request body" - ); - - // Test missing 'fedora' - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - '{"drupal" : "http://localhost:8000/node/1?_format=jsonld"}' - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 when 'fedora' entry is missing in request body" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php b/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php deleted file mode 100644 index 66f2be50..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php +++ /dev/null @@ -1,303 +0,0 @@ -prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['fedora' => 'foo', 'drupal' => 'bar']); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - $results['fedora'] == 'foo', - "getUrls() modified connection results. Actual: ${results['fedora']}. Expected: foo" - ); - $this->assertTrue( - $results['drupal'] == 'bar', - "getUrls() modified connection results. Actual: ${results['drupal']}. Expected: bar" - ); - - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } - - /** - * @covers ::__construct - * @covers ::getUrls - */ - public function testGetUrlsReturnsModifiedResultsIfConfigured() - { - // Simulate a record being returned. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['fedora' => 'http://exapmle.org/foo', 'drupal' => 'http://example.org/bar']); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - $results['fedora'] == 'http://fcrepo.example.org/foo', - "getUrls() disobeyed configuration. Actual: ${results['fedora']}. Expected: " . - "http://fcrepo.example.org/foo" - ); - $this->assertTrue( - $results['drupal'] == 'http://drupal.example.org/bar', - "getUrls() modified connection results. Actual: ${results['drupal']}. Expected: " . - "http://drupal.example.org/bar" - ); - - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrlsReturnsTrueOnCreation() - { - // Simulate a record being created. - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->insert(Argument::any(), Argument::any()) - ->willReturn(1); - $connection->commit()->shouldBeCalled(); - $connection->rollBack()->shouldNotBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertTrue( - $mapper->saveUrls("foo", "bar", "baz"), - "saveUrls() must return true when a new record is created" - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrlsReturnsFalseOnUpdate() - { - // Simulate a record being updated. - $exception = $this->prophesize(UniqueConstraintViolationException::class)->reveal(); - - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->insert(Argument::any(), Argument::any()) - ->willThrow($exception); - $connection->update(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(1); - $connection->commit()->shouldBeCalled(); - $connection->rollBack()->shouldNotBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertFalse( - $mapper->saveUrls("foo", "bar", "baz"), - "saveUrls() must return false when an existing record is updated" - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrlsRollsBackOnException() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->insert(Argument::any(), Argument::any()) - ->willThrow(new \Exception("")); - $connection->rollBack()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - $this->expectException(\Exception::class); - $mapper->saveUrls("foo", "bar", "baz"); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrlsReturnsTrueIfFound() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->delete(Argument::any(), Argument::any()) - ->willReturn(1); - $connection->commit()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertTrue( - $mapper->deleteUrls("foo"), - "deleteUrls() must return true when an existing record is deleted" - ); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrlsReturnsFalseIfNotFound() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->delete(Argument::any(), Argument::any()) - ->willReturn(0); - $connection->commit()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertFalse( - $mapper->deleteUrls("foo"), - "deleteUrls() must return false when no record is found." - ); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrlsRollsBackOnException() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->delete(Argument::any(), Argument::any()) - ->willThrow(new \Exception("")); - $connection->rollBack()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - $this->expectException(\Exception::class); - $mapper->deleteUrls("foo"); - } - - /** - * @covers ::findUrls - */ - public function testFindUrlsReturnsUnmodifiedIfNotConfigured() - { - // Simulate a record being returned. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['uri' => 'foo']); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - $results['uri'] == 'foo', - "getUrls() modified connection results. Actual: ${results['uri']}. Expected: foo" - ); - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } - - /** - * @covers ::findUrls - */ - public function testFindUrlsReturnsModifiedIfConfigured() - { - // Simulate a record being returned for Fedora. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['fedora_uri' => 'http://example.org/foo']); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - $results['uri'] == 'http://fcrepo.example.org/foo', - "getUrls() did not modify connection results. Actual: ${results['uri']}. Expected: " . - "http://fcrepo.example.org/foo" - ); - - // Simulate a record being returned for Drupal. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['drupal_uri' => 'http://example.org/bar']); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - $results['uri'] == 'http://drupal.example.org/bar', - "getUrls() did not modify connection results. Actual: ${results['uri']}. Expected: " . - "http://drupal.example.org/bar" - ); - - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php b/Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php deleted file mode 100644 index c8e02ec2..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php +++ /dev/null @@ -1,70 +0,0 @@ -expectException(\InvalidArgumentException::class, null, 400); - $minter->mint("", ""); - } - - /** - * @covers ::__construct - * @covers ::mint - */ - public function testThrowsExceptionOnShortUUID() - { - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - $this->expectException(\InvalidArgumentException::class, null, 400); - $minter->mint("abcd", "http://localhost:8080/fcrepo/rest/"); - } - - /** - * @covers ::__construct - * @covers ::mint - */ - public function testHandlesMissingTrailingSlashInBaseUrl() - { - $missing_slash = new UrlMinter("http://localhost:8080/fcrepo/rest"); - $first = $missing_slash->mint("5d150b3a-9d1b-437f-87a9-104b8cf15859", "http://localhost:8080/fcrepo/rest/"); - - $with_slash = new UrlMinter("http://localhost:8080/fcrepo/rest/"); - $second = $with_slash->mint("5d150b3a-9d1b-437f-87a9-104b8cf15859", "http://localhost:8080/fcrepo/rest/"); - - $this->assertTrue( - strcmp($first, $second) == 0, - "Minted URLs must be the same whether or not a trailing slash is in the base url." - ); - } - - /** - * @covers ::__construct - * @covers ::mint - */ - public function testMintsUrlWithPairTrees() - { - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - $expected = "http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"; - $actual = $minter->mint("5d150b3a-9d1b-437f-87a9-104b8cf15859", "http://localhost:8080/fcrepo/rest/"); - - $this->assertTrue( - strcmp($actual, $expected) == 0, - "Generated URL was not of he correct format. Actual: $actual. Expected: $expected" - ); - } -} diff --git a/Milliner/cfg/config.example.yaml b/Milliner/cfg/config.example.yaml index 89133ac3..20ceb36d 100644 --- a/Milliner/cfg/config.example.yaml +++ b/Milliner/cfg/config.example.yaml @@ -4,7 +4,6 @@ fedora_base_url: http://localhost:8080/fcrepo/rest # if drupal_base_url contains a path, be sure to include trailing slash # or relative paths will not resolve correctly. drupal_base_url: http://localhost:8000 -gemini_base_url: http://localhost:8000/gemini modified_date_predicate: http://schema.org/dateModified @@ -12,14 +11,6 @@ strip_format_jsonld: true debug: false -db.options: - driver: pdo_mysql - host: 127.0.0.1 - port: 3306 - dbname: gemini - user: changeme - password: changeme - log: # Valid log levels are: # DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY, NONE diff --git a/Milliner/composer.json b/Milliner/composer.json index 877e9d31..d1906325 100644 --- a/Milliner/composer.json +++ b/Milliner/composer.json @@ -44,6 +44,7 @@ "symfony/css-selector": "^3.0", "squizlabs/php_codesniffer": "^3.0", "sebastian/phpcpd": "^6.0", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.0", + "phpspec/prophecy-phpunit": "^2.0" } } diff --git a/Milliner/composer.lock b/Milliner/composer.lock index e9ff0d8e..7613376e 100644 --- a/Milliner/composer.lock +++ b/Milliner/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8317f2132a61f0f74df3da3aa07466d1", + "content-hash": "c8a35b28c6c91a2f29401eb874997e63", "packages": [ { "name": "doctrine/cache", @@ -459,16 +459,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -508,9 +508,9 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", @@ -593,12 +593,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora/chullo.git", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287" + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/chullo/zipball/6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287", + "url": "https://api.github.com/repos/Islandora/chullo/zipball/7f7df8847844ab478f65de8377c5678d037cb5e3", + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3", "shasum": "" }, "require": { @@ -647,7 +647,7 @@ "issues": "https://github.com/Islandora/documentation/issues", "source": "https://github.com/Islandora/chullo/tree/dev" }, - "time": "2020-12-11T21:38:08+00:00" + "time": "2021-02-16T15:51:00+00:00" }, { "name": "islandora/crayfish-commons", @@ -655,12 +655,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9" + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d7c0044723c2089f7757fb5c9dd523397938a8e9", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9", + "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", "shasum": "" }, "require": { @@ -671,15 +671,16 @@ "pimple/pimple": "~3.0", "psr/log": "^1.0.1", "silex/silex": "^2.0", - "symfony/http-foundation": "^3.2.6", - "symfony/security": "^3.2", - "symfony/yaml": "^3.2" + "symfony/http-foundation": "^3.4 || ^4.4", + "symfony/security": "^3.4 || ^4.4", + "symfony/yaml": "^3.4 || ^4.4" }, "require-dev": { "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.0", - "sebastian/phpcpd": "^3.0", - "squizlabs/php_codesniffer": "^2.0" + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "sebastian/phpcpd": "^6.0", + "squizlabs/php_codesniffer": "^3.0" }, "default-branch": true, "type": "library", @@ -710,7 +711,7 @@ "issues": "https://github.com/Islandora/documentation/issues", "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" }, - "time": "2020-11-12T23:33:17+00:00" + "time": "2021-03-12T18:49:29+00:00" }, { "name": "ml/iri", @@ -818,16 +819,16 @@ }, { "name": "monolog/monolog", - "version": "1.25.5", + "version": "1.26.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", "shasum": "" }, "require": { @@ -843,7 +844,7 @@ "graylog2/gelf-php": "~1.0", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", + "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "~4.5", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", @@ -863,11 +864,6 @@ "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -893,7 +889,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.25.5" + "source": "https://github.com/Seldaek/monolog/tree/1.26.0" }, "funding": [ { @@ -905,7 +901,7 @@ "type": "tidelift" } ], - "time": "2020-07-23T08:35:51+00:00" + "time": "2020-12-14T12:56:38+00:00" }, { "name": "namshi/jose", @@ -976,21 +972,21 @@ }, { "name": "pimple/pimple", - "version": "v3.3.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" + "reference": "86406047271859ffc13424a048541f4531f53601" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/86406047271859ffc13424a048541f4531f53601", + "reference": "86406047271859ffc13424a048541f4531f53601", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1" }, "require-dev": { "symfony/phpunit-bridge": "^5.0" @@ -998,7 +994,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "3.4.x-dev" } }, "autoload": { @@ -1023,33 +1019,28 @@ "dependency injection" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + "source": "https://github.com/silexphp/Pimple/tree/v3.4.0" }, - "time": "2020-11-24T20:35:42+00:00" + "time": "2021-03-06T08:28:00+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1062,7 +1053,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1076,9 +1067,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/http-message", @@ -1229,65 +1220,62 @@ }, { "name": "silex/silex", - "version": "v2.2.4", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/silexphp/Silex.git", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057" + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/6bc31c1b8c4ef614a7115320fd2d3b958032f131", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131", "shasum": "" }, "require": { - "php": ">=5.5.9", - "pimple/pimple": "~3.0", - "symfony/event-dispatcher": "~2.8|^3.0", - "symfony/http-foundation": "~2.8|^3.0", - "symfony/http-kernel": "~2.8|^3.0", - "symfony/routing": "~2.8|^3.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" + "php": ">=7.1.3", + "pimple/pimple": "^3.0", + "symfony/event-dispatcher": "^4.0", + "symfony/http-foundation": "^4.0", + "symfony/http-kernel": "^4.0", + "symfony/routing": "^4.0" }, "replace": { "silex/api": "self.version", "silex/providers": "self.version" }, "require-dev": { - "doctrine/dbal": "~2.2", + "doctrine/dbal": "^2.2", "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "~5", - "symfony/asset": "~2.8|^3.0", - "symfony/browser-kit": "~2.8|^3.0", - "symfony/config": "~2.8|^3.0", - "symfony/css-selector": "~2.8|^3.0", - "symfony/debug": "~2.8|^3.0", - "symfony/doctrine-bridge": "~2.8|^3.0", - "symfony/dom-crawler": "~2.8|^3.0", - "symfony/expression-language": "~2.8|^3.0", - "symfony/finder": "~2.8|^3.0", - "symfony/form": "~2.8|^3.0", - "symfony/intl": "~2.8|^3.0", - "symfony/monolog-bridge": "~2.8|^3.0", - "symfony/options-resolver": "~2.8|^3.0", + "swiftmailer/swiftmailer": "^5", + "symfony/asset": "^4.0", + "symfony/browser-kit": "^4.0", + "symfony/config": "^4.0", + "symfony/css-selector": "^4.0", + "symfony/debug": "^4.0", + "symfony/doctrine-bridge": "^4.0", + "symfony/dom-crawler": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/finder": "^4.0", + "symfony/form": "^4.0", + "symfony/intl": "^4.0", + "symfony/monolog-bridge": "^4.0", + "symfony/options-resolver": "^4.0", "symfony/phpunit-bridge": "^3.2", - "symfony/process": "~2.8|^3.0", - "symfony/security": "~2.8|^3.0", - "symfony/serializer": "~2.8|^3.0", - "symfony/translation": "~2.8|^3.0", - "symfony/twig-bridge": "~2.8|^3.0", - "symfony/validator": "~2.8|^3.0", - "symfony/var-dumper": "~2.8|^3.0", - "symfony/web-link": "^3.3", - "twig/twig": "~1.28|~2.0" + "symfony/process": "^4.0", + "symfony/security": "^4.0", + "symfony/serializer": "^4.0", + "symfony/translation": "^4.0", + "symfony/twig-bridge": "^4.0", + "symfony/validator": "^4.0", + "symfony/var-dumper": "^4.0", + "symfony/web-link": "^4.0", + "twig/twig": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -1316,23 +1304,97 @@ ], "support": { "issues": "https://github.com/silexphp/Silex/issues", - "source": "https://github.com/silexphp/Silex/tree/v2.2.4" + "source": "https://github.com/silexphp/Silex/tree/v2.3.0" }, "abandoned": "symfony/flex", - "time": "2018-03-16T23:34:20+00:00" + "time": "2018-04-20T05:17:01+00:00" + }, + { + "name": "symfony/contracts", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "d3636025e8253c6144358ec0a62773cae588395b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", + "reference": "d3636025e8253c6144358ec0a62773cae588395b", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "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": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/contracts/tree/master" + }, + "time": "2019-04-27T14:29:50+00:00" }, { "name": "symfony/debug", - "version": "v4.4.17", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "65fe7b49868378319b82da3035fb30801b931c47" + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/65fe7b49868378319b82da3035fb30801b931c47", - "reference": "65fe7b49868378319b82da3035fb30801b931c47", + "url": "https://api.github.com/repos/symfony/debug/zipball/157bbec4fd773bae53c5483c50951a5530a2cc16", + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16", "shasum": "" }, "require": { @@ -1369,10 +1431,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.17" + "source": "https://github.com/symfony/debug/tree/v4.4.20" }, "funding": [ { @@ -1388,7 +1450,7 @@ "type": "tidelift" } ], - "time": "2020-10-28T20:42:29+00:00" + "time": "2021-01-28T16:54:48+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1459,31 +1521,38 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.47", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c352647244bd376bf7d31efbd5401f13f50dad0c", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1512,10 +1581,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "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/v3.4.47" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.20" }, "funding": [ { @@ -1531,29 +1600,110 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T09:09:26+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-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/v1.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:19:58+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.47", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02d968647fe61b2f419a8dc70c468a9d30a48d3a", + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", "autoload": { @@ -1578,10 +1728,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v3.4.47" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.20" }, "funding": [ { @@ -1597,35 +1747,37 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-02-25T17:11:33+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.47", + "version": "v4.2.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5" + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8a7c5ef599466af6e972c705507f815df9c490ae", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/contracts": "^1.0.2", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "~4.1", + "symfony/http-foundation": "^4.1.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-php56": "~1.8" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.2", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -1633,31 +1785,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", + "symfony/browser-kit": "~3.4|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.2", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/var-dumper": "^4.1.1" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { "psr-4": { "Symfony\\Component\\HttpKernel\\": "" @@ -1683,7 +1838,64 @@ "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.47" + "source": "https://github.com/symfony/http-kernel/tree/v4.2.12" + }, + "time": "2019-11-13T08:51:34+00:00" + }, + { + "name": "symfony/inflector", + "version": "v5.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/string": "~5.1.10|^5.2.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts words between their singular and plural forms (English only)", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "support": { + "source": "https://github.com/symfony/inflector/tree/v5.2.4" }, "funding": [ { @@ -1699,31 +1911,47 @@ "type": "tidelift" } ], - "time": "2020-11-27T08:42:42+00:00" + "time": "2021-01-10T16:29:19+00:00" }, { - "name": "symfony/inflector", - "version": "v5.2.0", + "name": "symfony/mime", + "version": "v5.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36" + "url": "https://github.com/symfony/mime.git", + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/ba33a08d608c5b26ef768b6652876098dd3ace36", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36", + "url": "https://api.github.com/repos/symfony/mime/zipball/554ba128f1955038b45db5e1fa7e93bfc683b139", + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", - "symfony/string": "^5.1" + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Inflector\\": "" + "Symfony\\Component\\Mime\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1735,26 +1963,22 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Inflector Component", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" + "mime", + "mime-type" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.0" + "source": "https://github.com/symfony/mime/tree/v5.2.5" }, "funding": [ { @@ -1770,20 +1994,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2021-03-07T16:08:20+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { @@ -1795,7 +2019,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1833,7 +2057,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" }, "funding": [ { @@ -1849,20 +2073,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", "shasum": "" }, "require": { @@ -1874,7 +2098,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1914,7 +2138,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" }, "funding": [ { @@ -1930,20 +2154,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", "shasum": "" }, "require": { @@ -1957,7 +2181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2001,7 +2225,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1" }, "funding": [ { @@ -2017,20 +2241,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { @@ -2042,7 +2266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2085,7 +2309,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" }, "funding": [ { @@ -2101,20 +2325,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { @@ -2126,7 +2350,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2165,7 +2389,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" }, "funding": [ { @@ -2181,7 +2405,7 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-php56", @@ -2321,16 +2545,16 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, "require": { @@ -2339,7 +2563,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2377,7 +2601,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" }, "funding": [ { @@ -2393,20 +2617,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { @@ -2415,7 +2639,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2460,7 +2684,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" }, "funding": [ { @@ -2476,20 +2700,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/property-access", - "version": "v4.4.17", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c" + "reference": "94a1d9837396c71a0d8c31686c16693a15651622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/ab8184f093095b40c3e7688bc4eb1d0484da327c", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c", + "url": "https://api.github.com/repos/symfony/property-access/zipball/94a1d9837396c71a0d8c31686c16693a15651622", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622", "shasum": "" }, "require": { @@ -2525,7 +2749,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony PropertyAccess Component", + "description": "Provides functions to read and write from/to an object or array using a simple string notation", "homepage": "https://symfony.com", "keywords": [ "access", @@ -2539,7 +2763,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.17" + "source": "https://github.com/symfony/property-access/tree/v4.4.20" }, "funding": [ { @@ -2555,38 +2779,38 @@ "type": "tidelift" } ], - "time": "2020-10-31T22:44:29+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/routing", - "version": "v3.4.47", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", + "url": "https://api.github.com/repos/symfony/routing/zipball/69919991c845b34626664ddc9b3aef9d09d2a5df", + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "^1.10.4", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -2618,7 +2842,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ "router", @@ -2627,7 +2851,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" + "source": "https://github.com/symfony/routing/tree/v4.4.20" }, "funding": [ { @@ -2643,7 +2867,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-02-22T15:37:04+00:00" }, { "name": "symfony/security", @@ -2742,16 +2966,16 @@ }, { "name": "symfony/string", - "version": "v5.2.0", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" + "reference": "4e78d7d47061fa183639927ec40d607973699609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", + "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", + "reference": "4e78d7d47061fa183639927ec40d607973699609", "shasum": "" }, "require": { @@ -2794,7 +3018,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony String component", + "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", @@ -2805,7 +3029,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0" + "source": "https://github.com/symfony/string/tree/v5.2.4" }, "funding": [ { @@ -2821,31 +3045,31 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2021-02-16T10:20:28+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.47", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" + "reference": "29e61305e1c79d25f71060903982ead8f533e267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", + "url": "https://api.github.com/repos/symfony/yaml/zipball/29e61305e1c79d25f71060903982ead8f533e267", + "reference": "29e61305e1c79d25f71060903982ead8f533e267", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "symfony/console": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -2873,10 +3097,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" + "source": "https://github.com/symfony/yaml/tree/v4.4.20" }, "funding": [ { @@ -2892,7 +3116,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-02-22T15:36:50+00:00" } ], "packages-dev": [ @@ -3025,16 +3249,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.3", + "version": "v4.10.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", "shasum": "" }, "require": { @@ -3075,9 +3299,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" }, - "time": "2020-12-03T17:45:45+00:00" + "time": "2020-12-20T10:01:03+00:00" }, { "name": "phar-io/manifest", @@ -3141,16 +3365,16 @@ }, { "name": "phar-io/version", - "version": "3.0.3", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -3186,9 +3410,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.3" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-11-30T09:21:21+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -3350,16 +3574,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.1", + "version": "1.12.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { @@ -3371,7 +3595,7 @@ }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { @@ -3411,9 +3635,61 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" }, - "time": "2020-09-29T09:10:42+00:00" + "time": "2020-12-19T10:15:11+00:00" + }, + { + "name": "phpspec/prophecy-phpunit", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy-phpunit.git", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "phpspec/prophecy": "^1.3", + "phpunit/phpunit": "^9.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\PhpUnit\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integrating the Prophecy mocking library in PHPUnit test cases", + "homepage": "http://phpspec.net", + "keywords": [ + "phpunit", + "prophecy" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy-phpunit/issues", + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" + }, + "time": "2020-07-09T08:33:42+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3735,16 +4011,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.0", + "version": "9.5.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", "shasum": "" }, "require": { @@ -3822,7 +4098,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" }, "funding": [ { @@ -3834,7 +4110,7 @@ "type": "github" } ], - "time": "2020-12-04T05:05:53+00:00" + "time": "2021-02-02T14:45:58+00:00" }, { "name": "sebastian/cli-parser", @@ -5053,16 +5329,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.17", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e" + "reference": "be133557f1b0e6672367325b508e65da5513a311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/30ad9ac96a01913195bf0328d48e29d54fa53e6e", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/be133557f1b0e6672367325b508e65da5513a311", + "reference": "be133557f1b0e6672367325b508e65da5513a311", "shasum": "" }, "require": { @@ -5103,10 +5379,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.17" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.20" }, "funding": [ { @@ -5122,7 +5398,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" + "time": "2021-02-14T12:29:41+00:00" }, { "name": "theseer/tokenizer", @@ -5176,30 +5452,35 @@ }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -5222,10 +5503,10 @@ "validate" ], "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], diff --git a/Milliner/src/Controller/MillinerController.php b/Milliner/src/Controller/MillinerController.php index 14d2be03..f5babe21 100644 --- a/Milliner/src/Controller/MillinerController.php +++ b/Milliner/src/Controller/MillinerController.php @@ -50,6 +50,8 @@ public function saveNode($uuid, Request $request) return new Response("Expected JSONLD url in Content-Location header", 400); } + $this->log->debug("JSONLD URL: $jsonld_url"); + $this->log->debug("FEDORA ENDPOINT: $islandora_fedora_endpoint"); try { $response = $this->milliner->saveNode( $uuid, @@ -77,10 +79,12 @@ public function saveNode($uuid, Request $request) public function deleteNode($uuid, Request $request) { $token = $request->headers->get("Authorization", null); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); try { $response = $this->milliner->deleteNode( $uuid, + $islandora_fedora_endpoint, $token ); @@ -104,6 +108,7 @@ public function saveMedia($source_field, Request $request) { $token = $request->headers->get("Authorization", null); $json_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); if (empty($json_url)) { return new Response("Expected JSON url in Content-Location header", 400); @@ -113,6 +118,7 @@ public function saveMedia($source_field, Request $request) $response = $this->milliner->saveMedia( $source_field, $json_url, + $islandora_fedora_endpoint, $token ); @@ -169,21 +175,18 @@ public function saveExternal($uuid, Request $request) public function createNodeVersion($uuid, Request $request) { $token = $request->headers->get("Authorization", null); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + try { - $urls = $this->milliner->getGeminiUrls($uuid, $token); - if (!empty($urls)) { - $fedora_url = $urls['fedora']; - $response = $this->milliner->createVersion( - $fedora_url, - $token - ); - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } else { - return new Response(404); - } + $response = $this->milliner->createVersion( + $uuid, + $islandora_fedora_endpoint, + $token + ); + return new Response( + $response->getBody(), + $response->getStatusCode() + ); } catch (\Exception $e) { $this->log->error("", ['Exception' => $e]); $code = $e->getCode() == 0 ? 500 : $e->getCode(); @@ -200,16 +203,13 @@ public function createMediaVersion($source_field, Request $request) { $token = $request->headers->get("Authorization", null); $json_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - if (empty($json_url)) { - $this->log->error("json url is EMPTY"); - return new Response("Expected JSON url in Content-Location header", 400); - } try { - $urls = $this->milliner->getFileFromMedia($source_field, $json_url, $token); - $fedora_file_url = $urls['fedora']; - $response = $this->milliner->createVersion( - $fedora_file_url, + $response = $this->milliner->createMediaVersion( + $source_field, + $json_url, + $islandora_fedora_endpoint, $token ); return new Response( diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 1de11fb1..58590a60 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -3,10 +3,11 @@ namespace Islandora\Milliner\Service; use GuzzleHttp\Client; +use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Psr\Log\LoggerInterface; use \DateTime; @@ -26,9 +27,9 @@ class MillinerService implements MillinerServiceInterface protected $drupal; /** - * @var \Islandora\Crayfish\Commons\Client\GeminiClient + * @var \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface */ - protected $gemini; + protected $mapper; /** * @var \Psr\Log\LoggerInterface @@ -45,12 +46,17 @@ class MillinerService implements MillinerServiceInterface */ protected $stripFormatJsonld; + /** + * @var bool + */ + protected $fedora6; + /** * MillinerService constructor. * * @param \Islandora\Chullo\IFedoraApi $fedora * @param \GuzzleHttp\Client - * @param \Islandora\Crayfish\Commons\Client\GeminiClient + * @param \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface * @param \Psr\Log\LoggerInterface $log * @param string $modifiedDatePredicate * @param string $stripFormatJsonld @@ -58,17 +64,19 @@ class MillinerService implements MillinerServiceInterface public function __construct( IFedoraApi $fedora, Client $drupal, - GeminiClient $gemini, + EntityMapperInterface $mapper, LoggerInterface $log, $modifiedDatePredicate, - $stripFormatJsonld + $stripFormatJsonld, + $fedora6 ) { $this->fedora = $fedora; $this->drupal = $drupal; - $this->gemini = $gemini; + $this->mapper = $mapper; $this->log = $log; $this->modifiedDatePredicate = $modifiedDatePredicate; $this->stripFormatJsonld = $stripFormatJsonld; + $this->fedora6 = $fedora6; } /** @@ -80,21 +88,23 @@ public function saveNode( $islandora_fedora_endpoint, $token = null ) { - $urls = $this->gemini->getUrls($uuid, $token); + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; - if (empty($urls)) { + $response = $this->fedora->getResourceHeaders($fedora_url); + if ($response->getStatusCode() == "404") { + $this->log->debug("GOT A 404"); return $this->createNode( - $uuid, - rtrim($jsonld_url, '?_format=jsonld'), $jsonld_url, - $islandora_fedora_endpoint, + $fedora_url, $token ); } else { + $this->log->debug("DID NOT GET 404"); return $this->updateNode( - $urls['drupal'], $jsonld_url, - $urls['fedora'], + $fedora_url, $token ); } @@ -103,10 +113,8 @@ public function saveNode( /** * Creates a new LDP-RS in Fedora from a Node. * - * @param string $uuid - * @param string $entity_url * @param string $jsonld_url - * @param string $islandora_fedora_endpoint + * @param string $fedora_url * @param string $token * * @return \GuzzleHttp\Psr7\Response @@ -115,15 +123,10 @@ public function saveNode( * @throws \GuzzleHttp\Exception\RequestException */ protected function createNode( - $uuid, - $entity_url, $jsonld_url, - $islandora_fedora_endpoint, + $fedora_url, $token = null ) { - // Mint a new Fedora URL. - $fedora_url = $this->gemini->mintFedoraUrl($uuid, $token, $islandora_fedora_endpoint); - // Get the jsonld from Drupal. $headers = empty($token) ? [] : ['Authorization' => $token]; $drupal_response = $this->drupal->get( @@ -136,7 +139,7 @@ protected function createNode( true ); - $subject_url = $this->stripFormatJsonld ? $entity_url : $jsonld_url; + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; // Mash it into the shape Fedora accepts. $jsonld = $this->processJsonld( @@ -148,6 +151,8 @@ protected function createNode( // Save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; $headers['Prefer'] = 'return=minimal; handling=lenient'; + $this->log->debug("HEADERS " . json_encode($headers)); + $this->log->debug("FEDORA URL " . $fedora_url); $response = $this->fedora->saveResource( $fedora_url, json_encode($jsonld), @@ -163,14 +168,6 @@ protected function createNode( ); } - // Map the URLS. - $this->gemini->saveUrls( - $uuid, - $subject_url, - $fedora_url, - $token - ); - // Return the response from Fedora. return $response; } @@ -178,7 +175,6 @@ protected function createNode( /** * Updates an existing LDP-RS in Fedora from a Node. * - * @param string $entity_url * @param string $jsonld_url * @param string $fedora_url * @param string $token @@ -189,15 +185,17 @@ protected function createNode( * @throws \GuzzleHttp\Exception\RequestException */ protected function updateNode( - $entity_url, $jsonld_url, $fedora_url, $token = null ) { - // Get the RDF from Fedora. $headers = empty($token) ? [] : ['Authorization' => $token]; $headers['Accept'] = 'application/ld+json'; + if ($this->fedora6) { + $prefer = 'return=representation; omit="http://fedora.info/definitions/v4/repository#ServerManaged"'; + $headers['Prefer'] = $prefer; + } $fedora_response = $this->fedora->getResource( $fedora_url, $headers @@ -214,8 +212,10 @@ protected function updateNode( } // Strip off the W/ prefix to make the ETag strong. - $etags = $fedora_response->getHeader("ETag"); - $etag = ltrim(reset($etags), "W/"); + $state_tokens = $fedora_response->getHeader("X-State-Token"); + $state_token = '"' . ltrim(reset($state_tokens)) . '"'; + + $this->log->debug("FEDORA State Token: $state_token"); // Get the modified date from the RDF. $fedora_jsonld = json_decode( @@ -245,7 +245,10 @@ protected function updateNode( ); // Mash it into the shape Fedora accepts. - $subject_url = $this->stripFormatJsonld ? $entity_url : $jsonld_url; + $subject_url = $this->getLinkHeader($drupal_response, "describes"); + if (empty($subject_url)) { + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; + } $drupal_jsonld = $this->processJsonld( $drupal_jsonld, $subject_url, @@ -267,8 +270,11 @@ protected function updateNode( // Conditionally save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; - $headers['Prefer'] = 'return=minimal; handling=lenient'; - $headers['If-Match'] = $etag; + $headers['Prefer'] = 'handling=lenient'; + if (!$this->fedora6) { + $headers['Prefer'] .= ';received=minimal'; + } + $headers['X-If-State-Match'] = $state_token; $response = $this->fedora->saveResource( $fedora_url, json_encode($drupal_jsonld), @@ -299,17 +305,27 @@ protected function updateNode( */ protected function processJsonld(array $jsonld, $drupal_url, $fedora_url) { + $this->log->debug("DRUPAL URL: $drupal_url"); + $this->log->debug("FEDORA URL: $fedora_url"); + $this->log->debug("BEFORE: " . json_encode($jsonld)); // Strip out everything other than the resource in question. + // Ignore http/https. + $parts = parse_url($drupal_url); + $subject_url = $parts['host'] . $parts['path']; $resource = array_filter( $jsonld['@graph'], - function (array $elem) use ($drupal_url) { - return $elem['@id'] == $drupal_url; + function (array $elem) use ($subject_url) { + $parts = parse_url($elem['@id']); + $other_url = $parts['host'] . $parts['path']; + return $other_url == $subject_url; } ); // Put in an fedora url for the resource. $resource[0]['@id'] = $fedora_url; + + $this->log->debug("AFTER: " . json_encode($resource)); return $resource; } @@ -374,43 +390,13 @@ protected function getModifiedTimestamp(array $jsonld) public function saveMedia( $source_field, $json_url, + $islandora_fedora_endpoint, $token = null ) { - $headers = empty($token) ? [] : ['Authorization' => $token]; - $urls = $this->getFileFromMedia($source_field, $json_url, $token); - $fedora_file_url = $urls['fedora']; - $jsonld_url = $urls['jsonld']; - - // Now look for the 'describedby' link header on the file in Fedora. - // I'm using the drupal http client because I have the full - // URI and need to squash redirects in case of external content. - $fedora_response = $this->drupal->head( - $fedora_file_url, - ['allow_redirects' => false, 'headers' => $headers] - ); - $status = $fedora_response->getStatusCode(); - - if ($status != 200 && $status != 307) { - $reason = $fedora_response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `HEAD $fedora_file_url` resulted in a `$status $reason` response: " . - $fedora_response->getBody(), - $status - ); - } - - $fedora_url = $this->getLinkHeader($fedora_response, "describedby"); - if (empty($fedora_url)) { - throw new \RuntimeException( - "Cannot parse 'describedby' link header from response to `HEAD $fedora_file_url`", - 500 - ); - } - + $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); return $this->updateNode( - $urls['drupal'], - $jsonld_url, - $fedora_url, + $urls['jsonld'], + $urls['fedora'], $token ); } @@ -441,36 +427,30 @@ protected function getLinkHeader($response, $rel_name, $type = null) */ public function deleteNode( $uuid, + $islandora_fedora_endpoint, $token = null ) { - $urls = $this->gemini->getUrls($uuid, $token); - - if (!empty($urls)) { - $fedora_url = $urls['fedora']; - $headers = empty($token) ? [] : ['Authorization' => $token]; - $response = $this->fedora->deleteResource( - $fedora_url, - $headers - ); - - $status = $response->getStatusCode(); - if (!in_array($status, [204, 410, 404])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `DELETE $fedora_url` resulted in a `$status $reason` response: " . - $response->getBody(), - $status - ); - } - } + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; - $gemini_success = $this->gemini->deleteUrls($uuid, $token); + $headers = empty($token) ? [] : ['Authorization' => $token]; + $response = $this->fedora->deleteResource( + $fedora_url, + $headers + ); - if ($gemini_success) { - return new Response(204); + $status = $response->getStatusCode(); + if (!in_array($status, [204, 410, 404])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `DELETE $fedora_url` resulted in a `$status $reason` response: " . + $response->getBody(), + $status + ); } - return new Response(isset($status) ? $status : 404); + return new Response($status); } /** @@ -482,14 +462,25 @@ public function saveExternal( $islandora_fedora_endpoint, $token = null ) { - // Mint a new Fedora URL. - $fedora_url = $this->gemini->mintFedoraUrl($uuid, $token, $islandora_fedora_endpoint); + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; - $mimetype = $this->drupal->head( - $external_url, - ['headers' => $headers] - )->getHeader('Content-Type')[0]; + // Try it with an without auth b/c files can be public or private. + try { + $drupal_response = $this->drupal->head( + $external_url, + ['headers' => $headers] + ); + } catch (ClientException $e) { + $this->log->debug("GOT {$e->getCode()}, TRYING WIHTOUT AUTH HEADER"); + $drupal_response = $this->drupal->head( + $external_url, + ['headers' => []] + ); + } + $mimetype = $drupal_response->getHeader('Content-Type')[0]; // Save it in Fedora as external content. $external_rel = "http://fedora.info/definitions/fcrepo#ExternalContent"; @@ -510,26 +501,22 @@ public function saveExternal( ); } - // Map the URLS. - $this->gemini->saveUrls( - $uuid, - $external_url, - $fedora_url, - $token - ); - // Return the response from Fedora. return $response; } /** - * Creates a new LDP-RS in Fedora from a Node. * {@inheritDoc} */ public function createVersion( - $fedora_url, + $uuid, + $islandora_fedora_endpoint, $token = null ) { + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; + $headers = empty($token) ? [] : ['Authorization' => $token]; $date = new DateTime(); $timestamp = $date->format("D, d M Y H:i:s O"); @@ -560,12 +547,44 @@ public function createVersion( /** * {@inheritDoc} */ - public function getFileFromMedia( + public function createMediaVersion( $source_field, $json_url, + $islandora_fedora_endpoint, $token = null ) { - // First get the media json from Drupal. + $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); + $fedora_url = $urls['fedora']; + + $date = new DateTime(); + $timestamp = $date->format("D, d M Y H:i:s O"); + // create version in Fedora. + try { + $response = $this->fedora->createVersion( + $fedora_url, + $timestamp, + null, + $headers + ); + $status = $response->getStatusCode(); + if (!in_array($status, [201])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `POST $fedora_url` resulted in `$status $reason` response: " . + $response->getBody(), + $status + ); + } + // Return the response from Fedora. + return $response; + } catch (Exception $e) { + $this->log->error('Caught exception when creating version: ', $e->getMessage(), "\n"); + } + } + + protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token = null) + { + // GET request for link headers and file UUID. $headers = empty($token) ? [] : ['Authorization' => $token]; $drupal_response = $this->drupal->get( $json_url, @@ -573,6 +592,21 @@ public function getFileFromMedia( ); $jsonld_url = $this->getLinkHeader($drupal_response, "alternate", "application/ld+json"); + if (empty($jsonld_url)) { + throw new \RuntimeException( + "Cannot parse 'alternate' link header from response to `HEAD $json_url`", + 500 + ); + } + + $drupal_url = $this->getLinkHeader($drupal_response, "describes"); + if (empty($drupal_url)) { + throw new \RuntimeException( + "Cannot parse 'describes' link header from response to `HEAD $json_url`", + 500 + ); + } + $media_json = json_decode( $drupal_response->getBody(), true @@ -586,26 +620,43 @@ public function getFileFromMedia( } $file_uuid = $media_json[$source_field][0]['target_uuid']; - // Get the file's LDP-NR counterpart in Fedora. - $urls = $this->gemini->getUrls($file_uuid, $token); - if (empty($urls)) { - $file_url = $media_json[$source_field][0]['url']; + // Construct the fedora url. + // Try to handle flysystem files first. + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $pieces = explode("_flysystem/fedora/", $drupal_url); + if (count($pieces) > 1) { + $fedora_file_path = end($pieces); + } else { + $fedora_file_path = $this->mapper->getFedoraPath($file_uuid); + } + $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path"; + + // Now look for the 'describedby' link header on the file in Fedora. + // I'm using the drupal http client because I have the full + // URI and need to squash redirects in case of external content. + $fedora_response = $this->drupal->head( + $fedora_file_url, + ['allow_redirects' => false, 'headers' => $headers] + ); + $status = $fedora_response->getStatusCode(); + + if ($status != 200 && $status != 307) { + $reason = $fedora_response->getReasonPhrase(); throw new \RuntimeException( - "$file_url has not been mapped in Gemini with uuid $file_uuid", - 404 + "Client error: `HEAD $fedora_file_url` resulted in a `$status $reason` response: " . + $fedora_response->getBody(), + $status ); } - return ['fedora'=>$urls['fedora'], 'jsonld' =>$jsonld_url, 'drupal'=>$urls['drupal']]; - } - /** - * {@inheritDoc} - */ - public function getGeminiUrls( - $uuid, - $token = null - ) { - $urls = $this->gemini->getUrls($uuid, $token); - return $urls; + $fedora_url = $this->getLinkHeader($fedora_response, "describedby"); + if (empty($fedora_url)) { + throw new \RuntimeException( + "Cannot parse 'describedby' link header from response to `HEAD $fedora_file_url`", + 500 + ); + } + + return ['drupal' => $drupal_url, 'fedora' => $fedora_url, 'jsonld' => $jsonld_url]; } } diff --git a/Milliner/src/Service/MillinerServiceInterface.php b/Milliner/src/Service/MillinerServiceInterface.php index 403eb083..a02b405f 100644 --- a/Milliner/src/Service/MillinerServiceInterface.php +++ b/Milliner/src/Service/MillinerServiceInterface.php @@ -26,8 +26,9 @@ public function saveNode( ); /** + * @param $source_field * @param $json_url - * @param $jsonld_url + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception @@ -37,11 +38,13 @@ public function saveNode( public function saveMedia( $source_field, $json_url, + $islandora_fedora_endpoint, $token = null ); /** * @param $uuid + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception @@ -50,6 +53,7 @@ public function saveMedia( */ public function deleteNode( $uuid, + $islandora_fedora_endpoint, $token = null ); @@ -71,7 +75,8 @@ public function saveExternal( ); /** - * @param $fedora_url + * @param $uuid + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception @@ -79,35 +84,25 @@ public function saveExternal( * @return \GuzzleHttp\Psr7\Response */ public function createVersion( - $fedora_url, + $uuid, + $islandora_fedora_endpoint, $token = null ); /** + * @param $source_field * @param $json_url - * @param $jsonld_url + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception * * @return array */ - public function getFileFromMedia( + public function createMediaVersion( $source_field, $json_url, - $token = null - ); - - /** - * @param $uuid - * @param $token - * - * @throws \Exception - * - * @return array - */ - public function getGeminiUrls( - $uuid, + $islandora_fedora_endpoint, $token = null ); } diff --git a/Milliner/src/app.php b/Milliner/src/app.php index ca7c4550..b0a138ae 100644 --- a/Milliner/src/app.php +++ b/Milliner/src/app.php @@ -4,9 +4,9 @@ use GuzzleHttp\Client; use Islandora\Chullo\FedoraApi; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider; use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider; -use Islandora\Crayfish\Commons\Client\GeminiClient; use Islandora\Milliner\Controller\MillinerController; use Islandora\Milliner\Service\MillinerService; use Pimple\Exception\UnknownIdentifierException; @@ -29,17 +29,24 @@ $strip_format_jsonld = false; } + try { + $fedora6 = filter_var( + $app['crayfish.fedora6'], + FILTER_VALIDATE_BOOLEAN + ); + } catch (UnknownIdentifierException $e) { + $fedora6 = false; + } + return new MillinerController( new MillinerService( FedoraApi::create($app['crayfish.fedora_base_url']), new Client(), - GeminiClient::create( - $app['crayfish.gemini_base_url'], - $app['monolog'] - ), + new EntityMapper(), $app['monolog'], $app['crayfish.modified_date_predicate'], - $strip_format_jsonld + $strip_format_jsonld, + $fedora6 ), $app['monolog'] ); diff --git a/Milliner/static/Media.jsonld b/Milliner/static/Media.jsonld index 6cd98535..76ee6194 100644 --- a/Milliner/static/Media.jsonld +++ b/Milliner/static/Media.jsonld @@ -1,7 +1,7 @@ { "@graph":[ { - "@id":"http:\/\/localhost:8000\/media\/6?_format=jsonld", + "@id":"http:\/\/localhost:8000\/media\/6", "@type":[ "http:\/\/pcdm.org\/use#ServiceFile" ], @@ -56,4 +56,4 @@ "value":"http:\/\/localhost:8000\/sites\/default\/files\/2017-07\/sample_0.jpeg" } ] -} \ No newline at end of file +} diff --git a/Milliner/tests.patch b/Milliner/tests.patch new file mode 100644 index 00000000..52a5c59f --- /dev/null +++ b/Milliner/tests.patch @@ -0,0 +1,43 @@ +diff --git a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php +index 09b9e74..e28e5f9 100644 +--- a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php ++++ b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php +@@ -48,12 +48,16 @@ class MillinerControllerTest extends TestCase + $milliner = $this->prophesize(MillinerServiceInterface::class); + $milliner->saveNode(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); ++ $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) ++ ->willThrow(new \Exception("Forbidden", 403)); + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); + $milliner->deleteNode(Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); + $milliner->saveExternal(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); ++ $milliner->getGeminiUrls(Argument::any(), Argument::any()) ++ ->willThrow(new \Exception("Forbidden", 403)); + $milliner->createVersion(Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); + $milliner = $milliner->reveal(); +@@ -473,7 +477,9 @@ class MillinerControllerTest extends TestCase + public function testCreateNodeVersionReturnsSuccessOnSuccess() + { + $milliner = $this->prophesize(MillinerServiceInterface::class); +- $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ++ $milliner->getGeminiUrls(Argument::any(), Argument::any()) ++ ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); ++ $milliner->createVersion(Argument::any(), Argument::any()) + ->willReturn(new Response(201)); + $milliner = $milliner->reveal(); + $controller = new MillinerController($milliner, $this->logger); +@@ -499,7 +505,9 @@ class MillinerControllerTest extends TestCase + ); + + $milliner = $this->prophesize(MillinerServiceInterface::class); +- $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ++ $milliner->getGeminiUrls(Argument::any(), Argument::any()) ++ ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); ++ $milliner->createVersion(Argument::any(), Argument::any()) + ->willReturn(new Response(204)); + $milliner = $milliner->reveal(); + $controller = new MillinerController($milliner, $this->logger); diff --git a/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php b/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php index d81a1419..cca0e91c 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php @@ -7,12 +7,13 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Exception\RequestException; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -21,6 +22,8 @@ */ class CreateVersionTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -31,6 +34,26 @@ class CreateVersionTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $drupal; + /** * {@inheritdoc} */ @@ -42,6 +65,17 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; + + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; + + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); + + $this->drupal = $this->prophesize(Client::class); + $this->drupal = $this->drupal->reveal(); } @@ -51,27 +85,6 @@ protected function setUp(): void */ public function testCreateVersionReturnsFedora201() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - $fedora_response = new Response(201); $fedora = $this->prophesize(IFedoraApi::class); $fedora->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) @@ -80,15 +93,17 @@ public function testCreateVersionReturnsFedora201() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->createVersion( - $mapping['fedora'], + $this->uuid, + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -106,27 +121,6 @@ public function testCreateVersionReturnsFedora201() public function testCreateVersionReturnsFedora404() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-9998' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - $fedora_response = new Response(404); $fedora = $this->prophesize(IFedoraApi::class); $fedora->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) @@ -137,15 +131,17 @@ public function testCreateVersionReturnsFedora404() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->createVersion( - $mapping['fedora'], + $this->uuid, + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -163,25 +159,6 @@ public function testCreateVersionReturnsFedora404() */ public function testcreateVersionThrowsOnFedoraSaveError() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -197,15 +174,17 @@ public function testcreateVersionThrowsOnFedoraSaveError() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->createVersion( - $mapping['fedora'], + $this->uuid, + $this->fedoraBaseUrl, "Bearer islandora" ); diff --git a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php index e42b12ff..08152451 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php @@ -5,13 +5,14 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use Prophecy\Argument; use Psr\Log\LoggerInterface; use PHPUnit\Framework\TestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -20,6 +21,8 @@ */ class DeleteTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -30,6 +33,26 @@ class DeleteTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $drupal; + /** * {@inheritdoc} */ @@ -41,154 +64,115 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; + + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; + + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); + + $this->drupal = $this->prophesize(Client::class); + $this->drupal = $this->drupal->reveal(); } /** * @covers ::__construct * @covers ::deleteNode */ - public function testDeleteReturnsFedoraError() + public function testDeleteThrowsFedoraError() { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $gemini = $gemini->reveal(); - $fedora = $this->prophesize(IFedoraApi::class); $fedora->deleteResource(Argument::any(), Argument::any()) ->willReturn(new Response(403)); $fedora = $fedora->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); - $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); - $milliner->deleteNode("abc123", "Bearer islandora"); + $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); } /** * @covers ::__construct * @covers ::deleteNode */ - public function testDeleteReturns204OnGeminiSuccess() + public function testDeleteReturnsFedoraResult() { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls("first", Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $gemini->getUrls("second", Argument::any()) - ->willReturn([]); - $gemini->deleteUrls(Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - $fedora = $this->prophesize(IFedoraApi::class); $fedora->deleteResource(Argument::any(), Argument::any()) - ->willReturn(new Response(404)); + ->willReturn(new Response(204)); $fedora = $fedora->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); - $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); - $response = $milliner->deleteNode("first", "Bearer islandora"); - $status = $response->getStatusCode(); - $this->assertTrue( - $status == 204, - "Milliner must return 204 when Gemini returns success. Received: $status" - ); - - $response = $milliner->deleteNode("second", "Bearer islandora"); + $response = $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); $status = $response->getStatusCode(); $this->assertTrue( $status == 204, - "Milliner must return 204 when Gemini returns success. Received: $status" + "Milliner must return 204 when Fedora returns 204. Received: $status" ); - } - - /** - * @covers ::__construct - * @covers ::deleteNode - */ - public function testDeleteReturns404IfNotMappedAndGeminiFails() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->deleteUrls(Argument::any(), Argument::any()) - ->willReturn(false); - $gemini = $gemini->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); + $fedora = $this->prophesize(IFedoraApi::class); + $fedora->deleteResource(Argument::any(), Argument::any()) + ->willReturn(new Response(404)); + $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); - $response = $milliner->deleteNode("abc123", "Bearer islandora"); + $response = $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); $status = $response->getStatusCode(); $this->assertTrue( $status == 404, - "Milliner must return 404 when Gemini returns fail and resource was not mapped. Received: $status" + "Milliner must return 404 when Fedora returns 404. Received: $status" ); - } - - /** - * @covers ::__construct - * @covers ::deleteNode - */ - public function testDeleteReturnsFedoraErrorIfMappedButGeminiFails() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $gemini->deleteUrls(Argument::any(), Argument::any()) - ->willReturn(false); - $gemini = $gemini->reveal(); $fedora = $this->prophesize(IFedoraApi::class); $fedora->deleteResource(Argument::any(), Argument::any()) ->willReturn(new Response(410)); $fedora = $fedora->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); - $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); - $response = $milliner->deleteNode("abc123", "Bearer islandora"); + $response = $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); $status = $response->getStatusCode(); $this->assertTrue( $status == 410, - "Milliner must return Fedora response when mapped but Gemini fails. Expected 410, Received: $status" + "Milliner must return 410 when Fedora returns 410. Received: $status" ); } } diff --git a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php index 2f749e1e..981b5e9f 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php @@ -7,6 +7,7 @@ use Monolog\Handler\NullHandler; use Monolog\Logger; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use GuzzleHttp\Psr7\Response; @@ -19,6 +20,8 @@ */ class MillinerControllerTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -48,24 +51,22 @@ public function testMethodsReturnMillinerErrors() $milliner = $this->prophesize(MillinerServiceInterface::class); $milliner->saveNode(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) - ->willThrow(new \Exception("Forbidden", 403)); - $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->deleteNode(Argument::any(), Argument::any()) + $milliner->deleteNode(Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); $milliner->saveExternal(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->getGeminiUrls(Argument::any(), Argument::any()) + $milliner->createVersion(Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->createVersion(Argument::any(), Argument::any()) + $milliner->createMediaVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); // Route parameters. - $uuid = 'abc123'; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $source_field = 'field_image'; // Nodes. @@ -189,7 +190,7 @@ public function testSaveNodeReturns400WithoutContentLocation() $milliner = $this->prophesize(MillinerServiceInterface::class)->reveal(); $controller = new MillinerController($milliner, $this->logger); - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/node/$uuid", "POST", @@ -246,7 +247,7 @@ public function testSaveExternalReturns400WithoutContentLocation() $milliner = $this->prophesize(MillinerServiceInterface::class)->reveal(); $controller = new MillinerController($milliner, $this->logger); - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/external/$uuid", "POST", @@ -279,7 +280,7 @@ public function testSaveNodeReturnsSuccessOnSuccess() $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/node/$uuid", "POST", @@ -332,7 +333,7 @@ public function testSaveNodeReturnsSuccessOnSuccess() public function testSaveMediaReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(201)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); @@ -346,6 +347,7 @@ public function testSaveMediaReturnsSuccessOnSuccess() [], [ 'HTTP_AUTHORIZATION' => 'Bearer islandora', + 'X-Islandora-Fedora-Endpoint' => 'http://localhost:8080/fcrepo/rest/', 'HTTP_CONTENT_LOCATION' => 'http://localhost:8000/media/6?_format=json', ] ); @@ -357,7 +359,7 @@ public function testSaveMediaReturnsSuccessOnSuccess() ); $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); @@ -370,6 +372,7 @@ public function testSaveMediaReturnsSuccessOnSuccess() [], [ 'HTTP_AUTHORIZATION' => 'Bearer islandora', + 'X-Islandora-Fedora-Endpoint' => 'http://localhost:8080/fcrepo/rest/', 'HTTP_CONTENT_LOCATION' => 'http://localhost:8000/media/6?_format=json', ] ); @@ -394,7 +397,7 @@ public function testSaveExternalReturnsSuccessOnSuccess() $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/external/$uuid", "POST", @@ -447,12 +450,12 @@ public function testSaveExternalReturnsSuccessOnSuccess() public function testDeleteReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->deleteNode(Argument::any(), Argument::any()) + $milliner->deleteNode(Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/resource/$uuid", "DELETE", @@ -477,15 +480,13 @@ public function testDeleteReturnsSuccessOnSuccess() public function testCreateNodeVersionReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->getGeminiUrls(Argument::any(), Argument::any()) - ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(201)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/node/$uuid/version", "POST", @@ -505,8 +506,6 @@ public function testCreateNodeVersionReturnsSuccessOnSuccess() ); $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->getGeminiUrls(Argument::any(), Argument::any()) - ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); $milliner = $milliner->reveal(); @@ -538,15 +537,13 @@ public function testCreateNodeVersionReturnsSuccessOnSuccess() public function testCreateMediaVersionReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + $milliner->createMediaVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(201)); - $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(array('fedora'=>'', 'drupal'=>'', 'jsonld'=>'')); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $source_field = 'field_image'; $request = Request::create( "http://localhost:8000/milliner/media/$source_field/version", @@ -567,10 +564,8 @@ public function testCreateMediaVersionReturnsSuccessOnSuccess() ); $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + $milliner->createMediaVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); - $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(array('fedora'=>'', 'drupal'=>'', 'jsonld'=>'')); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php index 3b891e95..d98f314d 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php @@ -7,12 +7,13 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class SaveExternalTest @@ -21,6 +22,8 @@ */ class SaveExternalTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -31,6 +34,21 @@ class SaveExternalTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + /** * {@inheritdoc} */ @@ -42,48 +60,14 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; - } - /** - * @covers ::__construct - * @covers ::saveExternal - */ - public function testSaveExternalThrowsOnMintError() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willThrow( - new RequestException( - "Unauthorized", - new Request('POST', 'http://localhost:8000/gemini'), - new Response(403, [], "Unauthorized") - ) - ); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class); - $drupal = $drupal->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class); - $fedora = $fedora->reveal(); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; - $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); } /** @@ -92,12 +76,6 @@ public function testSaveExternalThrowsOnMintError() */ public function testSaveExternalThrowsOnHeadError() { - $url = "http://localhost:8080/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc81"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); - $drupal = $this->prophesize(Client::class); $drupal->head(Argument::any(), Argument::any()) ->willThrow( @@ -115,18 +93,19 @@ public function testSaveExternalThrowsOnHeadError() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -137,12 +116,6 @@ public function testSaveExternalThrowsOnHeadError() */ public function testSaveExternalThrowsOnPutError() { - $url = "http://localhost:8080/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc81"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); - $drupal = $this->prophesize(Client::class); $drupal->head(Argument::any(), Argument::any()) ->willReturn(new Response(200, ['Content-Type' => 'image/jpeg'])); @@ -156,67 +129,19 @@ public function testSaveExternalThrowsOnPutError() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); - } - - /** - * @covers ::__construct - * @covers ::saveExternal - */ - public function testSaveExternalThrowsOnGeminiError() - { - $url = "http://localhost:8080/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc81"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willThrow( - new RequestException( - "Unauthorized", - new Request('PUT', 'http://localhost:8000/gemini/9541c0c1-5bee-4973-a9d0-e55c1658bc81'), - new Response(403, [], "Unauthorized") - ) - ); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class); - $drupal->head(Argument::any(), Argument::any()) - ->willReturn(new Response(200, ['Content-Type' => 'image/jpeg'])); - $drupal = $drupal->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class); - $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(new Response(201)); - $fedora = $fedora->reveal(); - - $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php index 6a610396..364c6ffa 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php @@ -5,12 +5,13 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use Prophecy\Argument; use PHPUnit\Framework\TestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -19,6 +20,8 @@ */ class SaveMediaTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -29,6 +32,21 @@ class SaveMediaTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + /** * {@inheritdoc} */ @@ -40,6 +58,14 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; + + $this->uuid = 'ffb15b4f-54db-44ce-ad0b-3588889a3c9b'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; + + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b"); + $this->mapper = $this->mapper->reveal(); } /** @@ -64,14 +90,13 @@ public function testSaveMediaThrows500WithNoFileField() $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $gemini = $this->prophesize(GeminiClient::class)->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -80,6 +105,7 @@ public function testSaveMediaThrows500WithNoFileField() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -106,14 +132,13 @@ public function testSaveMediaThrows500WithEmptyFileField() $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $gemini = $this->prophesize(GeminiClient::class)->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -122,6 +147,7 @@ public function testSaveMediaThrows500WithEmptyFileField() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -148,17 +174,13 @@ public function testSaveMediaThrows404WhenFileIsNotInGemini() $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -167,6 +189,7 @@ public function testSaveMediaThrows404WhenFileIsNotInGemini() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -198,29 +221,22 @@ public function testSaveMediaThrowsFedoraHeadError() $fedora = $this->prophesize(IFedoraApi::class); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $this->expectException(\RuntimeException::class, null, 404); $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -252,21 +268,13 @@ public function testSaveMediaThrows500WhenNoDescribedbyHeader() $fedora = $this->prophesize(IFedoraApi::class); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -275,6 +283,7 @@ public function testSaveMediaThrows500WhenNoDescribedbyHeader() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -316,21 +325,13 @@ public function testSaveMediaThrowsFedoraGetError() ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -339,6 +340,7 @@ public function testSaveMediaThrowsFedoraGetError() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -392,21 +394,13 @@ public function testSaveMediaThrows412OnStaleData() ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -415,6 +409,7 @@ public function testSaveMediaThrows412OnStaleData() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -473,21 +468,13 @@ public function testSaveMediaThrowsFedoraPutError() ->willReturn($fedora_put_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -496,6 +483,7 @@ public function testSaveMediaThrowsFedoraPutError() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -510,17 +498,21 @@ public function testSaveMediaThrowsFedoraPutError() */ public function testSaveMediaReturnsFedoraSuccess() { + $link = '; rel="alternate"; type="application/ld+json"'; + $link .= ',; rel="describes"'; $drupal_json_response = new Response( 200, [ 'Content-Type' => 'application/json', - "Link" => '; rel="alternate"; type="application/ld+json"', + "Link" => $link, ], file_get_contents(__DIR__ . '/../../../../static/Media.json') ); $drupal_jsonld_response = new Response( 200, - ['Content-Type' => 'application/ld+json'], + [ + 'Content-Type' => 'application/ld+json', + ], file_get_contents(__DIR__ . '/../../../../static/Media.jsonld') ); $drupal = $this->prophesize(Client::class); @@ -554,27 +546,25 @@ public function testSaveMediaReturnsFedoraSuccess() ->willReturn($fedora_put_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath('f0fd71b3-1fab-45e1-a5e9-78d50e0d7174') + ->willReturn("{$this->fedoraBaseUrl}/f0/fd/71/b3/f0fd71b3-1fab-45e1-a5e9-78d50e0d7174"); + $this->mapper = $this->mapper->reveal(); $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -595,17 +585,21 @@ public function testSaveMediaReturnsFedoraSuccess() */ public function testSaveMediaReturnsNoModifiedDate() { + $link = '; rel="alternate"; type="application/ld+json"'; + $link .= ',; rel="describes"'; $drupal_json_response = new Response( 200, [ 'Content-Type' => 'application/json', - "Link" => '; rel="alternate"; type="application/ld+json"', + "Link" => $link, ], file_get_contents(__DIR__ . '/../../../../static/Media.json') ); $drupal_jsonld_response = new Response( 200, - ['Content-Type' => 'application/ld+json'], + [ + 'Content-Type' => 'application/ld+json', + ], file_get_contents(__DIR__ . '/../../../../static/Media.jsonld') ); $drupal = $this->prophesize(Client::class); @@ -622,7 +616,6 @@ public function testSaveMediaReturnsNoModifiedDate() ); $drupal->head(Argument::any(), Argument::any()) ->willReturn($head_response); - $drupal = $drupal->reveal(); $fedora_get_response = new Response( @@ -640,27 +633,25 @@ public function testSaveMediaReturnsNoModifiedDate() ->willReturn($fedora_put_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath('f0fd71b3-1fab-45e1-a5e9-78d50e0d7174') + ->willReturn("{$this->fedoraBaseUrl}/f0/fd/71/b3/f0fd71b3-1fab-45e1-a5e9-78d50e0d7174"); + $this->mapper = $this->mapper->reveal(); $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php index 451fa94c..0a5c0646 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php @@ -7,12 +7,13 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Exception\RequestException; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -21,6 +22,8 @@ */ class SaveNodeTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -31,6 +34,26 @@ class SaveNodeTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $drupal; + /** * {@inheritdoc} */ @@ -42,156 +65,59 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; - } - - /** - * @covers ::__construct - * @covers ::saveNode - */ - public function testCreateNodeThrowsOnMintError() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willThrow( - new RequestException( - "Unauthorized", - new Request('POST', 'http://localhost:8000/gemini'), - new Response(403, [], "Unauthorized") - ) - ); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class); - $drupal = $drupal->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class); - $fedora = $fedora->reveal(); - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); - - $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); - } + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; - /** - * @covers ::__construct - * @covers ::saveNode - * @covers ::processJsonld - */ - public function testCreateNodeThrowsOnFedoraError() - { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); $drupal_response = new Response( 200, ['Content-Type' => 'application/ld+json'], file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) + $this->drupal = $this->prophesize(Client::class); + $this->drupal->get(Argument::any(), Argument::any()) ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); - $fedora = $this->prophesize(IFedoraApi::class); - $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); - $fedora = $fedora->reveal(); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\RuntimeException::class, null, 403); - - $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); + $this->drupal = $this->drupal->reveal(); } /** * @covers ::__construct * @covers ::saveNode - * @covers ::createNode * @covers ::processJsonld */ - public function testCreateNodeThrowsOnFedoraSaveError() + public function testCreateNodeThrowsOnFedoraError() { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_get_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') - ); + $fedora_head_response = new Response(404); $fedora_save_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); $fedora = $this->prophesize(IFedoraApi::class); - $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_get_response); + $fedora->getResourceHeaders(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_head_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - $token = "Bearer islandora" + $this->fedoraBaseUrl, + "Bearer islandora" ); } @@ -203,45 +129,29 @@ public function testCreateNodeThrowsOnFedoraSaveError() */ public function testCreateNodeReturnsFedora201() { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_response = new Response(201); + $fedora_head_response = new Response(404); + $fedora_save_response = new Response(201); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_head_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); + ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -260,45 +170,29 @@ public function testCreateNodeReturnsFedora201() */ public function testCreateNodeReturnsFedora204() { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_response = new Response(204); + $fedora_head_response = new Response(404); + $fedora_save_response = new Response(204); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_head_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); + ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -317,40 +211,40 @@ public function testCreateNodeReturnsFedora204() * @covers ::getModifiedTimestamp * @covers ::getFirstPredicate */ - public function testUpdateNodeThrowsOnFedoraGetError() + public function testUpdateNodeThrowsOnFedoraError() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class)->reveal(); - - $fedora_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); + $fedora_head_response = new Response(200); + $fedora_get_response = new Response( + 200, + ['Content-Type' => 'application/ld+json'], + file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') + ); + $fedora_save_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); + ->willReturn($fedora_get_response); + $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -365,15 +259,6 @@ public function testUpdateNodeThrowsOnFedoraGetError() */ public function testUpdateNodeThrows500OnBadDatePredicate() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $drupal_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -384,12 +269,15 @@ public function testUpdateNodeThrows500OnBadDatePredicate() ->willReturn($drupal_response); $drupal = $drupal->reveal(); + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') ); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); @@ -399,16 +287,17 @@ public function testUpdateNodeThrows500OnBadDatePredicate() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, - "total garbage", + $this->modifiedDatePredicate, + false, false ); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -423,15 +312,6 @@ public function testUpdateNodeThrows500OnBadDatePredicate() */ public function testUpdateNodeThrows412OnStaleContent() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $drupal_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -442,12 +322,15 @@ public function testUpdateNodeThrows412OnStaleContent() ->willReturn($drupal_response); $drupal = $drupal->reveal(); + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') ); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); @@ -455,79 +338,19 @@ public function testUpdateNodeThrows412OnStaleContent() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 412); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); - } - - /** - * @covers ::__construct - * @covers ::saveNode - * @covers ::updateNode - * @covers ::processJsonld - * @covers ::getModifiedTimestamp - * @covers ::getFirstPredicate - */ - public function testUpdateNodeThrowsOnFedoraSaveError() - { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_get_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') - ); - $fedora_save_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); - $fedora = $this->prophesize(IFedoraApi::class); - $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_get_response); - $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_save_response); - $fedora = $fedora->reveal(); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\RuntimeException::class, null, 403); - - $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -542,27 +365,7 @@ public function testUpdateNodeThrowsOnFedoraSaveError() */ public function testUpdateNodeReturnsFedora201() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -570,6 +373,8 @@ public function testUpdateNodeReturnsFedora201() ); $fedora_save_response = new Response(201); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) @@ -578,17 +383,18 @@ public function testUpdateNodeReturnsFedora201() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -609,27 +415,7 @@ public function testUpdateNodeReturnsFedora201() */ public function testUpdateNodeReturnsFedora204() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json', 'ETag' => 'W\abc123'], @@ -637,6 +423,8 @@ public function testUpdateNodeReturnsFedora204() ); $fedora_save_response = new Response(204); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) @@ -645,17 +433,18 @@ public function testUpdateNodeReturnsFedora204() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); diff --git a/Recast/composer.json b/Recast/composer.json index 690a8b67..46724f04 100644 --- a/Recast/composer.json +++ b/Recast/composer.json @@ -3,10 +3,11 @@ "description": "Microservice rewrites Drupal URIs to Fedora URIs", "type": "project", "require": { - "silex/silex": "^2.0", - "islandora/crayfish-commons": "dev-dev", + "php": "^7.3 || ^7.4", "easyrdf/easyrdf": "^0.9 || ^1", - "php": "^7.3 || ^7.4" + "islandora/crayfish-commons": "dev-dev", + "phpspec/prophecy-phpunit": "^2.0", + "silex/silex": "^2.0" }, "minimum-stability": "dev", "prefer-stable": true, @@ -40,7 +41,7 @@ ], "test": [ "@check", - "vendor/bin/phpunit" + "vendor/bin/phpunit --verbose" ] }, "config": { diff --git a/Recast/composer.lock b/Recast/composer.lock index 4e6e9f7f..fd14a36a 100644 --- a/Recast/composer.lock +++ b/Recast/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4821fa896f6e9d2e7b54f19499e7b8e5", + "content-hash": "c26f100c263d064483d95be7de4693d6", "packages": [ { "name": "doctrine/cache", @@ -311,6 +311,75 @@ ], "time": "2020-05-29T18:28:51+00:00" }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, { "name": "easyrdf/easyrdf", "version": "1.1.1", @@ -459,16 +528,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -508,9 +577,9 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", @@ -593,12 +662,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora/chullo.git", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287" + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/chullo/zipball/6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287", + "url": "https://api.github.com/repos/Islandora/chullo/zipball/7f7df8847844ab478f65de8377c5678d037cb5e3", + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3", "shasum": "" }, "require": { @@ -647,7 +716,7 @@ "issues": "https://github.com/Islandora/documentation/issues", "source": "https://github.com/Islandora/chullo/tree/dev" }, - "time": "2020-12-11T21:38:08+00:00" + "time": "2021-02-16T15:51:00+00:00" }, { "name": "islandora/crayfish-commons", @@ -655,12 +724,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9" + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d7c0044723c2089f7757fb5c9dd523397938a8e9", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9", + "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", "shasum": "" }, "require": { @@ -671,15 +740,16 @@ "pimple/pimple": "~3.0", "psr/log": "^1.0.1", "silex/silex": "^2.0", - "symfony/http-foundation": "^3.2.6", - "symfony/security": "^3.2", - "symfony/yaml": "^3.2" + "symfony/http-foundation": "^3.4 || ^4.4", + "symfony/security": "^3.4 || ^4.4", + "symfony/yaml": "^3.4 || ^4.4" }, "require-dev": { "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.0", - "sebastian/phpcpd": "^3.0", - "squizlabs/php_codesniffer": "^2.0" + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "sebastian/phpcpd": "^6.0", + "squizlabs/php_codesniffer": "^3.0" }, "default-branch": true, "type": "library", @@ -710,7 +780,7 @@ "issues": "https://github.com/Islandora/documentation/issues", "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" }, - "time": "2020-11-12T23:33:17+00:00" + "time": "2021-03-12T18:49:29+00:00" }, { "name": "ml/iri", @@ -818,16 +888,16 @@ }, { "name": "monolog/monolog", - "version": "1.25.5", + "version": "1.26.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", "shasum": "" }, "require": { @@ -843,7 +913,7 @@ "graylog2/gelf-php": "~1.0", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", + "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "~4.5", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", @@ -863,11 +933,6 @@ "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -893,7 +958,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.25.5" + "source": "https://github.com/Seldaek/monolog/tree/1.26.0" }, "funding": [ { @@ -905,7 +970,65 @@ "type": "tidelift" } ], - "time": "2020-07-23T08:35:51+00:00" + "time": "2020-12-14T12:56:38+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" }, { "name": "namshi/jose", @@ -975,190 +1098,198 @@ "time": "2016-12-05T07:27:31+00:00" }, { - "name": "pimple/pimple", - "version": "v3.3.1", + "name": "nikic/php-parser", + "version": "v4.10.4", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" + "ext-tokenizer": "*", + "php": ">=7.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.0" + "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": "3.3.x-dev" + "dev-master": "4.9-dev" } }, "autoload": { - "psr-0": { - "Pimple": "src/" + "psr-4": { + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nikita Popov" } ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", + "description": "A PHP parser written in PHP", "keywords": [ - "container", - "dependency injection" + "parser", + "php" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" }, - "time": "2020-11-24T20:35:42+00:00" + "time": "2020-12-20T10:01:03+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "phar-io/manifest", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2020-06-27T14:33:11+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "phar-io/version", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], + "description": "Library for handling version information and constraints", "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { - "name": "psr/log", - "version": "1.1.3", + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1167,48 +1298,59 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "log", - "psr", - "psr-3" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" }, - "time": "2020-03-23T09:12:05+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "php": ">=5.6" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "mockery/mockery": "~1.3.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" - ] + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1216,83 +1358,51 @@ ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], - "description": "A polyfill for getallheaders.", + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { - "name": "silex/silex", - "version": "v2.2.4", + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/silexphp/Silex.git", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": ">=5.5.9", - "pimple/pimple": "~3.0", - "symfony/event-dispatcher": "~2.8|^3.0", - "symfony/http-foundation": "~2.8|^3.0", - "symfony/http-kernel": "~2.8|^3.0", - "symfony/routing": "~2.8|^3.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" - }, - "replace": { - "silex/api": "self.version", - "silex/providers": "self.version" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "doctrine/dbal": "~2.2", - "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "~5", - "symfony/asset": "~2.8|^3.0", - "symfony/browser-kit": "~2.8|^3.0", - "symfony/config": "~2.8|^3.0", - "symfony/css-selector": "~2.8|^3.0", - "symfony/debug": "~2.8|^3.0", - "symfony/doctrine-bridge": "~2.8|^3.0", - "symfony/dom-crawler": "~2.8|^3.0", - "symfony/expression-language": "~2.8|^3.0", - "symfony/finder": "~2.8|^3.0", - "symfony/form": "~2.8|^3.0", - "symfony/intl": "~2.8|^3.0", - "symfony/monolog-bridge": "~2.8|^3.0", - "symfony/options-resolver": "~2.8|^3.0", - "symfony/phpunit-bridge": "^3.2", - "symfony/process": "~2.8|^3.0", - "symfony/security": "~2.8|^3.0", - "symfony/serializer": "~2.8|^3.0", - "symfony/translation": "~2.8|^3.0", - "symfony/twig-bridge": "~2.8|^3.0", - "symfony/validator": "~2.8|^3.0", - "symfony/var-dumper": "~2.8|^3.0", - "symfony/web-link": "^3.3", - "twig/twig": "~1.28|~2.0" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "Silex\\": "src/Silex" + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1301,59 +1411,52 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "The PHP micro-framework based on the Symfony Components", - "homepage": "http://silex.sensiolabs.org", - "keywords": [ - "microframework" - ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "issues": "https://github.com/silexphp/Silex/issues", - "source": "https://github.com/silexphp/Silex/tree/v2.2.4" + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" }, - "abandoned": "symfony/flex", - "time": "2018-03-16T23:34:20+00:00" + "time": "2020-09-17T18:55:26+00:00" }, { - "name": "symfony/debug", - "version": "v4.4.17", + "name": "phpspec/prophecy", + "version": "1.12.2", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "65fe7b49868378319b82da3035fb30801b931c47" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/65fe7b49868378319b82da3035fb30801b931c47", - "reference": "65fe7b49868378319b82da3035fb30801b931c47", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Prophecy\\": "src/Prophecy" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1361,66 +1464,60 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.17" + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.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": "2020-10-28T20:42:29+00:00" + "time": "2020-12-19T10:15:11+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "name": "phpspec/prophecy-phpunit", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "url": "https://github.com/phpspec/prophecy-phpunit.git", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.3 || ^8", + "phpspec/prophecy": "^1.3", + "phpunit/phpunit": "^9.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "2.0-dev" } }, "autoload": { - "files": [ - "function.php" - ] + "psr-4": { + "Prophecy\\PhpUnit\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1428,549 +1525,474 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Christophe Coevoet", + "email": "stof@notk.org" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "Integrating the Prophecy mocking library in PHPUnit test cases", + "homepage": "http://phpspec.net", + "keywords": [ + "phpunit", + "prophecy" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "issues": "https://github.com/phpspec/prophecy-phpunit/issues", + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2020-07-09T08:33:42+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v3.4.47", + "name": "phpunit/php-code-coverage", + "version": "9.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-11-28T06:44:49+00:00" }, { - "name": "symfony/http-foundation", - "version": "v3.4.47", + "name": "phpunit/php-file-iterator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": ">=7.3" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], "support": { - "source": "https://github.com/symfony/http-foundation/tree/v3.4.47" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-09-28T05:57:25+00:00" }, { - "name": "symfony/http-kernel", - "version": "v3.4.47", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" - }, - "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" + "php": ">=7.3" }, "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.47" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-11-27T08:42:42+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "symfony/inflector", - "version": "v5.2.0", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/ba33a08d608c5b26ef768b6652876098dd3ace36", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/string": "^5.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Inflector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Inflector Component", - "homepage": "https://symfony.com", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" + "template" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.0" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "5.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "timer" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "name": "phpunit/phpunit", + "version": "9.5.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", "shasum": "" }, "require": { - "php": ">=7.1" + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" }, "suggest": { - "ext-intl": "For best performance" + "ext-soap": "*", + "ext-xdebug": "*" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "9.5-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, + "classmap": [ + "src/" + ], "files": [ - "bootstrap.php" + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "phpunit", + "testing", + "xunit" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://phpunit.de/donate.html", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-02T14:45:58+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", + "name": "pimple/pimple", + "version": "v3.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + "url": "https://github.com/silexphp/Pimple.git", + "reference": "86406047271859ffc13424a048541f4531f53601" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/86406047271859ffc13424a048541f4531f53601", + "reference": "86406047271859ffc13424a048541f4531f53601", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2.5", + "psr/container": "^1.1" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "symfony/phpunit-bridge": "^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "3.4.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] + "psr-0": { + "Pimple": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1978,87 +2000,43 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" + "container", + "dependency injection" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + "source": "https://github.com/silexphp/Pimple/tree/v3.4.0" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-03-06T08:28:00+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "name": "psr/container", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2066,79 +2044,153 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "time": "2020-10-23T14:02:19+00:00" + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "name": "psr/log", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { "files": [ - "bootstrap.php" + "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2147,917 +2199,847 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.20.0", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, - "type": "metapackage", + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", + "name": "sebastian/comparator", + "version": "4.0.6", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, - "type": "metapackage", + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "comparator", + "compare", + "equality" ], "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" }, "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" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-10-26T15:49:45+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.20.0", + "name": "sebastian/complexity", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "php": ">=7.1" + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "name": "sebastian/diff", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { - "name": "symfony/property-access", - "version": "v4.4.17", + "name": "sebastian/environment", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/ab8184f093095b40c3e7688bc4eb1d0484da327c", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/inflector": "^3.4|^4.0|^5.0" + "php": ">=7.3" }, "require-dev": { - "symfony/cache": "^3.4|^4.0|^5.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "psr/cache-implementation": "To cache access methods." + "ext-posix": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony PropertyAccess Component", - "homepage": "https://symfony.com", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" + "Xdebug", + "environment", + "hhvm" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.17" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-31T22:44:29+00:00" + "time": "2020-09-28T05:52:38+00:00" }, { - "name": "symfony/routing", - "version": "v3.4.47", + "name": "sebastian/exporter", + "version": "4.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.4" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "router", - "routing", - "uri", - "url" + "export", + "exporter" ], "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-09-28T05:24:23+00:00" }, { - "name": "symfony/security", - "version": "v3.4.47", + "name": "sebastian/global-state", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/security.git", - "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", - "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.40|^4.4.7", - "symfony/http-kernel": "~3.3|~4.0", - "symfony/polyfill-php56": "~1.0", - "symfony/polyfill-php70": "~1.0", - "symfony/property-access": "~2.8|~3.0|~4.0" - }, - "replace": { - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "psr/container": "^1.0", - "psr/log": "~1.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/ldap": "~3.1|~4.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/validator": "^3.2.5|~4.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { - "psr/container-implementation": "To instantiate the Security class", - "symfony/expression-language": "For using the expression voter", - "symfony/form": "", - "symfony/ldap": "For using the LDAP user and authentication providers", - "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", - "symfony/validator": "For using the user password constraint" + "ext-uopz": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\": "" - }, - "exclude-from-classmap": [ - "/Core/Tests/", - "/Csrf/Tests/", - "/Guard/Tests/", - "/Http/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Security Component", - "homepage": "https://symfony.com", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], "support": { - "source": "https://github.com/symfony/security/tree/v3.4.47" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-28T05:23:51+00:00" + "time": "2020-10-26T15:55:19+00:00" }, { - "name": "symfony/string", - "version": "v5.2.0", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "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" + "nikic/php-parser": "^4.6", + "php": ">=7.3" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony String component", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { - "name": "symfony/yaml", - "version": "v3.4.47", + "name": "sebastian/object-enumerator", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" - } - ], - "packages-dev": [ + "time": "2020-10-26T13:12:34+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.4.0", + "name": "sebastian/object-reflector", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", + "name": "sebastian/recursion-context", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": ">=7.3" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2020-10-26T13:17:30+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.10.3", + "name": "sebastian/resource-operations", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3065,45 +3047,48 @@ ], "authors": [ { - "name": "Nikita Popov" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" }, - "time": "2020-12-03T17:45:45+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.1", + "name": "sebastian/type", + "version": "2.3.1", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -3116,47 +3101,49 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "lead" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" }, - "time": "2020-06-27T14:33:11+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" }, { - "name": "phar-io/version", - "version": "3.0.3", + "name": "sebastian/version", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -3167,55 +3154,89 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "lead" } ], - "description": "Library for handling version information and constraints", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.3" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, - "time": "2020-11-30T09:21:21+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "silex/silex", + "version": "v2.3.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/silexphp/Silex.git", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/6bc31c1b8c4ef614a7115320fd2d3b958032f131", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.1.3", + "pimple/pimple": "^3.0", + "symfony/event-dispatcher": "^4.0", + "symfony/http-foundation": "^4.0", + "symfony/http-kernel": "^4.0", + "symfony/routing": "^4.0" + }, + "replace": { + "silex/api": "self.version", + "silex/providers": "self.version" + }, + "require-dev": { + "doctrine/dbal": "^2.2", + "monolog/monolog": "^1.4.1", + "swiftmailer/swiftmailer": "^5", + "symfony/asset": "^4.0", + "symfony/browser-kit": "^4.0", + "symfony/config": "^4.0", + "symfony/css-selector": "^4.0", + "symfony/debug": "^4.0", + "symfony/doctrine-bridge": "^4.0", + "symfony/dom-crawler": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/finder": "^4.0", + "symfony/form": "^4.0", + "symfony/intl": "^4.0", + "symfony/monolog-bridge": "^4.0", + "symfony/options-resolver": "^4.0", + "symfony/phpunit-bridge": "^3.2", + "symfony/process": "^4.0", + "symfony/security": "^4.0", + "symfony/serializer": "^4.0", + "symfony/translation": "^4.0", + "symfony/twig-bridge": "^4.0", + "symfony/validator": "^4.0", + "symfony/var-dumper": "^4.0", + "symfony/web-link": "^4.0", + "twig/twig": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "Silex\\": "src/Silex" } }, "notification-url": "https://packagist.org/downloads/", @@ -3224,59 +3245,70 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "The PHP micro-framework based on the Symfony Components", + "homepage": "http://silex.sensiolabs.org", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "microframework" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/silexphp/Silex/issues", + "source": "https://github.com/silexphp/Silex/tree/v2.3.0" }, - "time": "2020-06-27T09:03:43+00:00" + "abandoned": "symfony/flex", + "time": "2018-04-20T05:17:01+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "name": "symfony/contracts", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "url": "https://github.com/symfony/contracts.git", + "reference": "d3636025e8253c6144358ec0a62773cae588395b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", + "reference": "d3636025e8253c6144358ec0a62773cae588395b", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": "^7.1.3" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3284,52 +3316,62 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/symfony/contracts/tree/master" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2019-04-27T14:29:50+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "name": "symfony/debug", + "version": "v4.4.20", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "url": "https://github.com/symfony/debug.git", + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/symfony/debug/zipball/157bbec4fd773bae53c5483c50951a5530a2cc16", + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/http-kernel": "<3.4" }, "require-dev": { - "ext-tokenizer": "*" + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3337,52 +3379,66 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "Provides tools to ease debugging PHP code", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/symfony/debug/tree/v4.4.20" }, - "time": "2020-09-17T18:55:26+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-28T16:54:48+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.12.1", + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "files": [ + "function.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3390,1339 +3446,1655 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/master" }, - "time": "2020-09-29T09:10:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "name": "symfony/event-dispatcher", + "version": "v4.4.20", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c352647244bd376bf7d31efbd5401f13f50dad0c", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], + "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": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.20" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1.3" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "filesystem", - "iterator" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2020-07-06T13:19:58+00:00" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", + "name": "symfony/http-foundation", + "version": "v4.4.20", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02d968647fe61b2f419a8dc70c468a9d30a48d3a", + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.20" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2021-02-25T17:11:33+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "symfony/http-kernel", + "version": "v4.2.12", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8a7c5ef599466af6e972c705507f815df9c490ae", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/contracts": "^1.0.2", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "~4.1", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php56": "~1.8" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.2", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/cache": "~1.0", + "symfony/browser-kit": "~3.4|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.2", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/var-dumper": "^4.1.1" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "source": "https://github.com/symfony/http-kernel/tree/v4.2.12" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2019-11-13T08:51:34+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "symfony/inflector", + "version": "v5.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/symfony/inflector.git", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/string": "~5.1.10|^5.2.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Converts words between their singular and plural forms (English only)", + "homepage": "https://symfony.com", "keywords": [ - "timer" + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/symfony/inflector/tree/v5.2.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2021-01-10T16:29:19+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.5.0", + "name": "symfony/mime", + "version": "v5.2.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" + "url": "https://github.com/symfony/mime.git", + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "url": "https://api.github.com/repos/symfony/mime/zipball/554ba128f1955038b45db5e1fa7e93bfc683b139", + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, - "bin": [ - "phpunit" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", "keywords": [ - "phpunit", - "testing", - "xunit" + "mime", + "mime-type" ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" + "source": "https://github.com/symfony/mime/tree/v5.2.5" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-12-04T05:05:53+00:00" + "time": "2021-03-07T16:08:20+00:00" }, { - "name": "sebastian/cli-parser", - "version": "1.0.1", + "name": "symfony/polyfill-ctype", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "name": "symfony/polyfill-intl-idn", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/comparator", - "version": "4.0.6", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", "keywords": [ - "comparator", - "compare", - "equality" + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/complexity", - "version": "2.0.2", + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.4", + "name": "symfony/polyfill-php56", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "sebastian/environment", - "version": "5.1.3", + "name": "symfony/polyfill-php70", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" + "require": { + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "sebastian/exporter", - "version": "4.0.3", + "name": "symfony/polyfill-php72", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "export", - "exporter" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "sebastian/global-state", - "version": "5.0.2", + "name": "symfony/polyfill-php80", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "global state" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.3", + "name": "symfony/property-access", + "version": "v4.4.20", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "url": "https://github.com/symfony/property-access.git", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/94a1d9837396c71a0d8c31686c16693a15651622", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/cache": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } + "suggest": { + "psr/cache-implementation": "To cache access methods." }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/symfony/property-access/tree/v4.4.20" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "4.0.4", + "name": "symfony/routing", + "version": "v4.4.20", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "url": "https://github.com/symfony/routing.git", + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/symfony/routing/zipball/69919991c845b34626664ddc9b3aef9d09d2a5df", + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=7.1.3" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "doctrine/annotations": "^1.10.4", + "psr/log": "~1.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/symfony/routing/tree/v4.4.20" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2021-02-22T15:37:04+00:00" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "symfony/security", + "version": "v3.4.47", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "url": "https://github.com/symfony/security.git", + "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/symfony/security/zipball/7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", + "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.5.9|>=7.0.8", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.40|^4.4.7", + "symfony/http-kernel": "~3.3|~4.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/property-access": "~2.8|~3.0|~4.0" + }, + "replace": { + "symfony/security-core": "self.version", + "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", + "symfony/security-http": "self.version" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/ldap": "~3.1|~4.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/validator": "^3.2.5|~4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/expression-language": "For using the expression voter", + "symfony/form": "", + "symfony/ldap": "For using the LDAP user and authentication providers", + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/validator": "For using the user password constraint" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Security\\": "" + }, + "exclude-from-classmap": [ + "/Core/Tests/", + "/Csrf/Tests/", + "/Guard/Tests/", + "/Http/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Symfony Security Component", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/symfony/security/tree/v3.4.47" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2020-10-28T05:23:51+00:00" }, { - "name": "sebastian/phpcpd", - "version": "6.0.3", + "name": "symfony/string", + "version": "v5.2.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" + "url": "https://github.com/symfony/string.git", + "reference": "4e78d7d47061fa183639927ec40d607973699609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", + "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", + "reference": "4e78d7d47061fa183639927ec40d607973699609", "shasum": "" }, "require": { - "ext-dom": "*", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-timer": "^5.0", - "sebastian/cli-parser": "^1.0", - "sebastian/version": "^3.0" + "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" }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", + "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": { - "issues": "https://github.com/sebastianbergmann/phpcpd/issues", - "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" + "source": "https://github.com/symfony/string/tree/v5.2.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-12-07T05:39:23+00:00" + "time": "2021-02-16T10:20:28+00:00" }, { - "name": "sebastian/recursion-context", - "version": "4.0.4", + "name": "symfony/yaml", + "version": "v4.4.20", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "url": "https://github.com/symfony/yaml.git", + "reference": "29e61305e1c79d25f71060903982ead8f533e267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/symfony/yaml/zipball/29e61305e1c79d25f71060903982ead8f533e267", + "reference": "29e61305e1c79d25f71060903982ead8f533e267", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/console": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/symfony/yaml/tree/v4.4.20" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2021-02-22T15:36:50+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "theseer/tokenizer", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -4734,101 +5106,113 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2020-07-12T23:59:07+00:00" }, { - "name": "sebastian/type", - "version": "2.3.1", + "name": "webmozart/assert", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.10-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:18:59+00:00" - }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "packages-dev": [ { - "name": "sebastian/version", - "version": "3.0.2", + "name": "sebastian/phpcpd", + "version": "6.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/sebastianbergmann/phpcpd.git", + "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", + "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-dom": "*", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-timer": "^5.0", + "sebastian/cli-parser": "^1.0", + "sebastian/version": "^3.0" }, + "bin": [ + "phpcpd" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -4847,11 +5231,11 @@ "role": "lead" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Copy/Paste Detector (CPD) for PHP code.", + "homepage": "https://github.com/sebastianbergmann/phpcpd", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/sebastianbergmann/phpcpd/issues", + "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" }, "funding": [ { @@ -4859,7 +5243,7 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2020-12-07T05:39:23+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -5053,16 +5437,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.17", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e" + "reference": "be133557f1b0e6672367325b508e65da5513a311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/30ad9ac96a01913195bf0328d48e29d54fa53e6e", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/be133557f1b0e6672367325b508e65da5513a311", + "reference": "be133557f1b0e6672367325b508e65da5513a311", "shasum": "" }, "require": { @@ -5103,10 +5487,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.17" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.20" }, "funding": [ { @@ -5122,110 +5506,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" - }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-02-14T12:29:41+00:00" } ], "aliases": [], diff --git a/Recast/src/Controller/RecastController.php b/Recast/src/Controller/RecastController.php index f9d3b728..95662b7f 100644 --- a/Recast/src/Controller/RecastController.php +++ b/Recast/src/Controller/RecastController.php @@ -2,12 +2,14 @@ namespace Islandora\Recast\Controller; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Psr\Log\LoggerInterface; use Silex\Application; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; // phpcs:disable if (class_exists('\EasyRdf_Graph')) { @@ -36,9 +38,14 @@ class RecastController private $log; /** - * @var \Islandora\Crayfish\Commons\Client\GeminiClient + * @var \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface */ - private $geminiClient; + private $entityMapper; + + /** + * @var \GuzzleHttp\Client + */ + private $http; /** * @var array @@ -51,14 +58,17 @@ class RecastController /** * RecastController constructor. * - * @param \Islandora\Crayfish\Commons\Client\GeminiClient $geminiClient + * @param \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface $entityMapper + * @param \GuzzleHttp\Client $http * @param \Psr\Log\LoggerInterface $log */ public function __construct( - GeminiClient $geminiClient, + EntityMapperInterface $entityMapper, + Client $http, LoggerInterface $log ) { - $this->geminiClient = $geminiClient; + $this->entityMapper = $entityMapper; + $this->http = $http; $this->log = $log; } @@ -144,15 +154,29 @@ public function recast(Request $request, Application $app, $operation) $resources = $graph->resources(); foreach ($resources as $uri => $data) { - if (strpos($uri, $app['crayfish.drupal_base_url']) === 0) { - $this->log->debug("Checking resource ", [ - 'uri' => $uri, - ]); - $reverse_uri = $this->geminiClient->findByUri($uri, $token); - if (!is_null($reverse_uri)) { - if (is_array($reverse_uri)) { - $reverse_uri = reset($reverse_uri); - } + // Ignore http vs https + $exploded = explode('://', $uri); + if (count($exploded) > 1) { + $protocol = $exploded[0]; + $without_protocol = $exploded[1]; + } + + // Check for Drupal urls, making sure to ignore Fedora urls. + // They may share a domain so false positives can happen. + $drupal_base_url = $app['crayfish.drupal_base_url']; + $fcrepo_base_url = $app['crayfish.fedora_resource.base_url']; + $is_drupal_url = strpos($without_protocol, $drupal_base_url) === 0 && + strpos($without_protocol, $fcrepo_base_url) !== 0; + + $this->log->debug("Looking for reverse URI for: $uri"); + $this->log->debug("$uri ". $is_drupal_url ? 'is a Drupal URL' : 'is not a Drupal URL'); + + if ($is_drupal_url) { + $reverse_uri = $this->getFedoraUrl($uri, $fcrepo_base_url, $token); + + if (!empty($reverse_uri)) { + // Add the protocol back in. + $reverse_uri = "http://$reverse_uri"; // Don't rewrite the current URI (in-case of sameAs) if ($reverse_uri !== $fedora_uri) { $predicate = $this->findPredicateForObject($graph, $uri); @@ -234,6 +258,54 @@ function ($item) use ($fedora_uri) { return new Response($new_body, 200, $headers); } + private function getFedoraUrl($drupal_url, $fcrepo_base_url, $token) + { + try { + // Strip off any query params and force the json format. + $exploded = explode('?', $drupal_url); + $drupal_url = $exploded[0] . '?_format=json'; + + $response = $this->http->get($drupal_url, ['Authorization' => $token]); + $json_str = $response->getBody(); + $json = json_decode($json_str, true); + $this->log->debug("GOT THIS JSON: $json_str"); + + $is_media = isset($json['bundle']) && + !empty($json['bundle']) && + $json['bundle'][0]['target_type'] == 'media_type'; + + if ($is_media) { + $link_headers = $response->getHeader('Link'); + $describes = $this->describeUri($link_headers); + $this->log->debug("DESCRIBES $describes"); + foreach ($json as $field => $value) { + $is_file = $field != "thumbnail" && + !empty($json[$field]) && + isset($json[$field][0]["url"]) && + $json[$field][0]["url"] == $describes; + + if ($is_file) { + $exploded = explode("_flysystem/fedora", $json[$field][0]["url"]); + $in_fedora = count($exploded) > 1; + if ($in_fedora) { + return rtrim($fcrepo_base_url, '/') . $exploded[1] . "/fcr:metadata"; + } else { + $uuid = $json[$field][0]['target_uuid']; + return rtrim($fcrepo_base_url, '/') . + "/{$this->entityMapper->getFedoraPath($uuid)}/fcr:metadata"; + } + } + } + } else { + $uuid = $json['uuid'][0]['value']; + return rtrim($fcrepo_base_url, '/') . '/' . $this->entityMapper->getFedoraPath($uuid); + } + } catch (RequestException $e) { + $this->log->warn($e->getMessage()); + return null; + } + } + /** * Locate the predicate for an object in a graph. * diff --git a/Recast/src/app.php b/Recast/src/app.php index 473d351f..a1823feb 100644 --- a/Recast/src/app.php +++ b/Recast/src/app.php @@ -2,9 +2,10 @@ require_once __DIR__.'/../vendor/autoload.php'; +use GuzzleHttp\Client; use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider; use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; use Islandora\Recast\Controller\RecastController; use Silex\Application; use Symfony\Component\HttpFoundation\Request; @@ -14,13 +15,9 @@ $app->register(new IslandoraServiceProvider()); $app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); -$gc = GeminiClient::create( - $app['crayfish.gemini_base_url'], - $app['monolog'] -); - $test = new RecastController( - $gc, + new EntityMapper(), + new Client(), $app['monolog'] ); diff --git a/Recast/tests/RecastControllerTests.php b/Recast/tests/RecastControllerTests.php index 5a744f63..8d5f3e8d 100644 --- a/Recast/tests/RecastControllerTests.php +++ b/Recast/tests/RecastControllerTests.php @@ -2,11 +2,14 @@ namespace Islandora\Recast\Tests; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; use Islandora\Recast\Controller\RecastController; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; use Silex\Application; @@ -26,8 +29,9 @@ class_alias('\EasyRdf_Graph', ' \EasyRdf\Graph'); */ class RecastControllerTest extends TestCase { + use ProphecyTrait; - private $gemini_prophecy; + private $http_prophecy; private $logger_prophecy; @@ -43,7 +47,7 @@ class RecastControllerTest extends TestCase */ public function setUp(): void { - $this->gemini_prophecy = $this->prophesize(GeminiClient::class); + $this->http_prophecy = $this->prophesize(Client::class); $this->logger_prophecy = $this->prophesize(Logger::class); } @@ -53,7 +57,8 @@ public function setUp(): void public function testOptions() { $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); @@ -75,21 +80,32 @@ public function testImageAdd() $output_add = realpath(__DIR__ . '/resources/drupal_image_add.json'); $output_replace = realpath(__DIR__ . '/resources/drupal_image_replace.json'); - - $this->gemini_prophecy->findByUri('http://localhost:8000/user/1?_format=jsonld', Argument::any()) - ->willReturn(null); - $this->gemini_prophecy->findByUri('http://localhost:8000/media/1?_format=jsonld', Argument::any()) - ->willReturn(null); - $this->gemini_prophecy->findByUri('http://localhost:8000/node/1?_format=jsonld', Argument::any()) - ->willReturn('http://localhost:8080/fcrepo/rest/collection1'); + $node_1 = realpath(__DIR__ . '/resources/node1.json'); + + $this->http_prophecy->get('http://localhost:8000/user/1?_format=json', Argument::any()) + ->willThrow( + new RequestException( + "NOT FOUND", + new \GuzzleHttp\Psr7\Request('GET', 'http://localhost:8000/user/1?_format=json') + ) + ); + $this->http_prophecy->get('http://localhost:8000/media/1?_format=json', Argument::any()) + ->willThrow(new RequestException( + "NOT FOUND", + new \GuzzleHttp\Psr7\Request('GET', 'http://localhost:8000/media/1?_format=json') + )); + $this->http_prophecy->get('http://localhost:8000/node/1?_format=json', Argument::any()) + ->willReturn(new \GuzzleHttp\Psr7\Response(200, [], file_get_contents($node_1))); $mock_silex_app = new Application(); - $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; + $mock_silex_app['crayfish.drupal_base_url'] = 'localhost:8000'; + $mock_silex_app['crayfish.fedora_resource.base_url'] = 'localhost:8080/fcrepo/rest'; $mock_fedora_response = $this->getMockFedoraStream(); $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); @@ -129,7 +145,8 @@ public function testInvalidType() $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); @@ -156,13 +173,21 @@ public function testPrefixes() { $resource_id = 'http://localhost:8080/fcrepo/rest/object1'; - $this->gemini_prophecy->findByUri('http://localhost:8000/user/1?_format=jsonld', Argument::any()) - ->willReturn(null); - $this->gemini_prophecy->findByUri('http://localhost:8000/node/1?_format=jsonld', Argument::any()) - ->willReturn('http://localhost:8080/fcrepo/rest/collection99'); + $node_1 = realpath(__DIR__ . '/resources/node1.json'); + + $this->http_prophecy->get('http://localhost:8000/user/1?_format=json', Argument::any()) + ->willThrow( + new RequestException( + "NOT FOUND", + new \GuzzleHttp\Psr7\Request('GET', 'http://localhost:8000/user/1?_format=json') + ) + ); + $this->http_prophecy->get('http://localhost:8000/node/1?_format=json', Argument::any()) + ->willReturn(new \GuzzleHttp\Psr7\Response(200, [], file_get_contents($node_1))); $mock_silex_app = new Application(); - $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; + $mock_silex_app['crayfish.drupal_base_url'] = 'localhost:8000'; + $mock_silex_app['crayfish.fedora_resource.base_url'] = 'localhost:8080/fcrepo/rest'; $mock_silex_app['crayfish.namespaces'] = $this->namespaces; $mock_fedora_response = $this->getMockFedoraStream( @@ -171,7 +196,8 @@ public function testPrefixes() ); $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); diff --git a/Recast/tests/resources/drupal_image_add.json b/Recast/tests/resources/drupal_image_add.json index 972fdeb0..6bbd7f10 100644 --- a/Recast/tests/resources/drupal_image_add.json +++ b/Recast/tests/resources/drupal_image_add.json @@ -73,7 +73,7 @@ "@id": "http://localhost:8000/node/1?_format=jsonld" }, { - "@id": "http://localhost:8080/fcrepo/rest/collection1" + "@id": "http://localhost:8080/fcrepo/rest/b5/5d/ce/b8/b55dceb8-d070-49ce-b37f-f64b1aadb871" } ] } diff --git a/Recast/tests/resources/drupal_image_replace.json b/Recast/tests/resources/drupal_image_replace.json index 4aa76f2c..c1b3392b 100644 --- a/Recast/tests/resources/drupal_image_replace.json +++ b/Recast/tests/resources/drupal_image_replace.json @@ -70,7 +70,7 @@ ], "http://pcdm.org/models#memberOf": [ { - "@id": "http://localhost:8080/fcrepo/rest/collection1" + "@id": "http://localhost:8080/fcrepo/rest/b5/5d/ce/b8/b55dceb8-d070-49ce-b37f-f64b1aadb871" } ] } diff --git a/Recast/tests/resources/node1.json b/Recast/tests/resources/node1.json new file mode 100644 index 00000000..21ef5e67 --- /dev/null +++ b/Recast/tests/resources/node1.json @@ -0,0 +1,185 @@ +{ + "nid": [ + { + "value": 1 + } + ], + "uuid": [ + { + "value": "b55dceb8-d070-49ce-b37f-f64b1aadb871" + } + ], + "vid": [ + { + "value": 48 + } + ], + "langcode": [ + { + "value": "en" + } + ], + "type": [ + { + "target_id": "islandora_object", + "target_type": "node_type", + "target_uuid": "4d81109d-ded5-4e96-8143-18f6534ea270" + } + ], + "revision_timestamp": [ + { + "value": "2019-06-05T04:05:52+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "revision_uid": [ + { + "target_id": 3, + "target_type": "user", + "target_uuid": "f86dc23f-9850-49ad-8d9c-bafb6e93c8bf", + "url": "/user/3" + } + ], + "revision_log": [], + "status": [ + { + "value": true + } + ], + "uid": [ + { + "target_id": 1, + "target_type": "user", + "target_uuid": "f77beca6-3b12-4f61-ae83-947bd848b28a", + "url": "/user/1" + } + ], + "title": [ + { + "value": "Grey and White Tabby Kitten" + } + ], + "created": [ + { + "value": "2019-06-04T14:46:17+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "changed": [ + { + "value": "2019-06-05T04:05:52+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "promote": [ + { + "value": true + } + ], + "sticky": [ + { + "value": false + } + ], + "default_langcode": [ + { + "value": true + } + ], + "revision_translation_affected": [ + { + "value": true + } + ], + "content_translation_source": [ + { + "value": "und" + } + ], + "content_translation_outdated": [ + { + "value": false + } + ], + "field_alternative_title": [], + "field_classification": [], + "field_coordinates": [], + "field_coordinates_text": [], + "field_description": [ + { + "value": "A worried-looking kitten. " + } + ], + "field_dewey_classification": [], + "field_display_hints": [ + { + "target_id": 1, + "target_type": "taxonomy_term", + "target_uuid": "7638c297-e3c3-46c5-ad5d-fb56ee2d915b", + "url": "/taxonomy/term/1" + } + ], + "field_edition": [], + "field_edtf_date": [], + "field_edtf_date_created": [ + { + "value": "2019-04-19" + } + ], + "field_edtf_date_issued": [], + "field_extent": [ + { + "value": "1 item" + } + ], + "field_genre": [], + "field_geographic_subject": [], + "field_identifier": [], + "field_isbn": [], + "field_language": [], + "field_lcc_classification": [], + "field_linked_agent": [], + "field_local_identifier": [], + "field_member_of": [ + { + "target_id": 7, + "target_type": "node", + "target_uuid": "c0bdeca7-7ecc-4745-9e62-224d889d6b74", + "url": "/node/7" + } + ], + "field_model": [ + { + "target_id": 24, + "target_type": "taxonomy_term", + "target_uuid": "d1d40b4e-b608-4604-a4a4-e4fec9e88c38", + "url": "/taxonomy/term/24" + } + ], + "field_note": [], + "field_oclc_number": [], + "field_physical_form": [], + "field_pid": [], + "field_place_published": [], + "field_resource_type": [ + { + "target_id": 5, + "target_type": "taxonomy_term", + "target_uuid": "c785e833-f0f9-489a-b024-a5e7c9258826", + "url": "/taxonomy/term/5" + } + ], + "field_rights": [], + "field_subject": [ + { + "target_id": 27, + "target_type": "taxonomy_term", + "target_uuid": "6f645854-a0ec-4690-a7da-70f7df7bf195", + "url": "/cats" + } + ], + "field_subjects_name": [], + "field_table_of_contents": [], + "field_temporal_subject": [], + "field_weight": [] +} diff --git a/composer.phar b/composer.phar new file mode 100755 index 00000000..1574d12f Binary files /dev/null and b/composer.phar differ