├── tests ├── _src │ ├── data │ │ ├── intro.md │ │ ├── error │ │ │ ├── churches-error.json │ │ │ └── churches-error.yml │ │ ├── home.md │ │ ├── churches │ │ │ ├── church-a.json │ │ │ ├── church-b.json │ │ │ ├── church-c.yml │ │ │ ├── church-a.md │ │ │ ├── church-b.md │ │ │ └── church-c.md │ │ ├── church-image.yml │ │ ├── churches.json │ │ ├── limit_entries.yml │ │ ├── order_entries.yml │ │ ├── filter_entries.yml │ │ ├── churches.yml │ │ ├── combined_entries.yml │ │ └── pagination_entries.yml │ ├── js │ │ └── main.js │ ├── lib │ │ ├── lib.js │ │ └── img │ │ │ └── logo.png │ ├── css │ │ ├── includes.scss │ │ ├── main.css │ │ └── main.scss │ ├── img │ │ ├── blue.jpg │ │ ├── logo.png │ │ ├── green.jpg │ │ └── orange.jpg │ ├── template │ │ ├── churches │ │ │ ├── detail.html │ │ │ ├── detail.tpl │ │ │ └── overview.tpl │ │ ├── fileTest.tpl │ │ ├── index.tpl │ │ └── home.tpl │ ├── template_twig │ │ ├── fileTest.html │ │ ├── churches │ │ │ ├── detail.html │ │ │ └── overview.html │ │ ├── index.html │ │ └── home.html │ └── site │ │ └── site.yml ├── config.yml ├── .htaccess └── Pageon │ ├── Test │ └── ApiTest.php │ └── Stitcher │ └── Api │ └── PagesTest.php ├── src ├── config.yml ├── Pageon │ └── Stitcher │ │ ├── Api │ │ ├── RestController.php │ │ └── Pages.php │ │ ├── Exception │ │ └── ValidationException.php │ │ ├── Response │ │ └── JsonResponse.php │ │ ├── ApiPlugin.php │ │ └── Application │ │ └── ApiApplication.php └── services.yml ├── .gitignore ├── .scrutinizer.yml ├── phpunit.xml ├── README.md ├── composer.json └── composer.lock /tests/_src/data/intro.md: -------------------------------------------------------------------------------- 1 | # Intro 2 | -------------------------------------------------------------------------------- /tests/_src/js/main.js: -------------------------------------------------------------------------------- 1 | var foo = 'bar'; 2 | -------------------------------------------------------------------------------- /tests/_src/lib/lib.js: -------------------------------------------------------------------------------- 1 | var foo = 'bar'; 2 | -------------------------------------------------------------------------------- /tests/_src/data/error/churches-error.json: -------------------------------------------------------------------------------- 1 | entries: { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /tests/_src/data/home.md: -------------------------------------------------------------------------------- 1 | # Home 2 | 3 | There is nowhere like HOOOOME 4 | -------------------------------------------------------------------------------- /src/config.yml: -------------------------------------------------------------------------------- 1 | api: 2 | # endpoint: 3 | 4 | directories: 5 | api: ./api 6 | -------------------------------------------------------------------------------- /tests/_src/data/churches/church-a.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "JSON Church A" 3 | } 4 | -------------------------------------------------------------------------------- /tests/_src/css/includes.scss: -------------------------------------------------------------------------------- 1 | p { 2 | a { 3 | color: red; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /tests/_src/data/error/churches-error.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | church-a: { 3 | 4 | } 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .cache 2 | .DS_Store 3 | .idea 4 | /tests/.cache 5 | /tests/public 6 | /vendor 7 | -------------------------------------------------------------------------------- /tests/_src/img/blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pageon/stitcher-api/master/tests/_src/img/blue.jpg -------------------------------------------------------------------------------- /tests/_src/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pageon/stitcher-api/master/tests/_src/img/logo.png -------------------------------------------------------------------------------- /tests/_src/img/green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pageon/stitcher-api/master/tests/_src/img/green.jpg -------------------------------------------------------------------------------- /tests/_src/img/orange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pageon/stitcher-api/master/tests/_src/img/orange.jpg -------------------------------------------------------------------------------- /tests/_src/lib/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pageon/stitcher-api/master/tests/_src/lib/img/logo.png -------------------------------------------------------------------------------- /tests/_src/data/church-image.yml: -------------------------------------------------------------------------------- 1 | name: Church Image 2 | image: 3 | src: img/green.jpg 4 | alt: A green image 5 | -------------------------------------------------------------------------------- /tests/_src/data/churches/church-b.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "JSON Church B", 3 | "body": "churches/church-b.md" 4 | } 5 | -------------------------------------------------------------------------------- /tests/_src/data/churches/church-c.yml: -------------------------------------------------------------------------------- 1 | name: MD Church C 2 | description: A description 3 | body: churches/church-c.md 4 | -------------------------------------------------------------------------------- /tests/_src/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #F3F3F3; 3 | font-family: "Helvetica Neue", Helvetica, sans-serif; 4 | } 5 | -------------------------------------------------------------------------------- /tests/_src/template/churches/detail.html: -------------------------------------------------------------------------------- 1 |

2 | {{ church.name }} 3 |

4 |

5 | {{ intro }} 6 |

