diff --git a/.editorconfig b/.editorconfig index 12bcb27e4ee7bbca7f74423a87d205926d2ad1d2..686c443ceca7e4aaccd384ba6b36afe43337104f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,5 +13,5 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[{composer.json,composer.lock}] +[composer.{json,lock}] indent_size = 4 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..a37894e8e43bf14c2e77e71c713fa0c4f714be38 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,61 @@ +# Drupal git normalization +# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html +# @see https://www.drupal.org/node/1542048 + +# Normally these settings would be done with macro attributes for improved +# readability and easier maintenance. However macros can only be defined at the +# repository root directory. Drupal avoids making any assumptions about where it +# is installed. + +# Define text file attributes. +# - Treat them as text. +# - Ensure no CRLF line-endings, neither on checkout nor on checkin. +# - Detect whitespace errors. +# - Exposed by default in `git diff --color` on the CLI. +# - Validate with `git diff --check`. +# - Deny applying with `git apply --whitespace=error-all`. +# - Fix automatically with `git apply --whitespace=fix`. + +*.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html +*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php +*.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 +*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 + +# Define binary file attributes. +# - Do not treat them as text. +# - Include binary diff in patches instead of "binary files differ." +*.eot -text diff +*.exe -text diff +*.gif -text diff +*.gz -text diff +*.ico -text diff +*.jpeg -text diff +*.jpg -text diff +*.otf -text diff +*.phar -text diff +*.png -text diff +*.svgz -text diff +*.ttf -text diff +*.woff -text diff +*.woff2 -text diff diff --git a/composer.json b/composer.json index 1360db06d272c622192a2e216a9ad172fe5a1d0f..2348c7adb57e7b77fc6737d9f7b91a2a48600f63 100644 --- a/composer.json +++ b/composer.json @@ -86,7 +86,6 @@ "desandro/imagesloaded": "4.1.4", "desandro/masonry": "4.2", "dimsemenov/magnific-popup": "1.1", - "drupal-composer/drupal-scaffold": "2.5.4", "drupal/address": "1.1", "drupal/addtocalendar": "3.2", "drupal/admin_toolbar": "2.4", @@ -106,6 +105,7 @@ "drupal/config_update": "1.5", "drupal/console": "1.9.7", "drupal/content_access": "1.0-alpha1", + "drupal/core-composer-scaffold": "^9.0", "drupal/core-recommended": "8.9.10", "drupal/crop": "2.1", "drupal/ctools": "3.4", @@ -192,7 +192,6 @@ "gdsmith/jquery.easing": "1.4.1", "oomphinc/composer-installers-extender": "2.0", "pantheon-systems/quicksilver-pushback": "1.0.1", - "rvtraveller/qs-composer-installer": "1.1", "zaporylie/composer-drupal-optimizations": "1.1" }, "require-dev": {}, @@ -255,18 +254,19 @@ }, "drupal-scaffold": { "source": "https://raw.githubusercontent.com/pantheon-systems/drops-8-scaffolding/{version}/{path}", - "includes": [ - "sites/default/default.services.pantheon.preproduction.yml", - "sites/default/settings.pantheon.php" - ], - "excludes": [ - ".csslintrc", - ".editorconfig", - ".eslintignore", - ".eslintrc.json", - ".htaccess", - "web.config" - ] + "locations": { + "web-root": "web/" + }, + "file-mapping": { + "[web-root]/INSTALL.txt": false, + "[web-root]/README.txt": false, + "[web-root]/example.gitignore": false, + "[web-root]/modules/README.txt": false, + "[web-root]/profiles/README.txt": false, + "[web-root]/sites/README.txt": false, + "[web-root]/themes/README.txt": false, + "[web-root]/web.config": false + } }, "patches": { "drupal/core": { diff --git a/composer.lock b/composer.lock index 63649e18a420f79f987d62e8f8c438fd22125c3c..49f64243a65fc66304d8f6760c5e08a60698d75e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d70eba8d9113b670ca935392605877f5", + "content-hash": "df313a5863c9258df18719ef6cfe21e0", "packages": [ { "name": "alchemy/zippy", @@ -1970,51 +1970,6 @@ ], "time": "2019-06-08T11:03:04+00:00" }, - { - "name": "drupal-composer/drupal-scaffold", - "version": "2.5.4", - "source": { - "type": "git", - "url": "https://github.com/drupal-composer/drupal-scaffold.git", - "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal-composer/drupal-scaffold/zipball/fc6bf4ceecb5d47327f54d48d4d4f67b17da956d", - "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0.0", - "composer/semver": "^1.4", - "php": ">=5.4.5" - }, - "require-dev": { - "composer/composer": "dev-master", - "g1a/composer-test-scenarios": "^2.1.0", - "phpunit/phpunit": "^6", - "squizlabs/php_codesniffer": "^2.8" - }, - "type": "composer-plugin", - "extra": { - "class": "DrupalComposer\\DrupalScaffold\\Plugin", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "DrupalComposer\\DrupalScaffold\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core", - "abandoned": "drupal/core-composer-scaffold", - "time": "2018-07-27T10:07:07+00:00" - }, { "name": "drupal/address", "version": "1.1.0", @@ -3643,6 +3598,53 @@ "description": "Drupal is an open source content management platform powering millions of websites and applications.", "time": "2020-11-26T01:49:15+00:00" }, + { + "name": "drupal/core-composer-scaffold", + "version": "9.0.9", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-composer-scaffold.git", + "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c017751a6bb9b2ffe56f0fab607ba67c21604bfd", + "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1 || ^2", + "php": ">=7.3.0" + }, + "conflict": { + "drupal-composer/drupal-scaffold": "*" + }, + "require-dev": { + "composer/composer": "^1.8@stable" + }, + "type": "composer-plugin", + "extra": { + "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\Scaffold\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "A flexible Composer project scaffold builder.", + "homepage": "https://www.drupal.org/project/drupal", + "keywords": [ + "drupal" + ], + "time": "2020-08-07T22:30:24+00:00" + }, { "name": "drupal/core-recommended", "version": "8.9.10", @@ -10982,44 +10984,6 @@ ], "time": "2020-04-22T17:19:51+00:00" }, - { - "name": "rvtraveller/qs-composer-installer", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/rvtraveller/qs-composer-installer.git", - "reference": "20d6f4397e4b77599646767ad030092a60f5f92a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rvtraveller/qs-composer-installer/zipball/20d6f4397e4b77599646767ad030092a60f5f92a", - "reference": "20d6f4397e4b77599646767ad030092a60f5f92a", - "shasum": "" - }, - "require": { - "composer-plugin-api": "~1.0", - "composer/installers": "~1.0" - }, - "require-dev": { - "composer/composer": "~1.0@dev" - }, - "type": "composer-plugin", - "extra": { - "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin" - }, - "autoload": { - "psr-4": { - "rvtraveller\\QuicksilverComposerInstaller\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Install Quicksilver modules for Pantheon into custom locations.", - "homepage": "https://github.com/rvtraveller/qs-composer-installer", - "time": "2017-01-27T20:40:31+00:00" - }, { "name": "simplesamlphp/saml2", "version": "v3.4.5", diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 20c8bdc6fa8204e7eac6fd9763bc1305147f8eee..fde1ea61316fecf20e0bfbcb4e726783c3f5fda0 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -747,12 +747,6 @@ 'DrupalCodeGenerator\\Twig\\TwigSortSetNode' => $vendorDir . '/chi-teck/drupal-code-generator/src/Twig/TwigSortSetNode.php', 'DrupalCodeGenerator\\Twig\\TwigSortTokenParser' => $vendorDir . '/chi-teck/drupal-code-generator/src/Twig/TwigSortTokenParser.php', 'DrupalCodeGenerator\\Utils' => $vendorDir . '/chi-teck/drupal-code-generator/src/Utils.php', - 'DrupalComposer\\DrupalScaffold\\CommandProvider' => $vendorDir . '/drupal-composer/drupal-scaffold/src/CommandProvider.php', - 'DrupalComposer\\DrupalScaffold\\DrupalScaffoldCommand' => $vendorDir . '/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php', - 'DrupalComposer\\DrupalScaffold\\FileFetcher' => $vendorDir . '/drupal-composer/drupal-scaffold/src/FileFetcher.php', - 'DrupalComposer\\DrupalScaffold\\Handler' => $vendorDir . '/drupal-composer/drupal-scaffold/src/Handler.php', - 'DrupalComposer\\DrupalScaffold\\Plugin' => $vendorDir . '/drupal-composer/drupal-scaffold/src/Plugin.php', - 'DrupalComposer\\DrupalScaffold\\PrestissimoFileFetcher' => $vendorDir . '/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php', 'DrupalFinder\\DrupalFinder' => $vendorDir . '/webflo/drupal-finder/src/DrupalFinder.php', 'DrupalProject\\composer\\ScriptHandler' => $baseDir . '/scripts/composer/ScriptHandler.php', 'Drupal\\Component\\Annotation\\AnnotationBase' => $baseDir . '/web/core/lib/Drupal/Component/Annotation/AnnotationBase.php', @@ -911,6 +905,29 @@ 'Drupal\\Component\\Uuid\\Uuid' => $baseDir . '/web/core/lib/Drupal/Component/Uuid/Uuid.php', 'Drupal\\Component\\Uuid\\UuidInterface' => $baseDir . '/web/core/lib/Drupal/Component/Uuid/UuidInterface.php', 'Drupal\\Component\\Version\\Constraint' => $baseDir . '/web/core/lib/Drupal/Component/Version/Constraint.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\AllowedPackages' => $vendorDir . '/drupal/core-composer-scaffold/AllowedPackages.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\CommandProvider' => $vendorDir . '/drupal/core-composer-scaffold/CommandProvider.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ComposerScaffoldCommand' => $vendorDir . '/drupal/core-composer-scaffold/ComposerScaffoldCommand.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\GenerateAutoloadReferenceFile' => $vendorDir . '/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Git' => $vendorDir . '/drupal/core-composer-scaffold/Git.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Handler' => $vendorDir . '/drupal/core-composer-scaffold/Handler.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Interpolator' => $vendorDir . '/drupal/core-composer-scaffold/Interpolator.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ManageGitIgnore' => $vendorDir . '/drupal/core-composer-scaffold/ManageGitIgnore.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ManageOptions' => $vendorDir . '/drupal/core-composer-scaffold/ManageOptions.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AbstractOperation' => $vendorDir . '/drupal/core-composer-scaffold/Operations/AbstractOperation.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AppendOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/AppendOp.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationData' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationData.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationFactory' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationFactory.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationInterface' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationInterface.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ReplaceOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ReplaceOp.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldFileCollection' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldResult' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ScaffoldResult.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\SkipOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/SkipOp.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Plugin' => $vendorDir . '/drupal/core-composer-scaffold/Plugin.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\PostPackageEventListenerInterface' => $vendorDir . '/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFileInfo' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldFileInfo.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFilePath' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldFilePath.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldOptions' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldOptions.php', 'Drupal\\Console\\Annotations\\DrupalCommand' => $vendorDir . '/drupal/console/src/Annotations/DrupalCommand.php', 'Drupal\\Console\\Annotations\\DrupalCommandAnnotationReader' => $vendorDir . '/drupal/console/src/Annotations/DrupalCommandAnnotationReader.php', 'Drupal\\Console\\Application' => $vendorDir . '/drupal/console/src/Application.php', @@ -6010,8 +6027,6 @@ 'enshrined\\svgSanitize\\data\\AttributeInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/AttributeInterface.php', 'enshrined\\svgSanitize\\data\\TagInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/TagInterface.php', 'enshrined\\svgSanitize\\data\\XPath' => $vendorDir . '/enshrined/svg-sanitize/src/data/XPath.php', - 'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstaller' => $vendorDir . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php', - 'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin' => $vendorDir . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php', 'zaporylie\\ComposerDrupalOptimizations\\Cache' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Cache.php', 'zaporylie\\ComposerDrupalOptimizations\\Plugin' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Plugin.php', 'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 4ad8fd14996b2690b614f9ed017e21ffc584475c..f6474efec07bfc548f08283a8fb5aa3c12ccca55 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -7,7 +7,6 @@ return array( 'zaporylie\\ComposerDrupalOptimizations\\' => array($vendorDir . '/zaporylie/composer-drupal-optimizations/src'), - 'rvtraveller\\QuicksilverComposerInstaller\\' => array($vendorDir . '/rvtraveller/qs-composer-installer/src'), 'enshrined\\svgSanitize\\' => array($vendorDir . '/enshrined/svg-sanitize/src'), 'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'), 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), @@ -85,8 +84,8 @@ 'Drupal\\Console\\Core\\' => array($vendorDir . '/drupal/console-core/src'), 'Drupal\\Console\\Composer\\Plugin\\' => array($vendorDir . '/drupal/console-extend-plugin/src'), 'Drupal\\Console\\' => array($vendorDir . '/drupal/console/src'), + 'Drupal\\Composer\\Plugin\\Scaffold\\' => array($vendorDir . '/drupal/core-composer-scaffold'), 'Drupal\\Component\\' => array($baseDir . '/web/core/lib/Drupal/Component'), - 'DrupalComposer\\DrupalScaffold\\' => array($vendorDir . '/drupal-composer/drupal-scaffold/src'), 'DrupalCodeGenerator\\' => array($vendorDir . '/chi-teck/drupal-code-generator/src'), 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index cbad37edc34ac158e37a8a9342656bd39dc55577..1509b8596240786f76cd46ce352476951ae13dd0 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -48,10 +48,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 array ( 'zaporylie\\ComposerDrupalOptimizations\\' => 38, ), - 'r' => - array ( - 'rvtraveller\\QuicksilverComposerInstaller\\' => 41, - ), 'e' => array ( 'enshrined\\svgSanitize\\' => 22, @@ -176,8 +172,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Drupal\\Console\\Core\\' => 20, 'Drupal\\Console\\Composer\\Plugin\\' => 31, 'Drupal\\Console\\' => 15, + 'Drupal\\Composer\\Plugin\\Scaffold\\' => 32, 'Drupal\\Component\\' => 17, - 'DrupalComposer\\DrupalScaffold\\' => 30, 'DrupalCodeGenerator\\' => 20, 'Doctrine\\Common\\Lexer\\' => 22, 'Doctrine\\Common\\Inflector\\' => 26, @@ -211,10 +207,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 array ( 0 => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src', ), - 'rvtraveller\\QuicksilverComposerInstaller\\' => - array ( - 0 => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src', - ), 'enshrined\\svgSanitize\\' => array ( 0 => __DIR__ . '/..' . '/enshrined/svg-sanitize/src', @@ -523,13 +515,13 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 array ( 0 => __DIR__ . '/..' . '/drupal/console/src', ), - 'Drupal\\Component\\' => + 'Drupal\\Composer\\Plugin\\Scaffold\\' => array ( - 0 => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component', + 0 => __DIR__ . '/..' . '/drupal/core-composer-scaffold', ), - 'DrupalComposer\\DrupalScaffold\\' => + 'Drupal\\Component\\' => array ( - 0 => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src', + 0 => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component', ), 'DrupalCodeGenerator\\' => array ( @@ -1424,12 +1416,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'DrupalCodeGenerator\\Twig\\TwigSortSetNode' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Twig/TwigSortSetNode.php', 'DrupalCodeGenerator\\Twig\\TwigSortTokenParser' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Twig/TwigSortTokenParser.php', 'DrupalCodeGenerator\\Utils' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Utils.php', - 'DrupalComposer\\DrupalScaffold\\CommandProvider' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/CommandProvider.php', - 'DrupalComposer\\DrupalScaffold\\DrupalScaffoldCommand' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php', - 'DrupalComposer\\DrupalScaffold\\FileFetcher' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/FileFetcher.php', - 'DrupalComposer\\DrupalScaffold\\Handler' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/Handler.php', - 'DrupalComposer\\DrupalScaffold\\Plugin' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/Plugin.php', - 'DrupalComposer\\DrupalScaffold\\PrestissimoFileFetcher' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php', 'DrupalFinder\\DrupalFinder' => __DIR__ . '/..' . '/webflo/drupal-finder/src/DrupalFinder.php', 'DrupalProject\\composer\\ScriptHandler' => __DIR__ . '/../..' . '/scripts/composer/ScriptHandler.php', 'Drupal\\Component\\Annotation\\AnnotationBase' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Annotation/AnnotationBase.php', @@ -1588,6 +1574,29 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'Drupal\\Component\\Uuid\\Uuid' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Uuid/Uuid.php', 'Drupal\\Component\\Uuid\\UuidInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Uuid/UuidInterface.php', 'Drupal\\Component\\Version\\Constraint' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Version/Constraint.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\AllowedPackages' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/AllowedPackages.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\CommandProvider' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/CommandProvider.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ComposerScaffoldCommand' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ComposerScaffoldCommand.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\GenerateAutoloadReferenceFile' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Git' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Git.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Handler' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Handler.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Interpolator' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Interpolator.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ManageGitIgnore' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ManageGitIgnore.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ManageOptions' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ManageOptions.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AbstractOperation' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/AbstractOperation.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AppendOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/AppendOp.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationData' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationData.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationFactory' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationFactory.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationInterface' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationInterface.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ReplaceOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ReplaceOp.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldFileCollection' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldResult' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ScaffoldResult.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\SkipOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/SkipOp.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\Plugin' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Plugin.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\PostPackageEventListenerInterface' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFileInfo' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldFileInfo.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFilePath' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldFilePath.php', + 'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldOptions' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldOptions.php', 'Drupal\\Console\\Annotations\\DrupalCommand' => __DIR__ . '/..' . '/drupal/console/src/Annotations/DrupalCommand.php', 'Drupal\\Console\\Annotations\\DrupalCommandAnnotationReader' => __DIR__ . '/..' . '/drupal/console/src/Annotations/DrupalCommandAnnotationReader.php', 'Drupal\\Console\\Application' => __DIR__ . '/..' . '/drupal/console/src/Application.php', @@ -6687,8 +6696,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530 'enshrined\\svgSanitize\\data\\AttributeInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/AttributeInterface.php', 'enshrined\\svgSanitize\\data\\TagInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/TagInterface.php', 'enshrined\\svgSanitize\\data\\XPath' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/XPath.php', - 'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstaller' => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php', - 'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin' => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php', 'zaporylie\\ComposerDrupalOptimizations\\Cache' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Cache.php', 'zaporylie\\ComposerDrupalOptimizations\\Plugin' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Plugin.php', 'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index dcaaf3e86c2ad6efee47da9b1f279d8130939ad0..18ddc716df43dc927ff15e2a38502e6b19945b38 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -2029,53 +2029,6 @@ "php" ] }, - { - "name": "drupal-composer/drupal-scaffold", - "version": "2.5.4", - "version_normalized": "2.5.4.0", - "source": { - "type": "git", - "url": "https://github.com/drupal-composer/drupal-scaffold.git", - "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/drupal-composer/drupal-scaffold/zipball/fc6bf4ceecb5d47327f54d48d4d4f67b17da956d", - "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0.0", - "composer/semver": "^1.4", - "php": ">=5.4.5" - }, - "require-dev": { - "composer/composer": "dev-master", - "g1a/composer-test-scenarios": "^2.1.0", - "phpunit/phpunit": "^6", - "squizlabs/php_codesniffer": "^2.8" - }, - "time": "2018-07-27T10:07:07+00:00", - "type": "composer-plugin", - "extra": { - "class": "DrupalComposer\\DrupalScaffold\\Plugin", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "DrupalComposer\\DrupalScaffold\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core", - "abandoned": "drupal/core-composer-scaffold" - }, { "name": "drupal/address", "version": "1.1.0", @@ -3754,6 +3707,55 @@ ], "description": "Drupal is an open source content management platform powering millions of websites and applications." }, + { + "name": "drupal/core-composer-scaffold", + "version": "9.0.9", + "version_normalized": "9.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/drupal/core-composer-scaffold.git", + "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c017751a6bb9b2ffe56f0fab607ba67c21604bfd", + "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1 || ^2", + "php": ">=7.3.0" + }, + "conflict": { + "drupal-composer/drupal-scaffold": "*" + }, + "require-dev": { + "composer/composer": "^1.8@stable" + }, + "time": "2020-08-07T22:30:24+00:00", + "type": "composer-plugin", + "extra": { + "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\Scaffold\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "A flexible Composer project scaffold builder.", + "homepage": "https://www.drupal.org/project/drupal", + "keywords": [ + "drupal" + ] + }, { "name": "drupal/core-recommended", "version": "8.9.10", @@ -11337,46 +11339,6 @@ "xmldsig" ] }, - { - "name": "rvtraveller/qs-composer-installer", - "version": "1.1", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/rvtraveller/qs-composer-installer.git", - "reference": "20d6f4397e4b77599646767ad030092a60f5f92a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rvtraveller/qs-composer-installer/zipball/20d6f4397e4b77599646767ad030092a60f5f92a", - "reference": "20d6f4397e4b77599646767ad030092a60f5f92a", - "shasum": "" - }, - "require": { - "composer-plugin-api": "~1.0", - "composer/installers": "~1.0" - }, - "require-dev": { - "composer/composer": "~1.0@dev" - }, - "time": "2017-01-27T20:40:31+00:00", - "type": "composer-plugin", - "extra": { - "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "rvtraveller\\QuicksilverComposerInstaller\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Install Quicksilver modules for Pantheon into custom locations.", - "homepage": "https://github.com/rvtraveller/qs-composer-installer" - }, { "name": "simplesamlphp/saml2", "version": "v3.4.5", diff --git a/vendor/drupal-composer/drupal-scaffold/.editorconfig b/vendor/drupal-composer/drupal-scaffold/.editorconfig deleted file mode 100644 index 12bcb27e4ee7bbca7f74423a87d205926d2ad1d2..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# Drupal editor configuration normalization -# @see http://editorconfig.org/ - -# This is the top-most .editorconfig file; do not search in parent directories. -root = true - -# All files. -[*] -end_of_line = LF -indent_style = space -indent_size = 2 -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[{composer.json,composer.lock}] -indent_size = 4 diff --git a/vendor/drupal-composer/drupal-scaffold/.gitignore b/vendor/drupal-composer/drupal-scaffold/.gitignore deleted file mode 100644 index 22d0d82f8095e9c0ed572776afb47f9ca293ce00..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vendor diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install deleted file mode 100755 index 8e691b0c156324bb73b7050e60222bab8fcce703..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -SCENARIO=$1 -DEPENDENCIES=${2-install} - -# Convert the aliases 'highest', 'lowest' and 'lock' to -# the corresponding composer command to run. -case $DEPENDENCIES in - highest) - DEPENDENCIES=update - ;; - lowest) - DEPENDENCIES='update --prefer-lowest' - ;; - lock|default|"") - DEPENDENCIES=install - ;; -esac - -original_name=scenarios -recommended_name=".scenarios.lock" - -base="$original_name" -if [ -d "$recommended_name" ] ; then - base="$recommended_name" -fi - -# If scenario is not specified, install the lockfile at -# the root of the project. -dir="$base/${SCENARIO}" -if [ -z "$SCENARIO" ] || [ "$SCENARIO" == "default" ] ; then - SCENARIO=default - dir=. -fi - -# Test to make sure that the selected scenario exists. -if [ ! -d "$dir" ] ; then - echo "Requested scenario '${SCENARIO}' does not exist." - exit 1 -fi - -echo -echo "::" -echo ":: Switch to ${SCENARIO} scenario" -echo "::" -echo - -set -ex - -composer -n validate --working-dir=$dir --no-check-all --ansi -composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts -composer -n --working-dir=$dir info diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore deleted file mode 100644 index 22d0d82f8095e9c0ed572776afb47f9ca293ce00..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore +++ /dev/null @@ -1 +0,0 @@ -vendor diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json deleted file mode 100644 index 52d5a59b1364bb31dd5668ff7074768e87239b95..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "drupal-composer/drupal-scaffold", - "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core", - "type": "composer-plugin", - "license": "GPL-2.0-or-later", - "require": { - "php": ">=5.4.5", - "composer-plugin-api": "^1.0.0", - "composer/semver": "^1.4" - }, - "autoload": { - "psr-4": { - "DrupalComposer\\DrupalScaffold\\": "src/" - } - }, - "extra": { - "class": "DrupalComposer\\DrupalScaffold\\Plugin", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "scripts": { - "cs": "phpcs --standard=PSR2 -n src", - "cbf": "phpcbf --standard=PSR2 -n src", - "unit": "phpunit --colors=always", - "lint": [ - "find src -name '*.php' -print0 | xargs -0 -n1 php -l" - ], - "test": [ - "@lint", - "@unit" - ], - "scenario": ".scenarios.lock/install", - "post-update-cmd": [ - "create-scenario phpunit4 'phpunit/phpunit:^4.8.36' --platform-php '5.5.27'" - ] - }, - "config": { - "optimize-autoloader": true, - "sort-packages": true, - "platform": { - "php": "5.5.27" - }, - "vendor-dir": "../../vendor" - }, - "require-dev": { - "composer/composer": "dev-master", - "g1a/composer-test-scenarios": "^2.1.0", - "phpunit/phpunit": "^4.8.36", - "squizlabs/php_codesniffer": "^2.8" - }, - "minimum-stability": "stable" -} diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock deleted file mode 100644 index 084a62b1e544d4725b2c8fa9c671ccc45b5fc85b..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock +++ /dev/null @@ -1,2153 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "445ab29fa63d93c2f4ff7da62f90de16", - "packages": [ - { - "name": "composer/semver", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "time": "2016-08-30T16:08:34+00:00" - } - ], - "packages-dev": [ - { - "name": "composer/ca-bundle", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "time": "2018-03-29T19:57:20+00:00" - }, - { - "name": "composer/composer", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/837ad7c14e8ce364296e0d0600d04c415b6e359d", - "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "time": "2018-06-07T09:15:18+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b", - "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "time": "2018-04-30T10:33:04+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "time": "2018-04-11T15:42:36+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14T21:17:01+00:00" - }, - { - "name": "g1a/composer-test-scenarios", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/g1a/composer-test-scenarios.git", - "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/4c2b990712dbcb87a0ab618e46f908c731c3a0bb", - "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb", - "shasum": "" - }, - "bin": [ - "scripts/create-scenario", - "scripts/dependency-licenses", - "scripts/install-scenario" - ], - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Useful scripts for testing multiple sets of Composer dependencies.", - "time": "2018-06-10T21:56:28+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.7", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "time": "2018-02-14T22:26:30+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157", - "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.3.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-08T06:39:58+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773", - "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2017-06-03T08:32:36+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.7.6", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2018-04-18T13:57:24+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-10-06T15:47:00+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2017-11-27T13:52:08+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2017-02-26T11:10:40+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.12", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2017-12-04T08:55:13+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "4.8.36", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", - "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "~2.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.2.2", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.3", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.8.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2017-06-21T08:07:12+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-10-02T06:51:40+00:00" - }, - { - "name": "psr/log", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2016-10-10T12:19:37+00:00" - }, - { - "name": "sebastian/comparator", - "version": "1.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2017-01-29T09:50:25+00:00" - }, - { - "name": "sebastian/diff", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2017-05-22T07:24:03+00:00" - }, - { - "name": "sebastian/environment", - "version": "1.3.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2016-08-18T05:49:44+00:00" - }, - { - "name": "sebastian/exporter", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2016-06-17T09:04:28+00:00" - }, - { - "name": "sebastian/global-state", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2015-10-12T03:26:01+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", - "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-10-03T07:41:43+00:00" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21T13:59:46+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "time": "2018-01-24T12:46:19+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phra" - ], - "time": "2015-10-13T18:44:15+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", - "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "bin": [ - "scripts/phpcs", - "scripts/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2017-05-22T02:43:20+00:00" - }, - { - "name": "symfony/console", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/debug", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T14:03:39+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", - "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/finder", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "472a92f3df8b247b49ae364275fb32943b9656c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6", - "reference": "472a92f3df8b247b49ae364275fb32943b9656c6", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "time": "2018-04-30T19:57:29+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" - }, - { - "name": "symfony/process", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187", - "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/yaml", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", - "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2018-05-03T23:18:14+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2018-01-29T19:49:41+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "composer/composer": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.4.5" - }, - "platform-dev": [], - "platform-overrides": { - "php": "5.5.27" - } -} diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src deleted file mode 120000 index 929cb3dc9ba04d657e86ebde2d29661b78bdd85c..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src +++ /dev/null @@ -1 +0,0 @@ -../../src \ No newline at end of file diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests deleted file mode 120000 index c2ebfe530b4e16023832427b3134004e19542bd6..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests +++ /dev/null @@ -1 +0,0 @@ -../../tests \ No newline at end of file diff --git a/vendor/drupal-composer/drupal-scaffold/.travis.yml b/vendor/drupal-composer/drupal-scaffold/.travis.yml deleted file mode 100644 index ba2f61edd18ad75859e73a7b2e3f272b8d68e6cb..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -language: php - -branches: - # Only test the master branch and SemVer tags. - only: - - master - - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ - -matrix: - fast_finish: true - include: - - php: 7.2 - env: 'DEPENCENCIES=highest' - - php: 7.2 - - php: 7.1 - - php: 7.0.11 - - php: 5.6 - env: 'SCENARIO=phpunit4' - - php: 5.5 - env: 'SCENARIO=phpunit4' - - php: 5.5 - env: 'SCENARIO=phpunit4 DEPENDENCIES=lowest' - -sudo: false - -git: - depth: 10000 - -before_install: - - phpenv config-rm xdebug.ini - - composer --verbose self-update - - composer --version - -install: - - 'composer scenario "${SCENARIO}" "${DEPENDENCIES}"' - -before_script: - - git config --global user.email "travisci@example.com" - - git config --global user.name "Travis CI Test" - -script: - - composer test diff --git a/vendor/drupal-composer/drupal-scaffold/README.md b/vendor/drupal-composer/drupal-scaffold/README.md deleted file mode 100644 index 03e14933ccabdf9d37bad30245f92768ef3e6d95..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# drupal-scaffold - -[](https://travis-ci.org/drupal-composer/drupal-scaffold) - -Composer plugin for automatically downloading Drupal scaffold files (like -`index.php`, `update.php`, …) when using `drupal/core` via Composer. - -It is recommended that the vendor directory be placed in its standard location -at the project root, outside of the Drupal root; however, the location of the -vendor directory and the name of the Drupal root may be placed in whatever -location suits the project. Drupal-scaffold will generate the autoload.php -file at the Drupal root to require the Composer-generated autoload file in the -vendor directory. - -## Usage - -Run `composer require drupal-composer/drupal-scaffold:dev-master` in your composer -project before installing or updating `drupal/core`. - -Once drupal-scaffold is required by your project, it will automatically update -your scaffold files whenever `composer update` changes the version of -`drupal/core` installed. - -## Configuration - -You can configure the plugin with providing some settings in the `extra` section -of your root `composer.json`. - -```json -{ - "extra": { - "drupal-scaffold": { - "source": "https://cgit.drupalcode.org/drupal/plain/{path}?h={version}", - "excludes": [ - "google123.html", - "robots.txt" - ], - "includes": [ - "sites/default/example.settings.my.php" - ], - "initial": { - "sites/default/default.services.yml": "sites/default/services.yml", - "sites/default/default.settings.php": "sites/default/settings.php" - }, - "omit-defaults": false - } - } -} -``` -The `source` option may be used to specify the URL to download the -scaffold files from; the default source is drupal.org. The literal string -`{version}` in the `source` option is replaced with the current version of -Drupal core being updated prior to download. - -With the `drupal-scaffold` option `excludes`, you can provide additional paths -that should not be copied or overwritten. The plugin provides no excludes by -default. - -Default includes are provided by the plugin: -``` -.csslintrc -.editorconfig -.eslintignore -.eslintrc (Drupal <= 8.2.x) -.eslintrc.json (Drupal >= 8.3.x) -.gitattributes -.ht.router.php (Drupal >= 8.5.x) -.htaccess -index.php -robots.txt -sites/default/default.settings.php -sites/default/default.services.yml -sites/development.services.yml -sites/example.settings.local.php -sites/example.sites.php -update.php -web.config -``` - -When setting `omit-defaults` to `true`, neither the default excludes nor the -default includes will be provided; in this instance, only those files explicitly -listed in the `excludes` and `includes` options will be considered. If -`omit-defaults` is `false` (the default), then any items listed in `excludes` -or `includes` will be in addition to the usual defaults. - -The `initial` hash lists files that should be copied over only if they do not -exist in the destination. The key specifies the path to the source file, and -the value indicates the path to the destination file. - -## Limitation - -When using Composer to install or update the Drupal development branch, the -scaffold files are always taken from the HEAD of the branch (or, more -specifically, from the most recent development .tar.gz archive). This might -not be what you want when using an old development version (e.g. when the -version is fixed via composer.lock). To avoid problems, always commit your -scaffold files to the repository any time that composer.lock is committed. -Note that the correct scaffold files are retrieved when using a tagged release -of `drupal/core` (recommended). - -## Custom command - -The plugin by default is only downloading the scaffold files when installing or -updating `drupal/core`. If you want to call it manually, you have to add the -command callback to the `scripts`-section of your root `composer.json`, like this: - -```json -{ - "scripts": { - "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold" - } -} -``` - -After that you can manually download the scaffold files according to your -configuration by using `composer drupal-scaffold`. - -It is assumed that the scaffold files will be committed to the repository, to -ensure that the correct files are used on the CI server (see **Limitation**, -above). After running `composer install` for the first time commit the scaffold -files to your repository. diff --git a/vendor/drupal-composer/drupal-scaffold/composer.json b/vendor/drupal-composer/drupal-scaffold/composer.json deleted file mode 100644 index b08ff80fc86813034c4d7596018cda5bced5e1c6..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/composer.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "drupal-composer/drupal-scaffold", - "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core", - "type": "composer-plugin", - "license": "GPL-2.0-or-later", - "require": { - "php": ">=5.4.5", - "composer-plugin-api": "^1.0.0", - "composer/semver": "^1.4" - }, - "autoload": { - "psr-4": { - "DrupalComposer\\DrupalScaffold\\": "src/" - } - }, - "extra": { - "class": "DrupalComposer\\DrupalScaffold\\Plugin", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "scripts": { - "cs": "phpcs --standard=PSR2 -n src", - "cbf": "phpcbf --standard=PSR2 -n src", - "unit": "phpunit --colors=always", - "lint": [ - "find src -name '*.php' -print0 | xargs -0 -n1 php -l" - ], - "test": [ - "@lint", - "@unit" - ], - "scenario": ".scenarios.lock/install", - "post-update-cmd": [ - "create-scenario phpunit4 'phpunit/phpunit:^4.8.36' --platform-php '5.5.27'" - ] - }, - "config": { - "optimize-autoloader": true, - "sort-packages": true, - "platform": { - "php": "7.0.8" - } - }, - "require-dev": { - "composer/composer": "dev-master", - "g1a/composer-test-scenarios": "^2.1.0", - "phpunit/phpunit": "^6", - "squizlabs/php_codesniffer": "^2.8" - } -} diff --git a/vendor/drupal-composer/drupal-scaffold/composer.lock b/vendor/drupal-composer/drupal-scaffold/composer.lock deleted file mode 100644 index 707e504608cbb8332526ce0644bba70202f746a6..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/composer.lock +++ /dev/null @@ -1,2490 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "cc2cd84cd41c52965cd00f2e515bb6d3", - "packages": [ - { - "name": "composer/semver", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "time": "2016-08-30T16:08:34+00:00" - } - ], - "packages-dev": [ - { - "name": "composer/ca-bundle", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "time": "2018-03-29T19:57:20+00:00" - }, - { - "name": "composer/composer", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/837ad7c14e8ce364296e0d0600d04c415b6e359d", - "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "time": "2018-06-07T09:15:18+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b", - "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "time": "2018-04-30T10:33:04+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "time": "2018-04-11T15:42:36+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14T21:17:01+00:00" - }, - { - "name": "g1a/composer-test-scenarios", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/g1a/composer-test-scenarios.git", - "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/4c2b990712dbcb87a0ab618e46f908c731c3a0bb", - "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb", - "shasum": "" - }, - "bin": [ - "scripts/create-scenario", - "scripts/dependency-licenses", - "scripts/install-scenario" - ], - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Useful scripts for testing multiple sets of Composer dependencies.", - "time": "2018-06-10T21:56:28+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.7", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "time": "2018-02-14T22:26:30+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "time": "2017-10-19T19:58:43+00:00" - }, - { - "name": "phar-io/manifest", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" - }, - { - "name": "phar-io/version", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2017-07-14T14:27:02+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.7.6", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2018-04-18T13:57:24+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "5.3.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-xdebug": "^2.5.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2018-04-06T15:36:58+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2017-11-27T13:52:08+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2017-02-26T11:10:40+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2017-11-27T05:48:46+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "6.5.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.5", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2018-04-10T11:38:34+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3eaf040f20154d27d6da59ca2c6e28ac8fd56dce", - "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2018-05-29T13:50:43+00:00" - }, - { - "name": "psr/log", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2016-10-10T12:19:37+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" - }, - { - "name": "sebastian/comparator", - "version": "2.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2018-02-01T13:46:46+00:00" - }, - { - "name": "sebastian/diff", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2017-08-03T08:09:46+00:00" - }, - { - "name": "sebastian/environment", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2017-07-01T08:51:00+00:00" - }, - { - "name": "sebastian/exporter", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2017-04-03T13:19:02+00:00" - }, - { - "name": "sebastian/global-state", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2017-04-27T15:39:26+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "time": "2018-01-24T12:46:19+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phra" - ], - "time": "2015-10-13T18:44:15+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", - "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "bin": [ - "scripts/phpcs", - "scripts/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", - "keywords": [ - "phpcs", - "standards" - ], - "time": "2017-05-22T02:43:20+00:00" - }, - { - "name": "symfony/console", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/debug", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T14:03:39+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", - "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/finder", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "472a92f3df8b247b49ae364275fb32943b9656c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6", - "reference": "472a92f3df8b247b49ae364275fb32943b9656c6", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "time": "2018-04-30T19:57:29+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" - }, - { - "name": "symfony/process", - "version": "v3.4.11", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187", - "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2018-01-29T19:49:41+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "composer/composer": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.4.5" - }, - "platform-dev": [], - "platform-overrides": { - "php": "7.0.8" - } -} diff --git a/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist b/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist deleted file mode 100644 index ac16a3eafb32e04f8ff0e1895b3aeec355948492..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd" - backupGlobals="false" - colors="true" - bootstrap="vendor/autoload.php" - verbose="true" -> - <testsuites> - <testsuite name="drupal-scaffold"> - <directory>./tests/</directory> - </testsuite> - </testsuites> -</phpunit> diff --git a/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php b/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php deleted file mode 100644 index 485a2f531a99d575b44cea79068392cd9b340900..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold; - -use Composer\Command\BaseCommand; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; - -/** - * The "drupal:scaffold" command class. - * - * Downloads scaffold files and generates the autoload.php file. - */ -class DrupalScaffoldCommand extends BaseCommand { - - /** - * {@inheritdoc} - */ - protected function configure() { - parent::configure(); - $this - ->setName('drupal:scaffold') - ->setDescription('Update the Drupal scaffold files.'); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) { - $handler = new Handler($this->getComposer(), $this->getIO()); - $handler->downloadScaffold(); - // Generate the autoload.php file after generating the scaffold files. - $handler->generateAutoload(); - } - -} diff --git a/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php b/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php deleted file mode 100644 index 653e7f22f1a8bdb58f2d4ea30e8a5e5e8c162a3e..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php +++ /dev/null @@ -1,87 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold; - -use Composer\IO\IOInterface; -use Composer\Util\Filesystem; -use Composer\Util\RemoteFilesystem; - -/** - * Downloads all required files and writes it to the file system. - */ -class FileFetcher { - - /** - * @var \Composer\Util\RemoteFilesystem - */ - protected $remoteFilesystem; - - /** - * @var \Composer\IO\IOInterface - */ - protected $io; - - /** - * @var bool - * - * A boolean indicating if progress should be displayed. - */ - protected $progress; - - protected $source; - protected $filenames; - protected $fs; - - /** - * Constructs this FileFetcher object. - */ - public function __construct(RemoteFilesystem $remoteFilesystem, $source, IOInterface $io, $progress = TRUE) { - $this->remoteFilesystem = $remoteFilesystem; - $this->io = $io; - $this->source = $source; - $this->fs = new Filesystem(); - $this->progress = $progress; - } - - /** - * Downloads all required files and writes it to the file system. - */ - public function fetch($version, $destination, $override) { - foreach ($this->filenames as $sourceFilename => $filename) { - $target = "$destination/$filename"; - if ($override || !file_exists($target)) { - $url = $this->getUri($sourceFilename, $version); - $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename)); - if ($this->progress) { - $this->io->writeError(" - <info>$filename</info> (<comment>$url</comment>): ", FALSE); - $this->remoteFilesystem->copy($url, $url, $target, $this->progress); - // Used to put a new line because the remote file system does not put - // one. - $this->io->writeError(''); - } - else { - $this->remoteFilesystem->copy($url, $url, $target, $this->progress); - } - } - } - } - - /** - * Set filenames. - */ - public function setFilenames(array $filenames) { - $this->filenames = $filenames; - } - - /** - * Replace filename and version in the source pattern with their values. - */ - protected function getUri($filename, $version) { - $map = [ - '{path}' => $filename, - '{version}' => $version, - ]; - return str_replace(array_keys($map), array_values($map), $this->source); - } - -} diff --git a/vendor/drupal-composer/drupal-scaffold/src/Handler.php b/vendor/drupal-composer/drupal-scaffold/src/Handler.php deleted file mode 100644 index 1bdefe0f69135a0aaa134a458c30a65c5fe87cde..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/src/Handler.php +++ /dev/null @@ -1,411 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold; - -use Composer\Script\Event; -use Composer\Installer\PackageEvent; -use Composer\Plugin\CommandEvent; -use Composer\Composer; -use Composer\DependencyResolver\Operation\InstallOperation; -use Composer\DependencyResolver\Operation\UpdateOperation; -use Composer\EventDispatcher\EventDispatcher; -use Composer\IO\IOInterface; -use Composer\Package\PackageInterface; -use Composer\Semver\Semver; -use Composer\Util\Filesystem; -use Composer\Util\RemoteFilesystem; -use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem; - -/** - * Core class of the plugin, contains all logic which files should be fetched. - */ -class Handler { - - const PRE_DRUPAL_SCAFFOLD_CMD = 'pre-drupal-scaffold-cmd'; - const POST_DRUPAL_SCAFFOLD_CMD = 'post-drupal-scaffold-cmd'; - - /** - * @var \Composer\Composer - */ - protected $composer; - - /** - * @var \Composer\IO\IOInterface - */ - protected $io; - - /** - * @var bool - * - * A boolean indicating if progress should be displayed. - */ - protected $progress; - - /** - * @var \Composer\Package\PackageInterface - */ - protected $drupalCorePackage; - - /** - * Handler constructor. - * - * @param \Composer\Composer $composer - * @param \Composer\IO\IOInterface $io - */ - public function __construct(Composer $composer, IOInterface $io) { - $this->composer = $composer; - $this->io = $io; - $this->progress = TRUE; - - // Pre-load all of our sources so that we do not run up - // against problems in `composer update` operations. - $this->manualLoad(); - } - - protected function manualLoad() { - $src_dir = __DIR__; - - $classes = [ - 'CommandProvider', - 'DrupalScaffoldCommand', - 'FileFetcher', - 'PrestissimoFileFetcher', - ]; - - foreach ($classes as $src) { - if (!class_exists('\\DrupalComposer\\DrupalScaffold\\' . $src)) { - include "{$src_dir}/{$src}.php"; - } - } - } - - /** - * @param $operation - * @return mixed - */ - protected function getCorePackage($operation) { - if ($operation instanceof InstallOperation) { - $package = $operation->getPackage(); - } - elseif ($operation instanceof UpdateOperation) { - $package = $operation->getTargetPackage(); - } - if (isset($package) && $package instanceof PackageInterface && $package->getName() == 'drupal/core') { - return $package; - } - return NULL; - } - - /** - * Get the command options. - * - * @param \Composer\Plugin\CommandEvent $event - */ - public function onCmdBeginsEvent(CommandEvent $event) { - if ($event->getInput()->hasOption('no-progress')) { - $this->progress = !($event->getInput()->getOption('no-progress')); - } - else { - $this->progress = TRUE; - } - } - - /** - * Marks scaffolding to be processed after an install or update command. - * - * @param \Composer\Installer\PackageEvent $event - */ - public function onPostPackageEvent(PackageEvent $event) { - $package = $this->getCorePackage($event->getOperation()); - if ($package) { - // By explicitly setting the core package, the onPostCmdEvent() will - // process the scaffolding automatically. - $this->drupalCorePackage = $package; - } - } - - /** - * Post install command event to execute the scaffolding. - * - * @param \Composer\Script\Event $event - */ - public function onPostCmdEvent(Event $event) { - // Only install the scaffolding if drupal/core was installed, - // AND there are no scaffolding files present. - if (isset($this->drupalCorePackage)) { - $this->downloadScaffold(); - // Generate the autoload.php file after generating the scaffold files. - $this->generateAutoload(); - } - } - - /** - * Downloads drupal scaffold files for the current process. - */ - public function downloadScaffold() { - $drupalCorePackage = $this->getDrupalCorePackage(); - $webroot = realpath($this->getWebRoot()); - - // Collect options, excludes and settings files. - $options = $this->getOptions(); - $files = array_diff($this->getIncludes(), $this->getExcludes()); - - // Call any pre-scaffold scripts that may be defined. - $dispatcher = new EventDispatcher($this->composer, $this->io); - $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD); - - $version = $this->getDrupalCoreVersion($drupalCorePackage); - - $remoteFs = new RemoteFilesystem($this->io); - - $fetcher = new PrestissimoFileFetcher($remoteFs, $options['source'], $this->io, $this->progress, $this->composer->getConfig()); - $fetcher->setFilenames(array_combine($files, $files)); - $fetcher->fetch($version, $webroot, TRUE); - - $fetcher->setFilenames($this->getInitial()); - $fetcher->fetch($version, $webroot, FALSE); - - // Call post-scaffold scripts. - $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD); - } - - /** - * Generate the autoload file at the project root. Include the - * autoload file that Composer generated. - */ - public function generateAutoload() { - $vendorPath = $this->getVendorPath(); - $webroot = $this->getWebRoot(); - - // Calculate the relative path from the webroot (location of the - // project autoload.php) to the vendor directory. - $fs = new SymfonyFilesystem(); - $relativeVendorPath = $fs->makePathRelative($vendorPath, realpath($webroot)); - - $fs->dumpFile($webroot . "/autoload.php", $this->autoLoadContents($relativeVendorPath)); - } - - /** - * Build the contents of the autoload file. - * - * @return string - */ - protected function autoLoadContents($relativeVendorPath) { - $relativeVendorPath = rtrim($relativeVendorPath, '/'); - - $autoloadContents = <<<EOF -<?php - -/** - * @file - * Includes the autoloader created by Composer. - * - * This file was generated by drupal-composer/drupal-scaffold. - * https://github.com/drupal-composer/drupal-scaffold - * - * @see composer.json - * @see index.php - * @see core/install.php - * @see core/rebuild.php - * @see core/modules/statistics/statistics.php - */ - -return require __DIR__ . '/$relativeVendorPath/autoload.php'; - -EOF; - return $autoloadContents; - } - - /** - * Get the path to the 'vendor' directory. - * - * @return string - */ - public function getVendorPath() { - $config = $this->composer->getConfig(); - $filesystem = new Filesystem(); - $filesystem->ensureDirectoryExists($config->get('vendor-dir')); - $vendorPath = $filesystem->normalizePath(realpath($config->get('vendor-dir'))); - - return $vendorPath; - } - - /** - * Look up the Drupal core package object, or return it from where we cached - * it in the $drupalCorePackage field. - * - * @return \Composer\Package\PackageInterface - */ - public function getDrupalCorePackage() { - if (!isset($this->drupalCorePackage)) { - $this->drupalCorePackage = $this->getPackage('drupal/core'); - } - return $this->drupalCorePackage; - } - - /** - * Returns the Drupal core version for the given package. - * - * @param \Composer\Package\PackageInterface $drupalCorePackage - * - * @return string - */ - protected function getDrupalCoreVersion(PackageInterface $drupalCorePackage) { - $version = $drupalCorePackage->getPrettyVersion(); - if ($drupalCorePackage->getStability() == 'dev' && substr($version, -4) == '-dev') { - $version = substr($version, 0, -4); - return $version; - } - return $version; - } - - /** - * Retrieve the path to the web root. - * - * @return string - */ - public function getWebRoot() { - $drupalCorePackage = $this->getDrupalCorePackage(); - $installationManager = $this->composer->getInstallationManager(); - $corePath = $installationManager->getInstallPath($drupalCorePackage); - // Webroot is the parent path of the drupal core installation path. - $webroot = dirname($corePath); - - return $webroot; - } - - /** - * Retrieve a package from the current composer process. - * - * @param string $name - * Name of the package to get from the current composer installation. - * - * @return \Composer\Package\PackageInterface - */ - protected function getPackage($name) { - return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*'); - } - - /** - * Retrieve excludes from optional "extra" configuration. - * - * @return array - */ - protected function getExcludes() { - return $this->getNamedOptionList('excludes', 'getExcludesDefault'); - } - - /** - * Retrieve list of additional settings files from optional "extra" configuration. - * - * @return array - */ - protected function getIncludes() { - return $this->getNamedOptionList('includes', 'getIncludesDefault'); - } - - /** - * Retrieve list of initial files from optional "extra" configuration. - * - * @return array - */ - protected function getInitial() { - return $this->getNamedOptionList('initial', 'getInitialDefault'); - } - - /** - * Retrieve a named list of options from optional "extra" configuration. - * Respects 'omit-defaults', and either includes or does not include the - * default values, as requested. - * - * @return array - */ - protected function getNamedOptionList($optionName, $defaultFn) { - $options = $this->getOptions($this->composer); - $result = array(); - if (empty($options['omit-defaults'])) { - $result = $this->$defaultFn(); - } - $result = array_merge($result, (array) $options[$optionName]); - - return $result; - } - - /** - * Retrieve excludes from optional "extra" configuration. - * - * @return array - */ - protected function getOptions() { - $extra = $this->composer->getPackage()->getExtra() + ['drupal-scaffold' => []]; - $options = $extra['drupal-scaffold'] + [ - 'omit-defaults' => FALSE, - 'excludes' => [], - 'includes' => [], - 'initial' => [], - 'source' => 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', - // Github: https://raw.githubusercontent.com/drupal/drupal/{version}/{path} - ]; - return $options; - } - - /** - * Holds default excludes. - */ - protected function getExcludesDefault() { - return []; - } - - /** - * Holds default settings files list. - */ - protected function getIncludesDefault() { - $version = $this->getDrupalCoreVersion($this->getDrupalCorePackage()); - list($major, $minor) = explode('.', $version, 3); - $version = "$major.$minor"; - - /** - * Files from 8.3.x - * - * @see https://cgit.drupalcode.org/drupal/tree/?h=8.3.x - */ - $common = [ - '.csslintrc', - '.editorconfig', - '.eslintignore', - '.gitattributes', - '.htaccess', - 'index.php', - 'robots.txt', - 'sites/default/default.settings.php', - 'sites/default/default.services.yml', - 'sites/development.services.yml', - 'sites/example.settings.local.php', - 'sites/example.sites.php', - 'update.php', - 'web.config', - ]; - - // Version specific variations. - if (Semver::satisfies($version, '<8.3')) { - $common[] = '.eslintrc'; - } - if (Semver::satisfies($version, '>=8.3')) { - $common[] = '.eslintrc.json'; - } - if (Semver::satisfies($version, '>=8.5')) { - $common[] = '.ht.router.php'; - } - - sort($common); - return $common; - } - - /** - * Holds default initial files. - */ - protected function getInitialDefault() { - return []; - } - -} diff --git a/vendor/drupal-composer/drupal-scaffold/src/Plugin.php b/vendor/drupal-composer/drupal-scaffold/src/Plugin.php deleted file mode 100644 index 7833903f59449ea2c1290f5f3bdf613e63b6296b..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/src/Plugin.php +++ /dev/null @@ -1,103 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold; - -use Composer\Script\Event; -use Composer\Plugin\CommandEvent; -use Composer\Composer; -use Composer\EventDispatcher\EventSubscriberInterface; -use Composer\Installer\PackageEvent; -use Composer\Installer\PackageEvents; -use Composer\IO\IOInterface; -use Composer\Plugin\Capable; -use Composer\Plugin\PluginEvents; -use Composer\Plugin\PluginInterface; -use Composer\Script\ScriptEvents; - -/** - * Composer plugin for handling drupal scaffold. - */ -class Plugin implements PluginInterface, EventSubscriberInterface, Capable { - - /** - * @var \DrupalComposer\DrupalScaffold\Handler - */ - protected $handler; - - /** - * {@inheritdoc} - */ - public function activate(Composer $composer, IOInterface $io) { - // We use a separate PluginScripts object. This way we separate - // functionality and also avoid some debug issues with the plugin being - // copied on initialisation. - // @see \Composer\Plugin\PluginManager::registerPackage() - $this->handler = new Handler($composer, $io); - } - - /** - * {@inheritdoc} - */ - public function getCapabilities() { - return array( - 'Composer\Plugin\Capability\CommandProvider' => 'DrupalComposer\DrupalScaffold\CommandProvider', - ); - } - - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - return array( - PackageEvents::POST_PACKAGE_INSTALL => 'postPackage', - PackageEvents::POST_PACKAGE_UPDATE => 'postPackage', - ScriptEvents::POST_UPDATE_CMD => 'postCmd', - PluginEvents::COMMAND => 'cmdBegins', - ); - } - - /** - * Command begins event callback. - * - * @param \Composer\Plugin\CommandEvent $event - */ - public function cmdBegins(CommandEvent $event) { - $this->handler->onCmdBeginsEvent($event); - } - - /** - * Post package event behaviour. - * - * @param \Composer\Installer\PackageEvent $event - */ - public function postPackage(PackageEvent $event) { - $this->handler->onPostPackageEvent($event); - } - - /** - * Post command event callback. - * - * @param \Composer\Script\Event $event - */ - public function postCmd(Event $event) { - $this->handler->onPostCmdEvent($event); - } - - /** - * Script callback for putting in composer scripts to download the - * scaffold files. - * - * @param \Composer\Script\Event $event - * - * @deprecated since version 2.5.0, to be removed in 3.0. Use the command - * "composer drupal:scaffold" instead. - */ - public static function scaffold(Event $event) { - @trigger_error('\DrupalComposer\DrupalScaffold\Plugin::scaffold is deprecated since version 2.5.0 and will be removed in 3.0. Use "composer drupal:scaffold" instead.', E_USER_DEPRECATED); - $handler = new Handler($event->getComposer(), $event->getIO()); - $handler->downloadScaffold(); - // Generate the autoload.php file after generating the scaffold files. - $handler->generateAutoload(); - } - -} diff --git a/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php b/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php deleted file mode 100644 index 30b7c233c4ed5096be244e71208e0085e29a691d..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php +++ /dev/null @@ -1,87 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold; - -use Composer\Util\RemoteFilesystem; -use Composer\Config; -use Composer\IO\IOInterface; -use Hirak\Prestissimo\CopyRequest; -use Hirak\Prestissimo\CurlMulti; - -/** - * Extends the default FileFetcher and uses hirak/prestissimo for parallel - * downloads. - */ -class PrestissimoFileFetcher extends FileFetcher { - - /** - * @var \Composer\Config - */ - protected $config; - - /** - * Constructs this PrestissimoFileFetcher object. - */ - public function __construct(RemoteFilesystem $remoteFilesystem, $source, IOInterface $io, $progress = TRUE, Config $config) { - parent::__construct($remoteFilesystem, $source, $io, $progress); - $this->config = $config; - } - - /** - * {@inheritdoc} - */ - public function fetch($version, $destination, $override) { - if (class_exists(CurlMulti::class)) { - $this->fetchWithPrestissimo($version, $destination, $override); - return; - } - parent::fetch($version, $destination, $override); - } - - /** - * Fetch files in parallel. - */ - protected function fetchWithPrestissimo($version, $destination, $override) { - $requests = []; - - foreach ($this->filenames as $sourceFilename => $filename) { - $target = "$destination/$filename"; - if ($override || !file_exists($target)) { - $url = $this->getUri($sourceFilename, $version); - $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename)); - $requests[] = new CopyRequest($url, $target, FALSE, $this->io, $this->config); - } - } - - $successCnt = $failureCnt = 0; - $errors = []; - $totalCnt = count($requests); - if ($totalCnt == 0) { - return; - } - - $multi = new CurlMulti(); - $multi->setRequests($requests); - do { - $multi->setupEventLoop(); - $multi->wait(); - $result = $multi->getFinishedResults(); - $successCnt += $result['successCnt']; - $failureCnt += $result['failureCnt']; - if (isset($result['errors'])) { - $errors += $result['errors']; - } - if ($this->progress) { - foreach ($result['urls'] as $url) { - $this->io->writeError(" - Downloading <comment>$successCnt</comment>/<comment>$totalCnt</comment>: <info>$url</info>", TRUE); - } - } - } while ($multi->remain()); - - $urls = array_keys($errors); - if ($urls) { - throw new \Exception('Failed to download ' . implode(", ", $urls)); - } - } - -} diff --git a/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php b/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php deleted file mode 100644 index ea822f928e7d8e01f209d51f998cbdea9ba3c823..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold\Tests; - -use Composer\IO\NullIO; -use Composer\Util\Filesystem; -use Composer\Util\RemoteFilesystem; -use DrupalComposer\DrupalScaffold\FileFetcher; -use PHPUnit\Framework\TestCase; - -class FetcherTest extends TestCase { - - /** - * @var \Composer\Util\Filesystem - */ - protected $fs; - - /** - * @var string - */ - protected $tmpDir; - - /** - * @var string - */ - protected $rootDir; - - /** - * @var string - */ - protected $tmpReleaseTag; - - /** - * SetUp test. - */ - public function setUp() { - $this->rootDir = realpath(realpath(__DIR__ . '/..')); - - // Prepare temp directory. - $this->fs = new Filesystem(); - $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold'; - $this->ensureDirectoryExistsAndClear($this->tmpDir); - - chdir($this->tmpDir); - } - - /** - * Makes sure the given directory exists and has no content. - * - * @param string $directory - */ - protected function ensureDirectoryExistsAndClear($directory) { - if (is_dir($directory)) { - $this->fs->removeDirectory($directory); - } - mkdir($directory, 0777, TRUE); - } - - public function testFetch() { - $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', new NullIO()); - $fetcher->setFilenames([ - '.htaccess' => '.htaccess', - 'sites/default/default.settings.php' => 'sites/default/default.settings.php', - ]); - $fetcher->fetch('8.1.1', $this->tmpDir, TRUE); - $this->assertFileExists($this->tmpDir . '/.htaccess'); - $this->assertFileExists($this->tmpDir . '/sites/default/default.settings.php'); - } - - public function testInitialFetch() { - $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', new NullIO()); - $fetcher->setFilenames([ - 'sites/default/default.settings.php' => 'sites/default/settings.php', - ]); - $fetcher->fetch('8.1.1', $this->tmpDir, FALSE); - $this->assertFileExists($this->tmpDir . '/sites/default/settings.php'); - } - -} diff --git a/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php b/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php deleted file mode 100644 index a392e060d9556a8500275877ce878c5d9c095c00..0000000000000000000000000000000000000000 --- a/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php +++ /dev/null @@ -1,195 +0,0 @@ -<?php - -namespace DrupalComposer\DrupalScaffold\Tests; - -use Composer\Util\Filesystem; -use PHPUnit\Framework\TestCase; - -/** - * Tests composer plugin functionality. - */ -class PluginTest extends TestCase { - - /** - * @var \Composer\Util\Filesystem - */ - protected $fs; - - /** - * @var string - */ - protected $tmpDir; - - /** - * @var string - */ - protected $rootDir; - - /** - * @var string - */ - protected $tmpReleaseTag; - - /** - * SetUp test. - */ - public function setUp() { - $this->rootDir = realpath(realpath(__DIR__ . '/..')); - - // Prepare temp directory. - $this->fs = new Filesystem(); - $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold'; - $this->ensureDirectoryExistsAndClear($this->tmpDir); - - $this->writeTestReleaseTag(); - $this->writeComposerJSON(); - - chdir($this->tmpDir); - } - - /** - * TearDown. - * - * @return void - */ - public function tearDown() { - $this->fs->removeDirectory($this->tmpDir); - $this->git(sprintf('tag -d "%s"', $this->tmpReleaseTag)); - } - - /** - * Tests a simple composer install without core, but adding core later. - */ - public function testComposerInstallAndUpdate() { - $exampleScaffoldFile = $this->tmpDir . DIRECTORY_SEPARATOR . 'index.php'; - $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.'); - $this->composer('install --no-dev --prefer-dist'); - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . 'core', 'Drupal core is installed.'); - $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be automatically installed.'); - $this->fs->remove($exampleScaffoldFile); - $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.'); - $this->composer('drupal:scaffold'); - $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be installed by "drupal:scaffold" command.'); - - foreach (['8.0.1', '8.1.x-dev', '8.3.0', '8.5.x-dev'] as $version) { - // We touch a scaffold file, so we can check the file was modified after - // the scaffold update. - touch($exampleScaffoldFile); - $mtime_touched = filemtime($exampleScaffoldFile); - // Requiring a newer version triggers "composer update". - $this->composer('require --update-with-dependencies --prefer-dist --update-no-dev drupal/core:"' . $version . '"'); - clearstatcache(); - $mtime_after = filemtime($exampleScaffoldFile); - $this->assertNotEquals($mtime_after, $mtime_touched, 'Scaffold file was modified by composer update. (' . $version . ')'); - switch ($version) { - case '8.0.1': - case '8.1.x-dev': - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc'); - $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json'); - $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php'); - break; - - case '8.3.0': - // Note we don't clean up .eslintrc file. - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc'); - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json'); - $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php'); - break; - - case '8.5.x-dev': - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc'); - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json'); - $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php'); - break; - } - } - - // We touch a scaffold file, so we can check the file was modified by the - // custom command. - file_put_contents($exampleScaffoldFile, 1); - $this->composer('drupal:scaffold'); - $this->assertNotEquals(file_get_contents($exampleScaffoldFile), 1, 'Scaffold file was modified by custom command.'); - } - - /** - * Writes the default composer json to the temp direcoty. - */ - protected function writeComposerJSON() { - $json = json_encode($this->composerJSONDefaults(), JSON_PRETTY_PRINT); - // Write composer.json. - file_put_contents($this->tmpDir . '/composer.json', $json); - } - - /** - * Writes a tag for the current commit, so we can reference it directly in the - * composer.json. - */ - protected function writeTestReleaseTag() { - // Tag the current state. - $this->tmpReleaseTag = '999.0.' . time(); - $this->git(sprintf('tag -a "%s" -m "%s"', $this->tmpReleaseTag, 'Tag for testing this exact commit')); - } - - /** - * Provides the default composer.json data. - * - * @return array - */ - protected function composerJSONDefaults() { - return array( - 'repositories' => array( - array( - 'type' => 'vcs', - 'url' => $this->rootDir, - ), - ), - 'require' => array( - 'drupal-composer/drupal-scaffold' => $this->tmpReleaseTag, - 'composer/installers' => '^1.0.20', - 'drupal/core' => '8.0.0', - ), - 'minimum-stability' => 'dev', - ); - } - - /** - * Wrapper for the composer command. - * - * @param string $command - * Composer command name, arguments and/or options. - */ - protected function composer($command) { - chdir($this->tmpDir); - passthru(escapeshellcmd($this->rootDir . '/vendor/bin/composer ' . $command), $exit_code); - if ($exit_code !== 0) { - throw new \Exception('Composer returned a non-zero exit code'); - } - } - - /** - * Wrapper for git command in the root directory. - * - * @param $command - * Git command name, arguments and/or options. - */ - protected function git($command) { - chdir($this->rootDir); - passthru(escapeshellcmd('git ' . $command), $exit_code); - if ($exit_code !== 0) { - throw new \Exception('Git returned a non-zero exit code'); - } - } - - /** - * Makes sure the given directory exists and has no content. - * - * @param string $directory - */ - protected function ensureDirectoryExistsAndClear($directory) { - if (is_dir($directory)) { - $this->fs->removeDirectory($directory); - } - mkdir($directory, 0777, TRUE); - } - -} diff --git a/vendor/drupal/core-composer-scaffold/AllowedPackages.php b/vendor/drupal/core-composer-scaffold/AllowedPackages.php new file mode 100644 index 0000000000000000000000000000000000000000..481492f009ab62871d1844649087879c03068564 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/AllowedPackages.php @@ -0,0 +1,217 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Composer; +use Composer\DependencyResolver\Operation\OperationInterface; +use Composer\Installer\PackageEvent; +use Composer\IO\IOInterface; +use Composer\Package\PackageInterface; + +/** + * Determine recursively which packages have been allowed to scaffold files. + * + * If the root-level composer.json allows drupal/core, and drupal/core allows + * drupal/assets, then the later package will also implicitly be allowed. + * + * @internal + */ +class AllowedPackages implements PostPackageEventListenerInterface { + + /** + * The Composer service. + * + * @var \Composer\Composer + */ + protected $composer; + + /** + * Composer's I/O service. + * + * @var \Composer\IO\IOInterface + */ + protected $io; + + /** + * Manager of the options in the top-level composer.json's 'extra' section. + * + * @var \Drupal\Composer\Plugin\Scaffold\ManageOptions + */ + protected $manageOptions; + + /** + * The list of new packages added by this Composer command. + * + * @var array + */ + protected $newPackages = []; + + /** + * AllowedPackages constructor. + * + * @param \Composer\Composer $composer + * The composer object. + * @param \Composer\IO\IOInterface $io + * IOInterface to write to. + * @param \Drupal\Composer\Plugin\Scaffold\ManageOptions $manage_options + * Manager of the options in the top-level composer.json's 'extra' section. + */ + public function __construct(Composer $composer, IOInterface $io, ManageOptions $manage_options) { + $this->composer = $composer; + $this->io = $io; + $this->manageOptions = $manage_options; + } + + /** + * Gets a list of all packages that are allowed to copy scaffold files. + * + * We will implicitly allow the projects 'drupal/legacy-scaffold-assets' + * and 'drupal/core' to scaffold files, if they are present. Any other + * project must be explicitly whitelisted in the top-level composer.json + * file in order to be allowed to override scaffold files. + * Configuration for packages specified later will override configuration + * specified by packages listed earlier. In other words, the last listed + * package has the highest priority. The root package will always be returned + * at the end of the list. + * + * @return \Composer\Package\PackageInterface[] + * An array of allowed Composer packages. + */ + public function getAllowedPackages() { + $top_level_packages = $this->getTopLevelAllowedPackages(); + $allowed_packages = $this->recursiveGetAllowedPackages($top_level_packages); + // If the root package defines any file mappings, then implicitly add it + // to the list of allowed packages. Add it at the end so that it overrides + // all the preceding packages. + if ($this->manageOptions->getOptions()->hasFileMapping()) { + $root_package = $this->composer->getPackage(); + unset($allowed_packages[$root_package->getName()]); + $allowed_packages[$root_package->getName()] = $root_package; + } + // Handle any newly-added packages that are not already allowed. + return $this->evaluateNewPackages($allowed_packages); + } + + /** + * {@inheritdoc} + */ + public function event(PackageEvent $event) { + $operation = $event->getOperation(); + // Determine the package. Later, in evaluateNewPackages(), we will report + // which of the newly-installed packages have scaffold operations, and + // whether or not they are allowed to scaffold by the allowed-packages + // option in the root-level composer.json file. + $operationType = $this->getOperationType($operation); + $package = $operationType === 'update' ? $operation->getTargetPackage() : $operation->getPackage(); + if (ScaffoldOptions::hasOptions($package->getExtra())) { + $this->newPackages[$package->getName()] = $package; + } + } + + /** + * Gets all packages that are allowed in the top-level composer.json. + * + * We will implicitly allow the projects 'drupal/legacy-scaffold-assets' + * and 'drupal/core' to scaffold files, if they are present. Any other + * project must be explicitly whitelisted in the top-level composer.json + * file in order to be allowed to override scaffold files. + * + * @return array + * An array of allowed Composer package names. + */ + protected function getTopLevelAllowedPackages() { + $implicit_packages = [ + 'drupal/legacy-scaffold-assets', + 'drupal/core', + ]; + $top_level_packages = $this->manageOptions->getOptions()->allowedPackages(); + return array_merge($implicit_packages, $top_level_packages); + } + + /** + * Builds a name-to-package mapping from a list of package names. + * + * @param string[] $packages_to_allow + * List of package names to allow. + * @param array $allowed_packages + * Mapping of package names to PackageInterface of packages already + * accumulated. + * + * @return \Composer\Package\PackageInterface[] + * Mapping of package names to PackageInterface in priority order. + */ + protected function recursiveGetAllowedPackages(array $packages_to_allow, array $allowed_packages = []) { + foreach ($packages_to_allow as $name) { + $package = $this->getPackage($name); + if ($package instanceof PackageInterface && !isset($allowed_packages[$name])) { + $allowed_packages[$name] = $package; + $package_options = $this->manageOptions->packageOptions($package); + $allowed_packages = $this->recursiveGetAllowedPackages($package_options->allowedPackages(), $allowed_packages); + } + } + return $allowed_packages; + } + + /** + * Evaluates newly-added packages and see if they are already allowed. + * + * For now we will only emit warnings if they are not. + * + * @param array $allowed_packages + * Mapping of package names to PackageInterface of packages already + * accumulated. + * + * @return \Composer\Package\PackageInterface[] + * Mapping of package names to PackageInterface in priority order. + */ + protected function evaluateNewPackages(array $allowed_packages) { + foreach ($this->newPackages as $name => $newPackage) { + if (!array_key_exists($name, $allowed_packages)) { + $this->io->write("Not scaffolding files for <comment>{$name}</comment>, because it is not listed in the element 'extra.drupal-scaffold.allowed-packages' in the root-level composer.json file."); + } + else { + $this->io->write("Package <comment>{$name}</comment> has scaffold operations, and is already allowed in the root-level composer.json file."); + } + } + // @todo We could prompt the user and ask if they wish to allow a + // newly-added package. This might be useful if, for example, the user + // might wish to require an installation profile that contains scaffolded + // assets. For more information, see: + // https://www.drupal.org/project/drupal/issues/3064990 + return $allowed_packages; + } + + /** + * Determine the type of the provided operation. + * + * Adjusts API used for Composer 1 or Composer 2. + * + * @param \Composer\DependencyResolver\Operation\OperationInterface $operation + * The operation object. + * + * @return string + * The operation type. + */ + protected function getOperationType(OperationInterface $operation) { + // Use Composer 2 method. + if (method_exists($operation, 'getOperationType')) { + return $operation->getOperationType(); + } + // Fallback to Composer 1 method. + return $operation->getJobType(); + } + + /** + * Retrieves a package from the current composer process. + * + * @param string $name + * Name of the package to get from the current composer installation. + * + * @return \Composer\Package\PackageInterface|null + * The Composer package. + */ + protected function getPackage($name) { + return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*'); + } + +} diff --git a/vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php b/vendor/drupal/core-composer-scaffold/CommandProvider.php similarity index 72% rename from vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php rename to vendor/drupal/core-composer-scaffold/CommandProvider.php index 327a7f229ea0757c0944b46be22136d15955fb62..6597039399bb93cc80ea908caf692aa4c8ec06a2 100644 --- a/vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php +++ b/vendor/drupal/core-composer-scaffold/CommandProvider.php @@ -1,11 +1,13 @@ <?php -namespace DrupalComposer\DrupalScaffold; +namespace Drupal\Composer\Plugin\Scaffold; use Composer\Plugin\Capability\CommandProvider as CommandProviderCapability; /** * List of all commands provided by this package. + * + * @internal */ class CommandProvider implements CommandProviderCapability { @@ -13,9 +15,7 @@ class CommandProvider implements CommandProviderCapability { * {@inheritdoc} */ public function getCommands() { - return [ - new DrupalScaffoldCommand(), - ]; + return [new ComposerScaffoldCommand()]; } } diff --git a/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php b/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php new file mode 100644 index 0000000000000000000000000000000000000000..6de8aa4bf8fc7743f43368ee28783835b5c75843 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php @@ -0,0 +1,56 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Command\BaseCommand; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * The "drupal:scaffold" command class. + * + * Manually run the scaffold operation that normally happens after + * 'composer install'. + * + * @internal + */ +class ComposerScaffoldCommand extends BaseCommand { + + /** + * {@inheritdoc} + */ + protected function configure() { + $this + ->setName('drupal:scaffold') + ->setAliases(['scaffold']) + ->setDescription('Update the Drupal scaffold files.') + ->setHelp( + <<<EOT +The <info>drupal:scaffold</info> command places the scaffold files in their +respective locations according to the layout stipulated in the composer.json +file. + +<info>php composer.phar drupal:scaffold</info> + +It is usually not necessary to call <info>drupal:scaffold</info> manually, +because it is called automatically as needed, e.g. after an <info>install</info> +or <info>update</info> command. Note, though, that only packages explicitly +allowed to scaffold in the top-level composer.json will be processed by this +command. + +For more information, see https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold. +EOT + ); + + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) { + $handler = new Handler($this->getComposer(), $this->getIO()); + $handler->scaffold(); + return 0; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php b/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php new file mode 100644 index 0000000000000000000000000000000000000000..4a576388262cdd7077c2743855ab6904986c51d9 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php @@ -0,0 +1,124 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\IO\IOInterface; +use Composer\Util\Filesystem; +use Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult; + +/** + * Generates an 'autoload.php' that includes the autoloader created by Composer. + * + * @internal + */ +final class GenerateAutoloadReferenceFile { + + /** + * This class provides only static methods. + */ + private function __construct() { + } + + /** + * Generates the autoload file at the specified location. + * + * This only writes a bit of PHP that includes the autoload file that + * Composer generated. Drupal does this so that it can guarantee that there + * will always be an `autoload.php` file in a well-known location. + * + * @param \Composer\IO\IOInterface $io + * IOInterface to write to. + * @param string $package_name + * The name of the package defining the autoload file (the root package). + * @param string $web_root + * The path to the web root. + * @param string $vendor + * The path to the vendor directory. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult + * The result of the autoload file generation. + */ + public static function generateAutoload(IOInterface $io, $package_name, $web_root, $vendor) { + $autoload_path = static::autoloadPath($package_name, $web_root); + // Calculate the relative path from the webroot (location of the project + // autoload.php) to the vendor directory. + $fs = new Filesystem(); + $relative_autoload_path = $fs->findShortestPath($autoload_path->fullPath(), "$vendor/autoload.php"); + file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_autoload_path)); + return new ScaffoldResult($autoload_path, TRUE); + } + + /** + * Determines whether or not the autoload file has been committed. + * + * @param \Composer\IO\IOInterface $io + * IOInterface to write to. + * @param string $package_name + * The name of the package defining the autoload file (the root package). + * @param string $web_root + * The path to the web root. + * + * @return bool + * True if autoload.php file exists and has been committed to the repository + */ + public static function autoloadFileCommitted(IOInterface $io, $package_name, $web_root) { + $autoload_path = static::autoloadPath($package_name, $web_root); + $autoload_file = $autoload_path->fullPath(); + $location = dirname($autoload_file); + if (!file_exists($autoload_file)) { + return FALSE; + } + return Git::checkTracked($io, $autoload_file, $location); + } + + /** + * Generates a scaffold file path object for the autoload file. + * + * @param string $package_name + * The name of the package defining the autoload file (the root package). + * @param string $web_root + * The path to the web root. + * + * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + * Object wrapping the relative and absolute path to the destination file. + */ + protected static function autoloadPath($package_name, $web_root) { + $rel_path = 'autoload.php'; + $dest_rel_path = '[web-root]/' . $rel_path; + $dest_full_path = $web_root . '/' . $rel_path; + return new ScaffoldFilePath('autoload', $package_name, $dest_rel_path, $dest_full_path); + } + + /** + * Builds the contents of the autoload file. + * + * @param string $relative_autoload_path + * The relative path to the autoloader in vendor. + * + * @return string + * Return the contents for the autoload.php. + */ + protected static function autoLoadContents($relative_autoload_path) { + $relative_autoload_path = preg_replace('#^\./#', '', $relative_autoload_path); + return <<<EOF +<?php + +/** + * @file + * Includes the autoloader created by Composer. + * + * This file was generated by drupal-scaffold. + * + * @see composer.json + * @see index.php + * @see core/install.php + * @see core/rebuild.php + * @see core/modules/statistics/statistics.php + */ + +return require __DIR__ . '/{$relative_autoload_path}'; + +EOF; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Git.php b/vendor/drupal/core-composer-scaffold/Git.php new file mode 100644 index 0000000000000000000000000000000000000000..015e472eb2448393f06fe19c5213d1fc04dfd207 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Git.php @@ -0,0 +1,72 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\IO\IOInterface; +use Composer\Util\ProcessExecutor; + +/** + * Provide some Git utility operations + * + * @internal + */ +class Git { + + /** + * This class provides only static methods. + */ + private function __construct() { + } + + /** + * Determines whether the specified scaffold file is already ignored. + * + * @param string $path + * Path to scaffold file to check. + * @param string $dir + * Base directory for git process. + * + * @return bool + * Whether the specified file is already ignored or not (TRUE if ignored). + */ + public static function checkIgnore(IOInterface $io, $path, $dir = NULL) { + $process = new ProcessExecutor($io); + $output = ''; + $exitCode = $process->execute('git check-ignore ' . $process->escape($path), $output, $dir); + return $exitCode == 0; + } + + /** + * Determines whether the specified scaffold file is tracked by git. + * + * @param string $path + * Path to scaffold file to check. + * @param string $dir + * Base directory for git process. + * + * @return bool + * Whether the specified file is already tracked or not (TRUE if tracked). + */ + public static function checkTracked(IOInterface $io, $path, $dir = NULL) { + $process = new ProcessExecutor($io); + $output = ''; + $exitCode = $process->execute('git ls-files --error-unmatch ' . $process->escape($path), $output, $dir); + return $exitCode == 0; + } + + /** + * Checks to see if the project root dir is in a git repository. + * + * @param string $dir + * Base directory for git process. + * @return bool + * True if this is a repository. + */ + public static function isRepository(IOInterface $io, $dir = NULL) { + $process = new ProcessExecutor($io); + $output = ''; + $exitCode = $process->execute('git rev-parse --show-toplevel', $output, $dir); + return $exitCode == 0; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Handler.php b/vendor/drupal/core-composer-scaffold/Handler.php new file mode 100644 index 0000000000000000000000000000000000000000..3e51f909a335238ffcf9d4054b511f486e206da5 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Handler.php @@ -0,0 +1,249 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Composer; +use Composer\EventDispatcher\EventDispatcher; +use Composer\Installer\PackageEvent; +use Composer\IO\IOInterface; +use Composer\Package\PackageInterface; +use Composer\Util\Filesystem; +use Drupal\Composer\Plugin\Scaffold\Operations\OperationData; +use Drupal\Composer\Plugin\Scaffold\Operations\OperationFactory; +use Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection; + +/** + * Core class of the plugin. + * + * Contains the primary logic which determines the files to be fetched and + * processed. + * + * @internal + */ +class Handler { + + /** + * Composer hook called before scaffolding begins. + */ + const PRE_DRUPAL_SCAFFOLD_CMD = 'pre-drupal-scaffold-cmd'; + + /** + * Composer hook called after scaffolding completes. + */ + const POST_DRUPAL_SCAFFOLD_CMD = 'post-drupal-scaffold-cmd'; + + /** + * The Composer service. + * + * @var \Composer\Composer + */ + protected $composer; + + /** + * Composer's I/O service. + * + * @var \Composer\IO\IOInterface + */ + protected $io; + + /** + * The scaffold options in the top-level composer.json's 'extra' section. + * + * @var \Drupal\Composer\Plugin\Scaffold\ManageOptions + */ + protected $manageOptions; + + /** + * The manager that keeps track of which packages are allowed to scaffold. + * + * @var \Drupal\Composer\Plugin\Scaffold\AllowedPackages + */ + protected $manageAllowedPackages; + + /** + * The list of listeners that are notified after a package event. + * + * @var \Drupal\Composer\Plugin\Scaffold\PostPackageEventListenerInterface[] + */ + protected $postPackageListeners = []; + + /** + * Handler constructor. + * + * @param \Composer\Composer $composer + * The Composer service. + * @param \Composer\IO\IOInterface $io + * The Composer I/O service. + */ + public function __construct(Composer $composer, IOInterface $io) { + $this->composer = $composer; + $this->io = $io; + $this->manageOptions = new ManageOptions($composer); + $this->manageAllowedPackages = new AllowedPackages($composer, $io, $this->manageOptions); + } + + /** + * Registers post-package events if the 'require' command was called. + */ + public function requireWasCalled() { + // In order to differentiate between post-package events called after + // 'composer require' vs. the same events called at other times, we will + // only install our handler when a 'require' event is detected. + $this->postPackageListeners[] = $this->manageAllowedPackages; + } + + /** + * Posts package command event. + * + * We want to detect packages 'require'd that have scaffold files, but are not + * yet allowed in the top-level composer.json file. + * + * @param \Composer\Installer\PackageEvent $event + * Composer package event sent on install/update/remove. + */ + public function onPostPackageEvent(PackageEvent $event) { + foreach ($this->postPackageListeners as $listener) { + $listener->event($event); + } + } + + /** + * Creates scaffold operation objects for all items in the file mappings. + * + * @param \Composer\Package\PackageInterface $package + * The package that relative paths will be relative from. + * @param array $package_file_mappings + * The package file mappings array keyed by destination path and the values + * are operation metadata arrays. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[] + * A list of scaffolding operation objects + */ + protected function createScaffoldOperations(PackageInterface $package, array $package_file_mappings) { + $scaffold_op_factory = new OperationFactory($this->composer); + $scaffold_ops = []; + foreach ($package_file_mappings as $dest_rel_path => $data) { + $operation_data = new OperationData($dest_rel_path, $data); + $scaffold_ops[$dest_rel_path] = $scaffold_op_factory->create($package, $operation_data); + } + return $scaffold_ops; + } + + /** + * Copies all scaffold files from source to destination. + */ + public function scaffold() { + // Recursively get the list of allowed packages. Only allowed packages + // may declare scaffold files. Note that the top-level composer.json file + // is implicitly allowed. + $allowed_packages = $this->manageAllowedPackages->getAllowedPackages(); + if (empty($allowed_packages)) { + $this->io->write("Nothing scaffolded because no packages are allowed in the top-level composer.json file."); + return; + } + + // Call any pre-scaffold scripts that may be defined. + $dispatcher = new EventDispatcher($this->composer, $this->io); + $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD); + + // Fetch the list of file mappings from each allowed package and normalize + // them. + $file_mappings = $this->getFileMappingsFromPackages($allowed_packages); + + $location_replacements = $this->manageOptions->getLocationReplacements(); + $scaffold_options = $this->manageOptions->getOptions(); + + // Create a collection of scaffolded files to process. This determines which + // take priority and which are combined. + $scaffold_files = new ScaffoldFileCollection($file_mappings, $location_replacements); + + // Get the scaffold files whose contents on disk match what we are about to + // write. We can remove these from consideration, as rewriting would be a + // no-op. + $unchanged = $scaffold_files->checkUnchanged(); + $scaffold_files->filterFiles($unchanged); + + // Process the list of scaffolded files. + $scaffold_results = $scaffold_files->processScaffoldFiles($this->io, $scaffold_options); + + // Generate an autoload file in the document root that includes the + // autoload.php file in the vendor directory, wherever that is. Drupal + // requires this in order to easily locate relocated vendor dirs. + $web_root = $this->manageOptions->getOptions()->getLocation('web-root'); + if (!GenerateAutoloadReferenceFile::autoloadFileCommitted($this->io, $this->rootPackageName(), $web_root)) { + $scaffold_results[] = GenerateAutoloadReferenceFile::generateAutoload($this->io, $this->rootPackageName(), $web_root, $this->getVendorPath()); + } + + // Add the managed scaffold files to .gitignore if applicable. + $gitIgnoreManager = new ManageGitIgnore($this->io, getcwd()); + $gitIgnoreManager->manageIgnored($scaffold_results, $scaffold_options); + + // Call post-scaffold scripts. + $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD); + } + + /** + * Gets the path to the 'vendor' directory. + * + * @return string + * The file path of the vendor directory. + */ + protected function getVendorPath() { + $vendor_dir = $this->composer->getConfig()->get('vendor-dir'); + $filesystem = new Filesystem(); + return $filesystem->normalizePath(realpath($vendor_dir)); + } + + /** + * Gets a consolidated list of file mappings from all allowed packages. + * + * @param \Composer\Package\Package[] $allowed_packages + * A multidimensional array of file mappings, as returned by + * self::getAllowedPackages(). + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][] + * An array of destination paths => scaffold operation objects. + */ + protected function getFileMappingsFromPackages(array $allowed_packages) { + $file_mappings = []; + foreach ($allowed_packages as $package_name => $package) { + $file_mappings[$package_name] = $this->getPackageFileMappings($package); + } + return $file_mappings; + } + + /** + * Gets the array of file mappings provided by a given package. + * + * @param \Composer\Package\PackageInterface $package + * The Composer package from which to get the file mappings. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[] + * An array of destination paths => scaffold operation objects. + */ + protected function getPackageFileMappings(PackageInterface $package) { + $options = $this->manageOptions->packageOptions($package); + if ($options->hasFileMapping()) { + return $this->createScaffoldOperations($package, $options->fileMapping()); + } + // Warn the user if they allow a package that does not have any scaffold + // files. We will ignore drupal/core, though, as it is implicitly allowed, + // but might not have scaffold files (version 8.7.x and earlier). + if (!$options->hasAllowedPackages() && ($package->getName() != 'drupal/core')) { + $this->io->writeError("The allowed package {$package->getName()} does not provide a file mapping for Composer Scaffold."); + } + return []; + } + + /** + * Gets the root package name. + * + * @return string + * The package name of the root project + */ + protected function rootPackageName() { + $root_package = $this->composer->getPackage(); + return $root_package->getName(); + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Interpolator.php b/vendor/drupal/core-composer-scaffold/Interpolator.php new file mode 100644 index 0000000000000000000000000000000000000000..c9f6a4fedb571ec1f084dfe2ca9a05132a2ae6a8 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Interpolator.php @@ -0,0 +1,157 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +/** + * Injects config values from an associative array into a string. + * + * @internal + */ +class Interpolator { + + /** + * The character sequence that identifies the start of a token. + * + * @var string + */ + protected $startToken; + + /** + * The character sequence that identifies the end of a token. + * + * @var string + */ + protected $endToken; + + /** + * The associative array of replacements. + * + * @var array + */ + protected $data = []; + + /** + * Interpolator constructor. + * + * @param string $start_token + * The start marker for a token, e.g. '['. + * @param string $end_token + * The end marker for a token, e.g. ']'. + */ + public function __construct($start_token = '\\[', $end_token = '\\]') { + $this->startToken = $start_token; + $this->endToken = $end_token; + } + + /** + * Sets the data set to use when interpolating. + * + * @param array $data + * The key:value pairs to use when interpolating. + * + * @return $this + */ + public function setData(array $data) { + $this->data = $data; + return $this; + } + + /** + * Adds to the data set to use when interpolating. + * + * @param array $data + * The key:value pairs to use when interpolating. + * + * @return $this + */ + public function addData(array $data) { + $this->data = array_merge($this->data, $data); + return $this; + } + + /** + * Replaces tokens in a string with values from an associative array. + * + * Tokens are surrounded by delimiters, e.g. square brackets "[key]". The + * characters that surround the key may be defined when the Interpolator is + * constructed. + * + * Example: + * If the message is 'Hello, [user.name]', then the value of the user.name + * item is fetched from the array, and the token [user.name] is replaced with + * the result. + * + * @param string $message + * Message containing tokens to be replaced. + * @param array $extra + * Data to use for interpolation in addition to whatever was provided to + * self::setData(). + * @param string|bool $default + * (optional) The value to substitute for tokens that are not found in the + * data. If FALSE, then missing tokens are not replaced. Defaults to an + * empty string. + * + * @return string + * The message after replacements have been made. + */ + public function interpolate($message, array $extra = [], $default = '') { + $data = $extra + $this->data; + $replacements = $this->replacements($message, $data, $default); + return strtr($message, $replacements); + } + + /** + * Finds the tokens that exist in a message and builds a replacement array. + * + * All of the replacements in the data array are looked up given the token + * keys from the provided message. Keys that do not exist in the configuration + * are replaced with the default value. + * + * @param string $message + * String with tokens. + * @param array $data + * Data to use for interpolation. + * @param string $default + * (optional) The value to substitute for tokens that are not found in the + * data. If FALSE, then missing tokens are not replaced. Defaults to an + * empty string. + * + * @return string[] + * An array of replacements to make. Keyed by tokens and the replacements + * are the values. + */ + protected function replacements($message, array $data, $default = '') { + $tokens = $this->findTokens($message); + $replacements = []; + foreach ($tokens as $sourceText => $key) { + $replacement_text = array_key_exists($key, $data) ? $data[$key] : $default; + if ($replacement_text !== FALSE) { + $replacements[$sourceText] = $replacement_text; + } + } + return $replacements; + } + + /** + * Finds all of the tokens in the provided message. + * + * @param string $message + * String with tokens. + * + * @return string[] + * map of token to key, e.g. {{key}} => key + */ + protected function findTokens($message) { + $reg_ex = '#' . $this->startToken . '([a-zA-Z0-9._-]+)' . $this->endToken . '#'; + if (!preg_match_all($reg_ex, $message, $matches, PREG_SET_ORDER)) { + return []; + } + $tokens = []; + foreach ($matches as $matchSet) { + list($sourceText, $key) = $matchSet; + $tokens[$sourceText] = $key; + } + return $tokens; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/LICENSE.txt b/vendor/drupal/core-composer-scaffold/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..94fb84639c4b6ff359e47a124d8fb4a3aba7a386 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php b/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php new file mode 100644 index 0000000000000000000000000000000000000000..524cb2ff60537e200c833fe7211ff4635ee645e9 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php @@ -0,0 +1,125 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\IO\IOInterface; + +/** + * Manage the .gitignore file. + * + * @internal + */ +class ManageGitIgnore { + + /** + * Composer's I/O service. + * + * @var \Composer\IO\IOInterface + */ + protected $io; + + /** + * The directory where the project is located. + * + * @var string + */ + protected $dir; + + /** + * ManageGitIgnore constructor. + * + * @param string $dir + * The directory where the project is located. + */ + public function __construct(IOInterface $io, $dir) { + $this->io = $io; + $this->dir = $dir; + } + + /** + * Manages gitignore files. + * + * @param \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[] $files + * A list of scaffold results, each of which holds a path and whether + * or not that file is managed. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options + * Configuration options from the composer.json extras section. + */ + public function manageIgnored(array $files, ScaffoldOptions $options) { + if (!$this->managementOfGitIgnoreEnabled($options)) { + return; + } + + // Accumulate entries to add to .gitignore, sorted into buckets based on the + // location of the .gitignore file the entry should be added to. + $add_to_git_ignore = []; + foreach ($files as $scaffoldResult) { + $path = $scaffoldResult->destination()->fullPath(); + $is_ignored = Git::checkIgnore($this->io, $path, $this->dir); + if (!$is_ignored) { + $is_tracked = Git::checkTracked($this->io, $path, $this->dir); + if (!$is_tracked && $scaffoldResult->isManaged()) { + $dir = realpath(dirname($path)); + $name = basename($path); + $add_to_git_ignore[$dir][] = '/' . $name; + } + } + } + // Write out the .gitignore files one at a time. + foreach ($add_to_git_ignore as $dir => $entries) { + $this->addToGitIgnore($dir, $entries); + } + } + + /** + * Determines whether we should manage gitignore files. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options + * Configuration options from the composer.json extras section. + * + * @return bool + * Whether or not gitignore files should be managed. + */ + protected function managementOfGitIgnoreEnabled(ScaffoldOptions $options) { + // If the composer.json stipulates whether gitignore is managed or not, then + // follow its recommendation. + if ($options->hasGitIgnore()) { + return $options->gitIgnore(); + } + + // Do not manage .gitignore if there is no repository here. + if (!Git::isRepository($this->io, $this->dir)) { + return FALSE; + } + + // If the composer.json did not specify whether or not .gitignore files + // should be managed, then manage them if the vendor directory is ignored. + return Git::checkIgnore($this->io, 'vendor', $this->dir); + } + + /** + * Adds a set of entries to the specified .gitignore file. + * + * @param string $dir + * Path to directory where gitignore should be written. + * @param string[] $entries + * Entries to write to .gitignore file. + */ + protected function addToGitIgnore($dir, array $entries) { + sort($entries); + $git_ignore_path = $dir . '/.gitignore'; + $contents = ''; + + // Appending to existing .gitignore files. + if (file_exists($git_ignore_path)) { + $contents = file_get_contents($git_ignore_path); + if (!empty($contents) && substr($contents, -1) != "\n") { + $contents .= "\n"; + } + } + + $contents .= implode("\n", $entries); + file_put_contents($git_ignore_path, $contents); + } + +} diff --git a/vendor/drupal/core-composer-scaffold/ManageOptions.php b/vendor/drupal/core-composer-scaffold/ManageOptions.php new file mode 100644 index 0000000000000000000000000000000000000000..56cb1a0a1a487743e8a0d8d82c88805aa3cfaa71 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/ManageOptions.php @@ -0,0 +1,92 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Composer; +use Composer\Package\PackageInterface; +use Composer\Util\Filesystem; + +/** + * Per-project options from the 'extras' section of the composer.json file. + * + * Projects that describe scaffold files do so via their scaffold options. + * This data is pulled from the 'drupal-scaffold' portion of the extras + * section of the project data. + * + * @internal + */ +class ManageOptions { + + /** + * The Composer service. + * + * @var \Composer\Composer + */ + protected $composer; + + /** + * ManageOptions constructor. + * + * @param \Composer\Composer $composer + * The Composer service. + */ + public function __construct(Composer $composer) { + $this->composer = $composer; + } + + /** + * Gets the root-level scaffold options for this project. + * + * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions + * The scaffold options object. + */ + public function getOptions() { + return $this->packageOptions($this->composer->getPackage()); + } + + /** + * Gets the scaffold options for the stipulated project. + * + * @param \Composer\Package\PackageInterface $package + * The package to fetch the scaffold options from. + * + * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions + * The scaffold options object. + */ + public function packageOptions(PackageInterface $package) { + return ScaffoldOptions::create($package->getExtra()); + } + + /** + * Creates an interpolator for the 'locations' element. + * + * The interpolator returned will replace a path string with the tokens + * defined in the 'locations' element. + * + * Note that only the root package may define locations. + * + * @return \Drupal\Composer\Plugin\Scaffold\Interpolator + * Interpolator that will do replacements in a string using tokens in + * 'locations' element. + */ + public function getLocationReplacements() { + return (new Interpolator())->setData($this->ensureLocations()); + } + + /** + * Ensures that all of the locations defined in the scaffold files exist. + * + * Create them on the filesystem if they do not. + */ + protected function ensureLocations() { + $fs = new Filesystem(); + $locations = $this->getOptions()->locations() + ['web_root' => './']; + $locations = array_map(function ($location) use ($fs) { + $fs->ensureDirectoryExists($location); + $location = realpath($location); + return $location; + }, $locations); + return $locations; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php b/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php new file mode 100644 index 0000000000000000000000000000000000000000..a2a994532816e9cd38393da28fba4af2b0c8c08b --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php @@ -0,0 +1,53 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; + +/** + * Provides default behaviors for operations. + * + * @internal + */ +abstract class AbstractOperation implements OperationInterface { + + /** + * Cached contents of scaffold file to be written to disk. + * + * @var string + */ + protected $contents; + + /** + * {@inheritdoc} + */ + final public function contents() { + if (!isset($this->contents)) { + $this->contents = $this->generateContents(); + } + return $this->contents; + } + + /** + * Load the scaffold contents or otherwise generate what is needed. + * + * @return string + * The contents of the scaffold file. + */ + abstract protected function generateContents(); + + /** + * {@inheritdoc} + */ + public function scaffoldOverExistingTarget(OperationInterface $existing_target) { + return $this; + } + + /** + * {@inheritdoc} + */ + public function scaffoldAtNewLocation(ScaffoldFilePath $destination) { + return $this; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php b/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php new file mode 100644 index 0000000000000000000000000000000000000000..0e5b51023a69745c3b71b7f9ff52ce087bf23154 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php @@ -0,0 +1,206 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Composer\IO\IOInterface; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; +use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions; + +/** + * Scaffold operation to add to the beginning and/or end of a scaffold file. + * + * @internal + */ +class AppendOp extends AbstractOperation { + + /** + * Identifies Append operations. + */ + const ID = 'append'; + + /** + * Path to the source file to prepend, if any. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + */ + protected $prepend; + + /** + * Path to the source file to append, if any. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + */ + protected $append; + + /** + * Path to the default data to use when appending to an empty file. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + */ + protected $default; + + /** + * An indicator of whether the file we are appending to is managed or not. + */ + protected $managed; + + /** + * An indicator of whether we are allowed to append to a non-scaffolded file. + */ + protected $forceAppend; + + /** + * The contents from the file that we are prepending / appending to. + * + * @var string + */ + protected $originalContents; + + /** + * Constructs an AppendOp. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $prepend_path + * The relative path to the prepend file. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $append_path + * The relative path to the append file. + * @param bool $force_append + * TRUE if is okay to append to a file that was not scaffolded. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $default_path + * The relative path to the default data. + */ + public function __construct(ScaffoldFilePath $prepend_path = NULL, ScaffoldFilePath $append_path = NULL, $force_append = FALSE, ScaffoldFilePath $default_path = NULL) { + $this->forceAppend = $force_append; + $this->prepend = $prepend_path; + $this->append = $append_path; + $this->default = $default_path; + $this->managed = TRUE; + } + + /** + * {@inheritdoc} + */ + protected function generateContents() { + // Fetch the prepend contents, if provided. + $prepend_contents = ''; + if (!empty($this->prepend)) { + $prepend_contents = file_get_contents($this->prepend->fullPath()) . "\n"; + } + // Fetch the append contents, if provided. + $append_contents = ''; + if (!empty($this->append)) { + $append_contents = "\n" . file_get_contents($this->append->fullPath()); + } + + // Get the original contents, or the default data if the original is empty. + $original_contents = $this->originalContents; + if (empty($original_contents) && !empty($this->default)) { + $original_contents = file_get_contents($this->default->fullPath()); + } + + // Attach it all together. + return $prepend_contents . $original_contents . $append_contents; + } + + /** + * {@inheritdoc} + */ + public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) { + $destination_path = $destination->fullPath(); + $interpolator = $destination->getInterpolator(); + + // Be extra-noisy of creating a new file or appending to a non-scaffold + // file. Note that if the file already has the append contents, then the + // OperationFactory will make a SkipOp instead, and we will not get here. + if (!$this->managed) { + $message = ' - <info>NOTICE</info> Modifying existing file at <info>[dest-rel-path]</info>.'; + if (!file_exists($destination_path)) { + $message = ' - <info>NOTICE</info> Creating a new file at <info>[dest-rel-path]</info>.'; + } + $message .= ' Examine the contents and ensure that it came out correctly.'; + $io->write($interpolator->interpolate($message)); + } + + // Notify that we are prepending, if there is prepend data. + if (!empty($this->prepend)) { + $this->prepend->addInterpolationData($interpolator, 'prepend'); + $io->write($interpolator->interpolate(" - Prepend to <info>[dest-rel-path]</info> from <info>[prepend-rel-path]</info>")); + } + // Notify that we are appending, if there is append data. + $append_contents = ''; + if (!empty($this->append)) { + $this->append->addInterpolationData($interpolator, 'append'); + $io->write($interpolator->interpolate(" - Append to <info>[dest-rel-path]</info> from <info>[append-rel-path]</info>")); + } + + // Write the resulting data + file_put_contents($destination_path, $this->contents()); + + // Return a ScaffoldResult with knowledge of whether this file is managed. + return new ScaffoldResult($destination, $this->managed); + } + + /** + * {@inheritdoc} + */ + public function scaffoldOverExistingTarget(OperationInterface $existing_target) { + $this->originalContents = $existing_target->contents(); + return $this; + } + + /** + * {@inheritdoc} + */ + public function scaffoldAtNewLocation(ScaffoldFilePath $destination) { + // If there is no existing scaffold file at the target location, then any + // append we do will be to an unmanaged file. + $this->managed = FALSE; + + // Default: do not allow an append over a file that was not scaffolded. + if (!$this->forceAppend) { + $message = " - Skip <info>[dest-rel-path]</info>: cannot append to a path that was not scaffolded unless 'force-append' property is set."; + return new SkipOp($message); + } + + // If the target file does not exist, then we will allow the append to + // happen if we have default data to provide for it. + if (!file_exists($destination->fullPath())) { + if (!empty($this->default)) { + return $this; + } + $message = " - Skip <info>[dest-rel-path]</info>: no file exists at the target path, and no default data provided."; + return new SkipOp($message); + } + + // If the target file DOES exist, and it already contains the append/prepend + // data, then we will skip the operation. + $existingData = file_get_contents($destination->fullPath()); + if ($this->existingFileHasData($existingData, $this->append) || $this->existingFileHasData($existingData, $this->prepend)) { + $message = " - Skip <info>[dest-rel-path]</info>: the file already has the append/prepend data."; + return new SkipOp($message); + } + + // Cache the original data to use during append. + $this->originalContents = $existingData; + + return $this; + } + + /** + * Check to see if the append/prepend data has already been applied. + * @param string $contents + * The contents of the target file. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $data_path + * The path to the data to append or prepend + * @return bool + * 'TRUE' if the append/prepend data already exists in contents. + */ + protected function existingFileHasData($contents, $data_path) { + if (empty($data_path)) { + return FALSE; + } + $data = file_get_contents($data_path->fullPath()); + + return strpos($contents, $data) !== FALSE; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationData.php b/vendor/drupal/core-composer-scaffold/Operations/OperationData.php new file mode 100644 index 0000000000000000000000000000000000000000..9aa73611c06874f1928e6b3e8ad41b5979b8eb20 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/OperationData.php @@ -0,0 +1,227 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +/** + * Holds parameter data for operation objects during operation creation only. + * + * @internal + */ +class OperationData { + + const MODE = 'mode'; + const PATH = 'path'; + const OVERWRITE = 'overwrite'; + const PREPEND = 'prepend'; + const APPEND = 'append'; + const DEFAULT = 'default'; + const FORCE_APPEND = 'force-append'; + + /** + * The parameter data. + * + * @var array + */ + protected $data; + + /** + * The destination path + * + * @var string + */ + protected $destination; + + /** + * OperationData constructor. + * + * @param mixed $data + * The raw data array to wrap. + */ + public function __construct($destination, $data) { + $this->destination = $destination; + $this->data = $this->normalizeScaffoldMetadata($destination, $data); + } + + /** + * Gets the destination path that this operation data is associated with. + * + * @return string + * The destination path for the scaffold result. + */ + public function destination() { + return $this->destination; + } + + /** + * Gets operation mode + * + * @return string + * Operation mode. + */ + public function mode() { + return $this->data[self::MODE]; + } + + /** + * Checks if path exists + * + * @return bool + * Returns true if path exists + */ + public function hasPath() { + return isset($this->data[self::PATH]); + } + + /** + * Gets path + * + * @return string + * The path. + */ + public function path() { + return $this->data[self::PATH]; + } + + /** + * Determines overwrite. + * + * @return bool + * Returns true if overwrite mode was selected. + */ + public function overwrite() { + return !empty($this->data[self::OVERWRITE]); + } + + /** + * Determines whether 'force-append' has been set. + * + * @return bool + * Returns true if 'force-append' mode was selected. + */ + public function forceAppend() { + if ($this->hasDefault()) { + return TRUE; + } + return !empty($this->data[self::FORCE_APPEND]); + } + + /** + * Checks if prepend path exists. + * + * @return bool + * Returns true if prepend exists. + */ + public function hasPrepend() { + return isset($this->data[self::PREPEND]); + } + + /** + * Gets prepend path. + * + * @return string + * Path to prepend data + */ + public function prepend() { + return $this->data[self::PREPEND]; + } + + /** + * Checks if append path exists. + * + * @return bool + * Returns true if prepend exists. + */ + public function hasAppend() { + return isset($this->data[self::APPEND]); + } + + /** + * Gets append path. + * + * @return string + * Path to append data + */ + public function append() { + return $this->data[self::APPEND]; + } + + /** + * Checks if default path exists. + * + * @return bool + * Returns true if there is default data available. + */ + public function hasDefault() { + return isset($this->data[self::DEFAULT]); + } + + /** + * Gets default path. + * + * @return string + * Path to default data + */ + public function default() { + return $this->data[self::DEFAULT]; + } + + /** + * Normalizes metadata by converting literal values into arrays. + * + * Conversions performed include: + * - Boolean 'false' means "skip". + * - A string means "replace", with the string value becoming the path. + * + * @param string $destination + * The destination path for the scaffold file. + * @param mixed $value + * The metadata for this operation object, which varies by operation type. + * + * @return array + * Normalized scaffold metadata with default values. + */ + protected function normalizeScaffoldMetadata($destination, $value) { + $defaultScaffoldMetadata = [ + self::MODE => ReplaceOp::ID, + self::PREPEND => NULL, + self::APPEND => NULL, + self::DEFAULT => NULL, + self::OVERWRITE => TRUE, + ]; + + return $this->convertScaffoldMetadata($destination, $value) + $defaultScaffoldMetadata; + } + + /** + * Performs the conversion-to-array step in normalizeScaffoldMetadata. + * + * @param string $destination + * The destination path for the scaffold file. + * @param mixed $value + * The metadata for this operation object, which varies by operation type. + * + * @return array + * Normalized scaffold metadata. + */ + protected function convertScaffoldMetadata($destination, $value) { + if (is_bool($value)) { + if (!$value) { + return [self::MODE => SkipOp::ID]; + } + throw new \RuntimeException("File mapping {$destination} cannot be given the value 'true'."); + } + if (empty($value)) { + throw new \RuntimeException("File mapping {$destination} cannot be empty."); + } + if (is_string($value)) { + $value = [self::PATH => $value]; + } + // If there is no 'mode', but there is an 'append' or a 'prepend' path, + // then the mode is 'append' (append + prepend). + if (!isset($value[self::MODE]) && (isset($value[self::APPEND]) || isset($value[self::PREPEND]))) { + $value[self::MODE] = AppendOp::ID; + } + return $value; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php b/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..b256e0e15fbaafd5883807181af28827e0b9b805 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php @@ -0,0 +1,161 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Composer\Composer; +use Composer\Package\PackageInterface; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; + +/** + * Create Scaffold operation objects based on provided metadata. + * + * @internal + */ +class OperationFactory { + + /** + * The Composer service. + * + * @var \Composer\Composer + */ + protected $composer; + + /** + * OperationFactory constructor. + * + * @param \Composer\Composer $composer + * Reference to the 'Composer' object, since the Scaffold Operation Factory + * is also responsible for evaluating relative package paths as it creates + * scaffold operations. + */ + public function __construct(Composer $composer) { + $this->composer = $composer; + } + + /** + * Creates a scaffolding operation object as determined by the metadata. + * + * @param \Composer\Package\PackageInterface $package + * The package that relative paths will be relative from. + * @param OperationData $operation_data + * The parameter data for this operation object; varies by operation type. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface + * The scaffolding operation object (skip, replace, etc.) + * + * @throws \RuntimeException + * Exception thrown when parameter data does not identify a known scaffol + * operation. + */ + public function create(PackageInterface $package, OperationData $operation_data) { + switch ($operation_data->mode()) { + case SkipOp::ID: + return new SkipOp(); + + case ReplaceOp::ID: + return $this->createReplaceOp($package, $operation_data); + + case AppendOp::ID: + return $this->createAppendOp($package, $operation_data); + } + throw new \RuntimeException("Unknown scaffold operation mode <comment>{$operation_data->mode()}</comment>."); + } + + /** + * Creates a 'replace' scaffold op. + * + * Replace ops may copy or symlink, depending on settings. + * + * @param \Composer\Package\PackageInterface $package + * The package that relative paths will be relative from. + * @param OperationData $operation_data + * The parameter data for this operation object, i.e. the relative 'path'. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface + * A scaffold replace operation object. + */ + protected function createReplaceOp(PackageInterface $package, OperationData $operation_data) { + if (!$operation_data->hasPath()) { + throw new \RuntimeException("'path' component required for 'replace' operations."); + } + $package_name = $package->getName(); + $package_path = $this->getPackagePath($package); + $source = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->path()); + $op = new ReplaceOp($source, $operation_data->overwrite()); + return $op; + } + + /** + * Creates an 'append' (or 'prepend') scaffold op. + * + * @param \Composer\Package\PackageInterface $package + * The package that relative paths will be relative from. + * @param OperationData $operation_data + * The parameter data for this operation object, i.e. the relative 'path'. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface + * A scaffold replace operation object. + */ + protected function createAppendOp(PackageInterface $package, OperationData $operation_data) { + $package_name = $package->getName(); + $package_path = $this->getPackagePath($package); + $prepend_source_file = NULL; + $append_source_file = NULL; + $default_data_file = NULL; + if ($operation_data->hasPrepend()) { + $prepend_source_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->prepend()); + } + if ($operation_data->hasAppend()) { + $append_source_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->append()); + } + if ($operation_data->hasDefault()) { + $default_data_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->default()); + } + if (!$this->hasContent($prepend_source_file) && !$this->hasContent($append_source_file)) { + $message = ' - Keep <info>[dest-rel-path]</info> unchanged: no content to prepend / append was provided.'; + return new SkipOp($message); + } + + return new AppendOp($prepend_source_file, $append_source_file, $operation_data->forceAppend(), $default_data_file); + } + + /** + * Checks to see if the specified scaffold file exists and has content. + * + * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $file + * Scaffold file to check. + * @return bool + * True if the file exists and has content. + */ + protected function hasContent(ScaffoldFilePath $file = NULL) { + if (!$file) { + return FALSE; + } + $path = $file->fullPath(); + return is_file($path) && (filesize($path) > 0); + } + + /** + * Gets the file path of a package. + * + * Note that if we call getInstallPath on the root package, we get the + * wrong answer (the installation manager thinks our package is in + * vendor). We therefore add special checking for this case. + * + * @param \Composer\Package\PackageInterface $package + * The package. + * + * @return string + * The file path. + */ + protected function getPackagePath(PackageInterface $package) { + if ($package->getName() == $this->composer->getPackage()->getName()) { + // This will respect the --working-dir option if Composer is invoked with + // it. There is no API or method to determine the filesystem path of + // a package's composer.json file. + return getcwd(); + } + return $this->composer->getInstallationManager()->getInstallPath($package); + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php b/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..9dc20e0fc922332975af8a6665784b2ab31d3972 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php @@ -0,0 +1,69 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Composer\IO\IOInterface; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; +use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions; + +/** + * Interface for scaffold operation objects. + * + * @internal + */ +interface OperationInterface { + + /** + * Returns the exact data that will be written to the scaffold files. + * + * @return string + * Data to be written to the scaffold location. + */ + public function contents(); + + /** + * Process this scaffold operation. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination + * Scaffold file's destination path. + * @param \Composer\IO\IOInterface $io + * IOInterface to write to. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options + * Various options that may alter the behavior of the operation. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult + * Result of the scaffolding operation. + */ + public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options); + + /** + * Determines what to do if operation is used at same path as a previous op. + * + * Default behavior is to scaffold this operation at the specified + * destination, ignoring whatever was there before. + * + * @param OperationInterface $existing_target + * Existing file at the destination path that we should combine with. + * + * @return OperationInterface + * The op to use at this destination. + */ + public function scaffoldOverExistingTarget(OperationInterface $existing_target); + + /** + * Determines what to do if operation is used without a previous operation. + * + * Default behavior is to scaffold this operation at the specified + * destination. Most operations overwrite rather than modify existing files, + * and therefore do not need to do anything special when there is no existing + * file. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination + * Scaffold file's destination path. + * + * @return OperationInterface + * The op to use at this destination. + */ + public function scaffoldAtNewLocation(ScaffoldFilePath $destination); + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php b/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php new file mode 100644 index 0000000000000000000000000000000000000000..66f8ea35b34c091975170602175920fa1185bdef --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php @@ -0,0 +1,127 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Composer\IO\IOInterface; +use Composer\Util\Filesystem; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; +use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions; + +/** + * Scaffold operation to copy or symlink from source to destination. + * + * @internal + */ +class ReplaceOp extends AbstractOperation { + + /** + * Identifies Replace operations. + */ + const ID = 'replace'; + + /** + * The relative path to the source file. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + */ + protected $source; + + /** + * Whether to overwrite existing files. + * + * @var bool + */ + protected $overwrite; + + /** + * Constructs a ReplaceOp. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $sourcePath + * The relative path to the source file. + * @param bool $overwrite + * Whether to allow this scaffold file to overwrite files already at + * the destination. Defaults to TRUE. + */ + public function __construct(ScaffoldFilePath $sourcePath, $overwrite = TRUE) { + $this->source = $sourcePath; + $this->overwrite = $overwrite; + } + + /** + * {@inheritdoc} + */ + protected function generateContents() { + return file_get_contents($this->source->fullPath()); + } + + /** + * {@inheritdoc} + */ + public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) { + $fs = new Filesystem(); + $destination_path = $destination->fullPath(); + // Do nothing if overwrite is 'false' and a file already exists at the + // destination. + if ($this->overwrite === FALSE && file_exists($destination_path)) { + $interpolator = $destination->getInterpolator(); + $io->write($interpolator->interpolate(" - Skip <info>[dest-rel-path]</info> because it already exists and overwrite is <comment>false</comment>.")); + return new ScaffoldResult($destination, FALSE); + } + + // Get rid of the destination if it exists, and make sure that + // the directory where it's going to be placed exists. + $fs->remove($destination_path); + $fs->ensureDirectoryExists(dirname($destination_path)); + if ($options->symlink()) { + return $this->symlinkScaffold($destination, $io); + } + return $this->copyScaffold($destination, $io); + } + + /** + * Copies the scaffold file. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination + * Scaffold file to process. + * @param \Composer\IO\IOInterface $io + * IOInterface to writing to. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult + * The scaffold result. + */ + protected function copyScaffold(ScaffoldFilePath $destination, IOInterface $io) { + $interpolator = $destination->getInterpolator(); + $this->source->addInterpolationData($interpolator); + $success = file_put_contents($destination->fullPath(), $this->contents()); + if (!$success) { + throw new \RuntimeException($interpolator->interpolate("Could not copy source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!")); + } + $io->write($interpolator->interpolate(" - Copy <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>")); + return new ScaffoldResult($destination, $this->overwrite); + } + + /** + * Symlinks the scaffold file. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination + * Scaffold file to process. + * @param \Composer\IO\IOInterface $io + * IOInterface to writing to. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult + * The scaffold result. + */ + protected function symlinkScaffold(ScaffoldFilePath $destination, IOInterface $io) { + $interpolator = $destination->getInterpolator(); + try { + $fs = new Filesystem(); + $fs->relativeSymlink($this->source->fullPath(), $destination->fullPath()); + } + catch (\Exception $e) { + throw new \RuntimeException($interpolator->interpolate("Could not symlink source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"), [], $e); + } + $io->write($interpolator->interpolate(" - Link <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>")); + return new ScaffoldResult($destination, $this->overwrite); + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php new file mode 100644 index 0000000000000000000000000000000000000000..3551b80aea5cd273add301e30c572c1143aa0199 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php @@ -0,0 +1,198 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Composer\IO\IOInterface; +use Drupal\Composer\Plugin\Scaffold\Interpolator; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; +use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions; + +/** + * Collection of scaffold files. + * + * @internal + */ +class ScaffoldFileCollection implements \IteratorAggregate { + + /** + * Nested list of all scaffold files. + * + * The top level array maps from the package name to the collection of + * scaffold files provided by that package. Each collection of scaffold files + * is keyed by destination path. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo[][] + */ + protected $scaffoldFilesByProject = []; + + /** + * ScaffoldFileCollection constructor. + * + * @param \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][] $file_mappings + * A multidimensional array of file mappings. + * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements + * An object with the location mappings (e.g. [web-root]). + */ + public function __construct(array $file_mappings, Interpolator $location_replacements) { + // Collection of all destination paths to be scaffolded. Used to determine + // when two projects scaffold the same file and we have to either replace or + // combine them together. + // @see OperationInterface::scaffoldOverExistingTarget(). + $scaffoldFiles = []; + + // Build the list of ScaffoldFileInfo objects by project. + foreach ($file_mappings as $package_name => $package_file_mappings) { + foreach ($package_file_mappings as $destination_rel_path => $op) { + $destination = ScaffoldFilePath::destinationPath($package_name, $destination_rel_path, $location_replacements); + + // If there was already a scaffolding operation happening at this path, + // allow the new operation to decide how to handle the override. + // Usually, the new operation will replace whatever was there before. + if (isset($scaffoldFiles[$destination_rel_path])) { + $previous_scaffold_file = $scaffoldFiles[$destination_rel_path]; + $op = $op->scaffoldOverExistingTarget($previous_scaffold_file->op()); + + // Remove the previous op so we only touch the destination once. + $message = " - Skip <info>[dest-rel-path]</info>: overridden in <comment>{$package_name}</comment>"; + $this->scaffoldFilesByProject[$previous_scaffold_file->packageName()][$destination_rel_path] = new ScaffoldFileInfo($destination, new SkipOp($message)); + } + // If there is NOT already a scaffolding operation happening at this + // path, notify the scaffold operation of this fact. + else { + $op = $op->scaffoldAtNewLocation($destination); + } + + // Combine the scaffold operation with the destination and record it. + $scaffold_file = new ScaffoldFileInfo($destination, $op); + $scaffoldFiles[$destination_rel_path] = $scaffold_file; + $this->scaffoldFilesByProject[$package_name][$destination_rel_path] = $scaffold_file; + } + } + } + + /** + * Removes any item that has a path matching any path in the provided list. + * + * Matching is done via destination path. + * + * @param string[] $files_to_filter + * List of destination paths + */ + public function filterFiles(array $files_to_filter) { + foreach ($this->scaffoldFilesByProject as $project_name => $scaffold_files) { + foreach ($scaffold_files as $destination_rel_path => $scaffold_file) { + if (in_array($destination_rel_path, $files_to_filter, TRUE)) { + unset($scaffold_files[$destination_rel_path]); + } + } + $this->scaffoldFilesByProject[$project_name] = $scaffold_files; + if (!$this->checkListHasItemWithContent($scaffold_files)) { + unset($this->scaffoldFilesByProject[$project_name]); + } + } + } + + /** + * Scans through a list of scaffold files and determines if any has contents. + * + * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo[] $scaffold_files + * List of scaffold files, path: ScaffoldFileInfo + * + * @return bool + * TRUE if at least one item in the list has content + */ + protected function checkListHasItemWithContent(array $scaffold_files) { + foreach ($scaffold_files as $destination_rel_path => $scaffold_file) { + $contents = $scaffold_file->op()->contents(); + if (!empty($contents)) { + return TRUE; + } + } + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function getIterator() { + return new \ArrayIterator($this->scaffoldFilesByProject); + } + + /** + * Processes the files in our collection. + * + * @param \Composer\IO\IOInterface $io + * The Composer IO object. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $scaffold_options + * The scaffold options. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[] + * The results array. + */ + public function processScaffoldFiles(IOInterface $io, ScaffoldOptions $scaffold_options) { + $results = []; + foreach ($this as $project_name => $scaffold_files) { + $io->write("Scaffolding files for <comment>{$project_name}</comment>:"); + foreach ($scaffold_files as $scaffold_file) { + $results[$scaffold_file->destination()->relativePath()] = $scaffold_file->process($io, $scaffold_options); + } + } + return $results; + } + + /** + * Processes the iterator created by ScaffoldFileCollection::create(). + * + * @param \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection $collection + * The iterator to process. + * @param \Composer\IO\IOInterface $io + * The Composer IO object. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $scaffold_options + * The scaffold options. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[] + * The results array. + * + * @deprecated. Called when upgrading from the Core Composer Scaffold plugin + * version 8.8.x due to a bug in the plugin and handler classes. Do not use + * in 8.9.x or 9.x, and remove in Drupal 10.x. + */ + public static function process(ScaffoldFileCollection $collection, IOInterface $io, ScaffoldOptions $scaffold_options) { + $results = []; + foreach ($collection as $project_name => $scaffold_files) { + $io->write("Scaffolding files for <comment>{$project_name}</comment>:"); + foreach ($scaffold_files as $scaffold_file) { + $results[$scaffold_file->destination()->relativePath()] = $scaffold_file->process($io, $scaffold_options); + } + } + return $results; + } + + /** + * Returns the list of files that have not changed since they were scaffolded. + * + * Note that there are two reasons a file may have changed: + * - The user modified it after it was scaffolded. + * - The package the file came to was updated, and the file is different in + * the new version. + * + * With the current scaffold code, we cannot tell the difference between the + * two. @see https://www.drupal.org/project/drupal/issues/3092563 + * + * @return string[] + * List of relative paths to unchanged files on disk. + */ + public function checkUnchanged() { + $results = []; + foreach ($this as $project_name => $scaffold_files) { + foreach ($scaffold_files as $scaffold_file) { + if (!$scaffold_file->hasChanged()) { + $results[] = $scaffold_file->destination()->relativePath(); + } + } + } + return $results; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php new file mode 100644 index 0000000000000000000000000000000000000000..3445b5307ff5f6f048592b5ebba454899d52b71b --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php @@ -0,0 +1,61 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; + +/** + * Record the result of a scaffold operation. + * + * @internal + */ +class ScaffoldResult { + + /** + * The path to the scaffold file that was processed. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + */ + protected $destination; + + /** + * Indicates if this scaffold file is managed by the scaffold command. + * + * @var bool + */ + protected $managed; + + /** + * ScaffoldResult constructor. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination + * The path to the scaffold file that was processed. + * @param bool $isManaged + * (optional) Whether this result is managed. Defaults to FALSE. + */ + public function __construct(ScaffoldFilePath $destination, $isManaged = FALSE) { + $this->destination = $destination; + $this->managed = $isManaged; + } + + /** + * Determines whether this scaffold file is managed. + * + * @return bool + * TRUE if this scaffold file is managed, FALSE if not. + */ + public function isManaged() { + return $this->managed; + } + + /** + * Gets the destination scaffold file that this result refers to. + * + * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + * The destination path for the scaffold result. + */ + public function destination() { + return $this->destination; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php b/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php new file mode 100644 index 0000000000000000000000000000000000000000..4180bd8683486f7440206ccf77b708fda917ef6b --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php @@ -0,0 +1,54 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold\Operations; + +use Composer\IO\IOInterface; +use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath; +use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions; + +/** + * Scaffold operation to skip a scaffold file (do nothing). + * + * @internal + */ +class SkipOp extends AbstractOperation { + + /** + * Identifies Skip operations. + */ + const ID = 'skip'; + + /** + * The message to output while processing. + * + * @var string + */ + protected $message; + + /** + * SkipOp constructor. + * + * @param string $message + * (optional) A custom message to output while skipping. + */ + public function __construct($message = " - Skip <info>[dest-rel-path]</info>: disabled") { + $this->message = $message; + } + + /** + * {@inheritdoc} + */ + protected function generateContents() { + return ''; + } + + /** + * {@inheritdoc} + */ + public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) { + $interpolator = $destination->getInterpolator(); + $io->write($interpolator->interpolate($this->message)); + return new ScaffoldResult($destination, FALSE); + } + +} diff --git a/vendor/drupal/core-composer-scaffold/Plugin.php b/vendor/drupal/core-composer-scaffold/Plugin.php new file mode 100644 index 0000000000000000000000000000000000000000..2f5214fb225f0ea73e9eac0a6305673c2278a53d --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/Plugin.php @@ -0,0 +1,147 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Composer; +use Composer\EventDispatcher\EventSubscriberInterface; +use Composer\IO\IOInterface; +use Composer\Installer\PackageEvent; +use Composer\Installer\PackageEvents; +use Composer\Plugin\Capability\CommandProvider; +use Composer\Plugin\Capable; +use Composer\Plugin\CommandEvent; +use Composer\Plugin\PluginEvents; +use Composer\Plugin\PluginInterface; +use Composer\Script\Event; +use Composer\Script\ScriptEvents; +use Drupal\Composer\Plugin\Scaffold\CommandProvider as ScaffoldCommandProvider; + +/** + * Composer plugin for handling drupal scaffold. + * + * @internal + */ +class Plugin implements PluginInterface, EventSubscriberInterface, Capable { + + /** + * The Composer service. + * + * @var \Composer\Composer + */ + protected $composer; + + /** + * Composer's I/O service. + * + * @var \Composer\IO\IOInterface + */ + protected $io; + + /** + * The Composer Scaffold handler. + * + * @var \Drupal\Composer\Plugin\Scaffold\Handler + */ + protected $handler; + + /** + * Record whether the 'require' command was called. + * + * @param bool + */ + protected $requireWasCalled; + + /** + * {@inheritdoc} + */ + public function activate(Composer $composer, IOInterface $io) { + $this->composer = $composer; + $this->io = $io; + $this->requireWasCalled = FALSE; + } + + /** + * {@inheritdoc} + */ + public function deactivate(Composer $composer, IOInterface $io) { + } + + /** + * {@inheritdoc} + */ + public function uninstall(Composer $composer, IOInterface $io) { + } + + /** + * {@inheritdoc} + */ + public function getCapabilities() { + return [CommandProvider::class => ScaffoldCommandProvider::class]; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + // Important note: We only instantiate our handler on "post" events. + return [ + ScriptEvents::POST_UPDATE_CMD => 'postCmd', + ScriptEvents::POST_INSTALL_CMD => 'postCmd', + PackageEvents::POST_PACKAGE_INSTALL => 'postPackage', + PluginEvents::COMMAND => 'onCommand', + ]; + } + + /** + * Post command event callback. + * + * @param \Composer\Script\Event $event + * The Composer event. + */ + public function postCmd(Event $event) { + $this->handler()->scaffold(); + } + + /** + * Post package event behavior. + * + * @param \Composer\Installer\PackageEvent $event + * Composer package event sent on install/update/remove. + */ + public function postPackage(PackageEvent $event) { + $this->handler()->onPostPackageEvent($event); + } + + /** + * Pre command event callback. + * + * @param \Composer\Plugin\CommandEvent $event + * The Composer command event. + */ + public function onCommand(CommandEvent $event) { + if ($event->getCommandName() == 'require') { + if ($this->handler) { + throw new \Error('Core Scaffold Plugin handler instantiated too early. See https://www.drupal.org/project/drupal/issues/3104922'); + } + $this->requireWasCalled = TRUE; + } + } + + /** + * Lazy-instantiate the handler object. It is dangerous to update a Composer + * plugin if it loads any classes prior to the `composer update` operation, + * and later tries to use them in a post-update hook. + */ + protected function handler() { + if (!$this->handler) { + $this->handler = new Handler($this->composer, $this->io); + // On instantiation of our handler, notify it if the 'require' command + // was executed. + if ($this->requireWasCalled) { + $this->handler->requireWasCalled(); + } + } + return $this->handler; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php b/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..61356b145cf59e6ec2916895fa37f3d4402857d6 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php @@ -0,0 +1,24 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Installer\PackageEvent; + +/** + * Interface for post package event listeners. + * + * @see \Drupal\Composer\Plugin\Scaffold\Handler::onPostPackageEvent + * + * @internal + */ +interface PostPackageEventListenerInterface { + + /** + * Handles package events during a 'composer require' operation. + * + * @param \Composer\Installer\PackageEvent $event + * Composer package event sent on install/update/remove. + */ + public function event(PackageEvent $event); + +} diff --git a/vendor/drupal/core-composer-scaffold/README.md b/vendor/drupal/core-composer-scaffold/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2830e5565e547db1fedd01b9c7fddbcf05d4a5f4 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/README.md @@ -0,0 +1,519 @@ +# Drupal Composer Scaffold + +This project provides a composer plugin for placing scaffold files (like +`index.php`, `update.php`, …) from the `drupal/core` project into their desired +location inside the web root. Only individual files may be scaffolded with this +plugin. + +The purpose of scaffolding files is to allow Drupal sites to be fully managed by +Composer, and still allow individual asset files to be placed in arbitrary +locations. The goal of doing this is to enable a properly configured composer +template to produce a file layout that exactly matches the file layout of a +Drupal 8.7.x and earlier tarball distribution. Other file layouts will also be +possible; for example, a project layout very similar to the current +[drupal-composer/drupal-project](https://github.com/drupal-composer/drupal-scaffold) +template will also be provided. When one of these projects is used, the user +should be able to use `composer require` and `composer update` on a Drupal site +immediately after untarring the downloaded archive. + +Note that the dependencies of a Drupal site are only able to scaffold files if +explicitly granted that right in the top-level composer.json file. See +[allowed packages](#allowed-packages), below. + +## Usage + +Drupal Composer Scaffold is used by requiring `drupal/core-composer-scaffold` in your +project, and providing configuration settings in the `extra` section of your +project's composer.json file. Additional configuration from the composer.json +file of your project's dependencies is also consulted in order to scaffold the +files a project needs. Additional information may be added to the beginning or +end of scaffold files, as is commonly done to `.htaccess` and `robots.txt` +files. See [altering scaffold files](#altering-scaffold-files) for more +information. + +Typically, the scaffold operations run automatically as needed, e.g. after +`composer install`, so it is usually not necessary to do anything different +to scaffold a project once the configuration is set up in the project +composer.json file, as described below. To scaffold files directly, run: +``` +composer drupal:scaffold +``` + +### Allowed Packages + +Scaffold files are stored inside of projects that are required from the main +project's composer.json file as usual. The scaffolding operation happens after +`composer install`, and involves copying or symlinking the desired assets to +their destination location. In order to prevent arbitrary dependencies from +copying files via the scaffold mechanism, only those projects that are +specifically permitted by the top-level project will be used to scaffold files. + +Example: Permit scaffolding from the project `drupal/core` +``` + "name": "my/project", + ... + "extra": { + "drupal-scaffold": { + "allowed-packages": [ + "drupal/core" + ], + ... + } + } +``` +Allowing a package to scaffold files also permits it to delegate permission to +scaffold to any project that it requires itself. This allows a package to +organize its scaffold assets as it sees fit. For example, the project +`drupal/core` may choose to store its assets in a subproject `drupal/assets`. + +It is possible for a project to obtain scaffold files from multiple projects. +For example, a Drupal project using a distribution, and installing on a specific +web hosting service provider might take its scaffold files from: + +- Drupal core +- Its distribution +- A project provided by the hosting provider +- The project itself + +Each project allowed to scaffold by the top-level project will be used in turn, +with projects declared later in the `allowed-packages` list taking precedence +over the projects named before. `drupal/core` is implicitly allowed and will be +placed at the top of the list. The top-level composer.json itself is also +implicitly allowed to scaffold files, and its scaffold files have highest +priority. + +### Defining Project Locations + +The top-level project in turn must define where the web root is located. It does +so via the `locations` mapping, as shown below: +``` + "name": "my/project", + ... + "extra": { + "drupal-scaffold": { + "locations": { + "web-root": "./docroot" + }, + ... + } + } +``` +This makes it possible to configure a project with different file layouts; for +example, either the `drupal/drupal` file layout or the +`drupal-composer/drupal-project` file layout could be used to set up a project. + +If a web-root is not explicitly defined, then it will default to `./`. + +### Altering Scaffold Files + +Sometimes, a project might wish to use a scaffold file provided by a dependency, +but alter it in some way. Two forms of alteration are supported: appending and +patching. + +The example below shows a project that appends additional entries onto the end +of the `robots.txt` file provided by `drupal/core`: +``` + "name": "my/project", + ... + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/robots.txt": { + "append": "assets/my-robots-additions.txt", + } + } + } + } +``` +It is also possible to prepend to a scaffold file instead of, or in addition to +appending by including a "prepend" entry that provides the relative path to the +file to prepend to the scaffold file. + +The example below demonstrates the use of the `post-drupal-scaffold-cmd` hook +to patch the `.htaccess` file using a patch. +``` + "name": "my/project", + ... + "scripts": { + "post-drupal-scaffold-cmd": [ + "cd docroot && patch -p1 <../patches/htaccess-ssl.patch" + ] + } +``` + +### Defining Scaffold Files + +The placement of scaffold assets is under the control of the project that +provides them, but the location is always relative to some directory defined by +the root project -- usually the web root. For example, the scaffold file +`robots.txt` is copied from its source location, `assets/robots.txt` into the +web root in the snippet below. +``` +{ + "name": "drupal/assets", + ... + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/robots.txt": "assets/robots.txt", + ... + } + } + } +} +``` + +### Excluding Scaffold Files + +Sometimes, a project might prefer to entirely replace a scaffold file provided +by a dependency, and receive no further updates for it. This can be done by +setting the value for the scaffold file to exclude to `false`: +``` + "name": "my/project", + ... + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/robots.txt": false + } + } + } +``` +If possible, use the `append` and `prepend` directives as explained in [altering +scaffold files](#altering-scaffold-files), above. Excluding a file means that +your project will not get any bug fixes or other updates to files that are +modified locally. + +### Overwrite + +By default, scaffold files overwrite whatever content exists at the target +location. Sometimes a project may wish to provide the initial contents for a +file that will not be changed in subsequent updates. This can be done by setting +the `overwrite` flag to `false`, as shown in the example below: +``` +{ + "name": "service-provider/d8-scaffold-files", + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/sites/default/settings.php": { + "mode": "replace", + "path": "assets/sites/default/settings.php", + "overwrite": false + } + } + } + } +} +``` +Note that the `overwrite` directive is intended to be used by starter kits, +service providers, and so on. Individual Drupal sites should exclude the file +by setting its value to false instead. + +### Autoload File + +The scaffold tool automatically creates the required `autoload.php` file at the +Drupal root as part of the scaffolding operation. This file should not be +modified or customized in any way. If it is committed to the repository, though, +then the scaffold tool will stop managing it. If the location of the `vendor` +directory is changed for any reason, and the `autoload.php` file has been +committed to the repository, manually delete it and then run `composer install` +to update it. + +## Specifications + +Reference section for the configuration directives for the "drupal-scaffold" +section of the "extra" section of a `composer.json` file appear below. + +### allowed-packages + +The `allowed-packages` configuration setting contains an ordered list of package +names that will be used during the scaffolding phase. +``` +"allowed-packages": [ + "example/assets", +], +``` +### file-mapping + +The `file-mapping` configuration setting consists of a map from the destination +path of the file to scaffold to a set of properties that control how the file +should be scaffolded. + +The available properties are as follows: + +- mode: One of "replace", "append" or "skip". +- path: The path to the source file to write over the destination file. +- prepend: The path to the source file to prepend to the destination file, which + must always be a scaffold file provided by some other project. +- append: Like `prepend`, but appends content rather than prepends. +- overwrite: If `false`, prevents a `replace` from happening if the destination + already exists. + +The mode may be inferred from the other properties. If the mode is not +specified, then the following defaults will be supplied: + +- replace: Selected if a `path` property is present, or if the entry's value is + a string rather than a property set. +- append: Selected if a `prepend` or `append` property is present. +- skip: Selected if the entry's value is a boolean `false`. + +Examples: +``` +"file-mapping": { + "[web-root]/sites/default/default.settings.php": { + "mode": "replace", + "path": "assets/sites/default/default.settings.php", + "overwrite": true + }, + "[web-root]/sites/default/settings.php": { + "mode": "replace", + "path": "assets/sites/default/settings.php", + "overwrite": false + }, + "[web-root]/robots.txt": { + "mode": "append", + "prepend": "assets/robots-prequel.txt", + "append": "assets/robots-append.txt" + }, + "[web-root]/.htaccess": { + "mode": "skip", + } +} +``` +The short-form of the above example would be: +``` +"file-mapping": { + "[web-root]/sites/default/default.settings.php": "assets/sites/default/default.settings.php", + "[web-root]/sites/default/settings.php": { + "path": "assets/sites/default/settings.php", + "overwrite": false + }, + "[web-root]/robots.txt": { + "prepend": "assets/robots-prequel.txt", + "append": "assets/robots-append.txt" + }, + "[web-root]/.htaccess": false +} +``` +Note that there is no distinct "prepend" mode; "append" mode is used to both +append and prepend to scaffold files. The reason for this is that scaffold file +entries are identified in the file-mapping section keyed by their destination +path, and it is not possible for multiple entries to have the same key. If +"prepend" were a separate mode, then it would not be possible to both prepend +and append to the same file. + +By default, append operations may only be applied to files that were scaffolded +by a previously evaluated project. If the `force-append` attribute is added to +an `append` operation, though, then the append will be made to non-scaffolded +files if and only if the append text does not already appear in the file. When +using this mode, it is also possible to provide default contents to use in the +event that the destination file is entirely missing. + +The example below demonstrates scaffolding a settings-custom.php file, and +including it from the existing `settings.php` file. + +``` +"file-mapping": { + "[web-root]/sites/default/settings-custom.php": "assets/settings-custom.php", + "[web-root]/sites/default/settings.php": { + "append": "assets/include-settings-custom.txt", + "force-append": true, + "default": "assets/initial-default-settings.txt" + } +} +``` + +Note that the example above still works if used with a project that scaffolds +the settings.php file. + +### gitignore + +The `gitignore` configuration setting controls whether or not this plugin will +manage `.gitignore` files for files written during the scaffold operation. + +- true: `.gitignore` files will be updated when scaffold files are written. +- false: `.gitignore` files will never be modified. +- Not set: `.gitignore` files will be updated if the target directory is a local +working copy of a git repository, and the `vendor` directory is ignored +in that repository. + +### locations + +The `locations` configuration setting contains a list of named locations that +may be used in placing scaffold files. The only required location is `web-root`. +Other locations may also be defined if desired. +``` +"locations": { + "web-root": "./docroot" +}, +``` +### symlink + +The `symlink` property causes `replace` operations to make a symlink to the +source file rather than copying it. This is useful when doing core development, +as the symlink files themselves should not be edited. Note that `append` +operations override the `symlink` option, to prevent the original scaffold +assets from being altered. +``` +"symlink": true, +``` +## Managing Scaffold Files + +Scaffold files should be treated the same way that the `vendor` directory is +handled. If you need to commit `vendor` (e.g. in order to deploy your site), +then you should also commit your scaffold files. You should not commit your +`vendor` directory or scaffold files unless it is necessary. + +If a dependency provides a scaffold file with `overwrite` set to `false`, that +file should be committed to your repository. + +By default, `.gitignore` files will be automatically updated if needed when +scaffold files are written. See the `gitignore` setting in the Specifications +section above. + +## Examples + +Some full-length examples appear below. + +Sample composer.json for a project that relies on packages that use composer-scaffold: +``` +{ + "name": "my/project", + "require": { + "drupal/core-composer-scaffold": "*", + "composer/installers": "^1.2", + "cweagans/composer-patches": "^1.6.5", + "drupal/core": "^8.8.x-dev", + "service-provider/d8-scaffold-files": "^1" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, + "extra": { + "drupal-scaffold": { + "allowed-packages": [ + "drupal/core" + ], + "locations": { + "web-root": "./docroot" + }, + "symlink": true, + "file-mapping": { + "[web-root]/.htaccess": false, + "[web-root]/robots.txt": "assets/robots-default.txt" + } + } + } +} +``` + +Sample composer.json for drupal/core, with assets placed in a different project: + +``` +{ + "name": "drupal/core", + "extra": { + "drupal-scaffold": { + "allowed-packages": [ + "drupal/assets", + ] + } + } +} +``` + +Sample composer.json for composer-scaffold files in drupal/assets: + +``` +{ + "name": "drupal/assets", + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/.csslintrc": "assets/.csslintrc", + "[web-root]/.editorconfig": "assets/.editorconfig", + "[web-root]/.eslintignore": "assets/.eslintignore", + "[web-root]/.eslintrc.json": "assets/.eslintrc.json", + "[web-root]/.gitattributes": "assets/.gitattributes", + "[web-root]/.ht.router.php": "assets/.ht.router.php", + "[web-root]/.htaccess": "assets/.htaccess", + "[web-root]/sites/default/default.services.yml": "assets/default.services.yml", + "[web-root]/sites/default/default.settings.php": "assets/default.settings.php", + "[web-root]/sites/example.settings.local.php": "assets/example.settings.local.php", + "[web-root]/sites/example.sites.php": "assets/example.sites.php", + "[web-root]/index.php": "assets/index.php", + "[web-root]/robots.txt": "assets/robots.txt", + "[web-root]/update.php": "assets/update.php", + "[web-root]/web.config": "assets/web.config" + } + } + } +} +``` + +Sample composer.json for a library that implements composer-scaffold: + +``` +{ + "name": "service-provider/d8-scaffold-files", + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/sites/default/settings.php": "assets/sites/default/settings.php" + } + } + } +} +``` + +Append to robots.txt: + +``` +{ + "name": "service-provider/d8-scaffold-files", + "extra": { + "drupal-scaffold": { + "file-mapping": { + "[web-root]/robots.txt": { + "append": "assets/my-robots-additions.txt", + } + } + } + } +} +``` + +Patch a file after it's copied: + +``` +"post-drupal-scaffold-cmd": [ + "cd docroot && patch -p1 <../patches/htaccess-ssl.patch" +] +``` + +## Related Plugins + +### drupal-composer/drupal-scaffold + +Previous versions of Drupal Composer Scaffold (see community project, +[drupal-composer/drupal-scaffold](https://github.com/drupal-composer/drupal-project)) +downloaded each scaffold file directly from its distribution server (e.g. +`https://git.drupalcode.org`) to the desired destination directory. This was +necessary, because there was no subtree split of the scaffold files available. +Copying the scaffold assets from projects already downloaded by Composer is more +effective, as downloading and unpacking archive files is more efficient than +downloading each scaffold file individually. + +### composer/installers + +The [composer/installers](https://github.com/composer/installers) plugin is +similar to this plugin in that it allows dependencies to be installed in +locations other than the `vendor` directory. However, Composer and the +`composer/installers` plugin have a limitation that one project cannot be moved +inside of another project. Therefore, if you use `composer/installers` to place +Drupal modules inside the directory `web/modules/contrib`, then you cannot also +use `composer/installers` to place files such as `index.php` and `robots.txt` +into the `web` directory. The drupal-scaffold plugin was created to work around +this limitation. diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php b/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php new file mode 100644 index 0000000000000000000000000000000000000000..08ce59cfba58e9c185107fe397f7ece4c2a6fa26 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php @@ -0,0 +1,139 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\IO\IOInterface; +use Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface; + +/** + * Data object that keeps track of one scaffold file. + * + * Scaffold files are identified primarily by their destination path. Each + * scaffold file also has an 'operation' object that controls how the scaffold + * file will be placed (e.g. via copy or symlink, or maybe by appending multiple + * files together). The operation may have one or more source files. + * + * @internal + */ +class ScaffoldFileInfo { + + /** + * The path to the destination. + * + * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + */ + protected $destination; + + /** + * The operation used to create the destination. + * + * @var \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface + */ + protected $op; + + /** + * Constructs a ScaffoldFileInfo object. + * + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination + * The full and relative paths to the destination file and the package + * defining it. + * @param \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface $op + * Operations object that will handle scaffolding operations. + */ + public function __construct(ScaffoldFilePath $destination, OperationInterface $op) { + $this->destination = $destination; + $this->op = $op; + } + + /** + * Gets the Scaffold operation. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface + * Operations object that handles scaffolding (copy, make symlink, etc). + */ + public function op() { + return $this->op; + } + + /** + * Gets the package name. + * + * @return string + * The name of the package this scaffold file info was collected from. + */ + public function packageName() { + return $this->destination->packageName(); + } + + /** + * Gets the destination. + * + * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath + * The scaffold path to the destination file. + */ + public function destination() { + return $this->destination; + } + + /** + * Determines if this scaffold file has been overridden by another package. + * + * @param string $providing_package + * The name of the package that provides the scaffold file at this location, + * as returned by self::findProvidingPackage() + * + * @return bool + * Whether this scaffold file if overridden or removed. + */ + public function overridden($providing_package) { + return $this->packageName() !== $providing_package; + } + + /** + * Replaces placeholders in a message. + * + * @param string $message + * Message with placeholders to fill in. + * @param array $extra + * Additional data to merge with the interpolator. + * @param mixed $default + * Default value to use for missing placeholders, or FALSE to keep them. + * + * @return string + * Interpolated string with placeholders replaced. + */ + public function interpolate($message, array $extra = [], $default = FALSE) { + $interpolator = $this->destination->getInterpolator(); + return $interpolator->interpolate($message, $extra, $default); + } + + /** + * Moves a single scaffold file from source to destination. + * + * @param \Composer\IO\IOInterface $io + * The scaffold file to be processed. + * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options + * Assorted operational options, e.g. whether the destination should be a + * symlink. + * + * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult + * The scaffold result. + */ + public function process(IOInterface $io, ScaffoldOptions $options) { + return $this->op()->process($this->destination, $io, $options); + } + + /** + * Returns TRUE if the target does not exist or has changed. + * + * @return bool + */ + final public function hasChanged() { + $path = $this->destination()->fullPath(); + if (!file_exists($path)) { + return TRUE; + } + return $this->op()->contents() !== file_get_contents($path); + } + +} diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php b/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php new file mode 100644 index 0000000000000000000000000000000000000000..5fb5af41d0acf1962b2ce8ee91c383cd32e96563 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php @@ -0,0 +1,202 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +use Composer\Util\Filesystem; + +/** + * Manage the path to a file to scaffold. + * + * Both the relative and full path to the file is maintained so that the shorter + * name may be used in progress and error messages, as needed. The name of the + * package that provided the file path is also recorded for the same reason. + * + * ScaffoldFilePaths may be used to represent destination scaffold files, or the + * source files used to create them. Static factory methods named + * destinationPath and sourcePath, respectively, are provided to create + * ScaffoldFilePath objects. + * + * @internal + */ +class ScaffoldFilePath { + + /** + * The type of scaffold file this is, 'src' or 'dest'. + * + * @var string + */ + protected $type; + + /** + * The name of the package containing the file. + * + * @var string + */ + protected $packageName; + + /** + * The relative path to the file. + * + * @var string + */ + protected $relativePath; + + /** + * The full path to the file. + * + * @var string + */ + protected $fullPath; + + /** + * ScaffoldFilePath constructor. + * + * @param string $path_type + * The type of scaffold file this is, 'src' or 'dest'. + * @param string $package_name + * The name of the package containing the file. + * @param string $rel_path + * The relative path to the file. + * @param string $full_path + * The full path to the file. + */ + public function __construct($path_type, $package_name, $rel_path, $full_path) { + $this->type = $path_type; + $this->packageName = $package_name; + $this->relativePath = $rel_path; + $this->fullPath = $full_path; + + // Ensure that the full path really is a full path. We do not use + // 'realpath' here because the file specified by the full path might + // not exist yet. + $fs = new Filesystem(); + if (!$fs->isAbsolutePath($this->fullPath)) { + $this->fullPath = getcwd() . '/' . $this->fullPath; + } + } + + /** + * Gets the name of the package this source file was pulled from. + * + * @return string + * Name of package. + */ + public function packageName() { + return $this->packageName; + } + + /** + * Gets the relative path to the source file (best to use in messages). + * + * @return string + * Relative path to file. + */ + public function relativePath() { + return $this->relativePath; + } + + /** + * Gets the full path to the source file. + * + * @return string + * Full path to file. + */ + public function fullPath() { + return $this->fullPath; + } + + /** + * Converts the relative source path into an absolute path. + * + * The path returned will be relative to the package installation location. + * + * @param string $package_name + * The name of the package containing the source file. Only used for error + * messages. + * @param string $package_path + * The installation path of the package containing the source file. + * @param string $destination + * Destination location provided as a relative path. Only used for error + * messages. + * @param string $source + * Source location provided as a relative path. + * + * @return self + * Object wrapping the relative and absolute path to the source file. + */ + public static function sourcePath($package_name, $package_path, $destination, $source) { + // Complain if there is no source path. + if (empty($source)) { + throw new \RuntimeException("No scaffold file path given for {$destination} in package {$package_name}."); + } + // Calculate the full path to the source scaffold file. + $source_full_path = $package_path . '/' . $source; + if (!file_exists($source_full_path)) { + throw new \RuntimeException("Scaffold file {$source} not found in package {$package_name}."); + } + if (is_dir($source_full_path)) { + throw new \RuntimeException("Scaffold file {$source} in package {$package_name} is a directory; only files may be scaffolded."); + } + return new self('src', $package_name, $source, $source_full_path); + } + + /** + * Converts the relative destination path into an absolute path. + * + * Any placeholders in the destination path, e.g. '[web-root]', will be + * replaced using the provided location replacements interpolator. + * + * @param string $package_name + * The name of the package defining the destination path. + * @param string $destination + * The relative path to the destination file being scaffolded. + * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements + * Interpolator that includes the [web-root] and any other available + * placeholder replacements. + * + * @return self + * Object wrapping the relative and absolute path to the destination file. + */ + public static function destinationPath($package_name, $destination, Interpolator $location_replacements) { + $dest_full_path = $location_replacements->interpolate($destination); + return new self('dest', $package_name, $destination, $dest_full_path); + } + + /** + * Adds data about the relative and full path to the provided interpolator. + * + * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $interpolator + * Interpolator to add data to. + * @param string $name_prefix + * (optional) Prefix to add before -rel-path and -full-path item names. + * Defaults to path type provided when constructing this object. + */ + public function addInterpolationData(Interpolator $interpolator, $name_prefix = '') { + if (empty($name_prefix)) { + $name_prefix = $this->type; + } + $data = [ + 'package-name' => $this->packageName(), + "{$name_prefix}-rel-path" => $this->relativePath(), + "{$name_prefix}-full-path" => $this->fullPath(), + ]; + $interpolator->addData($data); + } + + /** + * Interpolate a string using the data from this scaffold file info. + * + * @param string $name_prefix + * (optional) Prefix to add before -rel-path and -full-path item names. + * Defaults to path type provided when constructing this object. + * + * @return \Drupal\Composer\Plugin\Scaffold\Interpolator + * An interpolator for making string replacements. + */ + public function getInterpolator($name_prefix = '') { + $interpolator = new Interpolator(); + $this->addInterpolationData($interpolator, $name_prefix); + return $interpolator; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php b/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php new file mode 100644 index 0000000000000000000000000000000000000000..05cd864245de570c088624e7e0a19c3cf441944b --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php @@ -0,0 +1,203 @@ +<?php + +namespace Drupal\Composer\Plugin\Scaffold; + +/** + * Per-project options from the 'extras' section of the composer.json file. + * + * Projects that describe scaffold files do so via their scaffold options. This + * data is pulled from the 'drupal-scaffold' portion of the extras section of + * the project data. + * + * @internal + */ +class ScaffoldOptions { + + /** + * The raw data from the 'extras' section of the top-level composer.json file. + * + * @var array + */ + protected $options = []; + + /** + * ScaffoldOptions constructor. + * + * @param array $options + * The scaffold options taken from the 'drupal-scaffold' section. + */ + protected function __construct(array $options) { + $this->options = $options + [ + "allowed-packages" => [], + "locations" => [], + "symlink" => FALSE, + "file-mapping" => [], + ]; + + // Define any default locations. + $this->options['locations'] += [ + 'project-root' => '.', + 'web-root' => '.', + ]; + } + + /** + * Determines if the provided 'extras' section has scaffold options. + * + * @param array $extras + * The contents of the 'extras' section. + * + * @return bool + * True if scaffold options have been declared + */ + public static function hasOptions(array $extras) { + return array_key_exists('drupal-scaffold', $extras); + } + + /** + * Creates a scaffold options object. + * + * @param array $extras + * The contents of the 'extras' section. + * + * @return self + * The scaffold options object representing the provided scaffold options + */ + public static function create(array $extras) { + $options = static::hasOptions($extras) ? $extras['drupal-scaffold'] : []; + return new self($options); + } + + /** + * Creates a new scaffold options object with some values overridden. + * + * @param array $options + * Override values. + * + * @return self + * The scaffold options object representing the provided scaffold options + */ + protected function override(array $options) { + return new self($options + $this->options); + } + + /** + * Creates a new scaffold options object with an overridden 'symlink' value. + * + * @param bool $symlink + * Whether symlinking should be enabled or not. + * + * @return self + * The scaffold options object representing the provided scaffold options + */ + public function overrideSymlink($symlink) { + return $this->override(['symlink' => $symlink]); + } + + /** + * Determines whether any allowed packages were defined. + * + * @return bool + * Whether there are allowed packages + */ + public function hasAllowedPackages() { + return !empty($this->allowedPackages()); + } + + /** + * Gets allowed packages from these options. + * + * @return array + * The list of allowed packages + */ + public function allowedPackages() { + return $this->options['allowed-packages']; + } + + /** + * Gets the location mapping table, e.g. 'webroot' => './'. + * + * @return array + * A map of name : location values + */ + public function locations() { + return $this->options['locations']; + } + + /** + * Determines whether a given named location is defined. + * + * @param string $name + * The location name to search for. + * + * @return bool + * True if the specified named location exist. + */ + protected function hasLocation($name) { + return array_key_exists($name, $this->locations()); + } + + /** + * Gets a specific named location. + * + * @param string $name + * The name of the location to fetch. + * + * @return string + * The value of the provided named location + */ + public function getLocation($name) { + return $this->hasLocation($name) ? $this->locations()[$name] : FALSE; + } + + /** + * Determines if symlink mode is set. + * + * @return bool + * Whether or not 'symlink' mode + */ + public function symlink() { + return $this->options['symlink']; + } + + /** + * Determines if there are file mappings. + * + * @return bool + * Whether or not the scaffold options contain any file mappings + */ + public function hasFileMapping() { + return !empty($this->fileMapping()); + } + + /** + * Returns the actual file mappings. + * + * @return array + * File mappings for just this config type. + */ + public function fileMapping() { + return $this->options['file-mapping']; + } + + /** + * Determines if there is defined a value for the 'gitignore' option. + * + * @return bool + * Whether or not there is a 'gitignore' option setting + */ + public function hasGitIgnore() { + return isset($this->options['gitignore']); + } + + /** + * Gets the value of the 'gitignore' option. + * + * @return bool + * The 'gitignore' option, or TRUE if undefined. + */ + public function gitIgnore() { + return $this->hasGitIgnore() ? $this->options['gitignore'] : TRUE; + } + +} diff --git a/vendor/drupal/core-composer-scaffold/TESTING.txt b/vendor/drupal/core-composer-scaffold/TESTING.txt new file mode 100644 index 0000000000000000000000000000000000000000..429c3f7a4514e63d70c8d656c32eb6f2dcd0a151 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/TESTING.txt @@ -0,0 +1,18 @@ +HOW-TO: Test this Drupal composer plugin + +In order to test this plugin, you'll need to get the entire Drupal repo and +run the tests there. + +You'll find the tests under core/tests/Drupal/Tests/Composer/Plugin. + +You can get the full Drupal repo here: +https://www.drupal.org/project/drupal/git-instructions + +You can find more information about running PHPUnit tests with Drupal here: +https://www.drupal.org/node/2116263 + +Each component in the Drupal\Composer\Plugin namespace has its own annotated test +group. You can use this group to run only the tests for this component. Like +this: + +$ ./vendor/bin/phpunit -c core --group Scaffold diff --git a/vendor/drupal/core-composer-scaffold/composer.json b/vendor/drupal/core-composer-scaffold/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..ca9d6d7b48d2e1ad6f70fa833468769376d00d94 --- /dev/null +++ b/vendor/drupal/core-composer-scaffold/composer.json @@ -0,0 +1,32 @@ +{ + "name": "drupal/core-composer-scaffold", + "description": "A flexible Composer project scaffold builder.", + "type": "composer-plugin", + "keywords": ["drupal"], + "homepage": "https://www.drupal.org/project/drupal", + "license": "GPL-2.0-or-later", + "require": { + "composer-plugin-api": "^1 || ^2", + "php": ">=7.3.0" + }, + "conflict": { + "drupal-composer/drupal-scaffold": "*" + }, + "autoload": { + "psr-4": { + "Drupal\\Composer\\Plugin\\Scaffold\\": "" + } + }, + "extra": { + "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin", + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "config": { + "sort-packages": true + }, + "require-dev": { + "composer/composer": "^1.8@stable" + } +} diff --git a/vendor/rvtraveller/qs-composer-installer/LICENSE b/vendor/rvtraveller/qs-composer-installer/LICENSE deleted file mode 100644 index a80b363ea4efe2947d7f7c0a39048fafccb5c196..0000000000000000000000000000000000000000 --- a/vendor/rvtraveller/qs-composer-installer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Brian Thompson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/rvtraveller/qs-composer-installer/README.md b/vendor/rvtraveller/qs-composer-installer/README.md deleted file mode 100644 index 05a64b0693777412b541c0a99682e9851cdfad18..0000000000000000000000000000000000000000 --- a/vendor/rvtraveller/qs-composer-installer/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Quicksilver Composer Installer # - -Creates a new "type" in Composer for `quicksilver-script`s so you can treat them separately in Composer installations. This allows you to include Quicksilver scripts as part of a composer based project on Pantheon[https://pantheon.io]. - -To use this custom installer, require it in your project (root-level) composer.json file. Then, any Composer project of type `quicksiver-script` will be placed in the directory `web/private/scripts/quicksilver`. This path may be customized in the `installer-paths` item in `extras`. - -The `web/private/scripts/quicksilver` path (or your customized path) should be added to your project's .gitignore. - -## Example composer.json file ## - -``` -{ - "require": { - "rvtraveller/qs-composer-installer": "1.0" - }, - "extra": { - "installer-paths": { - "web/private/scripts/quicksilver/{$name}": ["type:quicksilver-script"] - } - } -} -``` diff --git a/vendor/rvtraveller/qs-composer-installer/composer.json b/vendor/rvtraveller/qs-composer-installer/composer.json deleted file mode 100644 index 2ff33116fa3c0bb9cbdcf895b7a44eb63e2bf3ac..0000000000000000000000000000000000000000 --- a/vendor/rvtraveller/qs-composer-installer/composer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "rvtraveller/qs-composer-installer", - "description": "Install Quicksilver modules for Pantheon into custom locations.", - "type": "composer-plugin", - "license": "MIT", - "homepage": "https://github.com/rvtraveller/qs-composer-installer", - "autoload": { - "psr-4": { - "rvtraveller\\QuicksilverComposerInstaller\\": "src" - } - }, - "extra": { - "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin" - }, - "require": { - "composer-plugin-api": "~1.0", - "composer/installers": "~1.0" - }, - "require-dev": { - "composer/composer": "~1.0@dev" - } -} diff --git a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php b/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php deleted file mode 100644 index 91dd99d36133646b16618513cf6d88eedd66802c..0000000000000000000000000000000000000000 --- a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php +++ /dev/null @@ -1,111 +0,0 @@ -<?php - -namespace rvtraveller\QuicksilverComposerInstaller; - -use Composer\Package\PackageInterface; -use Composer\Installer\LibraryInstaller; - -class QuicksilverComposerInstaller extends LibraryInstaller -{ - - - /** - * Replace vars in a path - * - * @param string $path - * @param array $vars - * @return string - */ - protected function templatePath($path, array $vars = array()) - { - if (strpos($path, '{') !== false) { - extract($vars); - preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches); - if (!empty($matches[1])) { - foreach ($matches[1] as $var) { - $path = str_replace('{$' . $var . '}', $$var, $path); - } - } - } - - return $path; - } - - /** - * Search through a passed paths array for a custom install path. - * - * @param array $paths - * @param string $name - * @param string $type - * @param string $vendor = NULL - * @return string - */ - protected function mapCustomInstallPaths(array $paths, $name, $type, $vendor = NULL) - { - foreach ($paths as $path => $names) { - if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) { - return $path; - } - } - - return false; - } - - /** - * Return the install path based on package type. - * - * @param PackageInterface $package - * @param string $frameworkType - * @return string - */ - public function getInstallPath(PackageInterface $package, $frameworkType = '') - { - $packageType = $package->getType(); - - $prettyName = $package->getPrettyName(); - if (strpos($prettyName, '/') !== false) { - list($vendor, $name) = explode('/', $prettyName); - } else { - $vendor = ''; - $name = $prettyName; - } - - $availableVars = [ - 'name' => $name, - 'vendor' => $vendor, - 'type' => $packageType - ]; - - $extra = $package->getExtra(); - if (!empty($extra['installer-name'])) { - $availableVars['name'] = $extra['installer-name']; - } - - if ($this->composer->getPackage()) { - $extra = $this->composer->getPackage()->getExtra(); - if (!empty($extra['installer-paths'])) { - $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $packageType, $vendor); - if ($customPath !== false) { - return $this->templatePath($customPath, $availableVars); - } - } - } - - $locations = [ - 'quicksilver-script' => 'web/private/scripts/quicksilver/{$name}/', - 'quicksilver-module' => 'web/private/scripts/quicksilver/{$name}/', - ]; - - return $this->templatePath($locations[$packageType], $availableVars); - } - - - /** - * {@inheritDoc} - */ - public function supports($packageType) - { - return in_array($packageType, ['quicksilver-script', 'quicksilver-module']); - } - -} diff --git a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php b/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php deleted file mode 100644 index 0e8e27effb8698cd4fd582913acd4886be304b9d..0000000000000000000000000000000000000000 --- a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php - -namespace rvtraveller\QuicksilverComposerInstaller; - -use Composer\Composer; -use Composer\IO\IOInterface; -use Composer\Plugin\PluginInterface; - -class QuicksilverComposerInstallerPlugin implements PluginInterface -{ - public function activate(Composer $composer, IOInterface $io) - { - // Strange autoloading problem on CircleCI - if (!class_exists(QuickSilverComposerInstaller::class)) { - include_once __DIR__ . '/QuicksilverComposerInstaller.php'; - } - $installer = new QuickSilverComposerInstaller($io, $composer); - $composer->getInstallationManager()->addInstaller($installer); - } -} diff --git a/web/.csslintrc b/web/.csslintrc new file mode 100644 index 0000000000000000000000000000000000000000..177e4fcc7e8cc613b415dcbe3706d00d0d9bc0b1 --- /dev/null +++ b/web/.csslintrc @@ -0,0 +1,40 @@ +--errors=box-model, + display-property-grouping, + duplicate-background-images, + duplicate-properties, + empty-rules, + ids, + import, + important, + known-properties, + outline-none, + overqualified-elements, + qualified-headings, + shorthand, + star-property-hack, + text-indent, + underscore-property-hack, + unique-headings, + unqualified-attributes, + vendor-prefix, + zero-units +--ignore=adjoining-classes, + box-sizing, + bulletproof-font-face, + compatible-vendor-prefixes, + errors, + fallback-colors, + floats, + font-faces, + font-sizes, + gradients, + import-ie-limit, + order-alphabetical, + regex-selectors, + rules-count, + selector-max, + selector-max-approaching, + selector-newline, + universal-selector +--exclude-list=core/assets, + vendor diff --git a/web/.eslintignore b/web/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..9c134873d484956a9b6c87447e82b792cd27334c --- /dev/null +++ b/web/.eslintignore @@ -0,0 +1,8 @@ +core/**/* +vendor/**/* +sites/**/files/**/* +libraries/**/* +sites/**/libraries/**/* +profiles/**/libraries/**/* +**/js_test_files/**/* +**/node_modules/**/* diff --git a/web/.eslintrc.json b/web/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..d4bbc92052201490a83d06dd502318ee600f07f7 --- /dev/null +++ b/web/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "./core/.eslintrc.json" +} diff --git a/web/.htaccess b/web/.htaccess index 09b703d23f6f2192d58462b54bcb40213585e46d..6f9123d14b13f8cdff5024d7a29374ad820342be 100644 --- a/web/.htaccess +++ b/web/.htaccess @@ -3,7 +3,7 @@ # # Protect files and directories from prying eyes. -<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$"> +<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$"> <IfModule mod_authz_core.c> Require all denied </IfModule> @@ -27,16 +27,9 @@ AddEncoding gzip svgz # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be # changed at runtime. -# PHP 5, Apache 1 and 2. -<IfModule mod_php5.c> +# PHP 7, Apache 1 and 2. +<IfModule mod_php7.c> php_value assert.active 0 - php_flag session.auto_start off - php_value mbstring.http_input pass - php_value mbstring.http_output pass - php_flag mbstring.encoding_translation off - # PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is - # not set. - php_value always_populate_raw_post_data -1 </IfModule> # Requires mod_expires to be enabled. @@ -144,7 +137,6 @@ AddEncoding gzip svgz # security, you can replace '!/' with '!^/'. # Allow access to PHP files in /core (like authorize.php or install.php): RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$ - RewriteCond %{REQUEST_URI} !/simplesaml/[^/]*\.php.*$ # Allow access to test-specific PHP files: RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php # Allow access to Statistics module's custom front controller. @@ -168,9 +160,9 @@ AddEncoding gzip svgz RewriteCond %{REQUEST_FILENAME}\.gz -s RewriteRule ^(.*)\.js $1\.js\.gz [QSA] - # Serve correct content types, and prevent mod_deflate double gzip. - RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1] - RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1] + # Serve correct content types, and prevent double compression. + RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1] + RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1] <FilesMatch "(\.js\.gz|\.css\.gz)$"> # Serve correct encoding type.