diff --git a/.gitignore b/.gitignore
index 6f9d3c8b..4f6d9e36 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,4 @@ coverage.xml
*.key
*.log
syn-settings.xml
-cfg/config.yaml
+*/cfg/config.yaml
diff --git a/Gemini/src/Controller/GeminiController.php b/Gemini/src/Controller/GeminiController.php
index 343de60f..bdbdf6df 100644
--- a/Gemini/src/Controller/GeminiController.php
+++ b/Gemini/src/Controller/GeminiController.php
@@ -142,4 +142,31 @@ 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/UrlMapper/UrlMapper.php b/Gemini/src/UrlMapper/UrlMapper.php
index 5afa7432..8e13532f 100644
--- a/Gemini/src/UrlMapper/UrlMapper.php
+++ b/Gemini/src/UrlMapper/UrlMapper.php
@@ -102,4 +102,18 @@ public function deleteUrls($uuid)
throw $e;
}
}
+
+ /**
+ * {@inheritdoc}
+ */
+ public function findUrls($uri)
+ {
+ $query =
+ 'SELECT fedora_uri as uri FROM Gemini WHERE drupal_uri = :uri union
+ SELECT drupal_uri as uri FROM Gemini WHERE fedora_uri = :uri';
+ return $this->connection->fetchAssoc(
+ $query,
+ ['uri' => $uri]
+ );
+ }
}
diff --git a/Gemini/src/UrlMapper/UrlMapperInterface.php b/Gemini/src/UrlMapper/UrlMapperInterface.php
index a4de0c00..72901c1f 100644
--- a/Gemini/src/UrlMapper/UrlMapperInterface.php
+++ b/Gemini/src/UrlMapper/UrlMapperInterface.php
@@ -44,4 +44,20 @@ public function saveUrls(
public function deleteUrls(
$uuid
);
+
+ /**
+ * Locate a URI provided the opposite URI.
+ *
+ * Given either the Drupal or Fedora URI, search the Gemini DB and return
+ * the other URI. Otherwise return null.
+ *
+ * @param string $uri
+ * The known URI (either Fedora or Drupal).
+ *
+ * @return mixed array|null
+ * The other URI if found.
+ */
+ public function findUrls(
+ $uri
+ );
}
diff --git a/Gemini/src/app.php b/Gemini/src/app.php
index f9eb4a07..bcfc03fc 100644
--- a/Gemini/src/app.php
+++ b/Gemini/src/app.php
@@ -28,6 +28,8 @@
);
};
+$app->get('/by_uri', "gemini.controller:getByUri");
+
$app->get('/{uuid}', "gemini.controller:get");
$app->post('/', "gemini.controller:post");
diff --git a/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php b/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php
new file mode 100644
index 00000000..5134edff
--- /dev/null
+++ b/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php
@@ -0,0 +1,163 @@
+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/UrlMapperTest.php b/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php
index da4b26bc..03a3683d 100644
--- a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php
+++ b/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php
@@ -183,4 +183,33 @@ public function testDeleteUrlsRollsBackOnException()
$mapper = new UrlMapper($connection);
$mapper->deleteUrls("foo");
}
+
+ /**
+ * @covers ::findUrls
+ */
+ public function testFindUrls()
+ {
+ // 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)
+ );
+ }
}
diff --git a/Houdini/composer.lock b/Houdini/composer.lock
index 7da12c5f..34c27ab7 100644
--- a/Houdini/composer.lock
+++ b/Houdini/composer.lock
@@ -656,32 +656,33 @@
},
{
"name": "guzzlehttp/psr7",
- "version": "1.4.2",
+ "version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
+ "reference": "9f83dded91781a01c63574e387eaa769be769115"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
+ "reference": "9f83dded91781a01c63574e387eaa769be769115",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
- "psr/http-message": "~1.0"
+ "psr/http-message": "~1.0",
+ "ralouphie/getallheaders": "^2.0.5"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
@@ -711,13 +712,14 @@
"keywords": [
"http",
"message",
+ "psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
- "time": "2017-03-20T17:10:46+00:00"
+ "time": "2018-12-04T20:46:45+00:00"
},
{
"name": "islandora/chullo",
@@ -781,12 +783,12 @@
"source": {
"type": "git",
"url": "https://github.com/Islandora-CLAW/Crayfish-Commons.git",
- "reference": "0a317dea6757b184f2c19632c2323123eb88553b"
+ "reference": "6431c8f93a769d3d68920f1735af0ed0cbf8c257"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/0a317dea6757b184f2c19632c2323123eb88553b",
- "reference": "0a317dea6757b184f2c19632c2323123eb88553b",
+ "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/6431c8f93a769d3d68920f1735af0ed0cbf8c257",
+ "reference": "6431c8f93a769d3d68920f1735af0ed0cbf8c257",
"shasum": ""
},
"require": {
@@ -830,7 +832,7 @@
}
],
"description": "Shared code amongst Islandora Crayfish microservices",
- "time": "2018-11-21T17:51:22+00:00"
+ "time": "2019-01-09T20:59:28+00:00"
},
{
"name": "ml/iri",
@@ -1310,6 +1312,46 @@
],
"time": "2018-11-20T15:27:04+00:00"
},
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+ "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~3.7.0",
+ "satooshi/php-coveralls": ">=1.0"
+ },
+ "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.",
+ "time": "2016-02-11T07:05:27+00:00"
+ },
{
"name": "silex/silex",
"version": "v2.2.4",
@@ -1402,16 +1444,16 @@
},
{
"name": "symfony/debug",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d"
+ "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d",
- "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
+ "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
"shasum": ""
},
"require": {
@@ -1454,20 +1496,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-25T10:19:25+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a"
+ "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a",
- "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b",
+ "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b",
"shasum": ""
},
"require": {
@@ -1517,7 +1559,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T10:17:44+00:00"
+ "time": "2019-01-16T13:27:11+00:00"
},
{
"name": "symfony/http-foundation",
@@ -1657,16 +1699,16 @@
},
{
"name": "symfony/inflector",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/inflector.git",
- "reference": "85af902561d22b3094be027e054559b73aab42a0"
+ "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/inflector/zipball/85af902561d22b3094be027e054559b73aab42a0",
- "reference": "85af902561d22b3094be027e054559b73aab42a0",
+ "url": "https://api.github.com/repos/symfony/inflector/zipball/4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1",
+ "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1",
"shasum": ""
},
"require": {
@@ -1711,7 +1753,7 @@
"symfony",
"words"
],
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T13:27:11+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -1999,16 +2041,16 @@
},
{
"name": "symfony/property-access",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "baacb3469aff133679f59f4f09a54381c7880a37"
+ "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/baacb3469aff133679f59f4f09a54381c7880a37",
- "reference": "baacb3469aff133679f59f4f09a54381c7880a37",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/dedc7c1b52e1d0cd5069da0b4c727b3087897f90",
+ "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90",
"shasum": ""
},
"require": {
@@ -2063,20 +2105,20 @@
"property path",
"reflection"
],
- "time": "2018-11-26T12:13:27+00:00"
+ "time": "2019-01-16T09:39:14+00:00"
},
{
"name": "symfony/routing",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c"
+ "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c",
- "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646",
+ "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646",
"shasum": ""
},
"require": {
@@ -2140,7 +2182,7 @@
"uri",
"url"
],
- "time": "2018-11-26T08:40:22+00:00"
+ "time": "2019-01-29T08:47:12+00:00"
},
{
"name": "symfony/security",
@@ -2222,16 +2264,16 @@
},
{
"name": "symfony/yaml",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "291e13d808bec481eab83f301f7bff3e699ef603"
+ "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603",
- "reference": "291e13d808bec481eab83f301f7bff3e699ef603",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d",
+ "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d",
"shasum": ""
},
"require": {
@@ -2277,7 +2319,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T10:59:17+00:00"
}
],
"packages-dev": [
@@ -3667,16 +3709,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "49465af22d94c8d427c51facbf8137eb285b9726"
+ "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/49465af22d94c8d427c51facbf8137eb285b9726",
- "reference": "49465af22d94c8d427c51facbf8137eb285b9726",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471",
+ "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471",
"shasum": ""
},
"require": {
@@ -3720,20 +3762,20 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T10:17:44+00:00"
+ "time": "2019-01-16T09:39:14+00:00"
},
{
"name": "symfony/console",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb"
+ "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
- "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
+ "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
+ "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
"shasum": ""
},
"require": {
@@ -3745,6 +3787,9 @@
"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",
@@ -3754,7 +3799,7 @@
"symfony/process": "~3.3|~4.0"
},
"suggest": {
- "psr/log-implementation": "For using the console logger",
+ "psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": ""
@@ -3789,20 +3834,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T12:48:07+00:00"
+ "time": "2019-01-25T10:42:12+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8"
+ "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8",
- "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
+ "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
"shasum": ""
},
"require": {
@@ -3842,20 +3887,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T09:39:14+00:00"
},
{
"name": "symfony/dom-crawler",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa"
+ "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b6e94248eb4f8602a5825301b0bea1eb8cc82cfa",
- "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422",
+ "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422",
"shasum": ""
},
"require": {
@@ -3899,20 +3944,20 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T10:17:44+00:00"
+ "time": "2019-01-16T13:27:11+00:00"
},
{
"name": "symfony/finder",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442"
+ "reference": "7c0c627220308928e958a87c293108e5891cde1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
- "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
+ "reference": "7c0c627220308928e958a87c293108e5891cde1d",
"shasum": ""
},
"require": {
@@ -3948,7 +3993,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T13:43:35+00:00"
},
{
"name": "theseer/fdomdocument",
@@ -3992,20 +4037,21 @@
},
{
"name": "webmozart/assert",
- "version": "1.3.0",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
- "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+ "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
- "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
+ "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "php": "^5.3.3 || ^7.0",
+ "symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"phpunit/phpunit": "^4.6",
@@ -4038,7 +4084,7 @@
"check",
"validate"
],
- "time": "2018-01-29T19:49:41+00:00"
+ "time": "2018-12-25T11:19:39+00:00"
}
],
"aliases": [],
diff --git a/Milliner/composer.lock b/Milliner/composer.lock
index ae3fb223..5756642a 100644
--- a/Milliner/composer.lock
+++ b/Milliner/composer.lock
@@ -656,32 +656,33 @@
},
{
"name": "guzzlehttp/psr7",
- "version": "1.4.2",
+ "version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
+ "reference": "9f83dded91781a01c63574e387eaa769be769115"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
+ "reference": "9f83dded91781a01c63574e387eaa769be769115",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
- "psr/http-message": "~1.0"
+ "psr/http-message": "~1.0",
+ "ralouphie/getallheaders": "^2.0.5"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
@@ -711,13 +712,14 @@
"keywords": [
"http",
"message",
+ "psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
- "time": "2017-03-20T17:10:46+00:00"
+ "time": "2018-12-04T20:46:45+00:00"
},
{
"name": "islandora/chullo",
@@ -781,12 +783,12 @@
"source": {
"type": "git",
"url": "https://github.com/Islandora-CLAW/Crayfish-Commons.git",
- "reference": "0a317dea6757b184f2c19632c2323123eb88553b"
+ "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/0a317dea6757b184f2c19632c2323123eb88553b",
- "reference": "0a317dea6757b184f2c19632c2323123eb88553b",
+ "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/6e361bd180e9b62ef343ead5344677d9f0d1c897",
+ "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897",
"shasum": ""
},
"require": {
@@ -797,7 +799,7 @@
"pimple/pimple": "~3.0",
"psr/log": "^1.0.1",
"silex/silex": "^2.0",
- "symfony/http-foundation": "3.2.6",
+ "symfony/http-foundation": "^3.2.6",
"symfony/security": "^3.2",
"symfony/yaml": "^3.2"
},
@@ -830,7 +832,7 @@
}
],
"description": "Shared code amongst Islandora Crayfish microservices",
- "time": "2018-11-21T17:51:22+00:00"
+ "time": "2019-02-04T14:57:25+00:00"
},
{
"name": "ml/iri",
@@ -1310,6 +1312,46 @@
],
"time": "2018-11-20T15:27:04+00:00"
},
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+ "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~3.7.0",
+ "satooshi/php-coveralls": ">=1.0"
+ },
+ "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.",
+ "time": "2016-02-11T07:05:27+00:00"
+ },
{
"name": "silex/silex",
"version": "v2.2.4",
@@ -1402,16 +1444,16 @@
},
{
"name": "symfony/debug",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d"
+ "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d",
- "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
+ "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
"shasum": ""
},
"require": {
@@ -1454,20 +1496,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-25T10:19:25+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a"
+ "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a",
- "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b",
+ "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b",
"shasum": ""
},
"require": {
@@ -1517,33 +1559,34 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T10:17:44+00:00"
+ "time": "2019-01-16T13:27:11+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v3.2.6",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "c57009887010eb4e58bfca2970314a5b820b24b9"
+ "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c57009887010eb4e58bfca2970314a5b820b24b9",
- "reference": "c57009887010eb4e58bfca2970314a5b820b24b9",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a81d2330ea255ded06a69b4f7fb7804836e7a05",
+ "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
- "symfony/polyfill-mbstring": "~1.1"
+ "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"
+ "symfony/expression-language": "~2.8|~3.0|~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -1570,53 +1613,59 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2017-03-04T12:23:14+00:00"
+ "time": "2019-01-27T09:04:14+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v3.2.14",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "18ec42e19ec676d7da5ddff13f1eed68d88fb460"
+ "reference": "dc6bf17684b7120f7bf74fae85c9155506041002"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/18ec42e19ec676d7da5ddff13f1eed68d88fb460",
- "reference": "18ec42e19ec676d7da5ddff13f1eed68d88fb460",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/dc6bf17684b7120f7bf74fae85c9155506041002",
+ "reference": "dc6bf17684b7120f7bf74fae85c9155506041002",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
+ "php": "^5.5.9|>=7.0.8",
"psr/log": "~1.0",
- "symfony/debug": "~2.8|~3.0",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2"
+ "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"
},
"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": {
- "symfony/browser-kit": "~2.8|~3.0",
+ "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",
- "symfony/console": "~2.8|~3.0",
- "symfony/css-selector": "~2.8|~3.0",
- "symfony/dependency-injection": "~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/process": "~2.8|~3.0",
- "symfony/routing": "~2.8|~3.0",
- "symfony/stopwatch": "~2.8|~3.0",
- "symfony/templating": "~2.8|~3.0",
- "symfony/translation": "~2.8|~3.0",
- "symfony/var-dumper": "~3.2"
+ "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/class-loader": "",
"symfony/config": "",
"symfony/console": "",
"symfony/dependency-injection": "",
@@ -1626,7 +1675,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -1653,20 +1702,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2017-08-01T09:40:19+00:00"
+ "time": "2019-02-03T12:22:50+00:00"
},
{
"name": "symfony/inflector",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/inflector.git",
- "reference": "85af902561d22b3094be027e054559b73aab42a0"
+ "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/inflector/zipball/85af902561d22b3094be027e054559b73aab42a0",
- "reference": "85af902561d22b3094be027e054559b73aab42a0",
+ "url": "https://api.github.com/repos/symfony/inflector/zipball/4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1",
+ "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1",
"shasum": ""
},
"require": {
@@ -1711,7 +1760,7 @@
"symfony",
"words"
],
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T13:27:11+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -1758,7 +1807,7 @@
},
{
"name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
+ "email": "backendtea@gmail.com"
}
],
"description": "Symfony polyfill for ctype functions",
@@ -1999,16 +2048,16 @@
},
{
"name": "symfony/property-access",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "baacb3469aff133679f59f4f09a54381c7880a37"
+ "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/baacb3469aff133679f59f4f09a54381c7880a37",
- "reference": "baacb3469aff133679f59f4f09a54381c7880a37",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/dedc7c1b52e1d0cd5069da0b4c727b3087897f90",
+ "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90",
"shasum": ""
},
"require": {
@@ -2063,20 +2112,20 @@
"property path",
"reflection"
],
- "time": "2018-11-26T12:13:27+00:00"
+ "time": "2019-01-16T09:39:14+00:00"
},
{
"name": "symfony/routing",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c"
+ "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c",
- "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646",
+ "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646",
"shasum": ""
},
"require": {
@@ -2140,31 +2189,30 @@
"uri",
"url"
],
- "time": "2018-11-26T08:40:22+00:00"
+ "time": "2019-01-29T08:47:12+00:00"
},
{
"name": "symfony/security",
- "version": "v3.2.13",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/security.git",
- "reference": "3f6e39f1918f009524e36a56f1609cf74a8cd47c"
+ "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security/zipball/3f6e39f1918f009524e36a56f1609cf74a8cd47c",
- "reference": "3f6e39f1918f009524e36a56f1609cf74a8cd47c",
+ "url": "https://api.github.com/repos/symfony/security/zipball/25c0590cd98d651caa560a80bde01fe8df5ed74e",
+ "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/http-foundation": "~2.8|~3.0",
- "symfony/http-kernel": "~2.8|~3.0",
+ "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/polyfill-util": "~1.0",
- "symfony/property-access": "~2.8|~3.0"
+ "symfony/property-access": "~2.8|~3.0|~4.0"
},
"replace": {
"symfony/security-core": "self.version",
@@ -2173,15 +2221,17 @@
"symfony/security-http": "self.version"
},
"require-dev": {
+ "psr/container": "^1.0",
"psr/log": "~1.0",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/finder": "~2.8|~3.0",
- "symfony/ldap": "~3.1",
+ "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-intl-icu": "~1.0",
- "symfony/routing": "~2.8|~3.0",
- "symfony/validator": "^2.8.18|^3.2.5"
+ "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",
@@ -2191,7 +2241,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -2199,7 +2249,10 @@
"Symfony\\Component\\Security\\": ""
},
"exclude-from-classmap": [
- "/Tests/"
+ "/Core/Tests/",
+ "/Csrf/Tests/",
+ "/Guard/Tests/",
+ "/Http/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -2218,20 +2271,20 @@
],
"description": "Symfony Security Component",
"homepage": "https://symfony.com",
- "time": "2017-07-29T21:27:41+00:00"
+ "time": "2019-01-31T10:03:47+00:00"
},
{
"name": "symfony/yaml",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "291e13d808bec481eab83f301f7bff3e699ef603"
+ "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603",
- "reference": "291e13d808bec481eab83f301f7bff3e699ef603",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d",
+ "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d",
"shasum": ""
},
"require": {
@@ -2277,7 +2330,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T10:59:17+00:00"
}
],
"packages-dev": [
@@ -3667,16 +3720,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "49465af22d94c8d427c51facbf8137eb285b9726"
+ "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/49465af22d94c8d427c51facbf8137eb285b9726",
- "reference": "49465af22d94c8d427c51facbf8137eb285b9726",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471",
+ "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471",
"shasum": ""
},
"require": {
@@ -3720,20 +3773,20 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T10:17:44+00:00"
+ "time": "2019-01-16T09:39:14+00:00"
},
{
"name": "symfony/console",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb"
+ "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
- "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
+ "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
+ "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
"shasum": ""
},
"require": {
@@ -3745,6 +3798,9 @@
"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",
@@ -3754,7 +3810,7 @@
"symfony/process": "~3.3|~4.0"
},
"suggest": {
- "psr/log-implementation": "For using the console logger",
+ "psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": ""
@@ -3789,20 +3845,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T12:48:07+00:00"
+ "time": "2019-01-25T10:42:12+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8"
+ "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8",
- "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
+ "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
"shasum": ""
},
"require": {
@@ -3842,20 +3898,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T09:39:14+00:00"
},
{
"name": "symfony/dom-crawler",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa"
+ "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b6e94248eb4f8602a5825301b0bea1eb8cc82cfa",
- "reference": "b6e94248eb4f8602a5825301b0bea1eb8cc82cfa",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422",
+ "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422",
"shasum": ""
},
"require": {
@@ -3899,20 +3955,20 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2018-11-26T10:17:44+00:00"
+ "time": "2019-01-16T13:27:11+00:00"
},
{
"name": "symfony/finder",
- "version": "v3.4.19",
+ "version": "v3.4.22",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442"
+ "reference": "7c0c627220308928e958a87c293108e5891cde1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
- "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
+ "reference": "7c0c627220308928e958a87c293108e5891cde1d",
"shasum": ""
},
"require": {
@@ -3948,7 +4004,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T19:48:54+00:00"
+ "time": "2019-01-16T13:43:35+00:00"
},
{
"name": "theseer/fdomdocument",
@@ -3992,20 +4048,21 @@
},
{
"name": "webmozart/assert",
- "version": "1.3.0",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
- "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+ "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
- "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
+ "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "php": "^5.3.3 || ^7.0",
+ "symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"phpunit/phpunit": "^4.6",
@@ -4038,7 +4095,7 @@
"check",
"validate"
],
- "time": "2018-01-29T19:49:41+00:00"
+ "time": "2018-12-25T11:19:39+00:00"
}
],
"aliases": [],
diff --git a/Milliner/src/Gemini/GeminiClient.php b/Milliner/src/Gemini/GeminiClient.php
deleted file mode 100644
index fee38e27..00000000
--- a/Milliner/src/Gemini/GeminiClient.php
+++ /dev/null
@@ -1,191 +0,0 @@
-client = $client;
- $this->log = $log;
- }
-
- public static function create($base_url, LoggerInterface $log)
- {
- $trimmed = trim($base_url);
- $with_trailing_slash = rtrim($trimmed, '/') . '/';
- return new GeminiClient(
- new Client(['base_uri' => $with_trailing_slash]),
- $log
- );
- }
-
- /**
- * Gets a pair of drupal/fedora urls for a UUID.
- * @param $uuid
- * @param $token
- *
- * @throws \GuzzleHttp\Exception\RequestException
- *
- * @return array|null
- */
- public function getUrls(
- $uuid,
- $token = null
- ) {
- try {
- if (empty($token)) {
- $response = $this->client->get($uuid);
- } else {
- $response = $this->client->get($uuid, [
- 'headers' => [
- 'Authorization' => $token,
- ],
- ]);
- }
-
- $this->log->debug("Gemini GET response", [
- 'uuid' => $uuid,
- 'response' => $response,
- ]);
-
- return json_decode($response->getBody(), true);
- } catch (RequestException $e) {
- if ($e->getResponse()->getStatusCode() == 404) {
- return null;
- }
-
- throw $e;
- }
- }
-
- /**
- * Mints a new Fedora URL for a UUID.
- * @param $uuid
- * @param $token
- *
- * @throws \GuzzleHttp\Exception\RequestException
- *
- * @return string
- */
- public function mintFedoraUrl(
- $uuid,
- $token = null
- ) {
- $headers = ['Content-Type' => 'text/plain'];
-
- if (!empty($token)) {
- $headers['Authorization'] = $token;
- }
-
- $response = $this->client->post('', [
- 'body' => $uuid,
- 'headers' => $headers,
- ]);
-
- $this->log->debug("Gemini POST response", [
- 'uuid' => $uuid,
- 'response' => $response,
- ]);
-
- return (string)$response->getBody();
- }
-
- /**
- * Saves a pair of drupal/fedora urls for a UUID.
- * @param $uuid
- * @param $drupal
- * @param $fedora
- * @param $token
- *
- * @throws \GuzzleHttp\Exception\RequestException
- *
- * @return bool
- */
- public function saveUrls(
- $uuid,
- $drupal,
- $fedora,
- $token = null
- ) {
- $body = json_encode(['drupal' => $drupal, 'fedora' => $fedora]);
-
- $headers = ['Content-Type' => 'application/json'];
-
- if (!empty($token)) {
- $headers['Authorization'] = $token;
- }
-
- $response = $this->client->put($uuid, [
- 'body' => $body,
- 'headers' => $headers,
- ]);
-
- $this->log->debug("Gemini PUT response", [
- 'uuid' => $uuid,
- 'response' => $response,
- ]);
-
- return true;
- }
-
- /**
- * Deletes a pair of drupal/fedora urls for a UUID.
- * @param $uuid
- * @param $token
- *
- * @throws \GuzzleHttp\Exception\RequestException
- *
- * @return bool
- */
- public function deleteUrls(
- $uuid,
- $token = null
- ) {
- $headers = [];
-
- if (!empty($token)) {
- $headers['Authorization'] = $token;
- }
-
- $response = $this->client->delete($uuid, [
- 'headers' => $headers,
- ]);
-
- $this->log->debug("Gemini DELETE response", [
- 'uuid' => $uuid,
- 'response' => $response,
- ]);
-
- return true;
- }
-}
diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php
index 833fc5ef..889ec26d 100644
--- a/Milliner/src/Service/MillinerService.php
+++ b/Milliner/src/Service/MillinerService.php
@@ -6,7 +6,7 @@
use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\Response;
use Islandora\Chullo\IFedoraApi;
-use Islandora\Milliner\Gemini\GeminiClient;
+use Islandora\Crayfish\Commons\Client\GeminiClient;
use Psr\Log\LoggerInterface;
/**
diff --git a/Milliner/src/app.php b/Milliner/src/app.php
index dca157eb..ccd76beb 100644
--- a/Milliner/src/app.php
+++ b/Milliner/src/app.php
@@ -6,7 +6,7 @@
use Islandora\Chullo\FedoraApi;
use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider;
use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider;
-use Islandora\Milliner\Gemini\GeminiClient;
+use Islandora\Crayfish\Commons\Client\GeminiClient;
use Islandora\Milliner\Controller\MillinerController;
use Islandora\Milliner\Service\MillinerService;
use Silex\Application;
diff --git a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php
index 2e18707a..23de4dc2 100644
--- a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php
+++ b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php
@@ -5,7 +5,7 @@
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Response;
use Islandora\Chullo\IFedoraClient;
-use Islandora\Milliner\Gemini\GeminiClient;
+use Islandora\Crayfish\Commons\Client\GeminiClient;
use Islandora\Milliner\Service\MillinerService;
use Monolog\Handler\NullHandler;
use Monolog\Logger;
diff --git a/Milliner/tests/Islandora/Milliner/Tests/GeminiClientTest.php b/Milliner/tests/Islandora/Milliner/Tests/GeminiClientTest.php
deleted file mode 100644
index 470e3e71..00000000
--- a/Milliner/tests/Islandora/Milliner/Tests/GeminiClientTest.php
+++ /dev/null
@@ -1,230 +0,0 @@
-logger = new Logger('milliner');
- $this->logger->pushHandler(new NullHandler());
- }
-
- /**
- * @covers ::__construct
- * @covers ::getUrls
- */
- public function testGetUrls()
- {
- $response = $this->prophesize(ResponseInterface::class);
- $response->getBody()->willReturn('{"drupal" : "foo", "fedora": "bar"}');
- $response = $response->reveal();
-
- $client = $this->prophesize(Client::class);
- $client->get(Argument::any(), Argument::any())->willReturn($response);
- $client = $client->reveal();
-
- $gemini = new GeminiClient(
- $client,
- $this->logger
- );
-
- $out = $gemini->getUrls("abc123");
- $this->assertTrue(
- $out['drupal'] == 'foo',
- "Gemini client must return response unaltered. Expected 'foo' but received {$out['drupal']}"
- );
- $this->assertTrue(
- $out['fedora'] == 'bar',
- "Gemini client must return response unaltered. Expected 'bar' but received {$out['fedora']}"
- );
-
- $out = $gemini->getUrls("abc123", "some_token");
- $this->assertTrue(
- $out['drupal'] == 'foo',
- "Gemini client must return response unaltered. Expected 'foo' but received {$out['drupal']}"
- );
- $this->assertTrue(
- $out['fedora'] == 'bar',
- "Gemini client must return response unaltered. Expected 'bar' but received {$out['fedora']}"
- );
- }
-
- /**
- * @covers ::__construct
- * @covers ::getUrls
- */
- public function testGetUrlsReturnsEmptyArrayWhenNotFound()
- {
- $request = $this->prophesize(RequestInterface::class)->reveal();
-
- $response = $this->prophesize(ResponseInterface::class);
- $response->getStatusCode()->willReturn(404);
- $response = $response->reveal();
-
- $client = $this->prophesize(Client::class);
- $client->get(Argument::any(), Argument::any())->willThrow(
- new RequestException("Not Found", $request, $response)
- );
- $client = $client->reveal();
-
- $gemini = new GeminiClient(
- $client,
- $this->logger
- );
-
- $this->assertTrue(
- empty($gemini->getUrls("abc123")),
- "Gemini client must return empty array if not found"
- );
- $this->assertTrue(
- empty($gemini->getUrls("abc123", "some_token")),
- "Gemini client must return empty array if not found"
- );
- }
-
- /**
- * @covers ::__construct
- * @covers ::getUrls
- * @expectedException \GuzzleHttp\Exception\RequestException
- */
- public function testGetUrlsException()
- {
- $request = $this->prophesize(RequestInterface::class)->reveal();
-
- $response = $this->prophesize(ResponseInterface::class);
- $response->getStatusCode()->willReturn(500);
- $response = $response->reveal();
-
- $client = $this->prophesize(Client::class);
- $client->get(Argument::any(), Argument::any())->willThrow(
- new RequestException("Server Error", $request, $response)
- );
- $client = $client->reveal();
-
- $gemini = new GeminiClient(
- $client,
- $this->logger
- );
- $gemini->getUrls("abc123");
- }
-
- /**
- * @covers ::__construct
- * @covers ::mintFedoraUrl
- */
- public function testMintFedoraUrl()
- {
- $response = $this->prophesize(ResponseInterface::class);
- $response->getBody()->willReturn("http://foo.com/bar");
- $response = $response->reveal();
-
- $client = $this->prophesize(Client::class);
- $client->post(Argument::any(), Argument::any())->willReturn($response);
- $client = $client->reveal();
-
- $gemini = new GeminiClient(
- $client,
- $this->logger
- );
-
- $url = $gemini->mintFedoraUrl("abc123");
- $this->assertTrue(
- $url == "http://foo.com/bar",
- "Gemini client must return response unaltered. Expected 'http://foo.com/bar' but received $url"
- );
-
- $url = $gemini->mintFedoraUrl("abc123", "some_token");
- $this->assertTrue(
- $url == "http://foo.com/bar",
- "Gemini client must return response unaltered. Expected 'http://foo.com/bar' but received $url"
- );
- }
-
- /**
- * @covers ::__construct
- * @covers ::saveUrls
- */
- public function testSaveUrls()
- {
- $client = $this->prophesize(Client::class)->reveal();
-
- $gemini = new GeminiClient(
- $client,
- $this->logger
- );
-
- $out = $gemini->saveUrls("abc123", "foo", "bar");
- $this->assertTrue(
- $out,
- "Gemini client must return true on successful saveUrls(). Received $out"
- );
-
- $out = $gemini->saveUrls("abc123", "foo", "bar", "some_token");
- $this->assertTrue(
- $out,
- "Gemini client must return true on successful saveUrls(). Received $out"
- );
- }
-
- /**
- * @covers ::__construct
- * @covers ::deleteUrls
- */
- public function testDeleteUrls()
- {
- $client = $this->prophesize(Client::class)->reveal();
-
- $gemini = new GeminiClient(
- $client,
- $this->logger
- );
-
- $out = $gemini->deleteUrls("abc123");
- $this->assertTrue(
- $out,
- "Gemini client must return true on successful deleteUrls(). Received $out"
- );
-
- $out = $gemini->deleteUrls("abc123", "some_token");
- $this->assertTrue(
- $out,
- "Gemini client must return true on successful deleteUrls(). Received $out"
- );
- }
-
- /**
- * @covers ::create
- */
- public function testCreateClient()
- {
- $client = GeminiClient::create('http://example.org', $this->logger);
- $this->assertTrue($client instanceof GeminiClient, 'Must get back a GeminiClient instance');
- }
-}
diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php
index 2fbd2563..300b4e5e 100644
--- a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php
+++ b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php
@@ -5,7 +5,7 @@
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Response;
use Islandora\Chullo\IFedoraClient;
-use Islandora\Milliner\Gemini\GeminiClient;
+use Islandora\Crayfish\Commons\Client\GeminiClient;
use Islandora\Milliner\Service\MillinerService;
use Monolog\Handler\NullHandler;
use Monolog\Logger;
diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php
index 03f2a772..fe7da0f0 100644
--- a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php
+++ b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php
@@ -5,7 +5,7 @@
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Response;
use Islandora\Chullo\IFedoraClient;
-use Islandora\Milliner\Gemini\GeminiClient;
+use Islandora\Crayfish\Commons\Client\GeminiClient;
use Islandora\Milliner\Service\MillinerService;
use Monolog\Handler\NullHandler;
use Monolog\Logger;
diff --git a/Recast/cfg/config.example.yaml b/Recast/cfg/config.example.yaml
new file mode 100644
index 00000000..90f41949
--- /dev/null
+++ b/Recast/cfg/config.example.yaml
@@ -0,0 +1,25 @@
+---
+
+fedora_resource:
+ base_url: http://localhost:8080/fcrepo/rest
+
+gemini_base_url: http://localhost:8000/gemini
+
+drupal_base_url: http://localhost:8000
+
+debug: false
+
+log:
+ # Valid log levels are:
+ # DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY, NONE
+ # log level none won't open logfile
+ level: NONE
+ file: ../recast.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-CLAW/Syn/blob/master/conf/syn-settings.example.xml
+ config: ../syn-settings.xml
\ No newline at end of file
diff --git a/Recast/composer.json b/Recast/composer.json
new file mode 100644
index 00000000..52e580f2
--- /dev/null
+++ b/Recast/composer.json
@@ -0,0 +1,50 @@
+{
+ "name": "islandora/recast",
+ "description": "Microservice rewrites Drupal URIs to Fedora URIs",
+ "type": "project",
+ "require": {
+ "silex/silex": "^2.0",
+ "islandora/crayfish-commons": "dev-master",
+ "easyrdf/easyrdf": "^0.9"
+ },
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Islandora Foundation",
+ "email": "community@islandora.ca",
+ "role": "Owner"
+ },
+ {
+ "name": "Jared Whiklo",
+ "email": "jwhiklo@gmail.com",
+ "role": "Author"
+ }
+ ],
+ "autoload": {
+ "psr-4": {
+ "Islandora\\Recast\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Islandora\\Recast\\Tests\\": "tests/"
+ }
+ },
+ "scripts": {
+ "check": [
+ "phpcs --standard=PSR2 src tests",
+ "phpcpd --names *.php src"
+ ],
+ "test": [
+ "@check",
+ "phpunit"
+ ]
+ },
+ "require-dev": {
+ "symfony/browser-kit": "^3.0",
+ "symfony/css-selector": "^3.0",
+ "squizlabs/php_codesniffer": "^2.0",
+ "sebastian/phpcpd": "^3.0",
+ "phpunit/phpunit": "^6.0"
+ }
+}
diff --git a/Recast/composer.lock b/Recast/composer.lock
new file mode 100644
index 00000000..45ad14fb
--- /dev/null
+++ b/Recast/composer.lock
@@ -0,0 +1,4300 @@
+{
+ "_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": "9097638216bc96de6a716c946bff2aa7",
+ "packages": [
+ {
+ "name": "doctrine/annotations",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "54cacc9b81758b14e3ce750f205a393d52339e97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97",
+ "reference": "54cacc9b81758b14e3ce750f205a393d52339e97",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "1.*",
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "doctrine/cache": "1.*",
+ "phpunit/phpunit": "^5.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "time": "2017-02-24T16:22:25+00:00"
+ },
+ {
+ "name": "doctrine/cache",
+ "version": "v1.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/cache.git",
+ "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b",
+ "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~5.5|~7.0"
+ },
+ "conflict": {
+ "doctrine/common": ">2.2,<2.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8|~5.0",
+ "predis/predis": "~1.0",
+ "satooshi/php-coveralls": "~0.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.6.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Caching library offering an object-oriented API for many cache backends",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "cache",
+ "caching"
+ ],
+ "time": "2017-07-22T12:49:21+00:00"
+ },
+ {
+ "name": "doctrine/collections",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/collections.git",
+ "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba",
+ "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "~0.1@dev",
+ "phpunit/phpunit": "^5.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Collections\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Collections Abstraction library",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "array",
+ "collections",
+ "iterator"
+ ],
+ "time": "2017-01-03T10:49:41+00:00"
+ },
+ {
+ "name": "doctrine/common",
+ "version": "v2.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/common.git",
+ "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9",
+ "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/annotations": "1.*",
+ "doctrine/cache": "1.*",
+ "doctrine/collections": "1.*",
+ "doctrine/inflector": "1.*",
+ "doctrine/lexer": "1.*",
+ "php": "~5.6|~7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.4.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\": "lib/Doctrine/Common"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Common Library for Doctrine projects",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "annotations",
+ "collections",
+ "eventmanager",
+ "persistence",
+ "spl"
+ ],
+ "time": "2017-07-22T08:35:12+00:00"
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "v2.5.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal.git",
+ "reference": "729340d8d1eec8f01bff708e12e449a3415af873"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873",
+ "reference": "729340d8d1eec8f01bff708e12e449a3415af873",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/common": ">=2.4,<2.8-dev",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "symfony/console": "2.*||^3.0"
+ },
+ "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": "2.5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\DBAL\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ }
+ ],
+ "description": "Database Abstraction Layer",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "dbal",
+ "persistence",
+ "queryobject"
+ ],
+ "time": "2017-07-22T20:44:48+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "v1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462",
+ "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Common String Manipulations with regard to casing and singular/plural rules.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "inflection",
+ "pluralize",
+ "singularize",
+ "string"
+ ],
+ "time": "2017-07-22T12:18:28+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Lexer\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "lexer",
+ "parser"
+ ],
+ "time": "2014-09-09T13:34:57+00:00"
+ },
+ {
+ "name": "easyrdf/easyrdf",
+ "version": "0.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/njh/easyrdf.git",
+ "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/njh/easyrdf/zipball/acd09dfe0555fbcfa254291e433c45fdd4652566",
+ "reference": "acd09dfe0555fbcfa254291e433c45fdd4652566",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-pcre": "*",
+ "php": ">=5.2.8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~3.5",
+ "sami/sami": "~1.4",
+ "squizlabs/php_codesniffer": "~1.4.3"
+ },
+ "suggest": {
+ "ml/json-ld": "~1.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "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",
+ "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"
+ ],
+ "time": "2015-02-27T09:45:49+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "6.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+ "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/promises": "^1.0",
+ "guzzlehttp/psr7": "^1.4",
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "ext-curl": "*",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+ "psr/log": "^1.0"
+ },
+ "suggest": {
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.3-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "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"
+ ],
+ "time": "2018-04-22T15:46:56+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "v1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+ "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0"
+ },
+ "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"
+ ],
+ "time": "2016-12-20T10:07:11+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "1.5.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "9f83dded91781a01c63574e387eaa769be769115"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
+ "reference": "9f83dded91781a01c63574e387eaa769be769115",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0",
+ "psr/http-message": "~1.0",
+ "ralouphie/getallheaders": "^2.0.5"
+ },
+ "provide": {
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.5-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"
+ ],
+ "time": "2018-12-04T20:46:45+00:00"
+ },
+ {
+ "name": "islandora/chullo",
+ "version": "0.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Islandora-CLAW/chullo.git",
+ "reference": "c90c9f1670617b1be939709c2d72c74d2e589d8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Islandora-CLAW/chullo/zipball/c90c9f1670617b1be939709c2d72c74d2e589d8c",
+ "reference": "c90c9f1670617b1be939709c2d72c74d2e589d8c",
+ "shasum": ""
+ },
+ "require": {
+ "easyrdf/easyrdf": "^0.9.1",
+ "guzzlehttp/guzzle": "^6.1.0",
+ "ml/json-ld": "^1.0.4",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9",
+ "phpunit/phpunit": "^4.8",
+ "squizlabs/php_codesniffer": "^2.0@dev"
+ },
+ "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": "Nick Ruest",
+ "email": "ruestn@gmail.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Daniel Lamb",
+ "email": "dlamb@islandora.ca",
+ "role": "Maintainer"
+ }
+ ],
+ "description": "A PHP client for interacting with a Fedora 4 server.",
+ "homepage": "https://github.com/islandora-claw/chullo",
+ "time": "2017-04-12T20:14:38+00:00"
+ },
+ {
+ "name": "islandora/crayfish-commons",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Islandora-CLAW/Crayfish-Commons.git",
+ "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Islandora-CLAW/Crayfish-Commons/zipball/6e361bd180e9b62ef343ead5344677d9f0d1c897",
+ "reference": "6e361bd180e9b62ef343ead5344677d9f0d1c897",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/dbal": "~2.2",
+ "islandora/chullo": "^0.1.1",
+ "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"
+ },
+ "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",
+ "time": "2019-02-04T14:57:25+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"
+ ],
+ "time": "2014-01-21T13:43:39+00:00"
+ },
+ {
+ "name": "ml/json-ld",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lanthaler/JsonLD.git",
+ "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/b5f82820c255cb64067b1c7adbb819cad4afa70a",
+ "reference": "b5f82820c255cb64067b1c7adbb819cad4afa70a",
+ "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"
+ ],
+ "time": "2018-11-18T20:26:18+00:00"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "1.24.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
+ "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",
+ "jakub-onderka/php-parallel-lint": "0.9",
+ "php-amqplib/php-amqplib": "~2.4",
+ "php-console/php-console": "^3.1.3",
+ "phpunit/phpunit": "~4.5",
+ "phpunit/phpunit-mock-objects": "2.3.0",
+ "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"
+ ],
+ "time": "2018-11-05T09:00:11+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"
+ ],
+ "time": "2016-12-05T07:27:31+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2018-07-02T15:55:56+00:00"
+ },
+ {
+ "name": "pimple/pimple",
+ "version": "v3.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/silexphp/Pimple.git",
+ "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
+ "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/container": "^1.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2.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": "http://pimple.sensiolabs.org",
+ "keywords": [
+ "container",
+ "dependency injection"
+ ],
+ "time": "2018-01-21T07:42:36+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"
+ ],
+ "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"
+ ],
+ "time": "2016-08-06T14:39:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.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"
+ ],
+ "time": "2018-11-20T15:27:04+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+ "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~3.7.0",
+ "satooshi/php-coveralls": ">=1.0"
+ },
+ "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.",
+ "time": "2016-02-11T07:05:27+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"
+ ],
+ "abandoned": "symfony/flex",
+ "time": "2018-03-16T23:34:20+00:00"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/debug.git",
+ "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
+ "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8",
+ "psr/log": "~1.0"
+ },
+ "conflict": {
+ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+ },
+ "require-dev": {
+ "symfony/http-kernel": "~2.8|~3.0|~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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",
+ "time": "2019-01-25T10:19:25+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b",
+ "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b",
+ "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/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",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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",
+ "time": "2019-01-16T13:27:11+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9a81d2330ea255ded06a69b4f7fb7804836e7a05",
+ "reference": "9a81d2330ea255ded06a69b4f7fb7804836e7a05",
+ "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",
+ "time": "2019-01-27T09:04:14+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "dc6bf17684b7120f7bf74fae85c9155506041002"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/dc6bf17684b7120f7bf74fae85c9155506041002",
+ "reference": "dc6bf17684b7120f7bf74fae85c9155506041002",
+ "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"
+ },
+ "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",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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",
+ "time": "2019-02-03T12:22:50+00:00"
+ },
+ {
+ "name": "symfony/inflector",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/inflector.git",
+ "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/inflector/zipball/4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1",
+ "reference": "4a7d5c4ad3edeba3fe4a27d26ece6a012eee46b1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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"
+ ],
+ "time": "2019-01-16T13:27:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
+ "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ },
+ {
+ "name": "Gert de Pagter",
+ "email": "backendtea@gmail.com"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "time": "2018-08-06T14:22:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
+ "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "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"
+ ],
+ "time": "2018-09-21T13:07:52+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php56",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php56.git",
+ "reference": "ff208829fe1aa48ab9af356992bb7199fed551af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ff208829fe1aa48ab9af356992bb7199fed551af",
+ "reference": "ff208829fe1aa48ab9af356992bb7199fed551af",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/polyfill-util": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php56\\": ""
+ },
+ "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 5.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2018-09-21T06:26:08+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php70",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php70.git",
+ "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224",
+ "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/random_compat": "~1.0|~2.0|~9.99",
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php70\\": ""
+ },
+ "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 backporting some PHP 7.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2018-09-21T06:26:08+00:00"
+ },
+ {
+ "name": "symfony/polyfill-util",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-util.git",
+ "reference": "3b58903eae668d348a7126f999b0da0f2f93611c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/3b58903eae668d348a7126f999b0da0f2f93611c",
+ "reference": "3b58903eae668d348a7126f999b0da0f2f93611c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Util\\": ""
+ }
+ },
+ "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 utilities for portability of PHP codes",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compat",
+ "compatibility",
+ "polyfill",
+ "shim"
+ ],
+ "time": "2018-09-30T16:36:12+00:00"
+ },
+ {
+ "name": "symfony/property-access",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/property-access.git",
+ "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/dedc7c1b52e1d0cd5069da0b4c727b3087897f90",
+ "reference": "dedc7c1b52e1d0cd5069da0b4c727b3087897f90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8",
+ "symfony/inflector": "~3.1|~4.0",
+ "symfony/polyfill-php70": "~1.0"
+ },
+ "require-dev": {
+ "symfony/cache": "~3.1|~4.0"
+ },
+ "suggest": {
+ "psr/cache-implementation": "To cache access methods."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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"
+ ],
+ "time": "2019-01-16T09:39:14+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646",
+ "reference": "62f0b8d8cd2cd359c3caa5a9f5253a4a6d480646",
+ "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/dependency-injection": "For loading routes from a service",
+ "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",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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"
+ ],
+ "time": "2019-01-29T08:47:12+00:00"
+ },
+ {
+ "name": "symfony/security",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/security.git",
+ "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/security/zipball/25c0590cd98d651caa560a80bde01fe8df5ed74e",
+ "reference": "25c0590cd98d651caa560a80bde01fe8df5ed74e",
+ "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-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",
+ "time": "2019-01-31T10:03:47+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d",
+ "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d",
+ "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",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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",
+ "time": "2019-01-16T10:59:17+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "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": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14T21:17:01+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+ "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^4.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"
+ ],
+ "time": "2017-10-19T19:58:43+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0",
+ "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^1.0.1",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.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)",
+ "time": "2017-03-05T18:14:27+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df",
+ "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.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",
+ "time": "2017-03-05T17:38:23+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.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"
+ ],
+ "time": "2017-09-11T18:02:19+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "4.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
+ "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "phpdocumentor/reflection-common": "^1.0.0",
+ "phpdocumentor/type-resolver": "^0.4.0",
+ "webmozart/assert": "^1.0"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "~1.0.5",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.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": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "time": "2017-11-30T07:14:17+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
+ "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5 || ^7.0",
+ "phpdocumentor/reflection-common": "^1.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9.4",
+ "phpunit/phpunit": "^5.2||^4.8.24"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.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"
+ }
+ ],
+ "time": "2017-07-14T14:27:02+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+ "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
+ "sebastian/comparator": "^1.1|^2.0|^3.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.5|^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2018-08-05T17:53:17+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "5.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "c89677919c5dd6d3b3852f230a663118762218ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac",
+ "reference": "c89677919c5dd6d3b3852f230a663118762218ac",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0",
+ "phpunit/php-file-iterator": "^1.4.2",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-token-stream": "^2.0.1",
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
+ "sebastian/environment": "^3.0",
+ "sebastian/version": "^2.0.1",
+ "theseer/tokenizer": "^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "suggest": {
+ "ext-xdebug": "^2.5.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.3.x-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"
+ ],
+ "time": "2018-04-06T15:36:58+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.4.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+ "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.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"
+ ],
+ "time": "2017-11-27T13:52:08+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+ "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+ },
+ "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": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2017-02-26T11:10:40+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "791198a2c6254db10131eecfe8c06670700904db"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
+ "reference": "791198a2c6254db10131eecfe8c06670700904db",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.2.4"
+ },
+ "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": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2017-11-27T05:48:46+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "6.5.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+ "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "^1.6.1",
+ "phar-io/manifest": "^1.0.1",
+ "phar-io/version": "^1.0",
+ "php": "^7.0",
+ "phpspec/prophecy": "^1.7",
+ "phpunit/php-code-coverage": "^5.3",
+ "phpunit/php-file-iterator": "^1.4.3",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-timer": "^1.0.9",
+ "phpunit/phpunit-mock-objects": "^5.0.9",
+ "sebastian/comparator": "^2.1",
+ "sebastian/diff": "^2.0",
+ "sebastian/environment": "^3.1",
+ "sebastian/exporter": "^3.1",
+ "sebastian/global-state": "^2.0",
+ "sebastian/object-enumerator": "^3.0.3",
+ "sebastian/resource-operations": "^1.0",
+ "sebastian/version": "^2.0.1"
+ },
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "3.0.2",
+ "phpunit/dbunit": "<3.0"
+ },
+ "require-dev": {
+ "ext-pdo": "*"
+ },
+ "suggest": {
+ "ext-xdebug": "*",
+ "phpunit/php-invoker": "^1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.5.x-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": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2019-02-01T05:22:47+00:00"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "5.0.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f",
+ "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.5",
+ "php": "^7.0",
+ "phpunit/php-text-template": "^1.2.1",
+ "sebastian/exporter": "^3.1"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.5.11"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0.x-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": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2018-08-09T05:50:03+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7 || ^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-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/",
+ "time": "2017-03-04T06:30:41+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9",
+ "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "sebastian/diff": "^2.0 || ^3.0",
+ "sebastian/exporter": "^3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2018-02-01T13:46:46+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
+ "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.2"
+ },
+ "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": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2017-08-03T08:09:46+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
+ "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-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"
+ ],
+ "time": "2017-07-01T08:51:00+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
+ "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2017-04-03T13:19:02+00:00"
+ },
+ {
+ "name": "sebastian/finder-facade",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/finder-facade.git",
+ "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f",
+ "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/finder": "~2.3|~3.0|~4.0",
+ "theseer/fdomdocument": "~1.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.",
+ "homepage": "https://github.com/sebastianbergmann/finder-facade",
+ "time": "2017-11-18T17:31:49+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "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": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2017-04-27T15:39:26+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+ "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "sebastian/object-reflector": "^1.1.1",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-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/",
+ "time": "2017-08-03T12:35:26+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "773f97c67f28de00d397be301821b06708fca0be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
+ "reference": "773f97c67f28de00d397be301821b06708fca0be",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-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/",
+ "time": "2017-03-29T09:07:27+00:00"
+ },
+ {
+ "name": "sebastian/phpcpd",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpcpd.git",
+ "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564",
+ "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6|^7.0",
+ "phpunit/php-timer": "^1.0.6",
+ "sebastian/finder-facade": "^1.1",
+ "sebastian/version": "^1.0|^2.0",
+ "symfony/console": "^2.7|^3.0|^4.0"
+ },
+ "bin": [
+ "phpcpd"
+ ],
+ "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": "Copy/Paste Detector (CPD) for PHP code.",
+ "homepage": "https://github.com/sebastianbergmann/phpcpd",
+ "time": "2017-11-16T08:49:28+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
+ "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2017-03-03T06:23:57+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-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",
+ "time": "2015-07-28T20:34:47+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "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": "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",
+ "time": "2016-10-03T07:35:21+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "2.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
+ "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "bin": [
+ "scripts/phpcs",
+ "scripts/phpcbf"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "CodeSniffer.php",
+ "CodeSniffer/CLI.php",
+ "CodeSniffer/Exception.php",
+ "CodeSniffer/File.php",
+ "CodeSniffer/Fixer.php",
+ "CodeSniffer/Report.php",
+ "CodeSniffer/Reporting.php",
+ "CodeSniffer/Sniff.php",
+ "CodeSniffer/Tokens.php",
+ "CodeSniffer/Reports/",
+ "CodeSniffer/Tokenizers/",
+ "CodeSniffer/DocGenerators/",
+ "CodeSniffer/Standards/AbstractPatternSniff.php",
+ "CodeSniffer/Standards/AbstractScopeSniff.php",
+ "CodeSniffer/Standards/AbstractVariableSniff.php",
+ "CodeSniffer/Standards/IncorrectPatternException.php",
+ "CodeSniffer/Standards/Generic/Sniffs/",
+ "CodeSniffer/Standards/MySource/Sniffs/",
+ "CodeSniffer/Standards/PEAR/Sniffs/",
+ "CodeSniffer/Standards/PSR1/Sniffs/",
+ "CodeSniffer/Standards/PSR2/Sniffs/",
+ "CodeSniffer/Standards/Squiz/Sniffs/",
+ "CodeSniffer/Standards/Zend/Sniffs/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "http://www.squizlabs.com/php-codesniffer",
+ "keywords": [
+ "phpcs",
+ "standards"
+ ],
+ "time": "2018-11-07T22:31:41+00:00"
+ },
+ {
+ "name": "symfony/browser-kit",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/browser-kit.git",
+ "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471",
+ "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8",
+ "symfony/dom-crawler": "~2.8|~3.0|~4.0"
+ },
+ "require-dev": {
+ "symfony/css-selector": "~2.8|~3.0|~4.0",
+ "symfony/process": "~2.8|~3.0|~4.0"
+ },
+ "suggest": {
+ "symfony/process": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\BrowserKit\\": ""
+ },
+ "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 BrowserKit Component",
+ "homepage": "https://symfony.com",
+ "time": "2019-01-16T09:39:14+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
+ "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
+ "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",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "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",
+ "time": "2019-01-25T10:42:12+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
+ "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony CssSelector Component",
+ "homepage": "https://symfony.com",
+ "time": "2019-01-16T09:39:14+00:00"
+ },
+ {
+ "name": "symfony/dom-crawler",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/dom-crawler.git",
+ "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422",
+ "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "require-dev": {
+ "symfony/css-selector": "~2.8|~3.0|~4.0"
+ },
+ "suggest": {
+ "symfony/css-selector": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\DomCrawler\\": ""
+ },
+ "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 DomCrawler Component",
+ "homepage": "https://symfony.com",
+ "time": "2019-01-16T13:27:11+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v3.4.22",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "7c0c627220308928e958a87c293108e5891cde1d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
+ "reference": "7c0c627220308928e958a87c293108e5891cde1d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Finder Component",
+ "homepage": "https://symfony.com",
+ "time": "2019-01-16T13:43:35+00:00"
+ },
+ {
+ "name": "theseer/fdomdocument",
+ "version": "1.6.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/fDOMDocument.git",
+ "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca",
+ "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "lib-libxml": "*",
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.",
+ "homepage": "https://github.com/theseer/fDOMDocument",
+ "time": "2017-06-30T11:53:12+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+ "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.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",
+ "time": "2017-04-07T12:08:54+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozart/assert.git",
+ "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
+ "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6",
+ "sebastian/version": "^1.0.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "time": "2018-12-25T11:19:39+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "islandora/crayfish-commons": 20
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": []
+}
diff --git a/Recast/phpunit.xml.dist b/Recast/phpunit.xml.dist
new file mode 100644
index 00000000..b7c5299d
--- /dev/null
+++ b/Recast/phpunit.xml.dist
@@ -0,0 +1,30 @@
+
+
+
+
+ ./tests
+
+
+
+
+
+
+
+
+ ./src/index.php
+ ./src/app.php
+
+ ./src
+
+
+
diff --git a/Recast/src/Controller/RecastController.php b/Recast/src/Controller/RecastController.php
new file mode 100644
index 00000000..9488a412
--- /dev/null
+++ b/Recast/src/Controller/RecastController.php
@@ -0,0 +1,212 @@
+geminiClient = $geminiClient;
+ $this->log = $log;
+ }
+
+ /**
+ * Send API-X Options information.
+ *
+ * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
+ * The turtle file of the options response.
+ */
+ public function recastOptions()
+ {
+ return new BinaryFileResponse(
+ __DIR__ . "/../../static/recast.ttl",
+ 200,
+ ['Content-Type' => 'text/turtle']
+ );
+ }
+
+ /**
+ * @param \Symfony\Component\HttpFoundation\Request $request
+ * The incoming request.
+ * @param \Silex\Application $app
+ * The Silex application
+ * @param string $operation
+ * Whether to add or
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ * The response.
+ */
+ public function recast(Request $request, Application $app, $operation)
+ {
+ if (!in_array($operation, $this->availableMethods)) {
+ return new Response(sprintf(
+ 'Valid methods for recast are [%s] received "%s".',
+ implode(', ', $this->availableMethods),
+ $operation
+ ), 400);
+ }
+ $this->log->info("Request to {$operation} resource.");
+
+ $token = null;
+ if ($request->headers->has('Authorization')) {
+ $token = $request->headers->get('Authorization');
+ }
+
+ $fedora_uri = $request->headers->get("Apix-Ldp-Resource");
+ $fedora_resource = $request->attributes->get('fedora_resource');
+ $body = (string) $fedora_resource->getBody();
+ $mimeType = $fedora_resource->getHeader('Content-type');
+ if (is_array($mimeType)) {
+ $mimeType = reset($mimeType);
+ }
+ if (preg_match("/^([^;]+);/", $mimeType, $matches)) {
+ $mimeType = $matches[1];
+ }
+ try {
+ $format = \EasyRdf_Format::getFormat($mimeType)->getName();
+ } catch (\EasyRdf_Exception $e) {
+ $this->log->info("Could not parse format {$mimeType}");
+ return new Response("Cannot process resource in format ({$mimeType})", 400);
+ }
+
+ try {
+ $graph = new \EasyRdf_Graph();
+ $graph->parse(
+ $body,
+ $format,
+ $fedora_uri
+ );
+ } catch (\EasyRdf_Exception $e) {
+ $this->log->error("Error parsing graph in {$format}");
+ return new Response("Error parsing graph", 400);
+ }
+
+ $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);
+ }
+ $predicate = $this->findPredicateForObject($graph, $uri);
+ $this->log->debug('Found a reverse URI', [
+ 'original_uri' => $uri,
+ 'reverse_uri' => $reverse_uri,
+ ]);
+ if (!is_null($predicate)) {
+ $graph->addResource(
+ $fedora_uri,
+ $predicate,
+ $reverse_uri
+ );
+ if (strtolower($operation) == 'replace') {
+ $graph->deleteResource(
+ $fedora_uri,
+ $predicate,
+ $uri
+ );
+ }
+ }
+ }
+ }
+ }
+ if ($request->headers->has('Accept')) {
+ $acceptable_content_types = $request->getAcceptableContentTypes();
+ $format = null;
+ foreach ($acceptable_content_types as $output_type) {
+ if ($output_type == "*/*") {
+ $output_type = "text/turtle";
+ }
+ try {
+ $format = \EasyRdf_Format::getFormat($output_type)->getName();
+ break;
+ } catch (\EasyRdf_Exception $e) {
+ // pass
+ }
+ }
+ if (is_null($format)) {
+ return new Response('Cannot graph convert to requested format', 500);
+ }
+ } else {
+ $format = 'turtle';
+ $output_type = 'text/turtle';
+ }
+
+ $new_body = $graph->serialise($format);
+
+ if ($format == 'jsonld') {
+ // TODO: Not have to do this to remove the extraneous resources.
+ $temp = array_filter(
+ json_decode($new_body, true),
+ function ($item) use ($fedora_uri) {
+ return $item['@id'] == $fedora_uri;
+ }
+ );
+ $new_body = json_encode(array_values($temp));
+ }
+ $headers = [
+ 'Content-type' => $output_type,
+ 'Content-length' => strlen($new_body),
+ ];
+
+ return new Response($new_body, 200, $headers);
+ }
+
+ /**
+ * Locate the predicate for an object in a graph.
+ *
+ * @param \EasyRdf_Graph $graph
+ * The graph to look in.
+ * @param string $object
+ * The object to look for.
+ *
+ * @return mixed string|null
+ * Return the predicate or null.
+ */
+ private function findPredicateForObject(\EasyRdf_Graph $graph, $object)
+ {
+ $properties = $graph->reversePropertyUris($object);
+ foreach ($properties as $p) {
+ return $p;
+ }
+ return null;
+ }
+}
diff --git a/Recast/src/app.php b/Recast/src/app.php
new file mode 100644
index 00000000..473d351f
--- /dev/null
+++ b/Recast/src/app.php
@@ -0,0 +1,36 @@
+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,
+ $app['monolog']
+);
+
+$app['recast.controller'] = $test;
+
+$app->options('/', 'recast.controller:recastOptions');
+$app->get('/{operation}', "recast.controller:recast")
+ ->before(function (Request $request, Application $app) {
+ return $app['crayfish.apix_middleware']->before($request);
+ })
+ ->value('operation', 'add');
+
+return $app;
diff --git a/Recast/src/index.php b/Recast/src/index.php
new file mode 100644
index 00000000..3e23d477
--- /dev/null
+++ b/Recast/src/index.php
@@ -0,0 +1,4 @@
+run();
diff --git a/Recast/static/recast.ttl b/Recast/static/recast.ttl
new file mode 100644
index 00000000..af7d0ada
--- /dev/null
+++ b/Recast/static/recast.ttl
@@ -0,0 +1,11 @@
+@prefix apix: .
+@prefix ldp: .
+@prefix islandora: .
+@prefix rdfs: .
+
+<> a apix:Extension;
+rdfs:label "URI conversion service";
+rdfs:comment "Microservice to recast Drupal URIs as Fedora URIs";
+apix:exposesService islandora:RecastService;
+apix:exposesServiceAt "svc:recast";
+apix:bindsTo ldp:RDFSource .
diff --git a/Recast/tests/RecastControllerTests.php b/Recast/tests/RecastControllerTests.php
new file mode 100644
index 00000000..f473ccff
--- /dev/null
+++ b/Recast/tests/RecastControllerTests.php
@@ -0,0 +1,163 @@
+gemini_prophecy = $this->prophesize(GeminiClient::class);
+ $this->logger_prophecy = $this->prophesize(Logger::class);
+ }
+
+ /**
+ * @covers ::recastOptions
+ */
+ public function testOptions()
+ {
+ $controller = new RecastController(
+ $this->gemini_prophecy->reveal(),
+ $this->logger_prophecy->reveal()
+ );
+
+ $response = $controller->recastOptions();
+ $this->assertTrue($response->getStatusCode() == 200, 'Identify OPTIONS should return 200');
+ $this->assertTrue(
+ $response->headers->get('Content-Type') == 'text/turtle',
+ 'Identify OPTIONS should return turtle'
+ );
+ }
+
+ /**
+ * @covers ::recast
+ * @covers ::findPredicateForObject
+ */
+ public function testImageAdd()
+ {
+ $resource_id = 'http://localhost:8080/fcrepo/rest/object1';
+
+ $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');
+
+ $mock_silex_app = new Application();
+ $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000';
+
+ $mock_fedora_response = $this->getMockFedoraStream();
+
+ $controller = new RecastController(
+ $this->gemini_prophecy->reveal(),
+ $this->logger_prophecy->reveal()
+ );
+
+ $request = Request::create(
+ "/add",
+ "GET"
+ );
+ $request->headers->set('Authorization', 'some_token');
+ $request->headers->set('Apix-Ldp-Resource', $resource_id);
+ $request->headers->set('Accept', 'application/ld+json');
+ $request->attributes->set('fedora_resource', $mock_fedora_response);
+
+ // Do with add
+ $response = $controller->recast($request, $mock_silex_app, 'add');
+ $this->assertEquals(200, $response->getStatusCode(), "Invalid status code");
+ $json = json_decode($response->getContent(), true);
+
+ $expected = json_decode(file_get_contents($output_add), true);
+ $this->assertEquals($expected, $json, "Response does not match expected additions.");
+
+ // Do with replace
+ $response = $controller->recast($request, $mock_silex_app, 'replace');
+ $this->assertEquals(200, $response->getStatusCode(), "Invalid status code");
+ $json = json_decode($response->getContent(), true);
+
+ $expected = json_decode(file_get_contents($output_replace), true);
+ $this->assertEquals($expected, $json, "Response does not match expected additions.");
+ }
+
+ /**
+ * @covers ::recast
+ */
+ public function testInvalidType()
+ {
+ $resource_id = 'http://localhost:8080/fcrepo/rest/object1';
+ $mock_silex_app = new Application();
+ $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000';
+
+ $controller = new RecastController(
+ $this->gemini_prophecy->reveal(),
+ $this->logger_prophecy->reveal()
+ );
+
+ $mock_fedora_response = $this->getMockFedoraStream();
+
+ $request = Request::create(
+ "/oops",
+ "GET"
+ );
+ $request->headers->set('Authorization', 'some_token');
+ $request->headers->set('Apix-Ldp-Resource', $resource_id);
+ $request->headers->set('Accept', 'application/ld+json');
+ $request->attributes->set('fedora_resource', $mock_fedora_response);
+
+ // Do with add
+ $response = $controller->recast($request, $mock_silex_app, 'oops');
+ $this->assertEquals(400, $response->getStatusCode(), "Invalid status code");
+ }
+
+ /**
+ * Generate a mock response containing mock Fedora body stream.
+ *
+ * @return object
+ * The returned stream object.
+ */
+ protected function getMockFedoraStream()
+ {
+ $input_resource = realpath(__DIR__ . '/resources/drupal_image.json');
+
+ $prophecy = $this->prophesize(StreamInterface::class);
+ $prophecy->isReadable()->willReturn(true);
+ $prophecy->isWritable()->willReturn(false);
+ $prophecy->__toString()->willReturn(file_get_contents($input_resource));
+ $mock_stream = $prophecy->reveal();
+
+ // Mock a Fedora response.
+ $prophecy = $this->prophesize(ResponseInterface::class);
+ $prophecy->getStatusCode()->willReturn(200);
+ $prophecy->getBody()->willReturn($mock_stream);
+ $prophecy->getHeader('Content-type')->willReturn('application/ld+json');
+ $mock_fedora_response = $prophecy->reveal();
+ return $mock_fedora_response;
+ }
+}
diff --git a/Recast/tests/resources/drupal_image.json b/Recast/tests/resources/drupal_image.json
new file mode 100644
index 00000000..ea6ac326
--- /dev/null
+++ b/Recast/tests/resources/drupal_image.json
@@ -0,0 +1,77 @@
+[
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/object1",
+ "@type": [
+ "http://fedora.info/definitions/v4/repository#Container",
+ "http://www.w3.org/ns/ldp#RDFSource",
+ "http://schema.org/ImageObject",
+ "http://pcdm.org/models#Object",
+ "http://fedora.info/definitions/v4/repository#Resource",
+ "http://www.w3.org/ns/ldp#Container"
+ ],
+ "http://schema.org/author": [
+ {
+ "@id": "http://localhost:8000/user/1?_format=jsonld"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#writable": [
+ {
+ "@value": true
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#createdBy": [
+ {
+ "@value": "bypassAdmin"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#hasParent": [
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/"
+ }
+ ],
+ "http://pcdm.org/models#hasFile": [
+ {
+ "@id": "http://localhost:8000/media/1?_format=jsonld"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#lastModified": [
+ {
+ "@value": "2018-03-12T15:52:59.994Z",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://schema.org/dateCreated": [
+ {
+ "@value": "2018-03-12T15:52:24+00:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://purl.org/dc/terms/title": [
+ {
+ "@value": "This is an image"
+ }
+ ],
+ "http://schema.org/dateModified": [
+ {
+ "@value": "2018-03-12T15:52:57+00:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#created": [
+ {
+ "@value": "2018-03-12T15:52:59.994Z",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#lastModifiedBy": [
+ {
+ "@value": "bypassAdmin"
+ }
+ ],
+ "http://pcdm.org/models#memberOf": [
+ {
+ "@id": "http://localhost:8000/node/1?_format=jsonld"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/Recast/tests/resources/drupal_image_add.json b/Recast/tests/resources/drupal_image_add.json
new file mode 100644
index 00000000..972fdeb0
--- /dev/null
+++ b/Recast/tests/resources/drupal_image_add.json
@@ -0,0 +1,80 @@
+[
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/object1",
+ "@type": [
+ "http://fedora.info/definitions/v4/repository#Container",
+ "http://www.w3.org/ns/ldp#RDFSource",
+ "http://schema.org/ImageObject",
+ "http://pcdm.org/models#Object",
+ "http://fedora.info/definitions/v4/repository#Resource",
+ "http://www.w3.org/ns/ldp#Container"
+ ],
+ "http://schema.org/author": [
+ {
+ "@id": "http://localhost:8000/user/1?_format=jsonld"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#writable": [
+ {
+ "@value": true
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#createdBy": [
+ {
+ "@value": "bypassAdmin"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#hasParent": [
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/"
+ }
+ ],
+ "http://pcdm.org/models#hasFile": [
+ {
+ "@id": "http://localhost:8000/media/1?_format=jsonld"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#lastModified": [
+ {
+ "@value": "2018-03-12T15:52:59.994Z",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://schema.org/dateCreated": [
+ {
+ "@value": "2018-03-12T15:52:24+00:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://purl.org/dc/terms/title": [
+ {
+ "@value": "This is an image"
+ }
+ ],
+ "http://schema.org/dateModified": [
+ {
+ "@value": "2018-03-12T15:52:57+00:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#created": [
+ {
+ "@value": "2018-03-12T15:52:59.994Z",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#lastModifiedBy": [
+ {
+ "@value": "bypassAdmin"
+ }
+ ],
+ "http://pcdm.org/models#memberOf": [
+ {
+ "@id": "http://localhost:8000/node/1?_format=jsonld"
+ },
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/collection1"
+ }
+ ]
+ }
+]
diff --git a/Recast/tests/resources/drupal_image_replace.json b/Recast/tests/resources/drupal_image_replace.json
new file mode 100644
index 00000000..4aa76f2c
--- /dev/null
+++ b/Recast/tests/resources/drupal_image_replace.json
@@ -0,0 +1,77 @@
+[
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/object1",
+ "@type": [
+ "http://fedora.info/definitions/v4/repository#Container",
+ "http://www.w3.org/ns/ldp#RDFSource",
+ "http://schema.org/ImageObject",
+ "http://pcdm.org/models#Object",
+ "http://fedora.info/definitions/v4/repository#Resource",
+ "http://www.w3.org/ns/ldp#Container"
+ ],
+ "http://schema.org/author": [
+ {
+ "@id": "http://localhost:8000/user/1?_format=jsonld"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#writable": [
+ {
+ "@value": true
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#createdBy": [
+ {
+ "@value": "bypassAdmin"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#hasParent": [
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/"
+ }
+ ],
+ "http://pcdm.org/models#hasFile": [
+ {
+ "@id": "http://localhost:8000/media/1?_format=jsonld"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#lastModified": [
+ {
+ "@value": "2018-03-12T15:52:59.994Z",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://schema.org/dateCreated": [
+ {
+ "@value": "2018-03-12T15:52:24+00:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://purl.org/dc/terms/title": [
+ {
+ "@value": "This is an image"
+ }
+ ],
+ "http://schema.org/dateModified": [
+ {
+ "@value": "2018-03-12T15:52:57+00:00",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#created": [
+ {
+ "@value": "2018-03-12T15:52:59.994Z",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ }
+ ],
+ "http://fedora.info/definitions/v4/repository#lastModifiedBy": [
+ {
+ "@value": "bypassAdmin"
+ }
+ ],
+ "http://pcdm.org/models#memberOf": [
+ {
+ "@id": "http://localhost:8080/fcrepo/rest/collection1"
+ }
+ ]
+ }
+]