7 | 8 | -------------------------------------------------------------------------------- /tests/_src/data/churches.json: -------------------------------------------------------------------------------- 1 | { 2 | "entries" : { 3 | "church-b" : { 4 | "name": "Church B" 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /tests/_src/css/main.scss: -------------------------------------------------------------------------------- 1 | body { 2 | background: #F3F3F3; 3 | font-family: "Helvetica Neue", Helvetica, sans-serif; 4 | } 5 | 6 | @import "css/includes"; 7 | -------------------------------------------------------------------------------- /tests/_src/template/fileTest.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/_src/template_twig/fileTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/_src/data/limit_entries.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | entry-a: 3 | title: A 4 | entry-b: 5 | title: B 6 | entry-c: 7 | title: C 8 | entry-d: 9 | title: D 10 | -------------------------------------------------------------------------------- /tests/_src/data/order_entries.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | entry-a: 3 | title: A 4 | entry-b: 5 | title: B 6 | entry-c: 7 | title: C 8 | entry-d: 9 | title: D 10 | -------------------------------------------------------------------------------- /tests/_src/template/churches/detail.tpl: -------------------------------------------------------------------------------- 1 | {extends 'index.tpl'} 2 | 3 | {block 'content'} 4 | {$intro} 5 | 6 |

7 | {$church.name} 8 |

9 |

10 | {$church.description} 11 |

12 | {/block} 13 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | build: 2 | environment: 3 | php: 4 | version: 7.0.8 5 | tests: 6 | override: 7 | - command: 'vendor/bin/phpunit' 8 | checks: 9 | php: 10 | code_rating: true 11 | duplication: true 12 | -------------------------------------------------------------------------------- /tests/_src/template_twig/churches/detail.html: -------------------------------------------------------------------------------- 1 | {% extends 'index.html' %} 2 | 3 | {% block content %} 4 | {{ intro }} 5 | 6 |

7 | {{ church.name }} 8 |

9 |

10 | {{ church.description }} 11 |

12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /tests/_src/data/filter_entries.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | entry-a: 3 | highlight: true 4 | entry-b: 5 | highlight: true 6 | entry-c: 7 | highlight: false 8 | entry-d: 9 | highlight: false 10 | entry-e: 11 | highlight: false 12 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | tests/Pageon/Stitcher 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/_src/template_twig/churches/overview.html: -------------------------------------------------------------------------------- 1 | {% extends 'index.html' %} 2 | 3 | {% block content %} 4 | {{ content }} 5 | 6 | {% for church in churches %} 7 |
  • 8 | {{ church.name }} 9 | {% if church.image %} 10 | 11 | {% endif %} 12 |
  • 13 | {% endfor %} 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /tests/_src/template/churches/overview.tpl: -------------------------------------------------------------------------------- 1 | {extends 'index.tpl'} 2 | 3 | {block 'content'} 4 | {foreach $churches as $church} 5 |
  • 6 | {$church.name} 7 | {if isset($church.image)} 8 | 9 | {/if} 10 |
  • 11 | {/foreach} 12 | {/block} 13 | -------------------------------------------------------------------------------- /src/Pageon/Stitcher/Api/RestController.php: -------------------------------------------------------------------------------- 1 | request = $request; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Pageon/Stitcher/Exception/ValidationException.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {meta extra=['og:description' => 'test']} 5 | {css src="css/main.css" inline=true} 6 | 7 | 8 | {block 'content'}{/block} 9 | 10 | {block 'scripts'} 11 | {js src="js/main.js" inline=true} 12 | {js src="js/async.js" async=true} 13 | {/block} 14 | 15 | 16 | -------------------------------------------------------------------------------- /tests/_src/data/churches.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | church-a: 3 | name: Church A 4 | description: This is a church with the name A 5 | image: 6 | src: img/green.jpg 7 | alt: A green image 8 | body: churches/church-a.md 9 | church-b: 10 | name: Church B 11 | description: This is a church with the name B 12 | image: img/green.jpg 13 | body: churches/church-b.md 14 | -------------------------------------------------------------------------------- /tests/_src/template_twig/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ meta({'og:description': 'test'}) }} 5 | {{ css('css/main.css', true) }} 6 | 7 | 8 | {% block content %} 9 | {% endblock %} 10 | 11 | {% block scripts %} 12 | {{ js('js/main.js', true) }} 13 | {{ js('js/async.js', false, true) }} 14 | {% endblock %} 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/_src/site/site.yml: -------------------------------------------------------------------------------- 1 | /: 2 | template: home 3 | variables: 4 | content: home.md 5 | churches: churches.yml 6 | 7 | /churches: 8 | template: churches/overview 9 | variables: 10 | churches: churches.yml 11 | 12 | /churches/{id}: 13 | template: churches/detail 14 | variables: 15 | intro: intro.md 16 | church: churches.yml 17 | adapters: 18 | collection: 19 | variable: church 20 | field: id 21 | -------------------------------------------------------------------------------- /tests/config.yml: -------------------------------------------------------------------------------- 1 | environment: test 2 | 3 | plugins: 4 | - Pageon\Stitcher\ApiPlugin 5 | 6 | directories: 7 | src: ./tests/src 8 | public: ./tests/public 9 | image: ./tests/public/img 10 | cache: ./tests/.cache 11 | template: ./tests/src/template 12 | htaccess: ./tests/public/.htaccess 13 | 14 | engines: 15 | image: gd 16 | template: smarty 17 | 18 | meta: 19 | viewport: width=device-width, initial-scale=1 20 | 21 | caches: 22 | image: true 23 | -------------------------------------------------------------------------------- /tests/_src/template/home.tpl: -------------------------------------------------------------------------------- 1 | {extends 'index.tpl'} 2 | 3 | {block 'content'} 4 | {$content} 5 | 6 | {image src='img/blue.jpg' var='image'} 7 | 8 | 9 | {foreach $churches as $church} 10 |
  • 11 | {$church.name} 12 | {if isset($church.image)} 13 | 14 | {/if} 15 |
  • 16 | {/foreach} 17 | {/block} 18 | -------------------------------------------------------------------------------- /tests/_src/template_twig/home.html: -------------------------------------------------------------------------------- 1 | {% extends 'index.html' %} 2 | 3 | {% block content %} 4 | {% set image = image('img/blue.jpg') %} 5 | 6 | 7 | {{ content }} 8 | 9 | {% for church in churches %} 10 |
  • 11 | {{ church.name }} 12 | {% if church.image %} 13 | 14 | {% endif %} 15 |
  • 16 | {% endfor %} 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /tests/_src/data/combined_entries.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | entry-a: 3 | title: A 4 | highlight: true 5 | 6 | entry-b: 7 | title: B 8 | highlight: true 9 | 10 | entry-c: 11 | title: C 12 | highlight: false 13 | 14 | entry-d: 15 | title: D 16 | highlight: false 17 | 18 | entry-e: 19 | title: E 20 | highlight: true 21 | 22 | entry-f: 23 | title: F 24 | highlight: false 25 | 26 | entry-g: 27 | title: G 28 | highlight: true 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/pageon/stitcher-api/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/pageon/stitcher-api/?branch=master) [![Build Status](https://scrutinizer-ci.com/g/pageon/stitcher-api/badges/build.png?b=master)](https://scrutinizer-ci.com/g/pageon/stitcher-api/build-status/master) 2 | 3 | # Stitcher API Plugin 4 | 5 | This plugin adds authenticated REST support to manage a Stitcher application. 6 | 7 | ``` 8 | composer require pageon/stitcher-api 9 | ``` 10 | 11 | ```yaml 12 | # Project config file 13 | 14 | plugins: 15 | - Pageon\Stitcher\ApiPlugin 16 | ``` 17 | -------------------------------------------------------------------------------- /src/Pageon/Stitcher/Response/JsonResponse.php: -------------------------------------------------------------------------------- 1 | =7.0", 15 | "brendt/stitcher": "dev-master", 16 | "nikic/fast-route": "^1.2", 17 | "guzzlehttp/psr7": "^1.4" 18 | }, 19 | "autoload": { 20 | "psr-4" : { 21 | "Pageon\\Stitcher\\" : "src/Pageon/Stitcher" 22 | } 23 | }, 24 | "autoload-dev": { 25 | "psr-4": { 26 | "Pageon\\Test\\": "tests/Pageon/Test" 27 | } 28 | }, 29 | "require-dev": { 30 | "larapack/dd": "^1.1", 31 | "phpunit/phpunit": "^6.1" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tests/.htaccess: -------------------------------------------------------------------------------- 1 | # Stitcher production htaccess 2 | 3 | RewriteEngine On 4 | DirectorySlash Off 5 | 6 | # Hide HTML extension 7 | RewriteCond %{DOCUMENT_ROOT}/$1.html -f 8 | RewriteRule ^(.+?)/?$ /$1.html [L] 9 | 10 | 11 | # Set expire dates 12 | 13 | ExpiresActive On 14 | ExpiresDefault "access plus 1 month" 15 | ExpiresByType image/gif "access plus 1 month" 16 | ExpiresByType image/png "access plus 1 month" 17 | ExpiresByType image/jpg "access plus 1 month" 18 | ExpiresByType image/jpeg "access plus 1 month" 19 | ExpiresByType text/css "access plus 1 month" 20 | 21 | 22 | # Enable GZIP 23 | 24 | AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript 25 | 26 | 27 | 28 | 29 | Header add Link "; rel=preload; as=style" 30 | Header add Link "; rel=preload; as=image" 31 | Header add Link "; rel=preload; as=script" 32 | 33 | 34 | -------------------------------------------------------------------------------- /tests/_src/data/pagination_entries.yml: -------------------------------------------------------------------------------- 1 | entries: 2 | entry-a: 3 | title: Example Entry A 4 | intro: Lorem ipsum dolor sit amet 5 | body: entry-a.md 6 | image: 7 | src: img/blue.jpg 8 | alt: A Blue image 9 | entry-b: 10 | title: Example Entry B 11 | intro: This is the second entry 12 | body: entry-a.md 13 | image: img/orange.jpg 14 | 15 | entry-c: 16 | title: Example Entry B 17 | intro: This is the second entry 18 | body: entry-a.md 19 | image: img/orange.jpg 20 | 21 | entry-d: 22 | title: Example Entry B 23 | intro: This is the second entry 24 | body: entry-a.md 25 | image: img/orange.jpg 26 | 27 | entry-e: 28 | title: Example Entry B 29 | intro: This is the second entry 30 | body: entry-a.md 31 | image: img/orange.jpg 32 | 33 | entry-f: 34 | title: Example Entry B 35 | intro: This is the second entry 36 | body: entry-a.md 37 | image: img/orange.jpg 38 | 39 | entry-g: 40 | title: Example Entry B 41 | intro: This is the second entry 42 | body: entry-a.md 43 | image: img/orange.jpg 44 | -------------------------------------------------------------------------------- /tests/Pageon/Test/ApiTest.php: -------------------------------------------------------------------------------- 1 | fs = new Filesystem(); 22 | } 23 | 24 | protected function setUp() { 25 | $this->copyFolder(__DIR__ . '/../../_src', __DIR__ . '/../../src'); 26 | 27 | App::init('./tests/config.yml'); 28 | } 29 | 30 | protected function tearDown() { 31 | if ($this->fs->exists('./tests/src')) { 32 | $this->fs->remove('./tests/src'); 33 | } 34 | } 35 | 36 | private function copyFolder($src, $dst) { 37 | $finder = new Finder(); 38 | /** @var SplFileInfo[] $srcFiles */ 39 | $srcFiles = $finder->files()->in($src)->ignoreDotFiles(false); 40 | 41 | if (!$this->fs->exists($dst)) { 42 | $this->fs->mkdir($dst); 43 | } 44 | 45 | foreach ($srcFiles as $srcFile) { 46 | if (!$this->fs->exists("{$dst}/{$srcFile->getRelativePath()}")) { 47 | $this->fs->mkdir("{$dst}/{$srcFile->getRelativePath()}"); 48 | } 49 | 50 | $path = $srcFile->getRelativePathname(); 51 | if (!$this->fs->exists("{$dst}/{$path}")) { 52 | $this->fs->touch("{$dst}/{$path}"); 53 | } 54 | 55 | $this->fs->dumpFile("{$dst}/{$path}", $srcFile->getContents()); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/Pageon/Stitcher/Application/ApiApplication.php: -------------------------------------------------------------------------------- 1 | routeCollector = $routeCollector; 16 | // TODO: via services 17 | $this->dispatcher = new GroupCountBased($routeCollector->getData()); 18 | } 19 | 20 | public function run(Request $request = null) : Response { 21 | if (!$request) { 22 | $request = new Request($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']); 23 | } 24 | 25 | $routeInfo = $this->dispatcher->dispatch($request->getMethod(), $request->getUri()->getPath()); 26 | $response = null; 27 | 28 | switch ($routeInfo[0]) { 29 | case Dispatcher::NOT_FOUND: 30 | $response = new Response(404); 31 | 32 | break; 33 | case Dispatcher::METHOD_NOT_ALLOWED: 34 | $allowedMethods = $routeInfo[1]; 35 | 36 | $response = new Response(405); 37 | 38 | break; 39 | case Dispatcher::FOUND: 40 | $handler = $routeInfo[1]; 41 | $vars = $routeInfo[2]; 42 | 43 | if ($handler instanceof RestController) { 44 | $handler->setRequest($request); 45 | } 46 | 47 | /** @var Response $response */ 48 | $response = call_user_func_array($handler, $vars); 49 | 50 | break; 51 | } 52 | 53 | return $response; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /tests/Pageon/Stitcher/Api/PagesTest.php: -------------------------------------------------------------------------------- 1 | pages = App::get('api.pages'); 21 | } 22 | 23 | public function test_pages_overview() { 24 | $response = $this->pages->get(); 25 | 26 | $pages = json_decode($response->getBody()->getContents(), true); 27 | 28 | $this->assertArrayHasKey('/', $pages); 29 | $this->assertArrayHasKey('/churches', $pages); 30 | $this->assertArrayHasKey('/churches/{id}', $pages); 31 | } 32 | 33 | public function test_pages_detail() { 34 | $response = $this->pages->get('/churches/{id}'); 35 | 36 | $pages = json_decode($response->getBody()->getContents(), true); 37 | 38 | $this->assertArrayHasKey('/churches/{id}', $pages); 39 | $this->assertArrayNotHasKey('/', $pages); 40 | $this->assertArrayNotHasKey('/churches', $pages); 41 | } 42 | 43 | public function test_pages_detail_404() { 44 | $response = $this->pages->get('/not_found'); 45 | 46 | $this->assertEquals(404, $response->getStatusCode()); 47 | } 48 | 49 | public function test_post() { 50 | $this->pages->setRequest(new Request('POST', '/pages', [], json_encode([ 51 | 'id' => '/pages/test', 52 | 'template' => 'index', 53 | ]))); 54 | 55 | $response = $this->pages->post(); 56 | $site = Yaml::parse(@file_get_contents(__DIR__ . '/../../../src/site/site.yml')); 57 | 58 | $this->assertEquals(201, $response->getStatusCode()); 59 | $this->assertArrayHasKey('/pages/test', $site); 60 | } 61 | 62 | /** 63 | * @expectedException \Pageon\Stitcher\Exception\ValidationException 64 | */ 65 | public function test_post_validation_exception_no_id() { 66 | $this->pages->setRequest(new Request('POST', '/pages', [], json_encode([ 67 | 'template' => 'index', 68 | ]))); 69 | 70 | $this->pages->post(); 71 | } 72 | 73 | /** 74 | * @expectedException \Pageon\Stitcher\Exception\ValidationException 75 | */ 76 | public function test_post_validation_exception_no_template() { 77 | $this->pages->setRequest(new Request('POST', '/pages', [], json_encode([ 78 | 'id' => '/pages/test', 79 | ]))); 80 | 81 | $this->pages->post(); 82 | } 83 | 84 | public function test_patch() { 85 | $this->pages->setRequest(new Request('PATCH', '/pages/churches/{id}', [], json_encode([ 86 | 'template' => 'test-template', 87 | 'variables' => [ 88 | 'my-test' => 'TEST' 89 | ] 90 | ]))); 91 | 92 | $response = $this->pages->patch('/churches/{id}'); 93 | $site = Yaml::parse(@file_get_contents(__DIR__ . '/../../../src/site/site.yml')); 94 | $page = $site['/churches/{id}']; 95 | 96 | $this->assertEquals(200, $response->getStatusCode()); 97 | $this->assertArrayHasKey('/', $site); 98 | $this->assertTrue(isset($page['variables']['my-test'])); 99 | $this->assertEquals('test-template', $page['template']); 100 | } 101 | 102 | public function test_patch_not_found() { 103 | $response = $this->pages->patch('/not-found'); 104 | 105 | $this->assertEquals(404, $response->getStatusCode()); 106 | } 107 | 108 | public function test_delete() { 109 | $response = $this->pages->delete('/churches/{id}'); 110 | $site = Yaml::parse(@file_get_contents(__DIR__ . '/../../../src/site/site.yml')); 111 | 112 | $this->assertEquals(202, $response->getStatusCode()); 113 | $this->assertArrayNotHasKey('/churches/{id}', $site); 114 | } 115 | 116 | public function test_delete_not_found() { 117 | $response = $this->pages->delete('/not-found'); 118 | 119 | $this->assertEquals(404, $response->getStatusCode()); 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /src/Pageon/Stitcher/Api/Pages.php: -------------------------------------------------------------------------------- 1 | srcDir = $srcDir; 33 | $this->fs = new Filesystem(); 34 | } 35 | 36 | /** 37 | * @param null|string $id 38 | * 39 | * @return Response 40 | */ 41 | public function get(string $id = null) : Response { 42 | $site = $this->getSite(); 43 | 44 | if ($id) { 45 | $page = $this->getPage($id, $site); 46 | 47 | return $page ? JsonResponse::success($page) : JsonResponse::notFound(); 48 | } 49 | 50 | return JsonResponse::success($site); 51 | } 52 | 53 | /** 54 | * @return Response 55 | * 56 | * @throws ValidationException 57 | */ 58 | public function post() : Response { 59 | $data = json_decode($this->request->getBody(), true); 60 | 61 | if (!isset($data['id']) || !isset($data['template'])) { 62 | throw ValidationException::required(['id', 'template']); 63 | } 64 | 65 | $saveFile = $this->getSaveFile(); 66 | $fileContents = Yaml::parse($saveFile->getContents()); 67 | $fileContents[$data['id']] = $data; 68 | 69 | $this->fs->dumpFile($saveFile->getPathname(), Yaml::dump($fileContents)); 70 | 71 | return JsonResponse::created(); 72 | } 73 | 74 | /** 75 | * @param string $id 76 | * 77 | * @return Response 78 | */ 79 | public function patch(string $id) : Response { 80 | $page = $this->getPage($id); 81 | 82 | if (!$page) { 83 | return JsonResponse::notFound(); 84 | } 85 | 86 | $saveFile = $this->getSaveFile($id); 87 | $fileContents = Yaml::parse($saveFile->getContents()); 88 | $data = json_decode($this->request->getBody(), true); 89 | 90 | $fileContents[$id] = array_merge($page, $data); 91 | 92 | $this->fs->dumpFile($saveFile->getPathname(), Yaml::dump($fileContents)); 93 | 94 | return JsonResponse::success(); 95 | } 96 | 97 | /** 98 | * @param string $id 99 | * 100 | * @return Response 101 | */ 102 | public function delete(string $id) : Response { 103 | $page = $this->getPage($id); 104 | 105 | if (!$page) { 106 | return JsonResponse::notFound(); 107 | } 108 | 109 | $saveFile = $this->getSaveFile($id); 110 | $fileContents = Yaml::parse($saveFile->getContents()); 111 | unset($fileContents[$id]); 112 | 113 | $this->fs->dumpFile($saveFile->getPathname(), Yaml::dump($fileContents)); 114 | 115 | return JsonResponse::accepted(); 116 | } 117 | 118 | /** 119 | * @return array 120 | */ 121 | private function getSite() : array { 122 | /** @var SplFileInfo[] $siteFiles */ 123 | $siteFiles = Finder::create()->files()->in("{$this->srcDir}/site")->name('*.yml'); 124 | $site = []; 125 | 126 | foreach ($siteFiles as $siteFile) { 127 | try { 128 | $parsedSiteFile = Yaml::parse($siteFile->getContents()); 129 | 130 | $site += (array) $parsedSiteFile; 131 | } catch (ParseException $e) { 132 | continue; 133 | } 134 | } 135 | 136 | return $site; 137 | } 138 | 139 | /** 140 | * @param string $id 141 | * @param array|null $site 142 | * 143 | * @return array|null 144 | */ 145 | private function getPage(string $id, array $site = null) { 146 | $site = $site ?? $this->getSite(); 147 | 148 | if (isset($site[$id])) { 149 | $page = [$id => $site[$id]]; 150 | } 151 | 152 | return $page ?? null; 153 | } 154 | 155 | /** 156 | * @param string $pageId 157 | * 158 | * @return SplFileInfo 159 | */ 160 | private function getSaveFile(string $pageId = null) : SplFileInfo { 161 | $siteFiles = Finder::create()->files()->in("{$this->srcDir}/site")->name('*.yml'); 162 | 163 | /** @var SplFileInfo $siteFile */ 164 | foreach ($siteFiles as $siteFile) { 165 | $parsedSiteFile = Yaml::parse($siteFile->getContents()); 166 | 167 | if (!$pageId || isset($parsedSiteFile[$pageId])) { 168 | return $siteFile; 169 | } 170 | } 171 | 172 | $iterator = $siteFiles->getIterator(); 173 | $iterator->rewind(); 174 | 175 | return $iterator->current(); 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "d1ca44c816aa2cfc62ecf5ac354f16ab", 8 | "content-hash": "70fd85270b339ad6ee2d338d81f52c37", 9 | "packages": [ 10 | { 11 | "name": "brendt/responsive-images", 12 | "version": "1.9.1", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/brendt/responsive-images.git", 16 | "reference": "c3ba0c66abf404db34a1d683470b58595433471e" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/brendt/responsive-images/zipball/c3ba0c66abf404db34a1d683470b58595433471e", 21 | "reference": "c3ba0c66abf404db34a1d683470b58595433471e", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "intervention/image": "^2.3", 26 | "php": ">=7.0", 27 | "ps/image-optimizer": "^1.0", 28 | "symfony/filesystem": "^3.1", 29 | "symfony/finder": "^3.1" 30 | }, 31 | "require-dev": { 32 | "larapack/dd": "^1.0", 33 | "phpunit/phpunit": "^5.0" 34 | }, 35 | "type": "library", 36 | "autoload": { 37 | "psr-4": { 38 | "Brendt\\Image\\": "src/Brendt/Image" 39 | } 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Brent", 48 | "email": "brent@pageon.be" 49 | } 50 | ], 51 | "description": "Create responsive images with PHP, using the srcset and sizes spec.", 52 | "time": "2017-04-23 07:10:30" 53 | }, 54 | { 55 | "name": "brendt/stitcher", 56 | "version": "dev-master", 57 | "source": { 58 | "type": "git", 59 | "url": "https://github.com/brendt/stitcher.git", 60 | "reference": "6cd73c429ffbcbeb74ef757c1995792afaca188c" 61 | }, 62 | "dist": { 63 | "type": "zip", 64 | "url": "https://api.github.com/repos/brendt/stitcher/zipball/6cd73c429ffbcbeb74ef757c1995792afaca188c", 65 | "reference": "6cd73c429ffbcbeb74ef757c1995792afaca188c", 66 | "shasum": "" 67 | }, 68 | "require": { 69 | "brendt/responsive-images": "^1.5", 70 | "erusev/parsedown": "^1.6", 71 | "leafo/scssphp": "^0.6.6", 72 | "mrclay/minify": "^2.3", 73 | "pageon/html-meta": "^1.0", 74 | "php": ">=7.0", 75 | "smarty/smarty": "^3.1", 76 | "symfony/config": "^3.2", 77 | "symfony/console": "^3.1", 78 | "symfony/dependency-injection": "^3.1", 79 | "symfony/event-dispatcher": "^3.2", 80 | "symfony/filesystem": "^3.1", 81 | "symfony/finder": "^3.1", 82 | "symfony/routing": "^3.1", 83 | "symfony/yaml": "^3.1", 84 | "tivie/htaccess-parser": "^0.2@dev", 85 | "twig/twig": "~1.0" 86 | }, 87 | "require-dev": { 88 | "larapack/dd": "^1.0", 89 | "phpunit/phpunit": "^6.0" 90 | }, 91 | "type": "library", 92 | "autoload": { 93 | "psr-4": { 94 | "Brendt\\Stitcher\\": "src/Brendt/Stitcher" 95 | } 96 | }, 97 | "notification-url": "https://packagist.org/downloads/", 98 | "license": [ 99 | "MIT" 100 | ], 101 | "authors": [ 102 | { 103 | "name": "Brent", 104 | "email": "brent@pageon.be" 105 | } 106 | ], 107 | "description": "Create blazing fast websites with PHP, a template engine of your choice and YAML or JSON.", 108 | "homepage": "http://stitcher.pageon.be", 109 | "keywords": [ 110 | "generator", 111 | "performance", 112 | "seo", 113 | "smarty", 114 | "static", 115 | "static site", 116 | "twig" 117 | ], 118 | "time": "2017-04-27 11:21:56" 119 | }, 120 | { 121 | "name": "erusev/parsedown", 122 | "version": "1.6.2", 123 | "source": { 124 | "type": "git", 125 | "url": "https://github.com/erusev/parsedown.git", 126 | "reference": "1bf24f7334fe16c88bf9d467863309ceaf285b01" 127 | }, 128 | "dist": { 129 | "type": "zip", 130 | "url": "https://api.github.com/repos/erusev/parsedown/zipball/1bf24f7334fe16c88bf9d467863309ceaf285b01", 131 | "reference": "1bf24f7334fe16c88bf9d467863309ceaf285b01", 132 | "shasum": "" 133 | }, 134 | "require": { 135 | "php": ">=5.3.0" 136 | }, 137 | "type": "library", 138 | "autoload": { 139 | "psr-0": { 140 | "Parsedown": "" 141 | } 142 | }, 143 | "notification-url": "https://packagist.org/downloads/", 144 | "license": [ 145 | "MIT" 146 | ], 147 | "authors": [ 148 | { 149 | "name": "Emanuil Rusev", 150 | "email": "hello@erusev.com", 151 | "homepage": "http://erusev.com" 152 | } 153 | ], 154 | "description": "Parser for Markdown.", 155 | "homepage": "http://parsedown.org", 156 | "keywords": [ 157 | "markdown", 158 | "parser" 159 | ], 160 | "time": "2017-03-29 16:04:15" 161 | }, 162 | { 163 | "name": "guzzlehttp/psr7", 164 | "version": "1.4.2", 165 | "source": { 166 | "type": "git", 167 | "url": "https://github.com/guzzle/psr7.git", 168 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" 169 | }, 170 | "dist": { 171 | "type": "zip", 172 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 173 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 174 | "shasum": "" 175 | }, 176 | "require": { 177 | "php": ">=5.4.0", 178 | "psr/http-message": "~1.0" 179 | }, 180 | "provide": { 181 | "psr/http-message-implementation": "1.0" 182 | }, 183 | "require-dev": { 184 | "phpunit/phpunit": "~4.0" 185 | }, 186 | "type": "library", 187 | "extra": { 188 | "branch-alias": { 189 | "dev-master": "1.4-dev" 190 | } 191 | }, 192 | "autoload": { 193 | "psr-4": { 194 | "GuzzleHttp\\Psr7\\": "src/" 195 | }, 196 | "files": [ 197 | "src/functions_include.php" 198 | ] 199 | }, 200 | "notification-url": "https://packagist.org/downloads/", 201 | "license": [ 202 | "MIT" 203 | ], 204 | "authors": [ 205 | { 206 | "name": "Michael Dowling", 207 | "email": "mtdowling@gmail.com", 208 | "homepage": "https://github.com/mtdowling" 209 | }, 210 | { 211 | "name": "Tobias Schultze", 212 | "homepage": "https://github.com/Tobion" 213 | } 214 | ], 215 | "description": "PSR-7 message implementation that also provides common utility methods", 216 | "keywords": [ 217 | "http", 218 | "message", 219 | "request", 220 | "response", 221 | "stream", 222 | "uri", 223 | "url" 224 | ], 225 | "time": "2017-03-20 17:10:46" 226 | }, 227 | { 228 | "name": "intervention/image", 229 | "version": "2.3.13", 230 | "source": { 231 | "type": "git", 232 | "url": "https://github.com/Intervention/image.git", 233 | "reference": "15a517f052ee15d373ffa145c9642d5fec7ddf5c" 234 | }, 235 | "dist": { 236 | "type": "zip", 237 | "url": "https://api.github.com/repos/Intervention/image/zipball/15a517f052ee15d373ffa145c9642d5fec7ddf5c", 238 | "reference": "15a517f052ee15d373ffa145c9642d5fec7ddf5c", 239 | "shasum": "" 240 | }, 241 | "require": { 242 | "ext-fileinfo": "*", 243 | "guzzlehttp/psr7": "~1.1", 244 | "php": ">=5.4.0" 245 | }, 246 | "require-dev": { 247 | "mockery/mockery": "~0.9.2", 248 | "phpunit/phpunit": "3.*" 249 | }, 250 | "suggest": { 251 | "ext-gd": "to use GD library based image processing.", 252 | "ext-imagick": "to use Imagick based image processing.", 253 | "intervention/imagecache": "Caching extension for the Intervention Image library" 254 | }, 255 | "type": "library", 256 | "extra": { 257 | "branch-alias": { 258 | "dev-master": "2.3-dev" 259 | } 260 | }, 261 | "autoload": { 262 | "psr-4": { 263 | "Intervention\\Image\\": "src/Intervention/Image" 264 | } 265 | }, 266 | "notification-url": "https://packagist.org/downloads/", 267 | "license": [ 268 | "MIT" 269 | ], 270 | "authors": [ 271 | { 272 | "name": "Oliver Vogel", 273 | "email": "oliver@olivervogel.net", 274 | "homepage": "http://olivervogel.net/" 275 | } 276 | ], 277 | "description": "Image handling and manipulation library with support for Laravel integration", 278 | "homepage": "http://image.intervention.io/", 279 | "keywords": [ 280 | "gd", 281 | "image", 282 | "imagick", 283 | "laravel", 284 | "thumbnail", 285 | "watermark" 286 | ], 287 | "time": "2017-04-23 18:45:36" 288 | }, 289 | { 290 | "name": "leafo/scssphp", 291 | "version": "v0.6.7", 292 | "source": { 293 | "type": "git", 294 | "url": "https://github.com/leafo/scssphp.git", 295 | "reference": "562213cd803e42ea53b0735554794c4022d8db89" 296 | }, 297 | "dist": { 298 | "type": "zip", 299 | "url": "https://api.github.com/repos/leafo/scssphp/zipball/562213cd803e42ea53b0735554794c4022d8db89", 300 | "reference": "562213cd803e42ea53b0735554794c4022d8db89", 301 | "shasum": "" 302 | }, 303 | "require": { 304 | "php": ">=5.4.0" 305 | }, 306 | "require-dev": { 307 | "kherge/box": "~2.5", 308 | "phpunit/phpunit": "~3.7", 309 | "squizlabs/php_codesniffer": "~2.5" 310 | }, 311 | "bin": [ 312 | "bin/pscss" 313 | ], 314 | "type": "library", 315 | "autoload": { 316 | "psr-4": { 317 | "Leafo\\ScssPhp\\": "src/" 318 | } 319 | }, 320 | "notification-url": "https://packagist.org/downloads/", 321 | "license": [ 322 | "MIT" 323 | ], 324 | "authors": [ 325 | { 326 | "name": "Leaf Corcoran", 327 | "email": "leafot@gmail.com", 328 | "homepage": "http://leafo.net" 329 | } 330 | ], 331 | "description": "scssphp is a compiler for SCSS written in PHP.", 332 | "homepage": "http://leafo.github.io/scssphp/", 333 | "keywords": [ 334 | "css", 335 | "less", 336 | "sass", 337 | "scss", 338 | "stylesheet" 339 | ], 340 | "time": "2017-02-23 05:07:33" 341 | }, 342 | { 343 | "name": "mrclay/minify", 344 | "version": "2.3.1", 345 | "source": { 346 | "type": "git", 347 | "url": "https://github.com/mrclay/minify.git", 348 | "reference": "fefc85d48190c97a1c692b29b3acbdc07d7fd73f" 349 | }, 350 | "dist": { 351 | "type": "zip", 352 | "url": "https://api.github.com/repos/mrclay/minify/zipball/fefc85d48190c97a1c692b29b3acbdc07d7fd73f", 353 | "reference": "fefc85d48190c97a1c692b29b3acbdc07d7fd73f", 354 | "shasum": "" 355 | }, 356 | "require": { 357 | "ext-pcre": "*", 358 | "php": ">=5.2.1" 359 | }, 360 | "require-dev": { 361 | "tubalmartin/cssmin": "~2.4.8" 362 | }, 363 | "suggest": { 364 | "tubalmartin/cssmin": "Support minify with CSSMin (YUI PHP port)" 365 | }, 366 | "type": "library", 367 | "autoload": { 368 | "classmap": [ 369 | "min/lib/" 370 | ] 371 | }, 372 | "notification-url": "https://packagist.org/downloads/", 373 | "license": [ 374 | "BSD-3-Clause" 375 | ], 376 | "authors": [ 377 | { 378 | "name": "Stephen Clay", 379 | "email": "steve@mrclay.org", 380 | "role": "Developer" 381 | } 382 | ], 383 | "description": "Minify is a PHP5 app that helps you follow several rules for client-side performance. It combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers", 384 | "homepage": "http://code.google.com/p/minify/", 385 | "time": "2017-04-03 19:58:28" 386 | }, 387 | { 388 | "name": "nikic/fast-route", 389 | "version": "v1.2.0", 390 | "source": { 391 | "type": "git", 392 | "url": "https://github.com/nikic/FastRoute.git", 393 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6" 394 | }, 395 | "dist": { 396 | "type": "zip", 397 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6", 398 | "reference": "b5f95749071c82a8e0f58586987627054400cdf6", 399 | "shasum": "" 400 | }, 401 | "require": { 402 | "php": ">=5.4.0" 403 | }, 404 | "type": "library", 405 | "autoload": { 406 | "psr-4": { 407 | "FastRoute\\": "src/" 408 | }, 409 | "files": [ 410 | "src/functions.php" 411 | ] 412 | }, 413 | "notification-url": "https://packagist.org/downloads/", 414 | "license": [ 415 | "BSD-3-Clause" 416 | ], 417 | "authors": [ 418 | { 419 | "name": "Nikita Popov", 420 | "email": "nikic@php.net" 421 | } 422 | ], 423 | "description": "Fast request router for PHP", 424 | "keywords": [ 425 | "router", 426 | "routing" 427 | ], 428 | "time": "2017-01-19 11:35:12" 429 | }, 430 | { 431 | "name": "pageon/html-meta", 432 | "version": "1.0.0", 433 | "source": { 434 | "type": "git", 435 | "url": "https://github.com/pageon/html-meta.git", 436 | "reference": "1a07ccea6ad426d4182173fa96be7d4878491b8d" 437 | }, 438 | "dist": { 439 | "type": "zip", 440 | "url": "https://api.github.com/repos/pageon/html-meta/zipball/1a07ccea6ad426d4182173fa96be7d4878491b8d", 441 | "reference": "1a07ccea6ad426d4182173fa96be7d4878491b8d", 442 | "shasum": "" 443 | }, 444 | "require": { 445 | "php": "^7.0" 446 | }, 447 | "require-dev": { 448 | "larapack/dd": "^1.1", 449 | "phpunit/phpunit": "^6.0" 450 | }, 451 | "type": "library", 452 | "autoload": { 453 | "psr-4": { 454 | "Brendt\\Html\\Meta\\": "src/" 455 | } 456 | }, 457 | "notification-url": "https://packagist.org/downloads/", 458 | "license": [ 459 | "MIT" 460 | ], 461 | "authors": [ 462 | { 463 | "name": "BrenDt", 464 | "email": "brent@pageon.be" 465 | } 466 | ], 467 | "description": "Manage HTML meta tags in PHP", 468 | "keywords": [ 469 | "html meta", 470 | "meta", 471 | "meta tags", 472 | "seo" 473 | ], 474 | "time": "2017-04-23 14:38:19" 475 | }, 476 | { 477 | "name": "ps/image-optimizer", 478 | "version": "1.1.0", 479 | "source": { 480 | "type": "git", 481 | "url": "https://github.com/psliwa/image-optimizer.git", 482 | "reference": "6e7461722d798ab6e77fb7f483d679ac37b71bec" 483 | }, 484 | "dist": { 485 | "type": "zip", 486 | "url": "https://api.github.com/repos/psliwa/image-optimizer/zipball/6e7461722d798ab6e77fb7f483d679ac37b71bec", 487 | "reference": "6e7461722d798ab6e77fb7f483d679ac37b71bec", 488 | "shasum": "" 489 | }, 490 | "require": { 491 | "psr/log": "1.0.*", 492 | "symfony/options-resolver": "~2.1 | ~3.0", 493 | "symfony/process": "~2.0 | ~3.0" 494 | }, 495 | "require-dev": { 496 | "phpunit/phpunit": "^5.0" 497 | }, 498 | "type": "library", 499 | "autoload": { 500 | "psr-0": { 501 | "ImageOptimizer": "src/" 502 | } 503 | }, 504 | "notification-url": "https://packagist.org/downloads/", 505 | "license": [ 506 | "MIT" 507 | ], 508 | "authors": [ 509 | { 510 | "name": "Piotr Sliwa", 511 | "email": "peter.pl7@gmail.com" 512 | } 513 | ], 514 | "description": "Image optimization / compression library. This library is able to optimize png, jpg and gif files in very easy and handy way. It uses optipng, pngquant, pngcrush, pngout, gifsicle, jpegoptim and jpegtran tools.", 515 | "keywords": [ 516 | "compression", 517 | "image", 518 | "image optimizer", 519 | "jpegoptim", 520 | "optimization", 521 | "optipng" 522 | ], 523 | "time": "2017-03-25 15:42:56" 524 | }, 525 | { 526 | "name": "psr/http-message", 527 | "version": "1.0.1", 528 | "source": { 529 | "type": "git", 530 | "url": "https://github.com/php-fig/http-message.git", 531 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 532 | }, 533 | "dist": { 534 | "type": "zip", 535 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 536 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 537 | "shasum": "" 538 | }, 539 | "require": { 540 | "php": ">=5.3.0" 541 | }, 542 | "type": "library", 543 | "extra": { 544 | "branch-alias": { 545 | "dev-master": "1.0.x-dev" 546 | } 547 | }, 548 | "autoload": { 549 | "psr-4": { 550 | "Psr\\Http\\Message\\": "src/" 551 | } 552 | }, 553 | "notification-url": "https://packagist.org/downloads/", 554 | "license": [ 555 | "MIT" 556 | ], 557 | "authors": [ 558 | { 559 | "name": "PHP-FIG", 560 | "homepage": "http://www.php-fig.org/" 561 | } 562 | ], 563 | "description": "Common interface for HTTP messages", 564 | "homepage": "https://github.com/php-fig/http-message", 565 | "keywords": [ 566 | "http", 567 | "http-message", 568 | "psr", 569 | "psr-7", 570 | "request", 571 | "response" 572 | ], 573 | "time": "2016-08-06 14:39:51" 574 | }, 575 | { 576 | "name": "psr/log", 577 | "version": "1.0.2", 578 | "source": { 579 | "type": "git", 580 | "url": "https://github.com/php-fig/log.git", 581 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 582 | }, 583 | "dist": { 584 | "type": "zip", 585 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 586 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 587 | "shasum": "" 588 | }, 589 | "require": { 590 | "php": ">=5.3.0" 591 | }, 592 | "type": "library", 593 | "extra": { 594 | "branch-alias": { 595 | "dev-master": "1.0.x-dev" 596 | } 597 | }, 598 | "autoload": { 599 | "psr-4": { 600 | "Psr\\Log\\": "Psr/Log/" 601 | } 602 | }, 603 | "notification-url": "https://packagist.org/downloads/", 604 | "license": [ 605 | "MIT" 606 | ], 607 | "authors": [ 608 | { 609 | "name": "PHP-FIG", 610 | "homepage": "http://www.php-fig.org/" 611 | } 612 | ], 613 | "description": "Common interface for logging libraries", 614 | "homepage": "https://github.com/php-fig/log", 615 | "keywords": [ 616 | "log", 617 | "psr", 618 | "psr-3" 619 | ], 620 | "time": "2016-10-10 12:19:37" 621 | }, 622 | { 623 | "name": "smarty/smarty", 624 | "version": "v3.1.31", 625 | "source": { 626 | "type": "git", 627 | "url": "https://github.com/smarty-php/smarty.git", 628 | "reference": "c7d42e4a327c402897dd587871434888fde1e7a9" 629 | }, 630 | "dist": { 631 | "type": "zip", 632 | "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9", 633 | "reference": "c7d42e4a327c402897dd587871434888fde1e7a9", 634 | "shasum": "" 635 | }, 636 | "require": { 637 | "php": ">=5.2" 638 | }, 639 | "type": "library", 640 | "extra": { 641 | "branch-alias": { 642 | "dev-master": "3.1.x-dev" 643 | } 644 | }, 645 | "autoload": { 646 | "files": [ 647 | "libs/bootstrap.php" 648 | ] 649 | }, 650 | "notification-url": "https://packagist.org/downloads/", 651 | "license": [ 652 | "LGPL-3.0" 653 | ], 654 | "authors": [ 655 | { 656 | "name": "Monte Ohrt", 657 | "email": "monte@ohrt.com" 658 | }, 659 | { 660 | "name": "Uwe Tews", 661 | "email": "uwe.tews@googlemail.com" 662 | }, 663 | { 664 | "name": "Rodney Rehm", 665 | "email": "rodney.rehm@medialize.de" 666 | } 667 | ], 668 | "description": "Smarty - the compiling PHP template engine", 669 | "homepage": "http://www.smarty.net", 670 | "keywords": [ 671 | "templating" 672 | ], 673 | "time": "2016-12-14 21:57:25" 674 | }, 675 | { 676 | "name": "symfony/config", 677 | "version": "v3.2.7", 678 | "source": { 679 | "type": "git", 680 | "url": "https://github.com/symfony/config.git", 681 | "reference": "8444bde28e3c2a33e571e6f180c2d78bfdc4480d" 682 | }, 683 | "dist": { 684 | "type": "zip", 685 | "url": "https://api.github.com/repos/symfony/config/zipball/8444bde28e3c2a33e571e6f180c2d78bfdc4480d", 686 | "reference": "8444bde28e3c2a33e571e6f180c2d78bfdc4480d", 687 | "shasum": "" 688 | }, 689 | "require": { 690 | "php": ">=5.5.9", 691 | "symfony/filesystem": "~2.8|~3.0" 692 | }, 693 | "require-dev": { 694 | "symfony/yaml": "~3.0" 695 | }, 696 | "suggest": { 697 | "symfony/yaml": "To use the yaml reference dumper" 698 | }, 699 | "type": "library", 700 | "extra": { 701 | "branch-alias": { 702 | "dev-master": "3.2-dev" 703 | } 704 | }, 705 | "autoload": { 706 | "psr-4": { 707 | "Symfony\\Component\\Config\\": "" 708 | }, 709 | "exclude-from-classmap": [ 710 | "/Tests/" 711 | ] 712 | }, 713 | "notification-url": "https://packagist.org/downloads/", 714 | "license": [ 715 | "MIT" 716 | ], 717 | "authors": [ 718 | { 719 | "name": "Fabien Potencier", 720 | "email": "fabien@symfony.com" 721 | }, 722 | { 723 | "name": "Symfony Community", 724 | "homepage": "https://symfony.com/contributors" 725 | } 726 | ], 727 | "description": "Symfony Config Component", 728 | "homepage": "https://symfony.com", 729 | "time": "2017-04-04 15:30:56" 730 | }, 731 | { 732 | "name": "symfony/console", 733 | "version": "v3.2.7", 734 | "source": { 735 | "type": "git", 736 | "url": "https://github.com/symfony/console.git", 737 | "reference": "c30243cc51f726812be3551316b109a2f5deaf8d" 738 | }, 739 | "dist": { 740 | "type": "zip", 741 | "url": "https://api.github.com/repos/symfony/console/zipball/c30243cc51f726812be3551316b109a2f5deaf8d", 742 | "reference": "c30243cc51f726812be3551316b109a2f5deaf8d", 743 | "shasum": "" 744 | }, 745 | "require": { 746 | "php": ">=5.5.9", 747 | "symfony/debug": "~2.8|~3.0", 748 | "symfony/polyfill-mbstring": "~1.0" 749 | }, 750 | "require-dev": { 751 | "psr/log": "~1.0", 752 | "symfony/event-dispatcher": "~2.8|~3.0", 753 | "symfony/filesystem": "~2.8|~3.0", 754 | "symfony/process": "~2.8|~3.0" 755 | }, 756 | "suggest": { 757 | "psr/log": "For using the console logger", 758 | "symfony/event-dispatcher": "", 759 | "symfony/filesystem": "", 760 | "symfony/process": "" 761 | }, 762 | "type": "library", 763 | "extra": { 764 | "branch-alias": { 765 | "dev-master": "3.2-dev" 766 | } 767 | }, 768 | "autoload": { 769 | "psr-4": { 770 | "Symfony\\Component\\Console\\": "" 771 | }, 772 | "exclude-from-classmap": [ 773 | "/Tests/" 774 | ] 775 | }, 776 | "notification-url": "https://packagist.org/downloads/", 777 | "license": [ 778 | "MIT" 779 | ], 780 | "authors": [ 781 | { 782 | "name": "Fabien Potencier", 783 | "email": "fabien@symfony.com" 784 | }, 785 | { 786 | "name": "Symfony Community", 787 | "homepage": "https://symfony.com/contributors" 788 | } 789 | ], 790 | "description": "Symfony Console Component", 791 | "homepage": "https://symfony.com", 792 | "time": "2017-04-04 14:33:42" 793 | }, 794 | { 795 | "name": "symfony/debug", 796 | "version": "v3.2.7", 797 | "source": { 798 | "type": "git", 799 | "url": "https://github.com/symfony/debug.git", 800 | "reference": "56f613406446a4a0a031475cfd0a01751de22659" 801 | }, 802 | "dist": { 803 | "type": "zip", 804 | "url": "https://api.github.com/repos/symfony/debug/zipball/56f613406446a4a0a031475cfd0a01751de22659", 805 | "reference": "56f613406446a4a0a031475cfd0a01751de22659", 806 | "shasum": "" 807 | }, 808 | "require": { 809 | "php": ">=5.5.9", 810 | "psr/log": "~1.0" 811 | }, 812 | "conflict": { 813 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 814 | }, 815 | "require-dev": { 816 | "symfony/class-loader": "~2.8|~3.0", 817 | "symfony/http-kernel": "~2.8|~3.0" 818 | }, 819 | "type": "library", 820 | "extra": { 821 | "branch-alias": { 822 | "dev-master": "3.2-dev" 823 | } 824 | }, 825 | "autoload": { 826 | "psr-4": { 827 | "Symfony\\Component\\Debug\\": "" 828 | }, 829 | "exclude-from-classmap": [ 830 | "/Tests/" 831 | ] 832 | }, 833 | "notification-url": "https://packagist.org/downloads/", 834 | "license": [ 835 | "MIT" 836 | ], 837 | "authors": [ 838 | { 839 | "name": "Fabien Potencier", 840 | "email": "fabien@symfony.com" 841 | }, 842 | { 843 | "name": "Symfony Community", 844 | "homepage": "https://symfony.com/contributors" 845 | } 846 | ], 847 | "description": "Symfony Debug Component", 848 | "homepage": "https://symfony.com", 849 | "time": "2017-03-28 21:38:24" 850 | }, 851 | { 852 | "name": "symfony/dependency-injection", 853 | "version": "v3.2.7", 854 | "source": { 855 | "type": "git", 856 | "url": "https://github.com/symfony/dependency-injection.git", 857 | "reference": "923bb014708b666e4092c9ba39993895c9c8fcd7" 858 | }, 859 | "dist": { 860 | "type": "zip", 861 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/923bb014708b666e4092c9ba39993895c9c8fcd7", 862 | "reference": "923bb014708b666e4092c9ba39993895c9c8fcd7", 863 | "shasum": "" 864 | }, 865 | "require": { 866 | "php": ">=5.5.9" 867 | }, 868 | "conflict": { 869 | "symfony/yaml": "<3.2" 870 | }, 871 | "require-dev": { 872 | "symfony/config": "~2.8|~3.0", 873 | "symfony/expression-language": "~2.8|~3.0", 874 | "symfony/yaml": "~3.2" 875 | }, 876 | "suggest": { 877 | "symfony/config": "", 878 | "symfony/expression-language": "For using expressions in service container configuration", 879 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", 880 | "symfony/yaml": "" 881 | }, 882 | "type": "library", 883 | "extra": { 884 | "branch-alias": { 885 | "dev-master": "3.2-dev" 886 | } 887 | }, 888 | "autoload": { 889 | "psr-4": { 890 | "Symfony\\Component\\DependencyInjection\\": "" 891 | }, 892 | "exclude-from-classmap": [ 893 | "/Tests/" 894 | ] 895 | }, 896 | "notification-url": "https://packagist.org/downloads/", 897 | "license": [ 898 | "MIT" 899 | ], 900 | "authors": [ 901 | { 902 | "name": "Fabien Potencier", 903 | "email": "fabien@symfony.com" 904 | }, 905 | { 906 | "name": "Symfony Community", 907 | "homepage": "https://symfony.com/contributors" 908 | } 909 | ], 910 | "description": "Symfony DependencyInjection Component", 911 | "homepage": "https://symfony.com", 912 | "time": "2017-04-04 07:26:27" 913 | }, 914 | { 915 | "name": "symfony/event-dispatcher", 916 | "version": "v3.2.7", 917 | "source": { 918 | "type": "git", 919 | "url": "https://github.com/symfony/event-dispatcher.git", 920 | "reference": "154bb1ef7b0e42ccc792bd53edbce18ed73440ca" 921 | }, 922 | "dist": { 923 | "type": "zip", 924 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/154bb1ef7b0e42ccc792bd53edbce18ed73440ca", 925 | "reference": "154bb1ef7b0e42ccc792bd53edbce18ed73440ca", 926 | "shasum": "" 927 | }, 928 | "require": { 929 | "php": ">=5.5.9" 930 | }, 931 | "require-dev": { 932 | "psr/log": "~1.0", 933 | "symfony/config": "~2.8|~3.0", 934 | "symfony/dependency-injection": "~2.8|~3.0", 935 | "symfony/expression-language": "~2.8|~3.0", 936 | "symfony/stopwatch": "~2.8|~3.0" 937 | }, 938 | "suggest": { 939 | "symfony/dependency-injection": "", 940 | "symfony/http-kernel": "" 941 | }, 942 | "type": "library", 943 | "extra": { 944 | "branch-alias": { 945 | "dev-master": "3.2-dev" 946 | } 947 | }, 948 | "autoload": { 949 | "psr-4": { 950 | "Symfony\\Component\\EventDispatcher\\": "" 951 | }, 952 | "exclude-from-classmap": [ 953 | "/Tests/" 954 | ] 955 | }, 956 | "notification-url": "https://packagist.org/downloads/", 957 | "license": [ 958 | "MIT" 959 | ], 960 | "authors": [ 961 | { 962 | "name": "Fabien Potencier", 963 | "email": "fabien@symfony.com" 964 | }, 965 | { 966 | "name": "Symfony Community", 967 | "homepage": "https://symfony.com/contributors" 968 | } 969 | ], 970 | "description": "Symfony EventDispatcher Component", 971 | "homepage": "https://symfony.com", 972 | "time": "2017-04-04 07:26:27" 973 | }, 974 | { 975 | "name": "symfony/filesystem", 976 | "version": "v3.2.7", 977 | "source": { 978 | "type": "git", 979 | "url": "https://github.com/symfony/filesystem.git", 980 | "reference": "64421e6479c4a8e60d790fb666bd520992861b66" 981 | }, 982 | "dist": { 983 | "type": "zip", 984 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/64421e6479c4a8e60d790fb666bd520992861b66", 985 | "reference": "64421e6479c4a8e60d790fb666bd520992861b66", 986 | "shasum": "" 987 | }, 988 | "require": { 989 | "php": ">=5.5.9" 990 | }, 991 | "type": "library", 992 | "extra": { 993 | "branch-alias": { 994 | "dev-master": "3.2-dev" 995 | } 996 | }, 997 | "autoload": { 998 | "psr-4": { 999 | "Symfony\\Component\\Filesystem\\": "" 1000 | }, 1001 | "exclude-from-classmap": [ 1002 | "/Tests/" 1003 | ] 1004 | }, 1005 | "notification-url": "https://packagist.org/downloads/", 1006 | "license": [ 1007 | "MIT" 1008 | ], 1009 | "authors": [ 1010 | { 1011 | "name": "Fabien Potencier", 1012 | "email": "fabien@symfony.com" 1013 | }, 1014 | { 1015 | "name": "Symfony Community", 1016 | "homepage": "https://symfony.com/contributors" 1017 | } 1018 | ], 1019 | "description": "Symfony Filesystem Component", 1020 | "homepage": "https://symfony.com", 1021 | "time": "2017-03-26 15:47:15" 1022 | }, 1023 | { 1024 | "name": "symfony/finder", 1025 | "version": "v3.2.7", 1026 | "source": { 1027 | "type": "git", 1028 | "url": "https://github.com/symfony/finder.git", 1029 | "reference": "b20900ce5ea164cd9314af52725b0bb5a758217a" 1030 | }, 1031 | "dist": { 1032 | "type": "zip", 1033 | "url": "https://api.github.com/repos/symfony/finder/zipball/b20900ce5ea164cd9314af52725b0bb5a758217a", 1034 | "reference": "b20900ce5ea164cd9314af52725b0bb5a758217a", 1035 | "shasum": "" 1036 | }, 1037 | "require": { 1038 | "php": ">=5.5.9" 1039 | }, 1040 | "type": "library", 1041 | "extra": { 1042 | "branch-alias": { 1043 | "dev-master": "3.2-dev" 1044 | } 1045 | }, 1046 | "autoload": { 1047 | "psr-4": { 1048 | "Symfony\\Component\\Finder\\": "" 1049 | }, 1050 | "exclude-from-classmap": [ 1051 | "/Tests/" 1052 | ] 1053 | }, 1054 | "notification-url": "https://packagist.org/downloads/", 1055 | "license": [ 1056 | "MIT" 1057 | ], 1058 | "authors": [ 1059 | { 1060 | "name": "Fabien Potencier", 1061 | "email": "fabien@symfony.com" 1062 | }, 1063 | { 1064 | "name": "Symfony Community", 1065 | "homepage": "https://symfony.com/contributors" 1066 | } 1067 | ], 1068 | "description": "Symfony Finder Component", 1069 | "homepage": "https://symfony.com", 1070 | "time": "2017-03-20 09:32:19" 1071 | }, 1072 | { 1073 | "name": "symfony/options-resolver", 1074 | "version": "v3.2.7", 1075 | "source": { 1076 | "type": "git", 1077 | "url": "https://github.com/symfony/options-resolver.git", 1078 | "reference": "6a19be85237fe8bbd4975f86942b4763bb0da6ca" 1079 | }, 1080 | "dist": { 1081 | "type": "zip", 1082 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a19be85237fe8bbd4975f86942b4763bb0da6ca", 1083 | "reference": "6a19be85237fe8bbd4975f86942b4763bb0da6ca", 1084 | "shasum": "" 1085 | }, 1086 | "require": { 1087 | "php": ">=5.5.9" 1088 | }, 1089 | "type": "library", 1090 | "extra": { 1091 | "branch-alias": { 1092 | "dev-master": "3.2-dev" 1093 | } 1094 | }, 1095 | "autoload": { 1096 | "psr-4": { 1097 | "Symfony\\Component\\OptionsResolver\\": "" 1098 | }, 1099 | "exclude-from-classmap": [ 1100 | "/Tests/" 1101 | ] 1102 | }, 1103 | "notification-url": "https://packagist.org/downloads/", 1104 | "license": [ 1105 | "MIT" 1106 | ], 1107 | "authors": [ 1108 | { 1109 | "name": "Fabien Potencier", 1110 | "email": "fabien@symfony.com" 1111 | }, 1112 | { 1113 | "name": "Symfony Community", 1114 | "homepage": "https://symfony.com/contributors" 1115 | } 1116 | ], 1117 | "description": "Symfony OptionsResolver Component", 1118 | "homepage": "https://symfony.com", 1119 | "keywords": [ 1120 | "config", 1121 | "configuration", 1122 | "options" 1123 | ], 1124 | "time": "2017-03-21 21:44:32" 1125 | }, 1126 | { 1127 | "name": "symfony/polyfill-mbstring", 1128 | "version": "v1.3.0", 1129 | "source": { 1130 | "type": "git", 1131 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1132 | "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" 1133 | }, 1134 | "dist": { 1135 | "type": "zip", 1136 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", 1137 | "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", 1138 | "shasum": "" 1139 | }, 1140 | "require": { 1141 | "php": ">=5.3.3" 1142 | }, 1143 | "suggest": { 1144 | "ext-mbstring": "For best performance" 1145 | }, 1146 | "type": "library", 1147 | "extra": { 1148 | "branch-alias": { 1149 | "dev-master": "1.3-dev" 1150 | } 1151 | }, 1152 | "autoload": { 1153 | "psr-4": { 1154 | "Symfony\\Polyfill\\Mbstring\\": "" 1155 | }, 1156 | "files": [ 1157 | "bootstrap.php" 1158 | ] 1159 | }, 1160 | "notification-url": "https://packagist.org/downloads/", 1161 | "license": [ 1162 | "MIT" 1163 | ], 1164 | "authors": [ 1165 | { 1166 | "name": "Nicolas Grekas", 1167 | "email": "p@tchwork.com" 1168 | }, 1169 | { 1170 | "name": "Symfony Community", 1171 | "homepage": "https://symfony.com/contributors" 1172 | } 1173 | ], 1174 | "description": "Symfony polyfill for the Mbstring extension", 1175 | "homepage": "https://symfony.com", 1176 | "keywords": [ 1177 | "compatibility", 1178 | "mbstring", 1179 | "polyfill", 1180 | "portable", 1181 | "shim" 1182 | ], 1183 | "time": "2016-11-14 01:06:16" 1184 | }, 1185 | { 1186 | "name": "symfony/process", 1187 | "version": "v3.2.7", 1188 | "source": { 1189 | "type": "git", 1190 | "url": "https://github.com/symfony/process.git", 1191 | "reference": "57fdaa55827ae14d617550ebe71a820f0a5e2282" 1192 | }, 1193 | "dist": { 1194 | "type": "zip", 1195 | "url": "https://api.github.com/repos/symfony/process/zipball/57fdaa55827ae14d617550ebe71a820f0a5e2282", 1196 | "reference": "57fdaa55827ae14d617550ebe71a820f0a5e2282", 1197 | "shasum": "" 1198 | }, 1199 | "require": { 1200 | "php": ">=5.5.9" 1201 | }, 1202 | "type": "library", 1203 | "extra": { 1204 | "branch-alias": { 1205 | "dev-master": "3.2-dev" 1206 | } 1207 | }, 1208 | "autoload": { 1209 | "psr-4": { 1210 | "Symfony\\Component\\Process\\": "" 1211 | }, 1212 | "exclude-from-classmap": [ 1213 | "/Tests/" 1214 | ] 1215 | }, 1216 | "notification-url": "https://packagist.org/downloads/", 1217 | "license": [ 1218 | "MIT" 1219 | ], 1220 | "authors": [ 1221 | { 1222 | "name": "Fabien Potencier", 1223 | "email": "fabien@symfony.com" 1224 | }, 1225 | { 1226 | "name": "Symfony Community", 1227 | "homepage": "https://symfony.com/contributors" 1228 | } 1229 | ], 1230 | "description": "Symfony Process Component", 1231 | "homepage": "https://symfony.com", 1232 | "time": "2017-03-27 18:07:02" 1233 | }, 1234 | { 1235 | "name": "symfony/routing", 1236 | "version": "v3.2.7", 1237 | "source": { 1238 | "type": "git", 1239 | "url": "https://github.com/symfony/routing.git", 1240 | "reference": "d6605f9a5767bc5bc4895e1c762ba93964608aee" 1241 | }, 1242 | "dist": { 1243 | "type": "zip", 1244 | "url": "https://api.github.com/repos/symfony/routing/zipball/d6605f9a5767bc5bc4895e1c762ba93964608aee", 1245 | "reference": "d6605f9a5767bc5bc4895e1c762ba93964608aee", 1246 | "shasum": "" 1247 | }, 1248 | "require": { 1249 | "php": ">=5.5.9" 1250 | }, 1251 | "conflict": { 1252 | "symfony/config": "<2.8" 1253 | }, 1254 | "require-dev": { 1255 | "doctrine/annotations": "~1.0", 1256 | "doctrine/common": "~2.2", 1257 | "psr/log": "~1.0", 1258 | "symfony/config": "~2.8|~3.0", 1259 | "symfony/expression-language": "~2.8|~3.0", 1260 | "symfony/http-foundation": "~2.8|~3.0", 1261 | "symfony/yaml": "~2.8|~3.0" 1262 | }, 1263 | "suggest": { 1264 | "doctrine/annotations": "For using the annotation loader", 1265 | "symfony/config": "For using the all-in-one router or any loader", 1266 | "symfony/dependency-injection": "For loading routes from a service", 1267 | "symfony/expression-language": "For using expression matching", 1268 | "symfony/http-foundation": "For using a Symfony Request object", 1269 | "symfony/yaml": "For using the YAML loader" 1270 | }, 1271 | "type": "library", 1272 | "extra": { 1273 | "branch-alias": { 1274 | "dev-master": "3.2-dev" 1275 | } 1276 | }, 1277 | "autoload": { 1278 | "psr-4": { 1279 | "Symfony\\Component\\Routing\\": "" 1280 | }, 1281 | "exclude-from-classmap": [ 1282 | "/Tests/" 1283 | ] 1284 | }, 1285 | "notification-url": "https://packagist.org/downloads/", 1286 | "license": [ 1287 | "MIT" 1288 | ], 1289 | "authors": [ 1290 | { 1291 | "name": "Fabien Potencier", 1292 | "email": "fabien@symfony.com" 1293 | }, 1294 | { 1295 | "name": "Symfony Community", 1296 | "homepage": "https://symfony.com/contributors" 1297 | } 1298 | ], 1299 | "description": "Symfony Routing Component", 1300 | "homepage": "https://symfony.com", 1301 | "keywords": [ 1302 | "router", 1303 | "routing", 1304 | "uri", 1305 | "url" 1306 | ], 1307 | "time": "2017-03-02 15:58:09" 1308 | }, 1309 | { 1310 | "name": "symfony/yaml", 1311 | "version": "v3.2.7", 1312 | "source": { 1313 | "type": "git", 1314 | "url": "https://github.com/symfony/yaml.git", 1315 | "reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621" 1316 | }, 1317 | "dist": { 1318 | "type": "zip", 1319 | "url": "https://api.github.com/repos/symfony/yaml/zipball/62b4cdb99d52cb1ff253c465eb1532a80cebb621", 1320 | "reference": "62b4cdb99d52cb1ff253c465eb1532a80cebb621", 1321 | "shasum": "" 1322 | }, 1323 | "require": { 1324 | "php": ">=5.5.9" 1325 | }, 1326 | "require-dev": { 1327 | "symfony/console": "~2.8|~3.0" 1328 | }, 1329 | "suggest": { 1330 | "symfony/console": "For validating YAML files using the lint command" 1331 | }, 1332 | "type": "library", 1333 | "extra": { 1334 | "branch-alias": { 1335 | "dev-master": "3.2-dev" 1336 | } 1337 | }, 1338 | "autoload": { 1339 | "psr-4": { 1340 | "Symfony\\Component\\Yaml\\": "" 1341 | }, 1342 | "exclude-from-classmap": [ 1343 | "/Tests/" 1344 | ] 1345 | }, 1346 | "notification-url": "https://packagist.org/downloads/", 1347 | "license": [ 1348 | "MIT" 1349 | ], 1350 | "authors": [ 1351 | { 1352 | "name": "Fabien Potencier", 1353 | "email": "fabien@symfony.com" 1354 | }, 1355 | { 1356 | "name": "Symfony Community", 1357 | "homepage": "https://symfony.com/contributors" 1358 | } 1359 | ], 1360 | "description": "Symfony Yaml Component", 1361 | "homepage": "https://symfony.com", 1362 | "time": "2017-03-20 09:45:15" 1363 | }, 1364 | { 1365 | "name": "tivie/htaccess-parser", 1366 | "version": "0.2.2", 1367 | "source": { 1368 | "type": "git", 1369 | "url": "https://github.com/tivie/php-htaccess-parser.git", 1370 | "reference": "d12e9f6945a6aa79c0c1fd55c77010e798e6ce28" 1371 | }, 1372 | "dist": { 1373 | "type": "zip", 1374 | "url": "https://api.github.com/repos/tivie/php-htaccess-parser/zipball/d12e9f6945a6aa79c0c1fd55c77010e798e6ce28", 1375 | "reference": "d12e9f6945a6aa79c0c1fd55c77010e798e6ce28", 1376 | "shasum": "" 1377 | }, 1378 | "require": { 1379 | "php": ">=5.4.0" 1380 | }, 1381 | "require-dev": { 1382 | "phpdocumentor/phpdocumentor": "2.8.1", 1383 | "phpunit/phpunit": "4.3.*" 1384 | }, 1385 | "type": "library", 1386 | "autoload": { 1387 | "psr-4": { 1388 | "Tivie\\HtaccessParser\\": "src/" 1389 | } 1390 | }, 1391 | "notification-url": "https://packagist.org/downloads/", 1392 | "license": [ 1393 | "Apache-2.0" 1394 | ], 1395 | "authors": [ 1396 | { 1397 | "name": "Estevão Soares dos Santos", 1398 | "email": "estevao@soares-dos-santos.com" 1399 | } 1400 | ], 1401 | "description": "A .htaccess parser and validator implemented in PHP", 1402 | "homepage": "https://github.com/tivie/php-htaccess-parser", 1403 | "keywords": [ 1404 | ".htaccess", 1405 | "htaccess" 1406 | ], 1407 | "time": "2015-02-04 18:36:08" 1408 | }, 1409 | { 1410 | "name": "twig/twig", 1411 | "version": "v1.33.2", 1412 | "source": { 1413 | "type": "git", 1414 | "url": "https://github.com/twigphp/Twig.git", 1415 | "reference": "dd6ca96227917e1e85b41c7c3cc6507b411e0927" 1416 | }, 1417 | "dist": { 1418 | "type": "zip", 1419 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/dd6ca96227917e1e85b41c7c3cc6507b411e0927", 1420 | "reference": "dd6ca96227917e1e85b41c7c3cc6507b411e0927", 1421 | "shasum": "" 1422 | }, 1423 | "require": { 1424 | "php": ">=5.2.7" 1425 | }, 1426 | "require-dev": { 1427 | "psr/container": "^1.0", 1428 | "symfony/debug": "~2.7", 1429 | "symfony/phpunit-bridge": "~3.3@dev" 1430 | }, 1431 | "type": "library", 1432 | "extra": { 1433 | "branch-alias": { 1434 | "dev-master": "1.33-dev" 1435 | } 1436 | }, 1437 | "autoload": { 1438 | "psr-0": { 1439 | "Twig_": "lib/" 1440 | } 1441 | }, 1442 | "notification-url": "https://packagist.org/downloads/", 1443 | "license": [ 1444 | "BSD-3-Clause" 1445 | ], 1446 | "authors": [ 1447 | { 1448 | "name": "Fabien Potencier", 1449 | "email": "fabien@symfony.com", 1450 | "homepage": "http://fabien.potencier.org", 1451 | "role": "Lead Developer" 1452 | }, 1453 | { 1454 | "name": "Armin Ronacher", 1455 | "email": "armin.ronacher@active-4.com", 1456 | "role": "Project Founder" 1457 | }, 1458 | { 1459 | "name": "Twig Team", 1460 | "homepage": "http://twig.sensiolabs.org/contributors", 1461 | "role": "Contributors" 1462 | } 1463 | ], 1464 | "description": "Twig, the flexible, fast, and secure template language for PHP", 1465 | "homepage": "http://twig.sensiolabs.org", 1466 | "keywords": [ 1467 | "templating" 1468 | ], 1469 | "time": "2017-04-20 17:39:48" 1470 | } 1471 | ], 1472 | "packages-dev": [ 1473 | { 1474 | "name": "doctrine/instantiator", 1475 | "version": "1.0.5", 1476 | "source": { 1477 | "type": "git", 1478 | "url": "https://github.com/doctrine/instantiator.git", 1479 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 1480 | }, 1481 | "dist": { 1482 | "type": "zip", 1483 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 1484 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 1485 | "shasum": "" 1486 | }, 1487 | "require": { 1488 | "php": ">=5.3,<8.0-DEV" 1489 | }, 1490 | "require-dev": { 1491 | "athletic/athletic": "~0.1.8", 1492 | "ext-pdo": "*", 1493 | "ext-phar": "*", 1494 | "phpunit/phpunit": "~4.0", 1495 | "squizlabs/php_codesniffer": "~2.0" 1496 | }, 1497 | "type": "library", 1498 | "extra": { 1499 | "branch-alias": { 1500 | "dev-master": "1.0.x-dev" 1501 | } 1502 | }, 1503 | "autoload": { 1504 | "psr-4": { 1505 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 1506 | } 1507 | }, 1508 | "notification-url": "https://packagist.org/downloads/", 1509 | "license": [ 1510 | "MIT" 1511 | ], 1512 | "authors": [ 1513 | { 1514 | "name": "Marco Pivetta", 1515 | "email": "ocramius@gmail.com", 1516 | "homepage": "http://ocramius.github.com/" 1517 | } 1518 | ], 1519 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1520 | "homepage": "https://github.com/doctrine/instantiator", 1521 | "keywords": [ 1522 | "constructor", 1523 | "instantiate" 1524 | ], 1525 | "time": "2015-06-14 21:17:01" 1526 | }, 1527 | { 1528 | "name": "larapack/dd", 1529 | "version": "1.1", 1530 | "source": { 1531 | "type": "git", 1532 | "url": "https://github.com/larapack/dd.git", 1533 | "reference": "561b5111a13d0094b59b5c81b1572489485fb948" 1534 | }, 1535 | "dist": { 1536 | "type": "zip", 1537 | "url": "https://api.github.com/repos/larapack/dd/zipball/561b5111a13d0094b59b5c81b1572489485fb948", 1538 | "reference": "561b5111a13d0094b59b5c81b1572489485fb948", 1539 | "shasum": "" 1540 | }, 1541 | "require": { 1542 | "symfony/var-dumper": "*" 1543 | }, 1544 | "type": "package", 1545 | "autoload": { 1546 | "files": [ 1547 | "src/helper.php" 1548 | ] 1549 | }, 1550 | "notification-url": "https://packagist.org/downloads/", 1551 | "license": [ 1552 | "MIT" 1553 | ], 1554 | "authors": [ 1555 | { 1556 | "name": "Mark Topper", 1557 | "email": "hi@webman.io" 1558 | } 1559 | ], 1560 | "description": "`dd` is a helper method in Laravel. This package will add the `dd` to your application.", 1561 | "time": "2016-12-15 09:34:34" 1562 | }, 1563 | { 1564 | "name": "myclabs/deep-copy", 1565 | "version": "1.6.1", 1566 | "source": { 1567 | "type": "git", 1568 | "url": "https://github.com/myclabs/DeepCopy.git", 1569 | "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" 1570 | }, 1571 | "dist": { 1572 | "type": "zip", 1573 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", 1574 | "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", 1575 | "shasum": "" 1576 | }, 1577 | "require": { 1578 | "php": ">=5.4.0" 1579 | }, 1580 | "require-dev": { 1581 | "doctrine/collections": "1.*", 1582 | "phpunit/phpunit": "~4.1" 1583 | }, 1584 | "type": "library", 1585 | "autoload": { 1586 | "psr-4": { 1587 | "DeepCopy\\": "src/DeepCopy/" 1588 | } 1589 | }, 1590 | "notification-url": "https://packagist.org/downloads/", 1591 | "license": [ 1592 | "MIT" 1593 | ], 1594 | "description": "Create deep copies (clones) of your objects", 1595 | "homepage": "https://github.com/myclabs/DeepCopy", 1596 | "keywords": [ 1597 | "clone", 1598 | "copy", 1599 | "duplicate", 1600 | "object", 1601 | "object graph" 1602 | ], 1603 | "time": "2017-04-12 18:52:22" 1604 | }, 1605 | { 1606 | "name": "phar-io/manifest", 1607 | "version": "1.0.1", 1608 | "source": { 1609 | "type": "git", 1610 | "url": "https://github.com/phar-io/manifest.git", 1611 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" 1612 | }, 1613 | "dist": { 1614 | "type": "zip", 1615 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", 1616 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", 1617 | "shasum": "" 1618 | }, 1619 | "require": { 1620 | "ext-dom": "*", 1621 | "ext-phar": "*", 1622 | "phar-io/version": "^1.0.1", 1623 | "php": "^5.6 || ^7.0" 1624 | }, 1625 | "type": "library", 1626 | "extra": { 1627 | "branch-alias": { 1628 | "dev-master": "1.0.x-dev" 1629 | } 1630 | }, 1631 | "autoload": { 1632 | "classmap": [ 1633 | "src/" 1634 | ] 1635 | }, 1636 | "notification-url": "https://packagist.org/downloads/", 1637 | "license": [ 1638 | "BSD-3-Clause" 1639 | ], 1640 | "authors": [ 1641 | { 1642 | "name": "Arne Blankerts", 1643 | "email": "arne@blankerts.de", 1644 | "role": "Developer" 1645 | }, 1646 | { 1647 | "name": "Sebastian Heuer", 1648 | "email": "sebastian@phpeople.de", 1649 | "role": "Developer" 1650 | }, 1651 | { 1652 | "name": "Sebastian Bergmann", 1653 | "email": "sebastian@phpunit.de", 1654 | "role": "Developer" 1655 | } 1656 | ], 1657 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1658 | "time": "2017-03-05 18:14:27" 1659 | }, 1660 | { 1661 | "name": "phar-io/version", 1662 | "version": "1.0.1", 1663 | "source": { 1664 | "type": "git", 1665 | "url": "https://github.com/phar-io/version.git", 1666 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 1667 | }, 1668 | "dist": { 1669 | "type": "zip", 1670 | "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", 1671 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 1672 | "shasum": "" 1673 | }, 1674 | "require": { 1675 | "php": "^5.6 || ^7.0" 1676 | }, 1677 | "type": "library", 1678 | "autoload": { 1679 | "classmap": [ 1680 | "src/" 1681 | ] 1682 | }, 1683 | "notification-url": "https://packagist.org/downloads/", 1684 | "license": [ 1685 | "BSD-3-Clause" 1686 | ], 1687 | "authors": [ 1688 | { 1689 | "name": "Arne Blankerts", 1690 | "email": "arne@blankerts.de", 1691 | "role": "Developer" 1692 | }, 1693 | { 1694 | "name": "Sebastian Heuer", 1695 | "email": "sebastian@phpeople.de", 1696 | "role": "Developer" 1697 | }, 1698 | { 1699 | "name": "Sebastian Bergmann", 1700 | "email": "sebastian@phpunit.de", 1701 | "role": "Developer" 1702 | } 1703 | ], 1704 | "description": "Library for handling version information and constraints", 1705 | "time": "2017-03-05 17:38:23" 1706 | }, 1707 | { 1708 | "name": "phpdocumentor/reflection-common", 1709 | "version": "1.0", 1710 | "source": { 1711 | "type": "git", 1712 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1713 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" 1714 | }, 1715 | "dist": { 1716 | "type": "zip", 1717 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 1718 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 1719 | "shasum": "" 1720 | }, 1721 | "require": { 1722 | "php": ">=5.5" 1723 | }, 1724 | "require-dev": { 1725 | "phpunit/phpunit": "^4.6" 1726 | }, 1727 | "type": "library", 1728 | "extra": { 1729 | "branch-alias": { 1730 | "dev-master": "1.0.x-dev" 1731 | } 1732 | }, 1733 | "autoload": { 1734 | "psr-4": { 1735 | "phpDocumentor\\Reflection\\": [ 1736 | "src" 1737 | ] 1738 | } 1739 | }, 1740 | "notification-url": "https://packagist.org/downloads/", 1741 | "license": [ 1742 | "MIT" 1743 | ], 1744 | "authors": [ 1745 | { 1746 | "name": "Jaap van Otterdijk", 1747 | "email": "opensource@ijaap.nl" 1748 | } 1749 | ], 1750 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1751 | "homepage": "http://www.phpdoc.org", 1752 | "keywords": [ 1753 | "FQSEN", 1754 | "phpDocumentor", 1755 | "phpdoc", 1756 | "reflection", 1757 | "static analysis" 1758 | ], 1759 | "time": "2015-12-27 11:43:31" 1760 | }, 1761 | { 1762 | "name": "phpdocumentor/reflection-docblock", 1763 | "version": "3.1.1", 1764 | "source": { 1765 | "type": "git", 1766 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1767 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" 1768 | }, 1769 | "dist": { 1770 | "type": "zip", 1771 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", 1772 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", 1773 | "shasum": "" 1774 | }, 1775 | "require": { 1776 | "php": ">=5.5", 1777 | "phpdocumentor/reflection-common": "^1.0@dev", 1778 | "phpdocumentor/type-resolver": "^0.2.0", 1779 | "webmozart/assert": "^1.0" 1780 | }, 1781 | "require-dev": { 1782 | "mockery/mockery": "^0.9.4", 1783 | "phpunit/phpunit": "^4.4" 1784 | }, 1785 | "type": "library", 1786 | "autoload": { 1787 | "psr-4": { 1788 | "phpDocumentor\\Reflection\\": [ 1789 | "src/" 1790 | ] 1791 | } 1792 | }, 1793 | "notification-url": "https://packagist.org/downloads/", 1794 | "license": [ 1795 | "MIT" 1796 | ], 1797 | "authors": [ 1798 | { 1799 | "name": "Mike van Riel", 1800 | "email": "me@mikevanriel.com" 1801 | } 1802 | ], 1803 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1804 | "time": "2016-09-30 07:12:33" 1805 | }, 1806 | { 1807 | "name": "phpdocumentor/type-resolver", 1808 | "version": "0.2.1", 1809 | "source": { 1810 | "type": "git", 1811 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1812 | "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" 1813 | }, 1814 | "dist": { 1815 | "type": "zip", 1816 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", 1817 | "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", 1818 | "shasum": "" 1819 | }, 1820 | "require": { 1821 | "php": ">=5.5", 1822 | "phpdocumentor/reflection-common": "^1.0" 1823 | }, 1824 | "require-dev": { 1825 | "mockery/mockery": "^0.9.4", 1826 | "phpunit/phpunit": "^5.2||^4.8.24" 1827 | }, 1828 | "type": "library", 1829 | "extra": { 1830 | "branch-alias": { 1831 | "dev-master": "1.0.x-dev" 1832 | } 1833 | }, 1834 | "autoload": { 1835 | "psr-4": { 1836 | "phpDocumentor\\Reflection\\": [ 1837 | "src/" 1838 | ] 1839 | } 1840 | }, 1841 | "notification-url": "https://packagist.org/downloads/", 1842 | "license": [ 1843 | "MIT" 1844 | ], 1845 | "authors": [ 1846 | { 1847 | "name": "Mike van Riel", 1848 | "email": "me@mikevanriel.com" 1849 | } 1850 | ], 1851 | "time": "2016-11-25 06:54:22" 1852 | }, 1853 | { 1854 | "name": "phpspec/prophecy", 1855 | "version": "v1.7.0", 1856 | "source": { 1857 | "type": "git", 1858 | "url": "https://github.com/phpspec/prophecy.git", 1859 | "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" 1860 | }, 1861 | "dist": { 1862 | "type": "zip", 1863 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", 1864 | "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", 1865 | "shasum": "" 1866 | }, 1867 | "require": { 1868 | "doctrine/instantiator": "^1.0.2", 1869 | "php": "^5.3|^7.0", 1870 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", 1871 | "sebastian/comparator": "^1.1|^2.0", 1872 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1873 | }, 1874 | "require-dev": { 1875 | "phpspec/phpspec": "^2.5|^3.2", 1876 | "phpunit/phpunit": "^4.8 || ^5.6.5" 1877 | }, 1878 | "type": "library", 1879 | "extra": { 1880 | "branch-alias": { 1881 | "dev-master": "1.6.x-dev" 1882 | } 1883 | }, 1884 | "autoload": { 1885 | "psr-0": { 1886 | "Prophecy\\": "src/" 1887 | } 1888 | }, 1889 | "notification-url": "https://packagist.org/downloads/", 1890 | "license": [ 1891 | "MIT" 1892 | ], 1893 | "authors": [ 1894 | { 1895 | "name": "Konstantin Kudryashov", 1896 | "email": "ever.zet@gmail.com", 1897 | "homepage": "http://everzet.com" 1898 | }, 1899 | { 1900 | "name": "Marcello Duarte", 1901 | "email": "marcello.duarte@gmail.com" 1902 | } 1903 | ], 1904 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1905 | "homepage": "https://github.com/phpspec/prophecy", 1906 | "keywords": [ 1907 | "Double", 1908 | "Dummy", 1909 | "fake", 1910 | "mock", 1911 | "spy", 1912 | "stub" 1913 | ], 1914 | "time": "2017-03-02 20:05:34" 1915 | }, 1916 | { 1917 | "name": "phpunit/php-code-coverage", 1918 | "version": "5.2.1", 1919 | "source": { 1920 | "type": "git", 1921 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1922 | "reference": "dc421f9ca5082a0c0cb04afb171c765f79add85b" 1923 | }, 1924 | "dist": { 1925 | "type": "zip", 1926 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/dc421f9ca5082a0c0cb04afb171c765f79add85b", 1927 | "reference": "dc421f9ca5082a0c0cb04afb171c765f79add85b", 1928 | "shasum": "" 1929 | }, 1930 | "require": { 1931 | "ext-dom": "*", 1932 | "ext-xmlwriter": "*", 1933 | "php": "^7.0", 1934 | "phpunit/php-file-iterator": "^1.3", 1935 | "phpunit/php-text-template": "^1.2", 1936 | "phpunit/php-token-stream": "^1.4.11 || ^2.0", 1937 | "sebastian/code-unit-reverse-lookup": "^1.0", 1938 | "sebastian/environment": "^3.0", 1939 | "sebastian/version": "^2.0", 1940 | "theseer/tokenizer": "^1.1" 1941 | }, 1942 | "require-dev": { 1943 | "ext-xdebug": "^2.5", 1944 | "phpunit/phpunit": "^6.0" 1945 | }, 1946 | "suggest": { 1947 | "ext-xdebug": "^2.5.3" 1948 | }, 1949 | "type": "library", 1950 | "extra": { 1951 | "branch-alias": { 1952 | "dev-master": "5.2.x-dev" 1953 | } 1954 | }, 1955 | "autoload": { 1956 | "classmap": [ 1957 | "src/" 1958 | ] 1959 | }, 1960 | "notification-url": "https://packagist.org/downloads/", 1961 | "license": [ 1962 | "BSD-3-Clause" 1963 | ], 1964 | "authors": [ 1965 | { 1966 | "name": "Sebastian Bergmann", 1967 | "email": "sb@sebastian-bergmann.de", 1968 | "role": "lead" 1969 | } 1970 | ], 1971 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1972 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1973 | "keywords": [ 1974 | "coverage", 1975 | "testing", 1976 | "xunit" 1977 | ], 1978 | "time": "2017-04-21 08:03:57" 1979 | }, 1980 | { 1981 | "name": "phpunit/php-file-iterator", 1982 | "version": "1.4.2", 1983 | "source": { 1984 | "type": "git", 1985 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1986 | "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" 1987 | }, 1988 | "dist": { 1989 | "type": "zip", 1990 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", 1991 | "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", 1992 | "shasum": "" 1993 | }, 1994 | "require": { 1995 | "php": ">=5.3.3" 1996 | }, 1997 | "type": "library", 1998 | "extra": { 1999 | "branch-alias": { 2000 | "dev-master": "1.4.x-dev" 2001 | } 2002 | }, 2003 | "autoload": { 2004 | "classmap": [ 2005 | "src/" 2006 | ] 2007 | }, 2008 | "notification-url": "https://packagist.org/downloads/", 2009 | "license": [ 2010 | "BSD-3-Clause" 2011 | ], 2012 | "authors": [ 2013 | { 2014 | "name": "Sebastian Bergmann", 2015 | "email": "sb@sebastian-bergmann.de", 2016 | "role": "lead" 2017 | } 2018 | ], 2019 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 2020 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 2021 | "keywords": [ 2022 | "filesystem", 2023 | "iterator" 2024 | ], 2025 | "time": "2016-10-03 07:40:28" 2026 | }, 2027 | { 2028 | "name": "phpunit/php-text-template", 2029 | "version": "1.2.1", 2030 | "source": { 2031 | "type": "git", 2032 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2033 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 2034 | }, 2035 | "dist": { 2036 | "type": "zip", 2037 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2038 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2039 | "shasum": "" 2040 | }, 2041 | "require": { 2042 | "php": ">=5.3.3" 2043 | }, 2044 | "type": "library", 2045 | "autoload": { 2046 | "classmap": [ 2047 | "src/" 2048 | ] 2049 | }, 2050 | "notification-url": "https://packagist.org/downloads/", 2051 | "license": [ 2052 | "BSD-3-Clause" 2053 | ], 2054 | "authors": [ 2055 | { 2056 | "name": "Sebastian Bergmann", 2057 | "email": "sebastian@phpunit.de", 2058 | "role": "lead" 2059 | } 2060 | ], 2061 | "description": "Simple template engine.", 2062 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2063 | "keywords": [ 2064 | "template" 2065 | ], 2066 | "time": "2015-06-21 13:50:34" 2067 | }, 2068 | { 2069 | "name": "phpunit/php-timer", 2070 | "version": "1.0.9", 2071 | "source": { 2072 | "type": "git", 2073 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2074 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 2075 | }, 2076 | "dist": { 2077 | "type": "zip", 2078 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 2079 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 2080 | "shasum": "" 2081 | }, 2082 | "require": { 2083 | "php": "^5.3.3 || ^7.0" 2084 | }, 2085 | "require-dev": { 2086 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 2087 | }, 2088 | "type": "library", 2089 | "extra": { 2090 | "branch-alias": { 2091 | "dev-master": "1.0-dev" 2092 | } 2093 | }, 2094 | "autoload": { 2095 | "classmap": [ 2096 | "src/" 2097 | ] 2098 | }, 2099 | "notification-url": "https://packagist.org/downloads/", 2100 | "license": [ 2101 | "BSD-3-Clause" 2102 | ], 2103 | "authors": [ 2104 | { 2105 | "name": "Sebastian Bergmann", 2106 | "email": "sb@sebastian-bergmann.de", 2107 | "role": "lead" 2108 | } 2109 | ], 2110 | "description": "Utility class for timing", 2111 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2112 | "keywords": [ 2113 | "timer" 2114 | ], 2115 | "time": "2017-02-26 11:10:40" 2116 | }, 2117 | { 2118 | "name": "phpunit/php-token-stream", 2119 | "version": "1.4.11", 2120 | "source": { 2121 | "type": "git", 2122 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 2123 | "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" 2124 | }, 2125 | "dist": { 2126 | "type": "zip", 2127 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", 2128 | "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", 2129 | "shasum": "" 2130 | }, 2131 | "require": { 2132 | "ext-tokenizer": "*", 2133 | "php": ">=5.3.3" 2134 | }, 2135 | "require-dev": { 2136 | "phpunit/phpunit": "~4.2" 2137 | }, 2138 | "type": "library", 2139 | "extra": { 2140 | "branch-alias": { 2141 | "dev-master": "1.4-dev" 2142 | } 2143 | }, 2144 | "autoload": { 2145 | "classmap": [ 2146 | "src/" 2147 | ] 2148 | }, 2149 | "notification-url": "https://packagist.org/downloads/", 2150 | "license": [ 2151 | "BSD-3-Clause" 2152 | ], 2153 | "authors": [ 2154 | { 2155 | "name": "Sebastian Bergmann", 2156 | "email": "sebastian@phpunit.de" 2157 | } 2158 | ], 2159 | "description": "Wrapper around PHP's tokenizer extension.", 2160 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 2161 | "keywords": [ 2162 | "tokenizer" 2163 | ], 2164 | "time": "2017-02-27 10:12:30" 2165 | }, 2166 | { 2167 | "name": "phpunit/phpunit", 2168 | "version": "6.1.2", 2169 | "source": { 2170 | "type": "git", 2171 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2172 | "reference": "fbf2e46d5c563ee78c9b559bcbeb1c97cad6af0f" 2173 | }, 2174 | "dist": { 2175 | "type": "zip", 2176 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fbf2e46d5c563ee78c9b559bcbeb1c97cad6af0f", 2177 | "reference": "fbf2e46d5c563ee78c9b559bcbeb1c97cad6af0f", 2178 | "shasum": "" 2179 | }, 2180 | "require": { 2181 | "ext-dom": "*", 2182 | "ext-json": "*", 2183 | "ext-libxml": "*", 2184 | "ext-mbstring": "*", 2185 | "ext-xml": "*", 2186 | "myclabs/deep-copy": "^1.3", 2187 | "phar-io/manifest": "^1.0.1", 2188 | "phar-io/version": "^1.0", 2189 | "php": "^7.0", 2190 | "phpspec/prophecy": "^1.7", 2191 | "phpunit/php-code-coverage": "^5.2", 2192 | "phpunit/php-file-iterator": "^1.4", 2193 | "phpunit/php-text-template": "^1.2", 2194 | "phpunit/php-timer": "^1.0.6", 2195 | "phpunit/phpunit-mock-objects": "^4.0", 2196 | "sebastian/comparator": "^2.0", 2197 | "sebastian/diff": "^1.2", 2198 | "sebastian/environment": "^3.0.1", 2199 | "sebastian/exporter": "^3.1", 2200 | "sebastian/global-state": "^1.1 || ^2.0", 2201 | "sebastian/object-enumerator": "^3.0.2", 2202 | "sebastian/resource-operations": "^1.0", 2203 | "sebastian/version": "^2.0" 2204 | }, 2205 | "conflict": { 2206 | "phpdocumentor/reflection-docblock": "3.0.2", 2207 | "phpunit/dbunit": "<3.0" 2208 | }, 2209 | "require-dev": { 2210 | "ext-pdo": "*" 2211 | }, 2212 | "suggest": { 2213 | "ext-xdebug": "*", 2214 | "phpunit/php-invoker": "^1.1" 2215 | }, 2216 | "bin": [ 2217 | "phpunit" 2218 | ], 2219 | "type": "library", 2220 | "extra": { 2221 | "branch-alias": { 2222 | "dev-master": "6.1.x-dev" 2223 | } 2224 | }, 2225 | "autoload": { 2226 | "classmap": [ 2227 | "src/" 2228 | ] 2229 | }, 2230 | "notification-url": "https://packagist.org/downloads/", 2231 | "license": [ 2232 | "BSD-3-Clause" 2233 | ], 2234 | "authors": [ 2235 | { 2236 | "name": "Sebastian Bergmann", 2237 | "email": "sebastian@phpunit.de", 2238 | "role": "lead" 2239 | } 2240 | ], 2241 | "description": "The PHP Unit Testing framework.", 2242 | "homepage": "https://phpunit.de/", 2243 | "keywords": [ 2244 | "phpunit", 2245 | "testing", 2246 | "xunit" 2247 | ], 2248 | "time": "2017-04-25 21:30:13" 2249 | }, 2250 | { 2251 | "name": "phpunit/phpunit-mock-objects", 2252 | "version": "4.0.1", 2253 | "source": { 2254 | "type": "git", 2255 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 2256 | "reference": "eabce450df194817a7d7e27e19013569a903a2bf" 2257 | }, 2258 | "dist": { 2259 | "type": "zip", 2260 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/eabce450df194817a7d7e27e19013569a903a2bf", 2261 | "reference": "eabce450df194817a7d7e27e19013569a903a2bf", 2262 | "shasum": "" 2263 | }, 2264 | "require": { 2265 | "doctrine/instantiator": "^1.0.2", 2266 | "php": "^7.0", 2267 | "phpunit/php-text-template": "^1.2", 2268 | "sebastian/exporter": "^3.0" 2269 | }, 2270 | "conflict": { 2271 | "phpunit/phpunit": "<6.0" 2272 | }, 2273 | "require-dev": { 2274 | "phpunit/phpunit": "^6.0" 2275 | }, 2276 | "suggest": { 2277 | "ext-soap": "*" 2278 | }, 2279 | "type": "library", 2280 | "extra": { 2281 | "branch-alias": { 2282 | "dev-master": "4.0.x-dev" 2283 | } 2284 | }, 2285 | "autoload": { 2286 | "classmap": [ 2287 | "src/" 2288 | ] 2289 | }, 2290 | "notification-url": "https://packagist.org/downloads/", 2291 | "license": [ 2292 | "BSD-3-Clause" 2293 | ], 2294 | "authors": [ 2295 | { 2296 | "name": "Sebastian Bergmann", 2297 | "email": "sb@sebastian-bergmann.de", 2298 | "role": "lead" 2299 | } 2300 | ], 2301 | "description": "Mock Object library for PHPUnit", 2302 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 2303 | "keywords": [ 2304 | "mock", 2305 | "xunit" 2306 | ], 2307 | "time": "2017-03-03 06:30:20" 2308 | }, 2309 | { 2310 | "name": "sebastian/code-unit-reverse-lookup", 2311 | "version": "1.0.1", 2312 | "source": { 2313 | "type": "git", 2314 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2315 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 2316 | }, 2317 | "dist": { 2318 | "type": "zip", 2319 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2320 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2321 | "shasum": "" 2322 | }, 2323 | "require": { 2324 | "php": "^5.6 || ^7.0" 2325 | }, 2326 | "require-dev": { 2327 | "phpunit/phpunit": "^5.7 || ^6.0" 2328 | }, 2329 | "type": "library", 2330 | "extra": { 2331 | "branch-alias": { 2332 | "dev-master": "1.0.x-dev" 2333 | } 2334 | }, 2335 | "autoload": { 2336 | "classmap": [ 2337 | "src/" 2338 | ] 2339 | }, 2340 | "notification-url": "https://packagist.org/downloads/", 2341 | "license": [ 2342 | "BSD-3-Clause" 2343 | ], 2344 | "authors": [ 2345 | { 2346 | "name": "Sebastian Bergmann", 2347 | "email": "sebastian@phpunit.de" 2348 | } 2349 | ], 2350 | "description": "Looks up which function or method a line of code belongs to", 2351 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2352 | "time": "2017-03-04 06:30:41" 2353 | }, 2354 | { 2355 | "name": "sebastian/comparator", 2356 | "version": "2.0.0", 2357 | "source": { 2358 | "type": "git", 2359 | "url": "https://github.com/sebastianbergmann/comparator.git", 2360 | "reference": "20f84f468cb67efee293246e6a09619b891f55f0" 2361 | }, 2362 | "dist": { 2363 | "type": "zip", 2364 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/20f84f468cb67efee293246e6a09619b891f55f0", 2365 | "reference": "20f84f468cb67efee293246e6a09619b891f55f0", 2366 | "shasum": "" 2367 | }, 2368 | "require": { 2369 | "php": "^7.0", 2370 | "sebastian/diff": "^1.2", 2371 | "sebastian/exporter": "^3.0" 2372 | }, 2373 | "require-dev": { 2374 | "phpunit/phpunit": "^6.0" 2375 | }, 2376 | "type": "library", 2377 | "extra": { 2378 | "branch-alias": { 2379 | "dev-master": "2.0.x-dev" 2380 | } 2381 | }, 2382 | "autoload": { 2383 | "classmap": [ 2384 | "src/" 2385 | ] 2386 | }, 2387 | "notification-url": "https://packagist.org/downloads/", 2388 | "license": [ 2389 | "BSD-3-Clause" 2390 | ], 2391 | "authors": [ 2392 | { 2393 | "name": "Jeff Welch", 2394 | "email": "whatthejeff@gmail.com" 2395 | }, 2396 | { 2397 | "name": "Volker Dusch", 2398 | "email": "github@wallbash.com" 2399 | }, 2400 | { 2401 | "name": "Bernhard Schussek", 2402 | "email": "bschussek@2bepublished.at" 2403 | }, 2404 | { 2405 | "name": "Sebastian Bergmann", 2406 | "email": "sebastian@phpunit.de" 2407 | } 2408 | ], 2409 | "description": "Provides the functionality to compare PHP values for equality", 2410 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 2411 | "keywords": [ 2412 | "comparator", 2413 | "compare", 2414 | "equality" 2415 | ], 2416 | "time": "2017-03-03 06:26:08" 2417 | }, 2418 | { 2419 | "name": "sebastian/diff", 2420 | "version": "1.4.1", 2421 | "source": { 2422 | "type": "git", 2423 | "url": "https://github.com/sebastianbergmann/diff.git", 2424 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 2425 | }, 2426 | "dist": { 2427 | "type": "zip", 2428 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 2429 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 2430 | "shasum": "" 2431 | }, 2432 | "require": { 2433 | "php": ">=5.3.3" 2434 | }, 2435 | "require-dev": { 2436 | "phpunit/phpunit": "~4.8" 2437 | }, 2438 | "type": "library", 2439 | "extra": { 2440 | "branch-alias": { 2441 | "dev-master": "1.4-dev" 2442 | } 2443 | }, 2444 | "autoload": { 2445 | "classmap": [ 2446 | "src/" 2447 | ] 2448 | }, 2449 | "notification-url": "https://packagist.org/downloads/", 2450 | "license": [ 2451 | "BSD-3-Clause" 2452 | ], 2453 | "authors": [ 2454 | { 2455 | "name": "Kore Nordmann", 2456 | "email": "mail@kore-nordmann.de" 2457 | }, 2458 | { 2459 | "name": "Sebastian Bergmann", 2460 | "email": "sebastian@phpunit.de" 2461 | } 2462 | ], 2463 | "description": "Diff implementation", 2464 | "homepage": "https://github.com/sebastianbergmann/diff", 2465 | "keywords": [ 2466 | "diff" 2467 | ], 2468 | "time": "2015-12-08 07:14:41" 2469 | }, 2470 | { 2471 | "name": "sebastian/environment", 2472 | "version": "3.0.2", 2473 | "source": { 2474 | "type": "git", 2475 | "url": "https://github.com/sebastianbergmann/environment.git", 2476 | "reference": "11e7710b7724d42c62249b0e9d3030240398949d" 2477 | }, 2478 | "dist": { 2479 | "type": "zip", 2480 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/11e7710b7724d42c62249b0e9d3030240398949d", 2481 | "reference": "11e7710b7724d42c62249b0e9d3030240398949d", 2482 | "shasum": "" 2483 | }, 2484 | "require": { 2485 | "php": "^7.0" 2486 | }, 2487 | "require-dev": { 2488 | "phpunit/phpunit": "^6.1" 2489 | }, 2490 | "type": "library", 2491 | "extra": { 2492 | "branch-alias": { 2493 | "dev-master": "3.0.x-dev" 2494 | } 2495 | }, 2496 | "autoload": { 2497 | "classmap": [ 2498 | "src/" 2499 | ] 2500 | }, 2501 | "notification-url": "https://packagist.org/downloads/", 2502 | "license": [ 2503 | "BSD-3-Clause" 2504 | ], 2505 | "authors": [ 2506 | { 2507 | "name": "Sebastian Bergmann", 2508 | "email": "sebastian@phpunit.de" 2509 | } 2510 | ], 2511 | "description": "Provides functionality to handle HHVM/PHP environments", 2512 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2513 | "keywords": [ 2514 | "Xdebug", 2515 | "environment", 2516 | "hhvm" 2517 | ], 2518 | "time": "2017-04-21 14:40:32" 2519 | }, 2520 | { 2521 | "name": "sebastian/exporter", 2522 | "version": "3.1.0", 2523 | "source": { 2524 | "type": "git", 2525 | "url": "https://github.com/sebastianbergmann/exporter.git", 2526 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 2527 | }, 2528 | "dist": { 2529 | "type": "zip", 2530 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 2531 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 2532 | "shasum": "" 2533 | }, 2534 | "require": { 2535 | "php": "^7.0", 2536 | "sebastian/recursion-context": "^3.0" 2537 | }, 2538 | "require-dev": { 2539 | "ext-mbstring": "*", 2540 | "phpunit/phpunit": "^6.0" 2541 | }, 2542 | "type": "library", 2543 | "extra": { 2544 | "branch-alias": { 2545 | "dev-master": "3.1.x-dev" 2546 | } 2547 | }, 2548 | "autoload": { 2549 | "classmap": [ 2550 | "src/" 2551 | ] 2552 | }, 2553 | "notification-url": "https://packagist.org/downloads/", 2554 | "license": [ 2555 | "BSD-3-Clause" 2556 | ], 2557 | "authors": [ 2558 | { 2559 | "name": "Jeff Welch", 2560 | "email": "whatthejeff@gmail.com" 2561 | }, 2562 | { 2563 | "name": "Volker Dusch", 2564 | "email": "github@wallbash.com" 2565 | }, 2566 | { 2567 | "name": "Bernhard Schussek", 2568 | "email": "bschussek@2bepublished.at" 2569 | }, 2570 | { 2571 | "name": "Sebastian Bergmann", 2572 | "email": "sebastian@phpunit.de" 2573 | }, 2574 | { 2575 | "name": "Adam Harvey", 2576 | "email": "aharvey@php.net" 2577 | } 2578 | ], 2579 | "description": "Provides the functionality to export PHP variables for visualization", 2580 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2581 | "keywords": [ 2582 | "export", 2583 | "exporter" 2584 | ], 2585 | "time": "2017-04-03 13:19:02" 2586 | }, 2587 | { 2588 | "name": "sebastian/global-state", 2589 | "version": "2.0.0", 2590 | "source": { 2591 | "type": "git", 2592 | "url": "https://github.com/sebastianbergmann/global-state.git", 2593 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 2594 | }, 2595 | "dist": { 2596 | "type": "zip", 2597 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2598 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2599 | "shasum": "" 2600 | }, 2601 | "require": { 2602 | "php": "^7.0" 2603 | }, 2604 | "require-dev": { 2605 | "phpunit/phpunit": "^6.0" 2606 | }, 2607 | "suggest": { 2608 | "ext-uopz": "*" 2609 | }, 2610 | "type": "library", 2611 | "extra": { 2612 | "branch-alias": { 2613 | "dev-master": "2.0-dev" 2614 | } 2615 | }, 2616 | "autoload": { 2617 | "classmap": [ 2618 | "src/" 2619 | ] 2620 | }, 2621 | "notification-url": "https://packagist.org/downloads/", 2622 | "license": [ 2623 | "BSD-3-Clause" 2624 | ], 2625 | "authors": [ 2626 | { 2627 | "name": "Sebastian Bergmann", 2628 | "email": "sebastian@phpunit.de" 2629 | } 2630 | ], 2631 | "description": "Snapshotting of global state", 2632 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2633 | "keywords": [ 2634 | "global state" 2635 | ], 2636 | "time": "2017-04-27 15:39:26" 2637 | }, 2638 | { 2639 | "name": "sebastian/object-enumerator", 2640 | "version": "3.0.2", 2641 | "source": { 2642 | "type": "git", 2643 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2644 | "reference": "31dd3379d16446c5d86dec32ab1ad1f378581ad8" 2645 | }, 2646 | "dist": { 2647 | "type": "zip", 2648 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/31dd3379d16446c5d86dec32ab1ad1f378581ad8", 2649 | "reference": "31dd3379d16446c5d86dec32ab1ad1f378581ad8", 2650 | "shasum": "" 2651 | }, 2652 | "require": { 2653 | "php": "^7.0", 2654 | "sebastian/object-reflector": "^1.0", 2655 | "sebastian/recursion-context": "^3.0" 2656 | }, 2657 | "require-dev": { 2658 | "phpunit/phpunit": "^6.0" 2659 | }, 2660 | "type": "library", 2661 | "extra": { 2662 | "branch-alias": { 2663 | "dev-master": "3.0.x-dev" 2664 | } 2665 | }, 2666 | "autoload": { 2667 | "classmap": [ 2668 | "src/" 2669 | ] 2670 | }, 2671 | "notification-url": "https://packagist.org/downloads/", 2672 | "license": [ 2673 | "BSD-3-Clause" 2674 | ], 2675 | "authors": [ 2676 | { 2677 | "name": "Sebastian Bergmann", 2678 | "email": "sebastian@phpunit.de" 2679 | } 2680 | ], 2681 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2682 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2683 | "time": "2017-03-12 15:17:29" 2684 | }, 2685 | { 2686 | "name": "sebastian/object-reflector", 2687 | "version": "1.1.1", 2688 | "source": { 2689 | "type": "git", 2690 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2691 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 2692 | }, 2693 | "dist": { 2694 | "type": "zip", 2695 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 2696 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 2697 | "shasum": "" 2698 | }, 2699 | "require": { 2700 | "php": "^7.0" 2701 | }, 2702 | "require-dev": { 2703 | "phpunit/phpunit": "^6.0" 2704 | }, 2705 | "type": "library", 2706 | "extra": { 2707 | "branch-alias": { 2708 | "dev-master": "1.1-dev" 2709 | } 2710 | }, 2711 | "autoload": { 2712 | "classmap": [ 2713 | "src/" 2714 | ] 2715 | }, 2716 | "notification-url": "https://packagist.org/downloads/", 2717 | "license": [ 2718 | "BSD-3-Clause" 2719 | ], 2720 | "authors": [ 2721 | { 2722 | "name": "Sebastian Bergmann", 2723 | "email": "sebastian@phpunit.de" 2724 | } 2725 | ], 2726 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2727 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2728 | "time": "2017-03-29 09:07:27" 2729 | }, 2730 | { 2731 | "name": "sebastian/recursion-context", 2732 | "version": "3.0.0", 2733 | "source": { 2734 | "type": "git", 2735 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2736 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 2737 | }, 2738 | "dist": { 2739 | "type": "zip", 2740 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2741 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2742 | "shasum": "" 2743 | }, 2744 | "require": { 2745 | "php": "^7.0" 2746 | }, 2747 | "require-dev": { 2748 | "phpunit/phpunit": "^6.0" 2749 | }, 2750 | "type": "library", 2751 | "extra": { 2752 | "branch-alias": { 2753 | "dev-master": "3.0.x-dev" 2754 | } 2755 | }, 2756 | "autoload": { 2757 | "classmap": [ 2758 | "src/" 2759 | ] 2760 | }, 2761 | "notification-url": "https://packagist.org/downloads/", 2762 | "license": [ 2763 | "BSD-3-Clause" 2764 | ], 2765 | "authors": [ 2766 | { 2767 | "name": "Jeff Welch", 2768 | "email": "whatthejeff@gmail.com" 2769 | }, 2770 | { 2771 | "name": "Sebastian Bergmann", 2772 | "email": "sebastian@phpunit.de" 2773 | }, 2774 | { 2775 | "name": "Adam Harvey", 2776 | "email": "aharvey@php.net" 2777 | } 2778 | ], 2779 | "description": "Provides functionality to recursively process PHP variables", 2780 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2781 | "time": "2017-03-03 06:23:57" 2782 | }, 2783 | { 2784 | "name": "sebastian/resource-operations", 2785 | "version": "1.0.0", 2786 | "source": { 2787 | "type": "git", 2788 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2789 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 2790 | }, 2791 | "dist": { 2792 | "type": "zip", 2793 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2794 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2795 | "shasum": "" 2796 | }, 2797 | "require": { 2798 | "php": ">=5.6.0" 2799 | }, 2800 | "type": "library", 2801 | "extra": { 2802 | "branch-alias": { 2803 | "dev-master": "1.0.x-dev" 2804 | } 2805 | }, 2806 | "autoload": { 2807 | "classmap": [ 2808 | "src/" 2809 | ] 2810 | }, 2811 | "notification-url": "https://packagist.org/downloads/", 2812 | "license": [ 2813 | "BSD-3-Clause" 2814 | ], 2815 | "authors": [ 2816 | { 2817 | "name": "Sebastian Bergmann", 2818 | "email": "sebastian@phpunit.de" 2819 | } 2820 | ], 2821 | "description": "Provides a list of PHP built-in functions that operate on resources", 2822 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2823 | "time": "2015-07-28 20:34:47" 2824 | }, 2825 | { 2826 | "name": "sebastian/version", 2827 | "version": "2.0.1", 2828 | "source": { 2829 | "type": "git", 2830 | "url": "https://github.com/sebastianbergmann/version.git", 2831 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2832 | }, 2833 | "dist": { 2834 | "type": "zip", 2835 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2836 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2837 | "shasum": "" 2838 | }, 2839 | "require": { 2840 | "php": ">=5.6" 2841 | }, 2842 | "type": "library", 2843 | "extra": { 2844 | "branch-alias": { 2845 | "dev-master": "2.0.x-dev" 2846 | } 2847 | }, 2848 | "autoload": { 2849 | "classmap": [ 2850 | "src/" 2851 | ] 2852 | }, 2853 | "notification-url": "https://packagist.org/downloads/", 2854 | "license": [ 2855 | "BSD-3-Clause" 2856 | ], 2857 | "authors": [ 2858 | { 2859 | "name": "Sebastian Bergmann", 2860 | "email": "sebastian@phpunit.de", 2861 | "role": "lead" 2862 | } 2863 | ], 2864 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2865 | "homepage": "https://github.com/sebastianbergmann/version", 2866 | "time": "2016-10-03 07:35:21" 2867 | }, 2868 | { 2869 | "name": "symfony/var-dumper", 2870 | "version": "v3.2.7", 2871 | "source": { 2872 | "type": "git", 2873 | "url": "https://github.com/symfony/var-dumper.git", 2874 | "reference": "81dce20f69a8b40427e1f4e6462178df87cafc03" 2875 | }, 2876 | "dist": { 2877 | "type": "zip", 2878 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/81dce20f69a8b40427e1f4e6462178df87cafc03", 2879 | "reference": "81dce20f69a8b40427e1f4e6462178df87cafc03", 2880 | "shasum": "" 2881 | }, 2882 | "require": { 2883 | "php": ">=5.5.9", 2884 | "symfony/polyfill-mbstring": "~1.0" 2885 | }, 2886 | "conflict": { 2887 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" 2888 | }, 2889 | "require-dev": { 2890 | "twig/twig": "~1.20|~2.0" 2891 | }, 2892 | "suggest": { 2893 | "ext-symfony_debug": "" 2894 | }, 2895 | "type": "library", 2896 | "extra": { 2897 | "branch-alias": { 2898 | "dev-master": "3.2-dev" 2899 | } 2900 | }, 2901 | "autoload": { 2902 | "files": [ 2903 | "Resources/functions/dump.php" 2904 | ], 2905 | "psr-4": { 2906 | "Symfony\\Component\\VarDumper\\": "" 2907 | }, 2908 | "exclude-from-classmap": [ 2909 | "/Tests/" 2910 | ] 2911 | }, 2912 | "notification-url": "https://packagist.org/downloads/", 2913 | "license": [ 2914 | "MIT" 2915 | ], 2916 | "authors": [ 2917 | { 2918 | "name": "Nicolas Grekas", 2919 | "email": "p@tchwork.com" 2920 | }, 2921 | { 2922 | "name": "Symfony Community", 2923 | "homepage": "https://symfony.com/contributors" 2924 | } 2925 | ], 2926 | "description": "Symfony mechanism for exploring and dumping PHP variables", 2927 | "homepage": "https://symfony.com", 2928 | "keywords": [ 2929 | "debug", 2930 | "dump" 2931 | ], 2932 | "time": "2017-03-12 16:07:05" 2933 | }, 2934 | { 2935 | "name": "theseer/tokenizer", 2936 | "version": "1.1.0", 2937 | "source": { 2938 | "type": "git", 2939 | "url": "https://github.com/theseer/tokenizer.git", 2940 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 2941 | }, 2942 | "dist": { 2943 | "type": "zip", 2944 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 2945 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 2946 | "shasum": "" 2947 | }, 2948 | "require": { 2949 | "ext-dom": "*", 2950 | "ext-tokenizer": "*", 2951 | "ext-xmlwriter": "*", 2952 | "php": "^7.0" 2953 | }, 2954 | "type": "library", 2955 | "autoload": { 2956 | "classmap": [ 2957 | "src/" 2958 | ] 2959 | }, 2960 | "notification-url": "https://packagist.org/downloads/", 2961 | "license": [ 2962 | "BSD-3-Clause" 2963 | ], 2964 | "authors": [ 2965 | { 2966 | "name": "Arne Blankerts", 2967 | "email": "arne@blankerts.de", 2968 | "role": "Developer" 2969 | } 2970 | ], 2971 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2972 | "time": "2017-04-07 12:08:54" 2973 | }, 2974 | { 2975 | "name": "webmozart/assert", 2976 | "version": "1.2.0", 2977 | "source": { 2978 | "type": "git", 2979 | "url": "https://github.com/webmozart/assert.git", 2980 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" 2981 | }, 2982 | "dist": { 2983 | "type": "zip", 2984 | "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", 2985 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", 2986 | "shasum": "" 2987 | }, 2988 | "require": { 2989 | "php": "^5.3.3 || ^7.0" 2990 | }, 2991 | "require-dev": { 2992 | "phpunit/phpunit": "^4.6", 2993 | "sebastian/version": "^1.0.1" 2994 | }, 2995 | "type": "library", 2996 | "extra": { 2997 | "branch-alias": { 2998 | "dev-master": "1.3-dev" 2999 | } 3000 | }, 3001 | "autoload": { 3002 | "psr-4": { 3003 | "Webmozart\\Assert\\": "src/" 3004 | } 3005 | }, 3006 | "notification-url": "https://packagist.org/downloads/", 3007 | "license": [ 3008 | "MIT" 3009 | ], 3010 | "authors": [ 3011 | { 3012 | "name": "Bernhard Schussek", 3013 | "email": "bschussek@gmail.com" 3014 | } 3015 | ], 3016 | "description": "Assertions to validate method input/output with nice error messages.", 3017 | "keywords": [ 3018 | "assert", 3019 | "check", 3020 | "validate" 3021 | ], 3022 | "time": "2016-11-23 20:04:58" 3023 | } 3024 | ], 3025 | "aliases": [], 3026 | "minimum-stability": "stable", 3027 | "stability-flags": { 3028 | "brendt/stitcher": 20 3029 | }, 3030 | "prefer-stable": false, 3031 | "prefer-lowest": false, 3032 | "platform": [], 3033 | "platform-dev": [] 3034 | } 3035 | --------------------------------------------------------------------------------