├── .gitignore ├── tests └── phpunit │ ├── tools │ ├── includable.php │ ├── includable2.php │ ├── wp-admin │ │ └── includes │ │ │ └── plugin.php │ └── WP_Plugins_List_Table.php │ ├── MULoaderPlugin_Tests.php │ ├── util_Tests.php │ ├── list-table_Tests.php │ └── loader_Tests.php ├── .codeclimate.yml ├── .travis.yml ├── bootstrap.php.dist ├── phpunit.xml.dist ├── composer.json ├── src └── lkwdwrd │ ├── mu-loader.php │ ├── util │ ├── list-table.php │ ├── util.php │ └── loader.php │ └── Composer │ └── MULoaderPlugin.php ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | /vendor 3 | /phpunit.xml 4 | /bootstrap.php 5 | /build 6 | -------------------------------------------------------------------------------- /tests/phpunit/tools/includable.php: -------------------------------------------------------------------------------- 1 | [] ] ); 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - '7.2' 5 | - '7.1' 6 | 7 | install: composer install 8 | 9 | script: composer test 10 | 11 | after_script: 12 | - composer export-coverage 13 | 14 | cache: 15 | directories: 16 | - vendor 17 | 18 | branches: 19 | only: 20 | - master 21 | 22 | notifications: 23 | email: 24 | on_success: never 25 | on_failure: change 26 | -------------------------------------------------------------------------------- /tests/phpunit/tools/WP_Plugins_List_Table.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | ./tests/phpunit 9 | 10 | 11 | 12 | 13 | ./src/lkwdwrd 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "lkwdwrd/wp-muplugin-loader", 3 | "version" : "1.0.5", 4 | "description" : "A drop-in MU Plugin loader for WordPress", 5 | "keywords" : ["wordpress", "muplugin", "loader"], 6 | "type" : "composer-plugin", 7 | "license" : "MIT", 8 | "minimum-stability": "dev", 9 | "prefer-stable": true, 10 | "authors" : [ 11 | { 12 | "name" : "Luke Woodward", 13 | "email": "woodward.lucas@gmail.com" 14 | } 15 | ], 16 | "autoload": { 17 | "psr-4": { "LkWdwrd\\Composer\\": "src/lkwdwrd/Composer" } 18 | }, 19 | "extra": { 20 | "class": "LkWdwrd\\Composer\\MULoaderPlugin" 21 | }, 22 | "require": { 23 | "composer-plugin-api": "^1.0" 24 | }, 25 | "require-dev" : { 26 | "phpunit/phpunit": "^7.1.4", 27 | "10up/wp_mock": "dev-dev", 28 | "codeclimate/php-test-reporter": "^0.4.4" 29 | }, 30 | "scripts" : { 31 | "test" : "phpunit --colors", 32 | "export-coverage": "test-reporter" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/lkwdwrd/mu-loader.php: -------------------------------------------------------------------------------- 1 | testFiles ) ) { 24 | foreach ( $this->testFiles as $file ) { 25 | if ( file_exists( PROJECT . $file ) ) { 26 | require_once( PROJECT . $file ); 27 | } 28 | } 29 | } 30 | 31 | parent::setUp(); 32 | } 33 | 34 | /** 35 | * Test setup method. 36 | */ 37 | public function test_setup() { 38 | $this->assertTrue( true ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/lkwdwrd/util/list-table.php: -------------------------------------------------------------------------------- 1 | single_row( array( $plugin_file, $plugin_data ) ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/lkwdwrd/util/util.php: -------------------------------------------------------------------------------- 1 | assertEquals( Util\rel_path( $path1, $path2, $sep ), $expected ); 35 | } 36 | 37 | public function data_rel_path(){ 38 | return array( 39 | array( 40 | '/a/random/path/to/a/place', 41 | '/a/random/path/to/another/place', 42 | '/', 43 | '../../another/place', 44 | ), 45 | array( 46 | '/somewhere/over/the/rainbow', 47 | '/somewhere/over/the/rainbow/bluebirds/sing', 48 | '/', 49 | 'bluebirds/sing', 50 | ), 51 | array( 52 | '/just/some/test', 53 | '/just\some\mixed\slash\example', 54 | '/', 55 | '../mixed/slash/example', 56 | ), 57 | array( 58 | '/testing/inverse/directory/separators', 59 | '/unix/to/windows', 60 | '\\', 61 | '..\..\..\..\unix\to\windows', 62 | ), 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /tests/phpunit/list-table_Tests.php: -------------------------------------------------------------------------------- 1 | [ 46 | 'random/random.php', 47 | 'testing/notsame.php', 48 | 'lastone/lastone.php' 49 | ] 50 | ] ); 51 | $base = WPMU_PLUGIN_DIR . DIRECTORY_SEPARATOR; 52 | WP_Mock::wpFunction( 'get_plugin_data', [ 53 | 'args' => [$base . 'random/random.php', false ], 54 | 'return' => [ 55 | 'Name' => 'Random MU Plugin' 56 | ] 57 | ] ); 58 | WP_Mock::wpFunction( 'get_plugin_data', [ 59 | 'args' => [$base . 'testing/notsame.php', false], 60 | 'return' => [] 61 | ] ); 62 | WP_Mock::wpFunction( 'get_plugin_data', [ 63 | 'args' => [$base . 'lastone/lastone.php', false], 64 | 'return' => [ 65 | 'Name' => 'The Last One', 66 | 'arbitrary' => [ 1, 2, 3 ], 67 | 'another' => 21 68 | ] 69 | ] ); 70 | 71 | // Run the function 72 | List_Table\list_table(); 73 | 74 | // Verify the expected data was passed to the single_row method. 75 | $this->assertEquals( 76 | \WP_Plugins_List_Table::$received, 77 | [ 78 | [ 79 | 'random/random.php', 80 | [ 'Name' => '+  Random MU Plugin' ], 81 | ], 82 | [ 83 | 'testing/notsame.php', 84 | [ 'Name' => '+  testing/notsame.php'], 85 | ], 86 | [ 87 | 'lastone/lastone.php', 88 | [ 89 | 'Name' => '+  The Last One', 90 | 'arbitrary' => [ 1, 2, 3 ], 91 | 'another' => 21 92 | ] 93 | ] 94 | ] 95 | ); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WP Must-Use Plugin Loader 2 | 3 | [![Build Status](https://travis-ci.org/lkwdwrd/wp-muplugin-loader.svg?branch=master)](https://travis-ci.org/lkwdwrd/wp-muplugin-loader) 4 | 5 | Managing plugins using the [Composer Installers](https://github.com/composer/installers) library works remarkably well. However, its handling of MU plugins leaves something to be desired. 6 | 7 | WordPress MU (must use) Plugins are files that are placed in the `wp-content/mu-plugins/` folder. These files are loaded automatically. The problem is when a plugin is actually inside a folder. WordPress will only load .php files and doesn't drop into any directories. When the Composer Installers plugin runs, it always puts the repo into a nice contained folder. This means the Composer Installers MU plugins never actually run! 8 | 9 | There are manual ways around this that work fine, but I want to get away from any manual steps when running the install. No extra files, just run `composer install` or `composer update` and have it work. That is what the WP Must-Use Plugin Loader does. 10 | 11 | ## Usage Instructions 12 | 13 | In your project's `composer.json` file, require this package. 14 | 15 | ```json 16 | "require": { 17 | "composer/installers": "~1.2.0", 18 | "johnpbloch/wordpress": "*", 19 | "lkwdwrd/wp-muplugin-loader": "~1.0.0", 20 | } 21 | ``` 22 | Make sure in the `extras` of your `composer.json` you have your mu-plugins path defined. 23 | 24 | ```json 25 | "extra": { 26 | "installer-paths": { 27 | "app/wp-content/themes/{$name}": [ 28 | "type:wordpress-theme" 29 | ], 30 | "app/wp-content/plugins/{$name}": [ 31 | "type:wordpress-plugin" 32 | ], 33 | "app/wp-content/mu-plugins/{$name}": [ 34 | "type:wordpress-muplugin" 35 | ] 36 | }, 37 | "wordpress-install-dir": "app/wp" 38 | } 39 | ``` 40 | 41 | And that's it. 42 | 43 | When Composer dumps it's autoload file, a file called `mu-require.php` will be placed into your mu-plugins folder. When WordPress loads this file as an MU plugin, it will find all of the plugins in folders in your MU plugins directory and include those as well. 44 | 45 | ## Forcing MU Plugins 46 | 47 | Usually when you are using MU plugins, you have some 'normal' WordPress plugins that you want to always be active. They are not always MU-Plugins, though, so it makes no sense to put the `"type": "wordpress-muplugin"` in the `composer.json` file. WP Must-Use Plugin Loader allows you to override the type from `wordpress-plugin` to `wordpress-muplugin` as needed. 48 | 49 | To do this, define a `"force-mu"` key in `"extra"` of your `composer.json` file. This key should hold an array of slugs for plugins to force into Must-Use status. 50 | 51 | This is compatible with [WPackagist](https://wpackagist.org/). When adding plugins from WPackagist use the plugin's normal slug, not the wp-packagist version. 52 | 53 | ```json 54 | "require": { 55 | "johnpbloch/wordpress": "*", 56 | "lkwdwrd/wp-muplugin-loader": "~1.0.0", 57 | "wpackagist-plugin/rest-api": "*" 58 | }, 59 | "extra": { 60 | "force-mu": [ 61 | "rest-api" 62 | ], 63 | "installer-paths": { 64 | "app/wp-content/themes/{$name}": [ 65 | "type:wordpress-theme" 66 | ], 67 | "app/wp-content/plugins/{$name}": [ 68 | "type:wordpress-plugin" 69 | ], 70 | "app/wp-content/mu-plugins/{$name}": [ 71 | "type:wordpress-muplugin" 72 | ] 73 | }, 74 | "wordpress-install-dir": "app/wp" 75 | } 76 | ``` 77 | 78 | When the `rest-api` plugin is installed, instead of going in the normal plugins folder, it will be pushed over to the mu-plugins folder and loaded automatically with other Must-Use Plugins. 79 | 80 | ## Forcing Unix Directory Separators 81 | 82 | If you work on Windows but use a Linux VM to run your development server, you may need to force unix directory separators to make sure the server can find the mu loader script. If so, there's another configuration in the `extra` block you can set: 83 | 84 | ```json 85 | "extra": { 86 | "force-unix-separator": true 87 | } 88 | ``` 89 | -------------------------------------------------------------------------------- /src/lkwdwrd/util/loader.php: -------------------------------------------------------------------------------- 1 | $data ) { 71 | // skip files directly at root 72 | if ( dirname( $plugin_file ) !== '.' ) { 73 | $plugins[] = $plugin_file; 74 | } 75 | } 76 | set_site_transient( $key, $plugins ); 77 | } 78 | return $plugins; 79 | } 80 | 81 | /** 82 | * Gets a unique key to use in caching the MU-Plugins list. 83 | * 84 | * Because this uses transients, we can't simply let the key change for 85 | * invalidation. To that end, we store the used key as a transient and then 86 | * pull that transient. We then create the cache key using an MD5 hash of The 87 | * files in the Must-Use plugins directory. If the files change, the key will 88 | * also change. If it does not match the old key, the previous cache entry is 89 | * removed and the new key is stored for future comparisons. 90 | * 91 | * Doing this ensures as the MU-Plugins directory changes, regaurdless of the 92 | * caching mechanism, even the options table, the data will not build up over 93 | * time. Especially important when the options table is used. 94 | * 95 | * @param String $mudir The MU Plugins Directory. Default: WPMU_PLUGIN_DIR 96 | * @return String An MD5 cache key to use. 97 | */ 98 | function get_muloader_key( $mudir = MUDIR ) { 99 | $old_key = get_site_transient( 'lkw_mu_loader_key' ); 100 | $key = md5( json_encode( scandir( $mudir ) ) ); 101 | if ( $old_key !== $key ) { 102 | if ( $old_key ) { 103 | delete_site_transient( $old_key ); 104 | } 105 | set_site_transient( 'lkw_mu_loader_key', $key ); 106 | } 107 | return $key; 108 | } 109 | -------------------------------------------------------------------------------- /tests/phpunit/loader_Tests.php: -------------------------------------------------------------------------------- 1 | key = md5( json_encode( scandir( WPMU_PLUGIN_DIR ) ) ); 27 | require_once PROJECT . '/util/loader.php'; 28 | WP_Mock::setUp(); 29 | parent::setUp(); 30 | } 31 | /** 32 | * Run tear down scripts. 33 | * @return [type] [description] 34 | */ 35 | public function tearDown() { 36 | WP_Mock::tearDown(); 37 | parent::tearDown(); 38 | } 39 | /** 40 | * Ensure the loader function includes passed plugin files. 41 | */ 42 | public function test_mu_loader() { 43 | // Run control assertions. 44 | $this->assertFalse( defined( '\LkWdwrd\Test\included' ) ); 45 | $this->assertFalse( defined( '\LkWdwrd\Test2\included' ) ); 46 | // Run the method to include plugin files. 47 | Loader\mu_loader( [ 'includable.php', 'includable2.php'] ); 48 | // Make sure the files are now included. 49 | $this->assertTrue( defined( '\LkWdwrd\Test\included' ) ); 50 | $this->assertTrue( defined( '\LkWdwrd\Test2\included' ) ); 51 | } 52 | /** 53 | * The test_mu_loader should use call get_muplugins by default. 54 | * 55 | * We can't test that very well, but we can short-cicuit the method pretty 56 | * easily by returning an empty array from the transient call. The transient 57 | * should be called twice, once to get the cache key, and again to get the 58 | * plugin list. By asserting this is called twice we can assume it is 59 | * properly calling the get_muplugins function. 60 | * 61 | * This will likley breaky on a major refactor, but should catch most of the 62 | * possible used cases. 63 | */ 64 | public function test_mu_loader_default() { 65 | // Set up mocks 66 | WP_Mock::wpFunction( 'get_site_transient', [ 67 | 'times' => 2, 68 | 'return_in_order' => [ 69 | $this->key, 70 | [] 71 | ] 72 | ] ); 73 | // Run the test 74 | $return = Loader\mu_loader(); 75 | // Verify the results 76 | $this->assertNull( $return ); 77 | } 78 | /** 79 | * The get_muplugins function will return cached data if available. 80 | */ 81 | public function test_get_muplugins_cache() { 82 | // Set up mocks 83 | WP_Mock::wpFunction( 'get_site_transient', [ 84 | 'return_in_order' => [ 85 | $this->key, 86 | [ 'a/plugin.php' ] 87 | ] 88 | ] ); 89 | // Run the test 90 | $result = Loader\get_muplugins(); 91 | // Verify the results 92 | $this->assertEquals( $result, [ 'a/plugin.php' ] ); 93 | } 94 | /** 95 | * If the cache misses get_muplugins will generate a new list of plugins. 96 | */ 97 | public function test_get_muplugins_nocache() { 98 | $expected = [ 'random/plugin1.php', 'random/plugin2.php' ]; 99 | // Set up mocks 100 | WP_Mock::wpFunction( 'get_site_transient', [ 101 | 'return_in_order' => [ 102 | $this->key, 103 | false 104 | ] 105 | ] ); 106 | WP_Mock::wpFunction( 'LkWdwrd\MU_Loader\Util\rel_path', [ 107 | 'return' => 'relpath' 108 | ] ); 109 | // only plugins in directorys should pass: rootplugin.php will go away. 110 | // WP will include root plugins in it's normal course. 111 | WP_Mock::wpFunction( 'get_plugins', [ 112 | 'args' => [ DIRECTORY_SEPARATOR . 'relpath' ], 113 | 'return' => [ 114 | 'random/plugin1.php' => true, 115 | 'random/plugin2.php' => true, 116 | 'rootplugin.php' => true 117 | ] 118 | ] ); 119 | WP_Mock::wpFunction( 'set_site_transient', [ 120 | 'times' => 1, 121 | 'args' => [ $this->key, $expected ] 122 | ] ); 123 | // Run the test 124 | $result = Loader\get_muplugins(); 125 | // Make sure the set cache function was called. 126 | $this->assertEquals( $result, $expected ); 127 | } 128 | /** 129 | * If get_plugins is not defined it will include the admin file. 130 | */ 131 | public function test_get_muplugins_admin_require() { 132 | // Set up mocks 133 | WP_Mock::wpFunction( 'get_site_transient', [ 134 | 'return_in_order' => [ 135 | $this->key, 136 | false 137 | ] 138 | ] ); 139 | WP_Mock::wpFunction( 'LkWdwrd\MU_Loader\Util\rel_path', [ 140 | 'return' => 'relpath' 141 | ] ); 142 | WP_Mock::wpPassthruFunction( 'set_site_transient' ); 143 | // Run the test. 144 | // This will include `tools/wp-admin/includes/plugin.php` which sets 145 | // a flag in it's namespace to indicate it has loaded. 146 | // First run a control assertion, then run a test assertion. 147 | $this->assertFalse( defined( '\LkWdWrd\Test\WP_Admin\included' ) ); 148 | // Run the test 149 | Loader\get_muplugins(); 150 | // Verify the results 151 | $this->assertTrue( defined( '\LkWdWrd\Test\WP_Admin\included' ) ); 152 | } 153 | /** 154 | * The get_muloader_key function returns the existing key if no changes 155 | */ 156 | public function test_get_muloader_key_same() { 157 | //Set up mocks 158 | WP_Mock::wpFunction( 'get_site_transient', [ 'return' => $this->key ] ); 159 | // Run the test 160 | $result = Loader\get_muloader_key(); 161 | // Verify results 162 | $this->assertEquals( $result, $this->key ); 163 | } 164 | /** 165 | * The get_muloader_key function deletes old transients with change. 166 | */ 167 | public function test_get_muloader_key_different() { 168 | //Set up mocks 169 | WP_Mock::wpFunction( 'get_site_transient', [ 170 | 'args' => [ 'lkw_mu_loader_key' ], 171 | 'return' => 'non-matching-key' 172 | ] ); 173 | WP_Mock::wpFunction( 'delete_site_transient', [ 174 | 'times' => 1, 175 | 'args' => [ 'non-matching-key' ] 176 | ] ); 177 | WP_Mock::wpFunction( 'set_site_transient', [ 178 | 'times' => 1, 179 | 'args' => [ 'lkw_mu_loader_key', $this->key ] 180 | ] ); 181 | // Run the test 182 | $result = Loader\get_muloader_key(); 183 | // Verify results 184 | $this->assertEquals( $result, $this->key ); 185 | } 186 | } 187 | -------------------------------------------------------------------------------- /src/lkwdwrd/Composer/MULoaderPlugin.php: -------------------------------------------------------------------------------- 1 | extras = $composer->getPackage()->getExtra(); 58 | $this->config = $composer->getConfig(); 59 | } 60 | /** 61 | * Subscribes to autoload dump and package install events. 62 | * 63 | * When `pre-autoload-dump` fires, run the `dumpRequireFile` method. 64 | * When `pre-package-install` fires, run the `overridePluginTypes` method. 65 | * 66 | * @return array The event subscription map. 67 | */ 68 | public static function getSubscribedEvents() { 69 | return array( 70 | 'pre-autoload-dump' => 'dumpRequireFile', 71 | 'pre-package-install' => 'overridePluginTypes', 72 | 'pre-package-update' => 'overridePluginTypes', 73 | ); 74 | } 75 | /** 76 | * Checks the package being installed and conditionaly overrides type. 77 | * 78 | * If the package being installed is the `wordpress-plugin` type, this will 79 | * check the extras array to see if the package's slug is present in the 80 | * `force-mu` array. If it is, the package type is updated to so that it 81 | * will install as if it were the `wordpress-muplugin` type. 82 | * 83 | * This takes into account WPackagist. If overriding the type in a plugin 84 | * from WPackagist, there is no need to include the `wpackagist-plugin` 85 | * prefix. Just use the slug as it appears in the wordpress.org repository. 86 | * @param Composer\Installer\PackageEvent $event The package event for the 87 | * current package. 88 | * @return void 89 | */ 90 | public function overridePluginTypes( $event ) { 91 | // Get the package being worked on. 92 | $operation = $event->getOperation(); 93 | if ( $operation instanceof \Composer\DependencyResolver\Operation\UpdateOperation ) { 94 | $package = $operation->getInitialPackage(); 95 | } else { 96 | $package = $operation->getPackage(); 97 | } 98 | 99 | // Only act on wordpress-plugin types 100 | if ( 'wordpress-plugin' !== $package->getType() ) { 101 | return; 102 | } 103 | 104 | // Only act when there is a force-mu key holding an array in extras 105 | $extras = $this->extras; 106 | if( empty( $extras['force-mu'] ) || !is_array( $extras['force-mu'] ) ) { 107 | return; 108 | } 109 | 110 | // Check to see if the current package is in the force-mu extra 111 | // If it is, set it's type to 'wordpress-muplugin' 112 | $slug = str_replace( 'wpackagist-plugin/', '', $package->getName() ); 113 | if ( in_array( $slug, $extras['force-mu'] ) ) { 114 | $package->setType( 'wordpress-muplugin' ); 115 | } 116 | } 117 | /** 118 | * Controlls dumping the require file into the `mu-plugins` folder. 119 | * 120 | * This method finds the relative path from the `mu-plugins` folder to this 121 | * composer package. It then writes a very simple PHP file into the 122 | * `mu-plugins` folder, which runs a `require_once` to load the main 123 | * `mu-loader.php` which can remain cozy back in the vendor directory. 124 | * 125 | * @return void 126 | */ 127 | public function dumpRequireFile() { 128 | $muRelPath = $this->findMURelPath(); 129 | 130 | // If we didn't find a relative MU Plugins path, bail. 131 | if ( ! $muRelPath ) { 132 | return; 133 | } 134 | 135 | // Find the relative path from the mu-plugins dir to the mu-loader file. 136 | $muPath = $this->resolveMURelPath( $muRelPath ); 137 | $ds = $this->getDirectorySeparator(); 138 | $loadFile = dirname( __DIR__ ) . $ds . 'mu-loader.php'; 139 | $toLoader = $ds . Util\rel_path( $muPath, $loadFile, $ds ); 140 | 141 | // Write the boostrapping PHP file. 142 | if ( !file_exists( $muPath ) ) { 143 | mkdir( $muPath, 0755, true ); 144 | } 145 | file_put_contents( 146 | $muPath . 'mu-require.php', 147 | "extras['installer-paths'] ) || ! is_array( $this->extras['installer-paths'] ) ) { 166 | return false; 167 | } 168 | // Find the array to the mu-plugin path. 169 | foreach( $this->extras['installer-paths'] as $path => $types ) { 170 | if ( ! is_array( $types ) ) { 171 | continue; 172 | } 173 | if ( ! in_array( 'type:wordpress-muplugin', $types ) ) { 174 | continue; 175 | } 176 | $path = str_replace( '{$name}', '', $path ); 177 | break; 178 | } 179 | return $path; 180 | } 181 | /** 182 | * Takes the relative Must-Use plugins path and send back the abslute path. 183 | * 184 | * @param String $relpath The relative `mu-plugins` path. 185 | * @return String The aboslute `mu-plugins` path. 186 | */ 187 | protected function resolveMURelPath( $relpath ) { 188 | // Find the actual base path by removing the vendor-dir raw config path. 189 | if ( $this->config->has( 'vendor-dir' ) ) { 190 | $tag = $this->config->raw()['config']['vendor-dir']; 191 | } else { 192 | $tag = ''; 193 | } 194 | $basepath = str_replace( $tag, '', $this->config->get('vendor-dir') ); 195 | // Return the abosolute path. 196 | return $basepath . $relpath; 197 | } 198 | 199 | /** 200 | * Get the directory separator to use for the generatoed loader 201 | * 202 | * This defaults to the DIRECTORY_SEPARATOR constant, but can be overridden in 203 | * the composer.json extra section with "force-unix-separator" set to true. 204 | * 205 | * @return string The directory separator character to use 206 | */ 207 | protected function getDirectorySeparator() { 208 | $separator = DIRECTORY_SEPARATOR; 209 | if ( ! empty( $this->extras['force-unix-separator'] ) ) { 210 | $separator = '/'; 211 | } 212 | 213 | return $separator; 214 | } 215 | } 216 | -------------------------------------------------------------------------------- /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 | "content-hash": "1305540d2b52fa4ba156962f14fada48", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "10up/wp_mock", 12 | "version": "dev-dev", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/10up/wp_mock.git", 16 | "reference": "0354413d63cbae920ffc0676443c6d9dd330ce40" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/10up/wp_mock/zipball/0354413d63cbae920ffc0676443c6d9dd330ce40", 21 | "reference": "0354413d63cbae920ffc0676443c6d9dd330ce40", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "antecedent/patchwork": "^2.1", 26 | "mockery/mockery": "^1.0", 27 | "php": ">=7.0", 28 | "phpunit/phpunit": ">=6.0" 29 | }, 30 | "require-dev": { 31 | "behat/behat": "^3.0", 32 | "satooshi/php-coveralls": "^1.0", 33 | "sebastian/comparator": ">=1.2.3" 34 | }, 35 | "type": "library", 36 | "autoload": { 37 | "psr-4": { 38 | "WP_Mock\\": "./php/WP_Mock" 39 | }, 40 | "classmap": [ 41 | "php/WP_Mock.php" 42 | ] 43 | }, 44 | "notification-url": "https://packagist.org/downloads/", 45 | "license": [ 46 | "GPL-2.0+" 47 | ], 48 | "description": "A mocking library to take the pain out of unit testing for WordPress", 49 | "time": "2017-12-03T19:27:57+00:00" 50 | }, 51 | { 52 | "name": "antecedent/patchwork", 53 | "version": "2.1.8", 54 | "source": { 55 | "type": "git", 56 | "url": "https://github.com/antecedent/patchwork.git", 57 | "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7" 58 | }, 59 | "dist": { 60 | "type": "zip", 61 | "url": "https://api.github.com/repos/antecedent/patchwork/zipball/3bb81ace3914c220aa273d1c0603d5e1b454c0d7", 62 | "reference": "3bb81ace3914c220aa273d1c0603d5e1b454c0d7", 63 | "shasum": "" 64 | }, 65 | "require": { 66 | "php": ">=5.4.0" 67 | }, 68 | "type": "library", 69 | "notification-url": "https://packagist.org/downloads/", 70 | "license": [ 71 | "MIT" 72 | ], 73 | "authors": [ 74 | { 75 | "name": "Ignas Rudaitis", 76 | "email": "ignas.rudaitis@gmail.com" 77 | } 78 | ], 79 | "description": "Method redefinition (monkey-patching) functionality for PHP.", 80 | "homepage": "http://patchwork2.org/", 81 | "keywords": [ 82 | "aop", 83 | "aspect", 84 | "interception", 85 | "monkeypatching", 86 | "redefinition", 87 | "runkit", 88 | "testing" 89 | ], 90 | "time": "2018-02-19T18:52:50+00:00" 91 | }, 92 | { 93 | "name": "codeclimate/php-test-reporter", 94 | "version": "v0.4.4", 95 | "source": { 96 | "type": "git", 97 | "url": "https://github.com/codeclimate/php-test-reporter.git", 98 | "reference": "eab9ac233f23a4c12a12755793750f22fc46dd3e" 99 | }, 100 | "dist": { 101 | "type": "zip", 102 | "url": "https://api.github.com/repos/codeclimate/php-test-reporter/zipball/eab9ac233f23a4c12a12755793750f22fc46dd3e", 103 | "reference": "eab9ac233f23a4c12a12755793750f22fc46dd3e", 104 | "shasum": "" 105 | }, 106 | "require": { 107 | "ext-curl": "*", 108 | "padraic/phar-updater": "^1.0", 109 | "php": "^5.3 || ^7.0", 110 | "psr/log": "^1.0", 111 | "satooshi/php-coveralls": "^1.0", 112 | "symfony/console": "^2.0 || ^3.0" 113 | }, 114 | "require-dev": { 115 | "friendsofphp/php-cs-fixer": "^2.0.0", 116 | "phpunit/phpunit": "^4.8.31" 117 | }, 118 | "bin": [ 119 | "composer/bin/test-reporter" 120 | ], 121 | "type": "library", 122 | "extra": { 123 | "branch-alias": { 124 | "dev-master": "0.3.x-dev" 125 | } 126 | }, 127 | "autoload": { 128 | "psr-4": { 129 | "CodeClimate\\PhpTestReporter\\": "src/" 130 | } 131 | }, 132 | "notification-url": "https://packagist.org/downloads/", 133 | "license": [ 134 | "MIT" 135 | ], 136 | "authors": [ 137 | { 138 | "name": "Code Climate", 139 | "email": "hello@codeclimate.com", 140 | "homepage": "https://codeclimate.com" 141 | } 142 | ], 143 | "description": "PHP client for reporting test coverage to Code Climate", 144 | "homepage": "https://github.com/codeclimate/php-test-reporter", 145 | "keywords": [ 146 | "codeclimate", 147 | "coverage" 148 | ], 149 | "time": "2017-02-15T22:25:47+00:00" 150 | }, 151 | { 152 | "name": "composer/ca-bundle", 153 | "version": "1.1.1", 154 | "source": { 155 | "type": "git", 156 | "url": "https://github.com/composer/ca-bundle.git", 157 | "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169" 158 | }, 159 | "dist": { 160 | "type": "zip", 161 | "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169", 162 | "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169", 163 | "shasum": "" 164 | }, 165 | "require": { 166 | "ext-openssl": "*", 167 | "ext-pcre": "*", 168 | "php": "^5.3.2 || ^7.0" 169 | }, 170 | "require-dev": { 171 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", 172 | "psr/log": "^1.0", 173 | "symfony/process": "^2.5 || ^3.0 || ^4.0" 174 | }, 175 | "type": "library", 176 | "extra": { 177 | "branch-alias": { 178 | "dev-master": "1.x-dev" 179 | } 180 | }, 181 | "autoload": { 182 | "psr-4": { 183 | "Composer\\CaBundle\\": "src" 184 | } 185 | }, 186 | "notification-url": "https://packagist.org/downloads/", 187 | "license": [ 188 | "MIT" 189 | ], 190 | "authors": [ 191 | { 192 | "name": "Jordi Boggiano", 193 | "email": "j.boggiano@seld.be", 194 | "homepage": "http://seld.be" 195 | } 196 | ], 197 | "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", 198 | "keywords": [ 199 | "cabundle", 200 | "cacert", 201 | "certificate", 202 | "ssl", 203 | "tls" 204 | ], 205 | "time": "2018-03-29T19:57:20+00:00" 206 | }, 207 | { 208 | "name": "doctrine/instantiator", 209 | "version": "1.1.0", 210 | "source": { 211 | "type": "git", 212 | "url": "https://github.com/doctrine/instantiator.git", 213 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" 214 | }, 215 | "dist": { 216 | "type": "zip", 217 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 218 | "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", 219 | "shasum": "" 220 | }, 221 | "require": { 222 | "php": "^7.1" 223 | }, 224 | "require-dev": { 225 | "athletic/athletic": "~0.1.8", 226 | "ext-pdo": "*", 227 | "ext-phar": "*", 228 | "phpunit/phpunit": "^6.2.3", 229 | "squizlabs/php_codesniffer": "^3.0.2" 230 | }, 231 | "type": "library", 232 | "extra": { 233 | "branch-alias": { 234 | "dev-master": "1.2.x-dev" 235 | } 236 | }, 237 | "autoload": { 238 | "psr-4": { 239 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 240 | } 241 | }, 242 | "notification-url": "https://packagist.org/downloads/", 243 | "license": [ 244 | "MIT" 245 | ], 246 | "authors": [ 247 | { 248 | "name": "Marco Pivetta", 249 | "email": "ocramius@gmail.com", 250 | "homepage": "http://ocramius.github.com/" 251 | } 252 | ], 253 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 254 | "homepage": "https://github.com/doctrine/instantiator", 255 | "keywords": [ 256 | "constructor", 257 | "instantiate" 258 | ], 259 | "time": "2017-07-22T11:58:36+00:00" 260 | }, 261 | { 262 | "name": "guzzle/guzzle", 263 | "version": "v3.9.3", 264 | "source": { 265 | "type": "git", 266 | "url": "https://github.com/guzzle/guzzle3.git", 267 | "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" 268 | }, 269 | "dist": { 270 | "type": "zip", 271 | "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", 272 | "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", 273 | "shasum": "" 274 | }, 275 | "require": { 276 | "ext-curl": "*", 277 | "php": ">=5.3.3", 278 | "symfony/event-dispatcher": "~2.1" 279 | }, 280 | "replace": { 281 | "guzzle/batch": "self.version", 282 | "guzzle/cache": "self.version", 283 | "guzzle/common": "self.version", 284 | "guzzle/http": "self.version", 285 | "guzzle/inflection": "self.version", 286 | "guzzle/iterator": "self.version", 287 | "guzzle/log": "self.version", 288 | "guzzle/parser": "self.version", 289 | "guzzle/plugin": "self.version", 290 | "guzzle/plugin-async": "self.version", 291 | "guzzle/plugin-backoff": "self.version", 292 | "guzzle/plugin-cache": "self.version", 293 | "guzzle/plugin-cookie": "self.version", 294 | "guzzle/plugin-curlauth": "self.version", 295 | "guzzle/plugin-error-response": "self.version", 296 | "guzzle/plugin-history": "self.version", 297 | "guzzle/plugin-log": "self.version", 298 | "guzzle/plugin-md5": "self.version", 299 | "guzzle/plugin-mock": "self.version", 300 | "guzzle/plugin-oauth": "self.version", 301 | "guzzle/service": "self.version", 302 | "guzzle/stream": "self.version" 303 | }, 304 | "require-dev": { 305 | "doctrine/cache": "~1.3", 306 | "monolog/monolog": "~1.0", 307 | "phpunit/phpunit": "3.7.*", 308 | "psr/log": "~1.0", 309 | "symfony/class-loader": "~2.1", 310 | "zendframework/zend-cache": "2.*,<2.3", 311 | "zendframework/zend-log": "2.*,<2.3" 312 | }, 313 | "suggest": { 314 | "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." 315 | }, 316 | "type": "library", 317 | "extra": { 318 | "branch-alias": { 319 | "dev-master": "3.9-dev" 320 | } 321 | }, 322 | "autoload": { 323 | "psr-0": { 324 | "Guzzle": "src/", 325 | "Guzzle\\Tests": "tests/" 326 | } 327 | }, 328 | "notification-url": "https://packagist.org/downloads/", 329 | "license": [ 330 | "MIT" 331 | ], 332 | "authors": [ 333 | { 334 | "name": "Michael Dowling", 335 | "email": "mtdowling@gmail.com", 336 | "homepage": "https://github.com/mtdowling" 337 | }, 338 | { 339 | "name": "Guzzle Community", 340 | "homepage": "https://github.com/guzzle/guzzle/contributors" 341 | } 342 | ], 343 | "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", 344 | "homepage": "http://guzzlephp.org/", 345 | "keywords": [ 346 | "client", 347 | "curl", 348 | "framework", 349 | "http", 350 | "http client", 351 | "rest", 352 | "web service" 353 | ], 354 | "abandoned": "guzzlehttp/guzzle", 355 | "time": "2015-03-18T18:23:50+00:00" 356 | }, 357 | { 358 | "name": "hamcrest/hamcrest-php", 359 | "version": "v2.0.0", 360 | "source": { 361 | "type": "git", 362 | "url": "https://github.com/hamcrest/hamcrest-php.git", 363 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" 364 | }, 365 | "dist": { 366 | "type": "zip", 367 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", 368 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", 369 | "shasum": "" 370 | }, 371 | "require": { 372 | "php": "^5.3|^7.0" 373 | }, 374 | "replace": { 375 | "cordoval/hamcrest-php": "*", 376 | "davedevelopment/hamcrest-php": "*", 377 | "kodova/hamcrest-php": "*" 378 | }, 379 | "require-dev": { 380 | "phpunit/php-file-iterator": "1.3.3", 381 | "phpunit/phpunit": "~4.0", 382 | "satooshi/php-coveralls": "^1.0" 383 | }, 384 | "type": "library", 385 | "extra": { 386 | "branch-alias": { 387 | "dev-master": "2.0-dev" 388 | } 389 | }, 390 | "autoload": { 391 | "classmap": [ 392 | "hamcrest" 393 | ] 394 | }, 395 | "notification-url": "https://packagist.org/downloads/", 396 | "license": [ 397 | "BSD" 398 | ], 399 | "description": "This is the PHP port of Hamcrest Matchers", 400 | "keywords": [ 401 | "test" 402 | ], 403 | "time": "2016-01-20T08:20:44+00:00" 404 | }, 405 | { 406 | "name": "mockery/mockery", 407 | "version": "1.0", 408 | "source": { 409 | "type": "git", 410 | "url": "https://github.com/mockery/mockery.git", 411 | "reference": "1bac8c362b12f522fdd1f1fa3556284c91affa38" 412 | }, 413 | "dist": { 414 | "type": "zip", 415 | "url": "https://api.github.com/repos/mockery/mockery/zipball/1bac8c362b12f522fdd1f1fa3556284c91affa38", 416 | "reference": "1bac8c362b12f522fdd1f1fa3556284c91affa38", 417 | "shasum": "" 418 | }, 419 | "require": { 420 | "hamcrest/hamcrest-php": "~2.0", 421 | "lib-pcre": ">=7.0", 422 | "php": ">=5.6.0" 423 | }, 424 | "require-dev": { 425 | "phpunit/phpunit": "~5.7|~6.1" 426 | }, 427 | "type": "library", 428 | "extra": { 429 | "branch-alias": { 430 | "dev-master": "1.0.x-dev" 431 | } 432 | }, 433 | "autoload": { 434 | "psr-0": { 435 | "Mockery": "library/" 436 | } 437 | }, 438 | "notification-url": "https://packagist.org/downloads/", 439 | "license": [ 440 | "BSD-3-Clause" 441 | ], 442 | "authors": [ 443 | { 444 | "name": "Pádraic Brady", 445 | "email": "padraic.brady@gmail.com", 446 | "homepage": "http://blog.astrumfutura.com" 447 | }, 448 | { 449 | "name": "Dave Marshall", 450 | "email": "dave.marshall@atstsolutions.co.uk", 451 | "homepage": "http://davedevelopment.co.uk" 452 | } 453 | ], 454 | "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", 455 | "homepage": "http://github.com/mockery/mockery", 456 | "keywords": [ 457 | "BDD", 458 | "TDD", 459 | "library", 460 | "mock", 461 | "mock objects", 462 | "mockery", 463 | "stub", 464 | "test", 465 | "test double", 466 | "testing" 467 | ], 468 | "time": "2017-10-06T16:20:43+00:00" 469 | }, 470 | { 471 | "name": "myclabs/deep-copy", 472 | "version": "1.7.0", 473 | "source": { 474 | "type": "git", 475 | "url": "https://github.com/myclabs/DeepCopy.git", 476 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" 477 | }, 478 | "dist": { 479 | "type": "zip", 480 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 481 | "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", 482 | "shasum": "" 483 | }, 484 | "require": { 485 | "php": "^5.6 || ^7.0" 486 | }, 487 | "require-dev": { 488 | "doctrine/collections": "^1.0", 489 | "doctrine/common": "^2.6", 490 | "phpunit/phpunit": "^4.1" 491 | }, 492 | "type": "library", 493 | "autoload": { 494 | "psr-4": { 495 | "DeepCopy\\": "src/DeepCopy/" 496 | }, 497 | "files": [ 498 | "src/DeepCopy/deep_copy.php" 499 | ] 500 | }, 501 | "notification-url": "https://packagist.org/downloads/", 502 | "license": [ 503 | "MIT" 504 | ], 505 | "description": "Create deep copies (clones) of your objects", 506 | "keywords": [ 507 | "clone", 508 | "copy", 509 | "duplicate", 510 | "object", 511 | "object graph" 512 | ], 513 | "time": "2017-10-19T19:58:43+00:00" 514 | }, 515 | { 516 | "name": "padraic/humbug_get_contents", 517 | "version": "1.1.2", 518 | "source": { 519 | "type": "git", 520 | "url": "https://github.com/humbug/file_get_contents.git", 521 | "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7" 522 | }, 523 | "dist": { 524 | "type": "zip", 525 | "url": "https://api.github.com/repos/humbug/file_get_contents/zipball/dcb086060c9dd6b2f51d8f7a895500307110b7a7", 526 | "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7", 527 | "shasum": "" 528 | }, 529 | "require": { 530 | "composer/ca-bundle": "^1.0", 531 | "ext-openssl": "*", 532 | "php": "^5.3 || ^7.0 || ^7.1 || ^7.2" 533 | }, 534 | "require-dev": { 535 | "bamarni/composer-bin-plugin": "^1.1", 536 | "mikey179/vfsstream": "^1.6", 537 | "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5" 538 | }, 539 | "type": "library", 540 | "extra": { 541 | "bamarni-bin": { 542 | "bin-links": false 543 | }, 544 | "branch-alias": { 545 | "dev-master": "2.0-dev" 546 | } 547 | }, 548 | "autoload": { 549 | "psr-4": { 550 | "Humbug\\": "src/" 551 | }, 552 | "files": [ 553 | "src/function.php", 554 | "src/functions.php" 555 | ] 556 | }, 557 | "notification-url": "https://packagist.org/downloads/", 558 | "license": [ 559 | "BSD-3-Clause" 560 | ], 561 | "authors": [ 562 | { 563 | "name": "Padraic Brady", 564 | "email": "padraic.brady@gmail.com", 565 | "homepage": "http://blog.astrumfutura.com" 566 | }, 567 | { 568 | "name": "Théo Fidry", 569 | "email": "theo.fidry@gmail.com" 570 | } 571 | ], 572 | "description": "Secure wrapper for accessing HTTPS resources with file_get_contents for PHP 5.3+", 573 | "homepage": "https://github.com/padraic/file_get_contents", 574 | "keywords": [ 575 | "download", 576 | "file_get_contents", 577 | "http", 578 | "https", 579 | "ssl", 580 | "tls" 581 | ], 582 | "time": "2018-02-12T18:47:17+00:00" 583 | }, 584 | { 585 | "name": "padraic/phar-updater", 586 | "version": "v1.0.6", 587 | "source": { 588 | "type": "git", 589 | "url": "https://github.com/humbug/phar-updater.git", 590 | "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1" 591 | }, 592 | "dist": { 593 | "type": "zip", 594 | "url": "https://api.github.com/repos/humbug/phar-updater/zipball/d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1", 595 | "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1", 596 | "shasum": "" 597 | }, 598 | "require": { 599 | "padraic/humbug_get_contents": "^1.0", 600 | "php": ">=5.3.3" 601 | }, 602 | "require-dev": { 603 | "phpunit/phpunit": "~4.0" 604 | }, 605 | "type": "library", 606 | "extra": { 607 | "branch-alias": { 608 | "dev-master": "1.0-dev" 609 | } 610 | }, 611 | "autoload": { 612 | "psr-4": { 613 | "Humbug\\SelfUpdate\\": "src/" 614 | } 615 | }, 616 | "notification-url": "https://packagist.org/downloads/", 617 | "license": [ 618 | "BSD-3-Clause" 619 | ], 620 | "authors": [ 621 | { 622 | "name": "Padraic Brady", 623 | "email": "padraic.brady@gmail.com", 624 | "homepage": "http://blog.astrumfutura.com" 625 | } 626 | ], 627 | "description": "A thing to make PHAR self-updating easy and secure.", 628 | "keywords": [ 629 | "humbug", 630 | "phar", 631 | "self-update", 632 | "update" 633 | ], 634 | "time": "2018-03-30T12:52:15+00:00" 635 | }, 636 | { 637 | "name": "phar-io/manifest", 638 | "version": "1.0.1", 639 | "source": { 640 | "type": "git", 641 | "url": "https://github.com/phar-io/manifest.git", 642 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" 643 | }, 644 | "dist": { 645 | "type": "zip", 646 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", 647 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", 648 | "shasum": "" 649 | }, 650 | "require": { 651 | "ext-dom": "*", 652 | "ext-phar": "*", 653 | "phar-io/version": "^1.0.1", 654 | "php": "^5.6 || ^7.0" 655 | }, 656 | "type": "library", 657 | "extra": { 658 | "branch-alias": { 659 | "dev-master": "1.0.x-dev" 660 | } 661 | }, 662 | "autoload": { 663 | "classmap": [ 664 | "src/" 665 | ] 666 | }, 667 | "notification-url": "https://packagist.org/downloads/", 668 | "license": [ 669 | "BSD-3-Clause" 670 | ], 671 | "authors": [ 672 | { 673 | "name": "Arne Blankerts", 674 | "email": "arne@blankerts.de", 675 | "role": "Developer" 676 | }, 677 | { 678 | "name": "Sebastian Heuer", 679 | "email": "sebastian@phpeople.de", 680 | "role": "Developer" 681 | }, 682 | { 683 | "name": "Sebastian Bergmann", 684 | "email": "sebastian@phpunit.de", 685 | "role": "Developer" 686 | } 687 | ], 688 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 689 | "time": "2017-03-05T18:14:27+00:00" 690 | }, 691 | { 692 | "name": "phar-io/version", 693 | "version": "1.0.1", 694 | "source": { 695 | "type": "git", 696 | "url": "https://github.com/phar-io/version.git", 697 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 698 | }, 699 | "dist": { 700 | "type": "zip", 701 | "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", 702 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 703 | "shasum": "" 704 | }, 705 | "require": { 706 | "php": "^5.6 || ^7.0" 707 | }, 708 | "type": "library", 709 | "autoload": { 710 | "classmap": [ 711 | "src/" 712 | ] 713 | }, 714 | "notification-url": "https://packagist.org/downloads/", 715 | "license": [ 716 | "BSD-3-Clause" 717 | ], 718 | "authors": [ 719 | { 720 | "name": "Arne Blankerts", 721 | "email": "arne@blankerts.de", 722 | "role": "Developer" 723 | }, 724 | { 725 | "name": "Sebastian Heuer", 726 | "email": "sebastian@phpeople.de", 727 | "role": "Developer" 728 | }, 729 | { 730 | "name": "Sebastian Bergmann", 731 | "email": "sebastian@phpunit.de", 732 | "role": "Developer" 733 | } 734 | ], 735 | "description": "Library for handling version information and constraints", 736 | "time": "2017-03-05T17:38:23+00:00" 737 | }, 738 | { 739 | "name": "phpdocumentor/reflection-common", 740 | "version": "1.0.1", 741 | "source": { 742 | "type": "git", 743 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 744 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 745 | }, 746 | "dist": { 747 | "type": "zip", 748 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 749 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 750 | "shasum": "" 751 | }, 752 | "require": { 753 | "php": ">=5.5" 754 | }, 755 | "require-dev": { 756 | "phpunit/phpunit": "^4.6" 757 | }, 758 | "type": "library", 759 | "extra": { 760 | "branch-alias": { 761 | "dev-master": "1.0.x-dev" 762 | } 763 | }, 764 | "autoload": { 765 | "psr-4": { 766 | "phpDocumentor\\Reflection\\": [ 767 | "src" 768 | ] 769 | } 770 | }, 771 | "notification-url": "https://packagist.org/downloads/", 772 | "license": [ 773 | "MIT" 774 | ], 775 | "authors": [ 776 | { 777 | "name": "Jaap van Otterdijk", 778 | "email": "opensource@ijaap.nl" 779 | } 780 | ], 781 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 782 | "homepage": "http://www.phpdoc.org", 783 | "keywords": [ 784 | "FQSEN", 785 | "phpDocumentor", 786 | "phpdoc", 787 | "reflection", 788 | "static analysis" 789 | ], 790 | "time": "2017-09-11T18:02:19+00:00" 791 | }, 792 | { 793 | "name": "phpdocumentor/reflection-docblock", 794 | "version": "4.3.0", 795 | "source": { 796 | "type": "git", 797 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 798 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08" 799 | }, 800 | "dist": { 801 | "type": "zip", 802 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", 803 | "reference": "94fd0001232e47129dd3504189fa1c7225010d08", 804 | "shasum": "" 805 | }, 806 | "require": { 807 | "php": "^7.0", 808 | "phpdocumentor/reflection-common": "^1.0.0", 809 | "phpdocumentor/type-resolver": "^0.4.0", 810 | "webmozart/assert": "^1.0" 811 | }, 812 | "require-dev": { 813 | "doctrine/instantiator": "~1.0.5", 814 | "mockery/mockery": "^1.0", 815 | "phpunit/phpunit": "^6.4" 816 | }, 817 | "type": "library", 818 | "extra": { 819 | "branch-alias": { 820 | "dev-master": "4.x-dev" 821 | } 822 | }, 823 | "autoload": { 824 | "psr-4": { 825 | "phpDocumentor\\Reflection\\": [ 826 | "src/" 827 | ] 828 | } 829 | }, 830 | "notification-url": "https://packagist.org/downloads/", 831 | "license": [ 832 | "MIT" 833 | ], 834 | "authors": [ 835 | { 836 | "name": "Mike van Riel", 837 | "email": "me@mikevanriel.com" 838 | } 839 | ], 840 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 841 | "time": "2017-11-30T07:14:17+00:00" 842 | }, 843 | { 844 | "name": "phpdocumentor/type-resolver", 845 | "version": "0.4.0", 846 | "source": { 847 | "type": "git", 848 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 849 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 850 | }, 851 | "dist": { 852 | "type": "zip", 853 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 854 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 855 | "shasum": "" 856 | }, 857 | "require": { 858 | "php": "^5.5 || ^7.0", 859 | "phpdocumentor/reflection-common": "^1.0" 860 | }, 861 | "require-dev": { 862 | "mockery/mockery": "^0.9.4", 863 | "phpunit/phpunit": "^5.2||^4.8.24" 864 | }, 865 | "type": "library", 866 | "extra": { 867 | "branch-alias": { 868 | "dev-master": "1.0.x-dev" 869 | } 870 | }, 871 | "autoload": { 872 | "psr-4": { 873 | "phpDocumentor\\Reflection\\": [ 874 | "src/" 875 | ] 876 | } 877 | }, 878 | "notification-url": "https://packagist.org/downloads/", 879 | "license": [ 880 | "MIT" 881 | ], 882 | "authors": [ 883 | { 884 | "name": "Mike van Riel", 885 | "email": "me@mikevanriel.com" 886 | } 887 | ], 888 | "time": "2017-07-14T14:27:02+00:00" 889 | }, 890 | { 891 | "name": "phpspec/prophecy", 892 | "version": "1.7.6", 893 | "source": { 894 | "type": "git", 895 | "url": "https://github.com/phpspec/prophecy.git", 896 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" 897 | }, 898 | "dist": { 899 | "type": "zip", 900 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", 901 | "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", 902 | "shasum": "" 903 | }, 904 | "require": { 905 | "doctrine/instantiator": "^1.0.2", 906 | "php": "^5.3|^7.0", 907 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 908 | "sebastian/comparator": "^1.1|^2.0|^3.0", 909 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 910 | }, 911 | "require-dev": { 912 | "phpspec/phpspec": "^2.5|^3.2", 913 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" 914 | }, 915 | "type": "library", 916 | "extra": { 917 | "branch-alias": { 918 | "dev-master": "1.7.x-dev" 919 | } 920 | }, 921 | "autoload": { 922 | "psr-0": { 923 | "Prophecy\\": "src/" 924 | } 925 | }, 926 | "notification-url": "https://packagist.org/downloads/", 927 | "license": [ 928 | "MIT" 929 | ], 930 | "authors": [ 931 | { 932 | "name": "Konstantin Kudryashov", 933 | "email": "ever.zet@gmail.com", 934 | "homepage": "http://everzet.com" 935 | }, 936 | { 937 | "name": "Marcello Duarte", 938 | "email": "marcello.duarte@gmail.com" 939 | } 940 | ], 941 | "description": "Highly opinionated mocking framework for PHP 5.3+", 942 | "homepage": "https://github.com/phpspec/prophecy", 943 | "keywords": [ 944 | "Double", 945 | "Dummy", 946 | "fake", 947 | "mock", 948 | "spy", 949 | "stub" 950 | ], 951 | "time": "2018-04-18T13:57:24+00:00" 952 | }, 953 | { 954 | "name": "phpunit/php-code-coverage", 955 | "version": "6.0.3", 956 | "source": { 957 | "type": "git", 958 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 959 | "reference": "774a82c0c5da4c1c7701790c262035d235ab7856" 960 | }, 961 | "dist": { 962 | "type": "zip", 963 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/774a82c0c5da4c1c7701790c262035d235ab7856", 964 | "reference": "774a82c0c5da4c1c7701790c262035d235ab7856", 965 | "shasum": "" 966 | }, 967 | "require": { 968 | "ext-dom": "*", 969 | "ext-xmlwriter": "*", 970 | "php": "^7.1", 971 | "phpunit/php-file-iterator": "^1.4.2", 972 | "phpunit/php-text-template": "^1.2.1", 973 | "phpunit/php-token-stream": "^3.0", 974 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 975 | "sebastian/environment": "^3.1", 976 | "sebastian/version": "^2.0.1", 977 | "theseer/tokenizer": "^1.1" 978 | }, 979 | "require-dev": { 980 | "phpunit/phpunit": "^7.0" 981 | }, 982 | "suggest": { 983 | "ext-xdebug": "^2.6.0" 984 | }, 985 | "type": "library", 986 | "extra": { 987 | "branch-alias": { 988 | "dev-master": "6.0-dev" 989 | } 990 | }, 991 | "autoload": { 992 | "classmap": [ 993 | "src/" 994 | ] 995 | }, 996 | "notification-url": "https://packagist.org/downloads/", 997 | "license": [ 998 | "BSD-3-Clause" 999 | ], 1000 | "authors": [ 1001 | { 1002 | "name": "Sebastian Bergmann", 1003 | "email": "sebastian@phpunit.de", 1004 | "role": "lead" 1005 | } 1006 | ], 1007 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1008 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1009 | "keywords": [ 1010 | "coverage", 1011 | "testing", 1012 | "xunit" 1013 | ], 1014 | "time": "2018-04-06T15:39:20+00:00" 1015 | }, 1016 | { 1017 | "name": "phpunit/php-file-iterator", 1018 | "version": "1.4.5", 1019 | "source": { 1020 | "type": "git", 1021 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1022 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 1023 | }, 1024 | "dist": { 1025 | "type": "zip", 1026 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", 1027 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 1028 | "shasum": "" 1029 | }, 1030 | "require": { 1031 | "php": ">=5.3.3" 1032 | }, 1033 | "type": "library", 1034 | "extra": { 1035 | "branch-alias": { 1036 | "dev-master": "1.4.x-dev" 1037 | } 1038 | }, 1039 | "autoload": { 1040 | "classmap": [ 1041 | "src/" 1042 | ] 1043 | }, 1044 | "notification-url": "https://packagist.org/downloads/", 1045 | "license": [ 1046 | "BSD-3-Clause" 1047 | ], 1048 | "authors": [ 1049 | { 1050 | "name": "Sebastian Bergmann", 1051 | "email": "sb@sebastian-bergmann.de", 1052 | "role": "lead" 1053 | } 1054 | ], 1055 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1056 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1057 | "keywords": [ 1058 | "filesystem", 1059 | "iterator" 1060 | ], 1061 | "time": "2017-11-27T13:52:08+00:00" 1062 | }, 1063 | { 1064 | "name": "phpunit/php-text-template", 1065 | "version": "1.2.1", 1066 | "source": { 1067 | "type": "git", 1068 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1069 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1070 | }, 1071 | "dist": { 1072 | "type": "zip", 1073 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1074 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1075 | "shasum": "" 1076 | }, 1077 | "require": { 1078 | "php": ">=5.3.3" 1079 | }, 1080 | "type": "library", 1081 | "autoload": { 1082 | "classmap": [ 1083 | "src/" 1084 | ] 1085 | }, 1086 | "notification-url": "https://packagist.org/downloads/", 1087 | "license": [ 1088 | "BSD-3-Clause" 1089 | ], 1090 | "authors": [ 1091 | { 1092 | "name": "Sebastian Bergmann", 1093 | "email": "sebastian@phpunit.de", 1094 | "role": "lead" 1095 | } 1096 | ], 1097 | "description": "Simple template engine.", 1098 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1099 | "keywords": [ 1100 | "template" 1101 | ], 1102 | "time": "2015-06-21T13:50:34+00:00" 1103 | }, 1104 | { 1105 | "name": "phpunit/php-timer", 1106 | "version": "2.0.0", 1107 | "source": { 1108 | "type": "git", 1109 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1110 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" 1111 | }, 1112 | "dist": { 1113 | "type": "zip", 1114 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", 1115 | "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", 1116 | "shasum": "" 1117 | }, 1118 | "require": { 1119 | "php": "^7.1" 1120 | }, 1121 | "require-dev": { 1122 | "phpunit/phpunit": "^7.0" 1123 | }, 1124 | "type": "library", 1125 | "extra": { 1126 | "branch-alias": { 1127 | "dev-master": "2.0-dev" 1128 | } 1129 | }, 1130 | "autoload": { 1131 | "classmap": [ 1132 | "src/" 1133 | ] 1134 | }, 1135 | "notification-url": "https://packagist.org/downloads/", 1136 | "license": [ 1137 | "BSD-3-Clause" 1138 | ], 1139 | "authors": [ 1140 | { 1141 | "name": "Sebastian Bergmann", 1142 | "email": "sebastian@phpunit.de", 1143 | "role": "lead" 1144 | } 1145 | ], 1146 | "description": "Utility class for timing", 1147 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1148 | "keywords": [ 1149 | "timer" 1150 | ], 1151 | "time": "2018-02-01T13:07:23+00:00" 1152 | }, 1153 | { 1154 | "name": "phpunit/php-token-stream", 1155 | "version": "3.0.0", 1156 | "source": { 1157 | "type": "git", 1158 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1159 | "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" 1160 | }, 1161 | "dist": { 1162 | "type": "zip", 1163 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", 1164 | "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", 1165 | "shasum": "" 1166 | }, 1167 | "require": { 1168 | "ext-tokenizer": "*", 1169 | "php": "^7.1" 1170 | }, 1171 | "require-dev": { 1172 | "phpunit/phpunit": "^7.0" 1173 | }, 1174 | "type": "library", 1175 | "extra": { 1176 | "branch-alias": { 1177 | "dev-master": "3.0-dev" 1178 | } 1179 | }, 1180 | "autoload": { 1181 | "classmap": [ 1182 | "src/" 1183 | ] 1184 | }, 1185 | "notification-url": "https://packagist.org/downloads/", 1186 | "license": [ 1187 | "BSD-3-Clause" 1188 | ], 1189 | "authors": [ 1190 | { 1191 | "name": "Sebastian Bergmann", 1192 | "email": "sebastian@phpunit.de" 1193 | } 1194 | ], 1195 | "description": "Wrapper around PHP's tokenizer extension.", 1196 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1197 | "keywords": [ 1198 | "tokenizer" 1199 | ], 1200 | "time": "2018-02-01T13:16:43+00:00" 1201 | }, 1202 | { 1203 | "name": "phpunit/phpunit", 1204 | "version": "7.1.4", 1205 | "source": { 1206 | "type": "git", 1207 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1208 | "reference": "6d51299e307dc510149e0b7cd1931dd11770e1cb" 1209 | }, 1210 | "dist": { 1211 | "type": "zip", 1212 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6d51299e307dc510149e0b7cd1931dd11770e1cb", 1213 | "reference": "6d51299e307dc510149e0b7cd1931dd11770e1cb", 1214 | "shasum": "" 1215 | }, 1216 | "require": { 1217 | "ext-dom": "*", 1218 | "ext-json": "*", 1219 | "ext-libxml": "*", 1220 | "ext-mbstring": "*", 1221 | "ext-xml": "*", 1222 | "myclabs/deep-copy": "^1.6.1", 1223 | "phar-io/manifest": "^1.0.1", 1224 | "phar-io/version": "^1.0", 1225 | "php": "^7.1", 1226 | "phpspec/prophecy": "^1.7", 1227 | "phpunit/php-code-coverage": "^6.0.1", 1228 | "phpunit/php-file-iterator": "^1.4.3", 1229 | "phpunit/php-text-template": "^1.2.1", 1230 | "phpunit/php-timer": "^2.0", 1231 | "phpunit/phpunit-mock-objects": "^6.1.1", 1232 | "sebastian/comparator": "^2.1 || ^3.0", 1233 | "sebastian/diff": "^3.0", 1234 | "sebastian/environment": "^3.1", 1235 | "sebastian/exporter": "^3.1", 1236 | "sebastian/global-state": "^2.0", 1237 | "sebastian/object-enumerator": "^3.0.3", 1238 | "sebastian/resource-operations": "^1.0", 1239 | "sebastian/version": "^2.0.1" 1240 | }, 1241 | "require-dev": { 1242 | "ext-pdo": "*" 1243 | }, 1244 | "suggest": { 1245 | "ext-xdebug": "*", 1246 | "phpunit/php-invoker": "^2.0" 1247 | }, 1248 | "bin": [ 1249 | "phpunit" 1250 | ], 1251 | "type": "library", 1252 | "extra": { 1253 | "branch-alias": { 1254 | "dev-master": "7.1-dev" 1255 | } 1256 | }, 1257 | "autoload": { 1258 | "classmap": [ 1259 | "src/" 1260 | ] 1261 | }, 1262 | "notification-url": "https://packagist.org/downloads/", 1263 | "license": [ 1264 | "BSD-3-Clause" 1265 | ], 1266 | "authors": [ 1267 | { 1268 | "name": "Sebastian Bergmann", 1269 | "email": "sebastian@phpunit.de", 1270 | "role": "lead" 1271 | } 1272 | ], 1273 | "description": "The PHP Unit Testing framework.", 1274 | "homepage": "https://phpunit.de/", 1275 | "keywords": [ 1276 | "phpunit", 1277 | "testing", 1278 | "xunit" 1279 | ], 1280 | "time": "2018-04-18T13:41:53+00:00" 1281 | }, 1282 | { 1283 | "name": "phpunit/phpunit-mock-objects", 1284 | "version": "6.1.1", 1285 | "source": { 1286 | "type": "git", 1287 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1288 | "reference": "70c740bde8fd9ea9ea295be1cd875dd7b267e157" 1289 | }, 1290 | "dist": { 1291 | "type": "zip", 1292 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/70c740bde8fd9ea9ea295be1cd875dd7b267e157", 1293 | "reference": "70c740bde8fd9ea9ea295be1cd875dd7b267e157", 1294 | "shasum": "" 1295 | }, 1296 | "require": { 1297 | "doctrine/instantiator": "^1.0.5", 1298 | "php": "^7.1", 1299 | "phpunit/php-text-template": "^1.2.1", 1300 | "sebastian/exporter": "^3.1" 1301 | }, 1302 | "require-dev": { 1303 | "phpunit/phpunit": "^7.0" 1304 | }, 1305 | "suggest": { 1306 | "ext-soap": "*" 1307 | }, 1308 | "type": "library", 1309 | "extra": { 1310 | "branch-alias": { 1311 | "dev-master": "6.1-dev" 1312 | } 1313 | }, 1314 | "autoload": { 1315 | "classmap": [ 1316 | "src/" 1317 | ] 1318 | }, 1319 | "notification-url": "https://packagist.org/downloads/", 1320 | "license": [ 1321 | "BSD-3-Clause" 1322 | ], 1323 | "authors": [ 1324 | { 1325 | "name": "Sebastian Bergmann", 1326 | "email": "sebastian@phpunit.de", 1327 | "role": "lead" 1328 | } 1329 | ], 1330 | "description": "Mock Object library for PHPUnit", 1331 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1332 | "keywords": [ 1333 | "mock", 1334 | "xunit" 1335 | ], 1336 | "time": "2018-04-11T04:50:36+00:00" 1337 | }, 1338 | { 1339 | "name": "psr/log", 1340 | "version": "1.0.2", 1341 | "source": { 1342 | "type": "git", 1343 | "url": "https://github.com/php-fig/log.git", 1344 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 1345 | }, 1346 | "dist": { 1347 | "type": "zip", 1348 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 1349 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 1350 | "shasum": "" 1351 | }, 1352 | "require": { 1353 | "php": ">=5.3.0" 1354 | }, 1355 | "type": "library", 1356 | "extra": { 1357 | "branch-alias": { 1358 | "dev-master": "1.0.x-dev" 1359 | } 1360 | }, 1361 | "autoload": { 1362 | "psr-4": { 1363 | "Psr\\Log\\": "Psr/Log/" 1364 | } 1365 | }, 1366 | "notification-url": "https://packagist.org/downloads/", 1367 | "license": [ 1368 | "MIT" 1369 | ], 1370 | "authors": [ 1371 | { 1372 | "name": "PHP-FIG", 1373 | "homepage": "http://www.php-fig.org/" 1374 | } 1375 | ], 1376 | "description": "Common interface for logging libraries", 1377 | "homepage": "https://github.com/php-fig/log", 1378 | "keywords": [ 1379 | "log", 1380 | "psr", 1381 | "psr-3" 1382 | ], 1383 | "time": "2016-10-10T12:19:37+00:00" 1384 | }, 1385 | { 1386 | "name": "satooshi/php-coveralls", 1387 | "version": "v1.1.0", 1388 | "source": { 1389 | "type": "git", 1390 | "url": "https://github.com/php-coveralls/php-coveralls.git", 1391 | "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" 1392 | }, 1393 | "dist": { 1394 | "type": "zip", 1395 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", 1396 | "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", 1397 | "shasum": "" 1398 | }, 1399 | "require": { 1400 | "ext-json": "*", 1401 | "ext-simplexml": "*", 1402 | "guzzle/guzzle": "^2.8 || ^3.0", 1403 | "php": "^5.3.3 || ^7.0", 1404 | "psr/log": "^1.0", 1405 | "symfony/config": "^2.1 || ^3.0 || ^4.0", 1406 | "symfony/console": "^2.1 || ^3.0 || ^4.0", 1407 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", 1408 | "symfony/yaml": "^2.0 || ^3.0 || ^4.0" 1409 | }, 1410 | "require-dev": { 1411 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" 1412 | }, 1413 | "suggest": { 1414 | "symfony/http-kernel": "Allows Symfony integration" 1415 | }, 1416 | "bin": [ 1417 | "bin/coveralls" 1418 | ], 1419 | "type": "library", 1420 | "autoload": { 1421 | "psr-4": { 1422 | "Satooshi\\": "src/Satooshi/" 1423 | } 1424 | }, 1425 | "notification-url": "https://packagist.org/downloads/", 1426 | "license": [ 1427 | "MIT" 1428 | ], 1429 | "authors": [ 1430 | { 1431 | "name": "Kitamura Satoshi", 1432 | "email": "with.no.parachute@gmail.com", 1433 | "homepage": "https://www.facebook.com/satooshi.jp" 1434 | } 1435 | ], 1436 | "description": "PHP client library for Coveralls API", 1437 | "homepage": "https://github.com/php-coveralls/php-coveralls", 1438 | "keywords": [ 1439 | "ci", 1440 | "coverage", 1441 | "github", 1442 | "test" 1443 | ], 1444 | "time": "2017-12-06T23:17:56+00:00" 1445 | }, 1446 | { 1447 | "name": "sebastian/code-unit-reverse-lookup", 1448 | "version": "1.0.1", 1449 | "source": { 1450 | "type": "git", 1451 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1452 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1453 | }, 1454 | "dist": { 1455 | "type": "zip", 1456 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1457 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1458 | "shasum": "" 1459 | }, 1460 | "require": { 1461 | "php": "^5.6 || ^7.0" 1462 | }, 1463 | "require-dev": { 1464 | "phpunit/phpunit": "^5.7 || ^6.0" 1465 | }, 1466 | "type": "library", 1467 | "extra": { 1468 | "branch-alias": { 1469 | "dev-master": "1.0.x-dev" 1470 | } 1471 | }, 1472 | "autoload": { 1473 | "classmap": [ 1474 | "src/" 1475 | ] 1476 | }, 1477 | "notification-url": "https://packagist.org/downloads/", 1478 | "license": [ 1479 | "BSD-3-Clause" 1480 | ], 1481 | "authors": [ 1482 | { 1483 | "name": "Sebastian Bergmann", 1484 | "email": "sebastian@phpunit.de" 1485 | } 1486 | ], 1487 | "description": "Looks up which function or method a line of code belongs to", 1488 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1489 | "time": "2017-03-04T06:30:41+00:00" 1490 | }, 1491 | { 1492 | "name": "sebastian/comparator", 1493 | "version": "3.0.0", 1494 | "source": { 1495 | "type": "git", 1496 | "url": "https://github.com/sebastianbergmann/comparator.git", 1497 | "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5" 1498 | }, 1499 | "dist": { 1500 | "type": "zip", 1501 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ed5fd2281113729f1ebcc64d101ad66028aeb3d5", 1502 | "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5", 1503 | "shasum": "" 1504 | }, 1505 | "require": { 1506 | "php": "^7.1", 1507 | "sebastian/diff": "^3.0", 1508 | "sebastian/exporter": "^3.1" 1509 | }, 1510 | "require-dev": { 1511 | "phpunit/phpunit": "^7.1" 1512 | }, 1513 | "type": "library", 1514 | "extra": { 1515 | "branch-alias": { 1516 | "dev-master": "3.0-dev" 1517 | } 1518 | }, 1519 | "autoload": { 1520 | "classmap": [ 1521 | "src/" 1522 | ] 1523 | }, 1524 | "notification-url": "https://packagist.org/downloads/", 1525 | "license": [ 1526 | "BSD-3-Clause" 1527 | ], 1528 | "authors": [ 1529 | { 1530 | "name": "Jeff Welch", 1531 | "email": "whatthejeff@gmail.com" 1532 | }, 1533 | { 1534 | "name": "Volker Dusch", 1535 | "email": "github@wallbash.com" 1536 | }, 1537 | { 1538 | "name": "Bernhard Schussek", 1539 | "email": "bschussek@2bepublished.at" 1540 | }, 1541 | { 1542 | "name": "Sebastian Bergmann", 1543 | "email": "sebastian@phpunit.de" 1544 | } 1545 | ], 1546 | "description": "Provides the functionality to compare PHP values for equality", 1547 | "homepage": "https://github.com/sebastianbergmann/comparator", 1548 | "keywords": [ 1549 | "comparator", 1550 | "compare", 1551 | "equality" 1552 | ], 1553 | "time": "2018-04-18T13:33:00+00:00" 1554 | }, 1555 | { 1556 | "name": "sebastian/diff", 1557 | "version": "3.0.0", 1558 | "source": { 1559 | "type": "git", 1560 | "url": "https://github.com/sebastianbergmann/diff.git", 1561 | "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8" 1562 | }, 1563 | "dist": { 1564 | "type": "zip", 1565 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/e09160918c66281713f1c324c1f4c4c3037ba1e8", 1566 | "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8", 1567 | "shasum": "" 1568 | }, 1569 | "require": { 1570 | "php": "^7.1" 1571 | }, 1572 | "require-dev": { 1573 | "phpunit/phpunit": "^7.0", 1574 | "symfony/process": "^2 || ^3.3 || ^4" 1575 | }, 1576 | "type": "library", 1577 | "extra": { 1578 | "branch-alias": { 1579 | "dev-master": "3.0-dev" 1580 | } 1581 | }, 1582 | "autoload": { 1583 | "classmap": [ 1584 | "src/" 1585 | ] 1586 | }, 1587 | "notification-url": "https://packagist.org/downloads/", 1588 | "license": [ 1589 | "BSD-3-Clause" 1590 | ], 1591 | "authors": [ 1592 | { 1593 | "name": "Kore Nordmann", 1594 | "email": "mail@kore-nordmann.de" 1595 | }, 1596 | { 1597 | "name": "Sebastian Bergmann", 1598 | "email": "sebastian@phpunit.de" 1599 | } 1600 | ], 1601 | "description": "Diff implementation", 1602 | "homepage": "https://github.com/sebastianbergmann/diff", 1603 | "keywords": [ 1604 | "diff", 1605 | "udiff", 1606 | "unidiff", 1607 | "unified diff" 1608 | ], 1609 | "time": "2018-02-01T13:45:15+00:00" 1610 | }, 1611 | { 1612 | "name": "sebastian/environment", 1613 | "version": "3.1.0", 1614 | "source": { 1615 | "type": "git", 1616 | "url": "https://github.com/sebastianbergmann/environment.git", 1617 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 1618 | }, 1619 | "dist": { 1620 | "type": "zip", 1621 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1622 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 1623 | "shasum": "" 1624 | }, 1625 | "require": { 1626 | "php": "^7.0" 1627 | }, 1628 | "require-dev": { 1629 | "phpunit/phpunit": "^6.1" 1630 | }, 1631 | "type": "library", 1632 | "extra": { 1633 | "branch-alias": { 1634 | "dev-master": "3.1.x-dev" 1635 | } 1636 | }, 1637 | "autoload": { 1638 | "classmap": [ 1639 | "src/" 1640 | ] 1641 | }, 1642 | "notification-url": "https://packagist.org/downloads/", 1643 | "license": [ 1644 | "BSD-3-Clause" 1645 | ], 1646 | "authors": [ 1647 | { 1648 | "name": "Sebastian Bergmann", 1649 | "email": "sebastian@phpunit.de" 1650 | } 1651 | ], 1652 | "description": "Provides functionality to handle HHVM/PHP environments", 1653 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1654 | "keywords": [ 1655 | "Xdebug", 1656 | "environment", 1657 | "hhvm" 1658 | ], 1659 | "time": "2017-07-01T08:51:00+00:00" 1660 | }, 1661 | { 1662 | "name": "sebastian/exporter", 1663 | "version": "3.1.0", 1664 | "source": { 1665 | "type": "git", 1666 | "url": "https://github.com/sebastianbergmann/exporter.git", 1667 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 1668 | }, 1669 | "dist": { 1670 | "type": "zip", 1671 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 1672 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 1673 | "shasum": "" 1674 | }, 1675 | "require": { 1676 | "php": "^7.0", 1677 | "sebastian/recursion-context": "^3.0" 1678 | }, 1679 | "require-dev": { 1680 | "ext-mbstring": "*", 1681 | "phpunit/phpunit": "^6.0" 1682 | }, 1683 | "type": "library", 1684 | "extra": { 1685 | "branch-alias": { 1686 | "dev-master": "3.1.x-dev" 1687 | } 1688 | }, 1689 | "autoload": { 1690 | "classmap": [ 1691 | "src/" 1692 | ] 1693 | }, 1694 | "notification-url": "https://packagist.org/downloads/", 1695 | "license": [ 1696 | "BSD-3-Clause" 1697 | ], 1698 | "authors": [ 1699 | { 1700 | "name": "Jeff Welch", 1701 | "email": "whatthejeff@gmail.com" 1702 | }, 1703 | { 1704 | "name": "Volker Dusch", 1705 | "email": "github@wallbash.com" 1706 | }, 1707 | { 1708 | "name": "Bernhard Schussek", 1709 | "email": "bschussek@2bepublished.at" 1710 | }, 1711 | { 1712 | "name": "Sebastian Bergmann", 1713 | "email": "sebastian@phpunit.de" 1714 | }, 1715 | { 1716 | "name": "Adam Harvey", 1717 | "email": "aharvey@php.net" 1718 | } 1719 | ], 1720 | "description": "Provides the functionality to export PHP variables for visualization", 1721 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1722 | "keywords": [ 1723 | "export", 1724 | "exporter" 1725 | ], 1726 | "time": "2017-04-03T13:19:02+00:00" 1727 | }, 1728 | { 1729 | "name": "sebastian/global-state", 1730 | "version": "2.0.0", 1731 | "source": { 1732 | "type": "git", 1733 | "url": "https://github.com/sebastianbergmann/global-state.git", 1734 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 1735 | }, 1736 | "dist": { 1737 | "type": "zip", 1738 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1739 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1740 | "shasum": "" 1741 | }, 1742 | "require": { 1743 | "php": "^7.0" 1744 | }, 1745 | "require-dev": { 1746 | "phpunit/phpunit": "^6.0" 1747 | }, 1748 | "suggest": { 1749 | "ext-uopz": "*" 1750 | }, 1751 | "type": "library", 1752 | "extra": { 1753 | "branch-alias": { 1754 | "dev-master": "2.0-dev" 1755 | } 1756 | }, 1757 | "autoload": { 1758 | "classmap": [ 1759 | "src/" 1760 | ] 1761 | }, 1762 | "notification-url": "https://packagist.org/downloads/", 1763 | "license": [ 1764 | "BSD-3-Clause" 1765 | ], 1766 | "authors": [ 1767 | { 1768 | "name": "Sebastian Bergmann", 1769 | "email": "sebastian@phpunit.de" 1770 | } 1771 | ], 1772 | "description": "Snapshotting of global state", 1773 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1774 | "keywords": [ 1775 | "global state" 1776 | ], 1777 | "time": "2017-04-27T15:39:26+00:00" 1778 | }, 1779 | { 1780 | "name": "sebastian/object-enumerator", 1781 | "version": "3.0.3", 1782 | "source": { 1783 | "type": "git", 1784 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1785 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1786 | }, 1787 | "dist": { 1788 | "type": "zip", 1789 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1790 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1791 | "shasum": "" 1792 | }, 1793 | "require": { 1794 | "php": "^7.0", 1795 | "sebastian/object-reflector": "^1.1.1", 1796 | "sebastian/recursion-context": "^3.0" 1797 | }, 1798 | "require-dev": { 1799 | "phpunit/phpunit": "^6.0" 1800 | }, 1801 | "type": "library", 1802 | "extra": { 1803 | "branch-alias": { 1804 | "dev-master": "3.0.x-dev" 1805 | } 1806 | }, 1807 | "autoload": { 1808 | "classmap": [ 1809 | "src/" 1810 | ] 1811 | }, 1812 | "notification-url": "https://packagist.org/downloads/", 1813 | "license": [ 1814 | "BSD-3-Clause" 1815 | ], 1816 | "authors": [ 1817 | { 1818 | "name": "Sebastian Bergmann", 1819 | "email": "sebastian@phpunit.de" 1820 | } 1821 | ], 1822 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1823 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1824 | "time": "2017-08-03T12:35:26+00:00" 1825 | }, 1826 | { 1827 | "name": "sebastian/object-reflector", 1828 | "version": "1.1.1", 1829 | "source": { 1830 | "type": "git", 1831 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1832 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1833 | }, 1834 | "dist": { 1835 | "type": "zip", 1836 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1837 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1838 | "shasum": "" 1839 | }, 1840 | "require": { 1841 | "php": "^7.0" 1842 | }, 1843 | "require-dev": { 1844 | "phpunit/phpunit": "^6.0" 1845 | }, 1846 | "type": "library", 1847 | "extra": { 1848 | "branch-alias": { 1849 | "dev-master": "1.1-dev" 1850 | } 1851 | }, 1852 | "autoload": { 1853 | "classmap": [ 1854 | "src/" 1855 | ] 1856 | }, 1857 | "notification-url": "https://packagist.org/downloads/", 1858 | "license": [ 1859 | "BSD-3-Clause" 1860 | ], 1861 | "authors": [ 1862 | { 1863 | "name": "Sebastian Bergmann", 1864 | "email": "sebastian@phpunit.de" 1865 | } 1866 | ], 1867 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1868 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1869 | "time": "2017-03-29T09:07:27+00:00" 1870 | }, 1871 | { 1872 | "name": "sebastian/recursion-context", 1873 | "version": "3.0.0", 1874 | "source": { 1875 | "type": "git", 1876 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1877 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1878 | }, 1879 | "dist": { 1880 | "type": "zip", 1881 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1882 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1883 | "shasum": "" 1884 | }, 1885 | "require": { 1886 | "php": "^7.0" 1887 | }, 1888 | "require-dev": { 1889 | "phpunit/phpunit": "^6.0" 1890 | }, 1891 | "type": "library", 1892 | "extra": { 1893 | "branch-alias": { 1894 | "dev-master": "3.0.x-dev" 1895 | } 1896 | }, 1897 | "autoload": { 1898 | "classmap": [ 1899 | "src/" 1900 | ] 1901 | }, 1902 | "notification-url": "https://packagist.org/downloads/", 1903 | "license": [ 1904 | "BSD-3-Clause" 1905 | ], 1906 | "authors": [ 1907 | { 1908 | "name": "Jeff Welch", 1909 | "email": "whatthejeff@gmail.com" 1910 | }, 1911 | { 1912 | "name": "Sebastian Bergmann", 1913 | "email": "sebastian@phpunit.de" 1914 | }, 1915 | { 1916 | "name": "Adam Harvey", 1917 | "email": "aharvey@php.net" 1918 | } 1919 | ], 1920 | "description": "Provides functionality to recursively process PHP variables", 1921 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1922 | "time": "2017-03-03T06:23:57+00:00" 1923 | }, 1924 | { 1925 | "name": "sebastian/resource-operations", 1926 | "version": "1.0.0", 1927 | "source": { 1928 | "type": "git", 1929 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1930 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 1931 | }, 1932 | "dist": { 1933 | "type": "zip", 1934 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1935 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1936 | "shasum": "" 1937 | }, 1938 | "require": { 1939 | "php": ">=5.6.0" 1940 | }, 1941 | "type": "library", 1942 | "extra": { 1943 | "branch-alias": { 1944 | "dev-master": "1.0.x-dev" 1945 | } 1946 | }, 1947 | "autoload": { 1948 | "classmap": [ 1949 | "src/" 1950 | ] 1951 | }, 1952 | "notification-url": "https://packagist.org/downloads/", 1953 | "license": [ 1954 | "BSD-3-Clause" 1955 | ], 1956 | "authors": [ 1957 | { 1958 | "name": "Sebastian Bergmann", 1959 | "email": "sebastian@phpunit.de" 1960 | } 1961 | ], 1962 | "description": "Provides a list of PHP built-in functions that operate on resources", 1963 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1964 | "time": "2015-07-28T20:34:47+00:00" 1965 | }, 1966 | { 1967 | "name": "sebastian/version", 1968 | "version": "2.0.1", 1969 | "source": { 1970 | "type": "git", 1971 | "url": "https://github.com/sebastianbergmann/version.git", 1972 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1973 | }, 1974 | "dist": { 1975 | "type": "zip", 1976 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1977 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1978 | "shasum": "" 1979 | }, 1980 | "require": { 1981 | "php": ">=5.6" 1982 | }, 1983 | "type": "library", 1984 | "extra": { 1985 | "branch-alias": { 1986 | "dev-master": "2.0.x-dev" 1987 | } 1988 | }, 1989 | "autoload": { 1990 | "classmap": [ 1991 | "src/" 1992 | ] 1993 | }, 1994 | "notification-url": "https://packagist.org/downloads/", 1995 | "license": [ 1996 | "BSD-3-Clause" 1997 | ], 1998 | "authors": [ 1999 | { 2000 | "name": "Sebastian Bergmann", 2001 | "email": "sebastian@phpunit.de", 2002 | "role": "lead" 2003 | } 2004 | ], 2005 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2006 | "homepage": "https://github.com/sebastianbergmann/version", 2007 | "time": "2016-10-03T07:35:21+00:00" 2008 | }, 2009 | { 2010 | "name": "symfony/config", 2011 | "version": "v4.0.8", 2012 | "source": { 2013 | "type": "git", 2014 | "url": "https://github.com/symfony/config.git", 2015 | "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8" 2016 | }, 2017 | "dist": { 2018 | "type": "zip", 2019 | "url": "https://api.github.com/repos/symfony/config/zipball/7c19370ab04e9ac05b74a504198e165f5ccf6dd8", 2020 | "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8", 2021 | "shasum": "" 2022 | }, 2023 | "require": { 2024 | "php": "^7.1.3", 2025 | "symfony/filesystem": "~3.4|~4.0" 2026 | }, 2027 | "conflict": { 2028 | "symfony/finder": "<3.4" 2029 | }, 2030 | "require-dev": { 2031 | "symfony/dependency-injection": "~3.4|~4.0", 2032 | "symfony/event-dispatcher": "~3.4|~4.0", 2033 | "symfony/finder": "~3.4|~4.0", 2034 | "symfony/yaml": "~3.4|~4.0" 2035 | }, 2036 | "suggest": { 2037 | "symfony/yaml": "To use the yaml reference dumper" 2038 | }, 2039 | "type": "library", 2040 | "extra": { 2041 | "branch-alias": { 2042 | "dev-master": "4.0-dev" 2043 | } 2044 | }, 2045 | "autoload": { 2046 | "psr-4": { 2047 | "Symfony\\Component\\Config\\": "" 2048 | }, 2049 | "exclude-from-classmap": [ 2050 | "/Tests/" 2051 | ] 2052 | }, 2053 | "notification-url": "https://packagist.org/downloads/", 2054 | "license": [ 2055 | "MIT" 2056 | ], 2057 | "authors": [ 2058 | { 2059 | "name": "Fabien Potencier", 2060 | "email": "fabien@symfony.com" 2061 | }, 2062 | { 2063 | "name": "Symfony Community", 2064 | "homepage": "https://symfony.com/contributors" 2065 | } 2066 | ], 2067 | "description": "Symfony Config Component", 2068 | "homepage": "https://symfony.com", 2069 | "time": "2018-03-19T22:35:49+00:00" 2070 | }, 2071 | { 2072 | "name": "symfony/console", 2073 | "version": "v3.4.8", 2074 | "source": { 2075 | "type": "git", 2076 | "url": "https://github.com/symfony/console.git", 2077 | "reference": "d4bb70fa24d540c309d88a9d6e43fb2d339b1fbf" 2078 | }, 2079 | "dist": { 2080 | "type": "zip", 2081 | "url": "https://api.github.com/repos/symfony/console/zipball/d4bb70fa24d540c309d88a9d6e43fb2d339b1fbf", 2082 | "reference": "d4bb70fa24d540c309d88a9d6e43fb2d339b1fbf", 2083 | "shasum": "" 2084 | }, 2085 | "require": { 2086 | "php": "^5.5.9|>=7.0.8", 2087 | "symfony/debug": "~2.8|~3.0|~4.0", 2088 | "symfony/polyfill-mbstring": "~1.0" 2089 | }, 2090 | "conflict": { 2091 | "symfony/dependency-injection": "<3.4", 2092 | "symfony/process": "<3.3" 2093 | }, 2094 | "require-dev": { 2095 | "psr/log": "~1.0", 2096 | "symfony/config": "~3.3|~4.0", 2097 | "symfony/dependency-injection": "~3.4|~4.0", 2098 | "symfony/event-dispatcher": "~2.8|~3.0|~4.0", 2099 | "symfony/lock": "~3.4|~4.0", 2100 | "symfony/process": "~3.3|~4.0" 2101 | }, 2102 | "suggest": { 2103 | "psr/log": "For using the console logger", 2104 | "symfony/event-dispatcher": "", 2105 | "symfony/lock": "", 2106 | "symfony/process": "" 2107 | }, 2108 | "type": "library", 2109 | "extra": { 2110 | "branch-alias": { 2111 | "dev-master": "3.4-dev" 2112 | } 2113 | }, 2114 | "autoload": { 2115 | "psr-4": { 2116 | "Symfony\\Component\\Console\\": "" 2117 | }, 2118 | "exclude-from-classmap": [ 2119 | "/Tests/" 2120 | ] 2121 | }, 2122 | "notification-url": "https://packagist.org/downloads/", 2123 | "license": [ 2124 | "MIT" 2125 | ], 2126 | "authors": [ 2127 | { 2128 | "name": "Fabien Potencier", 2129 | "email": "fabien@symfony.com" 2130 | }, 2131 | { 2132 | "name": "Symfony Community", 2133 | "homepage": "https://symfony.com/contributors" 2134 | } 2135 | ], 2136 | "description": "Symfony Console Component", 2137 | "homepage": "https://symfony.com", 2138 | "time": "2018-04-03T05:22:50+00:00" 2139 | }, 2140 | { 2141 | "name": "symfony/debug", 2142 | "version": "v4.0.8", 2143 | "source": { 2144 | "type": "git", 2145 | "url": "https://github.com/symfony/debug.git", 2146 | "reference": "5961d02d48828671f5d8a7805e06579d692f6ede" 2147 | }, 2148 | "dist": { 2149 | "type": "zip", 2150 | "url": "https://api.github.com/repos/symfony/debug/zipball/5961d02d48828671f5d8a7805e06579d692f6ede", 2151 | "reference": "5961d02d48828671f5d8a7805e06579d692f6ede", 2152 | "shasum": "" 2153 | }, 2154 | "require": { 2155 | "php": "^7.1.3", 2156 | "psr/log": "~1.0" 2157 | }, 2158 | "conflict": { 2159 | "symfony/http-kernel": "<3.4" 2160 | }, 2161 | "require-dev": { 2162 | "symfony/http-kernel": "~3.4|~4.0" 2163 | }, 2164 | "type": "library", 2165 | "extra": { 2166 | "branch-alias": { 2167 | "dev-master": "4.0-dev" 2168 | } 2169 | }, 2170 | "autoload": { 2171 | "psr-4": { 2172 | "Symfony\\Component\\Debug\\": "" 2173 | }, 2174 | "exclude-from-classmap": [ 2175 | "/Tests/" 2176 | ] 2177 | }, 2178 | "notification-url": "https://packagist.org/downloads/", 2179 | "license": [ 2180 | "MIT" 2181 | ], 2182 | "authors": [ 2183 | { 2184 | "name": "Fabien Potencier", 2185 | "email": "fabien@symfony.com" 2186 | }, 2187 | { 2188 | "name": "Symfony Community", 2189 | "homepage": "https://symfony.com/contributors" 2190 | } 2191 | ], 2192 | "description": "Symfony Debug Component", 2193 | "homepage": "https://symfony.com", 2194 | "time": "2018-04-03T05:24:00+00:00" 2195 | }, 2196 | { 2197 | "name": "symfony/event-dispatcher", 2198 | "version": "v2.8.38", 2199 | "source": { 2200 | "type": "git", 2201 | "url": "https://github.com/symfony/event-dispatcher.git", 2202 | "reference": "9b69aad7d4c086dc94ebade2d5eb9145da5dac8c" 2203 | }, 2204 | "dist": { 2205 | "type": "zip", 2206 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9b69aad7d4c086dc94ebade2d5eb9145da5dac8c", 2207 | "reference": "9b69aad7d4c086dc94ebade2d5eb9145da5dac8c", 2208 | "shasum": "" 2209 | }, 2210 | "require": { 2211 | "php": ">=5.3.9" 2212 | }, 2213 | "require-dev": { 2214 | "psr/log": "~1.0", 2215 | "symfony/config": "^2.0.5|~3.0.0", 2216 | "symfony/dependency-injection": "~2.6|~3.0.0", 2217 | "symfony/expression-language": "~2.6|~3.0.0", 2218 | "symfony/stopwatch": "~2.3|~3.0.0" 2219 | }, 2220 | "suggest": { 2221 | "symfony/dependency-injection": "", 2222 | "symfony/http-kernel": "" 2223 | }, 2224 | "type": "library", 2225 | "extra": { 2226 | "branch-alias": { 2227 | "dev-master": "2.8-dev" 2228 | } 2229 | }, 2230 | "autoload": { 2231 | "psr-4": { 2232 | "Symfony\\Component\\EventDispatcher\\": "" 2233 | }, 2234 | "exclude-from-classmap": [ 2235 | "/Tests/" 2236 | ] 2237 | }, 2238 | "notification-url": "https://packagist.org/downloads/", 2239 | "license": [ 2240 | "MIT" 2241 | ], 2242 | "authors": [ 2243 | { 2244 | "name": "Fabien Potencier", 2245 | "email": "fabien@symfony.com" 2246 | }, 2247 | { 2248 | "name": "Symfony Community", 2249 | "homepage": "https://symfony.com/contributors" 2250 | } 2251 | ], 2252 | "description": "Symfony EventDispatcher Component", 2253 | "homepage": "https://symfony.com", 2254 | "time": "2018-04-06T07:35:03+00:00" 2255 | }, 2256 | { 2257 | "name": "symfony/filesystem", 2258 | "version": "v4.0.8", 2259 | "source": { 2260 | "type": "git", 2261 | "url": "https://github.com/symfony/filesystem.git", 2262 | "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21" 2263 | }, 2264 | "dist": { 2265 | "type": "zip", 2266 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", 2267 | "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", 2268 | "shasum": "" 2269 | }, 2270 | "require": { 2271 | "php": "^7.1.3" 2272 | }, 2273 | "type": "library", 2274 | "extra": { 2275 | "branch-alias": { 2276 | "dev-master": "4.0-dev" 2277 | } 2278 | }, 2279 | "autoload": { 2280 | "psr-4": { 2281 | "Symfony\\Component\\Filesystem\\": "" 2282 | }, 2283 | "exclude-from-classmap": [ 2284 | "/Tests/" 2285 | ] 2286 | }, 2287 | "notification-url": "https://packagist.org/downloads/", 2288 | "license": [ 2289 | "MIT" 2290 | ], 2291 | "authors": [ 2292 | { 2293 | "name": "Fabien Potencier", 2294 | "email": "fabien@symfony.com" 2295 | }, 2296 | { 2297 | "name": "Symfony Community", 2298 | "homepage": "https://symfony.com/contributors" 2299 | } 2300 | ], 2301 | "description": "Symfony Filesystem Component", 2302 | "homepage": "https://symfony.com", 2303 | "time": "2018-02-22T10:50:29+00:00" 2304 | }, 2305 | { 2306 | "name": "symfony/polyfill-mbstring", 2307 | "version": "v1.7.0", 2308 | "source": { 2309 | "type": "git", 2310 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2311 | "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" 2312 | }, 2313 | "dist": { 2314 | "type": "zip", 2315 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", 2316 | "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", 2317 | "shasum": "" 2318 | }, 2319 | "require": { 2320 | "php": ">=5.3.3" 2321 | }, 2322 | "suggest": { 2323 | "ext-mbstring": "For best performance" 2324 | }, 2325 | "type": "library", 2326 | "extra": { 2327 | "branch-alias": { 2328 | "dev-master": "1.7-dev" 2329 | } 2330 | }, 2331 | "autoload": { 2332 | "psr-4": { 2333 | "Symfony\\Polyfill\\Mbstring\\": "" 2334 | }, 2335 | "files": [ 2336 | "bootstrap.php" 2337 | ] 2338 | }, 2339 | "notification-url": "https://packagist.org/downloads/", 2340 | "license": [ 2341 | "MIT" 2342 | ], 2343 | "authors": [ 2344 | { 2345 | "name": "Nicolas Grekas", 2346 | "email": "p@tchwork.com" 2347 | }, 2348 | { 2349 | "name": "Symfony Community", 2350 | "homepage": "https://symfony.com/contributors" 2351 | } 2352 | ], 2353 | "description": "Symfony polyfill for the Mbstring extension", 2354 | "homepage": "https://symfony.com", 2355 | "keywords": [ 2356 | "compatibility", 2357 | "mbstring", 2358 | "polyfill", 2359 | "portable", 2360 | "shim" 2361 | ], 2362 | "time": "2018-01-30T19:27:44+00:00" 2363 | }, 2364 | { 2365 | "name": "symfony/stopwatch", 2366 | "version": "v4.0.8", 2367 | "source": { 2368 | "type": "git", 2369 | "url": "https://github.com/symfony/stopwatch.git", 2370 | "reference": "6795ffa2f8eebedac77f045aa62c0c10b2763042" 2371 | }, 2372 | "dist": { 2373 | "type": "zip", 2374 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6795ffa2f8eebedac77f045aa62c0c10b2763042", 2375 | "reference": "6795ffa2f8eebedac77f045aa62c0c10b2763042", 2376 | "shasum": "" 2377 | }, 2378 | "require": { 2379 | "php": "^7.1.3" 2380 | }, 2381 | "type": "library", 2382 | "extra": { 2383 | "branch-alias": { 2384 | "dev-master": "4.0-dev" 2385 | } 2386 | }, 2387 | "autoload": { 2388 | "psr-4": { 2389 | "Symfony\\Component\\Stopwatch\\": "" 2390 | }, 2391 | "exclude-from-classmap": [ 2392 | "/Tests/" 2393 | ] 2394 | }, 2395 | "notification-url": "https://packagist.org/downloads/", 2396 | "license": [ 2397 | "MIT" 2398 | ], 2399 | "authors": [ 2400 | { 2401 | "name": "Fabien Potencier", 2402 | "email": "fabien@symfony.com" 2403 | }, 2404 | { 2405 | "name": "Symfony Community", 2406 | "homepage": "https://symfony.com/contributors" 2407 | } 2408 | ], 2409 | "description": "Symfony Stopwatch Component", 2410 | "homepage": "https://symfony.com", 2411 | "time": "2018-02-19T16:50:22+00:00" 2412 | }, 2413 | { 2414 | "name": "symfony/yaml", 2415 | "version": "v4.0.8", 2416 | "source": { 2417 | "type": "git", 2418 | "url": "https://github.com/symfony/yaml.git", 2419 | "reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c" 2420 | }, 2421 | "dist": { 2422 | "type": "zip", 2423 | "url": "https://api.github.com/repos/symfony/yaml/zipball/8b34ebb5989df61cbd77eff29a02c4db9ac1069c", 2424 | "reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c", 2425 | "shasum": "" 2426 | }, 2427 | "require": { 2428 | "php": "^7.1.3" 2429 | }, 2430 | "conflict": { 2431 | "symfony/console": "<3.4" 2432 | }, 2433 | "require-dev": { 2434 | "symfony/console": "~3.4|~4.0" 2435 | }, 2436 | "suggest": { 2437 | "symfony/console": "For validating YAML files using the lint command" 2438 | }, 2439 | "type": "library", 2440 | "extra": { 2441 | "branch-alias": { 2442 | "dev-master": "4.0-dev" 2443 | } 2444 | }, 2445 | "autoload": { 2446 | "psr-4": { 2447 | "Symfony\\Component\\Yaml\\": "" 2448 | }, 2449 | "exclude-from-classmap": [ 2450 | "/Tests/" 2451 | ] 2452 | }, 2453 | "notification-url": "https://packagist.org/downloads/", 2454 | "license": [ 2455 | "MIT" 2456 | ], 2457 | "authors": [ 2458 | { 2459 | "name": "Fabien Potencier", 2460 | "email": "fabien@symfony.com" 2461 | }, 2462 | { 2463 | "name": "Symfony Community", 2464 | "homepage": "https://symfony.com/contributors" 2465 | } 2466 | ], 2467 | "description": "Symfony Yaml Component", 2468 | "homepage": "https://symfony.com", 2469 | "time": "2018-04-03T05:24:00+00:00" 2470 | }, 2471 | { 2472 | "name": "theseer/tokenizer", 2473 | "version": "1.1.0", 2474 | "source": { 2475 | "type": "git", 2476 | "url": "https://github.com/theseer/tokenizer.git", 2477 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 2478 | }, 2479 | "dist": { 2480 | "type": "zip", 2481 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 2482 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 2483 | "shasum": "" 2484 | }, 2485 | "require": { 2486 | "ext-dom": "*", 2487 | "ext-tokenizer": "*", 2488 | "ext-xmlwriter": "*", 2489 | "php": "^7.0" 2490 | }, 2491 | "type": "library", 2492 | "autoload": { 2493 | "classmap": [ 2494 | "src/" 2495 | ] 2496 | }, 2497 | "notification-url": "https://packagist.org/downloads/", 2498 | "license": [ 2499 | "BSD-3-Clause" 2500 | ], 2501 | "authors": [ 2502 | { 2503 | "name": "Arne Blankerts", 2504 | "email": "arne@blankerts.de", 2505 | "role": "Developer" 2506 | } 2507 | ], 2508 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2509 | "time": "2017-04-07T12:08:54+00:00" 2510 | }, 2511 | { 2512 | "name": "webmozart/assert", 2513 | "version": "1.3.0", 2514 | "source": { 2515 | "type": "git", 2516 | "url": "https://github.com/webmozart/assert.git", 2517 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a" 2518 | }, 2519 | "dist": { 2520 | "type": "zip", 2521 | "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", 2522 | "reference": "0df1908962e7a3071564e857d86874dad1ef204a", 2523 | "shasum": "" 2524 | }, 2525 | "require": { 2526 | "php": "^5.3.3 || ^7.0" 2527 | }, 2528 | "require-dev": { 2529 | "phpunit/phpunit": "^4.6", 2530 | "sebastian/version": "^1.0.1" 2531 | }, 2532 | "type": "library", 2533 | "extra": { 2534 | "branch-alias": { 2535 | "dev-master": "1.3-dev" 2536 | } 2537 | }, 2538 | "autoload": { 2539 | "psr-4": { 2540 | "Webmozart\\Assert\\": "src/" 2541 | } 2542 | }, 2543 | "notification-url": "https://packagist.org/downloads/", 2544 | "license": [ 2545 | "MIT" 2546 | ], 2547 | "authors": [ 2548 | { 2549 | "name": "Bernhard Schussek", 2550 | "email": "bschussek@gmail.com" 2551 | } 2552 | ], 2553 | "description": "Assertions to validate method input/output with nice error messages.", 2554 | "keywords": [ 2555 | "assert", 2556 | "check", 2557 | "validate" 2558 | ], 2559 | "time": "2018-01-29T19:49:41+00:00" 2560 | } 2561 | ], 2562 | "aliases": [], 2563 | "minimum-stability": "dev", 2564 | "stability-flags": { 2565 | "10up/wp_mock": 20 2566 | }, 2567 | "prefer-stable": true, 2568 | "prefer-lowest": false, 2569 | "platform": [], 2570 | "platform-dev": [] 2571 | } 2572 | --------------------------------------------------------------------------------