From 21e7a4d966ff81024584206876ebe67d4b44fc21 Mon Sep 17 00:00:00 2001 From: hide_d Date: Fri, 6 Aug 2021 22:39:09 +0900 Subject: [PATCH] Dep: update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 주로 PHAN --- .phan/config.php | 1 - composer.json | 2 +- composer.lock | 1464 +++- vendor/bin/phan | 15 +- vendor/bin/phan.bat | 4 - vendor/bin/phan_client | 15 +- vendor/bin/phan_client.bat | 4 - vendor/bin/pscss | 15 +- vendor/bin/pscss.bat | 4 - vendor/bin/tocheckstyle | 15 +- vendor/bin/tocheckstyle.bat | 4 - vendor/catfan/medoo/src/Medoo.php | 17 +- vendor/composer/ClassLoader.php | 6 +- vendor/composer/InstalledVersions.php | 684 ++ vendor/composer/autoload_classmap.php | 52 +- vendor/composer/autoload_files.php | 17 +- vendor/composer/autoload_psr4.php | 6 + vendor/composer/autoload_real.php | 7 +- vendor/composer/autoload_static.php | 99 +- vendor/composer/installed.json | 5605 +++++++------ vendor/composer/installed.php | 489 ++ vendor/composer/platform_check.php | 26 + vendor/composer/semver/CHANGELOG.md | 94 + vendor/composer/semver/README.md | 36 +- vendor/composer/semver/composer.json | 10 +- vendor/composer/semver/src/Comparator.php | 4 +- .../composer/semver/src/CompilingMatcher.php | 71 + .../src/Constraint/AbstractConstraint.php | 63 - .../composer/semver/src/Constraint/Bound.php | 122 + .../semver/src/Constraint/Constraint.php | 334 +- .../src/Constraint/ConstraintInterface.php | 43 + ...yConstraint.php => MatchAllConstraint.php} | 38 +- .../src/Constraint/MatchNoneConstraint.php | 83 + .../semver/src/Constraint/MultiConstraint.php | 223 +- vendor/composer/semver/src/Interval.php | 98 + vendor/composer/semver/src/Intervals.php | 478 ++ vendor/composer/semver/src/Semver.php | 24 +- vendor/composer/semver/src/VersionParser.php | 178 +- vendor/composer/xdebug-handler/CHANGELOG.md | 44 +- vendor/composer/xdebug-handler/README.md | 43 +- vendor/composer/xdebug-handler/UPGRADE.md | 30 + vendor/composer/xdebug-handler/composer.json | 8 +- .../composer/xdebug-handler/src/PhpConfig.php | 19 +- .../composer/xdebug-handler/src/Process.php | 91 +- vendor/composer/xdebug-handler/src/Status.php | 12 +- .../xdebug-handler/src/XdebugHandler.php | 168 +- vendor/ezyang/htmlpurifier/INSTALL | 341 - vendor/ezyang/htmlpurifier/INSTALL.fr.utf8 | 60 - vendor/ezyang/htmlpurifier/NEWS | 1224 --- vendor/ezyang/htmlpurifier/TODO | 150 - vendor/ezyang/htmlpurifier/VERSION | 2 +- vendor/ezyang/htmlpurifier/WHATSNEW | 2 - vendor/ezyang/htmlpurifier/WYSIWYG | 20 - vendor/ezyang/htmlpurifier/composer.json | 5 +- .../extras/ConfigDoc/HTMLXSLTProcessor.php | 91 - vendor/ezyang/htmlpurifier/extras/FSTools.php | 164 - .../htmlpurifier/extras/FSTools/File.php | 141 - .../extras/HTMLPurifierExtras.auto.php | 11 - .../HTMLPurifierExtras.autoload-legacy.php | 15 - .../extras/HTMLPurifierExtras.autoload.php | 23 - .../extras/HTMLPurifierExtras.php | 31 - vendor/ezyang/htmlpurifier/extras/README | 32 - .../library/HTMLPurifier.includes.php | 2 +- .../htmlpurifier/library/HTMLPurifier.php | 7 +- .../HTMLPurifier/AttrDef/CSS/Number.php | 8 +- .../library/HTMLPurifier/Config.php | 16 +- .../HTMLPurifier/ConfigSchema/schema.ser | 2 +- .../ConfigSchema/schema/HTML.Forms.txt | 11 + .../library/HTMLPurifier/HTMLModule/Forms.php | 4 + .../HTMLModule/Tidy/XHTMLAndHTML4.php | 1 + .../Language/classes/en-x-test.php | 9 - .../Language/messages/en-x-test.php | 13 - .../Language/messages/en-x-testmini.php | 14 - .../HTMLPurifier/Printer/HTMLDefinition.php | 4 +- .../ezyang/htmlpurifier/maintenance/.htaccess | 7 - .../htmlpurifier/maintenance/PH5P.patch | 102 - .../ezyang/htmlpurifier/maintenance/PH5P.php | 3889 --------- .../htmlpurifier/maintenance/add-vimline.php | 130 - .../htmlpurifier/maintenance/common.php | 25 - .../maintenance/compile-doxygen.sh | 11 - .../maintenance/config-scanner.php | 155 - .../maintenance/flush-definition-cache.php | 42 - .../ezyang/htmlpurifier/maintenance/flush.sh | 8 - .../maintenance/generate-entity-file.php | 75 - .../maintenance/generate-includes.php | 192 - .../maintenance/generate-ph5p-patch.php | 22 - .../maintenance/generate-schema-cache.php | 45 - .../maintenance/generate-standalone.php | 159 - .../maintenance/merge-library.php | 11 - .../maintenance/old-extract-schema.php | 71 - .../maintenance/old-remove-require-once.php | 32 - .../maintenance/old-remove-schema-def.php | 32 - .../maintenance/regenerate-docs.sh | 5 - .../remove-trailing-whitespace.php | 37 - .../maintenance/rename-config.php | 84 - vendor/ezyang/htmlpurifier/package.php | 61 - vendor/ezyang/htmlpurifier/phpdoc.ini | 102 - vendor/ezyang/htmlpurifier/plugins/modx.txt | 112 - .../htmlpurifier/plugins/phorum/.gitignore | 2 - .../htmlpurifier/plugins/phorum/Changelog | 27 - .../htmlpurifier/plugins/phorum/INSTALL | 84 - .../ezyang/htmlpurifier/plugins/phorum/README | 45 - .../plugins/phorum/config.default.php | 58 - .../plugins/phorum/htmlpurifier.php | 316 - .../htmlpurifier/plugins/phorum/info.txt | 18 - .../plugins/phorum/init-config.php | 30 - .../plugins/phorum/migrate.bbcode.php | 31 - .../htmlpurifier/plugins/phorum/settings.php | 64 - .../plugins/phorum/settings/form.php | 95 - .../phorum/settings/migrate-sigs-form.php | 22 - .../plugins/phorum/settings/migrate-sigs.php | 79 - .../plugins/phorum/settings/save.php | 29 - .../htmlpurifier/test-settings.sample.php | 74 - .../htmlpurifier/test-settings.travis.php | 72 - .../htmlpurifier/tests/path2class.func.php | 15 - vendor/ezyang/htmlpurifier/update-for-release | 110 - .../.github/workflows/build.yml | 63 + .../advanced-json-rpc/.travis.yml | 43 - .../advanced-json-rpc/composer.json | 8 +- .../advanced-json-rpc/lib/Dispatcher.php | 1 - vendor/guzzlehttp/guzzle/CHANGELOG.md | 18 +- vendor/guzzlehttp/guzzle/composer.json | 4 +- vendor/guzzlehttp/guzzle/src/Client.php | 24 +- .../guzzlehttp/guzzle/src/ClientInterface.php | 2 +- .../guzzle/src/Handler/CurlMultiHandler.php | 8 +- .../guzzle/src/Handler/StreamHandler.php | 5 +- .../guzzle/src/RedirectMiddleware.php | 2 +- vendor/guzzlehttp/guzzle/src/Utils.php | 92 + vendor/guzzlehttp/guzzle/src/functions.php | 62 +- vendor/guzzlehttp/promises/CHANGELOG.md | 19 + vendor/guzzlehttp/promises/README.md | 42 +- vendor/guzzlehttp/promises/composer.json | 13 +- .../promises/src/AggregateException.php | 1 + .../promises/src/CancellationException.php | 1 + vendor/guzzlehttp/promises/src/Coroutine.php | 28 +- vendor/guzzlehttp/promises/src/Create.php | 84 + vendor/guzzlehttp/promises/src/Each.php | 90 + .../guzzlehttp/promises/src/EachPromise.php | 71 +- .../promises/src/FulfilledPromise.php | 10 +- vendor/guzzlehttp/promises/src/Is.php | 46 + vendor/guzzlehttp/promises/src/Promise.php | 68 +- .../promises/src/PromiseInterface.php | 4 + .../promises/src/PromisorInterface.php | 1 + .../promises/src/RejectedPromise.php | 14 +- .../promises/src/RejectionException.php | 3 +- vendor/guzzlehttp/promises/src/TaskQueue.php | 5 +- .../promises/src/TaskQueueInterface.php | 3 +- vendor/guzzlehttp/promises/src/Utils.php | 274 + vendor/guzzlehttp/promises/src/functions.php | 254 +- .../guzzlehttp/psr7/.github/workflows/bc.yml | 16 + .../guzzlehttp/psr7/.github/workflows/ci.yml | 30 + .../psr7/.github/workflows/integration.yml | 37 + .../psr7/.github/workflows/static.yml | 29 + vendor/guzzlehttp/psr7/.php_cs.dist | 56 + vendor/guzzlehttp/psr7/CHANGELOG.md | 54 +- vendor/guzzlehttp/psr7/README.md | 360 +- vendor/guzzlehttp/psr7/composer.json | 6 +- vendor/guzzlehttp/psr7/src/AppendStream.php | 7 +- vendor/guzzlehttp/psr7/src/BufferStream.php | 5 + vendor/guzzlehttp/psr7/src/CachingStream.php | 9 +- vendor/guzzlehttp/psr7/src/DroppingStream.php | 3 + vendor/guzzlehttp/psr7/src/FnStream.php | 5 + vendor/guzzlehttp/psr7/src/Header.php | 71 + vendor/guzzlehttp/psr7/src/InflateStream.php | 4 + vendor/guzzlehttp/psr7/src/LazyOpenStream.php | 7 +- vendor/guzzlehttp/psr7/src/LimitStream.php | 6 +- vendor/guzzlehttp/psr7/src/Message.php | 252 + vendor/guzzlehttp/psr7/src/MessageTrait.php | 7 +- vendor/guzzlehttp/psr7/src/MimeType.php | 140 + .../guzzlehttp/psr7/src/MultipartStream.php | 19 +- vendor/guzzlehttp/psr7/src/NoSeekStream.php | 5 +- vendor/guzzlehttp/psr7/src/PumpStream.php | 23 +- vendor/guzzlehttp/psr7/src/Query.php | 113 + vendor/guzzlehttp/psr7/src/Request.php | 7 +- vendor/guzzlehttp/psr7/src/Response.php | 7 +- vendor/guzzlehttp/psr7/src/Rfc7230.php | 1 + vendor/guzzlehttp/psr7/src/ServerRequest.php | 15 +- vendor/guzzlehttp/psr7/src/Stream.php | 9 +- .../psr7/src/StreamDecoratorTrait.php | 5 +- vendor/guzzlehttp/psr7/src/StreamWrapper.php | 4 + vendor/guzzlehttp/psr7/src/UploadedFile.php | 40 +- vendor/guzzlehttp/psr7/src/Uri.php | 62 +- vendor/guzzlehttp/psr7/src/UriNormalizer.php | 3 + vendor/guzzlehttp/psr7/src/UriResolver.php | 3 + vendor/guzzlehttp/psr7/src/Utils.php | 428 + vendor/guzzlehttp/psr7/src/functions.php | 749 +- .../league/plates/.github/workflows/docs.yml | 26 + .../league/plates/.github/workflows/php.yml | 35 + vendor/league/plates/CONTRIBUTING.md | 7 + vendor/league/plates/README.md | 25 +- vendor/league/plates/composer.json | 23 +- vendor/league/plates/doc/config.toml | 15 + .../{docs/index.md => doc/content/_index.md} | 37 +- .../plates/doc/content/engine/_index.md | 6 + .../content}/engine/extensions.md | 23 +- .../content}/engine/file-extensions.md | 15 +- .../{docs => doc/content}/engine/folders.md | 15 +- .../{docs => doc/content}/engine/functions.md | 21 +- .../content/engine/overview.md} | 20 +- .../plates/doc/content/extensions/_index.md | 6 + .../{docs => doc/content}/extensions/asset.md | 14 +- .../doc/content/extensions/community.md | 13 + .../{docs => doc/content}/extensions/uri.md | 14 +- .../doc/content/getting-started/_index.md | 6 + .../content/getting-started}/installation.md | 16 +- .../getting-started}/simple-example.md | 30 +- .../plates/doc/content/templates/_index.md | 6 + .../{docs => doc/content}/templates/data.md | 19 +- .../content}/templates/escaping.md | 19 +- .../content}/templates/functions.md | 21 +- .../content}/templates/inheritance.md | 30 +- .../content}/templates/layouts.md | 32 +- .../content}/templates/nesting.md | 19 +- .../content/templates/overview.md} | 21 +- .../content}/templates/sections.md | 25 +- .../{docs => doc/content}/templates/syntax.md | 17 +- .../plates/doc/layouts/_default/baseof.html | 114 + .../plates/doc/layouts/_default/list.html | 4 + .../plates/doc/layouts/_default/single.html | 4 + .../plates/doc/layouts/partials/title.html | 11 + .../doc/layouts/shortcodes/code-filename.html | 1 + .../plates/doc/layouts/shortcodes/html.html | 3 + .../league/plates/{docs => doc/static}/CNAME | 0 .../custom.scss => doc/static/css/custom.css} | 15 +- .../favicon}/apple-touch-icon-precomposed.png | Bin .../{docs => doc/static/favicon}/favicon.ico | Bin .../{docs => doc/static/images}/logo.png | Bin vendor/league/plates/docs/_data/images.yml | 8 - vendor/league/plates/docs/_data/menu.yml | 24 - vendor/league/plates/docs/_data/project.yml | 4 - .../league/plates/docs/_layouts/default.html | 107 - vendor/league/plates/docs/changelog.md | 15 - vendor/league/plates/phpunit.xml.dist | 42 +- vendor/league/plates/src/Extension/Asset.php | 2 +- vendor/league/plates/src/Template/Name.php | 12 +- .../league/plates/src/Template/Template.php | 46 +- .../tolerant-php-parser/composer.json | 4 +- .../tolerant-php-parser/phpstan.neon | 1 - .../src/FilePositionMap.php | 31 +- .../tolerant-php-parser/src/FunctionLike.php | 4 + .../tolerant-php-parser/src/MissingToken.php | 3 + .../src/ModifiedTypeInterface.php | 16 + .../src/ModifiedTypeTrait.php | 46 + .../tolerant-php-parser/src/Node.php | 64 +- .../src/Node/AnonymousFunctionUseClause.php | 3 +- .../src/Node/Attribute.php | 31 + .../src/Node/AttributeGroup.php | 28 + .../src/Node/CatchClause.php | 19 +- .../src/Node/ClassConstDeclaration.php | 9 +- .../DelimitedList/AttributeElementList.php | 12 + .../DelimitedList/DeclareDirectiveList.php | 12 + .../DelimitedList/MatchArmConditionList.php | 12 + .../DelimitedList/MatchExpressionArmList.php | 12 + .../src/Node/EnumCaseDeclaration.php | 39 + .../src/Node/EnumMembers.php | 27 + .../AnonymousFunctionCreationExpression.php | 4 +- .../Node/Expression/ArgumentExpression.php | 10 +- .../ArrowFunctionCreationExpression.php | 4 +- .../src/Node/Expression/MatchExpression.php | 47 + .../Expression/ObjectCreationExpression.php | 7 +- .../ThrowExpression.php} | 8 +- .../src/Node/FunctionHeader.php | 2 + .../src/Node/FunctionReturnType.php | 7 +- .../tolerant-php-parser/src/Node/MatchArm.php | 29 + .../src/Node/MethodDeclaration.php | 96 +- .../src/Node/MissingDeclaration.php | 23 + .../src/Node/MissingMemberDeclaration.php | 18 +- .../src/Node/Parameter.php | 22 +- .../src/Node/PropertyDeclaration.php | 38 +- .../src/Node/QualifiedName.php | 4 +- .../Statement/BreakOrContinueStatement.php | 7 +- .../src/Node/Statement/ClassDeclaration.php | 5 + .../src/Node/Statement/DeclareStatement.php | 10 +- .../EchoStatement.php} | 17 +- .../src/Node/Statement/EnumDeclaration.php | 50 + .../Node/Statement/FunctionDeclaration.php | 4 +- .../Node/Statement/InterfaceDeclaration.php | 5 + .../Node/Statement/NamedLabelStatement.php | 3 - .../src/Node/Statement/TraitDeclaration.php | 5 + .../UnsetStatement.php} | 10 +- .../src/Node/TraitSelectOrAliasClause.php | 30 +- .../tolerant-php-parser/src/ParseContext.php | 1 + .../tolerant-php-parser/src/Parser.php | 728 +- .../tolerant-php-parser/src/PhpTokenizer.php | 87 +- .../tolerant-php-parser/src/SkippedToken.php | 3 + .../tolerant-php-parser/src/Token.php | 5 +- .../tolerant-php-parser/src/TokenKind.php | 10 + .../src/TokenStringMaps.php | 15 +- vendor/monolog/monolog/CHANGELOG.md | 19 + vendor/monolog/monolog/composer.json | 18 +- vendor/monolog/monolog/phpstan.neon.dist | 16 + .../monolog/src/Monolog/ErrorHandler.php | 2 +- .../Monolog/Formatter/NormalizerFormatter.php | 8 +- .../src/Monolog/Handler/AbstractHandler.php | 4 +- .../src/Monolog/Handler/DynamoDbHandler.php | 1 + .../src/Monolog/Handler/FirePHPHandler.php | 2 +- .../src/Monolog/Handler/GelfHandler.php | 2 +- .../src/Monolog/Handler/HipChatHandler.php | 4 +- .../src/Monolog/Handler/RavenHandler.php | 4 +- .../src/Monolog/Handler/RedisHandler.php | 2 +- .../Monolog/Handler/RotatingFileHandler.php | 3 +- .../src/Monolog/Handler/StreamHandler.php | 8 +- vendor/monolog/monolog/src/Monolog/Logger.php | 4 +- .../src/Monolog/Processor/GitProcessor.php | 2 +- .../Processor/PsrLogMessageProcessor.php | 37 +- .../src/Monolog/Processor/WebProcessor.php | 8 +- vendor/monolog/monolog/src/Monolog/Utils.php | 32 +- vendor/netresearch/jsonmapper/composer.json | 4 +- vendor/netresearch/jsonmapper/phpunit.xml | 18 + .../netresearch/jsonmapper/src/JsonMapper.php | 109 +- vendor/nette/caching/composer.json | 15 +- vendor/nette/caching/readme.md | 506 +- .../src/Bridges/CacheDI/CacheExtension.php | 4 +- .../src/Bridges/CacheLatte/CacheMacro.php | 55 +- .../{IBulkReader.php => BulkReader.php} | 6 +- vendor/nette/caching/src/Caching/Cache.php | 86 +- .../caching/src/Caching/OutputHelper.php | 10 + .../src/Caching/{IStorage.php => Storage.php} | 6 +- .../src/Caching/Storages/DevNullStorage.php | 2 +- .../src/Caching/Storages/FileStorage.php | 55 +- .../Storages/{IJournal.php => Journal.php} | 6 +- .../src/Caching/Storages/MemcachedStorage.php | 14 +- .../src/Caching/Storages/MemoryStorage.php | 2 +- .../src/Caching/Storages/SQLiteJournal.php | 2 +- .../src/Caching/Storages/SQLiteStorage.php | 22 +- vendor/nette/caching/src/compatibility.php | 39 + vendor/nette/utils/composer.json | 11 +- vendor/nette/utils/readme.md | 29 +- .../IHtmlString.php => HtmlStringable.php} | 7 +- .../utils/src/Iterators/CachingIterator.php | 2 +- .../utils/src/{Utils => }/SmartObject.php | 21 +- .../utils/src/{Utils => }/StaticClass.php | 2 +- .../{Utils/ITranslator.php => Translator.php} | 5 +- vendor/nette/utils/src/Utils/ArrayHash.php | 17 +- vendor/nette/utils/src/Utils/Arrays.php | 258 +- vendor/nette/utils/src/Utils/Callback.php | 26 +- vendor/nette/utils/src/Utils/DateTime.php | 34 +- vendor/nette/utils/src/Utils/FileSystem.php | 87 +- vendor/nette/utils/src/Utils/Floats.php | 107 + vendor/nette/utils/src/Utils/Helpers.php | 15 +- vendor/nette/utils/src/Utils/Html.php | 25 +- vendor/nette/utils/src/Utils/Image.php | 136 +- vendor/nette/utils/src/Utils/Json.php | 5 +- .../nette/utils/src/Utils/ObjectHelpers.php | 4 +- vendor/nette/utils/src/Utils/Paginator.php | 16 +- vendor/nette/utils/src/Utils/Random.php | 3 +- vendor/nette/utils/src/Utils/Reflection.php | 167 +- vendor/nette/utils/src/Utils/Strings.php | 114 +- vendor/nette/utils/src/Utils/Validators.php | 82 +- vendor/nette/utils/src/Utils/exceptions.php | 101 - vendor/nette/utils/src/compatibility.php | 32 + vendor/nette/utils/src/exceptions.php | 109 + vendor/phan/phan/.azure/job.yml | 52 + vendor/phan/phan/.phan/config.php | 187 +- .../phan/.phan/internal_stubs/ast.phan_php | 33 +- .../phan/.phan/internal_stubs/ctype.phan_php | 2 +- .../.phan/internal_stubs/igbinary.phan_php | 2 +- .../.phan/internal_stubs/mbstring.phan_php | 6 +- .../phan/.phan/internal_stubs/pcntl.phan_php | 3 +- .../phan/.phan/internal_stubs/phar.phan_php | 199 + .../phan/.phan/internal_stubs/posix.phan_php | 2 +- .../.phan/internal_stubs/readline.phan_php | 2 +- .../.phan/internal_stubs/simplexml.phan_php | 43 + .../.phan/internal_stubs/sysvmsg.phan_php | 2 +- .../.phan/internal_stubs/sysvsem.phan_php | 2 +- .../.phan/internal_stubs/sysvshm.phan_php | 2 +- .../phan/.phan/plugins/AlwaysReturnPlugin.php | 4 +- .../.phan/plugins/AvoidableGetterPlugin.php | 4 +- .../.phan/plugins/ConstantVariablePlugin.php | 97 + .../.phan/plugins/DeprecateAliasPlugin.php | 393 + .../plugins/DeprecateAliasPlugin/fixers.php | 72 + .../.phan/plugins/DuplicateArrayKeyPlugin.php | 79 +- .../.phan/plugins/DuplicateConstantPlugin.php | 114 + .../plugins/DuplicateExpressionPlugin.php | 110 +- .../plugins/EmptyMethodAndFunctionPlugin.php | 58 +- .../plugins/EmptyStatementListPlugin.php | 6 +- .../phan/.phan/plugins/InlineHTMLPlugin.php | 7 +- .../InvokePHPNativeSyntaxCheckPlugin.php | 9 +- .../.phan/plugins/LoopVariableReusePlugin.php | 200 +- .../plugins/MoreSpecificElementTypePlugin.php | 8 +- .../NotFullyQualifiedUsagePlugin/fixers.php | 2 +- .../plugins/PHP53CompatibilityPlugin.php | 116 + .../plugins/PHPDocInWrongCommentPlugin.php | 98 + .../plugins/PHPDocRedundantPlugin/Fixers.php | 8 +- .../.phan/plugins/PHPDocToRealTypesPlugin.php | 5 +- .../PHPDocToRealTypesPlugin/Fixers.php | 6 +- .../.phan/plugins/PHPUnitAssertionPlugin.php | 12 +- .../plugins/PHPUnitNotDeadCodePlugin.php | 6 +- .../plugins/PossiblyStaticMethodPlugin.php | 9 +- .../PreferNamespaceUsePlugin/Fixers.php | 14 +- .../.phan/plugins/PregRegexCheckerPlugin.php | 109 +- .../.phan/plugins/PrintfCheckerPlugin.php | 23 +- vendor/phan/phan/.phan/plugins/README.md | 88 +- .../plugins/RedundantAssignmentPlugin.php | 2 +- .../plugins/RemoveDebugStatementPlugin.php | 169 + .../phan/.phan/plugins/ShortArrayPlugin.php | 69 + .../plugins/SimplifyExpressionPlugin.php | 187 + .../plugins/StaticVariableMisusePlugin.php | 88 + .../.phan/plugins/StrictComparisonPlugin.php | 8 +- .../plugins/StrictLiteralComparisonPlugin.php | 4 +- .../plugins/SuspiciousParamOrderPlugin.php | 122 +- .../UnknownClassElementAccessPlugin.php | 14 +- .../plugins/UnknownElementTypePlugin.php | 13 +- .../phan/.phan/plugins/UnsafeCodePlugin.php | 106 + .../.phan/plugins/UnusedSuppressionPlugin.php | 34 +- .../phan/.phan/plugins/WhitespacePlugin.php | 4 +- .../.phan/plugins/WhitespacePlugin/fixers.php | 2 +- vendor/phan/phan/NEWS.md | 855 +- vendor/phan/phan/README.md | 50 +- vendor/phan/phan/azure-pipelines.yml | 28 + vendor/phan/phan/composer.json | 27 +- vendor/phan/phan/composer.lock | 1807 +++-- vendor/phan/phan/phan | 3 +- vendor/phan/phan/phan_client | 21 +- vendor/phan/phan/src/Phan/AST/ASTHasher.php | 45 +- vendor/phan/phan/src/Phan/AST/ASTReverter.php | 260 +- .../phan/phan/src/Phan/AST/ASTSimplifier.php | 118 +- vendor/phan/phan/src/Phan/AST/ArrowFunc.php | 4 +- vendor/phan/phan/src/Phan/AST/ContextNode.php | 332 +- .../src/Phan/AST/FallbackUnionTypeVisitor.php | 65 +- .../src/Phan/AST/InferPureSnippetVisitor.php | 176 + .../phan/src/Phan/AST/InferPureVisitor.php | 171 +- vendor/phan/phan/src/Phan/AST/Parser.php | 60 +- .../phan/src/Phan/AST/PhanAnnotationAdder.php | 16 +- .../Phan/AST/ScopeImpactCheckingVisitor.php | 2 +- .../TolerantASTConverter/CompatibleParser.php | 42 + .../CompatiblePhpTokenizer.php | 48 + .../AST/TolerantASTConverter/NodeDumper.php | 5 +- .../PhpParserNodeEntry.php | 4 +- .../Phan/AST/TolerantASTConverter/Shim.php | 103 +- .../TolerantASTConverter/ShimFunctions.php | 17 +- .../AST/TolerantASTConverter/StringUtil.php | 3 + .../TolerantASTConverter.php | 790 +- ...TolerantASTConverterPreservingOriginal.php | 2 + .../TolerantASTConverterTrait.php | 92 + .../TolerantASTConverterWithNodeMapping.php | 11 +- .../AST/TolerantASTConverter/ast_shim.php | 207 +- .../phan/src/Phan/AST/UnionTypeVisitor.php | 843 +- .../phan/src/Phan/AST/Visitor/Element.php | 24 +- .../phan/src/Phan/AST/Visitor/FlagVisitor.php | 5 + .../AST/Visitor/FlagVisitorImplementation.php | 5 + .../phan/src/Phan/AST/Visitor/KindVisitor.php | 66 + .../AST/Visitor/KindVisitorImplementation.php | 67 + vendor/phan/phan/src/Phan/Analysis.php | 90 +- .../phan/src/Phan/Analysis/Analyzable.php | 4 +- .../phan/src/Phan/Analysis/ArgumentType.php | 601 +- .../AssignOperatorAnalysisVisitor.php | 28 +- .../Analysis/AssignOperatorFlagVisitor.php | 70 +- .../src/Phan/Analysis/AssignmentVisitor.php | 343 +- .../src/Phan/Analysis/AttributeAnalyzer.php | 311 + .../Analysis/BinaryOperatorFlagVisitor.php | 86 +- .../Phan/Analysis/BlockExitStatusChecker.php | 162 +- .../Analysis/ClassConstantTypesAnalyzer.php | 108 + .../Analysis/ClassInheritanceAnalyzer.php | 17 +- .../src/Phan/Analysis/CompositionAnalyzer.php | 54 +- .../src/Phan/Analysis/ConditionVisitor.php | 169 +- .../ConditionVisitor/HasTypeCondition.php | 16 +- .../ConditionVisitor/IdenticalCondition.php | 1 + .../ConditionVisitor/NotHasTypeCondition.php | 28 +- .../Phan/Analysis/ConditionVisitorUtil.php | 47 +- .../src/Phan/Analysis/ContextMergeVisitor.php | 64 +- .../Phan/Analysis/DuplicateClassAnalyzer.php | 2 - .../Analysis/DuplicateFunctionAnalyzer.php | 2 - .../Analysis/FallbackMethodTypesVisitor.php | 11 +- .../Phan/Analysis/LoopConditionVisitor.php | 2 +- .../Phan/Analysis/NegatedConditionVisitor.php | 422 +- .../Phan/Analysis/ParameterTypesAnalyzer.php | 512 +- .../Analysis/PostOrderAnalysisVisitor.php | 936 ++- .../Phan/Analysis/PreOrderAnalysisVisitor.php | 87 +- .../Phan/Analysis/PropertyTypesAnalyzer.php | 17 +- .../src/Phan/Analysis/ReachabilityChecker.php | 43 +- .../src/Phan/Analysis/RedundantCondition.php | 3 +- .../Phan/Analysis/ReferenceCountsAnalyzer.php | 35 +- .../phan/src/Phan/Analysis/ScopeVisitor.php | 21 +- .../src/Phan/Analysis/ThrowsTypesAnalyzer.php | 3 +- .../phan/src/Phan/BlockAnalysisVisitor.php | 1089 ++- vendor/phan/phan/src/Phan/Bootstrap.php | 213 +- vendor/phan/phan/src/Phan/CLI.php | 296 +- vendor/phan/phan/src/Phan/CodeBase.php | 188 +- vendor/phan/phan/src/Phan/Config.php | 267 +- .../phan/phan/src/Phan/Config/Initializer.php | 21 +- vendor/phan/phan/src/Phan/Daemon.php | 14 +- vendor/phan/phan/src/Phan/Daemon/Request.php | 41 +- .../Phan/Daemon/Transport/StreamResponder.php | 1 + vendor/phan/phan/src/Phan/Debug.php | 9 + .../phan/phan/src/Phan/Debug/Breakpoint.php | 9 + .../phan/src/Phan/Debug/DebugUnionType.php | 2 + vendor/phan/phan/src/Phan/Debug/Frame.php | 1 + .../phan/src/Phan/Debug/SignalHandler.php | 1 + .../UnanalyzableMagicPropertyException.php | 43 + vendor/phan/phan/src/Phan/ForkPool.php | 13 +- vendor/phan/phan/src/Phan/ForkPool/Reader.php | 1 + vendor/phan/phan/src/Phan/ForkPool/Writer.php | 1 + vendor/phan/phan/src/Phan/Issue.php | 1006 ++- .../phan/phan/src/Phan/IssueFixSuggester.php | 85 +- vendor/phan/phan/src/Phan/IssueInstance.php | 1 + .../src/Phan/Language/AnnotatedUnionType.php | 10 + .../phan/phan/src/Phan/Language/Context.php | 76 +- .../Language/Element/AddressableElement.php | 15 +- .../Element/AddressableElementInterface.php | 8 + .../src/Phan/Language/Element/Attribute.php | 202 + .../Phan/Language/Element/ClassConstant.php | 64 +- .../Phan/Language/Element/ClassElement.php | 70 +- .../phan/src/Phan/Language/Element/Clazz.php | 638 +- .../src/Phan/Language/Element/Comment.php | 27 +- .../Phan/Language/Element/Comment/Builder.php | 107 +- .../Language/Element/Comment/Parameter.php | 27 +- .../Language/Element/ElementProxyTrait.php | 78 + .../src/Phan/Language/Element/EnumCase.php | 74 + .../phan/src/Phan/Language/Element/Flags.php | 16 +- .../phan/src/Phan/Language/Element/Func.php | 40 +- .../Phan/Language/Element/FunctionFactory.php | 38 +- .../Language/Element/FunctionInterface.php | 61 +- .../Phan/Language/Element/FunctionTrait.php | 209 +- .../Phan/Language/Element/GlobalConstant.php | 28 +- .../Phan/Language/Element/GlobalVariable.php | 28 + .../Language/Element/HasAttributesTrait.php | 34 + .../Language/Element/MarkupDescription.php | 38 +- .../phan/src/Phan/Language/Element/Method.php | 142 +- .../src/Phan/Language/Element/Parameter.php | 207 +- .../Element/PassByReferenceVariable.php | 97 +- .../src/Phan/Language/Element/Property.php | 22 +- .../Phan/Language/Element/TypedElement.php | 3 +- .../Element/TypedElementInterface.php | 4 +- .../Element/UnaddressableTypedElement.php | 4 +- .../Language/Element/VariadicParameter.php | 5 +- .../phan/src/Phan/Language/EmptyUnionType.php | 199 +- vendor/phan/phan/src/Phan/Language/FQSEN.php | 12 +- .../src/Phan/Language/FQSEN/AbstractFQSEN.php | 26 +- .../src/Phan/Language/FQSEN/Alternatives.php | 3 - .../FQSEN/FullyQualifiedClassElement.php | 7 +- .../FQSEN/FullyQualifiedClassName.php | 13 +- .../FQSEN/FullyQualifiedFunctionName.php | 5 +- .../FullyQualifiedGlobalStructuralElement.php | 4 +- .../phan/phan/src/Phan/Language/FileRef.php | 54 +- .../src/Phan/Language/FutureUnionType.php | 9 + .../Internal/ClassDocumentationMap.php | 8 +- .../Internal/ConstantDocumentationMap.php | 531 +- .../Internal/FunctionDocumentationMap.php | 90 +- .../Internal/FunctionSignatureMap.php | 7052 ++++++++++------- .../Internal/FunctionSignatureMapReal.php | 524 +- .../FunctionSignatureMapReal_php73.php | 7 +- .../FunctionSignatureMap_php70_delta.php | 374 +- .../FunctionSignatureMap_php71_delta.php | 60 +- .../FunctionSignatureMap_php72_delta.php | 258 +- .../FunctionSignatureMap_php73_delta.php | 72 +- .../FunctionSignatureMap_php74_delta.php | 32 +- .../FunctionSignatureMap_php80_delta.php | 984 ++- .../FunctionSignatureMap_php81_delta.php | 25 + .../Internal/PropertyDocumentationMap.php | 1 + .../Phan/Language/Internal/PropertyMap.php | 6 +- .../src/Phan/Language/NamespaceMapEntry.php | 37 +- .../src/Phan/Language/Scope/ClosedScope.php | 3 +- .../src/Phan/Language/Scope/GlobalScope.php | 8 +- vendor/phan/phan/src/Phan/Language/Type.php | 916 ++- .../src/Phan/Language/Type/ArrayShapeType.php | 171 +- .../phan/src/Phan/Language/Type/ArrayType.php | 123 +- .../Language/Type/AssociativeArrayType.php | 16 +- .../phan/src/Phan/Language/Type/BoolType.php | 15 +- .../Phan/Language/Type/CallableArrayType.php | 22 +- .../Language/Type/CallableDeclarationType.php | 30 +- .../Phan/Language/Type/CallableObjectType.php | 39 +- .../Phan/Language/Type/CallableStringType.php | 34 +- .../src/Phan/Language/Type/CallableType.php | 24 +- .../Phan/Language/Type/ClassStringType.php | 3 + .../Type/ClosureDeclarationParameter.php | 21 +- .../Language/Type/ClosureDeclarationType.php | 59 +- .../src/Phan/Language/Type/ClosureType.php | 115 +- .../phan/src/Phan/Language/Type/FalseType.php | 25 +- .../phan/src/Phan/Language/Type/FloatType.php | 15 +- .../Type/FunctionLikeDeclarationType.php | 224 +- .../Phan/Language/Type/GenericArrayType.php | 127 +- .../Language/Type/GenericIterableType.php | 264 +- .../Language/Type/GenericMultiArrayType.php | 18 +- .../phan/src/Phan/Language/Type/IntType.php | 14 +- .../Phan/Language/Type/IntersectionType.php | 825 ++ .../src/Phan/Language/Type/IterableType.php | 33 +- .../phan/src/Phan/Language/Type/ListType.php | 26 +- .../Phan/Language/Type/LiteralFloatType.php | 38 +- .../src/Phan/Language/Type/LiteralIntType.php | 26 +- .../Phan/Language/Type/LiteralStringType.php | 70 +- .../Language/Type/LiteralTypeInterface.php | 2 +- .../phan/src/Phan/Language/Type/MixedType.php | 143 +- .../src/Phan/Language/Type/NativeType.php | 126 +- .../Phan/Language/Type/NativeTypeTrait.php | 80 + .../phan/src/Phan/Language/Type/NeverType.php | 234 + .../Type/NonEmptyAssociativeArrayType.php | 13 +- .../Type/NonEmptyGenericArrayType.php | 7 +- .../Phan/Language/Type/NonEmptyListType.php | 10 +- .../Phan/Language/Type/NonEmptyMixedType.php | 83 +- .../Phan/Language/Type/NonEmptyStringType.php | 36 +- .../Phan/Language/Type/NonNullMixedType.php | 146 + .../src/Phan/Language/Type/NonZeroIntType.php | 26 +- .../phan/src/Phan/Language/Type/NullType.php | 144 +- .../src/Phan/Language/Type/ObjectType.php | 29 +- .../src/Phan/Language/Type/ResourceType.php | 11 +- .../src/Phan/Language/Type/ScalarRawType.php | 2 + .../src/Phan/Language/Type/ScalarType.php | 48 +- .../phan/src/Phan/Language/Type/SelfType.php | 56 +- .../Phan/Language/Type/StaticOrSelfType.php | 8 +- .../src/Phan/Language/Type/StaticType.php | 41 +- .../src/Phan/Language/Type/StringType.php | 29 +- .../src/Phan/Language/Type/TemplateType.php | 83 +- .../phan/src/Phan/Language/Type/TrueType.php | 19 +- .../phan/src/Phan/Language/Type/VoidType.php | 128 +- .../phan/phan/src/Phan/Language/TypePart.php | 41 + .../phan/phan/src/Phan/Language/UnionType.php | 1164 ++- .../src/Phan/Language/UnionTypeBuilder.php | 10 - .../Phan/LanguageServer/CompletionRequest.php | 15 +- .../LanguageServer/CompletionResolver.php | 150 +- .../LanguageServer/DefinitionResolver.php | 39 +- .../Phan/LanguageServer/LanguageServer.php | 40 +- .../phan/src/Phan/LanguageServer/Logger.php | 1 + .../TextDocumentContentChangeEvent.php | 1 - .../LanguageServer/ProtocolStreamWriter.php | 1 - .../phan/phan/src/Phan/Library/DiskCache.php | 4 +- .../phan/phan/src/Phan/Library/FileCache.php | 2 +- .../phan/src/Phan/Library/FileCacheEntry.php | 147 +- vendor/phan/phan/src/Phan/Library/Map.php | 10 +- vendor/phan/phan/src/Phan/Library/None.php | 4 +- vendor/phan/phan/src/Phan/Library/Paths.php | 4 +- .../phan/phan/src/Phan/Library/Restarter.php | 2 + vendor/phan/phan/src/Phan/Library/Set.php | 4 +- vendor/phan/phan/src/Phan/Library/Some.php | 1 + .../phan/src/Phan/Library/StderrLogger.php | 5 +- .../phan/phan/src/Phan/Library/StringUtil.php | 10 +- .../Output/Collector/BufferingCollector.php | 3 +- .../Collector/ParallelChildCollector.php | 4 +- .../Collector/ParallelParentCollector.php | 18 +- .../phan/src/Phan/Output/ColorScheme/Code.php | 1 + .../Phan/Output/ColorScheme/EclipseDark.php | 1 + .../src/Phan/Output/ColorScheme/Light.php | 1 + .../Output/ColorScheme/LightHighContrast.php | 44 + .../phan/src/Phan/Output/ColorScheme/Vim.php | 1 + .../phan/phan/src/Phan/Output/Colorizing.php | 5 +- .../src/Phan/Output/Printer/CSVPrinter.php | 2 +- .../Output/Printer/CapturingJSONPrinter.php | 6 +- .../Phan/Output/Printer/CheckstylePrinter.php | 1 - .../Phan/Output/Printer/PlainTextPrinter.php | 4 +- .../src/Phan/Output/Printer/PylintPrinter.php | 1 + .../Printer/VerbosePlainTextPrinter.php | 54 + .../phan/src/Phan/Output/PrinterFactory.php | 6 +- .../phan/phan/src/Phan/Parse/ParseVisitor.php | 903 ++- vendor/phan/phan/src/Phan/Phan.php | 46 +- .../phan/src/Phan/Plugin/ConfigPluginSet.php | 331 +- .../ArrayReturnTypeOverridePlugin.php | 153 +- .../Plugin/Internal/BaselineSavingPlugin.php | 28 +- .../Internal/BuiltinSuppressionPlugin.php | 12 +- .../Plugin/Internal/CallableParamPlugin.php | 10 +- .../Phan/Plugin/Internal/CompactPlugin.php | 3 +- .../Plugin/Internal/DependencyGraphPlugin.php | 16 +- .../DependentReturnTypeOverridePlugin.php | 56 +- .../Phan/Plugin/Internal/DumpPHPDocPlugin.php | 18 +- ...endedDependentReturnTypeOverridePlugin.php | 1 + .../IssueFixingPlugin/FileContents.php | 159 - .../Internal/IssueFixingPlugin/IssueFixer.php | 7 +- .../Internal/LoopVariableReusePlugin.php | 24 + .../Internal/LoopVariableReuseVisitor.php | 196 + .../Plugin/Internal/MethodSearcherPlugin.php | 17 +- .../Phan/Plugin/Internal/MiscParamPlugin.php | 29 +- .../Phan/Plugin/Internal/PhantasmPlugin.php | 13 +- .../Internal/RedundantConditionCallPlugin.php | 650 +- .../Internal/RedundantConditionLoopCheck.php | 5 +- .../Internal/RedundantConditionVisitor.php | 709 ++ .../Plugin/Internal/RequireExistsPlugin.php | 4 +- .../Plugin/Internal/StringFunctionPlugin.php | 3 + .../Plugin/Internal/ThrowAnalyzerPlugin.php | 96 +- .../Plugin/Internal/UseReturnValuePlugin.php | 20 +- .../UseReturnValuePlugin/PureMethodGraph.php | 19 +- .../RedundantReturnVisitor.php | 10 +- .../UseReturnValueVisitor.php | 220 +- .../VariableTracker/VariableGraph.php | 82 +- .../VariableTrackerVisitor.php | 297 +- .../Plugin/Internal/VariableTrackerPlugin.php | 179 +- vendor/phan/phan/src/Phan/PluginV2.php | 13 - .../PluginV2/AfterAnalyzeFileCapability.php | 28 - .../Phan/PluginV2/AnalyzeClassCapability.php | 21 - .../AnalyzeFunctionCallCapability.php | 12 - .../PluginV2/AnalyzeFunctionCapability.php | 23 - .../Phan/PluginV2/AnalyzeMethodCapability.php | 24 - .../PluginV2/AnalyzePropertyCapability.php | 25 - .../Phan/PluginV2/AutomaticFixCapability.php | 12 - .../Phan/PluginV2/BeforeAnalyzeCapability.php | 22 - .../PluginV2/BeforeAnalyzeFileCapability.php | 27 - .../PluginV2/FinalizeProcessCapability.php | 20 - ...ndleLazyLoadInternalFunctionCapability.php | 24 - .../PluginAwareBaseAnalysisVisitor.php | 88 - .../PluginAwarePostAnalysisVisitor.php | 23 - .../PluginAwarePreAnalysisVisitor.php | 22 - .../PluginV2/PostAnalyzeNodeCapability.php | 13 - .../PluginV2/PreAnalyzeNodeCapability.php | 13 - .../PluginV2/ReturnTypeOverrideCapability.php | 12 - .../PluginV2/StopParamAnalysisException.php | 15 - .../Phan/PluginV2/SuppressionCapability.php | 41 - vendor/phan/phan/src/Phan/PluginV3.php | 13 + .../PluginV3/AfterAnalyzeFileCapability.php | 2 +- .../Phan/PluginV3/AnalyzeClassCapability.php | 2 +- .../PluginV3/AnalyzeFunctionCapability.php | 2 +- .../AnalyzeLiteralStatementCapability.php | 33 + .../Phan/PluginV3/AnalyzeMethodCapability.php | 2 +- .../PluginV3/AnalyzePropertyCapability.php | 3 +- .../Phan/PluginV3/BeforeAnalyzeCapability.php | 2 +- .../PluginV3/BeforeAnalyzeFileCapability.php | 2 +- .../BeforeLoopBodyAnalysisCapability.php | 25 + .../BeforeLoopBodyAnalysisVisitor.php | 27 + .../PluginV3/FinalizeProcessCapability.php | 2 +- ...ndleLazyLoadInternalFunctionCapability.php | 2 +- .../PluginV3/MergeVariableInfoCapability.php | 23 + .../PluginV3/UnloadablePluginException.php | 14 + vendor/phan/phan/src/Phan/Profile.php | 1 + vendor/phan/phan/src/Phan/README.md | 8 +- .../phan/src/Phan/filter_var.php_polyfill | 167 + vendor/phan/phan/src/phan.php | 14 +- vendor/phan/phan/src/prep.php | 5 +- vendor/phan/phan/src/requirements.php | 9 +- vendor/phan/phan/src/spl_object_id.php | 63 - vendor/phan/phan/tocheckstyle | 0 vendor/phan/phan/tool/make_stubs | 61 +- vendor/phan/phan/tool/pdep | 5 +- vendor/phan/phan/tool/phan_repl_helpers.php | 490 ++ vendor/phan/phan/tool/phantasm | 8 +- vendor/phan/phan/tool/phoogle | 9 +- .../reflection-common/.github/dependabot.yml | 7 + .../.github/workflows/push.yml | 22 +- .../reflection-common/.scrutinizer.yml | 48 - .../reflection-common/.travis.yml | 49 - .../phpdocumentor/reflection-common/Makefile | 35 - .../phpdocumentor/reflection-common/README.md | 3 +- .../reflection-common/appveyor.yml | 52 - .../reflection-common/composer.json | 4 +- .../easy-coding-standard.neon | 17 - .../phpdocumentor/reflection-common/phive.xml | 5 - .../reflection-common/phpcs.xml.dist | 11 - .../reflection-common/phpmd.xml.dist | 23 - .../reflection-common/phpstan.neon | 2 - .../phpdocumentor/reflection-common/psalm.xml | 14 - .../.dependabot/config.yml | 12 - .../.github/workflows/push.yml | 250 - .../reflection-docblock/Makefile | 37 - .../composer-require-config.json | 15 - .../reflection-docblock/composer.json | 13 +- .../reflection-docblock/phive.xml | 5 - .../reflection-docblock/phpcs.xml.dist | 17 - .../reflection-docblock/phpstan.neon | 8 - .../reflection-docblock/psalm.xml | 45 - .../src/DocBlock/DescriptionFactory.php | 8 +- .../src/DocBlock/StandardTagFactory.php | 18 +- .../src/DocBlock/Tags/Author.php | 10 +- .../src/DocBlock/Tags/Covers.php | 34 +- .../src/DocBlock/Tags/Deprecated.php | 12 +- .../src/DocBlock/Tags/Example.php | 40 +- .../src/DocBlock/Tags/Generic.php | 8 +- .../src/DocBlock/Tags/InvalidTag.php | 51 +- .../src/DocBlock/Tags/Link.php | 17 +- .../src/DocBlock/Tags/Method.php | 24 +- .../src/DocBlock/Tags/Param.php | 80 +- .../src/DocBlock/Tags/Property.php | 31 +- .../src/DocBlock/Tags/PropertyRead.php | 31 +- .../src/DocBlock/Tags/PropertyWrite.php | 31 +- .../src/DocBlock/Tags/Return_.php | 10 +- .../src/DocBlock/Tags/See.php | 34 +- .../src/DocBlock/Tags/Since.php | 12 +- .../src/DocBlock/Tags/Source.php | 20 +- .../src/DocBlock/Tags/Throws.php | 10 +- .../src/DocBlock/Tags/Uses.php | 33 +- .../src/DocBlock/Tags/Var_.php | 31 +- .../src/DocBlock/Tags/Version.php | 11 +- .../src/Exception/PcreException.php | 38 + .../reflection-docblock/src/Utils.php | 57 + .../type-resolver/.github/workflows/push.yml | 201 - vendor/phpdocumentor/type-resolver/Makefile | 32 - vendor/phpdocumentor/type-resolver/README.md | 8 +- .../composer-require-config.json | 15 - .../phpdocumentor/type-resolver/composer.json | 9 +- .../phpdocumentor/type-resolver/composer.lock | 380 +- vendor/phpdocumentor/type-resolver/phive.xml | 4 - .../phpdocumentor/type-resolver/phpbench.json | 10 + .../type-resolver/phpcs.xml.dist | 16 - .../phpdocumentor/type-resolver/phpstan.neon | 4 - vendor/phpdocumentor/type-resolver/psalm.xml | 18 - .../type-resolver/src/FqsenResolver.php | 5 + .../type-resolver/src/PseudoType.php | 19 + .../type-resolver/src/PseudoTypes/False_.php | 39 + .../type-resolver/src/PseudoTypes/True_.php | 39 + .../phpdocumentor/type-resolver/src/Type.php | 3 + .../type-resolver/src/TypeResolver.php | 146 +- .../type-resolver/src/Types/AbstractList.php | 8 +- .../src/Types/AggregatedType.php | 124 + .../type-resolver/src/Types/Array_.php | 2 + .../type-resolver/src/Types/Boolean.php | 4 +- .../type-resolver/src/Types/Callable_.php | 2 + .../type-resolver/src/Types/ClassString.php | 2 + .../type-resolver/src/Types/Collection.php | 2 + .../type-resolver/src/Types/Compound.php | 77 +- .../type-resolver/src/Types/Context.php | 11 +- .../src/Types/ContextFactory.php | 132 +- .../type-resolver/src/Types/Expression.php | 51 + .../type-resolver/src/Types/Float_.php | 2 + .../type-resolver/src/Types/Integer.php | 5 + .../type-resolver/src/Types/Intersection.php | 37 + .../type-resolver/src/Types/Iterable_.php | 2 + .../type-resolver/src/Types/Mixed_.php | 2 + .../type-resolver/src/Types/Null_.php | 2 + .../type-resolver/src/Types/Nullable.php | 2 + .../type-resolver/src/Types/Object_.php | 2 + .../type-resolver/src/Types/Parent_.php | 2 + .../type-resolver/src/Types/Resource_.php | 2 + .../type-resolver/src/Types/Scalar.php | 2 + .../type-resolver/src/Types/Self_.php | 2 + .../type-resolver/src/Types/Static_.php | 2 + .../type-resolver/src/Types/String_.php | 2 + .../type-resolver/src/Types/This.php | 2 + .../type-resolver/src/Types/Void_.php | 2 + vendor/psr/container/README.md | 14 +- vendor/psr/container/composer.json | 9 +- .../src/ContainerExceptionInterface.php | 3 - .../psr/container/src/ContainerInterface.php | 9 +- .../src/NotFoundExceptionInterface.php | 3 - vendor/psr/log/.gitignore | 1 - vendor/psr/log/Psr/Log/AbstractLogger.php | 32 +- vendor/psr/log/Psr/Log/LoggerAwareTrait.php | 2 +- vendor/psr/log/Psr/Log/LoggerInterface.php | 38 +- vendor/psr/log/Psr/Log/Test/DummyTest.php | 18 + .../log/Psr/Log/Test/LoggerInterfaceTest.php | 8 - vendor/psr/log/composer.json | 2 +- vendor/sabre/event/composer.json | 27 +- vendor/sabre/event/lib/Promise.php | 3 + vendor/sabre/event/lib/Version.php | 2 +- vendor/sabre/event/lib/coroutine.php | 4 + vendor/scssphp/scssphp/README.md | 44 +- vendor/scssphp/scssphp/bin/pscss | 129 +- vendor/scssphp/scssphp/composer.json | 64 +- vendor/scssphp/scssphp/example/Server.php | 523 -- vendor/scssphp/scssphp/phpcs.xml.dist | 12 + vendor/scssphp/scssphp/scss.inc.php | 43 +- vendor/scssphp/scssphp/src/Base/Range.php | 12 +- vendor/scssphp/scssphp/src/Block.php | 9 +- vendor/scssphp/scssphp/src/Cache.php | 69 +- vendor/scssphp/scssphp/src/Colors.php | 45 +- .../scssphp/scssphp/src/CompilationResult.php | 69 + vendor/scssphp/scssphp/src/Compiler.php | 5399 +++++++++---- .../scssphp/src/Compiler/CachedResult.php | 77 + .../scssphp/src/Compiler/Environment.php | 9 +- .../src/Exception/CompilerException.php | 7 +- .../scssphp/src/Exception/ParserException.php | 33 +- .../scssphp/src/Exception/RangeException.php | 7 +- .../scssphp/src/Exception/SassException.php | 7 + .../src/Exception/SassScriptException.php | 32 + .../scssphp/src/Exception/ServerException.php | 9 +- vendor/scssphp/scssphp/src/Formatter.php | 84 +- .../scssphp/scssphp/src/Formatter/Compact.php | 9 +- .../scssphp/src/Formatter/Compressed.php | 8 +- .../scssphp/src/Formatter/Crunched.php | 12 +- .../scssphp/scssphp/src/Formatter/Debug.php | 10 +- .../scssphp/src/Formatter/Expanded.php | 8 +- .../scssphp/scssphp/src/Formatter/Nested.php | 22 +- .../scssphp/src/Formatter/OutputBlock.php | 19 +- .../scssphp/src/Logger/LoggerInterface.php | 48 + .../scssphp/src/Logger/QuietLogger.php | 27 + .../scssphp/src/Logger/StreamLogger.php | 60 + vendor/scssphp/scssphp/src/Node.php | 9 +- vendor/scssphp/scssphp/src/Node/Number.php | 716 +- vendor/scssphp/scssphp/src/OutputStyle.php | 9 + vendor/scssphp/scssphp/src/Parser.php | 1767 ++++- .../scssphp/scssphp/src/SourceMap/Base64.php | 9 +- .../scssphp/src/SourceMap/Base64VLQ.php | 15 +- .../src/SourceMap/SourceMapGenerator.php | 60 +- vendor/scssphp/scssphp/src/Type.php | 9 +- vendor/scssphp/scssphp/src/Util.php | 126 +- vendor/scssphp/scssphp/src/Util/Path.php | 77 + vendor/scssphp/scssphp/src/ValueConverter.php | 95 + vendor/scssphp/scssphp/src/Version.php | 5 +- vendor/scssphp/scssphp/src/Warn.php | 84 + vendor/sergeytsalkov/meekrodb/COPYING | 674 -- .../meekrodb/{COPYING.LESSER => LICENSE} | 0 vendor/sergeytsalkov/meekrodb/README.md | 166 +- vendor/sergeytsalkov/meekrodb/composer.json | 4 +- vendor/sergeytsalkov/meekrodb/db.class.php | 1060 +-- .../meekrodb/simpletest/BasicTest.php | 72 +- .../meekrodb/simpletest/CallTest.php | 32 +- .../meekrodb/simpletest/ErrorTest.php | 83 - .../meekrodb/simpletest/ErrorTest_53.php | 19 - .../meekrodb/simpletest/HelperTest.php | 51 - .../meekrodb/simpletest/HookTest.php | 287 + .../meekrodb/simpletest/ObjectTest.php | 12 +- .../meekrodb/simpletest/WalkTest.php | 48 + .../meekrodb/simpletest/WhereClauseTest.php | 18 +- .../meekrodb/simpletest/test.php | 37 +- vendor/symfony/console/Application.php | 130 +- .../symfony/console/Attribute/AsCommand.php | 39 + vendor/symfony/console/CHANGELOG.md | 64 +- .../console/CI/GithubActionReporter.php | 99 + vendor/symfony/console/Color.php | 180 + vendor/symfony/console/Command/Command.php | 138 +- .../symfony/console/Command/HelpCommand.php | 6 +- .../symfony/console/Command/LazyCommand.php | 211 + .../symfony/console/Command/ListCommand.php | 36 +- .../Command/SignalableCommandInterface.php | 30 + vendor/symfony/console/ConsoleEvents.php | 33 +- vendor/symfony/console/Cursor.php | 168 + .../AddConsoleCommandPass.php | 60 +- .../Descriptor/ApplicationDescription.php | 4 +- .../symfony/console/Descriptor/Descriptor.php | 14 +- .../Descriptor/DescriptorInterface.php | 7 +- .../console/Descriptor/JsonDescriptor.php | 59 +- .../console/Descriptor/MarkdownDescriptor.php | 34 +- .../console/Descriptor/TextDescriptor.php | 43 +- .../console/Descriptor/XmlDescriptor.php | 50 +- .../console/Event/ConsoleCommandEvent.php | 2 +- .../console/Event/ConsoleErrorEvent.php | 2 +- .../console/Event/ConsoleSignalEvent.php | 35 + .../console/EventListener/ErrorListener.php | 4 +- .../Exception/CommandNotFoundException.php | 10 +- .../console/Formatter/NullOutputFormatter.php | 72 + .../Formatter/NullOutputFormatterStyle.php | 65 + .../console/Formatter/OutputFormatter.php | 18 +- .../Formatter/OutputFormatterStyle.php | 118 +- .../Formatter/OutputFormatterStyleStack.php | 2 +- .../console/Helper/FormatterHelper.php | 8 +- vendor/symfony/console/Helper/Helper.php | 56 +- .../symfony/console/Helper/ProcessHelper.php | 6 +- vendor/symfony/console/Helper/ProgressBar.php | 111 +- .../console/Helper/ProgressIndicator.php | 6 +- .../symfony/console/Helper/QuestionHelper.php | 227 +- .../console/Helper/SymfonyQuestionHelper.php | 15 +- vendor/symfony/console/Helper/Table.php | 93 +- vendor/symfony/console/Helper/TableCell.php | 10 + .../symfony/console/Helper/TableCellStyle.php | 86 + vendor/symfony/console/Helper/TableStyle.php | 4 +- vendor/symfony/console/Input/ArgvInput.php | 48 +- vendor/symfony/console/Input/ArrayInput.php | 18 +- vendor/symfony/console/Input/Input.php | 20 +- .../symfony/console/Input/InputArgument.php | 18 +- .../symfony/console/Input/InputDefinition.php | 70 +- .../symfony/console/Input/InputInterface.php | 22 +- vendor/symfony/console/Input/InputOption.php | 61 +- vendor/symfony/console/Input/StringInput.php | 16 +- vendor/symfony/console/LICENSE | 2 +- .../symfony/console/Logger/ConsoleLogger.php | 6 +- .../symfony/console/Output/BufferedOutput.php | 2 +- .../symfony/console/Output/ConsoleOutput.php | 9 +- .../console/Output/ConsoleSectionOutput.php | 10 +- vendor/symfony/console/Output/NullOutput.php | 9 +- vendor/symfony/console/Output/Output.php | 4 +- .../console/Output/OutputInterface.php | 16 +- .../symfony/console/Output/StreamOutput.php | 2 +- .../console/Output/TrimmedBufferOutput.php | 62 + .../console/Question/ChoiceQuestion.php | 3 +- vendor/symfony/console/Question/Question.php | 42 +- vendor/symfony/console/README.md | 10 +- .../console/SignalRegistry/SignalRegistry.php | 65 + .../console/SingleCommandApplication.php | 67 + vendor/symfony/console/Style/OutputStyle.php | 2 +- .../symfony/console/Style/StyleInterface.php | 2 +- vendor/symfony/console/Style/SymfonyStyle.php | 50 +- vendor/symfony/console/Terminal.php | 5 + vendor/symfony/console/Tester/TesterTrait.php | 18 +- vendor/symfony/console/composer.json | 24 +- .../symfony/deprecation-contracts/.gitignore | 3 + .../deprecation-contracts/CHANGELOG.md | 5 + vendor/symfony/deprecation-contracts/LICENSE | 19 + .../symfony/deprecation-contracts/README.md | 26 + .../deprecation-contracts/composer.json | 35 + .../deprecation-contracts/function.php | 27 + vendor/symfony/lock/.gitattributes | 3 - .../Exception/LockConflictedException.php | 4 + vendor/symfony/lock/LICENSE | 2 +- vendor/symfony/lock/Lock.php | 14 + vendor/symfony/lock/README.md | 13 +- vendor/symfony/lock/Store/CombinedStore.php | 17 +- vendor/symfony/lock/Store/FlockStore.php | 6 +- vendor/symfony/lock/Store/MemcachedStore.php | 14 +- vendor/symfony/lock/Store/PdoStore.php | 71 +- vendor/symfony/lock/Store/RedisStore.php | 20 +- .../symfony/lock/Store/RetryTillSaveStore.php | 2 +- vendor/symfony/lock/Store/SemaphoreStore.php | 4 +- vendor/symfony/lock/Store/StoreFactory.php | 42 +- vendor/symfony/lock/Store/ZookeeperStore.php | 10 +- vendor/symfony/lock/composer.json | 19 +- vendor/symfony/polyfill-ctype/bootstrap.php | 24 + vendor/symfony/polyfill-ctype/bootstrap80.php | 46 + vendor/symfony/polyfill-ctype/composer.json | 8 +- .../polyfill-intl-grapheme/Grapheme.php | 247 + vendor/symfony/polyfill-intl-grapheme/LICENSE | 19 + .../symfony/polyfill-intl-grapheme/README.md | 31 + .../polyfill-intl-grapheme/bootstrap.php | 58 + .../polyfill-intl-grapheme/bootstrap80.php | 50 + .../polyfill-intl-grapheme/composer.json | 38 + vendor/symfony/polyfill-intl-idn/Idn.php | 925 +++ vendor/symfony/polyfill-intl-idn/Info.php | 23 + vendor/symfony/polyfill-intl-idn/LICENSE | 19 + vendor/symfony/polyfill-intl-idn/README.md | 12 + .../Resources/unidata/DisallowedRanges.php | 375 + .../Resources/unidata/Regex.php | 24 + .../Resources/unidata/deviation.php | 8 + .../Resources/unidata/disallowed.php | 2638 ++++++ .../unidata/disallowed_STD3_mapped.php | 308 + .../unidata/disallowed_STD3_valid.php | 71 + .../Resources/unidata/ignored.php | 273 + .../Resources/unidata/mapped.php | 5778 ++++++++++++++ .../Resources/unidata/virama.php | 65 + .../symfony/polyfill-intl-idn/bootstrap.php | 145 + .../symfony/polyfill-intl-idn/bootstrap80.php | 125 + .../symfony/polyfill-intl-idn/composer.json | 44 + .../symfony/polyfill-intl-normalizer/LICENSE | 19 + .../polyfill-intl-normalizer/Normalizer.php | 310 + .../polyfill-intl-normalizer/README.md | 14 + .../Resources/stubs/Normalizer.php | 17 + .../unidata/canonicalComposition.php | 945 +++ .../unidata/canonicalDecomposition.php | 2065 +++++ .../Resources/unidata/combiningClass.php | 876 ++ .../unidata/compatibilityDecomposition.php | 3695 +++++++++ .../polyfill-intl-normalizer/bootstrap.php | 23 + .../polyfill-intl-normalizer/bootstrap80.php | 19 + .../polyfill-intl-normalizer/composer.json | 39 + vendor/symfony/polyfill-mbstring/Mbstring.php | 183 +- .../Resources/unidata/lowerCase.php | 305 +- .../Resources/unidata/upperCase.php | 441 +- .../symfony/polyfill-mbstring/bootstrap.php | 165 +- .../symfony/polyfill-mbstring/bootstrap80.php | 143 + .../symfony/polyfill-mbstring/composer.json | 8 +- vendor/symfony/polyfill-php72/Php72.php | 27 +- vendor/symfony/polyfill-php72/README.md | 3 +- vendor/symfony/polyfill-php72/bootstrap.php | 65 +- vendor/symfony/polyfill-php72/composer.json | 8 +- vendor/symfony/polyfill-php73/Php73.php | 2 +- vendor/symfony/polyfill-php73/bootstrap.php | 33 +- vendor/symfony/polyfill-php73/composer.json | 8 +- vendor/symfony/polyfill-php80/LICENSE | 19 + vendor/symfony/polyfill-php80/Php80.php | 105 + vendor/symfony/polyfill-php80/README.md | 24 + .../Resources/stubs/Attribute.php | 22 + .../Resources/stubs/Stringable.php | 11 + .../Resources/stubs/UnhandledMatchError.php | 5 + .../Resources/stubs/ValueError.php | 5 + vendor/symfony/polyfill-php80/bootstrap.php | 42 + vendor/symfony/polyfill-php80/composer.json | 40 + .../service-contracts/Attribute/Required.php | 25 + vendor/symfony/service-contracts/CHANGELOG.md | 5 + vendor/symfony/service-contracts/LICENSE | 2 +- vendor/symfony/service-contracts/README.md | 2 +- .../service-contracts/ServiceLocatorTrait.php | 12 +- .../ServiceSubscriberInterface.php | 2 +- .../ServiceSubscriberTrait.php | 5 +- .../Test/ServiceLocatorTest.php | 4 +- .../symfony/service-contracts/composer.json | 10 +- vendor/symfony/string/AbstractString.php | 727 ++ .../symfony/string/AbstractUnicodeString.php | 580 ++ vendor/symfony/string/ByteString.php | 506 ++ vendor/symfony/string/CHANGELOG.md | 30 + vendor/symfony/string/CodePointString.php | 270 + .../string/Exception/ExceptionInterface.php | 16 + .../Exception/InvalidArgumentException.php | 16 + .../string/Exception/RuntimeException.php | 16 + .../string/Inflector/EnglishInflector.php | 508 ++ .../string/Inflector/FrenchInflector.php | 157 + .../string/Inflector/InflectorInterface.php | 33 + vendor/symfony/string/LICENSE | 19 + vendor/symfony/string/LazyString.php | 164 + vendor/symfony/string/README.md | 14 + .../Resources/data/wcswidth_table_wide.php | 1119 +++ .../Resources/data/wcswidth_table_zero.php | 1339 ++++ vendor/symfony/string/Resources/functions.php | 38 + .../symfony/string/Slugger/AsciiSlugger.php | 183 + .../string/Slugger/SluggerInterface.php | 27 + vendor/symfony/string/UnicodeString.php | 377 + vendor/symfony/string/composer.json | 40 + .../var_representation_polyfill/.dockerignore | 2 + .../.phan/config.php | 604 ++ .../var_representation_polyfill/LICENSE | 21 + .../var_representation_polyfill/README.md | 36 + .../var_representation_polyfill/ci/Dockerfile | 17 + .../ci/test_dockerized.sh | 17 + .../var_representation_polyfill/composer.json | 33 + .../var_representation_polyfill/composer.lock | 3059 +++++++ .../src/VarRepresentation/Encoder.php | 303 + .../src/VarRepresentation/Node.php | 18 + .../src/VarRepresentation/Node/ArrayEntry.php | 34 + .../src/VarRepresentation/Node/Array_.php | 61 + .../src/VarRepresentation/Node/Group.php | 53 + .../src/VarRepresentation/Node/Object_.php | 45 + .../src/var_representation.php | 45 + .../valitron/.github/workflows/test.yml | 73 + vendor/vlucas/valitron/README.md | 60 +- vendor/vlucas/valitron/composer.json | 6 +- vendor/vlucas/valitron/lang/fr.php | 69 +- vendor/vlucas/valitron/lang/sl.php | 42 + vendor/vlucas/valitron/lang/zh-cn.php | 2 +- .../valitron/src/Valitron/Validator.php | 96 +- .../assert/.github/workflows/ci.yaml | 120 + vendor/webmozart/assert/.php_cs | 24 + vendor/webmozart/assert/CHANGELOG.md | 45 +- vendor/webmozart/assert/README.md | 22 +- vendor/webmozart/assert/composer.json | 19 +- vendor/webmozart/assert/psalm.xml | 4 +- vendor/webmozart/assert/src/Assert.php | 230 +- .../assert/src/InvalidArgumentException.php | 16 + vendor/webmozart/assert/src/Mixin.php | 2916 +++++++ 1098 files changed, 92137 insertions(+), 33228 deletions(-) mode change 100644 => 120000 vendor/bin/phan delete mode 100644 vendor/bin/phan.bat mode change 100644 => 120000 vendor/bin/phan_client delete mode 100644 vendor/bin/phan_client.bat mode change 100644 => 120000 vendor/bin/pscss delete mode 100644 vendor/bin/pscss.bat mode change 100644 => 120000 vendor/bin/tocheckstyle delete mode 100644 vendor/bin/tocheckstyle.bat create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php create mode 100644 vendor/composer/semver/src/CompilingMatcher.php delete mode 100644 vendor/composer/semver/src/Constraint/AbstractConstraint.php create mode 100644 vendor/composer/semver/src/Constraint/Bound.php rename vendor/composer/semver/src/Constraint/{EmptyConstraint.php => MatchAllConstraint.php} (61%) create mode 100644 vendor/composer/semver/src/Constraint/MatchNoneConstraint.php create mode 100644 vendor/composer/semver/src/Interval.php create mode 100644 vendor/composer/semver/src/Intervals.php create mode 100644 vendor/composer/xdebug-handler/UPGRADE.md delete mode 100644 vendor/ezyang/htmlpurifier/INSTALL delete mode 100644 vendor/ezyang/htmlpurifier/INSTALL.fr.utf8 delete mode 100644 vendor/ezyang/htmlpurifier/NEWS delete mode 100644 vendor/ezyang/htmlpurifier/TODO delete mode 100644 vendor/ezyang/htmlpurifier/WHATSNEW delete mode 100644 vendor/ezyang/htmlpurifier/WYSIWYG delete mode 100644 vendor/ezyang/htmlpurifier/extras/ConfigDoc/HTMLXSLTProcessor.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/FSTools.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/FSTools/File.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/HTMLPurifierExtras.auto.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/HTMLPurifierExtras.autoload-legacy.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/HTMLPurifierExtras.autoload.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/HTMLPurifierExtras.php delete mode 100644 vendor/ezyang/htmlpurifier/extras/README create mode 100644 vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema/HTML.Forms.txt delete mode 100644 vendor/ezyang/htmlpurifier/library/HTMLPurifier/Language/classes/en-x-test.php delete mode 100644 vendor/ezyang/htmlpurifier/library/HTMLPurifier/Language/messages/en-x-test.php delete mode 100644 vendor/ezyang/htmlpurifier/library/HTMLPurifier/Language/messages/en-x-testmini.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/.htaccess delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/PH5P.patch delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/PH5P.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/add-vimline.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/common.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/compile-doxygen.sh delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/config-scanner.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/flush-definition-cache.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/flush.sh delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/generate-entity-file.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/generate-includes.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/generate-ph5p-patch.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/generate-schema-cache.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/generate-standalone.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/merge-library.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/old-extract-schema.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/old-remove-require-once.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/old-remove-schema-def.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/regenerate-docs.sh delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/remove-trailing-whitespace.php delete mode 100644 vendor/ezyang/htmlpurifier/maintenance/rename-config.php delete mode 100644 vendor/ezyang/htmlpurifier/package.php delete mode 100644 vendor/ezyang/htmlpurifier/phpdoc.ini delete mode 100644 vendor/ezyang/htmlpurifier/plugins/modx.txt delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/.gitignore delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/Changelog delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/INSTALL delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/README delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/config.default.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/htmlpurifier.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/info.txt delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/init-config.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/migrate.bbcode.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/settings.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/settings/form.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/settings/migrate-sigs-form.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/settings/migrate-sigs.php delete mode 100644 vendor/ezyang/htmlpurifier/plugins/phorum/settings/save.php delete mode 100644 vendor/ezyang/htmlpurifier/test-settings.sample.php delete mode 100644 vendor/ezyang/htmlpurifier/test-settings.travis.php delete mode 100644 vendor/ezyang/htmlpurifier/tests/path2class.func.php delete mode 100644 vendor/ezyang/htmlpurifier/update-for-release create mode 100644 vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml delete mode 100644 vendor/felixfbecker/advanced-json-rpc/.travis.yml create mode 100644 vendor/guzzlehttp/guzzle/src/Utils.php create mode 100644 vendor/guzzlehttp/promises/src/Create.php create mode 100644 vendor/guzzlehttp/promises/src/Each.php create mode 100644 vendor/guzzlehttp/promises/src/Is.php create mode 100644 vendor/guzzlehttp/promises/src/Utils.php create mode 100644 vendor/guzzlehttp/psr7/.github/workflows/bc.yml create mode 100644 vendor/guzzlehttp/psr7/.github/workflows/ci.yml create mode 100644 vendor/guzzlehttp/psr7/.github/workflows/integration.yml create mode 100644 vendor/guzzlehttp/psr7/.github/workflows/static.yml create mode 100644 vendor/guzzlehttp/psr7/.php_cs.dist create mode 100644 vendor/guzzlehttp/psr7/src/Header.php create mode 100644 vendor/guzzlehttp/psr7/src/Message.php create mode 100644 vendor/guzzlehttp/psr7/src/MimeType.php create mode 100644 vendor/guzzlehttp/psr7/src/Query.php create mode 100644 vendor/guzzlehttp/psr7/src/Utils.php create mode 100644 vendor/league/plates/.github/workflows/docs.yml create mode 100644 vendor/league/plates/.github/workflows/php.yml create mode 100644 vendor/league/plates/doc/config.toml rename vendor/league/plates/{docs/index.md => doc/content/_index.md} (52%) create mode 100644 vendor/league/plates/doc/content/engine/_index.md rename vendor/league/plates/{docs => doc/content}/engine/extensions.md (85%) rename vendor/league/plates/{docs => doc/content}/engine/file-extensions.md (87%) rename vendor/league/plates/{docs => doc/content}/engine/folders.md (93%) rename vendor/league/plates/{docs => doc/content}/engine/functions.md (50%) rename vendor/league/plates/{docs/engine/index.md => doc/content/engine/overview.md} (90%) create mode 100644 vendor/league/plates/doc/content/extensions/_index.md rename vendor/league/plates/{docs => doc/content}/extensions/asset.md (95%) create mode 100644 vendor/league/plates/doc/content/extensions/community.md rename vendor/league/plates/{docs => doc/content}/extensions/uri.md (96%) create mode 100644 vendor/league/plates/doc/content/getting-started/_index.md rename vendor/league/plates/{docs => doc/content/getting-started}/installation.md (84%) rename vendor/league/plates/{docs => doc/content/getting-started}/simple-example.md (72%) create mode 100644 vendor/league/plates/doc/content/templates/_index.md rename vendor/league/plates/{docs => doc/content}/templates/data.md (89%) rename vendor/league/plates/{docs => doc/content}/templates/escaping.md (83%) rename vendor/league/plates/{docs => doc/content}/templates/functions.md (77%) rename vendor/league/plates/{docs => doc/content}/templates/inheritance.md (59%) rename vendor/league/plates/{docs => doc/content}/templates/layouts.md (82%) rename vendor/league/plates/{docs => doc/content}/templates/nesting.md (81%) rename vendor/league/plates/{docs/templates/index.md => doc/content/templates/overview.md} (81%) rename vendor/league/plates/{docs => doc/content}/templates/sections.md (80%) rename vendor/league/plates/{docs => doc/content}/templates/syntax.md (92%) create mode 100644 vendor/league/plates/doc/layouts/_default/baseof.html create mode 100644 vendor/league/plates/doc/layouts/_default/list.html create mode 100644 vendor/league/plates/doc/layouts/_default/single.html create mode 100644 vendor/league/plates/doc/layouts/partials/title.html create mode 100644 vendor/league/plates/doc/layouts/shortcodes/code-filename.html create mode 100644 vendor/league/plates/doc/layouts/shortcodes/html.html rename vendor/league/plates/{docs => doc/static}/CNAME (100%) rename vendor/league/plates/{docs/css/custom.scss => doc/static/css/custom.css} (56%) rename vendor/league/plates/{docs => doc/static/favicon}/apple-touch-icon-precomposed.png (100%) rename vendor/league/plates/{docs => doc/static/favicon}/favicon.ico (100%) rename vendor/league/plates/{docs => doc/static/images}/logo.png (100%) delete mode 100644 vendor/league/plates/docs/_data/images.yml delete mode 100644 vendor/league/plates/docs/_data/menu.yml delete mode 100644 vendor/league/plates/docs/_data/project.yml delete mode 100644 vendor/league/plates/docs/_layouts/default.html delete mode 100644 vendor/league/plates/docs/changelog.md create mode 100644 vendor/microsoft/tolerant-php-parser/src/ModifiedTypeInterface.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/ModifiedTypeTrait.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/Attribute.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/AttributeGroup.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/AttributeElementList.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/DeclareDirectiveList.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/MatchArmConditionList.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/DelimitedList/MatchExpressionArmList.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/EnumCaseDeclaration.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/EnumMembers.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/Expression/MatchExpression.php rename vendor/microsoft/tolerant-php-parser/src/Node/{Statement/ThrowStatement.php => Expression/ThrowExpression.php} (75%) create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/MatchArm.php create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/MissingDeclaration.php rename vendor/microsoft/tolerant-php-parser/src/Node/{Expression/EchoExpression.php => Statement/EchoStatement.php} (65%) create mode 100644 vendor/microsoft/tolerant-php-parser/src/Node/Statement/EnumDeclaration.php rename vendor/microsoft/tolerant-php-parser/src/Node/{Expression/UnsetIntrinsicExpression.php => Statement/UnsetStatement.php} (81%) create mode 100644 vendor/monolog/monolog/phpstan.neon.dist create mode 100644 vendor/netresearch/jsonmapper/phpunit.xml rename vendor/nette/caching/src/Caching/{IBulkReader.php => BulkReader.php} (87%) rename vendor/nette/caching/src/Caching/{IStorage.php => Storage.php} (93%) rename vendor/nette/caching/src/Caching/Storages/{IJournal.php => Journal.php} (91%) create mode 100644 vendor/nette/caching/src/compatibility.php rename vendor/nette/utils/src/{Utils/IHtmlString.php => HtmlStringable.php} (73%) rename vendor/nette/utils/src/{Utils => }/SmartObject.php (86%) rename vendor/nette/utils/src/{Utils => }/StaticClass.php (85%) rename vendor/nette/utils/src/{Utils/ITranslator.php => Translator.php} (83%) create mode 100644 vendor/nette/utils/src/Utils/Floats.php create mode 100644 vendor/nette/utils/src/compatibility.php create mode 100644 vendor/nette/utils/src/exceptions.php create mode 100644 vendor/phan/phan/.azure/job.yml create mode 100644 vendor/phan/phan/.phan/internal_stubs/phar.phan_php create mode 100644 vendor/phan/phan/.phan/internal_stubs/simplexml.phan_php create mode 100644 vendor/phan/phan/.phan/plugins/ConstantVariablePlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/DeprecateAliasPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/DeprecateAliasPlugin/fixers.php create mode 100644 vendor/phan/phan/.phan/plugins/DuplicateConstantPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/PHP53CompatibilityPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/PHPDocInWrongCommentPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/RemoveDebugStatementPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/ShortArrayPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/SimplifyExpressionPlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/StaticVariableMisusePlugin.php create mode 100644 vendor/phan/phan/.phan/plugins/UnsafeCodePlugin.php create mode 100644 vendor/phan/phan/azure-pipelines.yml mode change 100644 => 100755 vendor/phan/phan/phan mode change 100644 => 100755 vendor/phan/phan/phan_client create mode 100644 vendor/phan/phan/src/Phan/AST/InferPureSnippetVisitor.php create mode 100644 vendor/phan/phan/src/Phan/AST/TolerantASTConverter/CompatibleParser.php create mode 100644 vendor/phan/phan/src/Phan/AST/TolerantASTConverter/CompatiblePhpTokenizer.php create mode 100644 vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverterTrait.php create mode 100644 vendor/phan/phan/src/Phan/Analysis/AttributeAnalyzer.php create mode 100644 vendor/phan/phan/src/Phan/Analysis/ClassConstantTypesAnalyzer.php create mode 100644 vendor/phan/phan/src/Phan/Exception/UnanalyzableMagicPropertyException.php create mode 100644 vendor/phan/phan/src/Phan/Language/Element/Attribute.php create mode 100644 vendor/phan/phan/src/Phan/Language/Element/ElementProxyTrait.php create mode 100644 vendor/phan/phan/src/Phan/Language/Element/EnumCase.php create mode 100644 vendor/phan/phan/src/Phan/Language/Element/GlobalVariable.php create mode 100644 vendor/phan/phan/src/Phan/Language/Element/HasAttributesTrait.php create mode 100644 vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php81_delta.php create mode 100644 vendor/phan/phan/src/Phan/Language/Type/IntersectionType.php create mode 100644 vendor/phan/phan/src/Phan/Language/Type/NativeTypeTrait.php create mode 100644 vendor/phan/phan/src/Phan/Language/Type/NeverType.php create mode 100644 vendor/phan/phan/src/Phan/Language/Type/NonNullMixedType.php create mode 100644 vendor/phan/phan/src/Phan/Language/TypePart.php create mode 100644 vendor/phan/phan/src/Phan/Output/ColorScheme/LightHighContrast.php create mode 100644 vendor/phan/phan/src/Phan/Output/Printer/VerbosePlainTextPrinter.php delete mode 100644 vendor/phan/phan/src/Phan/Plugin/Internal/IssueFixingPlugin/FileContents.php create mode 100644 vendor/phan/phan/src/Phan/Plugin/Internal/LoopVariableReusePlugin.php create mode 100644 vendor/phan/phan/src/Phan/Plugin/Internal/LoopVariableReuseVisitor.php create mode 100644 vendor/phan/phan/src/Phan/Plugin/Internal/RedundantConditionVisitor.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AfterAnalyzeFileCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AnalyzeClassCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AnalyzeFunctionCallCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AnalyzeFunctionCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AnalyzeMethodCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AnalyzePropertyCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/AutomaticFixCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/BeforeAnalyzeCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/BeforeAnalyzeFileCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/FinalizeProcessCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/HandleLazyLoadInternalFunctionCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/PluginAwareBaseAnalysisVisitor.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/PluginAwarePostAnalysisVisitor.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/PluginAwarePreAnalysisVisitor.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/PostAnalyzeNodeCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/PreAnalyzeNodeCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/ReturnTypeOverrideCapability.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/StopParamAnalysisException.php delete mode 100644 vendor/phan/phan/src/Phan/PluginV2/SuppressionCapability.php create mode 100644 vendor/phan/phan/src/Phan/PluginV3/AnalyzeLiteralStatementCapability.php create mode 100644 vendor/phan/phan/src/Phan/PluginV3/BeforeLoopBodyAnalysisCapability.php create mode 100644 vendor/phan/phan/src/Phan/PluginV3/BeforeLoopBodyAnalysisVisitor.php create mode 100644 vendor/phan/phan/src/Phan/PluginV3/MergeVariableInfoCapability.php create mode 100644 vendor/phan/phan/src/Phan/PluginV3/UnloadablePluginException.php create mode 100644 vendor/phan/phan/src/Phan/filter_var.php_polyfill delete mode 100644 vendor/phan/phan/src/spl_object_id.php mode change 100644 => 100755 vendor/phan/phan/tocheckstyle create mode 100644 vendor/phan/phan/tool/phan_repl_helpers.php create mode 100644 vendor/phpdocumentor/reflection-common/.github/dependabot.yml delete mode 100644 vendor/phpdocumentor/reflection-common/.scrutinizer.yml delete mode 100644 vendor/phpdocumentor/reflection-common/.travis.yml delete mode 100644 vendor/phpdocumentor/reflection-common/Makefile delete mode 100644 vendor/phpdocumentor/reflection-common/appveyor.yml delete mode 100644 vendor/phpdocumentor/reflection-common/easy-coding-standard.neon delete mode 100644 vendor/phpdocumentor/reflection-common/phive.xml delete mode 100644 vendor/phpdocumentor/reflection-common/phpcs.xml.dist delete mode 100644 vendor/phpdocumentor/reflection-common/phpmd.xml.dist delete mode 100644 vendor/phpdocumentor/reflection-common/phpstan.neon delete mode 100644 vendor/phpdocumentor/reflection-common/psalm.xml delete mode 100644 vendor/phpdocumentor/reflection-docblock/.dependabot/config.yml delete mode 100644 vendor/phpdocumentor/reflection-docblock/.github/workflows/push.yml delete mode 100644 vendor/phpdocumentor/reflection-docblock/Makefile delete mode 100644 vendor/phpdocumentor/reflection-docblock/composer-require-config.json delete mode 100644 vendor/phpdocumentor/reflection-docblock/phive.xml delete mode 100644 vendor/phpdocumentor/reflection-docblock/phpcs.xml.dist delete mode 100644 vendor/phpdocumentor/reflection-docblock/phpstan.neon delete mode 100644 vendor/phpdocumentor/reflection-docblock/psalm.xml create mode 100644 vendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/Utils.php delete mode 100644 vendor/phpdocumentor/type-resolver/.github/workflows/push.yml delete mode 100644 vendor/phpdocumentor/type-resolver/Makefile delete mode 100644 vendor/phpdocumentor/type-resolver/composer-require-config.json delete mode 100644 vendor/phpdocumentor/type-resolver/phive.xml create mode 100644 vendor/phpdocumentor/type-resolver/phpbench.json delete mode 100644 vendor/phpdocumentor/type-resolver/phpcs.xml.dist delete mode 100644 vendor/phpdocumentor/type-resolver/phpstan.neon delete mode 100644 vendor/phpdocumentor/type-resolver/psalm.xml create mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoType.php create mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/True_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Expression.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Intersection.php delete mode 100644 vendor/psr/log/.gitignore create mode 100644 vendor/psr/log/Psr/Log/Test/DummyTest.php mode change 100644 => 100755 vendor/scssphp/scssphp/bin/pscss delete mode 100644 vendor/scssphp/scssphp/example/Server.php create mode 100644 vendor/scssphp/scssphp/phpcs.xml.dist create mode 100644 vendor/scssphp/scssphp/src/CompilationResult.php create mode 100644 vendor/scssphp/scssphp/src/Compiler/CachedResult.php create mode 100644 vendor/scssphp/scssphp/src/Exception/SassException.php create mode 100644 vendor/scssphp/scssphp/src/Exception/SassScriptException.php create mode 100644 vendor/scssphp/scssphp/src/Logger/LoggerInterface.php create mode 100644 vendor/scssphp/scssphp/src/Logger/QuietLogger.php create mode 100644 vendor/scssphp/scssphp/src/Logger/StreamLogger.php create mode 100644 vendor/scssphp/scssphp/src/OutputStyle.php create mode 100644 vendor/scssphp/scssphp/src/Util/Path.php create mode 100644 vendor/scssphp/scssphp/src/ValueConverter.php create mode 100644 vendor/scssphp/scssphp/src/Warn.php delete mode 100644 vendor/sergeytsalkov/meekrodb/COPYING rename vendor/sergeytsalkov/meekrodb/{COPYING.LESSER => LICENSE} (100%) delete mode 100644 vendor/sergeytsalkov/meekrodb/simpletest/ErrorTest.php delete mode 100644 vendor/sergeytsalkov/meekrodb/simpletest/ErrorTest_53.php delete mode 100644 vendor/sergeytsalkov/meekrodb/simpletest/HelperTest.php create mode 100644 vendor/sergeytsalkov/meekrodb/simpletest/HookTest.php create mode 100644 vendor/sergeytsalkov/meekrodb/simpletest/WalkTest.php create mode 100644 vendor/symfony/console/Attribute/AsCommand.php create mode 100644 vendor/symfony/console/CI/GithubActionReporter.php create mode 100644 vendor/symfony/console/Color.php create mode 100644 vendor/symfony/console/Command/LazyCommand.php create mode 100644 vendor/symfony/console/Command/SignalableCommandInterface.php create mode 100644 vendor/symfony/console/Cursor.php create mode 100644 vendor/symfony/console/Event/ConsoleSignalEvent.php create mode 100644 vendor/symfony/console/Formatter/NullOutputFormatter.php create mode 100644 vendor/symfony/console/Formatter/NullOutputFormatterStyle.php create mode 100644 vendor/symfony/console/Helper/TableCellStyle.php create mode 100644 vendor/symfony/console/Output/TrimmedBufferOutput.php create mode 100644 vendor/symfony/console/SignalRegistry/SignalRegistry.php create mode 100644 vendor/symfony/console/SingleCommandApplication.php create mode 100644 vendor/symfony/deprecation-contracts/.gitignore create mode 100644 vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 vendor/symfony/deprecation-contracts/LICENSE create mode 100644 vendor/symfony/deprecation-contracts/README.md create mode 100644 vendor/symfony/deprecation-contracts/composer.json create mode 100644 vendor/symfony/deprecation-contracts/function.php delete mode 100644 vendor/symfony/lock/.gitattributes create mode 100644 vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/Grapheme.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/LICENSE create mode 100644 vendor/symfony/polyfill-intl-grapheme/README.md create mode 100644 vendor/symfony/polyfill-intl-grapheme/bootstrap.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/bootstrap80.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/composer.json create mode 100644 vendor/symfony/polyfill-intl-idn/Idn.php create mode 100644 vendor/symfony/polyfill-intl-idn/Info.php create mode 100644 vendor/symfony/polyfill-intl-idn/LICENSE create mode 100644 vendor/symfony/polyfill-intl-idn/README.md create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php create mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php create mode 100644 vendor/symfony/polyfill-intl-idn/bootstrap.php create mode 100644 vendor/symfony/polyfill-intl-idn/bootstrap80.php create mode 100644 vendor/symfony/polyfill-intl-idn/composer.json create mode 100644 vendor/symfony/polyfill-intl-normalizer/LICENSE create mode 100644 vendor/symfony/polyfill-intl-normalizer/Normalizer.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/README.md create mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/bootstrap.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/bootstrap80.php create mode 100644 vendor/symfony/polyfill-intl-normalizer/composer.json create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100644 vendor/symfony/polyfill-php80/LICENSE create mode 100644 vendor/symfony/polyfill-php80/Php80.php create mode 100644 vendor/symfony/polyfill-php80/README.md create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php create mode 100644 vendor/symfony/polyfill-php80/bootstrap.php create mode 100644 vendor/symfony/polyfill-php80/composer.json create mode 100644 vendor/symfony/service-contracts/Attribute/Required.php create mode 100644 vendor/symfony/service-contracts/CHANGELOG.md create mode 100644 vendor/symfony/string/AbstractString.php create mode 100644 vendor/symfony/string/AbstractUnicodeString.php create mode 100644 vendor/symfony/string/ByteString.php create mode 100644 vendor/symfony/string/CHANGELOG.md create mode 100644 vendor/symfony/string/CodePointString.php create mode 100644 vendor/symfony/string/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/string/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/string/Exception/RuntimeException.php create mode 100644 vendor/symfony/string/Inflector/EnglishInflector.php create mode 100644 vendor/symfony/string/Inflector/FrenchInflector.php create mode 100644 vendor/symfony/string/Inflector/InflectorInterface.php create mode 100644 vendor/symfony/string/LICENSE create mode 100644 vendor/symfony/string/LazyString.php create mode 100644 vendor/symfony/string/README.md create mode 100644 vendor/symfony/string/Resources/data/wcswidth_table_wide.php create mode 100644 vendor/symfony/string/Resources/data/wcswidth_table_zero.php create mode 100644 vendor/symfony/string/Resources/functions.php create mode 100644 vendor/symfony/string/Slugger/AsciiSlugger.php create mode 100644 vendor/symfony/string/Slugger/SluggerInterface.php create mode 100644 vendor/symfony/string/UnicodeString.php create mode 100644 vendor/symfony/string/composer.json create mode 100644 vendor/tysonandre/var_representation_polyfill/.dockerignore create mode 100644 vendor/tysonandre/var_representation_polyfill/.phan/config.php create mode 100644 vendor/tysonandre/var_representation_polyfill/LICENSE create mode 100644 vendor/tysonandre/var_representation_polyfill/README.md create mode 100644 vendor/tysonandre/var_representation_polyfill/ci/Dockerfile create mode 100644 vendor/tysonandre/var_representation_polyfill/ci/test_dockerized.sh create mode 100644 vendor/tysonandre/var_representation_polyfill/composer.json create mode 100644 vendor/tysonandre/var_representation_polyfill/composer.lock create mode 100644 vendor/tysonandre/var_representation_polyfill/src/VarRepresentation/Encoder.php create mode 100644 vendor/tysonandre/var_representation_polyfill/src/VarRepresentation/Node.php create mode 100644 vendor/tysonandre/var_representation_polyfill/src/VarRepresentation/Node/ArrayEntry.php create mode 100644 vendor/tysonandre/var_representation_polyfill/src/VarRepresentation/Node/Array_.php create mode 100644 vendor/tysonandre/var_representation_polyfill/src/VarRepresentation/Node/Group.php create mode 100644 vendor/tysonandre/var_representation_polyfill/src/VarRepresentation/Node/Object_.php create mode 100644 vendor/tysonandre/var_representation_polyfill/src/var_representation.php create mode 100644 vendor/vlucas/valitron/.github/workflows/test.yml create mode 100644 vendor/vlucas/valitron/lang/sl.php create mode 100644 vendor/webmozart/assert/.github/workflows/ci.yaml create mode 100644 vendor/webmozart/assert/.php_cs create mode 100644 vendor/webmozart/assert/src/InvalidArgumentException.php create mode 100644 vendor/webmozart/assert/src/Mixin.php diff --git a/.phan/config.php b/.phan/config.php index 01bed4af..09faeca8 100644 --- a/.phan/config.php +++ b/.phan/config.php @@ -23,7 +23,6 @@ return [ 'f_config/config.php', 'hwe/a_bestGeneral.php', 'hwe/a_emperior.php', - 'hwe/a_emperior2.php', 'hwe/a_emperior_detail.php', 'hwe/a_genList.php', 'hwe/a_hallOfFame.php', diff --git a/composer.json b/composer.json index c8cc6674..e2caa177 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "ezyang/htmlpurifier": "^4.10", "xemlock/htmlpurifier-html5": "^0.1.7", "catfan/medoo": "^1.5", - "phan/phan": "^2.7", + "phan/phan": "*", "erusev/parsedown-extra": "^0.8.1", "nette/caching": "^3.0" }, diff --git a/composer.lock b/composer.lock index 92c478b2..07e1912e 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": "ab1175c8592ba7f7756d5f02a3aa051c", + "content-hash": "2aeb036fc53a6fdc343bd2707d4697ee", "packages": [ { "name": "brandonwamboldt/utilphp", @@ -50,20 +50,24 @@ "php", "utility" ], + "support": { + "issues": "https://github.com/brandonwamboldt/utilphp/issues", + "source": "https://github.com/brandonwamboldt/utilphp/tree/master" + }, "time": "2015-02-02T17:56:14+00:00" }, { "name": "catfan/medoo", - "version": "v1.7.8", + "version": "v1.7.10", "source": { "type": "git", "url": "https://github.com/catfan/Medoo.git", - "reference": "dd9d570584cfb1e09ec470608479b86e41d5b60d" + "reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/catfan/Medoo/zipball/dd9d570584cfb1e09ec470608479b86e41d5b60d", - "reference": "dd9d570584cfb1e09ec470608479b86e41d5b60d", + "url": "https://api.github.com/repos/catfan/Medoo/zipball/2d675f73e23f63bbaeb9a8aa33318659a3d3c32f", + "reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f", "shasum": "" }, "require": { @@ -110,32 +114,37 @@ "sql", "sqlite" ], - "time": "2019-12-19T05:04:34+00:00" + "support": { + "issues": "https://github.com/catfan/Medoo/issues", + "source": "https://github.com/catfan/Medoo" + }, + "time": "2020-02-11T08:20:42+00:00" }, { "name": "composer/semver", - "version": "1.5.1", + "version": "3.2.5", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -171,28 +180,48 @@ "validation", "versioning" ], - "time": "2020-01-13T12:06:48+00:00" + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-05-24T12:41:47+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.4.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7" + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "autoload": { @@ -215,7 +244,26 @@ "Xdebug", "performance" ], - "time": "2020-03-01T12:26:26+00:00" + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-07-31T17:03:58+00:00" }, { "name": "erusev/parsedown", @@ -261,6 +309,10 @@ "markdown", "parser" ], + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, "time": "2019-12-30T22:54:17+00:00" }, { @@ -308,20 +360,24 @@ "parsedown", "parser" ], + "support": { + "issues": "https://github.com/erusev/parsedown-extra/issues", + "source": "https://github.com/erusev/parsedown-extra/tree/0.8.x" + }, "time": "2019-12-30T23:20:37+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.12.0", + "version": "v4.13.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "a617e55bc62a87eec73bd456d146d134ad716f03" + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/a617e55bc62a87eec73bd456d146d134ad716f03", - "reference": "a617e55bc62a87eec73bd456d146d134ad716f03", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", "shasum": "" }, "require": { @@ -337,6 +393,9 @@ }, "files": [ "library/HTMLPurifier.composer.php" + ], + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -355,29 +414,33 @@ "keywords": [ "html" ], - "time": "2019-10-28T03:44:26+00:00" + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/master" + }, + "time": "2020-06-29T00:56:53+00:00" }, { "name": "felixfbecker/advanced-json-rpc", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40" + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40", - "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", "shasum": "" }, "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0", - "php": ">=7.0", - "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0" + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" }, "require-dev": { - "phpunit/phpunit": "^6.0.0" + "phpunit/phpunit": "^7.0 || ^8.0" }, "type": "library", "autoload": { @@ -396,7 +459,11 @@ } ], "description": "A more advanced JSONRPC implementation", - "time": "2020-03-11T15:21:41+00:00" + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" }, { "name": "firephp/firephp-core", @@ -432,27 +499,33 @@ ], "description": "Traditional FirePHPCore library for sending PHP variables to the browser.", "homepage": "https://github.com/firephp/firephp-core", + "support": { + "forum": "http://groups.google.com/group/firephp-dev", + "issues": "https://github.com/firephp/firephp-core/issues", + "source": "https://github.com/firephp/firephp-core" + }, "time": "2013-04-23T15:28:20+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.2", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", @@ -460,7 +533,6 @@ "psr/log": "^1.1" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", @@ -499,27 +571,31 @@ "rest", "web service" ], - "time": "2019-12-23T11:57:10+00:00" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, + "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { @@ -550,20 +626,24 @@ "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.1" + }, + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "dc960a912984efb74d0a90222870c72c87f10c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91", "shasum": "" }, "require": { @@ -576,15 +656,15 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -621,29 +701,33 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.8.2" + }, + "time": "2021-04-26T09:17:50+00:00" }, { "name": "league/plates", - "version": "3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/plates.git", - "reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af" + "reference": "6d3ee31199b536a4e003b34a356ca20f6f75496a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/plates/zipball/b1684b6f127714497a0ef927ce42c0b44b45a8af", - "reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af", + "url": "https://api.github.com/repos/thephpleague/plates/zipball/6d3ee31199b536a4e003b34a356ca20f6f75496a", + "reference": "6d3ee31199b536a4e003b34a356ca20f6f75496a", "shasum": "" }, "require": { - "php": "^5.3 | ^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "mikey179/vfsstream": "^1.4", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { @@ -665,10 +749,15 @@ "name": "Jonathan Reinink", "email": "jonathan@reinink.ca", "role": "Developer" + }, + { + "name": "RJ Garcia", + "email": "ragboyjr@icloud.com", + "role": "Developer" } ], "description": "Plates, the native PHP template system that's fast, easy to use and easy to extend.", - "homepage": "http://platesphp.com", + "homepage": "https://platesphp.com", "keywords": [ "league", "package", @@ -676,27 +765,31 @@ "templating", "views" ], - "time": "2016-12-28T00:14:17+00:00" + "support": { + "issues": "https://github.com/thephpleague/plates/issues", + "source": "https://github.com/thephpleague/plates/tree/v3.4.0" + }, + "time": "2020-12-25T05:00:37+00:00" }, { "name": "microsoft/tolerant-php-parser", - "version": "v0.0.20", + "version": "v0.1.1", "source": { "type": "git", "url": "https://github.com/microsoft/tolerant-php-parser.git", - "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4" + "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4", - "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16", + "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.2" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^8.5.15" }, "type": "library", "autoload": { @@ -717,20 +810,24 @@ } ], "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", - "time": "2020-02-18T02:57:19+00:00" + "support": { + "issues": "https://github.com/microsoft/tolerant-php-parser/issues", + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1" + }, + "time": "2021-07-16T21:28:12+00:00" }, { "name": "monolog/monolog", - "version": "1.25.3", + "version": "1.26.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1" + "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1", - "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c6b00f05152ae2c9b04a448f99c7590beb6042f5", + "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5", "shasum": "" }, "require": { @@ -744,11 +841,10 @@ "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", "swiftmailer/swiftmailer": "^5.3|^6.0" @@ -767,11 +863,6 @@ "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -795,20 +886,34 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:15:16+00:00" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.26.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2021-05-28T08:32:12+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v2.1.0", + "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", "shasum": "" }, "require": { @@ -816,10 +921,10 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", - "php": ">=5.6" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -841,31 +946,37 @@ } ], "description": "Map nested JSON structures onto PHP classes", - "time": "2020-04-16T18:48:43+00:00" + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + }, + "time": "2020-12-01T19:48:11+00:00" }, { "name": "nette/caching", - "version": "v3.0.1", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "b9ecbf920f240bd1ab14900d9a77876924ad7fb4" + "reference": "3e771c589dee414724be473c24ad16dae50c1960" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/b9ecbf920f240bd1ab14900d9a77876924ad7fb4", - "reference": "b9ecbf920f240bd1ab14900d9a77876924ad7fb4", + "url": "https://api.github.com/repos/nette/caching/zipball/3e771c589dee414724be473c24ad16dae50c1960", + "reference": "3e771c589dee414724be473c24ad16dae50c1960", "shasum": "" }, "require": { "nette/finder": "^2.4 || ^3.0", "nette/utils": "^2.4 || ^3.0", - "php": ">=7.1" + "php": ">=7.2 <8.1" }, "require-dev": { - "latte/latte": "^2.4", + "latte/latte": "^2.10", "nette/di": "^v3.0", "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", "tracy/tracy": "^2.4" }, "suggest": { @@ -874,7 +985,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -885,8 +996,8 @@ "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { @@ -907,7 +1018,11 @@ "nette", "sqlite" ], - "time": "2019-11-19T18:41:40+00:00" + "support": { + "issues": "https://github.com/nette/caching/issues", + "source": "https://github.com/nette/caching/tree/v3.1.1" + }, + "time": "2021-03-06T14:07:38+00:00" }, { "name": "nette/finder", @@ -970,24 +1085,31 @@ "iterator", "nette" ], + "support": { + "issues": "https://github.com/nette/finder/issues", + "source": "https://github.com/nette/finder/tree/v2.5.2" + }, "time": "2020-01-03T20:35:40+00:00" }, { "name": "nette/utils", - "version": "v3.1.2", + "version": "v3.2.2", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "488f58378bba71767e7831c83f9e0fa808bf83b9" + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/488f58378bba71767e7831c83f9e0fa808bf83b9", - "reference": "488f58378bba71767e7831c83f9e0fa808bf83b9", + "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2 <8.1" + }, + "conflict": { + "nette/di": "<3.0.6" }, "require-dev": { "nette/tester": "~2.0", @@ -1006,7 +1128,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -1030,7 +1152,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", "homepage": "https://nette.org", "keywords": [ "array", @@ -1048,7 +1170,11 @@ "utility", "validation" ], - "time": "2020-05-27T09:58:51+00:00" + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.2" + }, + "time": "2021-03-03T22:53:25+00:00" }, { "name": "pguardiario/phpuri", @@ -1072,47 +1198,52 @@ }, "notification-url": "https://packagist.org/downloads/", "description": "A php library for converting relative urls to absolute.", + "support": { + "issues": "https://github.com/monkeysuffrage/phpuri/issues", + "source": "https://github.com/monkeysuffrage/phpuri/tree/1.0.0" + }, "time": "2015-05-24T09:13:17+00:00" }, { "name": "phan/phan", - "version": "2.7.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/phan/phan.git", - "reference": "67c51bb1593e5c30271fc16d691b82e318b90b77" + "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/67c51bb1593e5c30271fc16d691b82e318b90b77", - "reference": "67c51bb1593e5c30271fc16d691b82e318b90b77", + "url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", + "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", "shasum": "" }, "require": { - "composer/semver": "^1.4", - "composer/xdebug-handler": "^1.3.2", + "composer/semver": "^1.4|^2.0|^3.0", + "composer/xdebug-handler": "^1.3.2|^2.0.0", "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.0.4", - "microsoft/tolerant-php-parser": "0.0.20", - "netresearch/jsonmapper": "^1.6.0|^2.0", - "php": "^7.1.0", - "sabre/event": "^5.0", - "symfony/console": "^2.3|^3.0|^4.0|^5.0", + "microsoft/tolerant-php-parser": "^0.1.0", + "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", + "php": "^7.2.0|^8.0.0", + "sabre/event": "^5.0.3", + "symfony/console": "^3.2|^4.0|^5.0", "symfony/polyfill-mbstring": "^1.11.0", - "symfony/polyfill-php72": "^1.15" + "symfony/polyfill-php80": "^1.20.0", + "tysonandre/var_representation_polyfill": "^0.0.2" }, "require-dev": { - "brianium/paratest": "^4.0.0", - "phpunit/phpunit": "^7.5.0" + "phpunit/phpunit": "^8.5.0" }, "suggest": { - "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.6+ is recommended.", + "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.14+ is recommended.", "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable", "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", - "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions." + "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", + "ext-var_representation": "Suggested for converting values to strings in issue messages" }, "bin": [ "phan", @@ -1146,7 +1277,11 @@ "php", "static" ], - "time": "2020-04-12T01:25:29+00:00" + "support": { + "issues": "https://github.com/phan/phan/issues", + "source": "https://github.com/phan/phan/tree/5.0.0" + }, + "time": "2021-08-01T18:17:28+00:00" }, { "name": "php-extended/php-system", @@ -1186,6 +1321,10 @@ "php", "system" ], + "support": { + "issues": "https://gitlab.com/php-extended/php-system/issues", + "source": "https://gitlab.com/php-extended/php-system" + }, "time": "2018-06-07T06:03:27+00:00" }, { @@ -1230,29 +1369,33 @@ "php", "tail" ], + "support": { + "issues": "https://gitlab.com/php-extended/php-tail/issues", + "source": "https://gitlab.com/php-extended/php-tail" + }, "time": "2018-06-07T06:04:58+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -1279,32 +1422,35 @@ "reflection", "static analysis" ], - "time": "2020-04-27T09:25:28+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { @@ -1332,34 +1478,37 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-22T12:28:44+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.1.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -1378,31 +1527,30 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-02-18T18:59:58+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1415,7 +1563,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1427,7 +1575,11 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/http-message", @@ -1477,20 +1629,23 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -1514,7 +1669,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -1524,7 +1679,10 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -1564,28 +1722,33 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { "name": "sabre/event", - "version": "5.1.0", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sabre-io/event.git", - "reference": "d00a17507af0e7544cfe17096372f5d733e3b276" + "reference": "c120bec57c17b6251a496efc82b732418b49d50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/d00a17507af0e7544cfe17096372f5d733e3b276", - "reference": "d00a17507af0e7544cfe17096372f5d733e3b276", + "url": "https://api.github.com/repos/sabre-io/event/zipball/c120bec57c17b6251a496efc82b732418b49d50a", + "reference": "c120bec57c17b6251a496efc82b732418b49d50a", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2.16.1", - "phpunit/phpunit": "^7 || ^8" + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" }, "type": "library", "autoload": { @@ -1624,20 +1787,25 @@ "reactor", "signal" ], - "time": "2020-01-31T18:52:29+00:00" + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/event/issues", + "source": "https://github.com/fruux/sabre-event" + }, + "time": "2020-10-03T11:02:22+00:00" }, { "name": "scssphp/scssphp", - "version": "1.0.6", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/scssphp/scssphp.git", - "reference": "5b3c9d704950d8f9637f5110c36c281ec47dc13c" + "reference": "b83594e2323c5d6e80785df3f91b9d1d32aad530" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/5b3c9d704950d8f9637f5110c36c281ec47dc13c", - "reference": "5b3c9d704950d8f9637f5110c36c281ec47dc13c", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/b83594e2323c5d6e80785df3f91b9d1d32aad530", + "reference": "b83594e2323c5d6e80785df3f91b9d1d32aad530", "shasum": "" }, "require": { @@ -1646,11 +1814,19 @@ "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.3", - "squizlabs/php_codesniffer": "~2.5", - "twbs/bootstrap": "~4.3", + "bamarni/composer-bin-plugin": "^1.4", + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.3 || ^9.4", + "sass/sass-spec": "*", + "squizlabs/php_codesniffer": "~3.5", + "symfony/phpunit-bridge": "^5.1", + "twbs/bootstrap": "~5.0", + "twbs/bootstrap4": "4.6.0", "zurb/foundation": "~6.5" }, + "suggest": { + "ext-iconv": "Can be used as fallback when ext-mbstring is not available", + "ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv" + }, "bin": [ "bin/pscss" ], @@ -1685,24 +1861,28 @@ "scss", "stylesheet" ], - "time": "2019-12-12T05:00:52+00:00" + "support": { + "issues": "https://github.com/scssphp/scssphp/issues", + "source": "https://github.com/scssphp/scssphp/tree/v1.6.0" + }, + "time": "2021-07-02T16:28:10+00:00" }, { "name": "sergeytsalkov/meekrodb", - "version": "v2.3", + "version": "v2.4", "source": { "type": "git", "url": "https://github.com/SergeyTsalkov/meekrodb.git", - "reference": "eb36858f1aff94ae1665900e681a1cfb78563ee1" + "reference": "e30c240d54bc81f58c58507a9ed768032eb494a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SergeyTsalkov/meekrodb/zipball/eb36858f1aff94ae1665900e681a1cfb78563ee1", - "reference": "eb36858f1aff94ae1665900e681a1cfb78563ee1", + "url": "https://api.github.com/repos/SergeyTsalkov/meekrodb/zipball/e30c240d54bc81f58c58507a9ed768032eb494a5", + "reference": "e30c240d54bc81f58c58507a9ed768032eb494a5", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": ">=5.3.0" }, "type": "library", "autoload": { @@ -1728,39 +1908,49 @@ "mysqli", "pdo" ], - "time": "2014-06-16T22:40:22+00:00" + "support": { + "email": "support@meekro.com", + "issues": "https://github.com/SergeyTsalkov/meekrodb/issues", + "source": "https://github.com/SergeyTsalkov/meekrodb/tree/v2.4" + }, + "time": "2021-06-29T04:31:23+00:00" }, { "name": "symfony/console", - "version": "v5.0.8", + "version": "v5.3.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2", + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/event-dispatcher": "^4.4|^5.0", @@ -1775,11 +1965,6 @@ "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -1802,42 +1987,127 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.3.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-27T19:10:22+00:00" }, { - "name": "symfony/lock", - "version": "v4.4.3", + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/lock.git", - "reference": "6c4f5b620871cfef5b004fc57f2ca74572ae03b3" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/6c4f5b620871cfef5b004fc57f2ca74572ae03b3", - "reference": "6c4f5b620871cfef5b004fc57f2ca74572ae03b3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "doctrine/dbal": "<2.5" - }, - "require-dev": { - "doctrine/dbal": "~2.5", - "mongodb/mongodb": "~1.1", - "predis/predis": "~1.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" + }, + { + "name": "symfony/lock", + "version": "v4.4.27", + "source": { + "type": "git", + "url": "https://github.com/symfony/lock.git", + "reference": "6ca476d4ac992802f2a4043929f68f1818449486" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/lock/zipball/6ca476d4ac992802f2a4043929f68f1818449486", + "reference": "6ca476d4ac992802f2a4043929f68f1818449486", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/dbal": "<2.6" + }, + "require-dev": { + "doctrine/dbal": "^2.6|^3.0", + "predis/predis": "~1.0" + }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Lock\\": "" @@ -1860,7 +2130,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Lock Component", + "description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource", "homepage": "https://symfony.com", "keywords": [ "cas", @@ -1870,24 +2140,41 @@ "redlock", "semaphore" ], - "time": "2020-01-04T13:00:46+00:00" + "support": { + "source": "https://github.com/symfony/lock/tree/v4.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:41:52+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.15.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" @@ -1895,7 +2182,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1928,24 +2219,293 @@ "polyfill", "portable" ], - "time": "2020-02-27T09:26:54+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "shasum": "" + }, + "require": { + "php": ">=7.1" }, "suggest": { "ext-mbstring": "For best performance" @@ -1953,7 +2513,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -1987,29 +2551,50 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.15.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -2042,29 +2627,50 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.15.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -2100,25 +2706,125 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "symfony/service-contracts", - "version": "v2.0.1", + "name": "symfony/polyfill-php80", + "version": "v1.23.1", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { - "php": "^7.2.5", - "psr/container": "^1.0" + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-28T13:41:28+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" }, "suggest": { "symfony/service-implementation": "" @@ -2126,7 +2832,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2158,27 +2868,178 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-04-01T10:43:52+00:00" }, { - "name": "vlucas/valitron", - "version": "v1.4.7", + "name": "symfony/string", + "version": "v5.3.3", "source": { "type": "git", - "url": "https://github.com/vlucas/valitron.git", - "reference": "a03072bed1679660200766d134507a30193eaf6d" + "url": "https://github.com/symfony/string.git", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/valitron/zipball/a03072bed1679660200766d134507a30193eaf6d", - "reference": "a03072bed1679660200766d134507a30193eaf6d", + "url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-06-27T11:44:38+00:00" + }, + { + "name": "tysonandre/var_representation_polyfill", + "version": "0.0.2", + "source": { + "type": "git", + "url": "https://github.com/TysonAndre/var_representation_polyfill.git", + "reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/3f17999ee1f257319ddc6721dd26ebbc5d175f33", + "reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.2.0|^8.0.0" + }, + "require-dev": { + "phan/phan": "^4.0", + "phpunit/phpunit": "^8.5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "VarRepresentation\\": "src/VarRepresentation" + }, + "files": [ + "src/var_representation.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + } + ], + "description": "Polyfill for var_representation", + "keywords": [ + "var_export", + "var_representation" + ], + "support": { + "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", + "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.0.2" + }, + "time": "2021-06-26T18:55:02+00:00" + }, + { + "name": "vlucas/valitron", + "version": "v1.4.10", + "source": { + "type": "git", + "url": "https://github.com/vlucas/valitron.git", + "reference": "5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/valitron/zipball/5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb", + "reference": "5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb", "shasum": "" }, "require": { "php": ">=5.3.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5" + "phpunit/phpunit": ">=4.8.35" }, "suggest": { "ext-mbstring": "It can support the multiple bytes string length." @@ -2197,43 +3058,59 @@ { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://www.vancelucas.com" } ], "description": "Simple, elegant, stand-alone validation library with NO dependencies", - "homepage": "http://github.com/vlucas/valitron", + "homepage": "https://github.com/vlucas/valitron", "keywords": [ "valid", "validation", "validator" ], - "time": "2019-08-29T19:49:43+00:00" + "support": { + "issues": "https://github.com/vlucas/valitron/issues", + "source": "https://github.com/vlucas/valitron/tree/v1.4.10" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/valitron", + "type": "tidelift" + } + ], + "time": "2021-07-08T16:18:03+00:00" }, { "name": "webmozart/assert", - "version": "1.8.0", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "vimeo/psalm": "<3.9.1" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -2255,7 +3132,11 @@ "check", "validate" ], - "time": "2020-04-18T12:12:48+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" }, { "name": "xemlock/htmlpurifier-html5", @@ -2306,6 +3187,10 @@ "validator", "xss" ], + "support": { + "issues": "https://github.com/xemlock/htmlpurifier-html5/issues", + "source": "https://github.com/xemlock/htmlpurifier-html5/tree/master" + }, "time": "2019-08-07T17:19:21+00:00" } ], @@ -2319,5 +3204,6 @@ "platform-dev": [], "platform-overrides": { "php": "7.3" - } + }, + "plugin-api-version": "2.0.0" } diff --git a/vendor/bin/phan b/vendor/bin/phan deleted file mode 100644 index 88b2b64b..00000000 --- a/vendor/bin/phan +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env sh - -dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phan/phan" && pwd) - -if [ -d /proc/cygdrive ]; then - case $(which php) in - $(readlink -n /proc/cygdrive)/*) - # We are in Cygwin using Windows php, so the path must be translated - dir=$(cygpath -m "$dir"); - ;; - esac -fi - -"${dir}/phan" "$@" diff --git a/vendor/bin/phan b/vendor/bin/phan new file mode 120000 index 00000000..18a39f92 --- /dev/null +++ b/vendor/bin/phan @@ -0,0 +1 @@ +../phan/phan/phan \ No newline at end of file diff --git a/vendor/bin/phan.bat b/vendor/bin/phan.bat deleted file mode 100644 index 428ce3cc..00000000 --- a/vendor/bin/phan.bat +++ /dev/null @@ -1,4 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/../phan/phan/phan -php "%BIN_TARGET%" %* diff --git a/vendor/bin/phan_client b/vendor/bin/phan_client deleted file mode 100644 index a2b6bf5a..00000000 --- a/vendor/bin/phan_client +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env sh - -dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phan/phan" && pwd) - -if [ -d /proc/cygdrive ]; then - case $(which php) in - $(readlink -n /proc/cygdrive)/*) - # We are in Cygwin using Windows php, so the path must be translated - dir=$(cygpath -m "$dir"); - ;; - esac -fi - -"${dir}/phan_client" "$@" diff --git a/vendor/bin/phan_client b/vendor/bin/phan_client new file mode 120000 index 00000000..8deb02b6 --- /dev/null +++ b/vendor/bin/phan_client @@ -0,0 +1 @@ +../phan/phan/phan_client \ No newline at end of file diff --git a/vendor/bin/phan_client.bat b/vendor/bin/phan_client.bat deleted file mode 100644 index 4de1f75a..00000000 --- a/vendor/bin/phan_client.bat +++ /dev/null @@ -1,4 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/../phan/phan/phan_client -php "%BIN_TARGET%" %* diff --git a/vendor/bin/pscss b/vendor/bin/pscss deleted file mode 100644 index 2879dcb9..00000000 --- a/vendor/bin/pscss +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env sh - -dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../scssphp/scssphp/bin" && pwd) - -if [ -d /proc/cygdrive ]; then - case $(which php) in - $(readlink -n /proc/cygdrive)/*) - # We are in Cygwin using Windows php, so the path must be translated - dir=$(cygpath -m "$dir"); - ;; - esac -fi - -"${dir}/pscss" "$@" diff --git a/vendor/bin/pscss b/vendor/bin/pscss new file mode 120000 index 00000000..d08fca2f --- /dev/null +++ b/vendor/bin/pscss @@ -0,0 +1 @@ +../scssphp/scssphp/bin/pscss \ No newline at end of file diff --git a/vendor/bin/pscss.bat b/vendor/bin/pscss.bat deleted file mode 100644 index 1e368dc9..00000000 --- a/vendor/bin/pscss.bat +++ /dev/null @@ -1,4 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/../scssphp/scssphp/bin/pscss -php "%BIN_TARGET%" %* diff --git a/vendor/bin/tocheckstyle b/vendor/bin/tocheckstyle deleted file mode 100644 index 13592a68..00000000 --- a/vendor/bin/tocheckstyle +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env sh - -dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../phan/phan" && pwd) - -if [ -d /proc/cygdrive ]; then - case $(which php) in - $(readlink -n /proc/cygdrive)/*) - # We are in Cygwin using Windows php, so the path must be translated - dir=$(cygpath -m "$dir"); - ;; - esac -fi - -"${dir}/tocheckstyle" "$@" diff --git a/vendor/bin/tocheckstyle b/vendor/bin/tocheckstyle new file mode 120000 index 00000000..5434201e --- /dev/null +++ b/vendor/bin/tocheckstyle @@ -0,0 +1 @@ +../phan/phan/tocheckstyle \ No newline at end of file diff --git a/vendor/bin/tocheckstyle.bat b/vendor/bin/tocheckstyle.bat deleted file mode 100644 index 0816124f..00000000 --- a/vendor/bin/tocheckstyle.bat +++ /dev/null @@ -1,4 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/../phan/phan/tocheckstyle -php "%BIN_TARGET%" %* diff --git a/vendor/catfan/medoo/src/Medoo.php b/vendor/catfan/medoo/src/Medoo.php index ae3cf41e..0164591c 100644 --- a/vendor/catfan/medoo/src/Medoo.php +++ b/vendor/catfan/medoo/src/Medoo.php @@ -2,9 +2,9 @@ /*! * Medoo database framework * https://medoo.in - * Version 1.7.8 + * Version 1.7.10 * - * Copyright 2019, Angel Lai + * Copyright 2020, Angel Lai * Released under the MIT license */ @@ -445,15 +445,20 @@ class Medoo } $query = preg_replace_callback( - '/((FROM|TABLE|INTO|UPDATE)\s*)?\<([a-zA-Z0-9_\.]+)\>/i', + '/(([`\']).*?)?((FROM|TABLE|INTO|UPDATE|JOIN)\s*)?\<(([a-zA-Z0-9_]+)(\.[a-zA-Z0-9_]+)?)\>(.*?\2)?/i', function ($matches) { - if (!empty($matches[ 2 ])) + if (!empty($matches[ 2 ]) && isset($matches[ 8 ])) { - return $matches[ 2 ] . ' ' . $this->tableQuote($matches[ 3 ]); + return $matches[ 0 ]; } - return $this->columnQuote($matches[ 3 ]); + if (!empty($matches[ 4 ])) + { + return $matches[ 1 ] . $matches[ 4 ] . ' ' . $this->tableQuote($matches[ 5 ]); + } + + return $matches[ 1 ] . $this->columnQuote($matches[ 5 ]); }, $raw->value); diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index fce8549f..1a58957d 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -37,8 +37,8 @@ namespace Composer\Autoload; * * @author Fabien Potencier * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { @@ -60,7 +60,7 @@ class ClassLoader public function getPrefixes() { if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); } return array(); diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..abc04d13 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,684 @@ + + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf', + 'name' => 'sammo-hid/sammo', + ), + 'versions' => + array ( + 'brandonwamboldt/utilphp' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '36c32efc4f0679c05163464a550f45c8d83fe683', + ), + 'catfan/medoo' => + array ( + 'pretty_version' => 'v1.7.10', + 'version' => '1.7.10.0', + 'aliases' => + array ( + ), + 'reference' => '2d675f73e23f63bbaeb9a8aa33318659a3d3c32f', + ), + 'composer/semver' => + array ( + 'pretty_version' => '3.2.5', + 'version' => '3.2.5.0', + 'aliases' => + array ( + ), + 'reference' => '31f3ea725711245195f62e54ffa402d8ef2fdba9', + ), + 'composer/xdebug-handler' => + array ( + 'pretty_version' => '2.0.2', + 'version' => '2.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '84674dd3a7575ba617f5a76d7e9e29a7d3891339', + ), + 'erusev/parsedown' => + array ( + 'pretty_version' => '1.7.4', + 'version' => '1.7.4.0', + 'aliases' => + array ( + ), + 'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3', + ), + 'erusev/parsedown-extra' => + array ( + 'pretty_version' => '0.8.1', + 'version' => '0.8.1.0', + 'aliases' => + array ( + ), + 'reference' => '91ac3ff98f0cea243bdccc688df43810f044dcef', + ), + 'ezyang/htmlpurifier' => + array ( + 'pretty_version' => 'v4.13.0', + 'version' => '4.13.0.0', + 'aliases' => + array ( + ), + 'reference' => '08e27c97e4c6ed02f37c5b2b20488046c8d90d75', + ), + 'felixfbecker/advanced-json-rpc' => + array ( + 'pretty_version' => 'v3.2.1', + 'version' => '3.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'b5f37dbff9a8ad360ca341f3240dc1c168b45447', + ), + 'firephp/firephp-core' => + array ( + 'pretty_version' => 'v0.4.0', + 'version' => '0.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf', + ), + 'guzzlehttp/guzzle' => + array ( + 'pretty_version' => '6.5.5', + 'version' => '6.5.5.0', + 'aliases' => + array ( + ), + 'reference' => '9d4290de1cfd701f38099ef7e183b64b4b7b0c5e', + ), + 'guzzlehttp/promises' => + array ( + 'pretty_version' => '1.4.1', + 'version' => '1.4.1.0', + 'aliases' => + array ( + ), + 'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d', + ), + 'guzzlehttp/psr7' => + array ( + 'pretty_version' => '1.8.2', + 'version' => '1.8.2.0', + 'aliases' => + array ( + ), + 'reference' => 'dc960a912984efb74d0a90222870c72c87f10c91', + ), + 'league/plates' => + array ( + 'pretty_version' => 'v3.4.0', + 'version' => '3.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '6d3ee31199b536a4e003b34a356ca20f6f75496a', + ), + 'microsoft/tolerant-php-parser' => + array ( + 'pretty_version' => 'v0.1.1', + 'version' => '0.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '6a965617cf484355048ac6d2d3de7b6ec93abb16', + ), + 'monolog/monolog' => + array ( + 'pretty_version' => '1.26.1', + 'version' => '1.26.1.0', + 'aliases' => + array ( + ), + 'reference' => 'c6b00f05152ae2c9b04a448f99c7590beb6042f5', + ), + 'netresearch/jsonmapper' => + array ( + 'pretty_version' => 'v4.0.0', + 'version' => '4.0.0.0', + 'aliases' => + array ( + ), + 'reference' => '8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d', + ), + 'nette/caching' => + array ( + 'pretty_version' => 'v3.1.1', + 'version' => '3.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '3e771c589dee414724be473c24ad16dae50c1960', + ), + 'nette/finder' => + array ( + 'pretty_version' => 'v2.5.2', + 'version' => '2.5.2.0', + 'aliases' => + array ( + ), + 'reference' => '4ad2c298eb8c687dd0e74ae84206a4186eeaed50', + ), + 'nette/utils' => + array ( + 'pretty_version' => 'v3.2.2', + 'version' => '3.2.2.0', + 'aliases' => + array ( + ), + 'reference' => '967cfc4f9a1acd5f1058d76715a424c53343c20c', + ), + 'pguardiario/phpuri' => + array ( + 'pretty_version' => '1.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'ad0a5ec033fe616cfef55578b9c7f2458be8fbfc', + ), + 'phan/phan' => + array ( + 'pretty_version' => '5.0.0', + 'version' => '5.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90', + ), + 'php-extended/php-system' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '9e6b3c2009ef56dc123efc43900e40cdf217ace0', + ), + 'php-extended/php-tail' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '19fbd3a79ccc071954f28296b2c44754335304a0', + ), + 'phpdocumentor/reflection-common' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', + ), + 'phpdocumentor/reflection-docblock' => + array ( + 'pretty_version' => '5.2.2', + 'version' => '5.2.2.0', + 'aliases' => + array ( + ), + 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556', + ), + 'phpdocumentor/type-resolver' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0', + ), + 'psr/container' => + array ( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', + ), + 'psr/http-message' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + ), + 'psr/http-message-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/log' => + array ( + 'pretty_version' => '1.1.4', + 'version' => '1.1.4.0', + 'aliases' => + array ( + ), + 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', + ), + 'psr/log-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0.0', + 1 => '1.0|2.0', + ), + ), + 'ralouphie/getallheaders' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', + ), + 'sabre/event' => + array ( + 'pretty_version' => '5.1.2', + 'version' => '5.1.2.0', + 'aliases' => + array ( + ), + 'reference' => 'c120bec57c17b6251a496efc82b732418b49d50a', + ), + 'sammo-hid/sammo' => + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf', + ), + 'scssphp/scssphp' => + array ( + 'pretty_version' => 'v1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => 'b83594e2323c5d6e80785df3f91b9d1d32aad530', + ), + 'sergeytsalkov/meekrodb' => + array ( + 'pretty_version' => 'v2.4', + 'version' => '2.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e30c240d54bc81f58c58507a9ed768032eb494a5', + ), + 'symfony/console' => + array ( + 'pretty_version' => 'v5.3.6', + 'version' => '5.3.6.0', + 'aliases' => + array ( + ), + 'reference' => '51b71afd6d2dc8f5063199357b9880cea8d8bfe2', + ), + 'symfony/deprecation-contracts' => + array ( + 'pretty_version' => 'v2.4.0', + 'version' => '2.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627', + ), + 'symfony/lock' => + array ( + 'pretty_version' => 'v4.4.27', + 'version' => '4.4.27.0', + 'aliases' => + array ( + ), + 'reference' => '6ca476d4ac992802f2a4043929f68f1818449486', + ), + 'symfony/polyfill-ctype' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce', + ), + 'symfony/polyfill-intl-grapheme' => + array ( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'aliases' => + array ( + ), + 'reference' => '16880ba9c5ebe3642d1995ab866db29270b36535', + ), + 'symfony/polyfill-intl-idn' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '65bd267525e82759e7d8c4e8ceea44f398838e65', + ), + 'symfony/polyfill-intl-normalizer' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', + ), + 'symfony/polyfill-mbstring' => + array ( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'aliases' => + array ( + ), + 'reference' => '9174a3d80210dca8daa7f31fec659150bbeabfc6', + ), + 'symfony/polyfill-php72' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976', + ), + 'symfony/polyfill-php73' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => 'fba8933c384d6476ab14fb7b8526e5287ca7e010', + ), + 'symfony/polyfill-php80' => + array ( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'aliases' => + array ( + ), + 'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be', + ), + 'symfony/service-contracts' => + array ( + 'pretty_version' => 'v2.4.0', + 'version' => '2.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb', + ), + 'symfony/string' => + array ( + 'pretty_version' => 'v5.3.3', + 'version' => '5.3.3.0', + 'aliases' => + array ( + ), + 'reference' => 'bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1', + ), + 'tysonandre/var_representation_polyfill' => + array ( + 'pretty_version' => '0.0.2', + 'version' => '0.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '3f17999ee1f257319ddc6721dd26ebbc5d175f33', + ), + 'vlucas/valitron' => + array ( + 'pretty_version' => 'v1.4.10', + 'version' => '1.4.10.0', + 'aliases' => + array ( + ), + 'reference' => '5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb', + ), + 'webmozart/assert' => + array ( + 'pretty_version' => '1.10.0', + 'version' => '1.10.0.0', + 'aliases' => + array ( + ), + 'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25', + ), + 'xemlock/htmlpurifier-html5' => + array ( + 'pretty_version' => 'v0.1.11', + 'version' => '0.1.11.0', + 'aliases' => + array ( + ), + 'reference' => 'f0d563f9fd4a82a3d759043483f9a94c0d8c2255', + ), + ), +); + + + + + + + +public static function getInstalledPackages() +{ +return array_keys(self::$installed['versions']); +} + + + + + + + + + +public static function isInstalled($packageName) +{ +return isset(self::$installed['versions'][$packageName]); +} + + + + + + + + + + + + + + +public static function satisfies(VersionParser $parser, $packageName, $constraint) +{ +$constraint = $parser->parseConstraints($constraint); +$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + +return $provided->matches($constraint); +} + + + + + + + + + + +public static function getVersionRanges($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +$ranges = array(); +if (isset(self::$installed['versions'][$packageName]['pretty_version'])) { +$ranges[] = self::$installed['versions'][$packageName]['pretty_version']; +} +if (array_key_exists('aliases', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']); +} +if (array_key_exists('replaced', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']); +} +if (array_key_exists('provided', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']); +} + +return implode(' || ', $ranges); +} + + + + + +public static function getVersion($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['version'])) { +return null; +} + +return self::$installed['versions'][$packageName]['version']; +} + + + + + +public static function getPrettyVersion($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) { +return null; +} + +return self::$installed['versions'][$packageName]['pretty_version']; +} + + + + + +public static function getReference($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['reference'])) { +return null; +} + +return self::$installed['versions'][$packageName]['reference']; +} + + + + + +public static function getRootPackage() +{ +return self::$installed['root']; +} + + + + + + + +public static function getRawData() +{ +return self::$installed; +} + + + + + + + + + + + + + + + + + + + +public static function reload($data) +{ +self::$installed = $data; +} +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index f9e65eda..5af92e89 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -6,8 +6,9 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'DB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', - 'DBHelper' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'DBTransaction' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'FB' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/fb.php', 'FirePHP' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php', @@ -47,37 +48,43 @@ return array( 'MeekroDB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBEval' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBException' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', - 'Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'MeekroDBWalk' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', + 'Nette\\ArgumentOutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php', 'Nette\\Bridges\\CacheDI\\CacheExtension' => $vendorDir . '/nette/caching/src/Bridges/CacheDI/CacheExtension.php', 'Nette\\Bridges\\CacheLatte\\CacheMacro' => $vendorDir . '/nette/caching/src/Bridges/CacheLatte/CacheMacro.php', + 'Nette\\Caching\\BulkReader' => $vendorDir . '/nette/caching/src/Caching/BulkReader.php', 'Nette\\Caching\\Cache' => $vendorDir . '/nette/caching/src/Caching/Cache.php', - 'Nette\\Caching\\IBulkReader' => $vendorDir . '/nette/caching/src/Caching/IBulkReader.php', - 'Nette\\Caching\\IStorage' => $vendorDir . '/nette/caching/src/Caching/IStorage.php', + 'Nette\\Caching\\IBulkReader' => $vendorDir . '/nette/caching/src/compatibility.php', + 'Nette\\Caching\\IStorage' => $vendorDir . '/nette/caching/src/compatibility.php', 'Nette\\Caching\\OutputHelper' => $vendorDir . '/nette/caching/src/Caching/OutputHelper.php', + 'Nette\\Caching\\Storage' => $vendorDir . '/nette/caching/src/Caching/Storage.php', 'Nette\\Caching\\Storages\\DevNullStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/DevNullStorage.php', 'Nette\\Caching\\Storages\\FileStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/FileStorage.php', - 'Nette\\Caching\\Storages\\IJournal' => $vendorDir . '/nette/caching/src/Caching/Storages/IJournal.php', + 'Nette\\Caching\\Storages\\IJournal' => $vendorDir . '/nette/caching/src/compatibility.php', + 'Nette\\Caching\\Storages\\Journal' => $vendorDir . '/nette/caching/src/Caching/Storages/Journal.php', 'Nette\\Caching\\Storages\\MemcachedStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/MemcachedStorage.php', 'Nette\\Caching\\Storages\\MemoryStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/MemoryStorage.php', 'Nette\\Caching\\Storages\\NewMemcachedStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/NewMemcachedStorage.php', 'Nette\\Caching\\Storages\\SQLiteJournal' => $vendorDir . '/nette/caching/src/Caching/Storages/SQLiteJournal.php', 'Nette\\Caching\\Storages\\SQLiteStorage' => $vendorDir . '/nette/caching/src/Caching/Storages/SQLiteStorage.php', - 'Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\IOException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'Nette\\DeprecatedException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\DirectoryNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\FileNotFoundException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\HtmlStringable' => $vendorDir . '/nette/utils/src/HtmlStringable.php', + 'Nette\\IOException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\InvalidArgumentException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\InvalidStateException' => $vendorDir . '/nette/utils/src/exceptions.php', 'Nette\\Iterators\\CachingIterator' => $vendorDir . '/nette/utils/src/Iterators/CachingIterator.php', 'Nette\\Iterators\\Mapper' => $vendorDir . '/nette/utils/src/Iterators/Mapper.php', - 'Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/Utils/ITranslator.php', - 'Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\SmartObject' => $vendorDir . '/nette/utils/src/Utils/SmartObject.php', - 'Nette\\StaticClass' => $vendorDir . '/nette/utils/src/Utils/StaticClass.php', - 'Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', + 'Nette\\Localization\\ITranslator' => $vendorDir . '/nette/utils/src/compatibility.php', + 'Nette\\Localization\\Translator' => $vendorDir . '/nette/utils/src/Translator.php', + 'Nette\\MemberAccessException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\NotImplementedException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\NotSupportedException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\OutOfRangeException' => $vendorDir . '/nette/utils/src/exceptions.php', + 'Nette\\SmartObject' => $vendorDir . '/nette/utils/src/SmartObject.php', + 'Nette\\StaticClass' => $vendorDir . '/nette/utils/src/StaticClass.php', + 'Nette\\UnexpectedValueException' => $vendorDir . '/nette/utils/src/exceptions.php', 'Nette\\Utils\\ArrayHash' => $vendorDir . '/nette/utils/src/Utils/ArrayHash.php', 'Nette\\Utils\\ArrayList' => $vendorDir . '/nette/utils/src/Utils/ArrayList.php', 'Nette\\Utils\\Arrays' => $vendorDir . '/nette/utils/src/Utils/Arrays.php', @@ -86,9 +93,10 @@ return array( 'Nette\\Utils\\DateTime' => $vendorDir . '/nette/utils/src/Utils/DateTime.php', 'Nette\\Utils\\FileSystem' => $vendorDir . '/nette/utils/src/Utils/FileSystem.php', 'Nette\\Utils\\Finder' => $vendorDir . '/nette/finder/src/Utils/Finder.php', + 'Nette\\Utils\\Floats' => $vendorDir . '/nette/utils/src/Utils/Floats.php', 'Nette\\Utils\\Helpers' => $vendorDir . '/nette/utils/src/Utils/Helpers.php', 'Nette\\Utils\\Html' => $vendorDir . '/nette/utils/src/Utils/Html.php', - 'Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/Utils/IHtmlString.php', + 'Nette\\Utils\\IHtmlString' => $vendorDir . '/nette/utils/src/compatibility.php', 'Nette\\Utils\\Image' => $vendorDir . '/nette/utils/src/Utils/Image.php', 'Nette\\Utils\\ImageException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', 'Nette\\Utils\\Json' => $vendorDir . '/nette/utils/src/Utils/Json.php', @@ -102,6 +110,10 @@ return array( 'Nette\\Utils\\Strings' => $vendorDir . '/nette/utils/src/Utils/Strings.php', 'Nette\\Utils\\UnknownImageFileException' => $vendorDir . '/nette/utils/src/Utils/exceptions.php', 'Nette\\Utils\\Validators' => $vendorDir . '/nette/utils/src/Utils/Validators.php', + 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'WhereClause' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php', 'kakao\\KakaoKey' => $baseDir . '/d_setting/KakaoKey.php', 'sammo\\RootDB' => $baseDir . '/d_setting/RootDB.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index baf3dd27..297c7286 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -6,17 +6,24 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', - '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', - 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', - 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', '2b9d0f43f9552984cfa82fee95491826' => $vendorDir . '/sabre/event/lib/coroutine.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => $vendorDir . '/sabre/event/lib/Loop/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => $vendorDir . '/sabre/event/lib/Promise/functions.php', + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', + '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', + 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', + 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', + 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', + '6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', '5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php', '870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index f66e0994..32ab1f52 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -10,12 +10,18 @@ return array( 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), 'kakao\\' => array($baseDir . '/src/kakao'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), + 'VarRepresentation\\' => array($vendorDir . '/tysonandre/var_representation_polyfill/src/VarRepresentation'), 'Valitron\\' => array($vendorDir . '/vlucas/valitron/src/Valitron'), + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), + 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), + 'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'), 'Symfony\\Component\\Lock\\' => array($vendorDir . '/symfony/lock'), 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), 'ScssPhp\\ScssPhp\\' => array($vendorDir . '/scssphp/scssphp/src'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 74abef3a..e63127b9 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -13,19 +13,24 @@ class ComposerAutoloaderInit67b09c83b85c3bc0027caefe5bba171a } } + /** + * @return \Composer\Autoload\ClassLoader + */ public static function getLoader() { if (null !== self::$loader) { return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInit67b09c83b85c3bc0027caefe5bba171a', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInit67b09c83b85c3bc0027caefe5bba171a', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; + require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a::getInitializer($loader)); } else { diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 4ca79561..0511d951 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -7,17 +7,24 @@ namespace Composer\Autoload; class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a { public static $files = array ( - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', - '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', - 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', - 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', '2b9d0f43f9552984cfa82fee95491826' => __DIR__ . '/..' . '/sabre/event/lib/coroutine.php', 'd81bab31d3feb45bfe2f283ea3c8fdf7' => __DIR__ . '/..' . '/sabre/event/lib/Loop/functions.php', 'a1cce3d26cc15c00fcd0b3354bd72c88' => __DIR__ . '/..' . '/sabre/event/lib/Promise/functions.php', + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', + '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php', + 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', + 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', + 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', + '6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', '5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php', '870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php', @@ -42,15 +49,21 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a ), 'V' => array ( + 'VarRepresentation\\' => 18, 'Valitron\\' => 9, ), 'S' => array ( + 'Symfony\\Polyfill\\Php80\\' => 23, 'Symfony\\Polyfill\\Php73\\' => 23, 'Symfony\\Polyfill\\Php72\\' => 23, 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, + 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, 'Symfony\\Polyfill\\Ctype\\' => 23, 'Symfony\\Contracts\\Service\\' => 26, + 'Symfony\\Component\\String\\' => 25, 'Symfony\\Component\\Lock\\' => 23, 'Symfony\\Component\\Console\\' => 26, 'ScssPhp\\ScssPhp\\' => 16, @@ -111,10 +124,18 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a array ( 0 => __DIR__ . '/..' . '/webmozart/assert/src', ), + 'VarRepresentation\\' => + array ( + 0 => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/VarRepresentation', + ), 'Valitron\\' => array ( 0 => __DIR__ . '/..' . '/vlucas/valitron/src/Valitron', ), + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), 'Symfony\\Polyfill\\Php73\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php73', @@ -127,6 +148,18 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', ), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', + ), + 'Symfony\\Polyfill\\Intl\\Idn\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', + ), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', + ), 'Symfony\\Polyfill\\Ctype\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', @@ -135,6 +168,10 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a array ( 0 => __DIR__ . '/..' . '/symfony/service-contracts', ), + 'Symfony\\Component\\String\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/string', + ), 'Symfony\\Component\\Lock\\' => array ( 0 => __DIR__ . '/..' . '/symfony/lock', @@ -253,8 +290,9 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a ); public static $classMap = array ( + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'DB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', - 'DBHelper' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'DBTransaction' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'FB' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/fb.php', 'FirePHP' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php', @@ -294,37 +332,43 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a 'MeekroDB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBEval' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'MeekroDBException' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', - 'Nette\\ArgumentOutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'MeekroDBWalk' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', + 'Nette\\ArgumentOutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', 'Nette\\Bridges\\CacheDI\\CacheExtension' => __DIR__ . '/..' . '/nette/caching/src/Bridges/CacheDI/CacheExtension.php', 'Nette\\Bridges\\CacheLatte\\CacheMacro' => __DIR__ . '/..' . '/nette/caching/src/Bridges/CacheLatte/CacheMacro.php', + 'Nette\\Caching\\BulkReader' => __DIR__ . '/..' . '/nette/caching/src/Caching/BulkReader.php', 'Nette\\Caching\\Cache' => __DIR__ . '/..' . '/nette/caching/src/Caching/Cache.php', - 'Nette\\Caching\\IBulkReader' => __DIR__ . '/..' . '/nette/caching/src/Caching/IBulkReader.php', - 'Nette\\Caching\\IStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/IStorage.php', + 'Nette\\Caching\\IBulkReader' => __DIR__ . '/..' . '/nette/caching/src/compatibility.php', + 'Nette\\Caching\\IStorage' => __DIR__ . '/..' . '/nette/caching/src/compatibility.php', 'Nette\\Caching\\OutputHelper' => __DIR__ . '/..' . '/nette/caching/src/Caching/OutputHelper.php', + 'Nette\\Caching\\Storage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storage.php', 'Nette\\Caching\\Storages\\DevNullStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/DevNullStorage.php', 'Nette\\Caching\\Storages\\FileStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/FileStorage.php', - 'Nette\\Caching\\Storages\\IJournal' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/IJournal.php', + 'Nette\\Caching\\Storages\\IJournal' => __DIR__ . '/..' . '/nette/caching/src/compatibility.php', + 'Nette\\Caching\\Storages\\Journal' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/Journal.php', 'Nette\\Caching\\Storages\\MemcachedStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/MemcachedStorage.php', 'Nette\\Caching\\Storages\\MemoryStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/MemoryStorage.php', 'Nette\\Caching\\Storages\\NewMemcachedStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/NewMemcachedStorage.php', 'Nette\\Caching\\Storages\\SQLiteJournal' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/SQLiteJournal.php', 'Nette\\Caching\\Storages\\SQLiteStorage' => __DIR__ . '/..' . '/nette/caching/src/Caching/Storages/SQLiteStorage.php', - 'Nette\\DeprecatedException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\DirectoryNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\FileNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\IOException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\InvalidArgumentException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\InvalidStateException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'Nette\\DeprecatedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\DirectoryNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\FileNotFoundException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\HtmlStringable' => __DIR__ . '/..' . '/nette/utils/src/HtmlStringable.php', + 'Nette\\IOException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\InvalidArgumentException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\InvalidStateException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', 'Nette\\Iterators\\CachingIterator' => __DIR__ . '/..' . '/nette/utils/src/Iterators/CachingIterator.php', 'Nette\\Iterators\\Mapper' => __DIR__ . '/..' . '/nette/utils/src/Iterators/Mapper.php', - 'Nette\\Localization\\ITranslator' => __DIR__ . '/..' . '/nette/utils/src/Utils/ITranslator.php', - 'Nette\\MemberAccessException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\NotImplementedException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\NotSupportedException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\OutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', - 'Nette\\SmartObject' => __DIR__ . '/..' . '/nette/utils/src/Utils/SmartObject.php', - 'Nette\\StaticClass' => __DIR__ . '/..' . '/nette/utils/src/Utils/StaticClass.php', - 'Nette\\UnexpectedValueException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', + 'Nette\\Localization\\ITranslator' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php', + 'Nette\\Localization\\Translator' => __DIR__ . '/..' . '/nette/utils/src/Translator.php', + 'Nette\\MemberAccessException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\NotImplementedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\NotSupportedException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\OutOfRangeException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', + 'Nette\\SmartObject' => __DIR__ . '/..' . '/nette/utils/src/SmartObject.php', + 'Nette\\StaticClass' => __DIR__ . '/..' . '/nette/utils/src/StaticClass.php', + 'Nette\\UnexpectedValueException' => __DIR__ . '/..' . '/nette/utils/src/exceptions.php', 'Nette\\Utils\\ArrayHash' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayHash.php', 'Nette\\Utils\\ArrayList' => __DIR__ . '/..' . '/nette/utils/src/Utils/ArrayList.php', 'Nette\\Utils\\Arrays' => __DIR__ . '/..' . '/nette/utils/src/Utils/Arrays.php', @@ -333,9 +377,10 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a 'Nette\\Utils\\DateTime' => __DIR__ . '/..' . '/nette/utils/src/Utils/DateTime.php', 'Nette\\Utils\\FileSystem' => __DIR__ . '/..' . '/nette/utils/src/Utils/FileSystem.php', 'Nette\\Utils\\Finder' => __DIR__ . '/..' . '/nette/finder/src/Utils/Finder.php', + 'Nette\\Utils\\Floats' => __DIR__ . '/..' . '/nette/utils/src/Utils/Floats.php', 'Nette\\Utils\\Helpers' => __DIR__ . '/..' . '/nette/utils/src/Utils/Helpers.php', 'Nette\\Utils\\Html' => __DIR__ . '/..' . '/nette/utils/src/Utils/Html.php', - 'Nette\\Utils\\IHtmlString' => __DIR__ . '/..' . '/nette/utils/src/Utils/IHtmlString.php', + 'Nette\\Utils\\IHtmlString' => __DIR__ . '/..' . '/nette/utils/src/compatibility.php', 'Nette\\Utils\\Image' => __DIR__ . '/..' . '/nette/utils/src/Utils/Image.php', 'Nette\\Utils\\ImageException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', 'Nette\\Utils\\Json' => __DIR__ . '/..' . '/nette/utils/src/Utils/Json.php', @@ -349,6 +394,10 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a 'Nette\\Utils\\Strings' => __DIR__ . '/..' . '/nette/utils/src/Utils/Strings.php', 'Nette\\Utils\\UnknownImageFileException' => __DIR__ . '/..' . '/nette/utils/src/Utils/exceptions.php', 'Nette\\Utils\\Validators' => __DIR__ . '/..' . '/nette/utils/src/Utils/Validators.php', + 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'WhereClause' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php', 'kakao\\KakaoKey' => __DIR__ . '/../..' . '/d_setting/KakaoKey.php', 'sammo\\RootDB' => __DIR__ . '/../..' . '/d_setting/RootDB.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index c1406c89..85fb4a3a 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,2390 +1,3299 @@ -[ - { - "name": "brandonwamboldt/utilphp", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/brandonwamboldt/utilphp.git", - "reference": "36c32efc4f0679c05163464a550f45c8d83fe683" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brandonwamboldt/utilphp/zipball/36c32efc4f0679c05163464a550f45c8d83fe683", - "reference": "36c32efc4f0679c05163464a550f45c8d83fe683", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "satooshi/php-coveralls": "dev-master" - }, - "time": "2015-02-02T17:56:14+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "utilphp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brandon Wamboldt", - "email": "brandon.wamboldt@gmail.com" - } - ], - "description": "util.php is a collection of useful functions and snippets that you need or could use every day, designed to avoid conflicts with existing projects", - "homepage": "https://github.com/brandonwamboldt/utilphp", - "keywords": [ - "collection", - "helpers", - "php", - "utility" - ] - }, - { - "name": "catfan/medoo", - "version": "v1.7.8", - "version_normalized": "1.7.8.0", - "source": { - "type": "git", - "url": "https://github.com/catfan/Medoo.git", - "reference": "dd9d570584cfb1e09ec470608479b86e41d5b60d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/catfan/Medoo/zipball/dd9d570584cfb1e09ec470608479b86e41d5b60d", - "reference": "dd9d570584cfb1e09ec470608479b86e41d5b60d", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "php": ">=5.4" - }, - "suggest": { - "ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform", - "ext-pdo_mysql": "For MySQL or MariaDB database", - "ext-pdo_oci": "For Oracle database", - "ext-pdo_oci8": "For Oracle version 8 database", - "ext-pdo_pqsql": "For PostgreSQL database", - "ext-pdo_sqlite": "For SQLite database", - "ext-pdo_sqlsrv": "For MSSQL database on both Window/Liunx platform" - }, - "time": "2019-12-19T05:04:34+00:00", - "type": "framework", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Medoo\\": "/src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Angel Lai", - "email": "angel@catfan.me" - } - ], - "description": "The lightweight PHP database framework to accelerate development", - "homepage": "https://medoo.in", - "keywords": [ - "database", - "database library", - "lightweight", - "mariadb", - "mssql", - "mysql", - "oracle", - "php framework", - "postgresql", - "sql", - "sqlite" - ] - }, - { - "name": "composer/semver", - "version": "1.5.1", - "version_normalized": "1.5.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" - }, - "time": "2020-01-13T12:06:48+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "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" +{ + "packages": [ + { + "name": "brandonwamboldt/utilphp", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/brandonwamboldt/utilphp.git", + "reference": "36c32efc4f0679c05163464a550f45c8d83fe683" }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brandonwamboldt/utilphp/zipball/36c32efc4f0679c05163464a550f45c8d83fe683", + "reference": "36c32efc4f0679c05163464a550f45c8d83fe683", + "shasum": "" }, - { - "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" - ] - }, - { - "name": "composer/xdebug-handler", - "version": "1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" - }, - "time": "2020-03-01T12:26:26+00:00", - "type": "library", - "installation-source": "dist", - "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" - ] - }, - { - "name": "erusev/parsedown", - "version": "1.7.4", - "version_normalized": "1.7.4.0", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "time": "2019-12-30T22:54:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ] - }, - { - "name": "erusev/parsedown-extra", - "version": "0.8.1", - "version_normalized": "0.8.1.0", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown-extra.git", - "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/91ac3ff98f0cea243bdccc688df43810f044dcef", - "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef", - "shasum": "" - }, - "require": { - "erusev/parsedown": "^1.7.4" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "time": "2019-12-30T23:20:37+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "ParsedownExtra": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "An extension of Parsedown that adds support for Markdown Extra.", - "homepage": "https://github.com/erusev/parsedown-extra", - "keywords": [ - "markdown", - "markdown extra", - "parsedown", - "parser" - ] - }, - { - "name": "ezyang/htmlpurifier", - "version": "v4.12.0", - "version_normalized": "4.12.0.0", - "source": { - "type": "git", - "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "a617e55bc62a87eec73bd456d146d134ad716f03" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/a617e55bc62a87eec73bd456d146d134ad716f03", - "reference": "a617e55bc62a87eec73bd456d146d134ad716f03", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" - }, - "time": "2019-10-28T03:44:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "HTMLPurifier": "library/" + "require": { + "php": ">=5.3.3" }, - "files": [ - "library/HTMLPurifier.composer.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-or-later" - ], - "authors": [ - { - "name": "Edward Z. Yang", - "email": "admin@htmlpurifier.org", - "homepage": "http://ezyang.com" - } - ], - "description": "Standards compliant HTML filter written in PHP", - "homepage": "http://htmlpurifier.org/", - "keywords": [ - "html" - ] - }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.1.1", - "version_normalized": "3.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40", - "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0", - "php": ">=7.0", - "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0.0" - }, - "time": "2020-03-11T15:21:41+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation" - }, - { - "name": "firephp/firephp-core", - "version": "v0.4.0", - "version_normalized": "0.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/firephp/firephp-core.git", - "reference": "fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/firephp/firephp-core/zipball/fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf", - "reference": "fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf", - "shasum": "" - }, - "time": "2013-04-23T15:28:20+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "lib/FirePHPCore/FirePHP.class.php", - "lib/FirePHPCore/fb.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christoph Dorn", - "email": "christoph@christophdorn.com", - "homepage": "http://christophdorn.com" - } - ], - "description": "Traditional FirePHPCore library for sending PHP variables to the browser.", - "homepage": "https://github.com/firephp/firephp-core" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.2", - "version_normalized": "6.5.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "time": "2019-12-23T11:57:10+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" + "require-dev": { + "satooshi/php-coveralls": "dev-master" }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ] - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "time": "2016-12-20T10:07:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" + "time": "2015-02-02T17:56:14+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "utilphp\\": "src/" + } }, - "files": [ - "src/functions_include.php" - ] + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brandon Wamboldt", + "email": "brandon.wamboldt@gmail.com" + } + ], + "description": "util.php is a collection of useful functions and snippets that you need or could use every day, designed to avoid conflicts with existing projects", + "homepage": "https://github.com/brandonwamboldt/utilphp", + "keywords": [ + "collection", + "helpers", + "php", + "utility" + ], + "install-path": "../brandonwamboldt/utilphp" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, - { - "name": "guzzlehttp/psr7", - "version": "1.6.1", - "version_normalized": "1.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" - }, - "time": "2019-07-01T23:21:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" + { + "name": "catfan/medoo", + "version": "v1.7.10", + "version_normalized": "1.7.10.0", + "source": { + "type": "git", + "url": "https://github.com/catfan/Medoo.git", + "reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f" }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/catfan/Medoo/zipball/2d675f73e23f63bbaeb9a8aa33318659a3d3c32f", + "reference": "2d675f73e23f63bbaeb9a8aa33318659a3d3c32f", + "shasum": "" }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ] - }, - { - "name": "league/plates", - "version": "3.3.0", - "version_normalized": "3.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/plates.git", - "reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af" + "require": { + "ext-pdo": "*", + "php": ">=5.4" + }, + "suggest": { + "ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform", + "ext-pdo_mysql": "For MySQL or MariaDB database", + "ext-pdo_oci": "For Oracle database", + "ext-pdo_oci8": "For Oracle version 8 database", + "ext-pdo_pqsql": "For PostgreSQL database", + "ext-pdo_sqlite": "For SQLite database", + "ext-pdo_sqlsrv": "For MSSQL database on both Window/Liunx platform" + }, + "time": "2020-02-11T08:20:42+00:00", + "type": "framework", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Medoo\\": "/src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Angel Lai", + "email": "angel@catfan.me" + } + ], + "description": "The lightweight PHP database framework to accelerate development", + "homepage": "https://medoo.in", + "keywords": [ + "database", + "database library", + "lightweight", + "mariadb", + "mssql", + "mysql", + "oracle", + "php framework", + "postgresql", + "sql", + "sqlite" + ], + "support": { + "issues": "https://github.com/catfan/Medoo/issues", + "source": "https://github.com/catfan/Medoo" + }, + "install-path": "../catfan/medoo" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/plates/zipball/b1684b6f127714497a0ef927ce42c0b44b45a8af", - "reference": "b1684b6f127714497a0ef927ce42c0b44b45a8af", - "shasum": "" + { + "name": "composer/semver", + "version": "3.2.5", + "version_normalized": "3.2.5.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "time": "2021-05-24T12:41:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "installation-source": "dist", + "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" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "install-path": "./semver" }, - "require": { - "php": "^5.3 | ^7.0" + { + "name": "composer/xdebug-handler", + "version": "2.0.2", + "version_normalized": "2.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "time": "2021-07-31T17:03:58+00:00", + "type": "library", + "installation-source": "dist", + "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" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "install-path": "./xdebug-handler" }, - "require-dev": { - "mikey179/vfsstream": "^1.4", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + { + "name": "erusev/parsedown", + "version": "1.7.4", + "version_normalized": "1.7.4.0", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "time": "2019-12-30T22:54:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "install-path": "../erusev/parsedown" }, - "time": "2016-12-28T00:14:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + { + "name": "erusev/parsedown-extra", + "version": "0.8.1", + "version_normalized": "0.8.1.0", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown-extra.git", + "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown-extra/zipball/91ac3ff98f0cea243bdccc688df43810f044dcef", + "reference": "91ac3ff98f0cea243bdccc688df43810f044dcef", + "shasum": "" + }, + "require": { + "erusev/parsedown": "^1.7.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "time": "2019-12-30T23:20:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "ParsedownExtra": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "An extension of Parsedown that adds support for Markdown Extra.", + "homepage": "https://github.com/erusev/parsedown-extra", + "keywords": [ + "markdown", + "markdown extra", + "parsedown", + "parser" + ], + "install-path": "../erusev/parsedown-extra" }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "League\\Plates\\": "src" - } + { + "name": "ezyang/htmlpurifier", + "version": "v4.13.0", + "version_normalized": "4.13.0.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "require-dev": { + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + }, + "time": "2020-06-29T00:56:53+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ], + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/master" + }, + "install-path": "../ezyang/htmlpurifier" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Reinink", - "email": "jonathan@reinink.ca", - "role": "Developer" - } - ], - "description": "Plates, the native PHP template system that's fast, easy to use and easy to extend.", - "homepage": "http://platesphp.com", - "keywords": [ - "league", - "package", - "templates", - "templating", - "views" - ] - }, - { - "name": "microsoft/tolerant-php-parser", - "version": "v0.0.20", - "version_normalized": "0.0.20.0", - "source": { - "type": "git", - "url": "https://github.com/microsoft/tolerant-php-parser.git", - "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4" + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "version_normalized": "3.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "time": "2021-06-11T22:34:44+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "install-path": "../felixfbecker/advanced-json-rpc" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4", - "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4", - "shasum": "" + { + "name": "firephp/firephp-core", + "version": "v0.4.0", + "version_normalized": "0.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/firephp/firephp-core.git", + "reference": "fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firephp/firephp-core/zipball/fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf", + "reference": "fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf", + "shasum": "" + }, + "time": "2013-04-23T15:28:20+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "lib/FirePHPCore/FirePHP.class.php", + "lib/FirePHPCore/fb.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoph Dorn", + "email": "christoph@christophdorn.com", + "homepage": "http://christophdorn.com" + } + ], + "description": "Traditional FirePHPCore library for sending PHP variables to the browser.", + "homepage": "https://github.com/firephp/firephp-core", + "install-path": "../firephp/firephp-core" }, - "require": { - "php": ">=7.0" + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "version_normalized": "6.5.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "time": "2020-06-16T21:01:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, + "install-path": "../guzzlehttp/guzzle" }, - "require-dev": { - "phpunit/phpunit": "^6.4" + { + "name": "guzzlehttp/promises", + "version": "1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "time": "2021-03-07T09:25:29+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.1" + }, + "install-path": "../guzzlehttp/promises" }, - "time": "2020-02-18T02:57:19+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Microsoft\\PhpParser\\": [ + { + "name": "guzzlehttp/psr7", + "version": "1.8.2", + "version_normalized": "1.8.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2021-04-26T09:17:50+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.8.2" + }, + "install-path": "../guzzlehttp/psr7" + }, + { + "name": "league/plates", + "version": "v3.4.0", + "version_normalized": "3.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/plates.git", + "reference": "6d3ee31199b536a4e003b34a356ca20f6f75496a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/plates/zipball/6d3ee31199b536a4e003b34a356ca20f6f75496a", + "reference": "6d3ee31199b536a4e003b34a356ca20f6f75496a", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "time": "2020-12-25T05:00:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\Plates\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Reinink", + "email": "jonathan@reinink.ca", + "role": "Developer" + }, + { + "name": "RJ Garcia", + "email": "ragboyjr@icloud.com", + "role": "Developer" + } + ], + "description": "Plates, the native PHP template system that's fast, easy to use and easy to extend.", + "homepage": "https://platesphp.com", + "keywords": [ + "league", + "package", + "templates", + "templating", + "views" + ], + "support": { + "issues": "https://github.com/thephpleague/plates/issues", + "source": "https://github.com/thephpleague/plates/tree/v3.4.0" + }, + "install-path": "../league/plates" + }, + { + "name": "microsoft/tolerant-php-parser", + "version": "v0.1.1", + "version_normalized": "0.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/microsoft/tolerant-php-parser.git", + "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16", + "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.15" + }, + "time": "2021-07-16T21:28:12+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Microsoft\\PhpParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Lourens", + "email": "roblou@microsoft.com" + } + ], + "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", + "support": { + "issues": "https://github.com/microsoft/tolerant-php-parser/issues", + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1" + }, + "install-path": "../microsoft/tolerant-php-parser" + }, + { + "name": "monolog/monolog", + "version": "1.26.1", + "version_normalized": "1.26.1.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c6b00f05152ae2c9b04a448f99c7590beb6042f5", + "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "~4.5", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "time": "2021-05-28T08:32:12+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.26.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "install-path": "../monolog/monolog" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.0.0", + "version_normalized": "4.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "time": "2020-12-01T19:48:11+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + }, + "install-path": "../netresearch/jsonmapper" + }, + { + "name": "nette/caching", + "version": "v3.1.1", + "version_normalized": "3.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/nette/caching.git", + "reference": "3e771c589dee414724be473c24ad16dae50c1960" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/caching/zipball/3e771c589dee414724be473c24ad16dae50c1960", + "reference": "3e771c589dee414724be473c24ad16dae50c1960", + "shasum": "" + }, + "require": { + "nette/finder": "^2.4 || ^3.0", + "nette/utils": "^2.4 || ^3.0", + "php": ">=7.2 <8.1" + }, + "require-dev": { + "latte/latte": "^2.10", + "nette/di": "^v3.0", + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.4" + }, + "suggest": { + "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" + }, + "time": "2021-03-06T14:07:38+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ "src/" ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Rob Lourens", - "email": "roblou@microsoft.com" - } - ], - "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios" - }, - { - "name": "monolog/monolog", - "version": "1.25.3", - "version_normalized": "1.25.3.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1", - "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "time": "2019-12-20T14:15:16+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ] - }, - { - "name": "netresearch/jsonmapper", - "version": "v2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "time": "2020-04-16T18:48:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes" - }, - { - "name": "nette/caching", - "version": "v3.0.1", - "version_normalized": "3.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "b9ecbf920f240bd1ab14900d9a77876924ad7fb4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/b9ecbf920f240bd1ab14900d9a77876924ad7fb4", - "reference": "b9ecbf920f240bd1ab14900d9a77876924ad7fb4", - "shasum": "" - }, - "require": { - "nette/finder": "^2.4 || ^3.0", - "nette/utils": "^2.4 || ^3.0", - "php": ">=7.1" - }, - "require-dev": { - "latte/latte": "^2.4", - "nette/di": "^v3.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "time": "2019-11-19T18:41:40+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ] - }, - { - "name": "nette/finder", - "version": "v2.5.2", - "version_normalized": "2.5.2.0", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/4ad2c298eb8c687dd0e74ae84206a4186eeaed50", - "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50", - "shasum": "" - }, - "require": { - "nette/utils": "^2.4 || ^3.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "time": "2020-01-03T20:35:40+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ] - }, - { - "name": "nette/utils", - "version": "v3.1.2", - "version_normalized": "3.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "488f58378bba71767e7831c83f9e0fa808bf83b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/488f58378bba71767e7831c83f9e0fa808bf83b9", - "reference": "488f58378bba71767e7831c83f9e0fa808bf83b9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "~2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "time": "2020-05-27T09:58:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ] - }, - { - "name": "pguardiario/phpuri", - "version": "1.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/monkeysuffrage/phpuri.git", - "reference": "ad0a5ec033fe616cfef55578b9c7f2458be8fbfc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/monkeysuffrage/phpuri/zipball/ad0a5ec033fe616cfef55578b9c7f2458be8fbfc", - "reference": "ad0a5ec033fe616cfef55578b9c7f2458be8fbfc", - "shasum": "" - }, - "time": "2015-05-24T09:13:17+00:00", - "type": "project", - "installation-source": "dist", - "autoload": { - "files": [ - "phpuri.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "description": "A php library for converting relative urls to absolute." - }, - { - "name": "phan/phan", - "version": "2.7.1", - "version_normalized": "2.7.1.0", - "source": { - "type": "git", - "url": "https://github.com/phan/phan.git", - "reference": "67c51bb1593e5c30271fc16d691b82e318b90b77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/67c51bb1593e5c30271fc16d691b82e318b90b77", - "reference": "67c51bb1593e5c30271fc16d691b82e318b90b77", - "shasum": "" - }, - "require": { - "composer/semver": "^1.4", - "composer/xdebug-handler": "^1.3.2", - "ext-filter": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.4", - "microsoft/tolerant-php-parser": "0.0.20", - "netresearch/jsonmapper": "^1.6.0|^2.0", - "php": "^7.1.0", - "sabre/event": "^5.0", - "symfony/console": "^2.3|^3.0|^4.0|^5.0", - "symfony/polyfill-mbstring": "^1.11.0", - "symfony/polyfill-php72": "^1.15" - }, - "require-dev": { - "brianium/paratest": "^4.0.0", - "phpunit/phpunit": "^7.5.0" - }, - "suggest": { - "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.6+ is recommended.", - "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", - "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable", - "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", - "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions." - }, - "time": "2020-04-12T01:25:29+00:00", - "bin": [ - "phan", - "phan_client", - "tocheckstyle" - ], - "type": "project", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Phan\\": "src/Phan" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tyson Andre" - }, - { - "name": "Rasmus Lerdorf" - }, - { - "name": "Andrew S. Morrison" - } - ], - "description": "A static analyzer for PHP", - "keywords": [ - "analyzer", - "php", - "static" - ] - }, - { - "name": "php-extended/php-system", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://gitlab.com/php-extended/php-system.git", - "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0" - }, - "dist": { - "type": "zip", - "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0", - "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0", - "shasum": "" - }, - "time": "2018-06-07T06:03:27+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpExtended\\System\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anastaszor", - "role": "Developer" - } - ], - "description": "A generic way to find informations about the running system", - "homepage": "https://gitlab.com/php-extended/php-system", - "keywords": [ - "operating system", - "os", - "php", - "system" - ] - }, - { - "name": "php-extended/php-tail", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://gitlab.com/php-extended/php-tail.git", - "reference": "19fbd3a79ccc071954f28296b2c44754335304a0" - }, - "dist": { - "type": "zip", - "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0", - "reference": "19fbd3a79ccc071954f28296b2c44754335304a0", - "shasum": "" - }, - "require": { - "php-extended/php-system": "^1.2" - }, - "time": "2018-06-07T06:04:58+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpExtended\\Tail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anastaszor", - "role": "Developer" - } - ], - "description": "A smart way to tail files depending of the environment", - "homepage": "https://gitlab.com/php-extended/php-tail", - "keywords": [ - "cheat", - "mighty", - "naive", - "php", - "tail" - ] - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.1.0", - "version_normalized": "2.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2020-04-27T09:25:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", - "version_normalized": "5.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "shasum": "" - }, - "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" - }, - "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" - }, - "time": "2020-02-22T12:28:44+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock." - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", - "shasum": "" - }, - "require": { - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" - }, - "time": "2020-02-18T18:59:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names" - }, - { - "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-02-14T16:28:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ] - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T14:39:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ] - }, - { - "name": "psr/log", - "version": "1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2019-11-01T11:05:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "time": "2019-03-08T08:55:37+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders." - }, - { - "name": "sabre/event", - "version": "5.1.0", - "version_normalized": "5.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sabre-io/event.git", - "reference": "d00a17507af0e7544cfe17096372f5d733e3b276" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/d00a17507af0e7544cfe17096372f5d733e3b276", - "reference": "d00a17507af0e7544cfe17096372f5d733e3b276", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.16.1", - "phpunit/phpunit": "^7 || ^8" - }, - "time": "2020-01-31T18:52:29+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Sabre\\Event\\": "lib/" - }, - "files": [ - "lib/coroutine.php", - "lib/Loop/functions.php", - "lib/Promise/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - } - ], - "description": "sabre/event is a library for lightweight event-based programming", - "homepage": "http://sabre.io/event/", - "keywords": [ - "EventEmitter", - "async", - "coroutine", - "eventloop", - "events", - "hooks", - "plugin", - "promise", - "reactor", - "signal" - ] - }, - { - "name": "scssphp/scssphp", - "version": "1.0.6", - "version_normalized": "1.0.6.0", - "source": { - "type": "git", - "url": "https://github.com/scssphp/scssphp.git", - "reference": "5b3c9d704950d8f9637f5110c36c281ec47dc13c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/5b3c9d704950d8f9637f5110c36c281ec47dc13c", - "reference": "5b3c9d704950d8f9637f5110c36c281ec47dc13c", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "php": ">=5.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.3", - "squizlabs/php_codesniffer": "~2.5", - "twbs/bootstrap": "~4.3", - "zurb/foundation": "~6.5" - }, - "time": "2019-12-12T05:00:52+00:00", - "bin": [ - "bin/pscss" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "ScssPhp\\ScssPhp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anthon Pang", - "email": "apang@softwaredevelopment.ca", - "homepage": "https://github.com/robocoder" - }, - { - "name": "Cédric Morin", - "email": "cedric@yterium.com", - "homepage": "https://github.com/Cerdic" - } - ], - "description": "scssphp is a compiler for SCSS written in PHP.", - "homepage": "http://scssphp.github.io/scssphp/", - "keywords": [ - "css", - "less", - "sass", - "scss", - "stylesheet" - ] - }, - { - "name": "sergeytsalkov/meekrodb", - "version": "v2.3", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/SergeyTsalkov/meekrodb.git", - "reference": "eb36858f1aff94ae1665900e681a1cfb78563ee1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SergeyTsalkov/meekrodb/zipball/eb36858f1aff94ae1665900e681a1cfb78563ee1", - "reference": "eb36858f1aff94ae1665900e681a1cfb78563ee1", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "time": "2014-06-16T22:40:22+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "db.class.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Sergey Tsalkov", - "email": "stsalkov@gmail.com" - } - ], - "description": "The Simple PHP/MySQL Library", - "homepage": "http://www.meekro.com", - "keywords": [ - "database", - "mysql", - "mysqli", - "pdo" - ] - }, - { - "name": "symfony/console", - "version": "v5.0.8", - "version_normalized": "5.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2020-03-30T11:42:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "symfony/lock", - "version": "v4.4.3", - "version_normalized": "4.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/lock.git", - "reference": "6c4f5b620871cfef5b004fc57f2ca74572ae03b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/6c4f5b620871cfef5b004fc57f2ca74572ae03b3", - "reference": "6c4f5b620871cfef5b004fc57f2ca74572ae03b3", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "doctrine/dbal": "<2.5" - }, - "require-dev": { - "doctrine/dbal": "~2.5", - "mongodb/mongodb": "~1.1", - "predis/predis": "~1.0" - }, - "time": "2020-01-04T13:00:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Lock\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jérémy Derussé", - "email": "jeremy@derusse.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Lock Component", - "homepage": "https://symfony.com", - "keywords": [ - "cas", - "flock", - "locking", - "mutex", - "redlock", - "semaphore" - ] - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.15.0", - "version_normalized": "1.15.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2020-02-27T09:26:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", - "version_normalized": "1.15.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2020-03-09T19:04:49+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.15.0", - "version_normalized": "1.15.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-02-27T09:26:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.15.0", - "version_normalized": "1.15.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2020-02-27T09:26:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", + "homepage": "https://nette.org", + "keywords": [ + "cache", + "journal", + "memcached", + "nette", + "sqlite" + ], + "support": { + "issues": "https://github.com/nette/caching/issues", + "source": "https://github.com/nette/caching/tree/v3.1.1" }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/service-contracts", - "version": "v2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "install-path": "../nette/caching" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", - "shasum": "" - }, - "require": { - "php": "^7.2.5", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "time": "2019-11-18T17:27:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + { + "name": "nette/finder", + "version": "v2.5.2", + "version_normalized": "2.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50" }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ] - }, - { - "name": "vlucas/valitron", - "version": "v1.4.7", - "version_normalized": "1.4.7.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/valitron.git", - "reference": "a03072bed1679660200766d134507a30193eaf6d" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/4ad2c298eb8c687dd0e74ae84206a4186eeaed50", + "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ^3.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "time": "2020-01-03T20:35:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "homepage": "https://nette.org", + "keywords": [ + "filesystem", + "glob", + "iterator", + "nette" + ], + "install-path": "../nette/finder" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/valitron/zipball/a03072bed1679660200766d134507a30193eaf6d", - "reference": "a03072bed1679660200766d134507a30193eaf6d", - "shasum": "" + { + "name": "nette/utils", + "version": "v3.2.2", + "version_normalized": "3.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/967cfc4f9a1acd5f1058d76715a424c53343c20c", + "reference": "967cfc4f9a1acd5f1058d76715a424c53343c20c", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.1" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "time": "2021-03-03T22:53:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.2" + }, + "install-path": "../nette/utils" }, - "require": { - "php": ">=5.3.2" + { + "name": "pguardiario/phpuri", + "version": "1.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/monkeysuffrage/phpuri.git", + "reference": "ad0a5ec033fe616cfef55578b9c7f2458be8fbfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/monkeysuffrage/phpuri/zipball/ad0a5ec033fe616cfef55578b9c7f2458be8fbfc", + "reference": "ad0a5ec033fe616cfef55578b9c7f2458be8fbfc", + "shasum": "" + }, + "time": "2015-05-24T09:13:17+00:00", + "type": "project", + "installation-source": "dist", + "autoload": { + "files": [ + "phpuri.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "description": "A php library for converting relative urls to absolute.", + "install-path": "../pguardiario/phpuri" }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5" + { + "name": "phan/phan", + "version": "5.0.0", + "version_normalized": "5.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/phan/phan.git", + "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", + "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4|^2.0|^3.0", + "composer/xdebug-handler": "^1.3.2|^2.0.0", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.4", + "microsoft/tolerant-php-parser": "^0.1.0", + "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", + "php": "^7.2.0|^8.0.0", + "sabre/event": "^5.0.3", + "symfony/console": "^3.2|^4.0|^5.0", + "symfony/polyfill-mbstring": "^1.11.0", + "symfony/polyfill-php80": "^1.20.0", + "tysonandre/var_representation_polyfill": "^0.0.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.0" + }, + "suggest": { + "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.14+ is recommended.", + "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable", + "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", + "ext-var_representation": "Suggested for converting values to strings in issue messages" + }, + "time": "2021-08-01T18:17:28+00:00", + "bin": [ + "phan", + "phan_client", + "tocheckstyle" + ], + "type": "project", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Phan\\": "src/Phan" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + }, + { + "name": "Rasmus Lerdorf" + }, + { + "name": "Andrew S. Morrison" + } + ], + "description": "A static analyzer for PHP", + "keywords": [ + "analyzer", + "php", + "static" + ], + "support": { + "issues": "https://github.com/phan/phan/issues", + "source": "https://github.com/phan/phan/tree/5.0.0" + }, + "install-path": "../phan/phan" }, - "suggest": { - "ext-mbstring": "It can support the multiple bytes string length." + { + "name": "php-extended/php-system", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://gitlab.com/php-extended/php-system.git", + "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0", + "reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0", + "shasum": "" + }, + "time": "2018-06-07T06:03:27+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpExtended\\System\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anastaszor", + "role": "Developer" + } + ], + "description": "A generic way to find informations about the running system", + "homepage": "https://gitlab.com/php-extended/php-system", + "keywords": [ + "operating system", + "os", + "php", + "system" + ], + "install-path": "../php-extended/php-system" }, - "time": "2019-08-29T19:49:43+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Valitron\\": "src/Valitron" - } + { + "name": "php-extended/php-tail", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://gitlab.com/php-extended/php-tail.git", + "reference": "19fbd3a79ccc071954f28296b2c44754335304a0" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0", + "reference": "19fbd3a79ccc071954f28296b2c44754335304a0", + "shasum": "" + }, + "require": { + "php-extended/php-system": "^1.2" + }, + "time": "2018-06-07T06:04:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "PhpExtended\\Tail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anastaszor", + "role": "Developer" + } + ], + "description": "A smart way to tail files depending of the environment", + "homepage": "https://gitlab.com/php-extended/php-tail", + "keywords": [ + "cheat", + "mighty", + "naive", + "php", + "tail" + ], + "install-path": "../php-extended/php-tail" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" - } - ], - "description": "Simple, elegant, stand-alone validation library with NO dependencies", - "homepage": "http://github.com/vlucas/valitron", - "keywords": [ - "valid", - "validation", - "validator" - ] - }, - { - "name": "webmozart/assert", - "version": "1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "time": "2020-06-27T09:03:43+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "install-path": "../phpdocumentor/reflection-common" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", - "shasum": "" + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "version_normalized": "5.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "time": "2020-09-03T19:13:55+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "install-path": "../phpdocumentor/reflection-docblock" }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "time": "2020-09-17T18:55:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "install-path": "../phpdocumentor/type-resolver" }, - "conflict": { - "vimeo/psalm": "<3.9.1" + { + "name": "psr/container", + "version": "1.1.1", + "version_normalized": "1.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "time": "2021-03-05T17:36:06+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "install-path": "../psr/container" }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "install-path": "../psr/http-message" }, - "time": "2020-04-18T12:12:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + { + "name": "psr/log", + "version": "1.1.4", + "version_normalized": "1.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2021-05-03T11:20:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "install-path": "../psr/log" }, - "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" - ] - }, - { - "name": "xemlock/htmlpurifier-html5", - "version": "v0.1.11", - "version_normalized": "0.1.11.0", - "source": { - "type": "git", - "url": "https://github.com/xemlock/htmlpurifier-html5.git", - "reference": "f0d563f9fd4a82a3d759043483f9a94c0d8c2255" + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "install-path": "../ralouphie/getallheaders" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/xemlock/htmlpurifier-html5/zipball/f0d563f9fd4a82a3d759043483f9a94c0d8c2255", - "reference": "f0d563f9fd4a82a3d759043483f9a94c0d8c2255", - "shasum": "" + { + "name": "sabre/event", + "version": "5.1.2", + "version_normalized": "5.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/event.git", + "reference": "c120bec57c17b6251a496efc82b732418b49d50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/event/zipball/c120bec57c17b6251a496efc82b732418b49d50a", + "reference": "c120bec57c17b6251a496efc82b732418b49d50a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.16.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + }, + "time": "2020-10-03T11:02:22+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Sabre\\Event\\": "lib/" + }, + "files": [ + "lib/coroutine.php", + "lib/Loop/functions.php", + "lib/Promise/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "sabre/event is a library for lightweight event-based programming", + "homepage": "http://sabre.io/event/", + "keywords": [ + "EventEmitter", + "async", + "coroutine", + "eventloop", + "events", + "hooks", + "plugin", + "promise", + "reactor", + "signal" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/event/issues", + "source": "https://github.com/fruux/sabre-event" + }, + "install-path": "../sabre/event" }, - "require": { - "ezyang/htmlpurifier": "^4.8", - "php": ">=5.2" + { + "name": "scssphp/scssphp", + "version": "v1.6.0", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/scssphp/scssphp.git", + "reference": "b83594e2323c5d6e80785df3f91b9d1d32aad530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/b83594e2323c5d6e80785df3f91b9d1d32aad530", + "reference": "b83594e2323c5d6e80785df3f91b9d1d32aad530", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "php": ">=5.6.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4", + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.3 || ^9.4", + "sass/sass-spec": "*", + "squizlabs/php_codesniffer": "~3.5", + "symfony/phpunit-bridge": "^5.1", + "twbs/bootstrap": "~5.0", + "twbs/bootstrap4": "4.6.0", + "zurb/foundation": "~6.5" + }, + "suggest": { + "ext-iconv": "Can be used as fallback when ext-mbstring is not available", + "ext-mbstring": "For best performance, mbstring should be installed as it is faster than ext-iconv" + }, + "time": "2021-07-02T16:28:10+00:00", + "bin": [ + "bin/pscss" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "ScssPhp\\ScssPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthon Pang", + "email": "apang@softwaredevelopment.ca", + "homepage": "https://github.com/robocoder" + }, + { + "name": "Cédric Morin", + "email": "cedric@yterium.com", + "homepage": "https://github.com/Cerdic" + } + ], + "description": "scssphp is a compiler for SCSS written in PHP.", + "homepage": "http://scssphp.github.io/scssphp/", + "keywords": [ + "css", + "less", + "sass", + "scss", + "stylesheet" + ], + "support": { + "issues": "https://github.com/scssphp/scssphp/issues", + "source": "https://github.com/scssphp/scssphp/tree/v1.6.0" + }, + "install-path": "../scssphp/scssphp" }, - "require-dev": { - "php-coveralls/php-coveralls": "^1.1|^2.1", - "phpunit/phpunit": ">=4.7 <8.0" + { + "name": "sergeytsalkov/meekrodb", + "version": "v2.4", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/SergeyTsalkov/meekrodb.git", + "reference": "e30c240d54bc81f58c58507a9ed768032eb494a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SergeyTsalkov/meekrodb/zipball/e30c240d54bc81f58c58507a9ed768032eb494a5", + "reference": "e30c240d54bc81f58c58507a9ed768032eb494a5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2021-06-29T04:31:23+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "db.class.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Sergey Tsalkov", + "email": "stsalkov@gmail.com" + } + ], + "description": "The Simple PHP/MySQL Library", + "homepage": "http://www.meekro.com", + "keywords": [ + "database", + "mysql", + "mysqli", + "pdo" + ], + "support": { + "email": "support@meekro.com", + "issues": "https://github.com/SergeyTsalkov/meekrodb/issues", + "source": "https://github.com/SergeyTsalkov/meekrodb/tree/v2.4" + }, + "install-path": "../sergeytsalkov/meekrodb" }, - "time": "2019-08-07T17:19:21+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "library/HTMLPurifier/" - ] + { + "name": "symfony/console", + "version": "v5.3.6", + "version_normalized": "5.3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2", + "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "time": "2021-07-27T19:10:22+00:00", + "type": "library", + "installation-source": "dist", + "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": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.3.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/console" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "xemlock", - "email": "xemlock@gmail.com" - } - ], - "description": "HTML5 element definitions for HTML Purifier", - "keywords": [ - "HTML5", - "Purifier", - "html", - "htmlpurifier", - "security", - "tidy", - "validator", - "xss" - ] - } -] + { + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-03-23T23:28:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/deprecation-contracts" + }, + { + "name": "symfony/lock", + "version": "v4.4.27", + "version_normalized": "4.4.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/lock.git", + "reference": "6ca476d4ac992802f2a4043929f68f1818449486" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/lock/zipball/6ca476d4ac992802f2a4043929f68f1818449486", + "reference": "6ca476d4ac992802f2a4043929f68f1818449486", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/dbal": "<2.6" + }, + "require-dev": { + "doctrine/dbal": "^2.6|^3.0", + "predis/predis": "~1.0" + }, + "time": "2021-07-23T15:41:52+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Lock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Derussé", + "email": "jeremy@derusse.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Creates and manages locks, a mechanism to provide exclusive access to a shared resource", + "homepage": "https://symfony.com", + "keywords": [ + "cas", + "flock", + "locking", + "mutex", + "redlock", + "semaphore" + ], + "support": { + "source": "https://github.com/symfony/lock/tree/v4.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/lock" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "version_normalized": "1.23.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2021-02-19T12:13:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.1", + "version_normalized": "1.23.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2021-05-27T12:26:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-grapheme" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.23.0", + "version_normalized": "1.23.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2021-05-27T09:27:20+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-idn" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "version_normalized": "1.23.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2021-02-19T12:13:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-normalizer" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", + "version_normalized": "1.23.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2021-05-27T12:26:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.23.0", + "version_normalized": "1.23.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-05-27T09:17:38+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php72" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.23.0", + "version_normalized": "1.23.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-02-19T12:13:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php73" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.1", + "version_normalized": "1.23.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-07-28T13:41:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "version_normalized": "2.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "time": "2021-04-01T10:43:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/service-contracts" + }, + { + "name": "symfony/string", + "version": "v5.3.3", + "version_normalized": "5.3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "time": "2021-06-27T11:44:38+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/string" + }, + { + "name": "tysonandre/var_representation_polyfill", + "version": "0.0.2", + "version_normalized": "0.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/TysonAndre/var_representation_polyfill.git", + "reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/3f17999ee1f257319ddc6721dd26ebbc5d175f33", + "reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.2.0|^8.0.0" + }, + "require-dev": { + "phan/phan": "^4.0", + "phpunit/phpunit": "^8.5.0" + }, + "time": "2021-06-26T18:55:02+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "VarRepresentation\\": "src/VarRepresentation" + }, + "files": [ + "src/var_representation.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + } + ], + "description": "Polyfill for var_representation", + "keywords": [ + "var_export", + "var_representation" + ], + "support": { + "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", + "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.0.2" + }, + "install-path": "../tysonandre/var_representation_polyfill" + }, + { + "name": "vlucas/valitron", + "version": "v1.4.10", + "version_normalized": "1.4.10.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/valitron.git", + "reference": "5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/valitron/zipball/5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb", + "reference": "5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": ">=4.8.35" + }, + "suggest": { + "ext-mbstring": "It can support the multiple bytes string length." + }, + "time": "2021-07-08T16:18:03+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Valitron\\": "src/Valitron" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://www.vancelucas.com" + } + ], + "description": "Simple, elegant, stand-alone validation library with NO dependencies", + "homepage": "https://github.com/vlucas/valitron", + "keywords": [ + "valid", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/vlucas/valitron/issues", + "source": "https://github.com/vlucas/valitron/tree/v1.4.10" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/valitron", + "type": "tidelift" + } + ], + "install-path": "../vlucas/valitron" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "time": "2021-03-09T10:59:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "install-path": "../webmozart/assert" + }, + { + "name": "xemlock/htmlpurifier-html5", + "version": "v0.1.11", + "version_normalized": "0.1.11.0", + "source": { + "type": "git", + "url": "https://github.com/xemlock/htmlpurifier-html5.git", + "reference": "f0d563f9fd4a82a3d759043483f9a94c0d8c2255" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/xemlock/htmlpurifier-html5/zipball/f0d563f9fd4a82a3d759043483f9a94c0d8c2255", + "reference": "f0d563f9fd4a82a3d759043483f9a94c0d8c2255", + "shasum": "" + }, + "require": { + "ezyang/htmlpurifier": "^4.8", + "php": ">=5.2" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^1.1|^2.1", + "phpunit/phpunit": ">=4.7 <8.0" + }, + "time": "2019-08-07T17:19:21+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "library/HTMLPurifier/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "xemlock", + "email": "xemlock@gmail.com" + } + ], + "description": "HTML5 element definitions for HTML Purifier", + "keywords": [ + "HTML5", + "Purifier", + "html", + "htmlpurifier", + "security", + "tidy", + "validator", + "xss" + ], + "install-path": "../xemlock/htmlpurifier-html5" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 00000000..08ffb08e --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,489 @@ + + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf', + 'name' => 'sammo-hid/sammo', + ), + 'versions' => + array ( + 'brandonwamboldt/utilphp' => + array ( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'aliases' => + array ( + ), + 'reference' => '36c32efc4f0679c05163464a550f45c8d83fe683', + ), + 'catfan/medoo' => + array ( + 'pretty_version' => 'v1.7.10', + 'version' => '1.7.10.0', + 'aliases' => + array ( + ), + 'reference' => '2d675f73e23f63bbaeb9a8aa33318659a3d3c32f', + ), + 'composer/semver' => + array ( + 'pretty_version' => '3.2.5', + 'version' => '3.2.5.0', + 'aliases' => + array ( + ), + 'reference' => '31f3ea725711245195f62e54ffa402d8ef2fdba9', + ), + 'composer/xdebug-handler' => + array ( + 'pretty_version' => '2.0.2', + 'version' => '2.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '84674dd3a7575ba617f5a76d7e9e29a7d3891339', + ), + 'erusev/parsedown' => + array ( + 'pretty_version' => '1.7.4', + 'version' => '1.7.4.0', + 'aliases' => + array ( + ), + 'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3', + ), + 'erusev/parsedown-extra' => + array ( + 'pretty_version' => '0.8.1', + 'version' => '0.8.1.0', + 'aliases' => + array ( + ), + 'reference' => '91ac3ff98f0cea243bdccc688df43810f044dcef', + ), + 'ezyang/htmlpurifier' => + array ( + 'pretty_version' => 'v4.13.0', + 'version' => '4.13.0.0', + 'aliases' => + array ( + ), + 'reference' => '08e27c97e4c6ed02f37c5b2b20488046c8d90d75', + ), + 'felixfbecker/advanced-json-rpc' => + array ( + 'pretty_version' => 'v3.2.1', + 'version' => '3.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'b5f37dbff9a8ad360ca341f3240dc1c168b45447', + ), + 'firephp/firephp-core' => + array ( + 'pretty_version' => 'v0.4.0', + 'version' => '0.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'fabad0f2503f9577fe8dd2cb1d1c7cd73ed2aacf', + ), + 'guzzlehttp/guzzle' => + array ( + 'pretty_version' => '6.5.5', + 'version' => '6.5.5.0', + 'aliases' => + array ( + ), + 'reference' => '9d4290de1cfd701f38099ef7e183b64b4b7b0c5e', + ), + 'guzzlehttp/promises' => + array ( + 'pretty_version' => '1.4.1', + 'version' => '1.4.1.0', + 'aliases' => + array ( + ), + 'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d', + ), + 'guzzlehttp/psr7' => + array ( + 'pretty_version' => '1.8.2', + 'version' => '1.8.2.0', + 'aliases' => + array ( + ), + 'reference' => 'dc960a912984efb74d0a90222870c72c87f10c91', + ), + 'league/plates' => + array ( + 'pretty_version' => 'v3.4.0', + 'version' => '3.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '6d3ee31199b536a4e003b34a356ca20f6f75496a', + ), + 'microsoft/tolerant-php-parser' => + array ( + 'pretty_version' => 'v0.1.1', + 'version' => '0.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '6a965617cf484355048ac6d2d3de7b6ec93abb16', + ), + 'monolog/monolog' => + array ( + 'pretty_version' => '1.26.1', + 'version' => '1.26.1.0', + 'aliases' => + array ( + ), + 'reference' => 'c6b00f05152ae2c9b04a448f99c7590beb6042f5', + ), + 'netresearch/jsonmapper' => + array ( + 'pretty_version' => 'v4.0.0', + 'version' => '4.0.0.0', + 'aliases' => + array ( + ), + 'reference' => '8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d', + ), + 'nette/caching' => + array ( + 'pretty_version' => 'v3.1.1', + 'version' => '3.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '3e771c589dee414724be473c24ad16dae50c1960', + ), + 'nette/finder' => + array ( + 'pretty_version' => 'v2.5.2', + 'version' => '2.5.2.0', + 'aliases' => + array ( + ), + 'reference' => '4ad2c298eb8c687dd0e74ae84206a4186eeaed50', + ), + 'nette/utils' => + array ( + 'pretty_version' => 'v3.2.2', + 'version' => '3.2.2.0', + 'aliases' => + array ( + ), + 'reference' => '967cfc4f9a1acd5f1058d76715a424c53343c20c', + ), + 'pguardiario/phpuri' => + array ( + 'pretty_version' => '1.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'ad0a5ec033fe616cfef55578b9c7f2458be8fbfc', + ), + 'phan/phan' => + array ( + 'pretty_version' => '5.0.0', + 'version' => '5.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90', + ), + 'php-extended/php-system' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '9e6b3c2009ef56dc123efc43900e40cdf217ace0', + ), + 'php-extended/php-tail' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '19fbd3a79ccc071954f28296b2c44754335304a0', + ), + 'phpdocumentor/reflection-common' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', + ), + 'phpdocumentor/reflection-docblock' => + array ( + 'pretty_version' => '5.2.2', + 'version' => '5.2.2.0', + 'aliases' => + array ( + ), + 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556', + ), + 'phpdocumentor/type-resolver' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0', + ), + 'psr/container' => + array ( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '8622567409010282b7aeebe4bb841fe98b58dcaf', + ), + 'psr/http-message' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + ), + 'psr/http-message-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/log' => + array ( + 'pretty_version' => '1.1.4', + 'version' => '1.1.4.0', + 'aliases' => + array ( + ), + 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', + ), + 'psr/log-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0.0', + 1 => '1.0|2.0', + ), + ), + 'ralouphie/getallheaders' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', + ), + 'sabre/event' => + array ( + 'pretty_version' => '5.1.2', + 'version' => '5.1.2.0', + 'aliases' => + array ( + ), + 'reference' => 'c120bec57c17b6251a496efc82b732418b49d50a', + ), + 'sammo-hid/sammo' => + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '5310c2e7f6f872cbb923ed71b72ef01b8df4aaaf', + ), + 'scssphp/scssphp' => + array ( + 'pretty_version' => 'v1.6.0', + 'version' => '1.6.0.0', + 'aliases' => + array ( + ), + 'reference' => 'b83594e2323c5d6e80785df3f91b9d1d32aad530', + ), + 'sergeytsalkov/meekrodb' => + array ( + 'pretty_version' => 'v2.4', + 'version' => '2.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e30c240d54bc81f58c58507a9ed768032eb494a5', + ), + 'symfony/console' => + array ( + 'pretty_version' => 'v5.3.6', + 'version' => '5.3.6.0', + 'aliases' => + array ( + ), + 'reference' => '51b71afd6d2dc8f5063199357b9880cea8d8bfe2', + ), + 'symfony/deprecation-contracts' => + array ( + 'pretty_version' => 'v2.4.0', + 'version' => '2.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '5f38c8804a9e97d23e0c8d63341088cd8a22d627', + ), + 'symfony/lock' => + array ( + 'pretty_version' => 'v4.4.27', + 'version' => '4.4.27.0', + 'aliases' => + array ( + ), + 'reference' => '6ca476d4ac992802f2a4043929f68f1818449486', + ), + 'symfony/polyfill-ctype' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '46cd95797e9df938fdd2b03693b5fca5e64b01ce', + ), + 'symfony/polyfill-intl-grapheme' => + array ( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'aliases' => + array ( + ), + 'reference' => '16880ba9c5ebe3642d1995ab866db29270b36535', + ), + 'symfony/polyfill-intl-idn' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '65bd267525e82759e7d8c4e8ceea44f398838e65', + ), + 'symfony/polyfill-intl-normalizer' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', + ), + 'symfony/polyfill-mbstring' => + array ( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'aliases' => + array ( + ), + 'reference' => '9174a3d80210dca8daa7f31fec659150bbeabfc6', + ), + 'symfony/polyfill-php72' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976', + ), + 'symfony/polyfill-php73' => + array ( + 'pretty_version' => 'v1.23.0', + 'version' => '1.23.0.0', + 'aliases' => + array ( + ), + 'reference' => 'fba8933c384d6476ab14fb7b8526e5287ca7e010', + ), + 'symfony/polyfill-php80' => + array ( + 'pretty_version' => 'v1.23.1', + 'version' => '1.23.1.0', + 'aliases' => + array ( + ), + 'reference' => '1100343ed1a92e3a38f9ae122fc0eb21602547be', + ), + 'symfony/service-contracts' => + array ( + 'pretty_version' => 'v2.4.0', + 'version' => '2.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb', + ), + 'symfony/string' => + array ( + 'pretty_version' => 'v5.3.3', + 'version' => '5.3.3.0', + 'aliases' => + array ( + ), + 'reference' => 'bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1', + ), + 'tysonandre/var_representation_polyfill' => + array ( + 'pretty_version' => '0.0.2', + 'version' => '0.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '3f17999ee1f257319ddc6721dd26ebbc5d175f33', + ), + 'vlucas/valitron' => + array ( + 'pretty_version' => 'v1.4.10', + 'version' => '1.4.10.0', + 'aliases' => + array ( + ), + 'reference' => '5ebd5d7af82cc0a9d798e816a2ecad63f1b59ceb', + ), + 'webmozart/assert' => + array ( + 'pretty_version' => '1.10.0', + 'version' => '1.10.0.0', + 'aliases' => + array ( + ), + 'reference' => '6964c76c7804814a842473e0c8fd15bab0f18e25', + ), + 'xemlock/htmlpurifier-html5' => + array ( + 'pretty_version' => 'v0.1.11', + 'version' => '0.1.11.0', + 'aliases' => + array ( + ), + 'reference' => 'f0d563f9fd4a82a3d759043483f9a94c0d8c2255', + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 00000000..a8b98d5c --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70205)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/vendor/composer/semver/CHANGELOG.md b/vendor/composer/semver/CHANGELOG.md index ee0c2ef3..67785e4d 100644 --- a/vendor/composer/semver/CHANGELOG.md +++ b/vendor/composer/semver/CHANGELOG.md @@ -3,6 +3,85 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +### [3.2.5] 2021-05-24 + + * Fixed: issue comparing disjunctive MultiConstraints to conjunctive ones (#127) + * Fixed: added complete type information using phpstan annotations + +### [3.2.4] 2020-11-13 + + * Fixed: code clean-up + +### [3.2.3] 2020-11-12 + + * Fixed: constraints in the form of `X || Y, >=Y.1` and other such complex constructs were in some cases being optimized into a more restrictive constraint + +### [3.2.2] 2020-10-14 + + * Fixed: internal code cleanups + +### [3.2.1] 2020-09-27 + + * Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases + * Fixed: normalization of beta0 and such which was dropping the 0 + +### [3.2.0] 2020-09-09 + + * Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0 + * Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience + +### [3.1.0] 2020-09-08 + + * Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 3.0.1 + * Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package + +### [3.0.1] 2020-09-08 + + * Fixed: handling of some invalid -dev versions which were seen as valid + +### [3.0.0] 2020-05-26 + + * Break: Renamed `EmptyConstraint`, replace it with `MatchAllConstraint` + * Break: Unlikely to affect anyone but strictly speaking a breaking change, `*.*` and such variants will not match all `dev-*` versions anymore, only `*` does + * Break: ConstraintInterface is now considered internal/private and not meant to be implemented by third parties anymore + * Added `Intervals` class to check if a constraint is a subsets of another one, and allow compacting complex MultiConstraints into simpler ones + * Added `CompilingMatcher` class to speed up constraint matching against simple Constraint instances + * Added `MatchAllConstraint` and `MatchNoneConstraint` which match everything and nothing + * Added more advanced optimization of contiguous constraints inside MultiConstraint + * Added tentative support for PHP 8 + * Fixed ConstraintInterface::matches to be commutative in all cases + +### [2.0.0] 2020-04-21 + + * Break: `dev-master`, `dev-trunk` and `dev-default` now normalize to `dev-master`, `dev-trunk` and `dev-default` instead of `9999999-dev` in 1.x + * Break: Removed the deprecated `AbstractConstraint` + * Added `getUpperBound` and `getLowerBound` to ConstraintInterface. They return `Composer\Semver\Constraint\Bound` instances + * Added `MultiConstraint::create` to create the most-optimal form of ConstraintInterface from an array of constraint strings + +### [1.7.2] 2020-12-03 + + * Fixed: Allow installing on php 8 + +### [1.7.1] 2020-09-27 + + * Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases + * Fixed: normalization of beta0 and such which was dropping the 0 + +### [1.7.0] 2020-09-09 + + * Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0 + * Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience + +### [1.6.0] 2020-09-08 + + * Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 1.5.2 + * Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package + +### [1.5.2] 2020-09-08 + + * Fixed: handling of some invalid -dev versions which were seen as valid + * Fixed: some doctypes + ### [1.5.1] 2020-01-13 * Fixed: Parsing of aliased version was not validating the alias to be a valid version @@ -66,6 +145,21 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint` * Changed: code style using php-cs-fixer. +[3.2.5]: https://github.com/composer/semver/compare/3.2.4...3.2.5 +[3.2.4]: https://github.com/composer/semver/compare/3.2.3...3.2.4 +[3.2.3]: https://github.com/composer/semver/compare/3.2.2...3.2.3 +[3.2.2]: https://github.com/composer/semver/compare/3.2.1...3.2.2 +[3.2.1]: https://github.com/composer/semver/compare/3.2.0...3.2.1 +[3.2.0]: https://github.com/composer/semver/compare/3.1.0...3.2.0 +[3.1.0]: https://github.com/composer/semver/compare/3.0.1...3.1.0 +[3.0.1]: https://github.com/composer/semver/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/composer/semver/compare/2.0.0...3.0.0 +[2.0.0]: https://github.com/composer/semver/compare/1.5.1...2.0.0 +[1.7.2]: https://github.com/composer/semver/compare/1.7.1...1.7.2 +[1.7.1]: https://github.com/composer/semver/compare/1.7.0...1.7.1 +[1.7.0]: https://github.com/composer/semver/compare/1.6.0...1.7.0 +[1.6.0]: https://github.com/composer/semver/compare/1.5.2...1.6.0 +[1.5.2]: https://github.com/composer/semver/compare/1.5.1...1.5.2 [1.5.1]: https://github.com/composer/semver/compare/1.5.0...1.5.1 [1.5.0]: https://github.com/composer/semver/compare/1.4.2...1.5.0 [1.4.2]: https://github.com/composer/semver/compare/1.4.1...1.4.2 diff --git a/vendor/composer/semver/README.md b/vendor/composer/semver/README.md index 143daa0d..99bc4615 100644 --- a/vendor/composer/semver/README.md +++ b/vendor/composer/semver/README.md @@ -6,7 +6,7 @@ Semver library that offers utilities, version constraint parsing and validation. Originally written as part of [composer/composer](https://github.com/composer/composer), now extracted and made available as a stand-alone library. -[![Build Status](https://travis-ci.org/composer/semver.svg?branch=master)](https://travis-ci.org/composer/semver) +[![Continuous Integration](https://github.com/composer/semver/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/composer/semver/actions) Installation @@ -37,7 +37,7 @@ Basic usage ### Comparator -The `Composer\Semver\Comparator` class provides the following methods for comparing versions: +The [`Composer\Semver\Comparator`](https://github.com/composer/semver/blob/main/src/Comparator.php) class provides the following methods for comparing versions: * greaterThan($v1, $v2) * greaterThanOrEqualTo($v1, $v2) @@ -46,7 +46,7 @@ The `Composer\Semver\Comparator` class provides the following methods for compar * equalTo($v1, $v2) * notEqualTo($v1, $v2) -Each function takes two version strings as arguments. For example: +Each function takes two version strings as arguments and returns a boolean. For example: ```php use Composer\Semver\Comparator; @@ -56,13 +56,41 @@ Comparator::greaterThan('1.25.0', '1.24.0'); // 1.25.0 > 1.24.0 ### Semver -The `Composer\Semver\Semver` class provides the following methods: +The [`Composer\Semver\Semver`](https://github.com/composer/semver/blob/main/src/Semver.php) class provides the following methods: * satisfies($version, $constraints) * satisfiedBy(array $versions, $constraint) * sort($versions) * rsort($versions) +### Intervals + +The [`Composer\Semver\Intervals`](https://github.com/composer/semver/blob/main/src/Intervals.php) static class provides +a few utilities to work with complex constraints or read version intervals from a constraint: + +```php +use Composer\Semver\Intervals; + +// Checks whether $candidate is a subset of $constraint +Intervals::isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint); + +// Checks whether $a and $b have any intersection, equivalent to $a->matches($b) +Intervals::haveIntersections(ConstraintInterface $a, ConstraintInterface $b); + +// Optimizes a complex multi constraint by merging all intervals down to the smallest +// possible multi constraint. The drawbacks are this is not very fast, and the resulting +// multi constraint will have no human readable prettyConstraint configured on it +Intervals::compactConstraint(ConstraintInterface $constraint); + +// Creates an array of numeric intervals and branch constraints representing a given constraint +Intervals::get(ConstraintInterface $constraint); + +// Clears the memoization cache when you are done processing constraints +Intervals::clear() +``` + +See the class docblocks for more details. + License ------- diff --git a/vendor/composer/semver/composer.json b/vendor/composer/semver/composer.json index 981e7d15..030df2e3 100644 --- a/vendor/composer/semver/composer.json +++ b/vendor/composer/semver/composer.json @@ -31,10 +31,11 @@ "issues": "https://github.com/composer/semver/issues" }, "require": { - "php": "^5.3.2 || ^7.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "symfony/phpunit-bridge": "^4.2 || ^5", + "phpstan/phpstan": "^0.12.54" }, "autoload": { "psr-4": { @@ -48,10 +49,11 @@ }, "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.x-dev" } }, "scripts": { - "test": "phpunit" + "test": "SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 vendor/bin/simple-phpunit", + "phpstan": "phpstan analyse" } } diff --git a/vendor/composer/semver/src/Comparator.php b/vendor/composer/semver/src/Comparator.php index a9d758f1..38f483aa 100644 --- a/vendor/composer/semver/src/Comparator.php +++ b/vendor/composer/semver/src/Comparator.php @@ -101,11 +101,13 @@ class Comparator * @param string $version2 * * @return bool + * + * @phpstan-param Constraint::STR_OP_* $operator */ public static function compare($version1, $operator, $version2) { $constraint = new Constraint($operator, $version2); - return $constraint->matches(new Constraint('==', $version1)); + return $constraint->matchSpecific(new Constraint('==', $version1), true); } } diff --git a/vendor/composer/semver/src/CompilingMatcher.php b/vendor/composer/semver/src/CompilingMatcher.php new file mode 100644 index 00000000..f1186670 --- /dev/null +++ b/vendor/composer/semver/src/CompilingMatcher.php @@ -0,0 +1,71 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Composer\Semver; + +use Composer\Semver\Constraint\Constraint; +use Composer\Semver\Constraint\ConstraintInterface; + +/** + * Helper class to evaluate constraint by compiling and reusing the code to evaluate + */ +class CompilingMatcher +{ + /** + * @var array + * @phpstan-var array + */ + private static $compiledCheckerCache = array(); + /** @var bool */ + private static $enabled; + + /** + * @phpstan-var array + */ + private static $transOpInt = array( + Constraint::OP_EQ => Constraint::STR_OP_EQ, + Constraint::OP_LT => Constraint::STR_OP_LT, + Constraint::OP_LE => Constraint::STR_OP_LE, + Constraint::OP_GT => Constraint::STR_OP_GT, + Constraint::OP_GE => Constraint::STR_OP_GE, + Constraint::OP_NE => Constraint::STR_OP_NE, + ); + + /** + * Evaluates the expression: $constraint match $operator $version + * + * @param ConstraintInterface $constraint + * @param int $operator + * @phpstan-param Constraint::OP_* $operator + * @param string $version + * + * @return mixed + */ + public static function match(ConstraintInterface $constraint, $operator, $version) + { + if (self::$enabled === null) { + self::$enabled = !\in_array('eval', explode(',', (string) ini_get('disable_functions')), true); + } + if (!self::$enabled) { + return $constraint->matches(new Constraint(self::$transOpInt[$operator], $version)); + } + + $cacheKey = $operator.$constraint; + if (!isset(self::$compiledCheckerCache[$cacheKey])) { + $code = $constraint->compile($operator); + self::$compiledCheckerCache[$cacheKey] = $function = eval('return function($v, $b){return '.$code.';};'); + } else { + $function = self::$compiledCheckerCache[$cacheKey]; + } + + return $function($version, strpos($version, 'dev-') === 0); + } +} diff --git a/vendor/composer/semver/src/Constraint/AbstractConstraint.php b/vendor/composer/semver/src/Constraint/AbstractConstraint.php deleted file mode 100644 index 7b5270fa..00000000 --- a/vendor/composer/semver/src/Constraint/AbstractConstraint.php +++ /dev/null @@ -1,63 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -trigger_error('The ' . __NAMESPACE__ . '\AbstractConstraint abstract class is deprecated, there is no replacement for it, it will be removed in the next major version.', E_USER_DEPRECATED); - -/** - * Base constraint class. - */ -abstract class AbstractConstraint implements ConstraintInterface -{ - /** @var string */ - protected $prettyString; - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - if ($provider instanceof $this) { - // see note at bottom of this class declaration - return $this->matchSpecific($provider); - } - - // turn matching around to find a match - return $provider->matches($this); - } - - /** - * @param string $prettyString - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * @return string - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return $this->__toString(); - } - - // implementations must implement a method of this format: - // not declared abstract here because type hinting violates parameter coherence (TODO right word?) - // public function matchSpecific( $provider); -} diff --git a/vendor/composer/semver/src/Constraint/Bound.php b/vendor/composer/semver/src/Constraint/Bound.php new file mode 100644 index 00000000..7effb11a --- /dev/null +++ b/vendor/composer/semver/src/Constraint/Bound.php @@ -0,0 +1,122 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Composer\Semver\Constraint; + +class Bound +{ + /** + * @var string + */ + private $version; + + /** + * @var bool + */ + private $isInclusive; + + /** + * @param string $version + * @param bool $isInclusive + */ + public function __construct($version, $isInclusive) + { + $this->version = $version; + $this->isInclusive = $isInclusive; + } + + /** + * @return string + */ + public function getVersion() + { + return $this->version; + } + + /** + * @return bool + */ + public function isInclusive() + { + return $this->isInclusive; + } + + /** + * @return bool + */ + public function isZero() + { + return $this->getVersion() === '0.0.0.0-dev' && $this->isInclusive(); + } + + /** + * @return bool + */ + public function isPositiveInfinity() + { + return $this->getVersion() === PHP_INT_MAX.'.0.0.0' && !$this->isInclusive(); + } + + /** + * Compares a bound to another with a given operator. + * + * @param Bound $other + * @param string $operator + * + * @return bool + */ + public function compareTo(Bound $other, $operator) + { + if (!\in_array($operator, array('<', '>'), true)) { + throw new \InvalidArgumentException('Does not support any other operator other than > or <.'); + } + + // If they are the same it doesn't matter + if ($this == $other) { + return false; + } + + $compareResult = version_compare($this->getVersion(), $other->getVersion()); + + // Not the same version means we don't need to check if the bounds are inclusive or not + if (0 !== $compareResult) { + return (('>' === $operator) ? 1 : -1) === $compareResult; + } + + // Question we're answering here is "am I higher than $other?" + return '>' === $operator ? $other->isInclusive() : !$other->isInclusive(); + } + + public function __toString() + { + return sprintf( + '%s [%s]', + $this->getVersion(), + $this->isInclusive() ? 'inclusive' : 'exclusive' + ); + } + + /** + * @return self + */ + public static function zero() + { + return new Bound('0.0.0.0-dev', true); + } + + /** + * @return self + */ + public static function positiveInfinity() + { + return new Bound(PHP_INT_MAX.'.0.0.0', false); + } +} diff --git a/vendor/composer/semver/src/Constraint/Constraint.php b/vendor/composer/semver/src/Constraint/Constraint.php index c8c90f02..dc394829 100644 --- a/vendor/composer/semver/src/Constraint/Constraint.php +++ b/vendor/composer/semver/src/Constraint/Constraint.php @@ -24,10 +24,21 @@ class Constraint implements ConstraintInterface const OP_GE = 4; const OP_NE = 5; + /* operator string values */ + const STR_OP_EQ = '=='; + const STR_OP_EQ_ALT = '='; + const STR_OP_LT = '<'; + const STR_OP_LE = '<='; + const STR_OP_GT = '>'; + const STR_OP_GE = '>='; + const STR_OP_NE = '!='; + const STR_OP_NE_ALT = '<>'; + /** * Operator to integer translation table. * * @var array + * @phpstan-var array */ private static $transOpStr = array( '=' => self::OP_EQ, @@ -44,6 +55,7 @@ class Constraint implements ConstraintInterface * Integer to operator translation table. * * @var array + * @phpstan-var array */ private static $transOpInt = array( self::OP_EQ => '==', @@ -54,59 +66,23 @@ class Constraint implements ConstraintInterface self::OP_NE => '!=', ); - /** @var string */ + /** + * @var int + * @phpstan-var self::OP_* + */ protected $operator; /** @var string */ protected $version; - /** @var string */ + /** @var string|null */ protected $prettyString; - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - if ($provider instanceof $this) { - return $this->matchSpecific($provider); - } + /** @var Bound */ + protected $lowerBound; - // turn matching around to find a match - return $provider->matches($this); - } - - /** - * @param string $prettyString - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * @return string - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return $this->__toString(); - } - - /** - * Get all supported comparison operators. - * - * @return array - */ - public static function getSupportedOperators() - { - return array_keys(self::$transOpStr); - } + /** @var Bound */ + protected $upperBound; /** * Sets operator and version to compare with. @@ -115,6 +91,8 @@ class Constraint implements ConstraintInterface * @param string $version * * @throws \InvalidArgumentException if invalid operator is given. + * + * @phpstan-param self::STR_OP_* $operator */ public function __construct($operator, $version) { @@ -130,15 +108,94 @@ class Constraint implements ConstraintInterface $this->version = $version; } + /** + * @return string + */ + public function getVersion() + { + return $this->version; + } + + /** + * @return string + * + * @phpstan-return self::STR_OP_* + */ + public function getOperator() + { + return self::$transOpInt[$this->operator]; + } + + /** + * @param ConstraintInterface $provider + * + * @return bool + */ + public function matches(ConstraintInterface $provider) + { + if ($provider instanceof self) { + return $this->matchSpecific($provider); + } + + // turn matching around to find a match + return $provider->matches($this); + } + + /** + * {@inheritDoc} + */ + public function setPrettyString($prettyString) + { + $this->prettyString = $prettyString; + } + + /** + * {@inheritDoc} + */ + public function getPrettyString() + { + if ($this->prettyString) { + return $this->prettyString; + } + + return $this->__toString(); + } + + /** + * Get all supported comparison operators. + * + * @return array + * + * @phpstan-return list + */ + public static function getSupportedOperators() + { + return array_keys(self::$transOpStr); + } + + /** + * @param string $operator + * @return int + * + * @phpstan-param self::STR_OP_* $operator + * @phpstan-return self::OP_* + */ + public static function getOperatorConstant($operator) + { + return self::$transOpStr[$operator]; + } + /** * @param string $a * @param string $b * @param string $operator - * @param bool $compareBranches + * @param bool $compareBranches * * @throws \InvalidArgumentException if invalid operator is given. * * @return bool + * + * @phpstan-param self::STR_OP_* $operator */ public function versionCompare($a, $b, $operator, $compareBranches = false) { @@ -150,8 +207,12 @@ class Constraint implements ConstraintInterface )); } - $aIsBranch = 'dev-' === substr($a, 0, 4); - $bIsBranch = 'dev-' === substr($b, 0, 4); + $aIsBranch = strpos($a, 'dev-') === 0; + $bIsBranch = strpos($b, 'dev-') === 0; + + if ($operator === '!=' && ($aIsBranch || $bIsBranch)) { + return $a !== $b; + } if ($aIsBranch && $bIsBranch) { return $operator === '==' && $a === $b; @@ -162,12 +223,91 @@ class Constraint implements ConstraintInterface return false; } - return version_compare($a, $b, $operator); + return \version_compare($a, $b, $operator); + } + + /** + * {@inheritDoc} + */ + public function compile($otherOperator) + { + if (strpos($this->version, 'dev-') === 0) { + if (self::OP_EQ === $this->operator) { + if (self::OP_EQ === $otherOperator) { + return sprintf('$b && $v === %s', \var_export($this->version, true)); + } + if (self::OP_NE === $otherOperator) { + return sprintf('!$b || $v !== %s', \var_export($this->version, true)); + } + return 'false'; + } + + if (self::OP_NE === $this->operator) { + if (self::OP_EQ === $otherOperator) { + return sprintf('!$b || $v !== %s', \var_export($this->version, true)); + } + if (self::OP_NE === $otherOperator) { + return 'true'; + } + return '!$b'; + } + + return 'false'; + } + + if (self::OP_EQ === $this->operator) { + if (self::OP_EQ === $otherOperator) { + return sprintf('\version_compare($v, %s, \'==\')', \var_export($this->version, true)); + } + if (self::OP_NE === $otherOperator) { + return sprintf('$b || \version_compare($v, %s, \'!=\')', \var_export($this->version, true)); + } + + return sprintf('!$b && \version_compare(%s, $v, \'%s\')', \var_export($this->version, true), self::$transOpInt[$otherOperator]); + } + + if (self::OP_NE === $this->operator) { + if (self::OP_EQ === $otherOperator) { + return sprintf('$b || (!$b && \version_compare($v, %s, \'!=\'))', \var_export($this->version, true)); + } + + if (self::OP_NE === $otherOperator) { + return 'true'; + } + return '!$b'; + } + + if (self::OP_LT === $this->operator || self::OP_LE === $this->operator) { + if (self::OP_LT === $otherOperator || self::OP_LE === $otherOperator) { + return '!$b'; + } + } else { // $this->operator must be self::OP_GT || self::OP_GE here + if (self::OP_GT === $otherOperator || self::OP_GE === $otherOperator) { + return '!$b'; + } + } + + if (self::OP_NE === $otherOperator) { + return 'true'; + } + + $codeComparison = sprintf('\version_compare($v, %s, \'%s\')', \var_export($this->version, true), self::$transOpInt[$this->operator]); + if ($this->operator === self::OP_LE) { + if ($otherOperator === self::OP_GT) { + return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison; + } + } elseif ($this->operator === self::OP_GE) { + if ($otherOperator === self::OP_LT) { + return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison; + } + } + + return sprintf('!$b && %s', $codeComparison); } /** * @param Constraint $provider - * @param bool $compareBranches + * @param bool $compareBranches * * @return bool */ @@ -184,22 +324,37 @@ class Constraint implements ConstraintInterface // '!=' operator is match when other operator is not '==' operator or version is not match // these kinds of comparisons always have a solution if ($isNonEqualOp || $isProviderNonEqualOp) { - return (!$isEqualOp && !$isProviderEqualOp) - || $this->versionCompare($provider->version, $this->version, '!=', $compareBranches); + if ($isNonEqualOp && !$isProviderNonEqualOp && !$isProviderEqualOp && strpos($provider->version, 'dev-') === 0) { + return false; + } + + if ($isProviderNonEqualOp && !$isNonEqualOp && !$isEqualOp && strpos($this->version, 'dev-') === 0) { + return false; + } + + if (!$isEqualOp && !$isProviderEqualOp) { + return true; + } + return $this->versionCompare($provider->version, $this->version, '!=', $compareBranches); } // an example for the condition is <= 2.0 & < 1.0 // these kinds of comparisons always have a solution if ($this->operator !== self::OP_EQ && $noEqualOp === $providerNoEqualOp) { - return true; + return !(strpos($this->version, 'dev-') === 0 || strpos($provider->version, 'dev-') === 0); } - if ($this->versionCompare($provider->version, $this->version, self::$transOpInt[$this->operator], $compareBranches)) { + $version1 = $isEqualOp ? $this->version : $provider->version; + $version2 = $isEqualOp ? $provider->version : $this->version; + $operator = $isEqualOp ? $provider->operator : $this->operator; + + if ($this->versionCompare($version1, $version2, self::$transOpInt[$operator], $compareBranches)) { // special case, e.g. require >= 1.0 and provide < 1.0 // 1.0 >= 1.0 but 1.0 is outside of the provided interval - return !($provider->version === $this->version - && self::$transOpInt[$provider->operator] === $providerNoEqualOp - && self::$transOpInt[$this->operator] !== $noEqualOp); + + return !(self::$transOpInt[$provider->operator] === $providerNoEqualOp + && self::$transOpInt[$this->operator] !== $noEqualOp + && \version_compare($provider->version, $this->version, '==')); } return false; @@ -212,4 +367,69 @@ class Constraint implements ConstraintInterface { return self::$transOpInt[$this->operator] . ' ' . $this->version; } + + /** + * {@inheritDoc} + */ + public function getLowerBound() + { + $this->extractBounds(); + + return $this->lowerBound; + } + + /** + * {@inheritDoc} + */ + public function getUpperBound() + { + $this->extractBounds(); + + return $this->upperBound; + } + + /** + * @return void + */ + private function extractBounds() + { + if (null !== $this->lowerBound) { + return; + } + + // Branches + if (strpos($this->version, 'dev-') === 0) { + $this->lowerBound = Bound::zero(); + $this->upperBound = Bound::positiveInfinity(); + + return; + } + + switch ($this->operator) { + case self::OP_EQ: + $this->lowerBound = new Bound($this->version, true); + $this->upperBound = new Bound($this->version, true); + break; + case self::OP_LT: + $this->lowerBound = Bound::zero(); + $this->upperBound = new Bound($this->version, false); + break; + case self::OP_LE: + $this->lowerBound = Bound::zero(); + $this->upperBound = new Bound($this->version, true); + break; + case self::OP_GT: + $this->lowerBound = new Bound($this->version, false); + $this->upperBound = Bound::positiveInfinity(); + break; + case self::OP_GE: + $this->lowerBound = new Bound($this->version, true); + $this->upperBound = Bound::positiveInfinity(); + break; + case self::OP_NE: + $this->lowerBound = Bound::zero(); + $this->upperBound = Bound::positiveInfinity(); + break; + } + } } diff --git a/vendor/composer/semver/src/Constraint/ConstraintInterface.php b/vendor/composer/semver/src/Constraint/ConstraintInterface.php index 7cb13b6a..389b935b 100644 --- a/vendor/composer/semver/src/Constraint/ConstraintInterface.php +++ b/vendor/composer/semver/src/Constraint/ConstraintInterface.php @@ -11,20 +11,63 @@ namespace Composer\Semver\Constraint; +/** + * DO NOT IMPLEMENT this interface. It is only meant for usage as a type hint + * in libraries relying on composer/semver but creating your own constraint class + * that implements this interface is not a supported use case and will cause the + * composer/semver components to return unexpected results. + */ interface ConstraintInterface { /** + * Checks whether the given constraint intersects in any way with this constraint + * * @param ConstraintInterface $provider * * @return bool */ public function matches(ConstraintInterface $provider); + /** + * Provides a compiled version of the constraint for the given operator + * The compiled version must be a PHP expression. + * Executor of compile version must provide 2 variables: + * - $v = the string version to compare with + * - $b = whether or not the version is a non-comparable branch (starts with "dev-") + * + * @see Constraint::OP_* for the list of available operators. + * @example return '!$b && version_compare($v, '1.0', '>')'; + * + * @param int $otherOperator one Constraint::OP_* + * + * @return string + * + * @phpstan-param Constraint::OP_* $otherOperator + */ + public function compile($otherOperator); + + /** + * @return Bound + */ + public function getUpperBound(); + + /** + * @return Bound + */ + public function getLowerBound(); + /** * @return string */ public function getPrettyString(); + /** + * @param string|null $prettyString + * + * @return void + */ + public function setPrettyString($prettyString); + /** * @return string */ diff --git a/vendor/composer/semver/src/Constraint/EmptyConstraint.php b/vendor/composer/semver/src/Constraint/MatchAllConstraint.php similarity index 61% rename from vendor/composer/semver/src/Constraint/EmptyConstraint.php rename to vendor/composer/semver/src/Constraint/MatchAllConstraint.php index cb89cd26..5e51af95 100644 --- a/vendor/composer/semver/src/Constraint/EmptyConstraint.php +++ b/vendor/composer/semver/src/Constraint/MatchAllConstraint.php @@ -13,10 +13,12 @@ namespace Composer\Semver\Constraint; /** * Defines the absence of a constraint. + * + * This constraint matches everything. */ -class EmptyConstraint implements ConstraintInterface +class MatchAllConstraint implements ConstraintInterface { - /** @var string */ + /** @var string|null */ protected $prettyString; /** @@ -30,7 +32,15 @@ class EmptyConstraint implements ConstraintInterface } /** - * @param $prettyString + * {@inheritDoc} + */ + public function compile($otherOperator) + { + return 'true'; + } + + /** + * {@inheritDoc} */ public function setPrettyString($prettyString) { @@ -38,7 +48,7 @@ class EmptyConstraint implements ConstraintInterface } /** - * @return string + * {@inheritDoc} */ public function getPrettyString() { @@ -50,10 +60,26 @@ class EmptyConstraint implements ConstraintInterface } /** - * @return string + * {@inheritDoc} */ public function __toString() { - return '[]'; + return '*'; + } + + /** + * {@inheritDoc} + */ + public function getUpperBound() + { + return Bound::positiveInfinity(); + } + + /** + * {@inheritDoc} + */ + public function getLowerBound() + { + return Bound::zero(); } } diff --git a/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php b/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php new file mode 100644 index 00000000..dadcf622 --- /dev/null +++ b/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php @@ -0,0 +1,83 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Composer\Semver\Constraint; + +/** + * Blackhole of constraints, nothing escapes it + */ +class MatchNoneConstraint implements ConstraintInterface +{ + /** @var string|null */ + protected $prettyString; + + /** + * @param ConstraintInterface $provider + * + * @return bool + */ + public function matches(ConstraintInterface $provider) + { + return false; + } + + /** + * {@inheritDoc} + */ + public function compile($otherOperator) + { + return 'false'; + } + + /** + * {@inheritDoc} + */ + public function setPrettyString($prettyString) + { + $this->prettyString = $prettyString; + } + + /** + * {@inheritDoc} + */ + public function getPrettyString() + { + if ($this->prettyString) { + return $this->prettyString; + } + + return (string) $this; + } + + /** + * {@inheritDoc} + */ + public function __toString() + { + return '[]'; + } + + /** + * {@inheritDoc} + */ + public function getUpperBound() + { + return new Bound('0.0.0.0-dev', false); + } + + /** + * {@inheritDoc} + */ + public function getLowerBound() + { + return new Bound('0.0.0.0-dev', false); + } +} diff --git a/vendor/composer/semver/src/Constraint/MultiConstraint.php b/vendor/composer/semver/src/Constraint/MultiConstraint.php index f8a60e4e..1f4c0061 100644 --- a/vendor/composer/semver/src/Constraint/MultiConstraint.php +++ b/vendor/composer/semver/src/Constraint/MultiConstraint.php @@ -16,21 +16,43 @@ namespace Composer\Semver\Constraint; */ class MultiConstraint implements ConstraintInterface { - /** @var ConstraintInterface[] */ + /** + * @var ConstraintInterface[] + * @phpstan-var non-empty-array + */ protected $constraints; - /** @var string */ + /** @var string|null */ protected $prettyString; + /** @var string|null */ + protected $string; + /** @var bool */ protected $conjunctive; + /** @var Bound|null */ + protected $lowerBound; + + /** @var Bound|null */ + protected $upperBound; + /** * @param ConstraintInterface[] $constraints A set of constraints - * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive + * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive + * + * @throws \InvalidArgumentException If less than 2 constraints are passed */ public function __construct(array $constraints, $conjunctive = true) { + if (\count($constraints) < 2) { + throw new \InvalidArgumentException( + 'Must provide at least two constraints for a MultiConstraint. Use '. + 'the regular Constraint class for one constraint only or MatchAllConstraint for none. You may use '. + 'MultiConstraint::create() which optimizes and handles those cases automatically.' + ); + } + $this->constraints = $constraints; $this->conjunctive = $conjunctive; } @@ -59,6 +81,34 @@ class MultiConstraint implements ConstraintInterface return !$this->conjunctive; } + /** + * {@inheritDoc} + */ + public function compile($otherOperator) + { + $parts = array(); + foreach ($this->constraints as $constraint) { + $code = $constraint->compile($otherOperator); + if ($code === 'true') { + if (!$this->conjunctive) { + return 'true'; + } + } elseif ($code === 'false') { + if ($this->conjunctive) { + return 'false'; + } + } else { + $parts[] = '('.$code.')'; + } + } + + if (!$parts) { + return $this->conjunctive ? 'true' : 'false'; + } + + return $this->conjunctive ? implode('&&', $parts) : implode('||', $parts); + } + /** * @param ConstraintInterface $provider * @@ -68,7 +118,7 @@ class MultiConstraint implements ConstraintInterface { if (false === $this->conjunctive) { foreach ($this->constraints as $constraint) { - if ($constraint->matches($provider)) { + if ($provider->matches($constraint)) { return true; } } @@ -76,8 +126,15 @@ class MultiConstraint implements ConstraintInterface return false; } + // when matching a conjunctive and a disjunctive multi constraint we have to iterate over the disjunctive one + // otherwise we'd return true if different parts of the disjunctive constraint match the conjunctive one + // which would lead to incorrect results, e.g. [>1 and <2] would match [<1 or >2] although they do not intersect + if ($provider instanceof MultiConstraint && $provider->isDisjunctive()) { + return $provider->matches($this); + } + foreach ($this->constraints as $constraint) { - if (!$constraint->matches($provider)) { + if (!$provider->matches($constraint)) { return false; } } @@ -86,7 +143,7 @@ class MultiConstraint implements ConstraintInterface } /** - * @param string $prettyString + * {@inheritDoc} */ public function setPrettyString($prettyString) { @@ -94,7 +151,7 @@ class MultiConstraint implements ConstraintInterface } /** - * @return string + * {@inheritDoc} */ public function getPrettyString() { @@ -106,15 +163,163 @@ class MultiConstraint implements ConstraintInterface } /** - * @return string + * {@inheritDoc} */ public function __toString() { + if ($this->string !== null) { + return $this->string; + } + $constraints = array(); foreach ($this->constraints as $constraint) { $constraints[] = (string) $constraint; } - return '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']'; + return $this->string = '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']'; + } + + /** + * {@inheritDoc} + */ + public function getLowerBound() + { + $this->extractBounds(); + + if (null === $this->lowerBound) { + throw new \LogicException('extractBounds should have populated the lowerBound property'); + } + + return $this->lowerBound; + } + + /** + * {@inheritDoc} + */ + public function getUpperBound() + { + $this->extractBounds(); + + if (null === $this->upperBound) { + throw new \LogicException('extractBounds should have populated the upperBound property'); + } + + return $this->upperBound; + } + + /** + * Tries to optimize the constraints as much as possible, meaning + * reducing/collapsing congruent constraints etc. + * Does not necessarily return a MultiConstraint instance if + * things can be reduced to a simple constraint + * + * @param ConstraintInterface[] $constraints A set of constraints + * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive + * + * @return ConstraintInterface + */ + public static function create(array $constraints, $conjunctive = true) + { + if (0 === \count($constraints)) { + return new MatchAllConstraint(); + } + + if (1 === \count($constraints)) { + return $constraints[0]; + } + + $optimized = self::optimizeConstraints($constraints, $conjunctive); + if ($optimized !== null) { + list($constraints, $conjunctive) = $optimized; + if (\count($constraints) === 1) { + return $constraints[0]; + } + } + + return new self($constraints, $conjunctive); + } + + /** + * @param ConstraintInterface[] $constraints + * @param bool $conjunctive + * @return ?array + * + * @phpstan-return array{0: list, 1: bool}|null + */ + private static function optimizeConstraints(array $constraints, $conjunctive) + { + // parse the two OR groups and if they are contiguous we collapse + // them into one constraint + // [>= 1 < 2] || [>= 2 < 3] || [>= 3 < 4] => [>= 1 < 4] + if (!$conjunctive) { + $left = $constraints[0]; + $mergedConstraints = array(); + $optimized = false; + for ($i = 1, $l = \count($constraints); $i < $l; $i++) { + $right = $constraints[$i]; + if ( + $left instanceof self + && $left->conjunctive + && $right instanceof self + && $right->conjunctive + && \count($left->constraints) === 2 + && \count($right->constraints) === 2 + && ($left0 = (string) $left->constraints[0]) + && $left0[0] === '>' && $left0[1] === '=' + && ($left1 = (string) $left->constraints[1]) + && $left1[0] === '<' + && ($right0 = (string) $right->constraints[0]) + && $right0[0] === '>' && $right0[1] === '=' + && ($right1 = (string) $right->constraints[1]) + && $right1[0] === '<' + && substr($left1, 2) === substr($right0, 3) + ) { + $optimized = true; + $left = new MultiConstraint( + array( + $left->constraints[0], + $right->constraints[1], + ), + true); + } else { + $mergedConstraints[] = $left; + $left = $right; + } + } + if ($optimized) { + $mergedConstraints[] = $left; + return array($mergedConstraints, false); + } + } + + // TODO: Here's the place to put more optimizations + + return null; + } + + /** + * @return void + */ + private function extractBounds() + { + if (null !== $this->lowerBound) { + return; + } + + foreach ($this->constraints as $constraint) { + if (null === $this->lowerBound || null === $this->upperBound) { + $this->lowerBound = $constraint->getLowerBound(); + $this->upperBound = $constraint->getUpperBound(); + continue; + } + + if ($constraint->getLowerBound()->compareTo($this->lowerBound, $this->isConjunctive() ? '>' : '<')) { + $this->lowerBound = $constraint->getLowerBound(); + } + + if ($constraint->getUpperBound()->compareTo($this->upperBound, $this->isConjunctive() ? '<' : '>')) { + $this->upperBound = $constraint->getUpperBound(); + } + } } } diff --git a/vendor/composer/semver/src/Interval.php b/vendor/composer/semver/src/Interval.php new file mode 100644 index 00000000..43d5a4f5 --- /dev/null +++ b/vendor/composer/semver/src/Interval.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Composer\Semver; + +use Composer\Semver\Constraint\Constraint; + +class Interval +{ + /** @var Constraint */ + private $start; + /** @var Constraint */ + private $end; + + public function __construct(Constraint $start, Constraint $end) + { + $this->start = $start; + $this->end = $end; + } + + /** + * @return Constraint + */ + public function getStart() + { + return $this->start; + } + + /** + * @return Constraint + */ + public function getEnd() + { + return $this->end; + } + + /** + * @return Constraint + */ + public static function fromZero() + { + static $zero; + + if (null === $zero) { + $zero = new Constraint('>=', '0.0.0.0-dev'); + } + + return $zero; + } + + /** + * @return Constraint + */ + public static function untilPositiveInfinity() + { + static $positiveInfinity; + + if (null === $positiveInfinity) { + $positiveInfinity = new Constraint('<', PHP_INT_MAX.'.0.0.0'); + } + + return $positiveInfinity; + } + + /** + * @return self + */ + public static function any() + { + return new self(self::fromZero(), self::untilPositiveInfinity()); + } + + /** + * @return array{'names': string[], 'exclude': bool} + */ + public static function anyDev() + { + // any == exclude nothing + return array('names' => array(), 'exclude' => true); + } + + /** + * @return array{'names': string[], 'exclude': bool} + */ + public static function noDev() + { + // nothing == no names included + return array('names' => array(), 'exclude' => false); + } +} diff --git a/vendor/composer/semver/src/Intervals.php b/vendor/composer/semver/src/Intervals.php new file mode 100644 index 00000000..f2e4c8c8 --- /dev/null +++ b/vendor/composer/semver/src/Intervals.php @@ -0,0 +1,478 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Composer\Semver; + +use Composer\Semver\Constraint\Constraint; +use Composer\Semver\Constraint\ConstraintInterface; +use Composer\Semver\Constraint\MatchAllConstraint; +use Composer\Semver\Constraint\MatchNoneConstraint; +use Composer\Semver\Constraint\MultiConstraint; + +/** + * Helper class generating intervals from constraints + * + * This contains utilities for: + * + * - compacting an existing constraint which can be used to combine several into one + * by creating a MultiConstraint out of the many constraints you have. + * + * - checking whether one subset is a subset of another. + * + * Note: You should call clear to free memoization memory usage when you are done using this class + */ +class Intervals +{ + /** + * @phpstan-var array + */ + private static $intervalsCache = array(); + + /** + * @phpstan-var array + */ + private static $opSortOrder = array( + '>=' => -3, + '<' => -2, + '>' => 2, + '<=' => 3, + ); + + /** + * Clears the memoization cache once you are done + * + * @return void + */ + public static function clear() + { + self::$intervalsCache = array(); + } + + /** + * Checks whether $candidate is a subset of $constraint + * + * @return bool + */ + public static function isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint) + { + if ($constraint instanceof MatchAllConstraint) { + return true; + } + + if ($candidate instanceof MatchNoneConstraint || $constraint instanceof MatchNoneConstraint) { + return false; + } + + $intersectionIntervals = self::get(new MultiConstraint(array($candidate, $constraint), true)); + $candidateIntervals = self::get($candidate); + if (\count($intersectionIntervals['numeric']) !== \count($candidateIntervals['numeric'])) { + return false; + } + + foreach ($intersectionIntervals['numeric'] as $index => $interval) { + if (!isset($candidateIntervals['numeric'][$index])) { + return false; + } + + if ((string) $candidateIntervals['numeric'][$index]->getStart() !== (string) $interval->getStart()) { + return false; + } + + if ((string) $candidateIntervals['numeric'][$index]->getEnd() !== (string) $interval->getEnd()) { + return false; + } + } + + if ($intersectionIntervals['branches']['exclude'] !== $candidateIntervals['branches']['exclude']) { + return false; + } + if (\count($intersectionIntervals['branches']['names']) !== \count($candidateIntervals['branches']['names'])) { + return false; + } + foreach ($intersectionIntervals['branches']['names'] as $index => $name) { + if ($name !== $candidateIntervals['branches']['names'][$index]) { + return false; + } + } + + return true; + } + + /** + * Checks whether $a and $b have any intersection, equivalent to $a->matches($b) + * + * @return bool + */ + public static function haveIntersections(ConstraintInterface $a, ConstraintInterface $b) + { + if ($a instanceof MatchAllConstraint || $b instanceof MatchAllConstraint) { + return true; + } + + if ($a instanceof MatchNoneConstraint || $b instanceof MatchNoneConstraint) { + return false; + } + + $intersectionIntervals = self::generateIntervals(new MultiConstraint(array($a, $b), true), true); + + return \count($intersectionIntervals['numeric']) > 0 || $intersectionIntervals['branches']['exclude'] || \count($intersectionIntervals['branches']['names']) > 0; + } + + /** + * Attempts to optimize a MultiConstraint + * + * When merging MultiConstraints together they can get very large, this will + * compact it by looking at the real intervals covered by all the constraints + * and then creates a new constraint containing only the smallest amount of rules + * to match the same intervals. + * + * @return ConstraintInterface + */ + public static function compactConstraint(ConstraintInterface $constraint) + { + if (!$constraint instanceof MultiConstraint) { + return $constraint; + } + + $intervals = self::generateIntervals($constraint); + $constraints = array(); + $hasNumericMatchAll = false; + + if (\count($intervals['numeric']) === 1 && (string) $intervals['numeric'][0]->getStart() === (string) Interval::fromZero() && (string) $intervals['numeric'][0]->getEnd() === (string) Interval::untilPositiveInfinity()) { + $constraints[] = $intervals['numeric'][0]->getStart(); + $hasNumericMatchAll = true; + } else { + $unEqualConstraints = array(); + for ($i = 0, $count = \count($intervals['numeric']); $i < $count; $i++) { + $interval = $intervals['numeric'][$i]; + + // if current interval ends with < N and next interval begins with > N we can swap this out for != N + // but this needs to happen as a conjunctive expression together with the start of the current interval + // and end of next interval, so [>=M, N, [>=M, !=N, getEnd()->getOperator() === '<' && $i+1 < $count) { + $nextInterval = $intervals['numeric'][$i+1]; + if ($interval->getEnd()->getVersion() === $nextInterval->getStart()->getVersion() && $nextInterval->getStart()->getOperator() === '>') { + // only add a start if we didn't already do so, can be skipped if we're looking at second + // interval in [>=M, N, P, =M, !=N] already and we only want to add !=P right now + if (\count($unEqualConstraints) === 0 && (string) $interval->getStart() !== (string) Interval::fromZero()) { + $unEqualConstraints[] = $interval->getStart(); + } + $unEqualConstraints[] = new Constraint('!=', $interval->getEnd()->getVersion()); + continue; + } + } + + if (\count($unEqualConstraints) > 0) { + // this is where the end of the following interval of a != constraint is added as explained above + if ((string) $interval->getEnd() !== (string) Interval::untilPositiveInfinity()) { + $unEqualConstraints[] = $interval->getEnd(); + } + + // count is 1 if entire constraint is just one != expression + if (\count($unEqualConstraints) > 1) { + $constraints[] = new MultiConstraint($unEqualConstraints, true); + } else { + $constraints[] = $unEqualConstraints[0]; + } + + $unEqualConstraints = array(); + continue; + } + + // convert back >= x - <= x intervals to == x + if ($interval->getStart()->getVersion() === $interval->getEnd()->getVersion() && $interval->getStart()->getOperator() === '>=' && $interval->getEnd()->getOperator() === '<=') { + $constraints[] = new Constraint('==', $interval->getStart()->getVersion()); + continue; + } + + if ((string) $interval->getStart() === (string) Interval::fromZero()) { + $constraints[] = $interval->getEnd(); + } elseif ((string) $interval->getEnd() === (string) Interval::untilPositiveInfinity()) { + $constraints[] = $interval->getStart(); + } else { + $constraints[] = new MultiConstraint(array($interval->getStart(), $interval->getEnd()), true); + } + } + } + + $devConstraints = array(); + + if (0 === \count($intervals['branches']['names'])) { + if ($intervals['branches']['exclude']) { + if ($hasNumericMatchAll) { + return new MatchAllConstraint; + } + // otherwise constraint should contain a != operator and already cover this + } + } else { + foreach ($intervals['branches']['names'] as $branchName) { + if ($intervals['branches']['exclude']) { + $devConstraints[] = new Constraint('!=', $branchName); + } else { + $devConstraints[] = new Constraint('==', $branchName); + } + } + + // excluded branches, e.g. != dev-foo are conjunctive with the interval, so + // > 2.0 != dev-foo must return a conjunctive constraint + if ($intervals['branches']['exclude']) { + if (\count($constraints) > 1) { + return new MultiConstraint(array_merge( + array(new MultiConstraint($constraints, false)), + $devConstraints + ), true); + } + + if (\count($constraints) === 1 && (string)$constraints[0] === (string)Interval::fromZero()) { + if (\count($devConstraints) > 1) { + return new MultiConstraint($devConstraints, true); + } + return $devConstraints[0]; + } + + return new MultiConstraint(array_merge($constraints, $devConstraints), true); + } + + // otherwise devConstraints contains a list of == operators for branches which are disjunctive with the + // rest of the constraint + $constraints = array_merge($constraints, $devConstraints); + } + + if (\count($constraints) > 1) { + return new MultiConstraint($constraints, false); + } + + if (\count($constraints) === 1) { + return $constraints[0]; + } + + return new MatchNoneConstraint; + } + + /** + * Creates an array of numeric intervals and branch constraints representing a given constraint + * + * if the returned numeric array is empty it means the constraint matches nothing in the numeric range (0 - +inf) + * if the returned branches array is empty it means no dev-* versions are matched + * if a constraint matches all possible dev-* versions, branches will contain Interval::anyDev() + * + * @return array + * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} + */ + public static function get(ConstraintInterface $constraint) + { + $key = (string) $constraint; + + if (!isset(self::$intervalsCache[$key])) { + self::$intervalsCache[$key] = self::generateIntervals($constraint); + } + + return self::$intervalsCache[$key]; + } + + /** + * @param bool $stopOnFirstValidInterval + * + * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} + */ + private static function generateIntervals(ConstraintInterface $constraint, $stopOnFirstValidInterval = false) + { + if ($constraint instanceof MatchAllConstraint) { + return array('numeric' => array(new Interval(Interval::fromZero(), Interval::untilPositiveInfinity())), 'branches' => Interval::anyDev()); + } + + if ($constraint instanceof MatchNoneConstraint) { + return array('numeric' => array(), 'branches' => array('names' => array(), 'exclude' => false)); + } + + if ($constraint instanceof Constraint) { + return self::generateSingleConstraintIntervals($constraint); + } + + if (!$constraint instanceof MultiConstraint) { + throw new \UnexpectedValueException('The constraint passed in should be an MatchAllConstraint, Constraint or MultiConstraint instance, got '.\get_class($constraint).'.'); + } + + $constraints = $constraint->getConstraints(); + + $numericGroups = array(); + $constraintBranches = array(); + foreach ($constraints as $c) { + $res = self::get($c); + $numericGroups[] = $res['numeric']; + $constraintBranches[] = $res['branches']; + } + + if ($constraint->isDisjunctive()) { + $branches = Interval::noDev(); + foreach ($constraintBranches as $b) { + if ($b['exclude']) { + if ($branches['exclude']) { + // disjunctive constraint, so only exclude what's excluded in all constraints + // !=a,!=b || !=b,!=c => !=b + $branches['names'] = array_intersect($branches['names'], $b['names']); + } else { + // disjunctive constraint so exclude all names which are not explicitly included in the alternative + // (==b || ==c) || !=a,!=b => !=a + $branches['exclude'] = true; + $branches['names'] = array_diff($b['names'], $branches['names']); + } + } else { + if ($branches['exclude']) { + // disjunctive constraint so exclude all names which are not explicitly included in the alternative + // !=a,!=b || (==b || ==c) => !=a + $branches['names'] = array_diff($branches['names'], $b['names']); + } else { + // disjunctive constraint, so just add all the other branches + // (==a || ==b) || ==c => ==a || ==b || ==c + $branches['names'] = array_merge($branches['names'], $b['names']); + } + } + } + } else { + $branches = Interval::anyDev(); + foreach ($constraintBranches as $b) { + if ($b['exclude']) { + if ($branches['exclude']) { + // conjunctive, so just add all branch names to be excluded + // !=a && !=b => !=a,!=b + $branches['names'] = array_merge($branches['names'], $b['names']); + } else { + // conjunctive, so only keep included names which are not excluded + // (==a||==c) && !=a,!=b => ==c + $branches['names'] = array_diff($branches['names'], $b['names']); + } + } else { + if ($branches['exclude']) { + // conjunctive, so only keep included names which are not excluded + // !=a,!=b && (==a||==c) => ==c + $branches['names'] = array_diff($b['names'], $branches['names']); + $branches['exclude'] = false; + } else { + // conjunctive, so only keep names that are included in both + // (==a||==b) && (==a||==c) => ==a + $branches['names'] = array_intersect($branches['names'], $b['names']); + } + } + } + } + + $branches['names'] = array_unique($branches['names']); + + if (\count($numericGroups) === 1) { + return array('numeric' => $numericGroups[0], 'branches' => $branches); + } + + $borders = array(); + foreach ($numericGroups as $group) { + foreach ($group as $interval) { + $borders[] = array('version' => $interval->getStart()->getVersion(), 'operator' => $interval->getStart()->getOperator(), 'side' => 'start'); + $borders[] = array('version' => $interval->getEnd()->getVersion(), 'operator' => $interval->getEnd()->getOperator(), 'side' => 'end'); + } + } + + $opSortOrder = self::$opSortOrder; + usort($borders, function ($a, $b) use ($opSortOrder) { + $order = version_compare($a['version'], $b['version']); + if ($order === 0) { + return $opSortOrder[$a['operator']] - $opSortOrder[$b['operator']]; + } + + return $order; + }); + + $activeIntervals = 0; + $intervals = array(); + $index = 0; + $activationThreshold = $constraint->isConjunctive() ? \count($numericGroups) : 1; + $start = null; + foreach ($borders as $border) { + if ($border['side'] === 'start') { + $activeIntervals++; + } else { + $activeIntervals--; + } + if (!$start && $activeIntervals >= $activationThreshold) { + $start = new Constraint($border['operator'], $border['version']); + } elseif ($start && $activeIntervals < $activationThreshold) { + // filter out invalid intervals like > x - <= x, or >= x - < x + if ( + version_compare($start->getVersion(), $border['version'], '=') + && ( + ($start->getOperator() === '>' && $border['operator'] === '<=') + || ($start->getOperator() === '>=' && $border['operator'] === '<') + ) + ) { + unset($intervals[$index]); + } else { + $intervals[$index] = new Interval($start, new Constraint($border['operator'], $border['version'])); + $index++; + + if ($stopOnFirstValidInterval) { + break; + } + } + + $start = null; + } + } + + return array('numeric' => $intervals, 'branches' => $branches); + } + + /** + * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}}} + */ + private static function generateSingleConstraintIntervals(Constraint $constraint) + { + $op = $constraint->getOperator(); + + // handle branch constraints first + if (strpos($constraint->getVersion(), 'dev-') === 0) { + $intervals = array(); + $branches = array('names' => array(), 'exclude' => false); + + // != dev-foo means any numeric version may match, we treat >/< like != they are not really defined for branches + if ($op === '!=') { + $intervals[] = new Interval(Interval::fromZero(), Interval::untilPositiveInfinity()); + $branches = array('names' => array($constraint->getVersion()), 'exclude' => true); + } elseif ($op === '==') { + $branches['names'][] = $constraint->getVersion(); + } + + return array( + 'numeric' => $intervals, + 'branches' => $branches, + ); + } + + if ($op[0] === '>') { // > & >= + return array('numeric' => array(new Interval($constraint, Interval::untilPositiveInfinity())), 'branches' => Interval::noDev()); + } + if ($op[0] === '<') { // < & <= + return array('numeric' => array(new Interval(Interval::fromZero(), $constraint)), 'branches' => Interval::noDev()); + } + if ($op === '!=') { + // convert !=x to intervals of 0 - x - +inf + dev* + return array('numeric' => array( + new Interval(Interval::fromZero(), new Constraint('<', $constraint->getVersion())), + new Interval(new Constraint('>', $constraint->getVersion()), Interval::untilPositiveInfinity()), + ), 'branches' => Interval::anyDev()); + } + + // convert ==x to an interval of >=x - <=x + return array('numeric' => array( + new Interval(new Constraint('>=', $constraint->getVersion()), new Constraint('<=', $constraint->getVersion())), + ), 'branches' => Interval::noDev()); + } +} diff --git a/vendor/composer/semver/src/Semver.php b/vendor/composer/semver/src/Semver.php index 3ab2b68a..4d6de3c2 100644 --- a/vendor/composer/semver/src/Semver.php +++ b/vendor/composer/semver/src/Semver.php @@ -45,10 +45,10 @@ class Semver /** * Return all versions that satisfy given constraints. * - * @param array $versions - * @param string $constraints + * @param string[] $versions + * @param string $constraints * - * @return array + * @return string[] */ public static function satisfiedBy(array $versions, $constraints) { @@ -62,9 +62,9 @@ class Semver /** * Sort given array of versions. * - * @param array $versions + * @param string[] $versions * - * @return array + * @return string[] */ public static function sort(array $versions) { @@ -74,9 +74,9 @@ class Semver /** * Sort given array of versions in reverse. * - * @param array $versions + * @param string[] $versions * - * @return array + * @return string[] */ public static function rsort(array $versions) { @@ -84,10 +84,10 @@ class Semver } /** - * @param array $versions - * @param int $direction + * @param string[] $versions + * @param int $direction * - * @return array + * @return string[] */ private static function usort(array $versions, $direction) { @@ -101,7 +101,9 @@ class Semver // Normalize outside of usort() scope for minor performance increase. // Creates an array of arrays: [[normalized, key], ...] foreach ($versions as $key => $version) { - $normalized[] = array($versionParser->normalize($version), $key); + $normalizedVersion = $versionParser->normalize($version); + $normalizedVersion = $versionParser->normalizeDefaultBranch($normalizedVersion); + $normalized[] = array($normalizedVersion, $key); } usort($normalized, function (array $left, array $right) use ($direction) { diff --git a/vendor/composer/semver/src/VersionParser.php b/vendor/composer/semver/src/VersionParser.php index 9a7d0dbb..ee4420ae 100644 --- a/vendor/composer/semver/src/VersionParser.php +++ b/vendor/composer/semver/src/VersionParser.php @@ -12,7 +12,7 @@ namespace Composer\Semver; use Composer\Semver\Constraint\ConstraintInterface; -use Composer\Semver\Constraint\EmptyConstraint; +use Composer\Semver\Constraint\MatchAllConstraint; use Composer\Semver\Constraint\MultiConstraint; use Composer\Semver\Constraint\Constraint; @@ -38,8 +38,8 @@ class VersionParser */ private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)((?:[.-]?\d+)*+)?)?([.-]?dev)?'; - /** @var array */ - private static $stabilities = array('stable', 'RC', 'beta', 'alpha', 'dev'); + /** @var string */ + private static $stabilitiesRegex = 'stable|RC|beta|alpha|dev'; /** * Returns the stability of a version. @@ -50,7 +50,7 @@ class VersionParser */ public static function parseStability($version) { - $version = preg_replace('{#.+$}i', '', $version); + $version = (string) preg_replace('{#.+$}', '', $version); if (strpos($version, 'dev-') === 0 || '-dev' === substr($version, -4)) { return 'dev'; @@ -102,21 +102,24 @@ class VersionParser public function normalize($version, $fullVersion = null) { $version = trim($version); + $origVersion = $version; if (null === $fullVersion) { $fullVersion = $version; } // strip off aliasing if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) { - // verify that the alias is a version without constraint - $this->normalize($match[2]); - $version = $match[1]; } - // match master-like branches - if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) { - return '9999999-dev'; + // strip off stability flag + if (preg_match('{@(?:' . self::$stabilitiesRegex . ')$}i', $version, $match)) { + $version = substr($version, 0, strlen($version) - strlen($match[0])); + } + + // normalize master/trunk/default branches to dev-name for BC with 1.x as these used to be valid constraints + if (\in_array($version, array('master', 'trunk', 'default'), true)) { + $version = 'dev-' . $version; } // if requirement is branch-like, use full name @@ -148,7 +151,7 @@ class VersionParser if ('stable' === $matches[$index]) { return $version; } - $version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? ltrim($matches[$index + 1], '.-') : ''); + $version .= '-' . $this->expandStability($matches[$index]) . (isset($matches[$index + 1]) && '' !== $matches[$index + 1] ? ltrim($matches[$index + 1], '.-') : ''); } if (!empty($matches[$index + 2])) { @@ -161,19 +164,25 @@ class VersionParser // match dev branches if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) { try { - return $this->normalizeBranch($match[1]); + $normalized = $this->normalizeBranch($match[1]); + // a branch ending with -dev is only valid if it is numeric + // if it gets prefixed with dev- it means the branch name should + // have had a dev- prefix already when passed to normalize + if (strpos($normalized, 'dev-') === false) { + return $normalized; + } } catch (\Exception $e) { } } $extraMessage = ''; - if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) { + if (preg_match('{ +as +' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))?$}', $fullVersion)) { $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version'; - } elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) { + } elseif (preg_match('{^' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))? +as +}', $fullVersion)) { $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-'; } - throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage); + throw new \UnexpectedValueException('Invalid version string "' . $origVersion . '"' . $extraMessage); } /** @@ -203,10 +212,6 @@ class VersionParser { $name = trim($name); - if (in_array($name, array('master', 'trunk', 'default'))) { - return $this->normalize($name); - } - if (preg_match('{^v?(\d++)(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?$}i', $name, $matches)) { $version = ''; for ($i = 1; $i < 5; ++$i) { @@ -219,6 +224,22 @@ class VersionParser return 'dev-' . $name; } + /** + * Normalizes a default branch name (i.e. master on git) to 9999999-dev. + * + * @param string $name + * + * @return string + */ + public function normalizeDefaultBranch($name) + { + if ($name === 'dev-master' || $name === 'dev-default' || $name === 'dev-trunk') { + return '9999999-dev'; + } + + return $name; + } + /** * Parses a constraint string into MultiConstraint and/or Constraint objects. * @@ -230,20 +251,18 @@ class VersionParser { $prettyConstraint = $constraints; - if (preg_match('{^([^,\s]*?)@(' . implode('|', self::$stabilities) . ')$}i', $constraints, $match)) { - $constraints = empty($match[1]) ? '*' : $match[1]; - } - - if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraints, $match)) { - $constraints = $match[1]; - } - $orConstraints = preg_split('{\s*\|\|?\s*}', trim($constraints)); + if (false === $orConstraints) { + throw new \RuntimeException('Failed to preg_split string: '.$constraints); + } $orGroups = array(); foreach ($orConstraints as $constraints) { $andConstraints = preg_split('{(?< ,]) *(? 1) { + if (false === $andConstraints) { + throw new \RuntimeException('Failed to preg_split string: '.$constraints); + } + if (\count($andConstraints) > 1) { $constraintObjects = array(); foreach ($andConstraints as $constraint) { foreach ($this->parseConstraint($constraint) as $parsedConstraint) { @@ -254,7 +273,7 @@ class VersionParser $constraintObjects = $this->parseConstraint($andConstraints[0]); } - if (1 === count($constraintObjects)) { + if (1 === \count($constraintObjects)) { $constraint = $constraintObjects[0]; } else { $constraint = new MultiConstraint($constraintObjects); @@ -263,28 +282,7 @@ class VersionParser $orGroups[] = $constraint; } - if (1 === count($orGroups)) { - $constraint = $orGroups[0]; - } elseif (2 === count($orGroups) - // parse the two OR groups and if they are contiguous we collapse - // them into one constraint - && $orGroups[0] instanceof MultiConstraint - && $orGroups[1] instanceof MultiConstraint - && 2 === count($orGroups[0]->getConstraints()) - && 2 === count($orGroups[1]->getConstraints()) - && ($a = (string) $orGroups[0]) - && strpos($a, '[>=') === 0 && (false !== ($posA = strpos($a, '<', 4))) - && ($b = (string) $orGroups[1]) - && strpos($b, '[>=') === 0 && (false !== ($posB = strpos($b, '<', 4))) - && substr($a, $posA + 2, -1) === substr($b, 4, $posB - 5) - ) { - $constraint = new MultiConstraint(array( - new Constraint('>=', substr($a, 4, $posA - 5)), - new Constraint('<', substr($b, $posB + 2, -1)), - )); - } else { - $constraint = new MultiConstraint($orGroups, false); - } + $constraint = MultiConstraint::create($orGroups, false); $constraint->setPrettyString($prettyConstraint); @@ -297,21 +295,38 @@ class VersionParser * @throws \UnexpectedValueException * * @return array + * + * @phpstan-return non-empty-array */ private function parseConstraint($constraint) { - if (preg_match('{^([^,\s]+?)@(' . implode('|', self::$stabilities) . ')$}i', $constraint, $match)) { + // strip off aliasing + if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $constraint, $match)) { $constraint = $match[1]; + } + + // strip @stability flags, and keep it for later use + if (preg_match('{^([^,\s]*?)@(' . self::$stabilitiesRegex . ')$}i', $constraint, $match)) { + $constraint = '' !== $match[1] ? $match[1] : '*'; if ($match[2] !== 'stable') { $stabilityModifier = $match[2]; } } - if (preg_match('{^v?[xX*](\.[xX*])*$}i', $constraint)) { - return array(new EmptyConstraint()); + // get rid of #refs as those are used by composer only + if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraint, $match)) { + $constraint = $match[1]; } - $versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?' . self::$modifierRegex . '(?:\+[^\s]+)?'; + if (preg_match('{^(v)?[xX*](\.[xX*])*$}i', $constraint, $match)) { + if (!empty($match[1]) || !empty($match[2])) { + return array(new Constraint('>=', '0.0.0.0-dev')); + } + + return array(new MatchAllConstraint()); + } + + $versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?(?:' . self::$modifierRegex . '|\.([xX*][.-]?dev))(?:\+[^\s]+)?'; // Tilde Range // @@ -337,9 +352,14 @@ class VersionParser $position = 1; } + // when matching 2.x-dev or 3.0.x-dev we have to shift the second or third number, despite no second/third number matching above + if (!empty($matches[8])) { + $position++; + } + // Calculate the stability suffix $stabilitySuffix = ''; - if (empty($matches[5]) && empty($matches[7])) { + if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) { $stabilitySuffix .= '-dev'; } @@ -375,7 +395,7 @@ class VersionParser // Calculate the stability suffix $stabilitySuffix = ''; - if (empty($matches[5]) && empty($matches[7])) { + if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) { $stabilitySuffix .= '-dev'; } @@ -428,7 +448,7 @@ class VersionParser if (preg_match('{^(?P' . $versionRegex . ') +- +(?P' . $versionRegex . ')($)}i', $constraint, $matches)) { // Calculate the stability suffix $lowStabilitySuffix = ''; - if (empty($matches[6]) && empty($matches[8])) { + if (empty($matches[6]) && empty($matches[8]) && empty($matches[9])) { $lowStabilitySuffix = '-dev'; } @@ -439,12 +459,16 @@ class VersionParser return ($x === 0 || $x === '0') ? false : empty($x); }; - if ((!$empty($matches[11]) && !$empty($matches[12])) || !empty($matches[14]) || !empty($matches[16])) { + if ((!$empty($matches[12]) && !$empty($matches[13])) || !empty($matches[15]) || !empty($matches[17]) || !empty($matches[18])) { $highVersion = $this->normalize($matches['to']); $upperBound = new Constraint('<=', $highVersion); } else { - $highMatch = array('', $matches[10], $matches[11], $matches[12], $matches[13]); - $highVersion = $this->manipulateVersionString($highMatch, $empty($matches[11]) ? 1 : 2, 1) . '-dev'; + $highMatch = array('', $matches[11], $matches[12], $matches[13], $matches[14]); + + // validate to version + $this->normalize($matches['to']); + + $highVersion = $this->manipulateVersionString($highMatch, $empty($matches[12]) ? 1 : 2, 1) . '-dev'; $upperBound = new Constraint('<', $highVersion); } @@ -457,11 +481,23 @@ class VersionParser // Basic Comparators if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) { try { - $version = $this->normalize($matches[2]); + try { + $version = $this->normalize($matches[2]); + } catch (\UnexpectedValueException $e) { + // recover from an invalid constraint like foobar-dev which should be dev-foobar + // except if the constraint uses a known operator, in which case it must be a parse error + if (substr($matches[2], -4) === '-dev' && preg_match('{^[0-9a-zA-Z-./]+$}', $matches[2])) { + $version = $this->normalize('dev-'.substr($matches[2], 0, -4)); + } else { + throw $e; + } + } - if (!empty($stabilityModifier) && self::parseStability($version) === 'stable') { + $op = $matches[1] ?: '='; + + if ($op !== '==' && $op !== '=' && !empty($stabilityModifier) && self::parseStability($version) === 'stable') { $version .= '-' . $stabilityModifier; - } elseif ('<' === $matches[1] || '>=' === $matches[1]) { + } elseif ('<' === $op || '>=' === $op) { if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) { if (strpos($matches[2], 'dev-') !== 0) { $version .= '-dev'; @@ -487,14 +523,16 @@ class VersionParser * * Support function for {@link parseConstraint()} * - * @param array $matches Array with version parts in array indexes 1,2,3,4 - * @param int $position 1,2,3,4 - which segment of the version to increment/decrement - * @param int $increment - * @param string $pad The string to pad version parts after $position + * @param array $matches Array with version parts in array indexes 1,2,3,4 + * @param int $position 1,2,3,4 - which segment of the version to increment/decrement + * @param int $increment + * @param string $pad The string to pad version parts after $position * - * @return string The new version + * @return string|null The new version + * + * @phpstan-param string[] $matches */ - private function manipulateVersionString($matches, $position, $increment = 0, $pad = '0') + private function manipulateVersionString(array $matches, $position, $increment = 0, $pad = '0') { for ($i = 4; $i > 0; --$i) { if ($i > $position) { diff --git a/vendor/composer/xdebug-handler/CHANGELOG.md b/vendor/composer/xdebug-handler/CHANGELOG.md index 7f54539b..d7d46f9c 100644 --- a/vendor/composer/xdebug-handler/CHANGELOG.md +++ b/vendor/composer/xdebug-handler/CHANGELOG.md @@ -1,5 +1,39 @@ ## [Unreleased] +## [2.0.2] - 2021-07-31 + * Added: support for `xdebug_info('mode')` in Xdebug 3.1. + * Added: support for Psr\Log versions 2 and 3. + * Fixed: remove ini directives from non-cli HOST/PATH sections. + +## [2.0.1] - 2021-05-05 + * Fixed: don't restart if the cwd is a UNC path and cmd.exe will be invoked. + +## [2.0.0] - 2021-04-09 + * Break: this is a major release, see [UPGRADE.md](UPGRADE.md) for more information. + * Break: removed optional `$colorOption` constructor param and passthru fallback. + * Break: renamed `requiresRestart` param from `$isLoaded` to `$default`. + * Break: changed `restart` param `$command` from a string to an array. + * Added: support for Xdebug3 to only restart if Xdebug is not running with `xdebug.mode=off`. + * Added: `isXdebugActive()` method to determine if Xdebug is still running in the restart. + * Added: feature to bypass the shell in PHP-7.4+ by giving `proc_open` an array of arguments. + * Added: Process utility class to the API. + +## [1.4.6] - 2021-03-25 + * Fixed: fail restart if `proc_open` has been disabled in `disable_functions`. + * Fixed: enable Windows CTRL event handling in the restarted process. + +## [1.4.5] - 2020-11-13 + * Fixed: use `proc_open` when available for correct FD forwarding to the restarted process. + +## [1.4.4] - 2020-10-24 + * Fixed: exception if 'pcntl_signal' is disabled. + +## [1.4.3] - 2020-08-19 + * Fixed: restore SIGINT to default handler in restarted process if no other handler exists. + +## [1.4.2] - 2020-06-04 + * Fixed: ignore SIGINTs to let the restarted process handle them. + ## [1.4.1] - 2020-03-01 * Fixed: restart fails if an ini file is empty. @@ -57,7 +91,15 @@ * Break: the following class was renamed: - `Composer\XdebugHandler` -> `Composer\XdebugHandler\XdebugHandler` -[Unreleased]: https://github.com/composer/xdebug-handler/compare/1.4.1...HEAD +[Unreleased]: https://github.com/composer/xdebug-handler/compare/2.0.2...HEAD +[2.0.2]: https://github.com/composer/xdebug-handler/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/composer/xdebug-handler/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/composer/xdebug-handler/compare/1.4.6...2.0.0 +[1.4.6]: https://github.com/composer/xdebug-handler/compare/1.4.5...1.4.6 +[1.4.5]: https://github.com/composer/xdebug-handler/compare/1.4.4...1.4.5 +[1.4.4]: https://github.com/composer/xdebug-handler/compare/1.4.3...1.4.4 +[1.4.3]: https://github.com/composer/xdebug-handler/compare/1.4.2...1.4.3 +[1.4.2]: https://github.com/composer/xdebug-handler/compare/1.4.1...1.4.2 [1.4.1]: https://github.com/composer/xdebug-handler/compare/1.4.0...1.4.1 [1.4.0]: https://github.com/composer/xdebug-handler/compare/1.3.3...1.4.0 [1.3.3]: https://github.com/composer/xdebug-handler/compare/1.3.2...1.3.3 diff --git a/vendor/composer/xdebug-handler/README.md b/vendor/composer/xdebug-handler/README.md index 43d38d96..020cf486 100644 --- a/vendor/composer/xdebug-handler/README.md +++ b/vendor/composer/xdebug-handler/README.md @@ -1,16 +1,19 @@ # composer/xdebug-handler [![packagist](https://img.shields.io/packagist/v/composer/xdebug-handler.svg)](https://packagist.org/packages/composer/xdebug-handler) -[![linux build](https://img.shields.io/travis/composer/xdebug-handler/master.svg?label=linux+build)](https://travis-ci.org/composer/xdebug-handler) -[![windows build](https://img.shields.io/appveyor/ci/Seldaek/xdebug-handler/master.svg?label=windows+build)](https://ci.appveyor.com/project/Seldaek/xdebug-handler) +[![Continuous Integration](https://github.com/composer/xdebug-handler/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/composer/xdebug-handler/actions) ![license](https://img.shields.io/github/license/composer/xdebug-handler.svg) ![php](https://img.shields.io/packagist/php-v/composer/xdebug-handler.svg?colorB=8892BF&label=php) -Restart a CLI process without loading the Xdebug extension. +Restart a CLI process without loading the Xdebug extension, unless `xdebug.mode=off`. Originally written as part of [composer/composer](https://github.com/composer/composer), now extracted and made available as a stand-alone library. +### Version 2 + +Support added for Xdebug3. See [UPGRADE](UPGRADE.md) for more information. + ## Installation Install the latest version with: @@ -32,21 +35,11 @@ $xdebug->check(); unset($xdebug); ``` -The constructor takes two parameters: - -#### _$envPrefix_ -This is used to create distinct environment variables and is upper-cased and prepended to default base values. The above example enables the use of: +The constructor takes a single parameter, `$envPrefix`, which is upper-cased and prepended to default base values to create two distinct environment variables. The above example enables the use of: - `MYAPP_ALLOW_XDEBUG=1` to override automatic restart and allow Xdebug - `MYAPP_ORIGINAL_INIS` to obtain ini file locations in a restarted process -#### _$colorOption_ -This optional value is added to the restart command-line and is needed to force color output in a piped child process. Only long-options are supported, for example `--ansi` or `--colors=always` etc. - -If the original command-line contains an argument that pattern matches this value (for example `--no-ansi`, `--colors=never`) then _$colorOption_ is ignored. - -If the pattern match ends with `=auto` (for example `--colors=auto`), the argument is replaced by _$colorOption_. Otherwise it is added at either the end of the command-line, or preceding the first double-dash `--` delimiter. - ## Advanced Usage * [How it works](#how-it-works) @@ -63,12 +56,18 @@ A temporary ini file is created from the loaded (and scanned) ini files, with an * `MYAPP_ALLOW_XDEBUG` is set with internal data to flag and use in the restart. * The command-line and environment are [configured](#process-configuration) for the restart. -* The application is restarted in a new process using `passthru`. +* The application is restarted in a new process. * The restart settings are stored in the environment. * `MYAPP_ALLOW_XDEBUG` is unset. * The application runs and exits. * The main process exits with the exit code from the restarted process. +#### Signal handling +From PHP 7.1 with the pcntl extension loaded, asynchronous signal handling is automatically enabled. `SIGINT` is set to `SIG_IGN` in the parent +process and restored to `SIG_DFL` in the restarted process (if no other handler has been set). + +From PHP 7.4 on Windows, `CTRL+C` and `CTRL+BREAK` handling is ignored in the parent process and automatically enabled in the restarted process. + ### Limitations There are a few things to be aware of when running inside a restarted process. @@ -124,6 +123,9 @@ $version = XdebugHandler::getSkippedVersion(); # $version: '2.6.0' (for example), or an empty string ``` +#### _isXdebugActive()_ +Returns true if Xdebug is loaded and is running in an active mode (if it supports modes). Returns false if Xdebug is not loaded, or it is running with `xdebug.mode=off`. + ### Setter methods These methods implement a fluent interface and must be called before the main `check()` method. @@ -232,15 +234,16 @@ The following environment settings can be used to troubleshoot unexpected behavi ### Extending the library The API is defined by classes and their accessible elements that are not annotated as @internal. The main class has two protected methods that can be overridden to provide additional functionality: -#### _requiresRestart($isLoaded)_ -By default the process will restart if Xdebug is loaded. Extending this method allows an application to decide, by returning a boolean (or equivalent) value. It is only called if `MYAPP_ALLOW_XDEBUG` is empty, so it will not be called in the restarted process (where this variable contains internal data), or if the restart has been overridden. +#### _requiresRestart($default)_ +By default the process will restart if Xdebug is loaded and not running with `xdebug.mode=off`. Extending this method allows an application to decide, by returning a boolean (or equivalent) value. +It is only called if `MYAPP_ALLOW_XDEBUG` is empty, so it will not be called in the restarted process (where this variable contains internal data), or if the restart has been overridden. Note that the [setMainScript()](#setmainscriptscript) and [setPersistent()](#setpersistent) setters can be used here, if required. #### _restart($command)_ An application can extend this to modify the temporary ini file, its location given in the `tmpIni` property. New settings can be safely appended to the end of the data, which is `PHP_EOL` terminated. -Note that the `$command` parameter is the escaped command-line string that will be used for the new process and must be treated accordingly. +The `$command` parameter is an array of unescaped command-line arguments that will be used for the new process. Remember to finish with `parent::restart($command)`. @@ -259,7 +262,7 @@ class MyRestarter extends XdebugHandler { private $required; - protected function requiresRestart($isLoaded) + protected function requiresRestart($default) { if (Command::isHelp()) { # No need to disable Xdebug for this @@ -267,7 +270,7 @@ class MyRestarter extends XdebugHandler } $this->required = (bool) ini_get('phar.readonly'); - return $isLoaded || $this->required; + return $this->required || $default; } protected function restart($command) diff --git a/vendor/composer/xdebug-handler/UPGRADE.md b/vendor/composer/xdebug-handler/UPGRADE.md new file mode 100644 index 00000000..3d62e17a --- /dev/null +++ b/vendor/composer/xdebug-handler/UPGRADE.md @@ -0,0 +1,30 @@ +## Upgrading from 1.x + +The default behaviour has changed from always restarting if Xdebug is loaded, to only restarting if +Xdebug is _active_. This has been introduced to support Xdebug3 +[modes](https://xdebug.org/docs/all_settings#mode). Xdebug is considered active if it is loaded, and +for Xdebug3, if it is running in a mode other than `xdebug.mode=off`. + +* Break: removed optional `$colorOption` constructor param and passthru fallback. + + Just use `new XdebugHandler('myapp')` to instantiate the class and color support will be +detectable in the restarted process. + +* Added: `isXdebugActive()` method to determine if Xdebug is still running in the restart. + + Returns true if Xdebug is loaded and is running in an active mode (if it supports modes). +Returns false if Xdebug is not loaded, or it is running with `xdebug.mode=off`. + +### Extending classes + +* Break: renamed `requiresRestart` param from `$isLoaded` to `$default`. + + This reflects the new default behaviour which is to restart only if Xdebug is active. + +* Break: changed `restart` param `$command` from a string to an array. + + Only important if you modified the string. `$command` is now an array of unescaped arguments. + +* Added: Process utility class to the API. + + This class was previously annotated as @internal and has been refactored due to recent changes. diff --git a/vendor/composer/xdebug-handler/composer.json b/vendor/composer/xdebug-handler/composer.json index ea40a2f2..75cb1f74 100644 --- a/vendor/composer/xdebug-handler/composer.json +++ b/vendor/composer/xdebug-handler/composer.json @@ -19,10 +19,11 @@ }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + "symfony/phpunit-bridge": "^4.2 || ^5", + "phpstan/phpstan": "^0.12.55" }, "autoload": { "psr-4": { @@ -35,6 +36,7 @@ } }, "scripts": { - "test": "phpunit" + "test": "vendor/bin/simple-phpunit", + "phpstan": "vendor/bin/phpstan analyse" } } diff --git a/vendor/composer/xdebug-handler/src/PhpConfig.php b/vendor/composer/xdebug-handler/src/PhpConfig.php index 5535eca5..c61cd7cf 100644 --- a/vendor/composer/xdebug-handler/src/PhpConfig.php +++ b/vendor/composer/xdebug-handler/src/PhpConfig.php @@ -49,8 +49,8 @@ class PhpConfig public function usePersistent() { if ($data = $this->getDataAndReset()) { - Process::setEnv('PHPRC', $data['tmpIni']); - Process::setEnv('PHP_INI_SCAN_DIR', ''); + $this->updateEnv('PHPRC', $data['tmpIni']); + $this->updateEnv('PHP_INI_SCAN_DIR', ''); } return array(); @@ -64,10 +64,21 @@ class PhpConfig private function getDataAndReset() { if ($data = XdebugHandler::getRestartSettings()) { - Process::setEnv('PHPRC', $data['phprc']); - Process::setEnv('PHP_INI_SCAN_DIR', $data['scanDir']); + $this->updateEnv('PHPRC', $data['phprc']); + $this->updateEnv('PHP_INI_SCAN_DIR', $data['scanDir']); } return $data; } + + /** + * Updates a restart settings value in the environment + * + * @param string $name + * @param string|false $value + */ + private function updateEnv($name, $value) + { + Process::setEnv($name, false !== $value ? $value : null); + } } diff --git a/vendor/composer/xdebug-handler/src/Process.php b/vendor/composer/xdebug-handler/src/Process.php index eb2ad2b4..c60dff10 100644 --- a/vendor/composer/xdebug-handler/src/Process.php +++ b/vendor/composer/xdebug-handler/src/Process.php @@ -12,59 +12,12 @@ namespace Composer\XdebugHandler; /** - * Provides utility functions to prepare a child process command-line and set - * environment variables in that process. + * Process utility functions * * @author John Stevenson - * @internal */ class Process { - /** - * Returns an array of parameters, including a color option if required - * - * A color option is needed because child process output is piped. - * - * @param array $args The script parameters - * @param string $colorOption The long option to force color output - * - * @return array - */ - public static function addColorOption(array $args, $colorOption) - { - if (!$colorOption - || in_array($colorOption, $args) - || !preg_match('/^--([a-z]+$)|(^--[a-z]+=)/', $colorOption, $matches)) { - return $args; - } - - if (isset($matches[2])) { - // Handle --color(s)= options - if (false !== ($index = array_search($matches[2].'auto', $args))) { - $args[$index] = $colorOption; - return $args; - } elseif (preg_grep('/^'.$matches[2].'/', $args)) { - return $args; - } - } elseif (in_array('--no-'.$matches[1], $args)) { - return $args; - } - - // Check for NO_COLOR variable (https://no-color.org/) - if (false !== getenv('NO_COLOR')) { - return $args; - } - - if (false !== ($index = array_search('--', $args))) { - // Position option before double-dash delimiter - array_splice($args, $index, 0, $colorOption); - } else { - $args[] = $colorOption; - } - - return $args; - } - /** * Escapes a string to be used as a shell argument. * @@ -109,53 +62,33 @@ class Process } /** - * Returns true if the output stream supports colors + * Escapes an array of arguments that make up a shell command * - * This is tricky on Windows, because Cygwin, Msys2 etc emulate pseudo - * terminals via named pipes, so we can only check the environment. + * @param array $args Argument list, with the module name first * - * @param mixed $output A valid CLI output stream - * - * @return bool + * @return string The escaped command line */ - public static function supportsColor($output) + public static function escapeShellCommand(array $args) { - if ('Hyper' === getenv('TERM_PROGRAM')) { - return true; + $cmd = self::escape(array_shift($args), true, true); + foreach ($args as $arg) { + $cmd .= ' '.self::escape($arg); } - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - return (function_exists('sapi_windows_vt100_support') - && sapi_windows_vt100_support($output)) - || false !== getenv('ANSICON') - || 'ON' === getenv('ConEmuANSI') - || 'xterm' === getenv('TERM'); - } - - if (function_exists('stream_isatty')) { - return stream_isatty($output); - } - - if (function_exists('posix_isatty')) { - return posix_isatty($output); - } - - $stat = fstat($output); - // Check if formatted mode is S_IFCHR - return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + return $cmd; } /** * Makes putenv environment changes available in $_SERVER and $_ENV * * @param string $name - * @param string|false $value A false value unsets the variable + * @param string|null $value A null value unsets the variable * * @return bool Whether the environment variable was set */ - public static function setEnv($name, $value = false) + public static function setEnv($name, $value = null) { - $unset = false === $value; + $unset = null === $value; if (!putenv($unset ? $name : $name.'='.$value)) { return false; diff --git a/vendor/composer/xdebug-handler/src/Status.php b/vendor/composer/xdebug-handler/src/Status.php index e714b1c2..b3dcb87e 100644 --- a/vendor/composer/xdebug-handler/src/Status.php +++ b/vendor/composer/xdebug-handler/src/Status.php @@ -33,6 +33,7 @@ class Status private $envAllowXdebug; private $loaded; private $logger; + private $modeOff; private $time; /** @@ -91,7 +92,12 @@ class Status private function reportCheck($loaded) { - $this->loaded = $loaded; + list($version, $mode) = explode('|', $loaded); + + if ($version) { + $this->loaded = '('.$version.')'.($mode ? ' mode='.$mode : ''); + } + $this->modeOff = $mode === 'off'; $this->output('Checking '.$this->envAllowXdebug); } @@ -112,7 +118,7 @@ class Status if ($this->loaded) { $text = sprintf('No restart (%s)', $this->getEnvAllow()); if (!getenv($this->envAllowXdebug)) { - $text .= ' Allowed by application'; + $text .= ' Allowed by '.($this->modeOff ? 'mode' : 'application'); } $this->output($text); } @@ -157,7 +163,7 @@ class Status */ private function getLoadedMessage() { - $loaded = $this->loaded ? sprintf('loaded (%s)', $this->loaded) : 'not loaded'; + $loaded = $this->loaded ? sprintf('loaded %s', $this->loaded) : 'not loaded'; return 'The Xdebug extension is '.$loaded; } } diff --git a/vendor/composer/xdebug-handler/src/XdebugHandler.php b/vendor/composer/xdebug-handler/src/XdebugHandler.php index 3d484478..cd1a7383 100644 --- a/vendor/composer/xdebug-handler/src/XdebugHandler.php +++ b/vendor/composer/xdebug-handler/src/XdebugHandler.php @@ -30,13 +30,14 @@ class XdebugHandler private static $inRestart; private static $name; private static $skipped; + private static $xdebugActive; private $cli; - private $colorOption; private $debug; private $envAllowXdebug; private $envOriginalInis; private $loaded; + private $mode; private $persistent; private $script; /** @var Status|null */ @@ -50,12 +51,11 @@ class XdebugHandler * would result in MYAPP_ALLOW_XDEBUG and MYAPP_ORIGINAL_INIS. * * @param string $envPrefix Value used in environment variables - * @param string $colorOption Command-line long option to force color output - * @throws \RuntimeException If a parameter is invalid + * @throws \RuntimeException If the parameter is invalid */ - public function __construct($envPrefix, $colorOption = '') + public function __construct($envPrefix) { - if (!is_string($envPrefix) || empty($envPrefix) || !is_string($colorOption)) { + if (!is_string($envPrefix) || empty($envPrefix)) { throw new \RuntimeException('Invalid constructor parameter'); } @@ -63,13 +63,23 @@ class XdebugHandler $this->envAllowXdebug = self::$name.self::SUFFIX_ALLOW; $this->envOriginalInis = self::$name.self::SUFFIX_INIS; - $this->colorOption = $colorOption; - if (extension_loaded('xdebug')) { - $ext = new \ReflectionExtension('xdebug'); - $this->loaded = $ext->getVersion() ?: 'unknown'; + $this->loaded = phpversion('xdebug') ?: 'unknown'; + + if (version_compare($this->loaded, '3.1', '>=')) { + /** @phpstan-ignore-next-line */ + $modes = xdebug_info('mode'); + $this->mode = empty($modes) ? 'off' : implode(',', $modes); + } elseif (false !== ($mode = ini_get('xdebug.mode'))) { + $this->mode = getenv('XDEBUG_MODE') ?: ($mode ?: 'off'); + if (preg_match('/^,+$/', str_replace(' ', '', $this->mode))) { + $this->mode = 'off'; + } + } } + self::$xdebugActive = $this->loaded && $this->mode !== 'off'; + if ($this->cli = PHP_SAPI === 'cli') { $this->debug = getenv(self::DEBUG); } @@ -123,23 +133,22 @@ class XdebugHandler */ public function check() { - $this->notify(Status::CHECK, $this->loaded); + $this->notify(Status::CHECK, $this->loaded.'|'.$this->mode); $envArgs = explode('|', (string) getenv($this->envAllowXdebug)); - if (empty($envArgs[0]) && $this->requiresRestart((bool) $this->loaded)) { + if (empty($envArgs[0]) && $this->requiresRestart(self::$xdebugActive)) { // Restart required $this->notify(Status::RESTART); if ($this->prepareRestart()) { $command = $this->getCommand(); - $this->notify(Status::RESTARTING, $command); $this->restart($command); } return; } if (self::RESTART_ID === $envArgs[0] && count($envArgs) === 5) { - // Restarting, so unset environment variable and use saved values + // Restarted, so unset environment variable and use saved values $this->notify(Status::RESTARTED); Process::setEnv($this->envAllowXdebug); @@ -150,6 +159,8 @@ class XdebugHandler self::$skipped = $envArgs[1]; } + $this->tryEnableSignals(); + // Put restart settings in the environment $this->setEnvRestartSettings($envArgs); return; @@ -204,7 +215,7 @@ class XdebugHandler if (count($envArgs) !== 6 || (!self::$inRestart && php_ini_loaded_file() !== $envArgs[0])) { - return; + return null; } return array( @@ -228,21 +239,39 @@ class XdebugHandler } /** - * Returns true if Xdebug is loaded, or as directed by an extending class + * Returns whether Xdebug is loaded and active * - * @param bool $isLoaded Whether Xdebug is loaded + * true: if Xdebug is loaded and is running in an active mode. + * false: if Xdebug is not loaded, or it is running with xdebug.mode=off. * * @return bool */ - protected function requiresRestart($isLoaded) + public static function isXdebugActive() { - return $isLoaded; + return self::$xdebugActive; + } + + /** + * Allows an extending class to decide if there should be a restart + * + * The default is to restart if Xdebug is loaded and its mode is not "off". + * Do not typehint for 1.x compatibility. + * + * @param bool $default The default behaviour + * + * @return bool Whether the process should restart + */ + protected function requiresRestart($default) + { + return $default; } /** * Allows an extending class to access the tmpIni * - * @param string $command + * Do not typehint for 1.x compatibility + * + * @param array $command */ protected function restart($command) { @@ -252,12 +281,35 @@ class XdebugHandler /** * Executes the restarted command then deletes the tmp ini * - * @param string $command + * @param array $command */ - private function doRestart($command) + private function doRestart(array $command) { - passthru($command, $exitCode); - $this->notify(Status::INFO, 'Restarted process exited '.$exitCode); + $this->tryEnableSignals(); + $this->notify(Status::RESTARTING, implode(' ', $command)); + + if (PHP_VERSION_ID >= 70400) { + $cmd = $command; + } else { + $cmd = Process::escapeShellCommand($command); + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + // Outer quotes required on cmd string below PHP 8 + $cmd = '"'.$cmd.'"'; + } + } + + $process = proc_open($cmd, array(), $pipes); + if (is_resource($process)) { + $exitCode = proc_close($process); + } + + if (!isset($exitCode)) { + // Unlikely that php or the default shell cannot be invoked + $this->notify(Status::ERROR, 'Unable to restart process'); + $exitCode = -1; + } else { + $this->notify(Status::INFO, 'Restarted process exited '.$exitCode); + } if ($this->debug === '2') { $this->notify(Status::INFO, 'Temp ini saved: '.$this->tmpIni); @@ -329,7 +381,8 @@ class XdebugHandler } $content = ''; - $regex = '/^\s*(zend_extension\s*=.*xdebug.*)$/mi'; + $sectionRegex = '/^\s*\[(?:PATH|HOST)\s*=/mi'; + $xdebugRegex = '/^\s*(zend_extension\s*=.*xdebug.*)$/mi'; foreach ($iniFiles as $file) { // Check for inaccessible ini files @@ -337,7 +390,11 @@ class XdebugHandler $error = 'Unable to read ini: '.$file; return false; } - $content .= preg_replace($regex, ';$1', $data).PHP_EOL; + // Check and remove directives after HOST and PATH sections + if (preg_match($sectionRegex, $data, $matches, PREG_OFFSET_CAPTURE)) { + $data = substr($data, 0, $matches[0][1]); + } + $content .= preg_replace($xdebugRegex, ';$1', $data).PHP_EOL; } // Merge loaded settings into our ini content, if it is valid @@ -353,9 +410,9 @@ class XdebugHandler } /** - * Returns the restart command line + * Returns the command line arguments for the restart * - * @return string + * @return array */ private function getCommand() { @@ -367,18 +424,7 @@ class XdebugHandler array_push($php, '-n', '-c', $this->tmpIni); } - if (defined('STDOUT') && Process::supportsColor(STDOUT)) { - $args = Process::addColorOption($args, $this->colorOption); - } - - $args = array_merge($php, array($this->script), $args); - - $cmd = Process::escape(array_shift($args), true, true); - foreach ($args as $arg) { - $cmd .= ' '.Process::escape($arg); - } - - return $cmd; + return array_merge($php, array($this->script), $args); } /** @@ -490,7 +536,7 @@ class XdebugHandler /** * Adds restart settings to the environment * - * @param string $envArgs + * @param string[] $envArgs */ private function setEnvRestartSettings($envArgs) { @@ -542,11 +588,12 @@ class XdebugHandler * Returns true if there are no known configuration issues * * @param string $info Set by method + * @return bool */ private function checkConfiguration(&$info) { - if (false !== strpos(ini_get('disable_functions'), 'passthru')) { - $info = 'passthru function is disabled'; + if (!function_exists('proc_open')) { + $info = 'proc_open function is disabled'; return false; } @@ -560,6 +607,43 @@ class XdebugHandler } } + + $workingDir = getcwd(); + if (0 === strpos($workingDir, '\\\\')) { + if (defined('PHP_WINDOWS_VERSION_BUILD') && PHP_VERSION_ID < 70400) { + $info = 'cmd.exe does not support UNC paths: '.$workingDir; + return false; + } + } + return true; } + + /** + * Enables async signals and control interrupts in the restarted process + * + * Available on Unix PHP 7.1+ with the pcntl extension and Windows PHP 7.4+. + */ + private function tryEnableSignals() + { + if (function_exists('pcntl_async_signals') && function_exists('pcntl_signal')) { + pcntl_async_signals(true); + $message = 'Async signals enabled'; + + if (!self::$inRestart) { + // Restarting, so ignore SIGINT in parent + pcntl_signal(SIGINT, SIG_IGN); + } elseif (is_int(pcntl_signal_get_handler(SIGINT))) { + // Restarted, no handler set so force default action + pcntl_signal(SIGINT, SIG_DFL); + } + } + + if (!self::$inRestart && function_exists('sapi_windows_set_ctrl_handler')) { + // Restarting, so set a handler to ignore CTRL events in the parent. + // This ensures that CTRL+C events will be available in the child + // process without having to enable them there, which is unreliable. + sapi_windows_set_ctrl_handler(function ($evt) {}); + } + } } diff --git a/vendor/ezyang/htmlpurifier/INSTALL b/vendor/ezyang/htmlpurifier/INSTALL deleted file mode 100644 index 5f6a965f..00000000 --- a/vendor/ezyang/htmlpurifier/INSTALL +++ /dev/null @@ -1,341 +0,0 @@ - -Install - How to install HTML Purifier - -HTML Purifier is designed to run out of the box, so actually using the -library is extremely easy. (Although... if you were looking for a -step-by-step installation GUI, you've downloaded the wrong software!) - -While the impatient can get going immediately with some of the sample -code at the bottom of this library, it's well worth reading this entire -document--most of the other documentation assumes that you are familiar -with these contents. - - ---------------------------------------------------------------------------- -1. Compatibility - -HTML Purifier is PHP 5 and PHP 7, and is actively tested from PHP 5.3 -and up. It has no core dependencies with other libraries. - -These optional extensions can enhance the capabilities of HTML Purifier: - - * iconv : Converts text to and from non-UTF-8 encodings - * bcmath : Used for unit conversion and imagecrash protection - * tidy : Used for pretty-printing HTML - -These optional libraries can enhance the capabilities of HTML Purifier: - - * CSSTidy : Clean CSS stylesheets using %Core.ExtractStyleBlocks - Note: You should use the modernized fork of CSSTidy available - at https://github.com/Cerdic/CSSTidy - * Net_IDNA2 (PEAR) : IRI support using %Core.EnableIDNA - Note: This is not necessary for PHP 5.3 or later - ---------------------------------------------------------------------------- -2. Reconnaissance - -A big plus of HTML Purifier is its inerrant support of standards, so -your web-pages should be standards-compliant. (They should also use -semantic markup, but that's another issue altogether, one HTML Purifier -cannot fix without reading your mind.) - -HTML Purifier can process these doctypes: - -* XHTML 1.0 Transitional (default) -* XHTML 1.0 Strict -* HTML 4.01 Transitional -* HTML 4.01 Strict -* XHTML 1.1 - -...and these character encodings: - -* UTF-8 (default) -* Any encoding iconv supports (with crippled internationalization support) - -These defaults reflect what my choices would be if I were authoring an -HTML document, however, what you choose depends on the nature of your -codebase. If you don't know what doctype you are using, you can determine -the doctype from this identifier at the top of your source code: - - - -...and the character encoding from this code: - - - -If the character encoding declaration is missing, STOP NOW, and -read 'docs/enduser-utf8.html' (web accessible at -http://htmlpurifier.org/docs/enduser-utf8.html). In fact, even if it is -present, read this document anyway, as many websites specify their -document's character encoding incorrectly. - - ---------------------------------------------------------------------------- -3. Including the library - -The procedure is quite simple: - - require_once '/path/to/library/HTMLPurifier.auto.php'; - -This will setup an autoloader, so the library's files are only included -when you use them. - -Only the contents in the library/ folder are necessary, so you can remove -everything else when using HTML Purifier in a production environment. - -If you installed HTML Purifier via PEAR, all you need to do is: - - require_once 'HTMLPurifier.auto.php'; - -Please note that the usual PEAR practice of including just the classes you -want will not work with HTML Purifier's autoloading scheme. - -Advanced users, read on; other users can skip to section 4. - -Autoload compatibility ----------------------- - - HTML Purifier attempts to be as smart as possible when registering an - autoloader, but there are some cases where you will need to change - your own code to accomodate HTML Purifier. These are those cases: - - AN __autoload FUNCTION IS DECLARED AFTER OUR AUTOLOADER IS REGISTERED - spl_autoload_register() has the curious behavior of disabling - the existing __autoload() handler. Users need to explicitly - spl_autoload_register('__autoload'). Because we use SPL when it - is available, __autoload() will ALWAYS be disabled. If __autoload() - is declared before HTML Purifier is loaded, this is not a problem: - HTML Purifier will register the function for you. But if it is - declared afterwards, it will mysteriously not work. This - snippet of code (after your autoloader is defined) will fix it: - - spl_autoload_register('__autoload') - - -For better performance ----------------------- - - Opcode caches, which greatly speed up PHP initialization for scripts - with large amounts of code (HTML Purifier included), don't like - autoloaders. We offer an include file that includes all of HTML Purifier's - files in one go in an opcode cache friendly manner: - - // If /path/to/library isn't already in your include path, uncomment - // the below line: - // require '/path/to/library/HTMLPurifier.path.php'; - - require 'HTMLPurifier.includes.php'; - - Optional components still need to be included--you'll know if you try to - use a feature and you get a class doesn't exists error! The autoloader - can be used in conjunction with this approach to catch classes that are - missing. Simply add this afterwards: - - require 'HTMLPurifier.autoload.php'; - -Standalone version ------------------- - - HTML Purifier has a standalone distribution; you can also generate - a standalone file from the full version by running the script - maintenance/generate-standalone.php . The standalone version has the - benefit of having most of its code in one file, so parsing is much - faster and the library is easier to manage. - - If HTMLPurifier.standalone.php exists in the library directory, you - can use it like this: - - require '/path/to/HTMLPurifier.standalone.php'; - - This is equivalent to including HTMLPurifier.includes.php, except that - the contents of standalone/ will be added to your path. To override this - behavior, specify a new HTMLPURIFIER_PREFIX where standalone files can - be found (usually, this will be one directory up, the "true" library - directory in full distributions). Don't forget to set your path too! - - The autoloader can be added to the end to ensure the classes are - loaded when necessary; otherwise you can manually include them. - To use the autoloader, use this: - - require 'HTMLPurifier.autoload.php'; - -For advanced users ------------------- - - HTMLPurifier.auto.php performs a number of operations that can be done - individually. These are: - - HTMLPurifier.path.php - Puts /path/to/library in the include path. For high performance, - this should be done in php.ini. - - HTMLPurifier.autoload.php - Registers our autoload handler HTMLPurifier_Bootstrap::autoload($class). - - You can do these operations by yourself, if you like. - - ---------------------------------------------------------------------------- -4. Configuration - -HTML Purifier is designed to run out-of-the-box, but occasionally HTML -Purifier needs to be told what to do. If you answer no to any of these -questions, read on; otherwise, you can skip to the next section (or, if you're -into configuring things just for the heck of it, skip to 4.3). - -* Am I using UTF-8? -* Am I using XHTML 1.0 Transitional? - -If you answered no to any of these questions, instantiate a configuration -object and read on: - - $config = HTMLPurifier_Config::createDefault(); - - -4.1. Setting a different character encoding - -You really shouldn't use any other encoding except UTF-8, especially if you -plan to support multilingual websites (read section three for more details). -However, switching to UTF-8 is not always immediately feasible, so we can -adapt. - -HTML Purifier uses iconv to support other character encodings, as such, -any encoding that iconv supports -HTML Purifier supports with this code: - - $config->set('Core.Encoding', /* put your encoding here */); - -An example usage for Latin-1 websites (the most common encoding for English -websites): - - $config->set('Core.Encoding', 'ISO-8859-1'); - -Note that HTML Purifier's support for non-Unicode encodings is crippled by the -fact that any character not supported by that encoding will be silently -dropped, EVEN if it is ampersand escaped. If you want to work around -this, you are welcome to read docs/enduser-utf8.html for a fix, -but please be cognizant of the issues the "solution" creates (for this -reason, I do not include the solution in this document). - - -4.2. Setting a different doctype - -For those of you using HTML 4.01 Transitional, you can disable -XHTML output like this: - - $config->set('HTML.Doctype', 'HTML 4.01 Transitional'); - -Other supported doctypes include: - - * HTML 4.01 Strict - * HTML 4.01 Transitional - * XHTML 1.0 Strict - * XHTML 1.0 Transitional - * XHTML 1.1 - - -4.3. Other settings - -There are more configuration directives which can be read about -here: They're a bit boring, -but they can help out for those of you who like to exert maximum control over -your code. Some of the more interesting ones are configurable at the -demo and are well worth looking into -for your own system. - -For example, you can fine tune allowed elements and attributes, convert -relative URLs to absolute ones, and even autoparagraph input text! These -are, respectively, %HTML.Allowed, %URI.MakeAbsolute and %URI.Base, and -%AutoFormat.AutoParagraph. The %Namespace.Directive naming convention -translates to: - - $config->set('Namespace.Directive', $value); - -E.g. - - $config->set('HTML.Allowed', 'p,b,a[href],i'); - $config->set('URI.Base', 'http://www.example.com'); - $config->set('URI.MakeAbsolute', true); - $config->set('AutoFormat.AutoParagraph', true); - - ---------------------------------------------------------------------------- -5. Caching - -HTML Purifier generates some cache files (generally one or two) to speed up -its execution. For maximum performance, make sure that -library/HTMLPurifier/DefinitionCache/Serializer is writeable by the webserver. - -If you are in the library/ folder of HTML Purifier, you can set the -appropriate permissions using: - - chmod -R 0755 HTMLPurifier/DefinitionCache/Serializer - -If the above command doesn't work, you may need to assign write permissions -to group: - - chmod -R 0775 HTMLPurifier/DefinitionCache/Serializer - -You can also chmod files via your FTP client; this option -is usually accessible by right clicking the corresponding directory and -then selecting "chmod" or "file permissions". - -Starting with 2.0.1, HTML Purifier will generate friendly error messages -that will tell you exactly what you have to chmod the directory to, if in doubt, -follow its advice. - -If you are unable or unwilling to give write permissions to the cache -directory, you can either disable the cache (and suffer a performance -hit): - - $config->set('Core.DefinitionCache', null); - -Or move the cache directory somewhere else (no trailing slash): - - $config->set('Cache.SerializerPath', '/home/user/absolute/path'); - - ---------------------------------------------------------------------------- -6. Using the code - -The interface is mind-numbingly simple: - - $purifier = new HTMLPurifier($config); - $clean_html = $purifier->purify( $dirty_html ); - -That's it! For more examples, check out docs/examples/ (they aren't very -different though). Also, docs/enduser-slow.html gives advice on what to -do if HTML Purifier is slowing down your application. - - ---------------------------------------------------------------------------- -7. Quick install - -First, make sure library/HTMLPurifier/DefinitionCache/Serializer is -writable by the webserver (see Section 5: Caching above for details). -If your website is in UTF-8 and XHTML Transitional, use this code: - -purify($dirty_html); -?> - -If your website is in a different encoding or doctype, use this code: - -set('Core.Encoding', 'ISO-8859-1'); // replace with your encoding - $config->set('HTML.Doctype', 'HTML 4.01 Transitional'); // replace with your doctype - $purifier = new HTMLPurifier($config); - - $clean_html = $purifier->purify($dirty_html); -?> - - vim: et sw=4 sts=4 diff --git a/vendor/ezyang/htmlpurifier/INSTALL.fr.utf8 b/vendor/ezyang/htmlpurifier/INSTALL.fr.utf8 deleted file mode 100644 index 629387e2..00000000 --- a/vendor/ezyang/htmlpurifier/INSTALL.fr.utf8 +++ /dev/null @@ -1,60 +0,0 @@ - -Installation - Comment installer HTML Purifier - -Attention : Ce document est encodé en UTF-8, si les lettres avec des accents -ne s'affichent pas, prenez un meilleur éditeur de texte. - -L'installation de HTML Purifier est très simple, parce qu'il n'a pas besoin -de configuration. Pour les utilisateurs impatients, le code se trouve dans le -pied de page, mais je recommande de lire le document. - -1. Compatibilité - -HTML Purifier fonctionne avec PHP 5. PHP 5.3 est la dernière version testée. -Il ne dépend pas d'autres librairies. - -Les extensions optionnelles sont iconv (généralement déjà installée) et tidy -(répendue aussi). Si vous utilisez UTF-8 et que vous ne voulez pas l'indentation, -vous pouvez utiliser HTML Purifier sans ces extensions. - - -2. Inclure la librairie - -Quand vous devez l'utilisez, incluez le : - - require_once('/path/to/library/HTMLPurifier.auto.php'); - -Ne pas l'inclure si ce n'est pas nécessaire, car HTML Purifier est lourd. - -HTML Purifier utilise "autoload". Si vous avez défini la fonction __autoload, -vous devez ajouter cette fonction : - - spl_autoload_register('__autoload') - -Plus d'informations dans le document "INSTALL". - -3. Installation rapide - -Si votre site Web est en UTF-8 et XHTML Transitional, utilisez : - -purify($html_a_purifier); -?> - -Sinon, utilisez : - -set('Core', 'Encoding', 'ISO-8859-1'); //Remplacez par votre - encodage - $config->set('Core', 'XHTML', true); //Remplacer par false si HTML 4.01 - $purificateur = new HTMLPurifier($config); - $html_propre = $purificateur->purify($html_a_purifier); -?> - - - vim: et sw=4 sts=4 diff --git a/vendor/ezyang/htmlpurifier/NEWS b/vendor/ezyang/htmlpurifier/NEWS deleted file mode 100644 index 35283501..00000000 --- a/vendor/ezyang/htmlpurifier/NEWS +++ /dev/null @@ -1,1224 +0,0 @@ -NEWS ( CHANGELOG and HISTORY ) HTMLPurifier -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| - -= KEY ==================== - # Breaks back-compat - ! Feature - - Bugfix - + Sub-comment - . Internal change -========================== - -4.12.0, released 2019-10-27 -! PHP 7.4 is supported, thank you Witold Wasiczko, Mateuz Turcza and - Edi Modrić -- PHPDocs for HTMLModule::addElement() and Bool attr are fixed (thanks - Mateusz) - -4.11.0, released 2019-07-14 -# SafeScripting now matches case-sensitively against its whitelist (previously it was - case-insensitive.) Thanks Dimitri Gritsajuk - for reporting. -! New directive %Core.AllowParseManyTags which allows parsing of many nested tags. - Thanks M. Suzuki for contributing the patch. -! purifyArray now supports multidimensional arrays. Thanks - Sandro Miguel Marques for contributing this patch. -! initial and inherit settings available for width, height, and the min-/max- - versions thereof. Thanks Michael Kliewe for contributing - this patch. -! More color names are supported. Thanks Daijobou for contributing. -- Compatibility fixes for PHP 7.3, including new CI for PHP 7.3 - (thank you Lukas Neumann ) and removal of - reserved words in our constants (thanks Darko Hrgovic -- Compatibility fixes for HHVM. Thanks Mateusz Turcza for contributing - this fix. -- HTML Purifier now never defines __autoload, fixing #196. Thanks - Michael Kliewe for reporting. -- In some situations, Config.php would report an undefined index: class - error; this has been fixed. Thanks DiLong Fa for contributing - this fix. -- We no longer produce '; - - $frm->show(); -} - -function phorum_htmlpurifier_show_config_info() -{ - global $PHORUM; - - // update mod_htmlpurifier for housekeeping - phorum_htmlpurifier_commit_settings(); - - // politely tell user how to edit settings manually -?> -
How to edit settings for HTML Purifier module
-

- A config.php file exists in your mods/htmlpurifier/ - directory. This file contains your custom configuration: in order to - change it, please navigate to that file and edit it accordingly. - You can also set $GLOBALS['PHORUM']['mod_htmlpurifier']['wysiwyg'] - or $GLOBALS['PHORUM']['mod_htmlpurifier']['suppress_message'] -

-

- To use the web interface, delete config.php (or rename it to - config.php.bak). -

-

- Warning: Changing HTML Purifier's configuration will invalidate - the cache. Expect to see a flurry of database activity after you change - any of these settings. -

-hidden("module", "modsettings"); - $frm->hidden("mod", "htmlpurifier"); - $frm->hidden("migrate-sigs", "1"); - $frm->addbreak("Migrate user signatures to HTML"); - $frm->addMessage('This operation will migrate your users signatures - to HTML. This process is irreversible and must only be performed once. - Type in yes in the confirmation field to migrate.'); - if (!file_exists(dirname(__FILE__) . '/../migrate.php')) { - $frm->addMessage('Migration file does not exist, cannot migrate signatures. - Please check migrate.bbcode.php on how to create an appropriate file.'); - } else { - $frm->addrow('Confirm:', $frm->text_box("confirmation", "")); - } - $frm->show(); -} - -// vim: et sw=4 sts=4 diff --git a/vendor/ezyang/htmlpurifier/plugins/phorum/settings/migrate-sigs.php b/vendor/ezyang/htmlpurifier/plugins/phorum/settings/migrate-sigs.php deleted file mode 100644 index 5ea9cd0b..00000000 --- a/vendor/ezyang/htmlpurifier/plugins/phorum/settings/migrate-sigs.php +++ /dev/null @@ -1,79 +0,0 @@ -$PHORUM["mod_htmlpurifier"])); - $offset = 1; - } elseif (!empty($_GET['migrate-sigs']) && $PHORUM['mod_htmlpurifier']['migrate-sigs']) { - $offset = (int) $_GET['migrate-sigs']; - } - return $offset; -} - -function phorum_htmlpurifier_migrate_sigs($offset) -{ - global $PHORUM; - - if(!$offset) return; // bail out quick if $offset == 0 - - // theoretically, we could get rid of this multi-request - // doo-hickery if safe mode is off - @set_time_limit(0); // attempt to let this run - $increment = $PHORUM['mod_htmlpurifier']['migrate-sigs-increment']; - - require_once(dirname(__FILE__) . '/../migrate.php'); - // migrate signatures - // do this in batches so we don't run out of time/space - $end = $offset + $increment; - $user_ids = array(); - for ($i = $offset; $i < $end; $i++) { - $user_ids[] = $i; - } - $userinfos = phorum_db_user_get_fields($user_ids, 'signature'); - foreach ($userinfos as $i => $user) { - if (empty($user['signature'])) continue; - $sig = $user['signature']; - // perform standard Phorum processing on the sig - $sig = str_replace(array("&","<",">"), array("&","<",">"), $sig); - $sig = preg_replace("/<((http|https|ftp):\/\/[a-z0-9;\/\?:@=\&\$\-_\.\+!*'\(\),~%]+?)>/i", "$1", $sig); - // prepare fake data to pass to migration function - $fake_data = array(array("author"=>"", "email"=>"", "subject"=>"", 'body' => $sig)); - list($fake_message) = phorum_htmlpurifier_migrate($fake_data); - $user['signature'] = $fake_message['body']; - if (!phorum_api_user_save($user)) { - exit('Error while saving user data'); - } - } - unset($userinfos); // free up memory - - // query for highest ID in database - $type = $PHORUM['DBCONFIG']['type']; - $sql = "select MAX(user_id) from {$PHORUM['user_table']}"; - $row = phorum_db_interact(DB_RETURN_ROW, $sql); - $top_id = (int) $row[0]; - - $offset += $increment; - if ($offset > $top_id) { // test for end condition - echo 'Migration finished'; - $PHORUM['mod_htmlpurifier']['migrate-sigs'] = false; - phorum_htmlpurifier_commit_settings(); - return true; - } - $host = $_SERVER['HTTP_HOST']; - $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); - $extra = 'admin.php?module=modsettings&mod=htmlpurifier&migrate-sigs=' . $offset; - // relies on output buffering to work - header("Location: http://$host$uri/$extra"); - exit; - -} - -// vim: et sw=4 sts=4 diff --git a/vendor/ezyang/htmlpurifier/plugins/phorum/settings/save.php b/vendor/ezyang/htmlpurifier/plugins/phorum/settings/save.php deleted file mode 100644 index 2aefaf83..00000000 --- a/vendor/ezyang/htmlpurifier/plugins/phorum/settings/save.php +++ /dev/null @@ -1,29 +0,0 @@ -mods/htmlpurifier/config.php already exists. To change - settings, edit that file. To use the web form, delete that file.
"; - } else { - $config = phorum_htmlpurifier_get_config(true); - if (!isset($_POST['reset'])) $config->mergeArrayFromForm($_POST, 'config', $PHORUM['mod_htmlpurifier']['directives']); - $PHORUM['mod_htmlpurifier']['config'] = $config->getAll(); - } - $PHORUM['mod_htmlpurifier']['wysiwyg'] = !empty($_POST['wysiwyg']); - $PHORUM['mod_htmlpurifier']['suppress_message'] = !empty($_POST['suppress_message']); - if(!phorum_htmlpurifier_commit_settings()){ - $error="Database error while updating settings."; - } else { - echo "Settings Updated
"; - } -} - -function phorum_htmlpurifier_commit_settings() -{ - global $PHORUM; - return phorum_db_update_settings(array("mod_htmlpurifier"=>$PHORUM["mod_htmlpurifier"])); -} - -// vim: et sw=4 sts=4 diff --git a/vendor/ezyang/htmlpurifier/test-settings.sample.php b/vendor/ezyang/htmlpurifier/test-settings.sample.php deleted file mode 100644 index 480b6627..00000000 --- a/vendor/ezyang/htmlpurifier/test-settings.sample.php +++ /dev/null @@ -1,74 +0,0 @@ - 1) { - echo 'More than one release declaration in NEWS replaced' . PHP_EOL; - exit; - } - file_put_contents('NEWS', $news_c); -} - -// ...in Doxyfile -$doxyfile_c = preg_replace( - '/(?<=PROJECT_NUMBER {9}= )[^\s]+/m', // brittle - $version, - file_get_contents('Doxyfile'), - 1, $c -); -if (!$c) { - echo 'Could not update Doxyfile, missing PROJECT_NUMBER.' . PHP_EOL; - exit; -} -file_put_contents('Doxyfile', $doxyfile_c); - -// ...in HTMLPurifier.php -$htmlpurifier_c = file_get_contents('library/HTMLPurifier.php'); -$htmlpurifier_c = preg_replace( - '/HTML Purifier .+? - /', - "HTML Purifier $version - ", - $htmlpurifier_c, - 1, $c -); -if (!$c) { - echo 'Could not update HTMLPurifier.php, missing HTML Purifier [version] header.' . PHP_EOL; - exit; -} -$htmlpurifier_c = preg_replace( - '/public \$version = \'.+?\';/', - "public \$version = '$version';", - $htmlpurifier_c, - 1, $c -); -if (!$c) { - echo 'Could not update HTMLPurifier.php, missing public $version.' . PHP_EOL; - exit; -} -$htmlpurifier_c = preg_replace( - '/const VERSION = \'.+?\';/', - "const VERSION = '$version';", - $htmlpurifier_c, - 1, $c -); -if (!$c) { - echo 'Could not update HTMLPurifier.php, missing const $version.' . PHP_EOL; - exit; -} -file_put_contents('library/HTMLPurifier.php', $htmlpurifier_c); - -$config_c = file_get_contents('library/HTMLPurifier/Config.php'); -$config_c = preg_replace( - '/public \$version = \'.+?\';/', - "public \$version = '$version';", - $config_c, - 1, $c -); -if (!$c) { - echo 'Could not update Config.php, missing public $version.' . PHP_EOL; - exit; -} -file_put_contents('library/HTMLPurifier/Config.php', $config_c); - -passthru('maintenance/flush.sh'); - -if ($is_dev) echo "Review changes, write something in WHATSNEW and FOCUS, and then commit with log 'Release $version.'" . PHP_EOL; -else echo "Numbers updated to dev, no other modifications necessary!"; - -// vim: et sw=4 sts=4 diff --git a/vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml b/vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml new file mode 100644 index 00000000..4b0bd562 --- /dev/null +++ b/vendor/felixfbecker/advanced-json-rpc/.github/workflows/build.yml @@ -0,0 +1,63 @@ +name: build + +on: [push, pull_request] + +env: + FORCE_COLOR: 1 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + test: + strategy: + matrix: + php: + - 7.1 + - 7.2 + - 7.3 + - 7.4 + - 8.0 + deps: + - lowest + - highest + include: + - php: 8.1 + deps: highest + composer-options: --ignore-platform-reqs + exclude: + # that config currently breaks as older PHPUnit cannot generate coverage on PHP 8 + - php: 8 + deps: lowest + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + + - uses: ramsey/composer-install@v1 + with: + dependency-versions: ${{ matrix.deps }} + composer-options: ${{ matrix.composer-options }} + + - run: vendor/bin/phpunit --coverage-clover=coverage.xml --whitelist lib --bootstrap vendor/autoload.php tests + + - uses: codecov/codecov-action@v1 + + release: + needs: test + if: github.repository_owner == 'felixfbecker' && github.event_name == 'push' && github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v2 + + - name: Install npm dependencies + run: npm ci + + - name: Release + run: npm run semantic-release diff --git a/vendor/felixfbecker/advanced-json-rpc/.travis.yml b/vendor/felixfbecker/advanced-json-rpc/.travis.yml deleted file mode 100644 index 3fb59a19..00000000 --- a/vendor/felixfbecker/advanced-json-rpc/.travis.yml +++ /dev/null @@ -1,43 +0,0 @@ -language: php - -php: - - '7.0' - - '7.2' - -env: - global: - - FORCE_COLOR=1 - -cache: - directories: - - $HOME/.composer/cache - - $HOME/.npm - -install: - - composer install --prefer-dist - -script: - - vendor/bin/phpunit --coverage-clover=coverage.xml --whitelist lib --bootstrap vendor/autoload.php tests - -after_success: - - bash <(curl -s https://codecov.io/bash) - -jobs: - include: - - stage: release - language: node_js - node_js: '8' - install: - - npm ci - script: - - npm run semantic-release - after_success: false - -stages: - - test - - name: release - if: branch = master AND type = push AND fork = false - -branches: - except: - - /^v\d+\.\d+\.\d+$/ diff --git a/vendor/felixfbecker/advanced-json-rpc/composer.json b/vendor/felixfbecker/advanced-json-rpc/composer.json index a7e1d7bb..c4d5739e 100644 --- a/vendor/felixfbecker/advanced-json-rpc/composer.json +++ b/vendor/felixfbecker/advanced-json-rpc/composer.json @@ -20,12 +20,12 @@ } }, "require": { - "php": ">=7.0", - "netresearch/jsonmapper": "^1.0 || ^2.0", - "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0" + "php": "^7.1 || ^8.0", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" }, "require-dev": { - "phpunit/phpunit": "^6.0.0" + "phpunit/phpunit": "^7.0 || ^8.0" }, "minimum-stability": "dev", "prefer-stable": true diff --git a/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php b/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php index a2ad10fc..5f045df6 100644 --- a/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php +++ b/vendor/felixfbecker/advanced-json-rpc/lib/Dispatcher.php @@ -3,7 +3,6 @@ declare(strict_types = 1); namespace AdvancedJsonRpc; -use Sabre\Event\Loop; use JsonMapper; use JsonMapper_Exception; use phpDocumentor\Reflection\DocBlockFactory; diff --git a/vendor/guzzlehttp/guzzle/CHANGELOG.md b/vendor/guzzlehttp/guzzle/CHANGELOG.md index a2b61e71..464cf1c5 100644 --- a/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 6.5.5 - 2020-06-16 + +* Unpin version constraint for `symfony/polyfill-intl-idn` [#2678](https://github.com/guzzle/guzzle/pull/2678) + +## 6.5.4 - 2020-05-25 + +* Fix various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626) + +## 6.5.3 - 2020-04-18 + +* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550) +* Remove use of internal functions [#2548](https://github.com/guzzle/guzzle/pull/2548) + ## 6.5.2 - 2019-12-23 * idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) @@ -14,7 +27,10 @@ * Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) * Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287) * Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132) -* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) +* Fix: `RetryMiddleware` did not do exponential delay between retries due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) + Previously, `RetryMiddleware` would sleep for 1 millisecond, then 2 milliseconds, then 4 milliseconds. + **After this change, `RetryMiddleware` will sleep for 1 second, then 2 seconds, then 4 seconds.** + `Middleware::retry()` accepts a second callback parameter to override the default timeouts if needed. * Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) * Deprecated `ClientInterface::VERSION` diff --git a/vendor/guzzlehttp/guzzle/composer.json b/vendor/guzzlehttp/guzzle/composer.json index bbf0ff20..c01864f0 100644 --- a/vendor/guzzlehttp/guzzle/composer.json +++ b/vendor/guzzlehttp/guzzle/composer.json @@ -23,6 +23,7 @@ "require": { "php": ">=5.5", "ext-json": "*", + "symfony/polyfill-intl-idn": "^1.17.0", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1" }, @@ -32,8 +33,7 @@ "psr/log": "^1.1" }, "suggest": { - "psr/log": "Required for using the Log middleware", - "ext-intl": "Required for Internationalized Domain Name (IDN) support" + "psr/log": "Required for using the Log middleware" }, "config": { "sort-packages": true diff --git a/vendor/guzzlehttp/guzzle/src/Client.php b/vendor/guzzlehttp/guzzle/src/Client.php index f2bf2044..315a022c 100644 --- a/vendor/guzzlehttp/guzzle/src/Client.php +++ b/vendor/guzzlehttp/guzzle/src/Client.php @@ -2,7 +2,7 @@ namespace GuzzleHttp; use GuzzleHttp\Cookie\CookieJar; -use GuzzleHttp\Exception\InvalidArgumentException; +use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Promise; use GuzzleHttp\Psr7; use Psr\Http\Message\RequestInterface; @@ -47,9 +47,8 @@ class Client implements ClientInterface * wire. The function is called with a Psr7\Http\Message\RequestInterface * and array of transfer options, and must return a * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a - * Psr7\Http\Message\ResponseInterface on success. "handler" is a - * constructor only option that cannot be overridden in per/request - * options. If no handler is provided, a default handler will be created + * Psr7\Http\Message\ResponseInterface on success. + * If no handler is provided, a default handler will be created * that enables all of the request options below by attaching all of the * default middleware to the handler. * - base_uri: (string|UriInterface) Base URI of the client that is merged @@ -217,7 +216,7 @@ class Client implements ClientInterface if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) { $idnOptions = ($config['idn_conversion'] === true) ? IDNA_DEFAULT : $config['idn_conversion']; - $uri = _idn_uri_convert($uri, $idnOptions); + $uri = Utils::idnUriConvert($uri, $idnOptions); } return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; @@ -236,19 +235,10 @@ class Client implements ClientInterface 'http_errors' => true, 'decode_content' => true, 'verify' => true, - 'cookies' => false + 'cookies' => false, + 'idn_conversion' => true, ]; - // idn_to_ascii() is a part of ext-intl and might be not available - $defaults['idn_conversion'] = function_exists('idn_to_ascii') - // Old ICU versions don't have this constant, so we are basically stuck (see https://github.com/guzzle/guzzle/pull/2424 - // and https://github.com/guzzle/guzzle/issues/2448 for details) - && ( - defined('INTL_IDNA_VARIANT_UTS46') - || - PHP_VERSION_ID < 70200 - ); - // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. // We can only trust the HTTP_PROXY environment variable in a CLI @@ -498,7 +488,7 @@ class Client implements ClientInterface /** * Throw Exception with pre-set message. * @return void - * @throws InvalidArgumentException Invalid body. + * @throws \InvalidArgumentException Invalid body. */ private function invalidBody() { diff --git a/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 0c8d42a1..638b75dc 100644 --- a/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -15,7 +15,7 @@ interface ClientInterface /** * @deprecated Will be removed in Guzzle 7.0.0 */ - const VERSION = '6.5.1'; + const VERSION = '6.5.5'; /** * Send an HTTP request. diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index b73e5c72..564c95f4 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -1,9 +1,9 @@ delays) { - $currentTime = \GuzzleHttp\_current_time(); + $currentTime = Utils::currentTime(); foreach ($this->delays as $id => $delay) { if ($currentTime >= $delay) { unset($this->delays[$id]); @@ -154,7 +154,7 @@ class CurlMultiHandler if (empty($easy->options['delay'])) { curl_multi_add_handle($this->_mh, $easy->handle); } else { - $this->delays[$id] = \GuzzleHttp\_current_time() + ($easy->options['delay'] / 1000); + $this->delays[$id] = Utils::currentTime() + ($easy->options['delay'] / 1000); } } @@ -206,7 +206,7 @@ class CurlMultiHandler private function timeToNext() { - $currentTime = \GuzzleHttp\_current_time(); + $currentTime = Utils::currentTime(); $nextTime = PHP_INT_MAX; foreach ($this->delays as $time) { if ($time < $nextTime) { diff --git a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php index a8eba378..a15734a4 100644 --- a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php +++ b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php @@ -7,6 +7,7 @@ use GuzzleHttp\Promise\FulfilledPromise; use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Psr7; use GuzzleHttp\TransferStats; +use GuzzleHttp\Utils; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; @@ -33,7 +34,7 @@ class StreamHandler usleep($options['delay'] * 1000); } - $startTime = isset($options['on_stats']) ? \GuzzleHttp\_current_time() : null; + $startTime = isset($options['on_stats']) ? Utils::currentTime() : null; try { // Does not support the expect header. @@ -82,7 +83,7 @@ class StreamHandler $stats = new TransferStats( $request, $response, - \GuzzleHttp\_current_time() - $startTime, + Utils::currentTime() - $startTime, $error, [] ); diff --git a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php index 2f301261..e4644b7a 100644 --- a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -193,7 +193,7 @@ class RedirectMiddleware $uri = $this->redirectUri($request, $response, $protocols); if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) { $idnOptions = ($options['idn_conversion'] === true) ? IDNA_DEFAULT : $options['idn_conversion']; - $uri = _idn_uri_convert($uri, $idnOptions); + $uri = Utils::idnUriConvert($uri, $idnOptions); } $modify['uri'] = $uri; diff --git a/vendor/guzzlehttp/guzzle/src/Utils.php b/vendor/guzzlehttp/guzzle/src/Utils.php new file mode 100644 index 00000000..c698acbf --- /dev/null +++ b/vendor/guzzlehttp/guzzle/src/Utils.php @@ -0,0 +1,92 @@ +getHost()) { + $asciiHost = self::idnToAsci($uri->getHost(), $options, $info); + if ($asciiHost === false) { + $errorBitSet = isset($info['errors']) ? $info['errors'] : 0; + + $errorConstants = array_filter(array_keys(get_defined_constants()), function ($name) { + return substr($name, 0, 11) === 'IDNA_ERROR_'; + }); + + $errors = []; + foreach ($errorConstants as $errorConstant) { + if ($errorBitSet & constant($errorConstant)) { + $errors[] = $errorConstant; + } + } + + $errorMessage = 'IDN conversion failed'; + if ($errors) { + $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; + } + + throw new InvalidArgumentException($errorMessage); + } else { + if ($uri->getHost() !== $asciiHost) { + // Replace URI only if the ASCII version is different + $uri = $uri->withHost($asciiHost); + } + } + } + + return $uri; + } + + /** + * @param string $domain + * @param int $options + * @param array $info + * + * @return string|false + */ + private static function idnToAsci($domain, $options, &$info = []) + { + if (\preg_match('%^[ -~]+$%', $domain) === 1) { + return $domain; + } + + if (\extension_loaded('intl') && defined('INTL_IDNA_VARIANT_UTS46')) { + return \idn_to_ascii($domain, $options, INTL_IDNA_VARIANT_UTS46, $info); + } + + /* + * The Idn class is marked as @internal. Verify that class and method exists. + */ + if (method_exists(Idn::class, 'idn_to_ascii')) { + return Idn::idn_to_ascii($domain, $options, Idn::INTL_IDNA_VARIANT_UTS46, $info); + } + + throw new \RuntimeException('ext-intl or symfony/polyfill-intl-idn not loaded or too old'); + } +} diff --git a/vendor/guzzlehttp/guzzle/src/functions.php b/vendor/guzzlehttp/guzzle/src/functions.php index 5e806f63..c2afd8c7 100644 --- a/vendor/guzzlehttp/guzzle/src/functions.php +++ b/vendor/guzzlehttp/guzzle/src/functions.php @@ -1,12 +1,10 @@ getHost()) { - $idnaVariant = defined('INTL_IDNA_VARIANT_UTS46') ? INTL_IDNA_VARIANT_UTS46 : 0; - $asciiHost = $idnaVariant === 0 - ? idn_to_ascii($uri->getHost(), $options) - : idn_to_ascii($uri->getHost(), $options, $idnaVariant, $info); - if ($asciiHost === false) { - $errorBitSet = isset($info['errors']) ? $info['errors'] : 0; - - $errorConstants = array_filter(array_keys(get_defined_constants()), function ($name) { - return substr($name, 0, 11) === 'IDNA_ERROR_'; - }); - - $errors = []; - foreach ($errorConstants as $errorConstant) { - if ($errorBitSet & constant($errorConstant)) { - $errors[] = $errorConstant; - } - } - - $errorMessage = 'IDN conversion failed'; - if ($errors) { - $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; - } - - throw new InvalidArgumentException($errorMessage); - } else { - if ($uri->getHost() !== $asciiHost) { - // Replace URI only if the ASCII version is different - $uri = $uri->withHost($asciiHost); - } - } - } - - return $uri; -} diff --git a/vendor/guzzlehttp/promises/CHANGELOG.md b/vendor/guzzlehttp/promises/CHANGELOG.md index 551929f6..14796c47 100644 --- a/vendor/guzzlehttp/promises/CHANGELOG.md +++ b/vendor/guzzlehttp/promises/CHANGELOG.md @@ -1,5 +1,24 @@ # CHANGELOG +## 1.4.1 - 2021-02-18 + +- Fixed `each_limit` skipping promises and failing + +## 1.4.0 - 2020-09-30 + +### Added + +- Support for PHP 8 +- Optional `$recursive` flag to `all` +- Replaced functions by static methods + +### Fixed + +- Fix empty `each` processing +- Fix promise handling for Iterators of non-unique keys +- Fixed `method_exists` crashes on PHP 8 +- Memory leak on exceptions + ## 1.3.1 - 2016-12-20 diff --git a/vendor/guzzlehttp/promises/README.md b/vendor/guzzlehttp/promises/README.md index 7b607e28..a95c6059 100644 --- a/vendor/guzzlehttp/promises/README.md +++ b/vendor/guzzlehttp/promises/README.md @@ -26,7 +26,7 @@ for a general introduction to promises. - Promises can be cancelled. - Works with any object that has a `then` function. - C# style async/await coroutine promises using - `GuzzleHttp\Promise\coroutine()`. + `GuzzleHttp\Promise\Coroutine::of()`. # Quick start @@ -88,7 +88,7 @@ $promise }); // Resolving the promise triggers the $onFulfilled callbacks and outputs -// "Hello, reader". +// "Hello, reader." $promise->resolve('reader.'); ``` @@ -150,7 +150,7 @@ use GuzzleHttp\Promise\Promise; $promise = new Promise(); $promise->then(null, function ($reason) { - throw new \Exception($reason); + throw new Exception($reason); })->then(null, function ($reason) { assert($reason->getMessage() === 'Error!'); }); @@ -182,7 +182,6 @@ invoked using the value returned from the `$onRejected` callback. ```php use GuzzleHttp\Promise\Promise; -use GuzzleHttp\Promise\RejectedPromise; $promise = new Promise(); $promise @@ -220,7 +219,7 @@ the promise is rejected with the exception and the exception is thrown. ```php $promise = new Promise(function () use (&$promise) { - throw new \Exception('foo'); + throw new Exception('foo'); }); $promise->wait(); // throws the exception. @@ -397,7 +396,7 @@ $deferred = new React\Promise\Deferred(); $reactPromise = $deferred->promise(); // Create a Guzzle promise that is fulfilled with a React promise. -$guzzlePromise = new \GuzzleHttp\Promise\Promise(); +$guzzlePromise = new GuzzleHttp\Promise\Promise(); $guzzlePromise->then(function ($value) use ($reactPromise) { // Do something something with the value... // Return the React promise @@ -424,7 +423,7 @@ instance. ```php // Get the global task queue -$queue = \GuzzleHttp\Promise\queue(); +$queue = GuzzleHttp\Promise\Utils::queue(); $queue->run(); ``` @@ -502,3 +501,32 @@ $promise->then(function ($value) { echo $value; }); $promise->resolve('foo'); // prints "foo" ``` + + +## Upgrading from Function API + +A static API was first introduced in 1.4.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API will be removed in 2.0.0. A migration table has been provided here for your convenience: + +| Original Function | Replacement Method | +|----------------|----------------| +| `queue` | `Utils::queue` | +| `task` | `Utils::task` | +| `promise_for` | `Create::promiseFor` | +| `rejection_for` | `Create::rejectionFor` | +| `exception_for` | `Create::exceptionFor` | +| `iter_for` | `Create::iterFor` | +| `inspect` | `Utils::inspect` | +| `inspect_all` | `Utils::inspectAll` | +| `unwrap` | `Utils::unwrap` | +| `all` | `Utils::all` | +| `some` | `Utils::some` | +| `any` | `Utils::any` | +| `settle` | `Utils::settle` | +| `each` | `Each::of` | +| `each_limit` | `Each::ofLimit` | +| `each_limit_all` | `Each::ofLimitAll` | +| `!is_fulfilled` | `Is::pending` | +| `is_fulfilled` | `Is::fulfilled` | +| `is_rejected` | `Is::rejected` | +| `is_settled` | `Is::settled` | +| `coroutine` | `Coroutine::of` | diff --git a/vendor/guzzlehttp/promises/composer.json b/vendor/guzzlehttp/promises/composer.json index ec41a61e..db44d9e3 100644 --- a/vendor/guzzlehttp/promises/composer.json +++ b/vendor/guzzlehttp/promises/composer.json @@ -11,10 +11,10 @@ } ], "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "autoload": { "psr-4": { @@ -22,9 +22,14 @@ }, "files": ["src/functions_include.php"] }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\Promise\\Tests\\": "tests/" + } + }, "scripts": { - "test": "vendor/bin/phpunit", - "test-ci": "vendor/bin/phpunit --coverage-text" + "test": "vendor/bin/simple-phpunit", + "test-ci": "vendor/bin/simple-phpunit --coverage-text" }, "extra": { "branch-alias": { diff --git a/vendor/guzzlehttp/promises/src/AggregateException.php b/vendor/guzzlehttp/promises/src/AggregateException.php index 6a5690c3..d2b5712b 100644 --- a/vendor/guzzlehttp/promises/src/AggregateException.php +++ b/vendor/guzzlehttp/promises/src/AggregateException.php @@ -1,4 +1,5 @@ currentPromise->wait(); } }); - $this->nextCoroutine($this->generator->current()); + try { + $this->nextCoroutine($this->generator->current()); + } catch (\Exception $exception) { + $this->result->reject($exception); + } catch (Throwable $throwable) { + $this->result->reject($throwable); + } + } + + /** + * Create a new coroutine. + * + * @return self + */ + public static function of(callable $generatorFn) + { + return new self($generatorFn); } public function then( @@ -108,7 +126,7 @@ final class Coroutine implements PromiseInterface private function nextCoroutine($yielded) { - $this->currentPromise = promise_for($yielded) + $this->currentPromise = Create::promiseFor($yielded) ->then([$this, '_handleSuccess'], [$this, '_handleFailure']); } @@ -139,7 +157,7 @@ final class Coroutine implements PromiseInterface { unset($this->currentPromise); try { - $nextYield = $this->generator->throw(exception_for($reason)); + $nextYield = $this->generator->throw(Create::exceptionFor($reason)); // The throw was caught, so keep iterating on the coroutine $this->nextCoroutine($nextYield); } catch (Exception $exception) { diff --git a/vendor/guzzlehttp/promises/src/Create.php b/vendor/guzzlehttp/promises/src/Create.php new file mode 100644 index 00000000..8d038e9c --- /dev/null +++ b/vendor/guzzlehttp/promises/src/Create.php @@ -0,0 +1,84 @@ +then([$promise, 'resolve'], [$promise, 'reject']); + return $promise; + } + + return new FulfilledPromise($value); + } + + /** + * Creates a rejected promise for a reason if the reason is not a promise. + * If the provided reason is a promise, then it is returned as-is. + * + * @param mixed $reason Promise or reason. + * + * @return PromiseInterface + */ + public static function rejectionFor($reason) + { + if ($reason instanceof PromiseInterface) { + return $reason; + } + + return new RejectedPromise($reason); + } + + /** + * Create an exception for a rejected promise value. + * + * @param mixed $reason + * + * @return \Exception|\Throwable + */ + public static function exceptionFor($reason) + { + if ($reason instanceof \Exception || $reason instanceof \Throwable) { + return $reason; + } + + return new RejectionException($reason); + } + + /** + * Returns an iterator for the given value. + * + * @param mixed $value + * + * @return \Iterator + */ + public static function iterFor($value) + { + if ($value instanceof \Iterator) { + return $value; + } + + if (is_array($value)) { + return new \ArrayIterator($value); + } + + return new \ArrayIterator([$value]); + } +} diff --git a/vendor/guzzlehttp/promises/src/Each.php b/vendor/guzzlehttp/promises/src/Each.php new file mode 100644 index 00000000..1dda3549 --- /dev/null +++ b/vendor/guzzlehttp/promises/src/Each.php @@ -0,0 +1,90 @@ + $onFulfilled, + 'rejected' => $onRejected + ]))->promise(); + } + + /** + * Like of, but only allows a certain number of outstanding promises at any + * given time. + * + * $concurrency may be an integer or a function that accepts the number of + * pending promises and returns a numeric concurrency limit value to allow + * for dynamic a concurrency size. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * @param callable $onRejected + * + * @return PromiseInterface + */ + public static function ofLimit( + $iterable, + $concurrency, + callable $onFulfilled = null, + callable $onRejected = null + ) { + return (new EachPromise($iterable, [ + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected, + 'concurrency' => $concurrency + ]))->promise(); + } + + /** + * Like limit, but ensures that no promise in the given $iterable argument + * is rejected. If any promise is rejected, then the aggregate promise is + * rejected with the encountered rejection. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * + * @return PromiseInterface + */ + public static function ofLimitAll( + $iterable, + $concurrency, + callable $onFulfilled = null + ) { + return each_limit( + $iterable, + $concurrency, + $onFulfilled, + function ($reason, $idx, PromiseInterface $aggregate) { + $aggregate->reject($reason); + } + ); + } +} diff --git a/vendor/guzzlehttp/promises/src/EachPromise.php b/vendor/guzzlehttp/promises/src/EachPromise.php index d0ddf603..748f4712 100644 --- a/vendor/guzzlehttp/promises/src/EachPromise.php +++ b/vendor/guzzlehttp/promises/src/EachPromise.php @@ -1,4 +1,5 @@ iterable = iter_for($iterable); + $this->iterable = Create::iterFor($iterable); if (isset($config['concurrency'])) { $this->concurrency = $config['concurrency']; @@ -65,6 +68,7 @@ class EachPromise implements PromisorInterface } } + /** @psalm-suppress InvalidNullableReturnType */ public function promise() { if ($this->aggregate) { @@ -73,14 +77,29 @@ class EachPromise implements PromisorInterface try { $this->createPromise(); + /** @psalm-assert Promise $this->aggregate */ $this->iterable->rewind(); - $this->refillPending(); + if (!$this->checkIfFinished()) { + $this->refillPending(); + } } catch (\Throwable $e) { + /** + * @psalm-suppress NullReference + * @phpstan-ignore-next-line + */ $this->aggregate->reject($e); } catch (\Exception $e) { + /** + * @psalm-suppress NullReference + * @phpstan-ignore-next-line + */ $this->aggregate->reject($e); } + /** + * @psalm-suppress NullableReturnStatement + * @phpstan-ignore-next-line + */ return $this->aggregate; } @@ -89,17 +108,12 @@ class EachPromise implements PromisorInterface $this->mutex = false; $this->aggregate = new Promise(function () { reset($this->pending); - if (empty($this->pending) && !$this->iterable->valid()) { - $this->aggregate->resolve(null); - return; - } - // Consume a potentially fluctuating list of promises while // ensuring that indexes are maintained (precluding array_shift). while ($promise = current($this->pending)) { next($this->pending); $promise->wait(); - if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + if (Is::settled($this->aggregate)) { return; } } @@ -109,6 +123,7 @@ class EachPromise implements PromisorInterface $clearFn = function () { $this->iterable = $this->concurrency = $this->pending = null; $this->onFulfilled = $this->onRejected = null; + $this->nextPendingIndex = 0; }; $this->aggregate->then($clearFn, $clearFn); @@ -148,22 +163,32 @@ class EachPromise implements PromisorInterface return false; } - $promise = promise_for($this->iterable->current()); - $idx = $this->iterable->key(); + $promise = Create::promiseFor($this->iterable->current()); + $key = $this->iterable->key(); + + // Iterable keys may not be unique, so we use a counter to + // guarantee uniqueness + $idx = $this->nextPendingIndex++; $this->pending[$idx] = $promise->then( - function ($value) use ($idx) { + function ($value) use ($idx, $key) { if ($this->onFulfilled) { call_user_func( - $this->onFulfilled, $value, $idx, $this->aggregate + $this->onFulfilled, + $value, + $key, + $this->aggregate ); } $this->step($idx); }, - function ($reason) use ($idx) { + function ($reason) use ($idx, $key) { if ($this->onRejected) { call_user_func( - $this->onRejected, $reason, $idx, $this->aggregate + $this->onRejected, + $reason, + $key, + $this->aggregate ); } $this->step($idx); @@ -201,7 +226,7 @@ class EachPromise implements PromisorInterface private function step($idx) { // If the promise was already resolved, then ignore this step. - if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + if (Is::settled($this->aggregate)) { return; } diff --git a/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/vendor/guzzlehttp/promises/src/FulfilledPromise.php index dbbeeb9f..98f72a62 100644 --- a/vendor/guzzlehttp/promises/src/FulfilledPromise.php +++ b/vendor/guzzlehttp/promises/src/FulfilledPromise.php @@ -1,4 +1,5 @@ value = $value; @@ -30,11 +32,11 @@ class FulfilledPromise implements PromiseInterface return $this; } - $queue = queue(); + $queue = Utils::queue(); $p = new Promise([$queue, 'run']); $value = $this->value; $queue->add(static function () use ($p, $value, $onFulfilled) { - if ($p->getState() === self::PENDING) { + if (Is::pending($p)) { try { $p->resolve($onFulfilled($value)); } catch (\Throwable $e) { diff --git a/vendor/guzzlehttp/promises/src/Is.php b/vendor/guzzlehttp/promises/src/Is.php new file mode 100644 index 00000000..c3ed8d01 --- /dev/null +++ b/vendor/guzzlehttp/promises/src/Is.php @@ -0,0 +1,46 @@ +getState() === PromiseInterface::PENDING; + } + + /** + * Returns true if a promise is fulfilled or rejected. + * + * @return bool + */ + public static function settled(PromiseInterface $promise) + { + return $promise->getState() !== PromiseInterface::PENDING; + } + + /** + * Returns true if a promise is fulfilled. + * + * @return bool + */ + public static function fulfilled(PromiseInterface $promise) + { + return $promise->getState() === PromiseInterface::FULFILLED; + } + + /** + * Returns true if a promise is rejected. + * + * @return bool + */ + public static function rejected(PromiseInterface $promise) + { + return $promise->getState() === PromiseInterface::REJECTED; + } +} diff --git a/vendor/guzzlehttp/promises/src/Promise.php b/vendor/guzzlehttp/promises/src/Promise.php index 844ada07..75939057 100644 --- a/vendor/guzzlehttp/promises/src/Promise.php +++ b/vendor/guzzlehttp/promises/src/Promise.php @@ -1,4 +1,5 @@ state === self::FULFILLED) { - return $onFulfilled - ? promise_for($this->result)->then($onFulfilled) - : promise_for($this->result); + $promise = Create::promiseFor($this->result); + return $onFulfilled ? $promise->then($onFulfilled) : $promise; } // It's either cancelled or rejected, so return a rejected promise // and immediately invoke any callbacks. - $rejection = rejection_for($this->result); + $rejection = Create::rejectionFor($this->result); return $onRejected ? $rejection->then(null, $onRejected) : $rejection; } @@ -61,19 +61,15 @@ class Promise implements PromiseInterface { $this->waitIfPending(); - $inner = $this->result instanceof PromiseInterface - ? $this->result->wait($unwrap) - : $this->result; - + if ($this->result instanceof PromiseInterface) { + return $this->result->wait($unwrap); + } if ($unwrap) { - if ($this->result instanceof PromiseInterface - || $this->state === self::FULFILLED - ) { - return $inner; - } else { - // It's rejected so "unwrap" and throw an exception. - throw exception_for($inner); + if ($this->state === self::FULFILLED) { + return $this->result; } + // It's rejected so "unwrap" and throw an exception. + throw Create::exceptionFor($this->result); } } @@ -103,6 +99,7 @@ class Promise implements PromiseInterface } // Reject the promise only if it wasn't rejected in a then callback. + /** @psalm-suppress RedundantCondition */ if ($this->state === self::PENDING) { $this->reject(new CancellationException('Promise has been cancelled')); } @@ -148,17 +145,15 @@ class Promise implements PromiseInterface // If the value was not a settled promise or a thenable, then resolve // it in the task queue using the correct ID. - if (!method_exists($value, 'then')) { + if (!is_object($value) || !method_exists($value, 'then')) { $id = $state === self::FULFILLED ? 1 : 2; // It's a success, so resolve the handlers in the queue. - queue()->add(static function () use ($id, $value, $handlers) { + Utils::queue()->add(static function () use ($id, $value, $handlers) { foreach ($handlers as $handler) { self::callHandler($id, $value, $handler); } }); - } elseif ($value instanceof Promise - && $value->getState() === self::PENDING - ) { + } elseif ($value instanceof Promise && Is::pending($value)) { // We can just merge our handlers onto the next promise. $value->handlers = array_merge($value->handlers, $handlers); } else { @@ -184,8 +179,6 @@ class Promise implements PromiseInterface * @param int $index 1 (resolve) or 2 (reject). * @param mixed $value Value to pass to the callback. * @param array $handler Array of handler data (promise and callbacks). - * - * @return array Returns the next group to resolve. */ private static function callHandler($index, $value, array $handler) { @@ -194,13 +187,21 @@ class Promise implements PromiseInterface // The promise may have been cancelled or resolved before placing // this thunk in the queue. - if ($promise->getState() !== self::PENDING) { + if (Is::settled($promise)) { return; } try { if (isset($handler[$index])) { - $promise->resolve($handler[$index]($value)); + /* + * If $f throws an exception, then $handler will be in the exception + * stack trace. Since $handler contains a reference to the callable + * itself we get a circular reference. We clear the $handler + * here to avoid that memory leak. + */ + $f = $handler[$index]; + unset($handler); + $promise->resolve($f($value)); } elseif ($index === 1) { // Forward resolution values as-is. $promise->resolve($value); @@ -224,15 +225,16 @@ class Promise implements PromiseInterface } elseif ($this->waitList) { $this->invokeWaitList(); } else { - // If there's not wait function, then reject the promise. + // If there's no wait function, then reject the promise. $this->reject('Cannot wait on a promise that has ' . 'no internal wait function. You must provide a wait ' . 'function when constructing the promise to be able to ' . 'wait on a promise.'); } - queue()->run(); + Utils::queue()->run(); + /** @psalm-suppress RedundantCondition */ if ($this->state === self::PENDING) { $this->reject('Invoking the wait callback did not resolve the promise'); } @@ -263,17 +265,13 @@ class Promise implements PromiseInterface $this->waitList = null; foreach ($waitList as $result) { - while (true) { + do { $result->waitIfPending(); + $result = $result->result; + } while ($result instanceof Promise); - if ($result->result instanceof Promise) { - $result = $result->result; - } else { - if ($result->result instanceof PromiseInterface) { - $result->result->wait(false); - } - break; - } + if ($result instanceof PromiseInterface) { + $result->wait(false); } } } diff --git a/vendor/guzzlehttp/promises/src/PromiseInterface.php b/vendor/guzzlehttp/promises/src/PromiseInterface.php index 8f5f4b99..e5983314 100644 --- a/vendor/guzzlehttp/promises/src/PromiseInterface.php +++ b/vendor/guzzlehttp/promises/src/PromiseInterface.php @@ -1,4 +1,5 @@ reason = $reason; @@ -30,11 +32,11 @@ class RejectedPromise implements PromiseInterface return $this; } - $queue = queue(); + $queue = Utils::queue(); $reason = $this->reason; $p = new Promise([$queue, 'run']); $queue->add(static function () use ($p, $reason, $onRejected) { - if ($p->getState() === self::PENDING) { + if (Is::pending($p)) { try { // Return a resolved promise if onRejected does not throw. $p->resolve($onRejected($reason)); @@ -59,8 +61,10 @@ class RejectedPromise implements PromiseInterface public function wait($unwrap = true, $defaultDelivery = null) { if ($unwrap) { - throw exception_for($this->reason); + throw Create::exceptionFor($this->reason); } + + return null; } public function getState() diff --git a/vendor/guzzlehttp/promises/src/RejectionException.php b/vendor/guzzlehttp/promises/src/RejectionException.php index 07c1136d..e2f13770 100644 --- a/vendor/guzzlehttp/promises/src/RejectionException.php +++ b/vendor/guzzlehttp/promises/src/RejectionException.php @@ -1,4 +1,5 @@ run(); + * GuzzleHttp\Promise\Utils::queue()->run(); */ class TaskQueue implements TaskQueueInterface { @@ -42,8 +43,8 @@ class TaskQueue implements TaskQueueInterface public function run() { - /** @var callable $task */ while ($task = array_shift($this->queue)) { + /** @var callable $task */ $task(); } } diff --git a/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/vendor/guzzlehttp/promises/src/TaskQueueInterface.php index ac8306e1..723d4d54 100644 --- a/vendor/guzzlehttp/promises/src/TaskQueueInterface.php +++ b/vendor/guzzlehttp/promises/src/TaskQueueInterface.php @@ -1,4 +1,5 @@ + * while ($eventLoop->isRunning()) { + * GuzzleHttp\Promise\Utils::queue()->run(); + * } + * + * + * @param TaskQueueInterface $assign Optionally specify a new queue instance. + * + * @return TaskQueueInterface + */ + public static function queue(TaskQueueInterface $assign = null) + { + static $queue; + + if ($assign) { + $queue = $assign; + } elseif (!$queue) { + $queue = new TaskQueue(); + } + + return $queue; + } + + /** + * Adds a function to run in the task queue when it is next `run()` and + * returns a promise that is fulfilled or rejected with the result. + * + * @param callable $task Task function to run. + * + * @return PromiseInterface + */ + public static function task(callable $task) + { + $queue = self::queue(); + $promise = new Promise([$queue, 'run']); + $queue->add(function () use ($task, $promise) { + try { + $promise->resolve($task()); + } catch (\Throwable $e) { + $promise->reject($e); + } catch (\Exception $e) { + $promise->reject($e); + } + }); + + return $promise; + } + + /** + * Synchronously waits on a promise to resolve and returns an inspection + * state array. + * + * Returns a state associative array containing a "state" key mapping to a + * valid promise state. If the state of the promise is "fulfilled", the + * array will contain a "value" key mapping to the fulfilled value of the + * promise. If the promise is rejected, the array will contain a "reason" + * key mapping to the rejection reason of the promise. + * + * @param PromiseInterface $promise Promise or value. + * + * @return array + */ + public static function inspect(PromiseInterface $promise) + { + try { + return [ + 'state' => PromiseInterface::FULFILLED, + 'value' => $promise->wait() + ]; + } catch (RejectionException $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; + } catch (\Throwable $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } catch (\Exception $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } + } + + /** + * Waits on all of the provided promises, but does not unwrap rejected + * promises as thrown exception. + * + * Returns an array of inspection state arrays. + * + * @see inspect for the inspection state array format. + * + * @param PromiseInterface[] $promises Traversable of promises to wait upon. + * + * @return array + */ + public static function inspectAll($promises) + { + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = inspect($promise); + } + + return $results; + } + + /** + * Waits on all of the provided promises and returns the fulfilled values. + * + * Returns an array that contains the value of each promise (in the same + * order the promises were provided). An exception is thrown if any of the + * promises are rejected. + * + * @param iterable $promises Iterable of PromiseInterface objects to wait on. + * + * @return array + * + * @throws \Exception on error + * @throws \Throwable on error in PHP >=7 + */ + public static function unwrap($promises) + { + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = $promise->wait(); + } + + return $results; + } + + /** + * Given an array of promises, return a promise that is fulfilled when all + * the items in the array are fulfilled. + * + * The promise's fulfillment value is an array with fulfillment values at + * respective positions to the original array. If any promise in the array + * rejects, the returned promise is rejected with the rejection reason. + * + * @param mixed $promises Promises or values. + * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. + * + * @return PromiseInterface + */ + public static function all($promises, $recursive = false) + { + $results = []; + $promise = Each::of( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = $value; + }, + function ($reason, $idx, Promise $aggregate) { + $aggregate->reject($reason); + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); + + if (true === $recursive) { + $promise = $promise->then(function ($results) use ($recursive, &$promises) { + foreach ($promises as $promise) { + if (Is::pending($promise)) { + return self::all($promises, $recursive); + } + } + return $results; + }); + } + + return $promise; + } + + /** + * Initiate a competitive race between multiple promises or values (values + * will become immediately fulfilled promises). + * + * When count amount of promises have been fulfilled, the returned promise + * is fulfilled with an array that contains the fulfillment values of the + * winners in order of resolution. + * + * This promise is rejected with a {@see AggregateException} if the number + * of fulfilled promises is less than the desired $count. + * + * @param int $count Total number of promises. + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ + public static function some($count, $promises) + { + $results = []; + $rejections = []; + + return Each::of( + $promises, + function ($value, $idx, PromiseInterface $p) use (&$results, $count) { + if (Is::settled($p)) { + return; + } + $results[$idx] = $value; + if (count($results) >= $count) { + $p->resolve(null); + } + }, + function ($reason) use (&$rejections) { + $rejections[] = $reason; + } + )->then( + function () use (&$results, &$rejections, $count) { + if (count($results) !== $count) { + throw new AggregateException( + 'Not enough promises to fulfill count', + $rejections + ); + } + ksort($results); + return array_values($results); + } + ); + } + + /** + * Like some(), with 1 as count. However, if the promise fulfills, the + * fulfillment value is not an array of 1 but the value directly. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ + public static function any($promises) + { + return self::some(1, $promises)->then(function ($values) { + return $values[0]; + }); + } + + /** + * Returns a promise that is fulfilled when all of the provided promises have + * been fulfilled or rejected. + * + * The returned promise is fulfilled with an array of inspection state arrays. + * + * @see inspect for the inspection state array format. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ + public static function settle($promises) + { + $results = []; + + return Each::of( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; + }, + function ($reason, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); + } +} diff --git a/vendor/guzzlehttp/promises/src/functions.php b/vendor/guzzlehttp/promises/src/functions.php index 4e27709a..c03d39d0 100644 --- a/vendor/guzzlehttp/promises/src/functions.php +++ b/vendor/guzzlehttp/promises/src/functions.php @@ -1,4 +1,5 @@ add(function () use ($task, $promise) { - try { - $promise->resolve($task()); - } catch (\Throwable $e) { - $promise->reject($e); - } catch (\Exception $e) { - $promise->reject($e); - } - }); - - return $promise; + return Utils::task($task); } /** @@ -62,23 +47,12 @@ function task(callable $task) * @param mixed $value Promise or value. * * @return PromiseInterface + * + * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead. */ function promise_for($value) { - if ($value instanceof PromiseInterface) { - return $value; - } - - // Return a Guzzle promise that shadows the given promise. - if (method_exists($value, 'then')) { - $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null; - $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null; - $promise = new Promise($wfn, $cfn); - $value->then([$promise, 'resolve'], [$promise, 'reject']); - return $promise; - } - - return new FulfilledPromise($value); + return Create::promiseFor($value); } /** @@ -88,14 +62,12 @@ function promise_for($value) * @param mixed $reason Promise or reason. * * @return PromiseInterface + * + * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead. */ function rejection_for($reason) { - if ($reason instanceof PromiseInterface) { - return $reason; - } - - return new RejectedPromise($reason); + return Create::rejectionFor($reason); } /** @@ -104,12 +76,12 @@ function rejection_for($reason) * @param mixed $reason * * @return \Exception|\Throwable + * + * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead. */ function exception_for($reason) { - return $reason instanceof \Exception || $reason instanceof \Throwable - ? $reason - : new RejectionException($reason); + return Create::exceptionFor($reason); } /** @@ -118,16 +90,12 @@ function exception_for($reason) * @param mixed $value * * @return \Iterator + * + * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead. */ function iter_for($value) { - if ($value instanceof \Iterator) { - return $value; - } elseif (is_array($value)) { - return new \ArrayIterator($value); - } else { - return new \ArrayIterator([$value]); - } + return Create::iterFor($value); } /** @@ -143,21 +111,12 @@ function iter_for($value) * @param PromiseInterface $promise Promise or value. * * @return array + * + * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead. */ function inspect(PromiseInterface $promise) { - try { - return [ - 'state' => PromiseInterface::FULFILLED, - 'value' => $promise->wait() - ]; - } catch (RejectionException $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; - } catch (\Throwable $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; - } catch (\Exception $e) { - return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; - } + return Utils::inspect($promise); } /** @@ -166,19 +125,17 @@ function inspect(PromiseInterface $promise) * * Returns an array of inspection state arrays. * + * @see inspect for the inspection state array format. + * * @param PromiseInterface[] $promises Traversable of promises to wait upon. * * @return array - * @see GuzzleHttp\Promise\inspect for the inspection state array format. + * + * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead. */ function inspect_all($promises) { - $results = []; - foreach ($promises as $key => $promise) { - $results[$key] = inspect($promise); - } - - return $results; + return Utils::inspectAll($promises); } /** @@ -188,20 +145,18 @@ function inspect_all($promises) * the promises were provided). An exception is thrown if any of the promises * are rejected. * - * @param mixed $promises Iterable of PromiseInterface objects to wait on. + * @param iterable $promises Iterable of PromiseInterface objects to wait on. * * @return array + * * @throws \Exception on error * @throws \Throwable on error in PHP >=7 + * + * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead. */ function unwrap($promises) { - $results = []; - foreach ($promises as $key => $promise) { - $results[$key] = $promise->wait(); - } - - return $results; + return Utils::unwrap($promises); } /** @@ -212,25 +167,16 @@ function unwrap($promises) * respective positions to the original array. If any promise in the array * rejects, the returned promise is rejected with the rejection reason. * - * @param mixed $promises Promises or values. + * @param mixed $promises Promises or values. + * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. * * @return PromiseInterface + * + * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead. */ -function all($promises) +function all($promises, $recursive = false) { - $results = []; - return each( - $promises, - function ($value, $idx) use (&$results) { - $results[$idx] = $value; - }, - function ($reason, $idx, Promise $aggregate) { - $aggregate->reject($reason); - } - )->then(function () use (&$results) { - ksort($results); - return $results; - }); + return Utils::all($promises, $recursive); } /** @@ -241,45 +187,19 @@ function all($promises) * fulfilled with an array that contains the fulfillment values of the winners * in order of resolution. * - * This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException} - * if the number of fulfilled promises is less than the desired $count. + * This promise is rejected with a {@see AggregateException} if the number of + * fulfilled promises is less than the desired $count. * * @param int $count Total number of promises. * @param mixed $promises Promises or values. * * @return PromiseInterface + * + * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead. */ function some($count, $promises) { - $results = []; - $rejections = []; - - return each( - $promises, - function ($value, $idx, PromiseInterface $p) use (&$results, $count) { - if ($p->getState() !== PromiseInterface::PENDING) { - return; - } - $results[$idx] = $value; - if (count($results) >= $count) { - $p->resolve(null); - } - }, - function ($reason) use (&$rejections) { - $rejections[] = $reason; - } - )->then( - function () use (&$results, &$rejections, $count) { - if (count($results) !== $count) { - throw new AggregateException( - 'Not enough promises to fulfill count', - $rejections - ); - } - ksort($results); - return array_values($results); - } - ); + return Utils::some($count, $promises); } /** @@ -289,10 +209,12 @@ function some($count, $promises) * @param mixed $promises Promises or values. * * @return PromiseInterface + * + * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead. */ function any($promises) { - return some(1, $promises)->then(function ($values) { return $values[0]; }); + return Utils::any($promises); } /** @@ -301,27 +223,17 @@ function any($promises) * * The returned promise is fulfilled with an array of inspection state arrays. * + * @see inspect for the inspection state array format. + * * @param mixed $promises Promises or values. * * @return PromiseInterface - * @see GuzzleHttp\Promise\inspect for the inspection state array format. + * + * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead. */ function settle($promises) { - $results = []; - - return each( - $promises, - function ($value, $idx) use (&$results) { - $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; - }, - function ($reason, $idx) use (&$results) { - $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; - } - )->then(function () use (&$results) { - ksort($results); - return $results; - }); + return Utils::settle($promises); } /** @@ -329,29 +241,28 @@ function settle($promises) * fulfilled with a null value when the iterator has been consumed or the * aggregate promise has been fulfilled or rejected. * - * $onFulfilled is a function that accepts the fulfilled value, iterator - * index, and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate promise if needed. + * $onFulfilled is a function that accepts the fulfilled value, iterator index, + * and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate if needed. * - * $onRejected is a function that accepts the rejection reason, iterator - * index, and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate promise if needed. + * $onRejected is a function that accepts the rejection reason, iterator index, + * and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate if needed. * * @param mixed $iterable Iterator or array to iterate over. * @param callable $onFulfilled * @param callable $onRejected * * @return PromiseInterface + * + * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead. */ function each( $iterable, callable $onFulfilled = null, callable $onRejected = null ) { - return (new EachPromise($iterable, [ - 'fulfilled' => $onFulfilled, - 'rejected' => $onRejected - ]))->promise(); + return Each::of($iterable, $onFulfilled, $onRejected); } /** @@ -368,6 +279,8 @@ function each( * @param callable $onRejected * * @return PromiseInterface + * + * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead. */ function each_limit( $iterable, @@ -375,11 +288,7 @@ function each_limit( callable $onFulfilled = null, callable $onRejected = null ) { - return (new EachPromise($iterable, [ - 'fulfilled' => $onFulfilled, - 'rejected' => $onRejected, - 'concurrency' => $concurrency - ]))->promise(); + return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected); } /** @@ -392,66 +301,63 @@ function each_limit( * @param callable $onFulfilled * * @return PromiseInterface + * + * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead. */ function each_limit_all( $iterable, $concurrency, callable $onFulfilled = null ) { - return each_limit( - $iterable, - $concurrency, - $onFulfilled, - function ($reason, $idx, PromiseInterface $aggregate) { - $aggregate->reject($reason); - } - ); + return Each::ofLimitAll($iterable, $concurrency, $onFulfilled); } /** * Returns true if a promise is fulfilled. * - * @param PromiseInterface $promise - * * @return bool + * + * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead. */ function is_fulfilled(PromiseInterface $promise) { - return $promise->getState() === PromiseInterface::FULFILLED; + return Is::fulfilled($promise); } /** * Returns true if a promise is rejected. * - * @param PromiseInterface $promise - * * @return bool + * + * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead. */ function is_rejected(PromiseInterface $promise) { - return $promise->getState() === PromiseInterface::REJECTED; + return Is::rejected($promise); } /** * Returns true if a promise is fulfilled or rejected. * - * @param PromiseInterface $promise - * * @return bool + * + * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead. */ function is_settled(PromiseInterface $promise) { - return $promise->getState() !== PromiseInterface::PENDING; + return Is::settled($promise); } /** + * Create a new coroutine. + * * @see Coroutine * - * @param callable $generatorFn - * * @return PromiseInterface + * + * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead. */ function coroutine(callable $generatorFn) { - return new Coroutine($generatorFn); + return Coroutine::of($generatorFn); } diff --git a/vendor/guzzlehttp/psr7/.github/workflows/bc.yml b/vendor/guzzlehttp/psr7/.github/workflows/bc.yml new file mode 100644 index 00000000..9eaedbce --- /dev/null +++ b/vendor/guzzlehttp/psr7/.github/workflows/bc.yml @@ -0,0 +1,16 @@ +name: BC Check + +on: + pull_request: + +jobs: + roave-bc-check: + name: Roave BC Check + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Roave BC Check + uses: docker://nyholm/roave-bc-check-ga diff --git a/vendor/guzzlehttp/psr7/.github/workflows/ci.yml b/vendor/guzzlehttp/psr7/.github/workflows/ci.yml new file mode 100644 index 00000000..da7414e5 --- /dev/null +++ b/vendor/guzzlehttp/psr7/.github/workflows/ci.yml @@ -0,0 +1,30 @@ +name: CI + +on: + pull_request: + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + max-parallel: 10 + matrix: + php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4'] + + steps: + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: 'none' + extensions: mbstring + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install dependencies + run: composer update --no-interaction --no-progress --prefer-dist + + - name: Run tests + run: make test diff --git a/vendor/guzzlehttp/psr7/.github/workflows/integration.yml b/vendor/guzzlehttp/psr7/.github/workflows/integration.yml new file mode 100644 index 00000000..b6e0eb24 --- /dev/null +++ b/vendor/guzzlehttp/psr7/.github/workflows/integration.yml @@ -0,0 +1,37 @@ +name: Integration + +on: + pull_request: + +jobs: + + build: + name: Test + runs-on: ubuntu-latest + strategy: + max-parallel: 10 + matrix: + php: ['7.2', '7.3', '7.4', '8.0'] + + steps: + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Download dependencies + uses: ramsey/composer-install@v1 + with: + composer-options: --no-interaction --prefer-dist --optimize-autoloader + + - name: Start server + run: php -S 127.0.0.1:10002 tests/Integration/server.php & + + - name: Run tests + env: + TEST_SERVER: 127.0.0.1:10002 + run: ./vendor/bin/phpunit --testsuite Integration diff --git a/vendor/guzzlehttp/psr7/.github/workflows/static.yml b/vendor/guzzlehttp/psr7/.github/workflows/static.yml new file mode 100644 index 00000000..ab4d68ba --- /dev/null +++ b/vendor/guzzlehttp/psr7/.github/workflows/static.yml @@ -0,0 +1,29 @@ +name: Static analysis + +on: + pull_request: + +jobs: + php-cs-fixer: + name: PHP-CS-Fixer + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + coverage: none + extensions: mbstring + + - name: Download dependencies + run: composer update --no-interaction --no-progress + + - name: Download PHP CS Fixer + run: composer require "friendsofphp/php-cs-fixer:2.18.4" + + - name: Execute PHP CS Fixer + run: vendor/bin/php-cs-fixer fix --diff-format udiff --dry-run diff --git a/vendor/guzzlehttp/psr7/.php_cs.dist b/vendor/guzzlehttp/psr7/.php_cs.dist new file mode 100644 index 00000000..e4f0bd53 --- /dev/null +++ b/vendor/guzzlehttp/psr7/.php_cs.dist @@ -0,0 +1,56 @@ +setRiskyAllowed(true) + ->setRules([ + '@PSR2' => true, + 'array_syntax' => ['syntax' => 'short'], + 'concat_space' => ['spacing' => 'one'], + 'declare_strict_types' => false, + 'final_static_access' => true, + 'fully_qualified_strict_types' => true, + 'header_comment' => false, + 'is_null' => ['use_yoda_style' => true], + 'list_syntax' => ['syntax' => 'long'], + 'lowercase_cast' => true, + 'magic_method_casing' => true, + 'modernize_types_casting' => true, + 'multiline_comment_opening_closing' => true, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_leading_import_slash' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_unset_cast' => true, + 'no_unused_imports' => true, + 'no_whitespace_in_blank_line' => true, + 'ordered_imports' => true, + 'php_unit_ordered_covers' => true, + 'php_unit_test_annotation' => ['style' => 'prefix'], + 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], + 'phpdoc_align' => ['align' => 'vertical'], + 'phpdoc_no_useless_inheritdoc' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => true, + 'phpdoc_types_order' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'], + 'phpdoc_var_without_name' => true, + 'single_trait_insert_per_statement' => true, + 'standardize_not_equals' => true, + ]) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') + ->name('*.php') + ) +; + +return $config; diff --git a/vendor/guzzlehttp/psr7/CHANGELOG.md b/vendor/guzzlehttp/psr7/CHANGELOG.md index 8a3743db..6a6b7bf9 100644 --- a/vendor/guzzlehttp/psr7/CHANGELOG.md +++ b/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -7,10 +7,59 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [Unreleased] +## Unreleased + +## 1.8.2 - 2021-04-26 + +### Fixed + +- Handle possibly unset `url` in `stream_get_meta_data` + +## 1.8.1 - 2021-03-21 + +### Fixed + +- Issue parsing IPv6 URLs +- Issue modifying ServerRequest lost all its attributes + +## 1.8.0 - 2021-03-21 + +### Added + +- Locale independent URL parsing +- Most classes got a `@final` annotation to prepare for 2.0 + +### Fixed + +- Issue when creating stream from `php://input` and curl-ext is not installed +- Broken `Utils::tryFopen()` on PHP 8 + +## 1.7.0 - 2020-09-30 + +### Added + +- Replaced functions by static methods + +### Fixed + +- Converting a non-seekable stream to a string +- Handle multiple Set-Cookie correctly +- Ignore array keys in header values when merging +- Allow multibyte characters to be parsed in `Message:bodySummary()` + +### Changed + +- Restored partial HHVM 3 support -## [1.6.0] +## [1.6.1] - 2019-07-02 + +### Fixed + +- Accept null and bool header values again + + +## [1.6.0] - 2019-06-30 ### Added @@ -229,7 +278,6 @@ Currently unsupported: -[Unreleased]: https://github.com/guzzle/psr7/compare/1.6.0...HEAD [1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0 [1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2 [1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1 diff --git a/vendor/guzzlehttp/psr7/README.md b/vendor/guzzlehttp/psr7/README.md index c60a6a38..acfabfdc 100644 --- a/vendor/guzzlehttp/psr7/README.md +++ b/vendor/guzzlehttp/psr7/README.md @@ -23,11 +23,11 @@ Reads from multiple streams, one after the other. ```php use GuzzleHttp\Psr7; -$a = Psr7\stream_for('abc, '); -$b = Psr7\stream_for('123.'); +$a = Psr7\Utils::streamFor('abc, '); +$b = Psr7\Utils::streamFor('123.'); $composed = new Psr7\AppendStream([$a, $b]); -$composed->addStream(Psr7\stream_for(' Above all listen to me')); +$composed->addStream(Psr7\Utils::streamFor(' Above all listen to me')); echo $composed; // abc, 123. Above all listen to me. ``` @@ -65,7 +65,7 @@ then on disk. ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for(fopen('http://www.google.com', 'r')); +$original = Psr7\Utils::streamFor(fopen('http://www.google.com', 'r')); $stream = new Psr7\CachingStream($original); $stream->read(1024); @@ -89,7 +89,7 @@ stream becomes too full. use GuzzleHttp\Psr7; // Create an empty stream -$stream = Psr7\stream_for(); +$stream = Psr7\Utils::streamFor(); // Start dropping data when the stream has more than 10 bytes $dropping = new Psr7\DroppingStream($stream, 10); @@ -112,7 +112,7 @@ to create a concrete class for a simple extension point. use GuzzleHttp\Psr7; -$stream = Psr7\stream_for('hi'); +$stream = Psr7\Utils::streamFor('hi'); $fnStream = Psr7\FnStream::decorate($stream, [ 'rewind' => function () use ($stream) { echo 'About to rewind - '; @@ -167,7 +167,7 @@ chunks (e.g. Amazon S3's multipart upload API). ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+')); +$original = Psr7\Utils::streamFor(fopen('/tmp/test.txt', 'r+')); echo $original->getSize(); // >>> 1048576 @@ -197,7 +197,7 @@ NoSeekStream wraps a stream and does not allow seeking. ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for('foo'); +$original = Psr7\Utils::streamFor('foo'); $noSeek = new Psr7\NoSeekStream($original); echo $noSeek->read(3); @@ -271,7 +271,7 @@ This decorator could be added to any existing stream and used like so: ```php use GuzzleHttp\Psr7; -$original = Psr7\stream_for('foo'); +$original = Psr7\Utils::streamFor('foo'); $eofStream = new EofCallbackStream($original, function () { echo 'EOF!'; @@ -297,53 +297,189 @@ stream from a PSR-7 stream. ```php use GuzzleHttp\Psr7\StreamWrapper; -$stream = GuzzleHttp\Psr7\stream_for('hello!'); +$stream = GuzzleHttp\Psr7\Utils::streamFor('hello!'); $resource = StreamWrapper::getResource($stream); echo fread($resource, 6); // outputs hello! ``` -# Function API +# Static API -There are various functions available under the `GuzzleHttp\Psr7` namespace. +There are various static methods available under the `GuzzleHttp\Psr7` namespace. -## `function str` +## `GuzzleHttp\Psr7\Message::toString` -`function str(MessageInterface $message)` +`public static function toString(MessageInterface $message): string` Returns the string representation of an HTTP message. ```php $request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com'); -echo GuzzleHttp\Psr7\str($request); +echo GuzzleHttp\Psr7\Message::toString($request); ``` -## `function uri_for` +## `GuzzleHttp\Psr7\Message::bodySummary` -`function uri_for($uri)` +`public static function bodySummary(MessageInterface $message, int $truncateAt = 120): string|null` -This function accepts a string or `Psr\Http\Message\UriInterface` and returns a -UriInterface for the given value. If the value is already a `UriInterface`, it -is returned as-is. +Get a short summary of the message body. -```php -$uri = GuzzleHttp\Psr7\uri_for('http://example.com'); -assert($uri === GuzzleHttp\Psr7\uri_for($uri)); -``` +Will return `null` if the response is not printable. -## `function stream_for` +## `GuzzleHttp\Psr7\Message::rewindBody` -`function stream_for($resource = '', array $options = [])` +`public static function rewindBody(MessageInterface $message): void` + +Attempts to rewind a message body and throws an exception on failure. + +The body of the message will only be rewound if a call to `tell()` +returns a value other than `0`. + + +## `GuzzleHttp\Psr7\Message::parseMessage` + +`public static function parseMessage(string $message): array` + +Parses an HTTP message into an associative array. + +The array contains the "start-line" key containing the start line of +the message, "headers" key containing an associative array of header +array values, and a "body" key containing the body of the message. + + +## `GuzzleHttp\Psr7\Message::parseRequestUri` + +`public static function parseRequestUri(string $path, array $headers): string` + +Constructs a URI for an HTTP request message. + + +## `GuzzleHttp\Psr7\Message::parseRequest` + +`public static function parseRequest(string $message): Request` + +Parses a request message string into a request object. + + +## `GuzzleHttp\Psr7\Message::parseResponse` + +`public static function parseResponse(string $message): Response` + +Parses a response message string into a response object. + + +## `GuzzleHttp\Psr7\Header::parse` + +`public static function parse(string|array $header): array` + +Parse an array of header values containing ";" separated data into an +array of associative arrays representing the header key value pair data +of the header. When a parameter does not contain a value, but just +contains a key, this function will inject a key with a '' string value. + + +## `GuzzleHttp\Psr7\Header::normalize` + +`public static function normalize(string|array $header): array` + +Converts an array of header values that may contain comma separated +headers into an array of headers with no comma separated values. + + +## `GuzzleHttp\Psr7\Query::parse` + +`public static function parse(string $str, int|bool $urlEncoding = true): array` + +Parse a query string into an associative array. + +If multiple values are found for the same key, the value of that key +value pair will become an array. This function does not parse nested +PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2` +will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`. + + +## `GuzzleHttp\Psr7\Query::build` + +`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986): string` + +Build a query string from an array of key value pairs. + +This function can use the return value of `parse()` to build a query +string. This function does not modify the provided keys when an array is +encountered (like `http_build_query()` would). + + +## `GuzzleHttp\Psr7\Utils::caselessRemove` + +`public static function caselessRemove(iterable $keys, $keys, array $data): array` + +Remove the items given by the keys, case insensitively from the data. + + +## `GuzzleHttp\Psr7\Utils::copyToStream` + +`public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void` + +Copy the contents of a stream into another stream until the given number +of bytes have been read. + + +## `GuzzleHttp\Psr7\Utils::copyToString` + +`public static function copyToString(StreamInterface $stream, int $maxLen = -1): string` + +Copy the contents of a stream into a string until the given number of +bytes have been read. + + +## `GuzzleHttp\Psr7\Utils::hash` + +`public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string` + +Calculate a hash of a stream. + +This method reads the entire stream to calculate a rolling hash, based on +PHP's `hash_init` functions. + + +## `GuzzleHttp\Psr7\Utils::modifyRequest` + +`public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface` + +Clone and modify a request with the given changes. + +This method is useful for reducing the number of clones needed to mutate +a message. + +- method: (string) Changes the HTTP method. +- set_headers: (array) Sets the given headers. +- remove_headers: (array) Remove the given headers. +- body: (mixed) Sets the given body. +- uri: (UriInterface) Set the URI. +- query: (string) Set the query string value of the URI. +- version: (string) Set the protocol version. + + +## `GuzzleHttp\Psr7\Utils::readLine` + +`public static function readLine(StreamInterface $stream, int $maxLength = null): string` + +Read a line from the stream up to the maximum allowed buffer length. + + +## `GuzzleHttp\Psr7\Utils::streamFor` + +`public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource = '', array $options = []): StreamInterface` Create a new stream based on the input type. Options is an associative array that can contain the following keys: -* - metadata: Array of custom metadata. -* - size: Size of the stream. +- metadata: Array of custom metadata. +- size: Size of the stream. This method accepts the following `$resource` types: @@ -369,8 +505,8 @@ This method accepts the following `$resource` types: buffered and used in subsequent reads. ```php -$stream = GuzzleHttp\Psr7\stream_for('foo'); -$stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r')); +$stream = GuzzleHttp\Psr7\Utils::streamFor('foo'); +$stream = GuzzleHttp\Psr7\Utils::streamFor(fopen('/path/to/file', 'r')); $generator = function ($bytes) { for ($i = 0; $i < $bytes; $i++) { @@ -378,147 +514,75 @@ $generator = function ($bytes) { } } -$stream = GuzzleHttp\Psr7\stream_for($generator(100)); +$stream = GuzzleHttp\Psr7\Utils::streamFor($generator(100)); ``` -## `function parse_header` +## `GuzzleHttp\Psr7\Utils::tryFopen` -`function parse_header($header)` - -Parse an array of header values containing ";" separated data into an array of -associative arrays representing the header key value pair data of the header. -When a parameter does not contain a value, but just contains a key, this -function will inject a key with a '' string value. - - -## `function normalize_header` - -`function normalize_header($header)` - -Converts an array of header values that may contain comma separated headers -into an array of headers with no comma separated values. - - -## `function modify_request` - -`function modify_request(RequestInterface $request, array $changes)` - -Clone and modify a request with the given changes. This method is useful for -reducing the number of clones needed to mutate a message. - -The changes can be one of: - -- method: (string) Changes the HTTP method. -- set_headers: (array) Sets the given headers. -- remove_headers: (array) Remove the given headers. -- body: (mixed) Sets the given body. -- uri: (UriInterface) Set the URI. -- query: (string) Set the query string value of the URI. -- version: (string) Set the protocol version. - - -## `function rewind_body` - -`function rewind_body(MessageInterface $message)` - -Attempts to rewind a message body and throws an exception on failure. The body -of the message will only be rewound if a call to `tell()` returns a value other -than `0`. - - -## `function try_fopen` - -`function try_fopen($filename, $mode)` +`public static function tryFopen(string $filename, string $mode): resource` Safely opens a PHP stream resource using a filename. -When fopen fails, PHP normally raises a warning. This function adds an error -handler that checks for errors and throws an exception instead. +When fopen fails, PHP normally raises a warning. This function adds an +error handler that checks for errors and throws an exception instead. -## `function copy_to_string` +## `GuzzleHttp\Psr7\Utils::uriFor` -`function copy_to_string(StreamInterface $stream, $maxLen = -1)` +`public static function uriFor(string|UriInterface $uri): UriInterface` -Copy the contents of a stream into a string until the given number of bytes -have been read. +Returns a UriInterface for the given value. + +This function accepts a string or UriInterface and returns a +UriInterface for the given value. If the value is already a +UriInterface, it is returned as-is. -## `function copy_to_stream` +## `GuzzleHttp\Psr7\MimeType::fromFilename` -`function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1)` - -Copy the contents of a stream into another stream until the given number of -bytes have been read. - - -## `function hash` - -`function hash(StreamInterface $stream, $algo, $rawOutput = false)` - -Calculate a hash of a Stream. This method reads the entire stream to calculate -a rolling hash (based on PHP's hash_init functions). - - -## `function readline` - -`function readline(StreamInterface $stream, $maxLength = null)` - -Read a line from the stream up to the maximum allowed buffer length. - - -## `function parse_request` - -`function parse_request($message)` - -Parses a request message string into a request object. - - -## `function parse_response` - -`function parse_response($message)` - -Parses a response message string into a response object. - - -## `function parse_query` - -`function parse_query($str, $urlEncoding = true)` - -Parse a query string into an associative array. - -If multiple values are found for the same key, the value of that key value pair -will become an array. This function does not parse nested PHP style arrays into -an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed into -`['foo[a]' => '1', 'foo[b]' => '2']`). - - -## `function build_query` - -`function build_query(array $params, $encoding = PHP_QUERY_RFC3986)` - -Build a query string from an array of key value pairs. - -This function can use the return value of parse_query() to build a query string. -This function does not modify the provided keys when an array is encountered -(like http_build_query would). - - -## `function mimetype_from_filename` - -`function mimetype_from_filename($filename)` +`public static function fromFilename(string $filename): string|null` Determines the mimetype of a file by looking at its extension. -## `function mimetype_from_extension` +## `GuzzleHttp\Psr7\MimeType::fromExtension` -`function mimetype_from_extension($extension)` +`public static function fromExtension(string $extension): string|null` Maps a file extensions to a mimetype. +## Upgrading from Function API + +The static API was first introduced in 1.7.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API will be removed in 2.0.0. A migration table has been provided here for your convenience: + +| Original Function | Replacement Method | +|----------------|----------------| +| `str` | `Message::toString` | +| `uri_for` | `Utils::uriFor` | +| `stream_for` | `Utils::streamFor` | +| `parse_header` | `Header::parse` | +| `normalize_header` | `Header::normalize` | +| `modify_request` | `Utils::modifyRequest` | +| `rewind_body` | `Message::rewindBody` | +| `try_fopen` | `Utils::tryFopen` | +| `copy_to_string` | `Utils::copyToString` | +| `copy_to_stream` | `Utils::copyToStream` | +| `hash` | `Utils::hash` | +| `readline` | `Utils::readLine` | +| `parse_request` | `Message::parseRequest` | +| `parse_response` | `Message::parseResponse` | +| `parse_query` | `Query::parse` | +| `build_query` | `Query::build` | +| `mimetype_from_filename` | `MimeType::fromFilename` | +| `mimetype_from_extension` | `MimeType::fromExtension` | +| `_parse_message` | `Message::parseMessage` | +| `_parse_request_uri` | `Message::parseRequestUri` | +| `get_message_body_summary` | `Message::bodySummary` | +| `_caseless_remove` | `Utils::caselessRemove` | + + # Additional URI Methods Aside from the standard `Psr\Http\Message\UriInterface` implementation in form of the `GuzzleHttp\Psr7\Uri` class, diff --git a/vendor/guzzlehttp/psr7/composer.json b/vendor/guzzlehttp/psr7/composer.json index 168a055b..58dcb07e 100644 --- a/vendor/guzzlehttp/psr7/composer.json +++ b/vendor/guzzlehttp/psr7/composer.json @@ -21,14 +21,14 @@ "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10", "ext-zlib": "*" }, "provide": { "psr/http-message-implementation": "1.0" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "autoload": { "psr-4": { @@ -43,7 +43,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } } } diff --git a/vendor/guzzlehttp/psr7/src/AppendStream.php b/vendor/guzzlehttp/psr7/src/AppendStream.php index 472a0d61..fa9153d7 100644 --- a/vendor/guzzlehttp/psr7/src/AppendStream.php +++ b/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -1,4 +1,5 @@ streams = []; + + return null; } public function tell() diff --git a/vendor/guzzlehttp/psr7/src/BufferStream.php b/vendor/guzzlehttp/psr7/src/BufferStream.php index af4d4c22..783859c1 100644 --- a/vendor/guzzlehttp/psr7/src/BufferStream.php +++ b/vendor/guzzlehttp/psr7/src/BufferStream.php @@ -1,4 +1,5 @@ close(); + + return null; } public function getSize() diff --git a/vendor/guzzlehttp/psr7/src/CachingStream.php b/vendor/guzzlehttp/psr7/src/CachingStream.php index ed68f086..fe749e98 100644 --- a/vendor/guzzlehttp/psr7/src/CachingStream.php +++ b/vendor/guzzlehttp/psr7/src/CachingStream.php @@ -1,4 +1,5 @@ remoteStream = $stream; - $this->stream = $target ?: new Stream(fopen('php://temp', 'r+')); + $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+')); } public function getSize() @@ -131,7 +134,7 @@ class CachingStream implements StreamInterface private function cacheEntireStream() { $target = new FnStream(['write' => 'strlen']); - copy_to_stream($this, $target); + Utils::copyToStream($this, $target); return $this->tell(); } diff --git a/vendor/guzzlehttp/psr7/src/DroppingStream.php b/vendor/guzzlehttp/psr7/src/DroppingStream.php index 8935c80d..9f7420c4 100644 --- a/vendor/guzzlehttp/psr7/src/DroppingStream.php +++ b/vendor/guzzlehttp/psr7/src/DroppingStream.php @@ -1,4 +1,5 @@ ]+>|[^=]+/', $kvp, $matches)) { + $m = $matches[0]; + if (isset($m[1])) { + $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); + } else { + $part[] = trim($m[0], $trimmed); + } + } + } + if ($part) { + $params[] = $part; + } + } + + return $params; + } + + /** + * Converts an array of header values that may contain comma separated + * headers into an array of headers with no comma separated values. + * + * @param string|array $header Header to normalize. + * + * @return array Returns the normalized header field values. + */ + public static function normalize($header) + { + if (!is_array($header)) { + return array_map('trim', explode(',', $header)); + } + + $result = []; + foreach ($header as $value) { + foreach ((array) $value as $v) { + if (strpos($v, ',') === false) { + $result[] = $v; + continue; + } + foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) { + $result[] = trim($vv); + } + } + } + + return $result; + } +} diff --git a/vendor/guzzlehttp/psr7/src/InflateStream.php b/vendor/guzzlehttp/psr7/src/InflateStream.php index 5e4f6028..0cbd2cce 100644 --- a/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -1,4 +1,5 @@ filename, $this->mode)); + return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode)); } } diff --git a/vendor/guzzlehttp/psr7/src/LimitStream.php b/vendor/guzzlehttp/psr7/src/LimitStream.php index e4f239e3..1173ec40 100644 --- a/vendor/guzzlehttp/psr7/src/LimitStream.php +++ b/vendor/guzzlehttp/psr7/src/LimitStream.php @@ -1,11 +1,13 @@ getMethod() . ' ' + . $message->getRequestTarget()) + . ' HTTP/' . $message->getProtocolVersion(); + if (!$message->hasHeader('host')) { + $msg .= "\r\nHost: " . $message->getUri()->getHost(); + } + } elseif ($message instanceof ResponseInterface) { + $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' + . $message->getStatusCode() . ' ' + . $message->getReasonPhrase(); + } else { + throw new \InvalidArgumentException('Unknown message type'); + } + + foreach ($message->getHeaders() as $name => $values) { + if (strtolower($name) === 'set-cookie') { + foreach ($values as $value) { + $msg .= "\r\n{$name}: " . $value; + } + } else { + $msg .= "\r\n{$name}: " . implode(', ', $values); + } + } + + return "{$msg}\r\n\r\n" . $message->getBody(); + } + + /** + * Get a short summary of the message body. + * + * Will return `null` if the response is not printable. + * + * @param MessageInterface $message The message to get the body summary + * @param int $truncateAt The maximum allowed size of the summary + * + * @return string|null + */ + public static function bodySummary(MessageInterface $message, $truncateAt = 120) + { + $body = $message->getBody(); + + if (!$body->isSeekable() || !$body->isReadable()) { + return null; + } + + $size = $body->getSize(); + + if ($size === 0) { + return null; + } + + $summary = $body->read($truncateAt); + $body->rewind(); + + if ($size > $truncateAt) { + $summary .= ' (truncated...)'; + } + + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/u', $summary)) { + return null; + } + + return $summary; + } + + /** + * Attempts to rewind a message body and throws an exception on failure. + * + * The body of the message will only be rewound if a call to `tell()` + * returns a value other than `0`. + * + * @param MessageInterface $message Message to rewind + * + * @throws \RuntimeException + */ + public static function rewindBody(MessageInterface $message) + { + $body = $message->getBody(); + + if ($body->tell()) { + $body->rewind(); + } + } + + /** + * Parses an HTTP message into an associative array. + * + * The array contains the "start-line" key containing the start line of + * the message, "headers" key containing an associative array of header + * array values, and a "body" key containing the body of the message. + * + * @param string $message HTTP request or response to parse. + * + * @return array + */ + public static function parseMessage($message) + { + if (!$message) { + throw new \InvalidArgumentException('Invalid message'); + } + + $message = ltrim($message, "\r\n"); + + $messageParts = preg_split("/\r?\n\r?\n/", $message, 2); + + if ($messageParts === false || count($messageParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); + } + + list($rawHeaders, $body) = $messageParts; + $rawHeaders .= "\r\n"; // Put back the delimiter we split previously + $headerParts = preg_split("/\r?\n/", $rawHeaders, 2); + + if ($headerParts === false || count($headerParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing status line'); + } + + list($startLine, $rawHeaders) = $headerParts; + + if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { + // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 + $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); + } + + /** @var array[] $headerLines */ + $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER); + + // If these aren't the same, then one line didn't match and there's an invalid header. + if ($count !== substr_count($rawHeaders, "\n")) { + // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4 + if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { + throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); + } + + throw new \InvalidArgumentException('Invalid header syntax'); + } + + $headers = []; + + foreach ($headerLines as $headerLine) { + $headers[$headerLine[1]][] = $headerLine[2]; + } + + return [ + 'start-line' => $startLine, + 'headers' => $headers, + 'body' => $body, + ]; + } + + /** + * Constructs a URI for an HTTP request message. + * + * @param string $path Path from the start-line + * @param array $headers Array of headers (each value an array). + * + * @return string + */ + public static function parseRequestUri($path, array $headers) + { + $hostKey = array_filter(array_keys($headers), function ($k) { + return strtolower($k) === 'host'; + }); + + // If no host is found, then a full URI cannot be constructed. + if (!$hostKey) { + return $path; + } + + $host = $headers[reset($hostKey)][0]; + $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; + + return $scheme . '://' . $host . '/' . ltrim($path, '/'); + } + + /** + * Parses a request message string into a request object. + * + * @param string $message Request message string. + * + * @return Request + */ + public static function parseRequest($message) + { + $data = self::parseMessage($message); + $matches = []; + if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) { + throw new \InvalidArgumentException('Invalid request string'); + } + $parts = explode(' ', $data['start-line'], 3); + $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1'; + + $request = new Request( + $parts[0], + $matches[1] === '/' ? self::parseRequestUri($parts[1], $data['headers']) : $parts[1], + $data['headers'], + $data['body'], + $version + ); + + return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); + } + + /** + * Parses a response message string into a response object. + * + * @param string $message Response message string. + * + * @return Response + */ + public static function parseResponse($message) + { + $data = self::parseMessage($message); + // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space + // between status-code and reason-phrase is required. But browsers accept + // responses without space and reason as well. + if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { + throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); + } + $parts = explode(' ', $data['start-line'], 3); + + return new Response( + (int) $parts[1], + $data['headers'], + $data['body'], + explode('/', $parts[0])[1], + isset($parts[2]) ? $parts[2] : null + ); + } +} diff --git a/vendor/guzzlehttp/psr7/src/MessageTrait.php b/vendor/guzzlehttp/psr7/src/MessageTrait.php index a7966d10..99203bb4 100644 --- a/vendor/guzzlehttp/psr7/src/MessageTrait.php +++ b/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -1,4 +1,5 @@ stream) { - $this->stream = stream_for(''); + $this->stream = Utils::streamFor(''); } return $this->stream; @@ -194,7 +195,7 @@ trait MessageTrait } return trim((string) $value, " \t"); - }, $values); + }, array_values($values)); } private function assertHeader($header) diff --git a/vendor/guzzlehttp/psr7/src/MimeType.php b/vendor/guzzlehttp/psr7/src/MimeType.php new file mode 100644 index 00000000..205c7b1f --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/MimeType.php @@ -0,0 +1,140 @@ + 'video/3gpp', + '7z' => 'application/x-7z-compressed', + 'aac' => 'audio/x-aac', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'asc' => 'text/plain', + 'asf' => 'video/x-ms-asf', + 'atom' => 'application/atom+xml', + 'avi' => 'video/x-msvideo', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bzip2', + 'cer' => 'application/pkix-cert', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'css' => 'text/css', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'deb' => 'application/x-debian-package', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dvi' => 'application/x-dvi', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'etx' => 'text/x-setext', + 'flac' => 'audio/flac', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gz' => 'application/gzip', + 'htm' => 'text/html', + 'html' => 'text/html', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ini' => 'text/plain', + 'iso' => 'application/x-iso9660-image', + 'jar' => 'application/java-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'js' => 'text/javascript', + 'json' => 'application/json', + 'latex' => 'application/x-latex', + 'log' => 'text/plain', + 'm4a' => 'audio/mp4', + 'm4v' => 'video/mp4', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mkv' => 'video/x-matroska', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4v' => 'video/mp4', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'pbm' => 'image/x-portable-bitmap', + 'pdf' => 'application/pdf', + 'pgm' => 'image/x-portable-graymap', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'ppm' => 'image/x-portable-pixmap', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'qt' => 'video/quicktime', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'svg' => 'image/svg+xml', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'torrent' => 'application/x-bittorrent', + 'ttf' => 'application/x-font-ttf', + 'txt' => 'text/plain', + 'wav' => 'audio/x-wav', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'video/x-ms-wmv', + 'woff' => 'application/x-font-woff', + 'wsdl' => 'application/wsdl+xml', + 'xbm' => 'image/x-xbitmap', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + 'xpm' => 'image/x-xpixmap', + 'xwd' => 'image/x-xwindowdump', + 'yaml' => 'text/yaml', + 'yml' => 'text/yaml', + 'zip' => 'application/zip', + ]; + + $extension = strtolower($extension); + + return isset($mimetypes[$extension]) + ? $mimetypes[$extension] + : null; + } +} diff --git a/vendor/guzzlehttp/psr7/src/MultipartStream.php b/vendor/guzzlehttp/psr7/src/MultipartStream.php index c0fd584f..5a6079a8 100644 --- a/vendor/guzzlehttp/psr7/src/MultipartStream.php +++ b/vendor/guzzlehttp/psr7/src/MultipartStream.php @@ -1,4 +1,5 @@ addStream(stream_for("--{$this->boundary}--\r\n")); + $stream->addStream(Utils::streamFor("--{$this->boundary}--\r\n")); return $stream; } @@ -84,7 +87,7 @@ class MultipartStream implements StreamInterface } } - $element['contents'] = stream_for($element['contents']); + $element['contents'] = Utils::streamFor($element['contents']); if (empty($element['filename'])) { $uri = $element['contents']->getMetadata('uri'); @@ -100,9 +103,9 @@ class MultipartStream implements StreamInterface isset($element['headers']) ? $element['headers'] : [] ); - $stream->addStream(stream_for($this->getHeaders($headers))); + $stream->addStream(Utils::streamFor($this->getHeaders($headers))); $stream->addStream($body); - $stream->addStream(stream_for("\r\n")); + $stream->addStream(Utils::streamFor("\r\n")); } /** @@ -114,9 +117,11 @@ class MultipartStream implements StreamInterface $disposition = $this->getHeader($headers, 'content-disposition'); if (!$disposition) { $headers['Content-Disposition'] = ($filename === '0' || $filename) - ? sprintf('form-data; name="%s"; filename="%s"', + ? sprintf( + 'form-data; name="%s"; filename="%s"', $name, - basename($filename)) + basename($filename) + ) : "form-data; name=\"{$name}\""; } @@ -131,7 +136,7 @@ class MultipartStream implements StreamInterface // Set a default Content-Type if one was not supplied $type = $this->getHeader($headers, 'content-type'); if (!$type && ($filename === '0' || $filename)) { - if ($type = mimetype_from_filename($filename)) { + if ($type = MimeType::fromFilename($filename)) { $headers['Content-Type'] = $type; } } diff --git a/vendor/guzzlehttp/psr7/src/NoSeekStream.php b/vendor/guzzlehttp/psr7/src/NoSeekStream.php index 23322180..d66bdde4 100644 --- a/vendor/guzzlehttp/psr7/src/NoSeekStream.php +++ b/vendor/guzzlehttp/psr7/src/NoSeekStream.php @@ -1,10 +1,13 @@ tellPos = false; $this->source = null; + + return null; } public function getSize() diff --git a/vendor/guzzlehttp/psr7/src/Query.php b/vendor/guzzlehttp/psr7/src/Query.php new file mode 100644 index 00000000..5a7cc035 --- /dev/null +++ b/vendor/guzzlehttp/psr7/src/Query.php @@ -0,0 +1,113 @@ + '1', 'foo[b]' => '2'])`. + * + * @param string $str Query string to parse + * @param int|bool $urlEncoding How the query string is encoded + * + * @return array + */ + public static function parse($str, $urlEncoding = true) + { + $result = []; + + if ($str === '') { + return $result; + } + + if ($urlEncoding === true) { + $decoder = function ($value) { + return rawurldecode(str_replace('+', ' ', $value)); + }; + } elseif ($urlEncoding === PHP_QUERY_RFC3986) { + $decoder = 'rawurldecode'; + } elseif ($urlEncoding === PHP_QUERY_RFC1738) { + $decoder = 'urldecode'; + } else { + $decoder = function ($str) { + return $str; + }; + } + + foreach (explode('&', $str) as $kvp) { + $parts = explode('=', $kvp, 2); + $key = $decoder($parts[0]); + $value = isset($parts[1]) ? $decoder($parts[1]) : null; + if (!isset($result[$key])) { + $result[$key] = $value; + } else { + if (!is_array($result[$key])) { + $result[$key] = [$result[$key]]; + } + $result[$key][] = $value; + } + } + + return $result; + } + + /** + * Build a query string from an array of key value pairs. + * + * This function can use the return value of `parse()` to build a query + * string. This function does not modify the provided keys when an array is + * encountered (like `http_build_query()` would). + * + * @param array $params Query string parameters. + * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 + * to encode using RFC3986, or PHP_QUERY_RFC1738 + * to encode using RFC1738. + * + * @return string + */ + public static function build(array $params, $encoding = PHP_QUERY_RFC3986) + { + if (!$params) { + return ''; + } + + if ($encoding === false) { + $encoder = function ($str) { + return $str; + }; + } elseif ($encoding === PHP_QUERY_RFC3986) { + $encoder = 'rawurlencode'; + } elseif ($encoding === PHP_QUERY_RFC1738) { + $encoder = 'urlencode'; + } else { + throw new \InvalidArgumentException('Invalid type'); + } + + $qs = ''; + foreach ($params as $k => $v) { + $k = $encoder($k); + if (!is_array($v)) { + $qs .= $k; + if ($v !== null) { + $qs .= '=' . $encoder($v); + } + $qs .= '&'; + } else { + foreach ($v as $vv) { + $qs .= $k; + if ($vv !== null) { + $qs .= '=' . $encoder($vv); + } + $qs .= '&'; + } + } + } + + return $qs ? (string) substr($qs, 0, -1) : ''; + } +} diff --git a/vendor/guzzlehttp/psr7/src/Request.php b/vendor/guzzlehttp/psr7/src/Request.php index 59f337db..c1cdaebf 100644 --- a/vendor/guzzlehttp/psr7/src/Request.php +++ b/vendor/guzzlehttp/psr7/src/Request.php @@ -1,4 +1,5 @@ stream = stream_for($body); + $this->stream = Utils::streamFor($body); } } diff --git a/vendor/guzzlehttp/psr7/src/Response.php b/vendor/guzzlehttp/psr7/src/Response.php index e7e04d86..8c01a0f5 100644 --- a/vendor/guzzlehttp/psr7/src/Response.php +++ b/vendor/guzzlehttp/psr7/src/Response.php @@ -1,4 +1,5 @@ statusCode = $status; if ($body !== '' && $body !== null) { - $this->stream = stream_for($body); + $this->stream = Utils::streamFor($body); } $this->setHeaders($headers); @@ -134,7 +135,7 @@ class Response implements ResponseInterface if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) { $reasonPhrase = self::$phrases[$new->statusCode]; } - $new->reasonPhrase = $reasonPhrase; + $new->reasonPhrase = (string) $reasonPhrase; return $new; } diff --git a/vendor/guzzlehttp/psr7/src/Rfc7230.php b/vendor/guzzlehttp/psr7/src/Rfc7230.php index 505e4742..51b571f2 100644 --- a/vendor/guzzlehttp/psr7/src/Rfc7230.php +++ b/vendor/guzzlehttp/psr7/src/Rfc7230.php @@ -11,6 +11,7 @@ final class Rfc7230 * Note: header delimiter (\r\n) is modified to \r?\n to accept line feed only delimiters for BC reasons. * * @link https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15 + * * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE */ const HEADER_REGEX = "(^([^()<>@,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; diff --git a/vendor/guzzlehttp/psr7/src/ServerRequest.php b/vendor/guzzlehttp/psr7/src/ServerRequest.php index 1a09a6c8..e6d26f5f 100644 --- a/vendor/guzzlehttp/psr7/src/ServerRequest.php +++ b/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -4,9 +4,9 @@ namespace GuzzleHttp\Psr7; use InvalidArgumentException; use Psr\Http\Message\ServerRequestInterface; -use Psr\Http\Message\UriInterface; use Psr\Http\Message\StreamInterface; use Psr\Http\Message\UploadedFileInterface; +use Psr\Http\Message\UriInterface; /** * Server-side HTTP request @@ -35,7 +35,7 @@ class ServerRequest extends Request implements ServerRequestInterface private $cookieParams = []; /** - * @var null|array|object + * @var array|object|null */ private $parsedBody; @@ -58,7 +58,7 @@ class ServerRequest extends Request implements ServerRequestInterface * @param string $method HTTP method * @param string|UriInterface $uri URI * @param array $headers Request headers - * @param string|null|resource|StreamInterface $body Request body + * @param string|resource|StreamInterface|null $body Request body * @param string $version Protocol version * @param array $serverParams Typically the $_SERVER superglobal */ @@ -79,8 +79,10 @@ class ServerRequest extends Request implements ServerRequestInterface * Return an UploadedFile instance array. * * @param array $files A array which respect $_FILES structure - * @throws InvalidArgumentException for unrecognized values + * * @return array + * + * @throws InvalidArgumentException for unrecognized values */ public static function normalizeFiles(array $files) { @@ -109,6 +111,7 @@ class ServerRequest extends Request implements ServerRequestInterface * delegate to normalizeNestedFileSpec() and return that return value. * * @param array $value $_FILES struct + * * @return array|UploadedFileInterface */ private static function createUploadedFileFromSpec(array $value) @@ -133,6 +136,7 @@ class ServerRequest extends Request implements ServerRequestInterface * UploadedFileInterface instances. * * @param array $files + * * @return UploadedFileInterface[] */ private static function normalizeNestedFileSpec(array $files = []) @@ -182,7 +186,7 @@ class ServerRequest extends Request implements ServerRequestInterface private static function extractHostAndPortFromAuthority($authority) { - $uri = 'http://'.$authority; + $uri = 'http://' . $authority; $parts = parse_url($uri); if (false === $parts) { return [null, null]; @@ -243,7 +247,6 @@ class ServerRequest extends Request implements ServerRequestInterface return $uri; } - /** * {@inheritdoc} */ diff --git a/vendor/guzzlehttp/psr7/src/Stream.php b/vendor/guzzlehttp/psr7/src/Stream.php index d9e7409c..3865d6d6 100644 --- a/vendor/guzzlehttp/psr7/src/Stream.php +++ b/vendor/guzzlehttp/psr7/src/Stream.php @@ -1,4 +1,5 @@ seek(0); - return (string) stream_get_contents($this->stream); + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); } catch (\Exception $e) { return ''; } @@ -193,7 +196,7 @@ class Stream implements StreamInterface public function seek($offset, $whence = SEEK_SET) { $whence = (int) $whence; - + if (!isset($this->stream)) { throw new \RuntimeException('Stream is detached'); } diff --git a/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php index daec6f52..5025dd67 100644 --- a/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php +++ b/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -1,10 +1,12 @@ file, $targetPath) : move_uploaded_file($this->file, $targetPath); } else { - copy_to_stream( + Utils::copyToStream( $this->getStream(), new LazyOpenStream($targetPath, 'w') ); @@ -288,6 +299,7 @@ class UploadedFile implements UploadedFileInterface * {@inheritdoc} * * @see http://php.net/manual/en/features.file-upload.errors.php + * * @return int One of PHP's UPLOAD_ERR_XXX constants. */ public function getError() @@ -299,7 +311,7 @@ class UploadedFile implements UploadedFileInterface * {@inheritdoc} * * @return string|null The filename sent by the client or null if none - * was provided. + * was provided. */ public function getClientFilename() { diff --git a/vendor/guzzlehttp/psr7/src/Uri.php b/vendor/guzzlehttp/psr7/src/Uri.php index 825a25ee..0f9f020d 100644 --- a/vendor/guzzlehttp/psr7/src/Uri.php +++ b/vendor/guzzlehttp/psr7/src/Uri.php @@ -1,4 +1,5 @@ path = '/'. $this->path; + $this->path = '/' . $this->path; //throw new \InvalidArgumentException('The path of a URI with an authority must start with a slash "/" or be empty'); } } diff --git a/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/vendor/guzzlehttp/psr7/src/UriNormalizer.php index 384c29e5..81419ead 100644 --- a/vendor/guzzlehttp/psr7/src/UriNormalizer.php +++ b/vendor/guzzlehttp/psr7/src/UriNormalizer.php @@ -1,4 +1,5 @@ $keys + * + * @return array + */ + public static function caselessRemove($keys, array $data) + { + $result = []; + + foreach ($keys as &$key) { + $key = strtolower($key); + } + + foreach ($data as $k => $v) { + if (!in_array(strtolower($k), $keys)) { + $result[$k] = $v; + } + } + + return $result; + } + + /** + * Copy the contents of a stream into another stream until the given number + * of bytes have been read. + * + * @param StreamInterface $source Stream to read from + * @param StreamInterface $dest Stream to write to + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ + public static function copyToStream(StreamInterface $source, StreamInterface $dest, $maxLen = -1) + { + $bufferSize = 8192; + + if ($maxLen === -1) { + while (!$source->eof()) { + if (!$dest->write($source->read($bufferSize))) { + break; + } + } + } else { + $remaining = $maxLen; + while ($remaining > 0 && !$source->eof()) { + $buf = $source->read(min($bufferSize, $remaining)); + $len = strlen($buf); + if (!$len) { + break; + } + $remaining -= $len; + $dest->write($buf); + } + } + } + + /** + * Copy the contents of a stream into a string until the given number of + * bytes have been read. + * + * @param StreamInterface $stream Stream to read + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @return string + * + * @throws \RuntimeException on error. + */ + public static function copyToString(StreamInterface $stream, $maxLen = -1) + { + $buffer = ''; + + if ($maxLen === -1) { + while (!$stream->eof()) { + $buf = $stream->read(1048576); + // Using a loose equality here to match on '' and false. + if ($buf == null) { + break; + } + $buffer .= $buf; + } + return $buffer; + } + + $len = 0; + while (!$stream->eof() && $len < $maxLen) { + $buf = $stream->read($maxLen - $len); + // Using a loose equality here to match on '' and false. + if ($buf == null) { + break; + } + $buffer .= $buf; + $len = strlen($buffer); + } + + return $buffer; + } + + /** + * Calculate a hash of a stream. + * + * This method reads the entire stream to calculate a rolling hash, based + * on PHP's `hash_init` functions. + * + * @param StreamInterface $stream Stream to calculate the hash for + * @param string $algo Hash algorithm (e.g. md5, crc32, etc) + * @param bool $rawOutput Whether or not to use raw output + * + * @return string Returns the hash of the stream + * + * @throws \RuntimeException on error. + */ + public static function hash(StreamInterface $stream, $algo, $rawOutput = false) + { + $pos = $stream->tell(); + + if ($pos > 0) { + $stream->rewind(); + } + + $ctx = hash_init($algo); + while (!$stream->eof()) { + hash_update($ctx, $stream->read(1048576)); + } + + $out = hash_final($ctx, (bool) $rawOutput); + $stream->seek($pos); + + return $out; + } + + /** + * Clone and modify a request with the given changes. + * + * This method is useful for reducing the number of clones needed to mutate + * a message. + * + * The changes can be one of: + * - method: (string) Changes the HTTP method. + * - set_headers: (array) Sets the given headers. + * - remove_headers: (array) Remove the given headers. + * - body: (mixed) Sets the given body. + * - uri: (UriInterface) Set the URI. + * - query: (string) Set the query string value of the URI. + * - version: (string) Set the protocol version. + * + * @param RequestInterface $request Request to clone and modify. + * @param array $changes Changes to apply. + * + * @return RequestInterface + */ + public static function modifyRequest(RequestInterface $request, array $changes) + { + if (!$changes) { + return $request; + } + + $headers = $request->getHeaders(); + + if (!isset($changes['uri'])) { + $uri = $request->getUri(); + } else { + // Remove the host header if one is on the URI + if ($host = $changes['uri']->getHost()) { + $changes['set_headers']['Host'] = $host; + + if ($port = $changes['uri']->getPort()) { + $standardPorts = ['http' => 80, 'https' => 443]; + $scheme = $changes['uri']->getScheme(); + if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { + $changes['set_headers']['Host'] .= ':' . $port; + } + } + } + $uri = $changes['uri']; + } + + if (!empty($changes['remove_headers'])) { + $headers = self::caselessRemove($changes['remove_headers'], $headers); + } + + if (!empty($changes['set_headers'])) { + $headers = self::caselessRemove(array_keys($changes['set_headers']), $headers); + $headers = $changes['set_headers'] + $headers; + } + + if (isset($changes['query'])) { + $uri = $uri->withQuery($changes['query']); + } + + if ($request instanceof ServerRequestInterface) { + $new = (new ServerRequest( + isset($changes['method']) ? $changes['method'] : $request->getMethod(), + $uri, + $headers, + isset($changes['body']) ? $changes['body'] : $request->getBody(), + isset($changes['version']) + ? $changes['version'] + : $request->getProtocolVersion(), + $request->getServerParams() + )) + ->withParsedBody($request->getParsedBody()) + ->withQueryParams($request->getQueryParams()) + ->withCookieParams($request->getCookieParams()) + ->withUploadedFiles($request->getUploadedFiles()); + + foreach ($request->getAttributes() as $key => $value) { + $new = $new->withAttribute($key, $value); + } + + return $new; + } + + return new Request( + isset($changes['method']) ? $changes['method'] : $request->getMethod(), + $uri, + $headers, + isset($changes['body']) ? $changes['body'] : $request->getBody(), + isset($changes['version']) + ? $changes['version'] + : $request->getProtocolVersion() + ); + } + + /** + * Read a line from the stream up to the maximum allowed buffer length. + * + * @param StreamInterface $stream Stream to read from + * @param int|null $maxLength Maximum buffer length + * + * @return string + */ + public static function readLine(StreamInterface $stream, $maxLength = null) + { + $buffer = ''; + $size = 0; + + while (!$stream->eof()) { + // Using a loose equality here to match on '' and false. + if (null == ($byte = $stream->read(1))) { + return $buffer; + } + $buffer .= $byte; + // Break when a new line is found or the max length - 1 is reached + if ($byte === "\n" || ++$size === $maxLength - 1) { + break; + } + } + + return $buffer; + } + + /** + * Create a new stream based on the input type. + * + * Options is an associative array that can contain the following keys: + * - metadata: Array of custom metadata. + * - size: Size of the stream. + * + * This method accepts the following `$resource` types: + * - `Psr\Http\Message\StreamInterface`: Returns the value as-is. + * - `string`: Creates a stream object that uses the given string as the contents. + * - `resource`: Creates a stream object that wraps the given PHP stream resource. + * - `Iterator`: If the provided value implements `Iterator`, then a read-only + * stream object will be created that wraps the given iterable. Each time the + * stream is read from, data from the iterator will fill a buffer and will be + * continuously called until the buffer is equal to the requested read size. + * Subsequent read calls will first read from the buffer and then call `next` + * on the underlying iterator until it is exhausted. + * - `object` with `__toString()`: If the object has the `__toString()` method, + * the object will be cast to a string and then a stream will be returned that + * uses the string value. + * - `NULL`: When `null` is passed, an empty stream object is returned. + * - `callable` When a callable is passed, a read-only stream object will be + * created that invokes the given callable. The callable is invoked with the + * number of suggested bytes to read. The callable can return any number of + * bytes, but MUST return `false` when there is no more data to return. The + * stream object that wraps the callable will invoke the callable until the + * number of requested bytes are available. Any additional bytes will be + * buffered and used in subsequent reads. + * + * @param resource|string|int|float|bool|StreamInterface|callable|\Iterator|null $resource Entity body data + * @param array $options Additional options + * + * @return StreamInterface + * + * @throws \InvalidArgumentException if the $resource arg is not valid. + */ + public static function streamFor($resource = '', array $options = []) + { + if (is_scalar($resource)) { + $stream = self::tryFopen('php://temp', 'r+'); + if ($resource !== '') { + fwrite($stream, $resource); + fseek($stream, 0); + } + return new Stream($stream, $options); + } + + switch (gettype($resource)) { + case 'resource': + /* + * The 'php://input' is a special stream with quirks and inconsistencies. + * We avoid using that stream by reading it into php://temp + */ + $metaData = \stream_get_meta_data($resource); + if (isset($metaData['uri']) && $metaData['uri'] === 'php://input') { + $stream = self::tryFopen('php://temp', 'w+'); + fwrite($stream, stream_get_contents($resource)); + fseek($stream, 0); + $resource = $stream; + } + return new Stream($resource, $options); + case 'object': + if ($resource instanceof StreamInterface) { + return $resource; + } elseif ($resource instanceof \Iterator) { + return new PumpStream(function () use ($resource) { + if (!$resource->valid()) { + return false; + } + $result = $resource->current(); + $resource->next(); + return $result; + }, $options); + } elseif (method_exists($resource, '__toString')) { + return Utils::streamFor((string) $resource, $options); + } + break; + case 'NULL': + return new Stream(self::tryFopen('php://temp', 'r+'), $options); + } + + if (is_callable($resource)) { + return new PumpStream($resource, $options); + } + + throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); + } + + /** + * Safely opens a PHP stream resource using a filename. + * + * When fopen fails, PHP normally raises a warning. This function adds an + * error handler that checks for errors and throws an exception instead. + * + * @param string $filename File to open + * @param string $mode Mode used to open the file + * + * @return resource + * + * @throws \RuntimeException if the file cannot be opened + */ + public static function tryFopen($filename, $mode) + { + $ex = null; + set_error_handler(function () use ($filename, $mode, &$ex) { + $ex = new \RuntimeException(sprintf( + 'Unable to open "%s" using mode "%s": %s', + $filename, + $mode, + func_get_args()[1] + )); + + return true; + }); + + try { + $handle = fopen($filename, $mode); + } catch (\Throwable $e) { + $ex = new \RuntimeException(sprintf( + 'Unable to open "%s" using mode "%s": %s', + $filename, + $mode, + $e->getMessage() + ), 0, $e); + } + + restore_error_handler(); + + if ($ex) { + /** @var $ex \RuntimeException */ + throw $ex; + } + + return $handle; + } + + /** + * Returns a UriInterface for the given value. + * + * This function accepts a string or UriInterface and returns a + * UriInterface for the given value. If the value is already a + * UriInterface, it is returned as-is. + * + * @param string|UriInterface $uri + * + * @return UriInterface + * + * @throws \InvalidArgumentException + */ + public static function uriFor($uri) + { + if ($uri instanceof UriInterface) { + return $uri; + } + + if (is_string($uri)) { + return new Uri($uri); + } + + throw new \InvalidArgumentException('URI must be a string or UriInterface'); + } +} diff --git a/vendor/guzzlehttp/psr7/src/functions.php b/vendor/guzzlehttp/psr7/src/functions.php index 8e6dafe6..b0901fad 100644 --- a/vendor/guzzlehttp/psr7/src/functions.php +++ b/vendor/guzzlehttp/psr7/src/functions.php @@ -1,10 +1,9 @@ getMethod() . ' ' - . $message->getRequestTarget()) - . ' HTTP/' . $message->getProtocolVersion(); - if (!$message->hasHeader('host')) { - $msg .= "\r\nHost: " . $message->getUri()->getHost(); - } - } elseif ($message instanceof ResponseInterface) { - $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' - . $message->getStatusCode() . ' ' - . $message->getReasonPhrase(); - } else { - throw new \InvalidArgumentException('Unknown message type'); - } - - foreach ($message->getHeaders() as $name => $values) { - $msg .= "\r\n{$name}: " . implode(', ', $values); - } - - return "{$msg}\r\n\r\n" . $message->getBody(); + return Message::toString($message); } /** * Returns a UriInterface for the given value. * - * This function accepts a string or {@see Psr\Http\Message\UriInterface} and - * returns a UriInterface for the given value. If the value is already a - * `UriInterface`, it is returned as-is. + * This function accepts a string or UriInterface and returns a + * UriInterface for the given value. If the value is already a + * UriInterface, it is returned as-is. * * @param string|UriInterface $uri * * @return UriInterface + * * @throws \InvalidArgumentException + * + * @deprecated uri_for will be removed in guzzlehttp/psr7:2.0. Use Utils::uriFor instead. */ function uri_for($uri) { - if ($uri instanceof UriInterface) { - return $uri; - } elseif (is_string($uri)) { - return new Uri($uri); - } - - throw new \InvalidArgumentException('URI must be a string or UriInterface'); + return Utils::uriFor($uri); } /** @@ -69,86 +48,57 @@ function uri_for($uri) * - metadata: Array of custom metadata. * - size: Size of the stream. * - * @param resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource Entity body data + * This method accepts the following `$resource` types: + * - `Psr\Http\Message\StreamInterface`: Returns the value as-is. + * - `string`: Creates a stream object that uses the given string as the contents. + * - `resource`: Creates a stream object that wraps the given PHP stream resource. + * - `Iterator`: If the provided value implements `Iterator`, then a read-only + * stream object will be created that wraps the given iterable. Each time the + * stream is read from, data from the iterator will fill a buffer and will be + * continuously called until the buffer is equal to the requested read size. + * Subsequent read calls will first read from the buffer and then call `next` + * on the underlying iterator until it is exhausted. + * - `object` with `__toString()`: If the object has the `__toString()` method, + * the object will be cast to a string and then a stream will be returned that + * uses the string value. + * - `NULL`: When `null` is passed, an empty stream object is returned. + * - `callable` When a callable is passed, a read-only stream object will be + * created that invokes the given callable. The callable is invoked with the + * number of suggested bytes to read. The callable can return any number of + * bytes, but MUST return `false` when there is no more data to return. The + * stream object that wraps the callable will invoke the callable until the + * number of requested bytes are available. Any additional bytes will be + * buffered and used in subsequent reads. + * + * @param resource|string|int|float|bool|StreamInterface|callable|\Iterator|null $resource Entity body data * @param array $options Additional options * * @return StreamInterface + * * @throws \InvalidArgumentException if the $resource arg is not valid. + * + * @deprecated stream_for will be removed in guzzlehttp/psr7:2.0. Use Utils::streamFor instead. */ function stream_for($resource = '', array $options = []) { - if (is_scalar($resource)) { - $stream = fopen('php://temp', 'r+'); - if ($resource !== '') { - fwrite($stream, $resource); - fseek($stream, 0); - } - return new Stream($stream, $options); - } - - switch (gettype($resource)) { - case 'resource': - return new Stream($resource, $options); - case 'object': - if ($resource instanceof StreamInterface) { - return $resource; - } elseif ($resource instanceof \Iterator) { - return new PumpStream(function () use ($resource) { - if (!$resource->valid()) { - return false; - } - $result = $resource->current(); - $resource->next(); - return $result; - }, $options); - } elseif (method_exists($resource, '__toString')) { - return stream_for((string) $resource, $options); - } - break; - case 'NULL': - return new Stream(fopen('php://temp', 'r+'), $options); - } - - if (is_callable($resource)) { - return new PumpStream($resource, $options); - } - - throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); + return Utils::streamFor($resource, $options); } /** * Parse an array of header values containing ";" separated data into an - * array of associative arrays representing the header key value pair - * data of the header. When a parameter does not contain a value, but just + * array of associative arrays representing the header key value pair data + * of the header. When a parameter does not contain a value, but just * contains a key, this function will inject a key with a '' string value. * * @param string|array $header Header to parse into components. * * @return array Returns the parsed header values. + * + * @deprecated parse_header will be removed in guzzlehttp/psr7:2.0. Use Header::parse instead. */ function parse_header($header) { - static $trimmed = "\"' \n\t\r"; - $params = $matches = []; - - foreach (normalize_header($header) as $val) { - $part = []; - foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) { - if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { - $m = $matches[0]; - if (isset($m[1])) { - $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); - } else { - $part[] = trim($m[0], $trimmed); - } - } - } - if ($part) { - $params[] = $part; - } - } - - return $params; + return Header::parse($header); } /** @@ -158,32 +108,20 @@ function parse_header($header) * @param string|array $header Header to normalize. * * @return array Returns the normalized header field values. + * + * @deprecated normalize_header will be removed in guzzlehttp/psr7:2.0. Use Header::normalize instead. */ function normalize_header($header) { - if (!is_array($header)) { - return array_map('trim', explode(',', $header)); - } - - $result = []; - foreach ($header as $value) { - foreach ((array) $value as $v) { - if (strpos($v, ',') === false) { - $result[] = $v; - continue; - } - foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) { - $result[] = trim($vv); - } - } - } - - return $result; + return Header::normalize($header); } /** * Clone and modify a request with the given changes. * + * This method is useful for reducing the number of clones needed to mutate a + * message. + * * The changes can be one of: * - method: (string) Changes the HTTP method. * - set_headers: (array) Sets the given headers. @@ -197,72 +135,12 @@ function normalize_header($header) * @param array $changes Changes to apply. * * @return RequestInterface + * + * @deprecated modify_request will be removed in guzzlehttp/psr7:2.0. Use Utils::modifyRequest instead. */ function modify_request(RequestInterface $request, array $changes) { - if (!$changes) { - return $request; - } - - $headers = $request->getHeaders(); - - if (!isset($changes['uri'])) { - $uri = $request->getUri(); - } else { - // Remove the host header if one is on the URI - if ($host = $changes['uri']->getHost()) { - $changes['set_headers']['Host'] = $host; - - if ($port = $changes['uri']->getPort()) { - $standardPorts = ['http' => 80, 'https' => 443]; - $scheme = $changes['uri']->getScheme(); - if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { - $changes['set_headers']['Host'] .= ':'.$port; - } - } - } - $uri = $changes['uri']; - } - - if (!empty($changes['remove_headers'])) { - $headers = _caseless_remove($changes['remove_headers'], $headers); - } - - if (!empty($changes['set_headers'])) { - $headers = _caseless_remove(array_keys($changes['set_headers']), $headers); - $headers = $changes['set_headers'] + $headers; - } - - if (isset($changes['query'])) { - $uri = $uri->withQuery($changes['query']); - } - - if ($request instanceof ServerRequestInterface) { - return (new ServerRequest( - isset($changes['method']) ? $changes['method'] : $request->getMethod(), - $uri, - $headers, - isset($changes['body']) ? $changes['body'] : $request->getBody(), - isset($changes['version']) - ? $changes['version'] - : $request->getProtocolVersion(), - $request->getServerParams() - )) - ->withParsedBody($request->getParsedBody()) - ->withQueryParams($request->getQueryParams()) - ->withCookieParams($request->getCookieParams()) - ->withUploadedFiles($request->getUploadedFiles()); - } - - return new Request( - isset($changes['method']) ? $changes['method'] : $request->getMethod(), - $uri, - $headers, - isset($changes['body']) ? $changes['body'] : $request->getBody(), - isset($changes['version']) - ? $changes['version'] - : $request->getProtocolVersion() - ); + return Utils::modifyRequest($request, $changes); } /** @@ -274,14 +152,12 @@ function modify_request(RequestInterface $request, array $changes) * @param MessageInterface $message Message to rewind * * @throws \RuntimeException + * + * @deprecated rewind_body will be removed in guzzlehttp/psr7:2.0. Use Message::rewindBody instead. */ function rewind_body(MessageInterface $message) { - $body = $message->getBody(); - - if ($body->tell()) { - $body->rewind(); - } + Message::rewindBody($message); } /** @@ -294,29 +170,14 @@ function rewind_body(MessageInterface $message) * @param string $mode Mode used to open the file * * @return resource + * * @throws \RuntimeException if the file cannot be opened + * + * @deprecated try_fopen will be removed in guzzlehttp/psr7:2.0. Use Utils::tryFopen instead. */ function try_fopen($filename, $mode) { - $ex = null; - set_error_handler(function () use ($filename, $mode, &$ex) { - $ex = new \RuntimeException(sprintf( - 'Unable to open %s using mode %s: %s', - $filename, - $mode, - func_get_args()[1] - )); - }); - - $handle = fopen($filename, $mode); - restore_error_handler(); - - if ($ex) { - /** @var $ex \RuntimeException */ - throw $ex; - } - - return $handle; + return Utils::tryFopen($filename, $mode); } /** @@ -326,37 +187,16 @@ function try_fopen($filename, $mode) * @param StreamInterface $stream Stream to read * @param int $maxLen Maximum number of bytes to read. Pass -1 * to read the entire stream. + * * @return string + * * @throws \RuntimeException on error. + * + * @deprecated copy_to_string will be removed in guzzlehttp/psr7:2.0. Use Utils::copyToString instead. */ function copy_to_string(StreamInterface $stream, $maxLen = -1) { - $buffer = ''; - - if ($maxLen === -1) { - while (!$stream->eof()) { - $buf = $stream->read(1048576); - // Using a loose equality here to match on '' and false. - if ($buf == null) { - break; - } - $buffer .= $buf; - } - return $buffer; - } - - $len = 0; - while (!$stream->eof() && $len < $maxLen) { - $buf = $stream->read($maxLen - $len); - // Using a loose equality here to match on '' and false. - if ($buf == null) { - break; - } - $buffer .= $buf; - $len = strlen($buffer); - } - - return $buffer; + return Utils::copyToString($stream, $maxLen); } /** @@ -369,92 +209,48 @@ function copy_to_string(StreamInterface $stream, $maxLen = -1) * to read the entire stream. * * @throws \RuntimeException on error. + * + * @deprecated copy_to_stream will be removed in guzzlehttp/psr7:2.0. Use Utils::copyToStream instead. */ -function copy_to_stream( - StreamInterface $source, - StreamInterface $dest, - $maxLen = -1 -) { - $bufferSize = 8192; - - if ($maxLen === -1) { - while (!$source->eof()) { - if (!$dest->write($source->read($bufferSize))) { - break; - } - } - } else { - $remaining = $maxLen; - while ($remaining > 0 && !$source->eof()) { - $buf = $source->read(min($bufferSize, $remaining)); - $len = strlen($buf); - if (!$len) { - break; - } - $remaining -= $len; - $dest->write($buf); - } - } +function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1) +{ + return Utils::copyToStream($source, $dest, $maxLen); } /** - * Calculate a hash of a Stream + * Calculate a hash of a stream. + * + * This method reads the entire stream to calculate a rolling hash, based on + * PHP's `hash_init` functions. * * @param StreamInterface $stream Stream to calculate the hash for * @param string $algo Hash algorithm (e.g. md5, crc32, etc) * @param bool $rawOutput Whether or not to use raw output * * @return string Returns the hash of the stream + * * @throws \RuntimeException on error. + * + * @deprecated hash will be removed in guzzlehttp/psr7:2.0. Use Utils::hash instead. */ -function hash( - StreamInterface $stream, - $algo, - $rawOutput = false -) { - $pos = $stream->tell(); - - if ($pos > 0) { - $stream->rewind(); - } - - $ctx = hash_init($algo); - while (!$stream->eof()) { - hash_update($ctx, $stream->read(1048576)); - } - - $out = hash_final($ctx, (bool) $rawOutput); - $stream->seek($pos); - - return $out; +function hash(StreamInterface $stream, $algo, $rawOutput = false) +{ + return Utils::hash($stream, $algo, $rawOutput); } /** - * Read a line from the stream up to the maximum allowed buffer length + * Read a line from the stream up to the maximum allowed buffer length. * * @param StreamInterface $stream Stream to read from - * @param int $maxLength Maximum buffer length + * @param int|null $maxLength Maximum buffer length * * @return string + * + * @deprecated readline will be removed in guzzlehttp/psr7:2.0. Use Utils::readLine instead. */ function readline(StreamInterface $stream, $maxLength = null) { - $buffer = ''; - $size = 0; - - while (!$stream->eof()) { - // Using a loose equality here to match on '' and false. - if (null == ($byte = $stream->read(1))) { - return $buffer; - } - $buffer .= $byte; - // Break when a new line is found or the max length - 1 is reached - if ($byte === "\n" || ++$size === $maxLength - 1) { - break; - } - } - - return $buffer; + return Utils::readLine($stream, $maxLength); } /** @@ -463,26 +259,12 @@ function readline(StreamInterface $stream, $maxLength = null) * @param string $message Request message string. * * @return Request + * + * @deprecated parse_request will be removed in guzzlehttp/psr7:2.0. Use Message::parseRequest instead. */ function parse_request($message) { - $data = _parse_message($message); - $matches = []; - if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) { - throw new \InvalidArgumentException('Invalid request string'); - } - $parts = explode(' ', $data['start-line'], 3); - $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1'; - - $request = new Request( - $parts[0], - $matches[1] === '/' ? _parse_request_uri($parts[1], $data['headers']) : $parts[1], - $data['headers'], - $data['body'], - $version - ); - - return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); + return Message::parseRequest($message); } /** @@ -491,139 +273,67 @@ function parse_request($message) * @param string $message Response message string. * * @return Response + * + * @deprecated parse_response will be removed in guzzlehttp/psr7:2.0. Use Message::parseResponse instead. */ function parse_response($message) { - $data = _parse_message($message); - // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space - // between status-code and reason-phrase is required. But browsers accept - // responses without space and reason as well. - if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { - throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); - } - $parts = explode(' ', $data['start-line'], 3); - - return new Response( - $parts[1], - $data['headers'], - $data['body'], - explode('/', $parts[0])[1], - isset($parts[2]) ? $parts[2] : null - ); + return Message::parseResponse($message); } /** * Parse a query string into an associative array. * - * If multiple values are found for the same key, the value of that key - * value pair will become an array. This function does not parse nested - * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will - * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']). + * If multiple values are found for the same key, the value of that key value + * pair will become an array. This function does not parse nested PHP style + * arrays into an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed + * into `['foo[a]' => '1', 'foo[b]' => '2'])`. * * @param string $str Query string to parse * @param int|bool $urlEncoding How the query string is encoded * * @return array + * + * @deprecated parse_query will be removed in guzzlehttp/psr7:2.0. Use Query::parse instead. */ function parse_query($str, $urlEncoding = true) { - $result = []; - - if ($str === '') { - return $result; - } - - if ($urlEncoding === true) { - $decoder = function ($value) { - return rawurldecode(str_replace('+', ' ', $value)); - }; - } elseif ($urlEncoding === PHP_QUERY_RFC3986) { - $decoder = 'rawurldecode'; - } elseif ($urlEncoding === PHP_QUERY_RFC1738) { - $decoder = 'urldecode'; - } else { - $decoder = function ($str) { return $str; }; - } - - foreach (explode('&', $str) as $kvp) { - $parts = explode('=', $kvp, 2); - $key = $decoder($parts[0]); - $value = isset($parts[1]) ? $decoder($parts[1]) : null; - if (!isset($result[$key])) { - $result[$key] = $value; - } else { - if (!is_array($result[$key])) { - $result[$key] = [$result[$key]]; - } - $result[$key][] = $value; - } - } - - return $result; + return Query::parse($str, $urlEncoding); } /** * Build a query string from an array of key value pairs. * - * This function can use the return value of parse_query() to build a query + * This function can use the return value of `parse_query()` to build a query * string. This function does not modify the provided keys when an array is - * encountered (like http_build_query would). + * encountered (like `http_build_query()` would). * * @param array $params Query string parameters. * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 * to encode using RFC3986, or PHP_QUERY_RFC1738 * to encode using RFC1738. + * * @return string + * + * @deprecated build_query will be removed in guzzlehttp/psr7:2.0. Use Query::build instead. */ function build_query(array $params, $encoding = PHP_QUERY_RFC3986) { - if (!$params) { - return ''; - } - - if ($encoding === false) { - $encoder = function ($str) { return $str; }; - } elseif ($encoding === PHP_QUERY_RFC3986) { - $encoder = 'rawurlencode'; - } elseif ($encoding === PHP_QUERY_RFC1738) { - $encoder = 'urlencode'; - } else { - throw new \InvalidArgumentException('Invalid type'); - } - - $qs = ''; - foreach ($params as $k => $v) { - $k = $encoder($k); - if (!is_array($v)) { - $qs .= $k; - if ($v !== null) { - $qs .= '=' . $encoder($v); - } - $qs .= '&'; - } else { - foreach ($v as $vv) { - $qs .= $k; - if ($vv !== null) { - $qs .= '=' . $encoder($vv); - } - $qs .= '&'; - } - } - } - - return $qs ? (string) substr($qs, 0, -1) : ''; + return Query::build($params, $encoding); } /** * Determines the mimetype of a file by looking at its extension. * - * @param $filename + * @param string $filename * - * @return null|string + * @return string|null + * + * @deprecated mimetype_from_filename will be removed in guzzlehttp/psr7:2.0. Use MimeType::fromFilename instead. */ function mimetype_from_filename($filename) { - return mimetype_from_extension(pathinfo($filename, PATHINFO_EXTENSION)); + return MimeType::fromFilename($filename); } /** @@ -632,119 +342,13 @@ function mimetype_from_filename($filename) * @param $extension string The file extension. * * @return string|null + * * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types + * @deprecated mimetype_from_extension will be removed in guzzlehttp/psr7:2.0. Use MimeType::fromExtension instead. */ function mimetype_from_extension($extension) { - static $mimetypes = [ - '3gp' => 'video/3gpp', - '7z' => 'application/x-7z-compressed', - 'aac' => 'audio/x-aac', - 'ai' => 'application/postscript', - 'aif' => 'audio/x-aiff', - 'asc' => 'text/plain', - 'asf' => 'video/x-ms-asf', - 'atom' => 'application/atom+xml', - 'avi' => 'video/x-msvideo', - 'bmp' => 'image/bmp', - 'bz2' => 'application/x-bzip2', - 'cer' => 'application/pkix-cert', - 'crl' => 'application/pkix-crl', - 'crt' => 'application/x-x509-ca-cert', - 'css' => 'text/css', - 'csv' => 'text/csv', - 'cu' => 'application/cu-seeme', - 'deb' => 'application/x-debian-package', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dvi' => 'application/x-dvi', - 'eot' => 'application/vnd.ms-fontobject', - 'eps' => 'application/postscript', - 'epub' => 'application/epub+zip', - 'etx' => 'text/x-setext', - 'flac' => 'audio/flac', - 'flv' => 'video/x-flv', - 'gif' => 'image/gif', - 'gz' => 'application/gzip', - 'htm' => 'text/html', - 'html' => 'text/html', - 'ico' => 'image/x-icon', - 'ics' => 'text/calendar', - 'ini' => 'text/plain', - 'iso' => 'application/x-iso9660-image', - 'jar' => 'application/java-archive', - 'jpe' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'js' => 'text/javascript', - 'json' => 'application/json', - 'latex' => 'application/x-latex', - 'log' => 'text/plain', - 'm4a' => 'audio/mp4', - 'm4v' => 'video/mp4', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mov' => 'video/quicktime', - 'mkv' => 'video/x-matroska', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mp4a' => 'audio/mp4', - 'mp4v' => 'video/mp4', - 'mpe' => 'video/mpeg', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mpg4' => 'video/mp4', - 'oga' => 'audio/ogg', - 'ogg' => 'audio/ogg', - 'ogv' => 'video/ogg', - 'ogx' => 'application/ogg', - 'pbm' => 'image/x-portable-bitmap', - 'pdf' => 'application/pdf', - 'pgm' => 'image/x-portable-graymap', - 'png' => 'image/png', - 'pnm' => 'image/x-portable-anymap', - 'ppm' => 'image/x-portable-pixmap', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'ps' => 'application/postscript', - 'qt' => 'video/quicktime', - 'rar' => 'application/x-rar-compressed', - 'ras' => 'image/x-cmu-raster', - 'rss' => 'application/rss+xml', - 'rtf' => 'application/rtf', - 'sgm' => 'text/sgml', - 'sgml' => 'text/sgml', - 'svg' => 'image/svg+xml', - 'swf' => 'application/x-shockwave-flash', - 'tar' => 'application/x-tar', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'torrent' => 'application/x-bittorrent', - 'ttf' => 'application/x-font-ttf', - 'txt' => 'text/plain', - 'wav' => 'audio/x-wav', - 'webm' => 'video/webm', - 'webp' => 'image/webp', - 'wma' => 'audio/x-ms-wma', - 'wmv' => 'video/x-ms-wmv', - 'woff' => 'application/x-font-woff', - 'wsdl' => 'application/wsdl+xml', - 'xbm' => 'image/x-xbitmap', - 'xls' => 'application/vnd.ms-excel', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xml' => 'application/xml', - 'xpm' => 'image/x-xpixmap', - 'xwd' => 'image/x-xwindowdump', - 'yaml' => 'text/yaml', - 'yml' => 'text/yaml', - 'zip' => 'application/zip', - ]; - - $extension = strtolower($extension); - - return isset($mimetypes[$extension]) - ? $mimetypes[$extension] - : null; + return MimeType::fromExtension($extension); } /** @@ -757,61 +361,14 @@ function mimetype_from_extension($extension) * @param string $message HTTP request or response to parse. * * @return array + * * @internal + * + * @deprecated _parse_message will be removed in guzzlehttp/psr7:2.0. Use Message::parseMessage instead. */ function _parse_message($message) { - if (!$message) { - throw new \InvalidArgumentException('Invalid message'); - } - - $message = ltrim($message, "\r\n"); - - $messageParts = preg_split("/\r?\n\r?\n/", $message, 2); - - if ($messageParts === false || count($messageParts) !== 2) { - throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); - } - - list($rawHeaders, $body) = $messageParts; - $rawHeaders .= "\r\n"; // Put back the delimiter we split previously - $headerParts = preg_split("/\r?\n/", $rawHeaders, 2); - - if ($headerParts === false || count($headerParts) !== 2) { - throw new \InvalidArgumentException('Invalid message: Missing status line'); - } - - list($startLine, $rawHeaders) = $headerParts; - - if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { - // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 - $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); - } - - /** @var array[] $headerLines */ - $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER); - - // If these aren't the same, then one line didn't match and there's an invalid header. - if ($count !== substr_count($rawHeaders, "\n")) { - // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4 - if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { - throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); - } - - throw new \InvalidArgumentException('Invalid header syntax'); - } - - $headers = []; - - foreach ($headerLines as $headerLine) { - $headers[$headerLine[1]][] = $headerLine[2]; - } - - return [ - 'start-line' => $startLine, - 'headers' => $headers, - 'body' => $body, - ]; + return Message::parseMessage($message); } /** @@ -821,79 +378,45 @@ function _parse_message($message) * @param array $headers Array of headers (each value an array). * * @return string + * * @internal + * + * @deprecated _parse_request_uri will be removed in guzzlehttp/psr7:2.0. Use Message::parseRequestUri instead. */ function _parse_request_uri($path, array $headers) { - $hostKey = array_filter(array_keys($headers), function ($k) { - return strtolower($k) === 'host'; - }); - - // If no host is found, then a full URI cannot be constructed. - if (!$hostKey) { - return $path; - } - - $host = $headers[reset($hostKey)][0]; - $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; - - return $scheme . '://' . $host . '/' . ltrim($path, '/'); + return Message::parseRequestUri($path, $headers); } /** - * Get a short summary of the message body + * Get a short summary of the message body. * * Will return `null` if the response is not printable. * * @param MessageInterface $message The message to get the body summary * @param int $truncateAt The maximum allowed size of the summary * - * @return null|string + * @return string|null + * + * @deprecated get_message_body_summary will be removed in guzzlehttp/psr7:2.0. Use Message::bodySummary instead. */ function get_message_body_summary(MessageInterface $message, $truncateAt = 120) { - $body = $message->getBody(); - - if (!$body->isSeekable() || !$body->isReadable()) { - return null; - } - - $size = $body->getSize(); - - if ($size === 0) { - return null; - } - - $summary = $body->read($truncateAt); - $body->rewind(); - - if ($size > $truncateAt) { - $summary .= ' (truncated...)'; - } - - // Matches any printable character, including unicode characters: - // letters, marks, numbers, punctuation, spacing, and separators. - if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { - return null; - } - - return $summary; + return Message::bodySummary($message, $truncateAt); } -/** @internal */ +/** + * Remove the items given by the keys, case insensitively from the data. + * + * @param iterable $keys + * + * @return array + * + * @internal + * + * @deprecated _caseless_remove will be removed in guzzlehttp/psr7:2.0. Use Utils::caselessRemove instead. + */ function _caseless_remove($keys, array $data) { - $result = []; - - foreach ($keys as &$key) { - $key = strtolower($key); - } - - foreach ($data as $k => $v) { - if (!in_array(strtolower($k), $keys)) { - $result[$k] = $v; - } - } - - return $result; + return Utils::caselessRemove($keys, $data); } diff --git a/vendor/league/plates/.github/workflows/docs.yml b/vendor/league/plates/.github/workflows/docs.yml new file mode 100644 index 00000000..b58513b2 --- /dev/null +++ b/vendor/league/plates/.github/workflows/docs.yml @@ -0,0 +1,26 @@ +name: docs + +on: + push: + branches: + - v3 + +jobs: + deploy: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: '0.79.1' + + - name: Build + run: hugo --minify -s doc + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./doc/public \ No newline at end of file diff --git a/vendor/league/plates/.github/workflows/php.yml b/vendor/league/plates/.github/workflows/php.yml new file mode 100644 index 00000000..40288ee4 --- /dev/null +++ b/vendor/league/plates/.github/workflows/php.yml @@ -0,0 +1,35 @@ +name: PHP + +on: [push] + +jobs: + run: + runs-on: 'ubuntu-latest' + strategy: + matrix: + php-versions: ['7.3', '7.4', '8.0'] + phpunit-versions: ['9.5'] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, intl + ini-values: post_max_size=256M, max_execution_time=180 + coverage: xdebug + tools: php-cs-fixer, phpunit:${{ matrix.phpunit-versions }} + + - name: Validate Composer + run: composer validate + - name: Install Composer Deps + run: composer install + - name: Run Tests + run: phpunit --testdox --coverage-text --coverage-clover=coverage.clover + - name: Upload Scrutinzer + continue-on-error: true + run: | + wget https://scrutinizer-ci.com/ocular.phar + php ocular.phar code-coverage:upload --format=php-clover coverage.clover \ No newline at end of file diff --git a/vendor/league/plates/CONTRIBUTING.md b/vendor/league/plates/CONTRIBUTING.md index 9eebab6e..c2cc4f69 100644 --- a/vendor/league/plates/CONTRIBUTING.md +++ b/vendor/league/plates/CONTRIBUTING.md @@ -19,4 +19,11 @@ We accept contributions via Pull Requests on [Github](https://github.com/thephpl ``` bash $ phpunit ``` + +## Docs + +Docs are served with hugo running on version 0.79 or later. + +You can view the docs locally with `hugo -s doc server` + **Happy coding**! \ No newline at end of file diff --git a/vendor/league/plates/README.md b/vendor/league/plates/README.md index 56679e19..1f76fd26 100644 --- a/vendor/league/plates/README.md +++ b/vendor/league/plates/README.md @@ -1,11 +1,11 @@ Plates ====== -[![Author](http://img.shields.io/badge/author-@reinink-blue.svg?style=flat-square)](https://twitter.com/reinink) +[![Maintainer](http://img.shields.io/badge/maintainer-@ragboyjr-blue.svg?style=flat-square)](https://twitter.com/ragboyjr) [![Source Code](http://img.shields.io/badge/source-league/plates-blue.svg?style=flat-square)](https://github.com/thephpleague/plates) [![Latest Version](https://img.shields.io/github/release/thephpleague/plates.svg?style=flat-square)](https://github.com/thephpleague/plates/releases) [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE) -[![Build Status](https://img.shields.io/travis/thephpleague/plates/master.svg?style=flat-square)](https://travis-ci.org/thephpleague/plates) +[![Build Status](https://img.shields.io/github/workflow/status/thephpleague/plates/PHP/v3?style=flat-square)](https://github.com/thephpleague/plates/actions?query=workflow%3APHP+branch%3Av3) [![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/thephpleague/plates.svg?style=flat-square)](https://scrutinizer-ci.com/g/thephpleague/plates/code-structure) [![Quality Score](https://img.shields.io/scrutinizer/g/thephpleague/plates.svg?style=flat-square)](https://scrutinizer-ci.com/g/thephpleague/plates) [![Total Downloads](https://img.shields.io/packagist/dt/league/plates.svg?style=flat-square)](https://packagist.org/packages/league/plates) @@ -14,15 +14,15 @@ Plates is a native PHP template system that's fast, easy to use and easy to exte ### Highlights -- Native PHP templates, no new [syntax](http://platesphp.com/templates/syntax/) to learn +- Native PHP templates, no new [syntax](https://platesphp.com/templates/syntax/) to learn - Plates is a template system, not a template language - Plates encourages the use of existing PHP functions -- Increase code reuse with template [layouts](http://platesphp.com/templates/layouts/) and [inheritance](http://platesphp.com/templates/inheritance/) -- Template [folders](http://platesphp.com/engine/folders/) for grouping templates into namespaces -- [Data](http://platesphp.com/templates/data/#preassigned-and-shared-data) sharing across templates -- Preassign [data](http://platesphp.com/templates/data/#preassigned-and-shared-data) to specific templates -- Built-in [escaping](http://platesphp.com/templates/escaping/) helpers -- Easy to extend using [functions](http://platesphp.com/engine/functions/) and [extensions](http://platesphp.com/engine/extensions/) +- Increase code reuse with template [layouts](https://platesphp.com/templates/layouts/) and [inheritance](https://platesphp.com/templates/inheritance/) +- Template [folders](https://platesphp.com/engine/folders/) for grouping templates into namespaces +- [Data](https://platesphp.com/templates/data/#preassigned-and-shared-data) sharing across templates +- Preassign [data](https://platesphp.com/templates/data/#preassigned-and-shared-data) to specific templates +- Built-in [escaping](https://platesphp.com/templates/escaping/) helpers +- Easy to extend using [functions](https://platesphp.com/engine/functions/) and [extensions](https://platesphp.com/engine/extensions/) - Framework-agnostic, will work with any project - Decoupled design makes templates easy to test - Composer ready and PSR-2 compliant @@ -37,7 +37,7 @@ composer require league/plates ## Documentation -Full documentation can be found at [platesphp.com](http://platesphp.com/). +Full documentation can be found at [platesphp.com](https://platesphp.com/). ## Testing @@ -51,11 +51,12 @@ Please see [CONTRIBUTING](https://github.com/thephpleague/plates/blob/master/CON ## Security -If you discover any security related issues, please email jonathan@reinink.ca instead of using the issue tracker. +If you discover any security related issues, please email ragboyjr@icloud.com instead of using the issue tracker. ## Credits -- [Jonathan Reinink](https://github.com/reinink) +- [RJ Garcia](https://github.com/ragboyjr) (Current Maintainer) +- [Jonathan Reinink](https://github.com/reinink) (Original Author) - [All Contributors](https://github.com/thephpleague/plates/contributors) ## License diff --git a/vendor/league/plates/composer.json b/vendor/league/plates/composer.json index 8971a983..de9f1f7d 100644 --- a/vendor/league/plates/composer.json +++ b/vendor/league/plates/composer.json @@ -8,34 +8,45 @@ "templates", "views" ], - "homepage": "http://platesphp.com", + "homepage": "https://platesphp.com", "license": "MIT", "authors" : [ { "name": "Jonathan Reinink", "email": "jonathan@reinink.ca", "role": "Developer" + }, + { + "name": "RJ Garcia", + "email": "ragboyjr@icloud.com", + "role": "Developer" } ], "require" : { - "php": "^5.3 | ^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "mikey179/vfsStream": "^1.4", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.5" }, "autoload": { "psr-4": { "League\\Plates\\": "src" } }, + "autoload-dev": { + "psr-4": { + "League\\Plates\\Tests\\": "tests" + } + }, "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "scripts": { - "test": "phpunit" + "test": "phpunit --testdox", + "docs": "hugo -s doc server" } } diff --git a/vendor/league/plates/doc/config.toml b/vendor/league/plates/doc/config.toml new file mode 100644 index 00000000..8b7c1074 --- /dev/null +++ b/vendor/league/plates/doc/config.toml @@ -0,0 +1,15 @@ +baseURL = "https://platesphp.com/" +languageCode = "en-us" +title = "Plates" + +pygmentsUseClasses = true + +googleAnalytics = "UA-46050814-2" + +[params] + tagline = "Native PHP Templates" + description = "Plates is a Twig inspired, native PHP template system that brings modern template language functionality to native PHP templates." + [params.images] + favicon = "favicon/favicon.ico" + appleTouch = "favicon/apple-touch-icon-precomposed.png" + logo = "images/logo.png" \ No newline at end of file diff --git a/vendor/league/plates/docs/index.md b/vendor/league/plates/doc/content/_index.md similarity index 52% rename from vendor/league/plates/docs/index.md rename to vendor/league/plates/doc/content/_index.md index 3c342719..b1324225 100644 --- a/vendor/league/plates/docs/index.md +++ b/vendor/league/plates/doc/content/_index.md @@ -1,17 +1,16 @@ ---- -layout: default -permalink: / -title: Introduction ---- ++++ +title = "Introduction" +[menu.main] +parent = "getting-started" +weight = 1 ++++ -Introduction -============ - -[![Author](http://img.shields.io/badge/author-@reinink-blue.svg?style=flat-square)](https://twitter.com/reinink) +[![Maintainer](http://img.shields.io/badge/maintainer-@ragboyjr-blue.svg?style=flat-square)](https://twitter.com/reinink) [![Source Code](http://img.shields.io/badge/source-league/plates-blue.svg?style=flat-square)](https://github.com/thephpleague/plates) [![Latest Version](https://img.shields.io/github/release/thephpleague/plates.svg?style=flat-square)](https://github.com/thephpleague/plates/releases) -[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](https://github.com/thephpleague/plates/blob/master/LICENSE)
-[![Build Status](https://img.shields.io/travis/thephpleague/plates/master.svg?style=flat-square)](https://travis-ci.org/thephpleague/plates) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](https://github.com/thephpleague/plates/blob/master/LICENSE) +{{}}
{{}} +[![Build Status](https://img.shields.io/github/workflow/status/thephpleague/plates/PHP/v3?style=flat-square)](https://github.com/thephpleague/plates/actions?query=workflow%3APHP+branch%3Av3) [![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/thephpleague/plates.svg?style=flat-square)](https://scrutinizer-ci.com/g/thephpleague/plates/code-structure) [![Quality Score](https://img.shields.io/scrutinizer/g/thephpleague/plates.svg?style=flat-square)](https://scrutinizer-ci.com/g/thephpleague/plates) [![Total Downloads](https://img.shields.io/packagist/dt/league/plates.svg?style=flat-square)](https://packagist.org/packages/league/plates) @@ -22,19 +21,19 @@ Plates is a native PHP template system that's fast, easy to use and easy to exte ## Highlights -- Native PHP templates, no new [syntax](/templates/syntax/) to learn +- Native PHP templates, no new [syntax]({{< relref "templates/syntax.md" >}}) to learn - Plates is a template system, not a template language - Plates encourages the use of existing PHP functions -- Increase code reuse with template [layouts](/templates/layouts/) and [inheritance](/templates/inheritance/) -- Template [folders](/engine/folders/) for grouping templates into namespaces -- [Data](/templates/data/#preassigned-and-shared-data) sharing across templates -- Preassign [data](/templates/data/#preassigned-and-shared-data) to specific templates -- Built-in [escaping](/templates/escaping/) helpers -- Easy to extend using [functions](/engine/functions/) and [extensions](/engine/extensions/) +- Increase code reuse with template [layouts]({{< relref "templates/layouts.md" >}}) and [inheritance]({{< relref "templates/inheritance.md" >}}) +- Template [folders]({{< relref "engine/folders.md" >}}) for grouping templates into namespaces +- [Data]({{< relref "templates/data.md#preassigned-and-shared-data" >}}) sharing across templates +- Preassign [data]({{< relref "templates/data#preassigned-and-shared-data" >}}) to specific templates +- Built-in [escaping]({{< relref "templates/escaping.md" >}}) helpers +- Easy to extend using [functions]({{< relref "engine/functions.md" >}}) and [extensions]({{< relref "engine/extensions.md" >}}) - Framework-agnostic, will work with any project - Decoupled design makes templates easy to test - Composer ready and PSR-2 compliant ## Questions? -Plates was created by [Jonathan Reinink](https://twitter.com/reinink). Submit issues to [Github](https://github.com/thephpleague/plates/issues). +Plates is maintained by [RJ Garcia](https://twitter.com/ragboyjr) and originally created by [Jonathan Reinink](https://twitter.com/reinink). Submit issues to [Github](https://github.com/thephpleague/plates/issues). diff --git a/vendor/league/plates/doc/content/engine/_index.md b/vendor/league/plates/doc/content/engine/_index.md new file mode 100644 index 00000000..a6f8de99 --- /dev/null +++ b/vendor/league/plates/doc/content/engine/_index.md @@ -0,0 +1,6 @@ ++++ +title = "The Engine" +[menu.main] +identifier = "engine" +weight = 2 ++++ \ No newline at end of file diff --git a/vendor/league/plates/docs/engine/extensions.md b/vendor/league/plates/doc/content/engine/extensions.md similarity index 85% rename from vendor/league/plates/docs/engine/extensions.md rename to vendor/league/plates/doc/content/engine/extensions.md index c40868a5..7d206713 100644 --- a/vendor/league/plates/docs/engine/extensions.md +++ b/vendor/league/plates/doc/content/engine/extensions.md @@ -1,13 +1,12 @@ ---- -layout: default -permalink: engine/extensions/ -title: Extensions ---- ++++ +title = "Extensions" +linkTitle = "Engine Extensions" +[menu.main] +parent = "engine" +weight = 5 ++++ -Extensions -========== - -Creating extensions couldn't be easier, and can really make Plates sing for your specific project. Start by creating a class that implements `\League\Plates\Extension\ExtensionInterface`. Next, register your template [functions](/engine/functions/) within a `register()` method. +Creating extensions couldn't be easier, and can really make Plates sing for your specific project. Start by creating a class that implements `\League\Plates\Extension\ExtensionInterface`. Next, register your template [functions]({{< relref "engine/functions.md" >}}) within a `register()` method. ## Simple extensions example @@ -41,7 +40,7 @@ To use this extension in your template, simply call your new functions:

Hello, e($this->uppercase($name))?>

~~~ -They can also be used in a [batch](/templates/functions/#batch-function-calls) compatible function: +They can also be used in a [batch]({{< relref "templates/functions.md#batch-function-calls" >}}) compatible function: ~~~ php

Hello e($name, 'uppercase')

@@ -87,7 +86,7 @@ To use this extension in your template, first call the primary function, then th ## Loading extensions -To enable an extension, load it into the [engine](/engine/) object using the `loadExtension()` method. +To enable an extension, load it into the [engine]({{< relref "engine/overview.md" >}}) object using the `loadExtension()` method. ~~~ php $engine->loadExtension(new ChangeCase()); @@ -117,4 +116,4 @@ class MyExtension implements ExtensionInterface // ... } } -~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/docs/engine/file-extensions.md b/vendor/league/plates/doc/content/engine/file-extensions.md similarity index 87% rename from vendor/league/plates/docs/engine/file-extensions.md rename to vendor/league/plates/doc/content/engine/file-extensions.md index 613bccf4..e58023b4 100644 --- a/vendor/league/plates/docs/engine/file-extensions.md +++ b/vendor/league/plates/doc/content/engine/file-extensions.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: engine/file-extensions/ -title: File extensions ---- - -File extensions -=============== ++++ +title = "File Extensions" +linkTitle = "Engine File Extensions" +[menu.main] +parent = "engine" +weight = 2 ++++ Plates does not enforce a specific template file extension. By default it assumes `.php`. This file extension is automatically appended to your template names when rendered. You are welcome to change the default extension using one of the following methods. diff --git a/vendor/league/plates/docs/engine/folders.md b/vendor/league/plates/doc/content/engine/folders.md similarity index 93% rename from vendor/league/plates/docs/engine/folders.md rename to vendor/league/plates/doc/content/engine/folders.md index 7991bfcd..c90bfb0b 100644 --- a/vendor/league/plates/docs/engine/folders.md +++ b/vendor/league/plates/doc/content/engine/folders.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: engine/folders/ -title: Folders ---- - -Folders -======= ++++ +title = "Folders" +linkTitle = "Engine Folders" +[menu.main] +parent = "engine" +weight = 3 ++++ Folders make it really easy to organize and access your templates. Folders allow you to group your templates under different namespaces, each of which having their own file system path. diff --git a/vendor/league/plates/docs/engine/functions.md b/vendor/league/plates/doc/content/engine/functions.md similarity index 50% rename from vendor/league/plates/docs/engine/functions.md rename to vendor/league/plates/doc/content/engine/functions.md index b677ec57..cb9941be 100644 --- a/vendor/league/plates/docs/engine/functions.md +++ b/vendor/league/plates/doc/content/engine/functions.md @@ -1,13 +1,12 @@ ---- -layout: default -permalink: engine/functions/ -title: Functions ---- ++++ +title = "Functions" +linkTitle = "Engine Functions" +[menu.main] +parent = "engine" +weight = 4 ++++ -Functions -========= - -While [extensions](/engine/extensions/) are awesome for adding additional reusable functionality to Plates, sometimes it's easier to just create a one-off function for a specific use case. Plates makes this easy to do. +While [extensions]({{< relref "engine/extensions.md" >}}) are awesome for adding additional reusable functionality to Plates, sometimes it's easier to just create a one-off function for a specific use case. Plates makes this easy to do. ## Registering functions @@ -27,8 +26,8 @@ To use this function in a template, simply call it like any other function:

Hello e($this->uppercase($name))

~~~ -It can also be used in a [batch](/templates/functions/#batch-function-calls) compatible function: +It can also be used in a [batch]({{< relref "templates/functions#batch-function-calls">}}) compatible function: ~~~ php

Hello e($name, 'uppercase')

-~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/docs/engine/index.md b/vendor/league/plates/doc/content/engine/overview.md similarity index 90% rename from vendor/league/plates/docs/engine/index.md rename to vendor/league/plates/doc/content/engine/overview.md index 6d428796..b7db2ff3 100644 --- a/vendor/league/plates/docs/engine/index.md +++ b/vendor/league/plates/doc/content/engine/overview.md @@ -1,11 +1,11 @@ ---- -layout: default -permalink: engine/ -title: The Engine ---- - -The Engine -========== ++++ +title = "Overview" +linkTitle = "Engine Overview" +aliases = ["/engine"] +[menu.main] +parent = "engine" +weight = 1 ++++ Plates uses a central object called the `Engine`, which is used to store the environment configuration, functions and extensions. It helps decouple your templates from the file system and other dependencies. For example, if you want to change the folder where your templates are stored, you can do so by simply changing the path in one location. @@ -15,7 +15,7 @@ Plates uses a central object called the `Engine`, which is used to store the env // Create new Plates engine $templates = new League\Plates\Engine('/path/to/templates'); -// Add any any additional folders +// Add any additional folders $templates->addFolder('emails', '/path/to/emails'); // Load any additional extensions @@ -53,4 +53,4 @@ class Controller return $this->templates->render('home'); } } -~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/doc/content/extensions/_index.md b/vendor/league/plates/doc/content/extensions/_index.md new file mode 100644 index 00000000..bfe10071 --- /dev/null +++ b/vendor/league/plates/doc/content/extensions/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Extensions" +[menu.main] +identifier = "extensions" +weight = 4 ++++ \ No newline at end of file diff --git a/vendor/league/plates/docs/extensions/asset.md b/vendor/league/plates/doc/content/extensions/asset.md similarity index 95% rename from vendor/league/plates/docs/extensions/asset.md rename to vendor/league/plates/doc/content/extensions/asset.md index 6a1d40e6..9d7d05f7 100644 --- a/vendor/league/plates/docs/extensions/asset.md +++ b/vendor/league/plates/doc/content/extensions/asset.md @@ -1,11 +1,9 @@ ---- -layout: default -permalink: extensions/asset/ -title: Asset extension ---- - -Asset -===== ++++ +title = "Asset" +[menu.main] +parent = "extensions" +weight = 1 ++++ The asset extension can be used to quickly create "cache busted" asset URLs in your templates. This is particularly helpful for aggressively cached files that can potentially change in the future, such as CSS files, JavaScript files and images. It works by appending the timestamp of the file's last update to its URL. For example, `/css/all.css` becomes `/css/all.1373577602.css`. As long as the file does not change, the timestamp remains the same and caching occurs. However, if the file is changed, a new URL is automatically generated with a new timestamp, and visitors receive the new file. diff --git a/vendor/league/plates/doc/content/extensions/community.md b/vendor/league/plates/doc/content/extensions/community.md new file mode 100644 index 00000000..6282d3a4 --- /dev/null +++ b/vendor/league/plates/doc/content/extensions/community.md @@ -0,0 +1,13 @@ ++++ +title = "Community" +[menu.main] +parent = "extensions" +weight = 3 ++++ + +This is a list of all the known community extensions for the Plates library. Please feel free to submit a [Pull Request](https://github.com/thephpleague/plates) to add your extension to this list. + +- [Laravel Provider](https://github.com/franzliedke/laravel-plates) +- [Attributes Rendering](https://github.com/RobinDev/platesAttributes) - Transforms arrays into html tag attributes. +- [Includer](https://github.com/odahcam/plates-includer) - Include your assets in an expert way. +- [Tapestry](https://github.com/tapestry-cloud/tapestry) - A blog aware, Plates based static site generator. diff --git a/vendor/league/plates/docs/extensions/uri.md b/vendor/league/plates/doc/content/extensions/uri.md similarity index 96% rename from vendor/league/plates/docs/extensions/uri.md rename to vendor/league/plates/doc/content/extensions/uri.md index e18c2060..1f3be1a2 100644 --- a/vendor/league/plates/docs/extensions/uri.md +++ b/vendor/league/plates/doc/content/extensions/uri.md @@ -1,11 +1,9 @@ ---- -layout: default -permalink: extensions/uri/ -title: URI extension ---- - -URI -=== ++++ +title = "URI" +[menu.main] +parent = "extensions" +weight = 2 ++++ The URI extension is designed to make URI checks within templates easier. The most common use is marking the current page in a menu as "selected". It only has one function, `uri()`, but can do a number of helpful tasks depending on the parameters passed to it. diff --git a/vendor/league/plates/doc/content/getting-started/_index.md b/vendor/league/plates/doc/content/getting-started/_index.md new file mode 100644 index 00000000..19d0b831 --- /dev/null +++ b/vendor/league/plates/doc/content/getting-started/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Getting Started" +[menu.main] +identifier = "getting-started" +weight = 1 ++++ \ No newline at end of file diff --git a/vendor/league/plates/docs/installation.md b/vendor/league/plates/doc/content/getting-started/installation.md similarity index 84% rename from vendor/league/plates/docs/installation.md rename to vendor/league/plates/doc/content/getting-started/installation.md index ba7a2b63..0e7c9c68 100644 --- a/vendor/league/plates/docs/installation.md +++ b/vendor/league/plates/doc/content/getting-started/installation.md @@ -1,11 +1,9 @@ ---- -layout: default -permalink: installation/ -title: Installation ---- - -Installation -============ ++++ +title = "Installation" +[menu.main] +parent = "getting-started" +weight = 3 ++++ ## Using Composer @@ -15,7 +13,7 @@ Plates is available on [Packagist](https://packagist.org/packages/league/plates) composer require league/plates ~~~ -
composer.json
+{{< code-filename composer.json >}} ~~~ javascript { "require": { diff --git a/vendor/league/plates/docs/simple-example.md b/vendor/league/plates/doc/content/getting-started/simple-example.md similarity index 72% rename from vendor/league/plates/docs/simple-example.md rename to vendor/league/plates/doc/content/getting-started/simple-example.md index 35f9b71d..1f177997 100644 --- a/vendor/league/plates/docs/simple-example.md +++ b/vendor/league/plates/doc/content/getting-started/simple-example.md @@ -1,11 +1,9 @@ ---- -layout: default -permalink: simple-example/ -title: Simple example ---- - -Simple example -============== ++++ +title = "Simple Example" +[menu.main] +parent = "getting-started" +weight = 2 ++++ Here is a simple example of how to use Plates. We will assume the following directory stucture: @@ -29,7 +27,7 @@ echo $templates->render('profile', ['name' => 'Jonathan']); ## The page template -
profile.php
+{{< code-filename profile.php >}} ~~~ php layout('template', ['title' => 'User Profile']) ?> @@ -39,16 +37,14 @@ echo $templates->render('profile', ['name' => 'Jonathan']); ## The layout template -
template.php
+{{< code-filename template.php >}} ~~~ php - + <?=$this->e($title)?> - - - -section('content')?> - - + + + section('content')?> + ~~~ \ No newline at end of file diff --git a/vendor/league/plates/doc/content/templates/_index.md b/vendor/league/plates/doc/content/templates/_index.md new file mode 100644 index 00000000..19f973fd --- /dev/null +++ b/vendor/league/plates/doc/content/templates/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Templates" +[menu.main] +identifier = "templates" +weight = 3 ++++ \ No newline at end of file diff --git a/vendor/league/plates/docs/templates/data.md b/vendor/league/plates/doc/content/templates/data.md similarity index 89% rename from vendor/league/plates/docs/templates/data.md rename to vendor/league/plates/doc/content/templates/data.md index 33bfb2aa..4330eed4 100644 --- a/vendor/league/plates/docs/templates/data.md +++ b/vendor/league/plates/doc/content/templates/data.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: templates/data/ -title: Data ---- - -Data -==== ++++ +title = "Data" +linkTitle = "Templates Data" +[menu.main] +parent = "templates" +weight = 2 ++++ It's very common to share application data (variables) with a template. Data can be whatever you want: strings, arrays, objects, etc. Plates allows you set both template specific data as well as shared template data. @@ -30,7 +29,7 @@ $template->data(['name' => 'Jonathan']); ## Accessing data -Template data is available as locally scoped variables at the time of rendering. Continuing with the example above, here is how you would [escape](/templates/escaping/) and output the "name" value in a template: +Template data is available as locally scoped variables at the time of rendering. Continuing with the example above, here is how you would [escape]({{< relref "templates/escaping.md" >}}) and output the "name" value in a template: ~~~ php

Hello e($name)?>

@@ -58,4 +57,4 @@ To assign data to ALL templates, simply omit the second parameter: $templates->addData(['name' => 'Jonathan']); ~~~ -Keep in mind that shared data is assigned to a template when it's first created, meaning any conflicting data assigned that's afterwards to a specific template will overwrite the shared data. This is generally desired behavior. \ No newline at end of file +Keep in mind that shared data is assigned to a template when it's first created, meaning any conflicting data assigned that's afterwards to a specific template will overwrite the shared data. This is generally desired behavior. diff --git a/vendor/league/plates/docs/templates/escaping.md b/vendor/league/plates/doc/content/templates/escaping.md similarity index 83% rename from vendor/league/plates/docs/templates/escaping.md rename to vendor/league/plates/doc/content/templates/escaping.md index 4dcd2f62..8cb44b29 100644 --- a/vendor/league/plates/docs/templates/escaping.md +++ b/vendor/league/plates/doc/content/templates/escaping.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: templates/escaping/ -title: Escaping ---- - -Escaping -======== ++++ +title = "Escaping" +linkTitle = "Templates Escaping" +[menu.main] +parent = "templates" +weight = 8 ++++ Escaping is a form of [data filtering](http://www.phptherightway.com/#data_filtering) which sanitizes unsafe, user supplied input prior to outputting it as HTML. Plates provides two shortcuts to the `htmlspecialchars()` function. @@ -20,7 +19,7 @@ Escaping is a form of [data filtering](http://www.phptherightway.com/#data_filte ## Batch function calls -The escape functions also support [batch](/templates/functions/#batch-function-calls) function calls, which allow you to apply multiple functions, including native PHP functions, to a variable at one time. +The escape functions also support [batch]({{< relref "templates/functions.md#batch-function-calls" >}}) function calls, which allow you to apply multiple functions, including native PHP functions, to a variable at one time. ~~~ php

Welcome e($name, 'strip_tags|strtoupper')?>

@@ -47,4 +46,4 @@ Some [libraries](http://framework.zend.com/manual/2.1/en/modules/zend.escaper.es Probably the biggest drawbacks to native PHP templates is the inability to auto-escape variables properly. Template languages like Twig and Smarty can identify "echoed" variables during a parsing stage and automatically escape them. This cannot be done in native PHP as the language does not offer overloading functionality for it's output functions (ie. `print` and `echo`). -Don't worry, escaping can still be done safely, it just means you are responsible for manually escaping each variable on output. Consider creating a snippet for one of the above, built-in escaping functions to make this process easier. \ No newline at end of file +Don't worry, escaping can still be done safely, it just means you are responsible for manually escaping each variable on output. Consider creating a snippet for one of the above, built-in escaping functions to make this process easier. diff --git a/vendor/league/plates/docs/templates/functions.md b/vendor/league/plates/doc/content/templates/functions.md similarity index 77% rename from vendor/league/plates/docs/templates/functions.md rename to vendor/league/plates/doc/content/templates/functions.md index 234d9cf1..ba41bdb7 100644 --- a/vendor/league/plates/docs/templates/functions.md +++ b/vendor/league/plates/doc/content/templates/functions.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: templates/functions/ -title: Functions ---- - -Functions -========= ++++ +title = "Functions" +linkTitle = "Templates Functions" +[menu.main] +parent = "templates" +weight = 3 ++++ Template functions in Plates are accessed using the `$this` pseudo-variable. @@ -16,7 +15,7 @@ Template functions in Plates are accessed using the `$this` pseudo-variable. ## Custom fuctions -In addition to the functions included with Plates, it's also possible to add [one-off functions](/engine/functions/), or even groups of functions, known as [extensions](/engine/extensions/). +In addition to the functions included with Plates, it's also possible to add [one-off functions]({{< relref "engine/functions.md" >}}), or even groups of functions, known as [extensions]({{< relref "engine/extensions.md" >}}). ## Batch function calls @@ -30,7 +29,7 @@ Sometimes you need to apply more than function to a variable in your templates.

Welcome batch($name, 'strip_tags|strtoupper|escape')?>

~~~ -The [escape](/templates/escaping/) functions also support batch function calls. +The [escape]({{< relref "templates/escaping.md" >}}) functions also support batch function calls. ~~~ php

Welcome e($name, 'strip_tags|strtoupper')?>

@@ -44,4 +43,4 @@ The batch functions works well for "piped" functions that accept one parameter, batch('Jonathan', 'escape|strtoupper|strtolower')?> -~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/docs/templates/inheritance.md b/vendor/league/plates/doc/content/templates/inheritance.md similarity index 59% rename from vendor/league/plates/docs/templates/inheritance.md rename to vendor/league/plates/doc/content/templates/inheritance.md index 9b0f211a..d0676e81 100644 --- a/vendor/league/plates/docs/templates/inheritance.md +++ b/vendor/league/plates/doc/content/templates/inheritance.md @@ -1,20 +1,19 @@ ---- -layout: default -permalink: templates/inheritance/ -title: Inheritance ---- - -Inheritance -=========== - -By combining [layouts](/templates/layouts/) and [sections](/templates/sections/), Plates allows you to "build up" your pages using predefined sections. This is best understand using an example: ++++ +title = "Inheritance" +linkTitle = "Templates Inheritance" +[menu.main] +parent = "templates" +weight = 7 ++++ +By combining [layouts]({{< relref "templates/layouts.md" >}}) and [sections]({{< relref "templates/sections.md" >}}), Plates allows you to "build up" your pages using predefined sections. This is best understand using an example: ## Inheritance example -The following example illustrates a pretty standard website. Start by creating a site template, which includes your header and footer as well as any predefined content [sections](/templates/sections/). Notice how Plates makes it possible to even set default section content, in the event that a page doesn't define it. +The following example illustrates a pretty standard website. Start by creating a site template, which includes your header and footer as well as any predefined content [sections]({{< relref "templates/sections.md" >}}). Notice how Plates makes it possible to even set default section content, in the event that a page doesn't define it. + +{{< code-filename template.php >}} -
template.php
~~~ php @@ -40,9 +39,10 @@ The following example illustrates a pretty standard website. Start by creating a ~~~ -With the template defined, any page can now "implement" this [layout](/templates/layouts/). Notice how each section of content is defined between the `start()` and `end()` functions. +With the template defined, any page can now "implement" this [layout]({{< relref "templates/layouts.md" >}}). Notice how each section of content is defined between the `start()` and `end()` functions. + +{{< code-filename profile.php >}} -
profile.php
~~~ php layout('template', ['title' => 'User Profile']) ?> @@ -60,4 +60,4 @@ With the template defined, any page can now "implement" this [layout](/templates
  • Example Link
  • stop() ?> -~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/docs/templates/layouts.md b/vendor/league/plates/doc/content/templates/layouts.md similarity index 82% rename from vendor/league/plates/docs/templates/layouts.md rename to vendor/league/plates/doc/content/templates/layouts.md index 63c871df..88a2ad77 100644 --- a/vendor/league/plates/docs/templates/layouts.md +++ b/vendor/league/plates/doc/content/templates/layouts.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: templates/layouts/ -title: Layouts ---- - -Layouts -======= ++++ +title = "Layouts" +linkTitle = "Templates Layouts" +[menu.main] +parent = "templates" +weight = 5 ++++ The `layout()` function allows you to define a layout template that a template will implement. It's like having separate header and footer templates in one file. @@ -20,7 +19,7 @@ The `layout()` function can be called anywhere in a template, since the layout t

    Hello, e($name)?>

    ~~~ -This function also works with [folders](/engine/folders/): +This function also works with [folders]({{< relref "engine/folders.md" >}}): ~~~ php layout('shared::template') ?> @@ -36,7 +35,7 @@ To assign data (variables) to a layout template, pass them as an array to the `l ## Accessing the content -To access the rendered template content within the layout, use the `section()` function, passing `'content'` as the section name. This will return all outputted content from the template that hasn't been defined in a [section](/templates/sections/). +To access the rendered template content within the layout, use the `section()` function, passing `'content'` as the section name. This will return all outputted content from the template that hasn't been defined in a [section]({{< relref "templates/sections.md" >}}). ~~~ php @@ -57,7 +56,8 @@ Plates allows stacking of layouts, allowing even further simplification and orga ### The main site layout -
    template.php
    +{{< code-filename template.php >}} + ~~~ php @@ -73,9 +73,10 @@ Plates allows stacking of layouts, allowing even further simplification and orga ### The blog layout -
    blog.php
    +{{< code-filename blog.php >}} + ~~~ php -layout('template') ?> +layout('template', ['title' => $title]) ?>

    The Blog

    @@ -91,7 +92,8 @@ Plates allows stacking of layouts, allowing even further simplification and orga ### A blog article -
    blog-article.php
    +{{< code-filename blog-article.php >}} + ~~~ php layout('blog', ['title' => $article->title]) ?> @@ -99,4 +101,4 @@ Plates allows stacking of layouts, allowing even further simplification and orga
    e($article->content)?>
    -~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/docs/templates/nesting.md b/vendor/league/plates/doc/content/templates/nesting.md similarity index 81% rename from vendor/league/plates/docs/templates/nesting.md rename to vendor/league/plates/doc/content/templates/nesting.md index bc60aeb9..6243a277 100644 --- a/vendor/league/plates/docs/templates/nesting.md +++ b/vendor/league/plates/doc/content/templates/nesting.md @@ -1,11 +1,10 @@ ---- -layout: default -permalink: templates/nesting/ -title: Nesting ---- - -Nesting -======= ++++ +title = "Nesting" +linkTitle = "Templates Nesting" +[menu.main] +parent = "templates" +weight = 4 ++++ Including another template into the current template is done using the `insert()` function: @@ -17,7 +16,7 @@ Including another template into the current template is done using the `insert() insert('partials/footer') ?> ~~~ -The `insert()` function also works with [folders](/engine/folders/): +The `insert()` function also works with [folders]({{< relref "engine/folders.md" >}}): ~~~ php insert('partials::header') ?> @@ -41,4 +40,4 @@ To assign data (variables) to a nested template, pass them as an array to the `i

    Your content.

    insert('partials/footer') ?> -~~~ \ No newline at end of file +~~~ diff --git a/vendor/league/plates/docs/templates/index.md b/vendor/league/plates/doc/content/templates/overview.md similarity index 81% rename from vendor/league/plates/docs/templates/index.md rename to vendor/league/plates/doc/content/templates/overview.md index f08f1469..e6c7c028 100644 --- a/vendor/league/plates/docs/templates/index.md +++ b/vendor/league/plates/doc/content/templates/overview.md @@ -1,13 +1,12 @@ ---- -layout: default -permalink: templates/ -title: Templates ---- ++++ +title = "Overview" +linkTitle = "Templates Overview" +[menu.main] +parent = "templates" +weight = 1 ++++ -Templates -========= - -Plates templates are very simple PHP objects. Generally you'll want to create these using the two factory methods, `make()` and `render()`, in the [engine](/engine/). For example: +Plates templates are very simple PHP objects. Generally you'll want to create these using the two factory methods, `make()` and `render()`, in the [engine]({{< relref "engine/overview.md" >}}). For example: ~~~ php // Create new Plates instance @@ -20,11 +19,11 @@ echo $templates->render('partials/header'); echo $templates->render('profile', ['name' => 'Jonathan']); ~~~ -For more information about how Plates is designed to be easily added to your application, see the section on [dependency injection](/engine/#dependency-injection). +For more information about how Plates is designed to be easily added to your application, see the section on [dependency injection]({{< relref "engine/overview.md#dependency-injection" >}}). ## Manually creating templates -It's also possible to create templates manually. The only dependency they require is an instance of the [engine](/engine/) object. For example: +It's also possible to create templates manually. The only dependency they require is an instance of the [engine]({{< relref "engine/overview.md" >}}) object. For example: ~~~ php // Create new Plates instance diff --git a/vendor/league/plates/docs/templates/sections.md b/vendor/league/plates/doc/content/templates/sections.md similarity index 80% rename from vendor/league/plates/docs/templates/sections.md rename to vendor/league/plates/doc/content/templates/sections.md index a5cadcd3..06d4151b 100644 --- a/vendor/league/plates/docs/templates/sections.md +++ b/vendor/league/plates/doc/content/templates/sections.md @@ -1,13 +1,12 @@ ---- -layout: default -permalink: templates/sections/ -title: Sections ---- ++++ +title = "Sections" +linkTitle = "Templates Sections" +[menu.main] +parent = "templates" +weight = 6 ++++ -Sections -======== - -The `start()` and `stop` functions allow you to build sections (or blocks) of content within your template, and instead of them being rendered directly, they are saved for use elsewhere. For example, in your [layout](/templates/layouts/) template. +The `start()` and `stop` functions allow you to build sections (or blocks) of content within your template, and instead of them being rendered directly, they are saved for use elsewhere. For example, in your [layout]({{< relref "templates/layouts.md" >}}) template. ## Creating sections @@ -24,12 +23,16 @@ You define the name of the section with the `start()` function. To end a section ## Stacking section content -By default, when you render a section its content will overwrite any existing content for that section. However, it's possible to append (or stack) the content instead using the `push()` method. This can be useful for specifying any JavaScript libraries required by your child views. +By default, when you render a section its content will overwrite any existing content for that section. However, it's possible to append/prepend (or stack) the content instead using the `push()` or `unshift()` method respectively. This can be useful for specifying any JavaScript libraries or CSS files required by your child views. ~~~ php push('scripts') ?> end() ?> + +unshift('styles') ?> + +end() ?> ~~~

    The end() function is simply an alias of stop(). These functions can be used interchangeably.

    @@ -50,7 +53,7 @@ In situations where a page doesn't implement a particular section, it's helpful ### Defining it inline -If the default content can be defined in a single line of code, it's best to simply pass it as the second parameter of the `content()` function. +If the default content can be defined in a single line of code, it's best to simply pass it as the second parameter of the `section()` function. ~~~ php