summaryrefslogtreecommitdiffstats
path: root/vendor/jfcherng
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 11:31:45 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 11:31:45 +0000
commit4e393913a4b1f06509da4341f0f58a41adac9117 (patch)
tree9c27e3eb77d109dff5fd031502311c5616adab04 /vendor/jfcherng
parentInitial commit. (diff)
downloadicinga-php-thirdparty-4e393913a4b1f06509da4341f0f58a41adac9117.tar.xz
icinga-php-thirdparty-4e393913a4b1f06509da4341f0f58a41adac9117.zip
Adding upstream version 0.12.1+ds.upstream/0.12.1+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/jfcherng')
-rw-r--r--vendor/jfcherng/php-color-output/CHANGELOG.md51
-rw-r--r--vendor/jfcherng/php-color-output/LICENSE21
-rw-r--r--vendor/jfcherng/php-color-output/README.md99
-rw-r--r--vendor/jfcherng/php-color-output/UPGRADING_v2.md4
-rw-r--r--vendor/jfcherng/php-color-output/composer.json57
-rw-r--r--vendor/jfcherng/php-color-output/composer.lock3516
-rw-r--r--vendor/jfcherng/php-color-output/demo.php26
-rw-r--r--vendor/jfcherng/php-color-output/src/CliColor.php224
-rw-r--r--vendor/jfcherng/php-color-output/src/helpers.php37
-rw-r--r--vendor/jfcherng/php-diff/.php-cs-fixer.dist.php78
-rw-r--r--vendor/jfcherng/php-diff/.phpstorm.meta.php43
-rw-r--r--vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v2.md68
-rw-r--r--vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v3.md55
-rw-r--r--vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v4.md98
-rw-r--r--vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v5.md90
-rw-r--r--vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v6.md369
-rw-r--r--vendor/jfcherng/php-diff/LICENSE31
-rw-r--r--vendor/jfcherng/php-diff/README.md631
-rw-r--r--vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v3.md6
-rw-r--r--vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v4.md5
-rw-r--r--vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v5.md24
-rw-r--r--vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v6.md47
-rw-r--r--vendor/jfcherng/php-diff/composer.json69
-rw-r--r--vendor/jfcherng/php-diff/composer.lock4116
-rw-r--r--vendor/jfcherng/php-diff/example/README.md21
-rw-r--r--vendor/jfcherng/php-diff/example/demo_base.php78
-rw-r--r--vendor/jfcherng/php-diff/example/demo_cli.php38
-rw-r--r--vendor/jfcherng/php-diff/example/demo_web.php240
-rw-r--r--vendor/jfcherng/php-diff/example/diff-table.css128
-rw-r--r--vendor/jfcherng/php-diff/example/diff-table.scss211
-rw-r--r--vendor/jfcherng/php-diff/example/new_file.txt19
-rw-r--r--vendor/jfcherng/php-diff/example/old_file.txt18
-rw-r--r--vendor/jfcherng/php-diff/src/DiffHelper.php184
-rw-r--r--vendor/jfcherng/php-diff/src/Differ.php506
-rw-r--r--vendor/jfcherng/php-diff/src/Exception/FileNotFoundException.php13
-rw-r--r--vendor/jfcherng/php-diff/src/Exception/UnsupportedFunctionException.php13
-rw-r--r--vendor/jfcherng/php-diff/src/Factory/LineRendererFactory.php59
-rw-r--r--vendor/jfcherng/php-diff/src/Factory/RendererFactory.php83
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/AbstractRenderer.php246
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/AbstractHtml.php379
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/Combined.php516
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/Inline.php266
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/Json.php14
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/JsonHtml.php68
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/AbstractLineRenderer.php105
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Char.php36
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Line.php81
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/LineRendererInterface.php20
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/None.php20
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Word.php110
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Html/SideBySide.php281
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/RendererConstant.php116
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/RendererInterface.php35
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Text/AbstractText.php145
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Text/Context.php163
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Text/JsonText.php81
-rw-r--r--vendor/jfcherng/php-diff/src/Renderer/Text/Unified.php147
-rw-r--r--vendor/jfcherng/php-diff/src/Utility/Arr.php65
-rw-r--r--vendor/jfcherng/php-diff/src/Utility/Language.php131
-rw-r--r--vendor/jfcherng/php-diff/src/Utility/ReverseIterator.php51
-rw-r--r--vendor/jfcherng/php-diff/src/Utility/Str.php30
-rw-r--r--vendor/jfcherng/php-diff/src/languages/bul.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/chs.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/cht.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/cze.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/deu.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/eng.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/fra.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/ita.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/jpn.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/nob.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/por.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/readme.md1
-rw-r--r--vendor/jfcherng/php-diff/src/languages/rus.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/spa.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/tur.json5
-rw-r--r--vendor/jfcherng/php-diff/src/languages/ukr.json5
-rw-r--r--vendor/jfcherng/php-mb-string/CHANGELOG62
-rw-r--r--vendor/jfcherng/php-mb-string/LICENSE21
-rw-r--r--vendor/jfcherng/php-mb-string/README.md49
-rw-r--r--vendor/jfcherng/php-mb-string/composer.json53
-rw-r--r--vendor/jfcherng/php-mb-string/composer.lock3692
-rw-r--r--vendor/jfcherng/php-mb-string/src/MbString.php404
-rw-r--r--vendor/jfcherng/php-sequence-matcher/.php-cs-fixer.dist.php78
-rw-r--r--vendor/jfcherng/php-sequence-matcher/LICENSE31
-rw-r--r--vendor/jfcherng/php-sequence-matcher/README.md28
-rw-r--r--vendor/jfcherng/php-sequence-matcher/composer.json55
-rw-r--r--vendor/jfcherng/php-sequence-matcher/composer.lock3749
-rw-r--r--vendor/jfcherng/php-sequence-matcher/src/SequenceMatcher.php731
89 files changed, 23511 insertions, 0 deletions
diff --git a/vendor/jfcherng/php-color-output/CHANGELOG.md b/vendor/jfcherng/php-color-output/CHANGELOG.md
new file mode 100644
index 0000000..f1be6e0
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/CHANGELOG.md
@@ -0,0 +1,51 @@
+
+## VERSION 2 NAMESPACE CHANGE
+
+ * Version **2.0** - namespace change
+ * 2020-05-28 03:24 **2.0.2** allow PHP 8
+ * 1ef5198 chore: update deps
+ * 3c6ba82 chore: Composer PHP constrain >=7.1.3
+ * 5035eba chore: update deps
+ * c19946b docs: update readme
+ * 2020-04-06 15:51 **2.0.1** fix demo.php
+ * 245aa2f chore: allow PHPUnit ^9
+ * f139892 chore: update deps
+ * a09f00f fix: fix demo.php
+ * 8384498 Update deps
+ * 40e0d43 Update .travis.yml to PHP 7.4 stable
+ * 2746bcf Add php_codesniffer
+ * 6f96961 Update readme to use badges from shields.io
+ * 2019-07-13 17:50 **2.0.0** initial release
+ * d522a7d Add UPGRADING_v2.md
+ * 33fc823 Rename/modify CHANGELOG -> CHANGELOG.md
+ * 056f68a Renamed namespace and functions
+ * e036a8d Update deps
+ * 2a0b002 Update deps
+ * f51db25 Add .gitattributes
+ * 2e644d4 $ composer fix
+ * d9df730 Update deps
+ * 6556ba0 Update .travis.yml for 7.4snapshot
+ * e6b57cd Add .editorconfig
+ * 8b93884 Update deps
+ * e7be444 Temporary fix for CI
+ * 434fff4 year++
+ * 2c4077f Add tests for PHP 7.3
+
+## VERSION 1 INIT
+
+ * Version **1.0** - init
+ * 2018-11-27 21:25 **1.0.8** nits
+ * 61d365e Update codes
+ * b6e69f0 Update README
+ * 69d84bf Update deps
+ * 2018-09-04 18:56 **1.0.7** php-cs-fixer
+ * 7dd1322 php-cs-fixer: enable native_constant_invocation and native_function_invocation
+ * 1a1d921 Update deps
+ * 1af0ae3 Rename CHANGELOG.md -> CHANGELOG
+ * 47776c4 Update deps
+ * 2de4f26 Update .travis.yml
+ * 2018-07-18 08:47 **1.0.6** Add composer.lock
+ * 0281a77 Add composer.lock
+ * 2018-07-04 15:33 **1.0.5** nits
+ * fcecbfb Update .rmt.yml
+ * 2018-07-04 15:06 **1.0.4** initial release \ No newline at end of file
diff --git a/vendor/jfcherng/php-color-output/LICENSE b/vendor/jfcherng/php-color-output/LICENSE
new file mode 100644
index 0000000..e16b553
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018-2019 Jack Cherng (jfcherng)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/jfcherng/php-color-output/README.md b/vendor/jfcherng/php-color-output/README.md
new file mode 100644
index 0000000..ac55a02
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/README.md
@@ -0,0 +1,99 @@
+# php-color-output
+
+[![Travis (.org) branch](https://img.shields.io/travis/jfcherng/php-color-output/master?style=flat-square)](https://travis-ci.org/jfcherng/php-color-output)
+[![Packagist](https://img.shields.io/packagist/dt/jfcherng/php-color-output?style=flat-square)](https://packagist.org/packages/jfcherng/php-color-output)
+[![Packagist Version](https://img.shields.io/packagist/v/jfcherng/php-color-output?style=flat-square)](https://packagist.org/packages/jfcherng/php-color-output)
+[![Project license](https://img.shields.io/github/license/jfcherng/php-color-output?style=flat-square)](https://github.com/jfcherng/php-color-output/blob/master/LICENSE)
+[![GitHub stars](https://img.shields.io/github/stars/jfcherng/php-color-output?style=flat-square&logo=github)](https://github.com/jfcherng/php-color-output/stargazers)
+[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-blue.svg?style=flat-square&logo=paypal)](https://www.paypal.me/jfcherng/5usd)
+
+![demo.gif](https://i.imgur.com/xMhYHjV.gif)
+
+The above screenshot is the output of `demo.php`. See the [Example](#example) section.
+
+
+## Installation
+
+```text
+composer require jfcherng/php-color-output
+```
+
+
+## Available Styles
+
+| Background | Foreground | Compound | Special | Alias |
+| --- | --- | --- | --- | --- |
+| b_black | f_black | f_dark_gray | blink | b (bold) |
+| b_blue | f_blue | f_light_blue | bold | blk (blink) |
+| b_cyan | f_brown | f_light_cyan | dim | h (hidden) |
+| b_green | f_cyan | f_light_green | hidden | rev (reverse) |
+| b_light_gray | f_green | f_light_purple | reset | rst (reset) |
+| b_magenta | f_light_gray | f_light_red | reverse | u (underline) |
+| b_red | f_normal | f_white | underline | - |
+| b_yellow | f_purple | f_yellow | - | - |
+| - | f_red | - | - | - |
+
+
+## Functions and Methods
+
+```php
+<?php
+
+/**
+ * Make a string colorful.
+ *
+ * @param string $str the string
+ * @param string|string[] $colors the colors
+ * @param bool $reset reset color at the end of the string?
+ *
+ * @return string the colored string
+ */
+\Jfcherng\Utility\CliColor::color(string $str, $colors = [], bool $reset = true): string
+
+/**
+ * Remove all colors from a string.
+ *
+ * @param string $str the string
+ *
+ * @return string the string without colors
+ */
+\Jfcherng\Utility\CliColor::noColor(string $str): string
+
+// a global alias to \Jfcherng\Utility\CliColor::color()
+function str_cli_color(string $str, $colors = [], bool $reset = true): string
+
+// a global alias to \Jfcherng\Utility\CliColor::noColor()
+function str_cli_nocolor(string $str): string
+```
+
+
+## Example
+
+```php
+<?php
+
+include __DIR__ . '/vendor/autoload.php';
+
+// colors in a string using a comma as the delimiter
+echo str_cli_color('foo', 'f_light_cyan, b_yellow'); // "\033[1;36;43mfoo\033[0m"
+
+echo PHP_EOL;
+
+// colors in an array
+echo str_cli_color('foo', ['f_white', 'b_magenta']); // "\033[1;37;45mfoo\033[0m"
+
+echo PHP_EOL;
+
+// do not auto reset color at the end of string
+echo str_cli_color('foo', ['f_red', 'b_green', 'b', 'blk'], false); // "\033[31;42;1;5mfoo"
+
+// manually add color reset
+echo str_cli_color('', 'reset'); // "\033[0m"
+
+echo PHP_EOL;
+
+// remove all color codes from a string
+echo str_cli_nocolor("\033[31;42;5mfoo\033[0mbar"); // "foobar"
+
+echo PHP_EOL;
+```
diff --git a/vendor/jfcherng/php-color-output/UPGRADING_v2.md b/vendor/jfcherng/php-color-output/UPGRADING_v2.md
new file mode 100644
index 0000000..b21406d
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/UPGRADING_v2.md
@@ -0,0 +1,4 @@
+## Upgrading to v2
+
+- The class name/namespace has been changed from `Jfcherng\Color\Colorful` to `Jfcherng\Utility\CliColor`.
+- The names of helper functions have been changed from `str_color/str_nocolor` to `str_cli_color/str_cli_nocolor`.
diff --git a/vendor/jfcherng/php-color-output/composer.json b/vendor/jfcherng/php-color-output/composer.json
new file mode 100644
index 0000000..4d5eb4c
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/composer.json
@@ -0,0 +1,57 @@
+{
+ "name": "jfcherng/php-color-output",
+ "description": "Make your PHP command-line application colorful.",
+ "type": "library",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ }
+ ],
+ "keywords": [
+ "command-line",
+ "color",
+ "ansi-colors",
+ "str-color"
+ ],
+ "minimum-stability": "beta",
+ "prefer-stable": true,
+ "autoload": {
+ "psr-4": {
+ "Jfcherng\\Utility\\": "src/"
+ },
+ "files": [
+ "src/helpers.php"
+ ]
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Jfcherng\\Utility\\Test\\": "tests/"
+ }
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.15",
+ "phan/phan": "^2.2",
+ "phpunit/phpunit": "^7.2 || ^8.2 || ^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "config": {
+ "sort-packages": true
+ },
+ "scripts": {
+ "analyze": [
+ "phan --color",
+ "phpcs --colors -n"
+ ],
+ "fix": [
+ "php-cs-fixer fix --verbose"
+ ],
+ "test": [
+ "phpunit --verbose"
+ ]
+ }
+}
diff --git a/vendor/jfcherng/php-color-output/composer.lock b/vendor/jfcherng/php-color-output/composer.lock
new file mode 100644
index 0000000..01f8e36
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/composer.lock
@@ -0,0 +1,3516 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "16786cb573d87350b46cbf6a49dbf10f",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "composer/semver",
+ "version": "1.5.1",
+ "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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "time": "2020-01-13T12:06:48+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "1.4.1",
+ "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"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ }
+ ],
+ "time": "2020-03-01T12:26:26+00:00"
+ },
+ {
+ "name": "doctrine/annotations",
+ "version": "1.10.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d",
+ "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "1.*",
+ "ext-tokenizer": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/cache": "1.*",
+ "phpunit/phpunit": "^7.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "time": "2020-05-25T17:24:27+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^6.0",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.13",
+ "phpstan/phpstan-phpunit": "^0.11",
+ "phpstan/phpstan-shim": "^0.11",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2019-10-21T16:45:58+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
+ "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^6.0",
+ "phpstan/phpstan": "^0.11.8",
+ "phpunit/phpunit": "^8.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-25T17:44:05+00:00"
+ },
+ {
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.1.1",
+ "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"
+ },
+ "type": "library",
+ "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",
+ "time": "2020-03-11T15:21:41+00:00"
+ },
+ {
+ "name": "friendsofphp/php-cs-fixer",
+ "version": "v2.16.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
+ "reference": "83baf823a33a1cbd5416c8626935cf3f843c10b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/83baf823a33a1cbd5416c8626935cf3f843c10b0",
+ "reference": "83baf823a33a1cbd5416c8626935cf3f843c10b0",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4",
+ "composer/xdebug-handler": "^1.2",
+ "doctrine/annotations": "^1.2",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": "^5.6 || ^7.0",
+ "php-cs-fixer/diff": "^1.3",
+ "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0",
+ "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
+ "symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
+ "symfony/finder": "^3.0 || ^4.0 || ^5.0",
+ "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
+ "symfony/polyfill-php70": "^1.0",
+ "symfony/polyfill-php72": "^1.4",
+ "symfony/process": "^3.0 || ^4.0 || ^5.0",
+ "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
+ },
+ "require-dev": {
+ "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0",
+ "justinrainbow/json-schema": "^5.0",
+ "keradus/cli-executor": "^1.2",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.1",
+ "php-cs-fixer/accessible-object": "^1.0",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1",
+ "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1",
+ "phpunitgoodpractices/traits": "^1.8",
+ "symfony/phpunit-bridge": "^4.3 || ^5.0",
+ "symfony/yaml": "^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "ext-dom": "For handling output formats in XML",
+ "ext-mbstring": "For handling non-UTF8 characters in cache signature.",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
+ "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
+ },
+ "bin": [
+ "php-cs-fixer"
+ ],
+ "type": "application",
+ "autoload": {
+ "psr-4": {
+ "PhpCsFixer\\": "src/"
+ },
+ "classmap": [
+ "tests/Test/AbstractFixerTestCase.php",
+ "tests/Test/AbstractIntegrationCaseFactory.php",
+ "tests/Test/AbstractIntegrationTestCase.php",
+ "tests/Test/Assert/AssertTokensTrait.php",
+ "tests/Test/IntegrationCase.php",
+ "tests/Test/IntegrationCaseFactory.php",
+ "tests/Test/IntegrationCaseFactoryInterface.php",
+ "tests/Test/InternalIntegrationCaseFactory.php",
+ "tests/Test/IsIdenticalConstraint.php",
+ "tests/TestCase.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Dariusz Rumiński",
+ "email": "dariusz.ruminski@gmail.com"
+ }
+ ],
+ "description": "A tool to automatically fix PHP code style",
+ "funding": [
+ {
+ "url": "https://github.com/keradus",
+ "type": "github"
+ }
+ ],
+ "time": "2020-04-15T18:51:10+00:00"
+ },
+ {
+ "name": "microsoft/tolerant-php-parser",
+ "version": "v0.0.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/microsoft/tolerant-php-parser.git",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "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",
+ "time": "2020-02-18T02:57:19+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.9.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
+ "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "replace": {
+ "myclabs/deep-copy": "self.version"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "time": "2020-01-17T21:11:47+00:00"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v2.1.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"
+ },
+ "type": "library",
+ "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",
+ "time": "2020-04-16T18:48:43+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2018-07-02T15:55:56+00:00"
+ },
+ {
+ "name": "phan/phan",
+ "version": "2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phan/phan.git",
+ "reference": "df79f6def6cb7643955af14aa4b97acdd3495ad6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phan/phan/zipball/df79f6def6cb7643955af14aa4b97acdd3495ad6",
+ "reference": "df79f6def6cb7643955af14aa4b97acdd3495ad6",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4|^2.0",
+ "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."
+ },
+ "bin": [
+ "phan",
+ "phan_client",
+ "tocheckstyle"
+ ],
+ "type": "project",
+ "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"
+ ],
+ "time": "2020-05-02T14:09:53+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^2.0",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "time": "2018-07-08T19:23:20+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "time": "2018-07-08T19:19:57+00:00"
+ },
+ {
+ "name": "php-cs-fixer/diff",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-CS-Fixer/diff.git",
+ "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756",
+ "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7.23 || ^6.4.3",
+ "symfony/process": "^3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "SpacePossum"
+ }
+ ],
+ "description": "sebastian/diff v2 backport support for PHP5.6",
+ "homepage": "https://github.com/PHP-CS-Fixer",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2018-02-15T16:58:55+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.1.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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "time": "2020-04-27T09:25:28+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.1.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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
+ {
+ "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.",
+ "time": "2020-02-22T12:28:44+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.1.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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "time": "2020-02-18T18:59:58+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.10.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.5 || ^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2020-03-05T15:02:03+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "8.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc",
+ "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.3",
+ "phpunit/php-file-iterator": "^3.0",
+ "phpunit/php-text-template": "^2.0",
+ "phpunit/php-token-stream": "^4.0",
+ "sebastian/code-unit-reverse-lookup": "^2.0",
+ "sebastian/environment": "^5.0",
+ "sebastian/version": "^3.0",
+ "theseer/tokenizer": "^1.1.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "suggest": {
+ "ext-pcov": "*",
+ "ext-xdebug": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-05-23T08:02:54+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4",
+ "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-04-18T05:02:12+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a",
+ "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.0"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "time": "2020-02-07T06:06:11+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346",
+ "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2020-02-01T07:43:44+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "3.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/dc9368fae6ef2ffa57eba80a7410bcef81df6258",
+ "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-04-20T06:00:37+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c",
+ "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-05-06T09:56:31+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b570cd7edbe136055bf5f651857dc8af6b829d2",
+ "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.2.0",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.9.1",
+ "phar-io/manifest": "^1.0.3",
+ "phar-io/version": "^2.0.1",
+ "php": "^7.3",
+ "phpspec/prophecy": "^1.8.1",
+ "phpunit/php-code-coverage": "^8.0.1",
+ "phpunit/php-file-iterator": "^3.0",
+ "phpunit/php-invoker": "^3.0",
+ "phpunit/php-text-template": "^2.0",
+ "phpunit/php-timer": "^3.1.4",
+ "sebastian/code-unit": "^1.0.2",
+ "sebastian/comparator": "^4.0",
+ "sebastian/diff": "^4.0",
+ "sebastian/environment": "^5.0.1",
+ "sebastian/exporter": "^4.0",
+ "sebastian/global-state": "^4.0",
+ "sebastian/object-enumerator": "^4.0",
+ "sebastian/resource-operations": "^3.0",
+ "sebastian/type": "^2.0",
+ "sebastian/version": "^3.0"
+ },
+ "require-dev": {
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ],
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "funding": [
+ {
+ "url": "https://phpunit.de/donate.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-05-22T13:54:05+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2020-03-23T09:12:05+00:00"
+ },
+ {
+ "name": "sabre/event",
+ "version": "5.1.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"
+ },
+ "type": "library",
+ "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"
+ ],
+ "time": "2020-01-31T18:52:29+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ac958085bc19fcd1d36425c781ef4cbb5b06e2a5",
+ "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-04-30T05:58:10+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e",
+ "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "time": "2020-02-07T06:20:13+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8",
+ "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2020-02-07T06:08:51+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3e523c576f29dacecff309f35e4cc5a5c168e78a",
+ "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-05-08T05:01:12+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/c753f04d68cd489b6973cf9b4e505e191af3b05c",
+ "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-04-14T13:36:52+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "80c26562e964016538f832f305b2286e1ec29566"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566",
+ "reference": "80c26562e964016538f832f305b2286e1ec29566",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2020-02-07T06:10:52+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
+ "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.0"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2020-02-07T06:11:37+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "e67516b175550abad905dc952f43285957ef4363"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363",
+ "reference": "e67516b175550abad905dc952f43285957ef4363",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "time": "2020-02-07T06:12:23+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7",
+ "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "time": "2020-02-07T06:19:40+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "cdd86616411fc3062368b720b0425de10bd3d579"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579",
+ "reference": "cdd86616411fc3062368b720b0425de10bd3d579",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2020-02-07T06:18:20+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98",
+ "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "time": "2020-02-07T06:13:02+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/9e8f42f740afdea51f5f4e8cec2035580e797ee1",
+ "reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "time": "2020-02-07T06:13:43+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "0411bde656dce64202b39c2f4473993a9081d39e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e",
+ "reference": "0411bde656dce64202b39c2f4473993a9081d39e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2020-01-21T06:36:37+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.5.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6",
+ "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "bin": [
+ "bin/phpcs",
+ "bin/phpcbf"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards"
+ ],
+ "time": "2020-04-17T01:09:41+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.0.8",
+ "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": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Console Component",
+ "homepage": "https://symfony.com",
+ "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": "2020-03-30T11:42:42+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v5.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc",
+ "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5",
+ "symfony/event-dispatcher-contracts": "^2"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "^4.4|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0",
+ "symfony/expression-language": "^4.4|^5.0",
+ "symfony/http-foundation": "^4.4|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/stopwatch": "^4.4|^5.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony EventDispatcher Component",
+ "homepage": "https://symfony.com",
+ "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": "2020-03-27T16:56:45+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "af23c2584d4577d54661c434446fb8fbed6025dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd",
+ "reference": "af23c2584d4577d54661c434446fb8fbed6025dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5",
+ "psr/event-dispatcher": "^1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "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 dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "time": "2019-11-18T17:27:11+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v5.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/7cd0dafc4353a0f62e307df90b48466379c8cc91",
+ "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Filesystem Component",
+ "homepage": "https://symfony.com",
+ "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": "2020-04-12T14:40:17+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d",
+ "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Finder Component",
+ "homepage": "https://symfony.com",
+ "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": "2020-03-27T16:56:45+00:00"
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v5.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
+ "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "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 OptionsResolver Component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "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": "2020-04-06T10:40:56+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+ "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "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"
+ ],
+ "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": "2020-05-12T16:14:59+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "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": "2020-05-12T16:47:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php70",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php70.git",
+ "reference": "82225c2d7d23d7e70515496d249c0152679b468e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/82225c2d7d23d7e70515496d249c0152679b468e",
+ "reference": "82225c2d7d23d7e70515496d249c0152679b468e",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/random_compat": "~1.0|~2.0|~9.99",
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php70\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "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": "2020-05-12T16:47:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+ "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "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"
+ ],
+ "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": "2020-05-12T16:47:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc",
+ "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "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"
+ ],
+ "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": "2020-05-12T16:47:27+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v5.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7",
+ "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Process Component",
+ "homepage": "https://symfony.com",
+ "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": "2020-04-15T15:59:10+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749"
+ },
+ "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": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "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"
+ ],
+ "time": "2019-11-18T17:27:11+00:00"
+ },
+ {
+ "name": "symfony/stopwatch",
+ "version": "v5.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/stopwatch.git",
+ "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a1d86d30d4522423afc998f32404efa34fcf5a73",
+ "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5",
+ "symfony/service-contracts": "^1.0|^2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Stopwatch\\": ""
+ },
+ "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 Stopwatch Component",
+ "homepage": "https://symfony.com",
+ "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": "2020-03-27T16:56:45+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "time": "2019-06-13T22:48:21+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozart/assert.git",
+ "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+ "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "vimeo/psalm": "<3.9.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "time": "2020-04-18T12:12:48+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "beta",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=7.1.3"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "1.1.0"
+}
diff --git a/vendor/jfcherng/php-color-output/demo.php b/vendor/jfcherng/php-color-output/demo.php
new file mode 100644
index 0000000..3c08598
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/demo.php
@@ -0,0 +1,26 @@
+<?php
+
+include __DIR__ . '/vendor/autoload.php';
+
+// colors in a string using a comma as the delimiter
+echo str_cli_color('foo', 'f_light_cyan, b_yellow'); // "\033[1;36;43mfoo\033[0m"
+
+echo \PHP_EOL;
+
+// colors in an array
+echo str_cli_color('foo', ['f_white', 'b_magenta']); // "\033[1;37;45mfoo\033[0m"
+
+echo \PHP_EOL;
+
+// do not auto reset color at the end of string
+echo str_cli_color('foo', ['f_red', 'b_green', 'b', 'blk'], false); // "\033[31;42;1;5mfoo"
+
+// manually add color reset
+echo str_cli_color('', 'reset'); // "\033[0m"
+
+echo \PHP_EOL;
+
+// remove all color codes from a string
+echo str_cli_nocolor("\033[31;42;5mfoo\033[0mbar"); // "foobar"
+
+echo \PHP_EOL;
diff --git a/vendor/jfcherng/php-color-output/src/CliColor.php b/vendor/jfcherng/php-color-output/src/CliColor.php
new file mode 100644
index 0000000..6004b6c
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/src/CliColor.php
@@ -0,0 +1,224 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Utility;
+
+/**
+ * Make your PHP command-line application colorful.
+ *
+ * @see https://en.wikipedia.org/wiki/ANSI_escape_code
+ *
+ * @author Jack Cherng <jfcherng@gmail.com>
+ */
+final class CliColor
+{
+ const COLOR_BEGIN = "\033[";
+ const COLOR_END = 'm';
+
+ const COLOR_BEGIN_REGEX = "\033\\[";
+ const COLOR_END_REGEX = 'm';
+
+ /**
+ * @var array the color map
+ */
+ private static $colorMap = [
+ // background
+ 'b_black' => '40',
+ 'b_blue' => '44',
+ 'b_cyan' => '46',
+ 'b_green' => '42',
+ 'b_light_gray' => '47',
+ 'b_magenta' => '45',
+ 'b_red' => '41',
+ 'b_yellow' => '43',
+
+ // foreground
+ 'f_black' => '30',
+ 'f_blue' => '34',
+ 'f_brown' => '33',
+ 'f_cyan' => '36',
+ 'f_green' => '32',
+ 'f_light_gray' => '37',
+ 'f_normal' => '39',
+ 'f_purple' => '35',
+ 'f_red' => '31',
+
+ // compound
+ 'f_dark_gray' => '1;30',
+ 'f_light_blue' => '1;34',
+ 'f_light_cyan' => '1;36',
+ 'f_light_green' => '1;32',
+ 'f_light_purple' => '1;35',
+ 'f_light_red' => '1;31',
+ 'f_white' => '1;37',
+ 'f_yellow' => '1;33',
+
+ // special
+ 'blink' => '5',
+ 'bold' => '1',
+ 'dim' => '2',
+ 'hidden' => '8',
+ 'reset' => '0',
+ 'reverse' => '7',
+ 'underline' => '4',
+
+ // alias
+ 'b' => 'bold',
+ 'blk' => 'blink',
+ 'h' => 'hidden',
+ 'rev' => 'reverse',
+ 'rst' => 'reset',
+ 'u' => 'underline',
+
+ // regex for color codes
+ 'regex_any' => '(?:[0-9]++;?)++',
+ ];
+
+ /**
+ * Get the color map.
+ *
+ * @return array the color map
+ */
+ public static function getColorMap(): array
+ {
+ return self::$colorMap;
+ }
+
+ /**
+ * Make a string colorful.
+ *
+ * @param string $str the string
+ * @param string|string[] $colors the colors
+ * @param bool $reset reset color at the end of the string?
+ *
+ * @return string the colored string
+ */
+ public static function color(string $str, $colors = [], bool $reset = true): string
+ {
+ // always convert $colors into an array
+ if (\is_string($colors)) {
+ $colors = \explode(',', $colors);
+ }
+
+ $colored = self::getColorCode($colors) . $str;
+
+ if ($reset) {
+ $colored .= self::getColorCode(['reset']);
+ }
+
+ return self::simplifyColoredString($colored);
+ }
+
+ /**
+ * Remove all colors from a string.
+ *
+ * @param string $str the string
+ *
+ * @return string the string without colors
+ */
+ public static function noColor(string $str): string
+ {
+ return \preg_replace(
+ '~' . self::getColorCode(['regex_any'], true) . '~uS',
+ '',
+ $str
+ );
+ }
+
+ /**
+ * Get the color code from given colors.
+ *
+ * @param array $colors the colors
+ * @param bool $returnRegex return as an regex segment
+ *
+ * @return string the color code
+ */
+ private static function getColorCode(array $colors, bool $returnRegex = false): string
+ {
+ $colors = self::sanitizeColors($colors);
+
+ if (empty($colors)) {
+ return '';
+ }
+
+ // convert color into color code
+ $colorCodes = \array_map(
+ function (string $color): string {
+ // resolve color alias
+ while (isset(self::$colorMap[$color])) {
+ $color = self::$colorMap[$color];
+ }
+
+ return $color;
+ },
+ $colors
+ );
+
+ $closures = $returnRegex
+ ? [self::COLOR_BEGIN_REGEX, self::COLOR_END_REGEX]
+ : [self::COLOR_BEGIN, self::COLOR_END];
+
+ return $closures[0] . \implode(';', $colorCodes) . $closures[1];
+ }
+
+ /**
+ * Sanitize colors.
+ *
+ * @param array $colors the colors
+ *
+ * @return array the sanitized colors
+ */
+ private static function sanitizeColors(array $colors): array
+ {
+ return self::listUnique(\array_filter(
+ \array_map('trim', $colors),
+ function (string $color): bool {
+ return isset(self::$colorMap[$color]);
+ }
+ ));
+ }
+
+ /**
+ * Simplify the colored string.
+ *
+ * @param string $str the colored string
+ *
+ * @return string the simplified colored string
+ */
+ private static function simplifyColoredString(string $str): string
+ {
+ // replace multiple consecutive resets with a single reset
+ $str = \preg_replace(
+ '~(' . self::getColorCode(['reset'], true) . '){2,}~uS',
+ '$1',
+ $str
+ );
+
+ // remove colors for an emtpy string
+ $str = \preg_replace(
+ (
+ '~' .
+ '(' . self::getColorCode(['regex_any'], true) . ')' .
+ '(' . self::getColorCode(['reset'], true) . ')' .
+ '~uS'
+ ),
+ '$2',
+ $str
+ );
+
+ return $str;
+ }
+
+ /**
+ * The fastest array_unique() implementation for a non-associative array AFAIK.
+ *
+ * @see https://stackoverflow.com/questions/8321620/array-unique-vs-array-flip
+ *
+ * @param array $array the array
+ */
+ private static function listUnique(array $array): array
+ {
+ return \array_keys(\array_count_values($array));
+ }
+}
diff --git a/vendor/jfcherng/php-color-output/src/helpers.php b/vendor/jfcherng/php-color-output/src/helpers.php
new file mode 100644
index 0000000..b93d4e6
--- /dev/null
+++ b/vendor/jfcherng/php-color-output/src/helpers.php
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types=1);
+
+if (!\function_exists('str_cli_color')) {
+ /**
+ * Make a string colorful.
+ *
+ * A global alias to \Jfcherng\Utility\CliColor::color.
+ *
+ * @param string $str the string
+ * @param array|string $colors the colors
+ * @param bool $autoReset automatically reset at the end of the string?
+ *
+ * @return string the colored string
+ */
+ function str_cli_color(string $str, $colors = [], bool $autoReset = true): string
+ {
+ return \Jfcherng\Utility\CliColor::color($str, $colors, $autoReset);
+ }
+}
+
+if (!\function_exists('str_cli_nocolor')) {
+ /**
+ * Remove all colors from a string.
+ *
+ * A global alias to \Jfcherng\Utility\CliColor::noColor
+ *
+ * @param string $str the string
+ *
+ * @return string the string without colors
+ */
+ function str_cli_nocolor(string $str): string
+ {
+ return \Jfcherng\Utility\CliColor::noColor($str);
+ }
+}
diff --git a/vendor/jfcherng/php-diff/.php-cs-fixer.dist.php b/vendor/jfcherng/php-diff/.php-cs-fixer.dist.php
new file mode 100644
index 0000000..1878a60
--- /dev/null
+++ b/vendor/jfcherng/php-diff/.php-cs-fixer.dist.php
@@ -0,0 +1,78 @@
+<?php
+
+$config = (new PhpCsFixer\Config())
+ ->setIndent(" ")
+ ->setLineEnding("\n")
+ ->setCacheFile(__DIR__ . '/.php-cs-fixer.cache')
+ ->setRiskyAllowed(true)
+ ->setRules([
+ '@PHP71Migration' => true,
+ '@PHP73Migration' => false,
+ '@PhpCsFixer' => true,
+ '@PhpCsFixer:risky' => true,
+ '@PSR12' => true,
+ '@Symfony' => true,
+ '@Symfony:risky' => true,
+ 'align_multiline_comment' => true,
+ 'array_indentation' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+ 'combine_consecutive_issets' => true,
+ 'combine_consecutive_unsets' => true,
+ 'combine_nested_dirname' => true,
+ 'comment_to_phpdoc' => true,
+ 'compact_nullable_typehint' => true,
+ 'concat_space' => ['spacing' => 'one'],
+ 'escape_implicit_backslashes' => false,
+ 'fully_qualified_strict_types' => true,
+ 'linebreak_after_opening_tag' => true,
+ 'list_syntax' => ['syntax' => 'short'],
+ 'method_argument_space' => ['ensure_fully_multiline' => true],
+ 'native_constant_invocation' => true,
+ 'native_function_invocation' => true,
+ 'native_function_type_declaration_casing' => true,
+ 'no_alternative_syntax' => true,
+ 'no_multiline_whitespace_before_semicolons' => true,
+ 'no_null_property_initialization' => true,
+ 'no_short_echo_tag' => true,
+ 'no_superfluous_elseif' => true,
+ 'no_trailing_whitespace_in_string' => false, // test cases have trailing spaces
+ 'no_unneeded_control_parentheses' => true,
+ 'no_useless_else' => true,
+ 'no_useless_return' => true,
+ 'not_operator_with_space' => false,
+ 'not_operator_with_successor_space' => false,
+ 'ordered_class_elements' => true,
+ 'ordered_imports' => ['sort_algorithm' => 'alpha', 'imports_order' => ['class', 'const', 'function']],
+ 'ordered_interfaces' => true,
+ 'php_unit_ordered_covers' => true,
+ 'php_unit_set_up_tear_down_visibility' => true,
+ 'php_unit_strict' => true,
+ 'php_unit_test_class_requires_covers' => true,
+ 'phpdoc_add_missing_param_annotation' => true,
+ 'phpdoc_order' => true,
+ 'phpdoc_to_comment' => false,
+ 'phpdoc_types_order' => true,
+ 'pow_to_exponentiation' => true,
+ 'random_api_migration' => true,
+ 'return_assignment' => false,
+ 'simple_to_complex_string_variable' => true,
+ 'single_line_comment_style' => true,
+ 'single_trait_insert_per_statement' => true,
+ 'strict_comparison' => false,
+ 'strict_param' => false,
+ 'string_line_ending' => true,
+ 'yoda_style' => false,
+ ])
+ ->setFinder(
+ PhpCsFixer\Finder::create()
+ ->notPath('/branch-\\w+/') // git worktree
+ ->exclude('libs')
+ ->exclude('tests/data')
+ ->exclude('tests/Fixtures')
+ ->exclude('var')
+ ->exclude('vendor')
+ ->in(__DIR__)
+ )
+;
+
+return $config;
diff --git a/vendor/jfcherng/php-diff/.phpstorm.meta.php b/vendor/jfcherng/php-diff/.phpstorm.meta.php
new file mode 100644
index 0000000..a8f8c52
--- /dev/null
+++ b/vendor/jfcherng/php-diff/.phpstorm.meta.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace PHPSTORM_META;
+
+override(
+ \Jfcherng\Diff\Factory\LineRendererFactory::getInstance(0),
+ map(['' => 'Jfcherng\Diff\Renderer\Html\LineRenderer\@'])
+);
+override(
+ \Jfcherng\Diff\Factory\LineRendererFactory::make(0),
+ map(['' => 'Jfcherng\Diff\Renderer\Html\LineRenderer\@'])
+);
+
+override(
+ \Jfcherng\Diff\Factory\RendererFactory::getInstance(0),
+ map([
+ // html
+ 'Combined' => \Jfcherng\Diff\Renderer\Html\Combined::class,
+ 'Inline' => \Jfcherng\Diff\Renderer\Html\Inline::class,
+ 'Json' => \Jfcherng\Diff\Renderer\Html\Json::class,
+ 'JsonHtml' => \Jfcherng\Diff\Renderer\Html\JsonHtml::class,
+ 'SideBySide' => \Jfcherng\Diff\Renderer\Html\SideBySide::class,
+ // text
+ 'Context' => \Jfcherng\Diff\Renderer\Text\Context::class,
+ 'JsonText' => \Jfcherng\Diff\Renderer\Text\JsonText::class,
+ 'Unified' => \Jfcherng\Diff\Renderer\Text\Unified::class,
+ ])
+);
+override(
+ \Jfcherng\Diff\Factory\RendererFactory::make(0),
+ map([
+ // html
+ 'Combined' => \Jfcherng\Diff\Renderer\Html\Combined::class,
+ 'Inline' => \Jfcherng\Diff\Renderer\Html\Inline::class,
+ 'Json' => \Jfcherng\Diff\Renderer\Html\Json::class,
+ 'JsonHtml' => \Jfcherng\Diff\Renderer\Html\JsonHtml::class,
+ 'SideBySide' => \Jfcherng\Diff\Renderer\Html\SideBySide::class,
+ // text
+ 'Context' => \Jfcherng\Diff\Renderer\Text\Context::class,
+ 'JsonText' => \Jfcherng\Diff\Renderer\Text\JsonText::class,
+ 'Unified' => \Jfcherng\Diff\Renderer\Text\Unified::class,
+ ])
+);
diff --git a/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v2.md b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v2.md
new file mode 100644
index 0000000..e462ef0
--- /dev/null
+++ b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v2.md
@@ -0,0 +1,68 @@
+
+## VERSION 2 NEW START
+
+ * Version **2.2** - char-level diff performance++
+ * 2019-01-20 21:22 **2.2.0** initial release
+ * b28ce64 Remove dependancy: jfcherng/php-levenshtein-distance
+
+ * Version **2.1** - init
+ * 2019-01-20 11:57 **2.1.23** fix Json template
+ * ced5f33 Fix the Json template
+ * 7b21dc5 Update readme
+ * 2019-01-20 09:01 **2.1.22** nits
+ * 4dc695f Refactor template classes
+ * 59824ed Code tidy
+ * 7a5c1fb Code tidy
+ * 100dd67 Update readme
+ * 2019-01-19 09:17 **2.1.21** nits
+ * 36f45d4 Code tidy
+ * a3e70d1 Make the diff object in the renderer non-public
+ * f13ad57 Code tidy
+ * f430a8e nits
+ * c4ddbb7 Add renderer option: spacesToNbsp
+ * bbc88a1 htmlFixSpaces() may generate shorter output
+ * 1d1ad4c Use more preservative reserved chars from Unicode reserved areas
+ * 934706c Update deps
+ * 2019-01-19 05:35 **2.1.20** small performance tweaks
+ * 6516349 Small performance tweaks
+ * d4b61a1 nits
+ * 2019-01-18 08:52 **2.1.19** coding style fixes
+ * e4284d6 php-cs-fixer
+ * d91ec6f Update deps
+ * ce3f817 nits
+ * 76cd7f3 Fix phan error
+ * 7fbd791 Revise badges in README
+ * 887ee9f Add Codacy badge
+ * 4c159f6 Some coding style tweaks
+ * ee1c2a5 year++
+ * eca66d7 Add tests for PHP 7.3
+ * 2018-12-17 21:34 **2.1.18** Add Russian translation
+ * efeee17 Update deps
+ * 0f28b9d Fix tests
+ * 767c432 Prefer using "rus" as the language code
+ * 70a9275 Add new lang
+ * 9c449ba nits
+ * 08bc260 Update deps
+ * 2018-11-20 19:31 **2.1.17** nits
+ * 9297443 nits
+ * 9251d8b Add FileNotFoundException
+ * 7684942 Update deps
+ * 04590f1 Update README
+ * 0e11e19 Alias bg.php to bul.php
+ * e186ff7 micro code tweak
+ * 28a423f Fix some typos
+ * 96c679c Update deps
+ * 2018-09-16 14:34 **2.1.16** Bulgarian translation
+ * e7fafe6 Bulgarian translation
+ * 2018-09-04 18:56 **2.1.15** php-cs-fixer
+ * 799cae1 php-cs-fixer: enable native_constant_invocation and native_function_invocation
+ * 96ee1d2 Update deps
+ * 83e3a54 Rename CHANGELOG.md -> CHANGELOG
+ * 81364db Update deps
+ * 605a963 Update .travis.yml
+ * 2018-07-18 08:41 **2.1.14** Add composer.lock
+ * 726b3a6 Add composer.lock
+ * e36f649 Update README.md
+ * 2018-07-04 15:26 **2.1.13** nits
+ * f2ff363 Update .rmt.yml
+ * 2018-07-04 14:59 **2.1.12** initial release
diff --git a/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v3.md b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v3.md
new file mode 100644
index 0000000..041ad52
--- /dev/null
+++ b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v3.md
@@ -0,0 +1,55 @@
+
+## VERSION 3 SUN RISE
+
+ * Version **3.3** - JSON format language files
+ * 2019-01-25 01:06 **3.3.0** initial release
+ * 395b802 Use JSON format language files
+ * c299e39 Remove debug codes
+
+ * Version **3.2** - add none-level diff
+ * 2019-01-24 23:54 **3.2.6** nits
+ * 7d9ca9c Code tidy
+ * ce5273a Code tidy
+ * 42bdf83 Remove a unnecesary "else"
+ * 2019-01-24 19:44 **3.2.5** minify diff table block separator
+ * 215f300 Change diff table block separator rendering
+ * 08f3cf7 Remove extra empty lines when setting context to 0
+ * 2019-01-24 15:32 **3.2.4** nits
+ * af51b33 Add more punctuations as word separators
+ * 9e649d8 Fix typos
+ * 2019-01-24 14:48 **3.2.3** fix LineRendererFactory case-sensitive
+ * 4825b96 Fix LineRendererFactory case-sensitive problem
+ * 2019-01-24 14:21 **3.2.2** nits
+ * 4b74e4f PreservedConstantInterface -> ReservedConstantInterface
+ * 2019-01-24 14:18 **3.2.1** nits
+ * d5206fb Refactor out AbstractHtml::renderChangedExtentByXXX()
+ * 2019-01-24 12:49 **3.2.0** initial release
+ * 9e6e37a Add none-level diff
+ * 5e05555 Add line-level diff to example.php
+ * cdc19df Unroll if-conditions for ReverseIterator::fromArray()
+
+ * Version **3.1** - word-level diff
+ * 2019-01-22 15:32 **3.1.4** fix renderer options
+ * d7dbacf Fix render options
+ * 2019-01-22 13:55 **3.1.3** nist
+ * 2d139a8 Code tidy
+ * d54e4f1 Update deps
+ * 9aeb234 Add ITERATOR_GET_KEY, ITERATOR_GET_BOTH for ReverseIterator
+ * 11c7652 Code tidy
+ * 2019-01-22 12:36 **3.1.2** nits
+ * 1bef1a0 Diff's $a, $b are now required in \__construct()
+ * 22426a5 Add Diff::setAB()
+ * 2019-01-22 12:05 **3.1.1** fix ignoreCase/ignoreWhitespace
+ * 300e4cf Fix ignoreCase/ignoreWhitespace for word/char-level diff
+ * 9ea24dd Update readme
+ * 2019-01-22 11:49 **3.1.0** initial release
+ * f6fbce8 Suppress phan errors
+ * 6850cb5 Add word-level diff
+ * aea5ff8 Fix demo.php
+
+ * Version **3.0** - options changed
+ * 2019-01-21 16:41 **3.0.0** initial release
+ * d7b6079 Clear up options
+ * c9a43a1 Fix diff getInstance()
+ * 1b99649 Code tidy
+ * f5cd010 Update demo.php
diff --git a/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v4.md b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v4.md
new file mode 100644
index 0000000..e9c055a
--- /dev/null
+++ b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v4.md
@@ -0,0 +1,98 @@
+
+## VERSION 4 AT NOON
+
+ * Version **4.2** - helper methods
+ * 2019-03-03 06:36 **4.2.3** tiny fixes
+ * c3d1512 Make Language::getTranslationsByLanguage() safer
+ * df4488e Fix a typo
+ * 8a41e9a Use native class name
+ * fa48647 Fix a typo in readme
+ * 2019-03-03 04:03 **4.2.2** final release for v4
+ * 86e32c0 Adapt some non-breaking changes from the master branch
+ * 35c1303 nits
+ * 637e07e Update deps
+ * 80c1861 Move CHANGELOG and UPGRADING
+ * 2019-02-27 01:46 **4.2.1** fix typo
+ * 37f7f75 Fix DiffHelp::getTemplatesInfo() typos
+ * 3a3c276 Revise phpdoc
+ * c221c25 Add (private) Diff::finalize() to help maintain cache vadility
+ * 2019-02-26 14:49 **4.2.0** initial release
+ * 43566f1 php-cs-fixer
+ * be70f5e Add DiffHelper::getProjectDirectory()
+ * 4937417 Add INFO['type'] for renderers
+ * 3ef51f6 Rewrite DiffHelper::getTemplatesInfo() and DiffHelper::getStyleSheet()
+ * 5e0f0da Add DiffHelper::getStyleSheet()
+ * c7e5312 require-dev at least phpunit/phpunit 7.5
+ * 01d52fd Add DiffHelper::calculateFiles()
+ * 4601400 No need to clear cached value if $old/$new does not change
+ * d690144 Code tidy
+
+ * Version **4.1** - Allow negative tabSize
+ * 2019-02-22 02:51 **4.1.9** fix Json renderer with empty changes
+ * d842546 Fix Json renderer with empty changes
+ * 2019-02-22 02:38 **4.1.8** fix dep
+ * c2fb459 squizlabs/php_codesniffer should be in require-dev
+ * 2019-02-22 02:16 **4.1.7** fix them
+ * 88ff257 Update example/old_file.txt and the new one.
+ * 32537b9 Fix AbstractHtml::expandTabs() $tabSize undeclared
+ * 37bd345 Fix problem caused by in OP_EQ, it still may be $old !== $new
+ * a821017 AbstractHtml::expandTabs() add argument: $onlyLeadingTabs
+ * bd00670 Code tidy
+ * 2031306 Update readme
+ * 0637909 Move upgrading guide from readme to other files
+ * 5e932e6 Separate CHANGELOG by major version
+ * 2019-02-21 19:50 **4.1.5** cs tweak
+ * 1464d86 Update .rmt.yml
+ * b3b0595 Code tidy
+ * 7caae81 Update readme
+ * 347935c Update deps
+ * 6f8e9dd Uniform the term "$a, $b, from, to" into "old, new"
+ * f7679ff Code tidy
+ * 159d244 nits
+ * 76675e4 Tiny regex performance increasement
+ * 42eeff7 Fix 120 chars per line
+ * 86f2325 Introduce squizlabs/php_codesniffer
+ * 2019-02-20 18:49 **4.1.4** Fix Diff::getText()
+ * 540daf5 Fix potential boundary error in Diff::getText()
+ * 2b723e7 Revert "Inline and remove Diff::getText()"
+ * 2019-02-20 16:45 **4.1.3** Fix Diff::getText()
+ * a5171c8 Inline and remove Diff::getText()
+ * be52d42 Fix Diff::getText() when $end is null
+ * 3a6259a Code tidy
+ * 1fd7935 Update option comments
+ * 2019-02-20 15:04 **4.1.2** update deps
+ * df25c88 Update jfcherng/php-sequence-matcher ^2.0
+ * 0c7b425 Update readme
+ * 2019-02-19 19:36 **4.1.1** fix some HTML templates
+ * 0ed0e53 Fix HTML renderer should not emphasize inserted/deleted lines
+ * 6e97b8a Update output example in readme
+ * 80db0a0 Fix HTML special chars in JSON renderer should be escaped
+ * 09a405e Code tidy
+ * 6be0a0e Update deps
+ * cf5bff2 AbstractHtml::expandTabs() has a default $tabSize = 4
+ * 2019-02-16 18:36 **4.1.0** initial release
+ * 53e6b17 Allow renderer option tabSize < 0
+ * e60fb5c Remove useless codes
+ * bf85310 Add more punctuations for word-level line renderer
+ * 847b795 Update readme
+ * ba77110 nits
+ * b13149a Update deps
+
+ * Version **4.0** - Strip out the SequenceMatcher
+ * 2019-02-08 20:17 **4.0.1** nits
+ * 8f11cb1 Fix a typo
+ * 54351a6 Move factory classes to Jfcherng\Diff\Factory\
+ * 6d68583 Merge ReservedConstantInterface into RendererConstant
+ * 2019-02-08 10:04 **4.0.0** initial release
+ * fac4dae nits
+ * b6fa08d Strip out SequenceMatcher as an external package
+ * 2349bb2 Demo uses "font-family: monospace"
+ * ed3f47c Temporary fix for CI
+ * 538f270 Update tests
+ * 11cf372 Fix typos
+ * d56ad7e Use native exceptions
+ * 67351d1 Update deps
+ * 8b14dae Add "final" to classes non-inherited
+ * ee6e5a3 Add UTF-8-ready demo
+ * bf686a2 Prepare for being a new package
+ * 04fb079 nits \ No newline at end of file
diff --git a/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v5.md b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v5.md
new file mode 100644
index 0000000..f4b8ad0
--- /dev/null
+++ b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v5.md
@@ -0,0 +1,90 @@
+
+## VERSION 5 AFTERNOON
+
+ * Version **5.2** - clean up
+ * 2019-05-15 00:17 **5.2.2** Final Release for v5
+ * 2bd27d4 Update deps
+ * fa189fa Update deps
+ * 6b30019 Update deps
+ * abc0d8a $ composer fix
+ * 7cb5a75 Update deps
+ * 70f66a2 Update .travis.yml for 7.4snapshot
+ * e7e1839 Update deps
+ * 1cee802 Update readme
+ * 756970a Add .editorconfig
+ * e6350bc Change screenshot size
+ * 55748a5 Update deps
+ * 03b0c55 Freeze documentation assets for v5
+ * bd61843 Freeze documentation assets for v4
+ * 2019-03-04 23:03 **5.2.1** tiny fixes
+ * ed2bf46 Fix Diff::getOldNewComparison() should use finalize()
+ * ecde729 Fix codacy's complaint
+ * 5efa215 Revise the Language class (no BC break)
+ * 3b369f8 Type-safe for Language::getTranslationsByLanguage()
+ * d442360 Remove unneccesary phan error suppression
+ * 8dffcb3 Fix readme badge
+ * 2019-03-04 04:05 **5.2.0** initial release
+ * ef500d0 Deprecate AbstractRenderer::getIdenticalResult()
+ * 88648e3 nits
+ * 0861774 $ php-cs-fix fix
+ * bfbdd3d [php-cs-fixer] Add new rules: @PhpCsFixer, @PhpCsFixer:risky
+ * dfeb1b8 Improve JSON decoding in Language::getTranslationsByLanguage()
+ * 414eb29 Release of new version 4.2.3
+ * 9d51c33 Make Language::getTranslationsByLanguage() safer
+ * 8acb535 Fix a typo
+ * 2b620b3 Use native class name
+ * b76301a Fix a typo in readme
+ * 8745678 Release of new version 4.2.2
+ * 6117ab9 Adapt some non-breaking changes from the master branch
+ * 8b06983 nits
+ * 5659dc4 Update deps
+ * cfb2652 Move CHANGELOG and UPGRADING
+ * 28216ed Release of new version 4.2.1
+
+ * Version **5.1** - helper methods
+ * 2019-02-27 01:47 **5.1.1** fix typo
+ * 868c542 Fix DiffHelp::getTemplatesInfo() typos
+ * 80cd8e7 Revise phpdoc
+ * 0a202c8 Add (private) Diff::finalize() to help maintain cache vadility
+ * 2019-02-26 14:57 **5.1.0** initial release
+ * 00ae199 Fix .rmt.yml
+ * 7a700fa Release of new version 4.2.0
+ * 770636a php-cs-fixer
+ * 0304537 Add INFO['type'] for renderers
+ * a9bee51 Rewrite DiffHelper::getTemplatesInfo() and DiffHelper::getStyleSheet()
+ * 9f9809e Add DiffHelper::getProjectDirectory()
+ * 4d739c4 Add DiffHelper::getStyleSheet()
+ * ec11495 require-dev at least phpunit/phpunit 7.5
+ * 2553620 Add DiffHelper::calculateFiles()
+ * a4f07c0 No need to clear cached value if $old/$new does not change
+ * ff019a9 Code tidy
+ * 02b30c8 Update deps
+ * 742c096 Update UPGRADING_v5.md
+ * 0ffd644 Code tidy
+ * b619f91 Update readme
+
+ * Version **5.0** - AFTERNOON
+ * 2019-02-22 02:55 **5.0.2** fix Json renderer with empty changes
+ * 6ca5b97 Fix Json renderer with empty changes
+ * e512f2d Update CHANGELOG_v4.md
+ * 2019-02-22 02:35 **5.0.1** fix dep
+ * 7757363 squizlabs/php_codesniffer should be in require-dev
+ * 6ac0c99 Update .rmt.yml
+ * 2019-02-22 02:24 **5.0.0** initial release
+ * 9f85206 Update .rmt.yml
+ * 064a3b3 Add renderer option: outputTagAsString
+ * 23c59f8 Update jfcherng/php-sequence-matcher ^3.0
+ * 1eb6bbb Update example/old_file.txt and the new one.
+ * b9f2f7b Fix AbstractHtml::expandTabs() $tabSize undeclared
+ * 469abb7 Fix problem caused by in OP_EQ, it still may be $old !== $new
+ * 82ed9ca AbstractHtml::expandTabs() add argument: $onlyLeadingTabs
+ * dd6d8dc Code tidy
+ * 4750267 Move upgrading guide from readme to other files
+ * 12b6024 Separate CHANGELOG by major version
+ * ebbb509 Update readme
+ * ef735c9 Code tidy
+ * 4518927 Uniform more "from, to" into "old, new"
+ * 079a5ec Update readme
+ * dbcf0b8 Update readme
+ * b84bef5 Remove deprecated APIs
+ * 5330cd2 Uniform the term "base, changed" into "old, new" \ No newline at end of file
diff --git a/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v6.md b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v6.md
new file mode 100644
index 0000000..7cd586a
--- /dev/null
+++ b/vendor/jfcherng/php-diff/CHANGELOG/CHANGELOG_v6.md
@@ -0,0 +1,369 @@
+
+## VERSION 6 UNIFIED
+
+ * Version **6.10** - feat: add methods to get diff statistics
+ * 2023-06-15 20:31 **6.10.14** add translation: cze
+ * 4f27313 docs: update translation readme
+ * 163371b chore: add traslation Czech (#74)
+ * 2023-06-05 19:44 **6.10.13** add translation: nob
+ * 286d4ae chore: update deps
+ * 1f71299 chore: Norwegian translation (#73)
+ * 2023-05-21 16:10 **6.10.12** max sequence length
+ * c71cd9f feat: add new differOption: lengthLimit
+ * 07f448f chore: update deps
+ * 2023-03-16 03:23 **6.10.11** (Combined) fix unmerge-able block
+ * 3582a09 fix: (Combined) unmerge-able block shouldn't be repeated
+ * 63bbde6 docs: fix readme badge
+ * 2023-03-11 15:31 **6.10.10** tidy codes
+ * d19ffb8 refactor: move "ignoreLineEnding" implementation to sequence matcher
+ * e2c353a test: tidy codes
+ * 0492991 chore: update deps
+ * 658c9ff chore: fix typos
+ * 927f5b7 chore: only test against PHP 71/72/73
+ * 2023-03-10 20:56 **6.10.9** add differ option: ignoreLineEnding
+ * 9131af6 feat: add differ option: ignoreLineEnding
+ * 74e1878 chore: move test files
+ * 7b0c11c chore: update deps
+ * 2023-01-19 00:51 **6.10.8** override language
+ * 3a99872 feat: provide a way to override an existing language
+ * 8ab946c chore: update deps
+ * 4f572b2 style: format readme with prettier
+ * e85c214 style: reduce indentation for the demo codes
+ * ad0751b test: test against PHP 8.1
+ * 2022-09-26 22:31 **6.10.7** fix: side-by-side column too narrow
+ * 8f1d423 fix: side-by-side table column may be too narrow
+ * 2022-09-25 22:34 **6.10.6** new rendererOption: spaceToHtmlTag
+ * d78904a style: make CI happy
+ * 4180e7c feat: new rendererOption: spaceToHtmlTag (#60)
+ * 702406f revert: partially revert ef08158
+ * 7ead73d fix: select the code only (#59)
+ * ca62d1d fix: wrong visual tabSize on browser
+ * 8d71a3f chore: fix typo/spelling (#57)
+ * e0b405d chore: update deps
+ * ab8403d chore: update CI deps
+ * 2022-08-07 21:31 **6.10.5** fix: Combined::renderArray isn't working properly
+ * 81e393d fix: php71 compatibility
+ * 666dc70 chore: update deps
+ * a00dc93 test: update tests
+ * 598f0f4 fix: Combined::renderArray isn't working properly
+ * 2022-04-03 00:36 **6.10.4** Update upstream
+ * 1f6a5d3 chore: update deps
+ * 2022-03-29 18:58 **6.10.3** Port patches
+ * 27c4a0d chore: prepare for branch
+ * 5be3f5a chore: update deps
+ * d231e14 feat: add Italian translation (#53)
+ * 91bfb23 chore: remove "todo" from test data
+ * 3d54531 chore: license year +1
+ * acd2814 Ukr language (#50)
+ * d55fd28 chore: remove "@todo" in readme
+ * 8130948 docs: revise instructions for running demo
+ * 2021-09-02 12:03 **6.10.2** Bump deps
+ * bf18634 chore: bump "jfcherng/php-sequence-matcher" 3.2.8
+ * 2021-09-02 11:58 **6.10.1** Bump deps
+ * 795555c chore: bump "jfcherng/php-sequence-matcher" 3.2.7
+ * 814782b chore: add RMT into ignore-export
+ * 98fbe77 chore: update demo js/css URLs
+ * 809ea0f docs: update badegs
+ * 17d912e style: fix some long lines
+ * 7e9a001 style: add visibility to public consts
+ * 2a28fe1 chore: update deps
+ * 2021-03-19 17:20 **6.10.0** initial release
+ * 56eee87 chore: add liip/rmt as a dev dependency
+ * 4b170cd feat: add methods to get diff statistics
+ * d95e0b8 chore: update deps
+ * 4c6e2ab chore: update license year
+ * f40467c chore: allow phan/phan ^4
+ * bd322af fix: deprecated method in .php_cs
+ * ab25d01 chore(ci): fix php-cs-fixer rule as of 2.17.0
+ * c0d13c5 chore: update deps
+
+ * Version **6.9** - add option: showHeader
+ * 2020-12-08 07:55 **6.9.0** initial release
+ * 9d98db2 chore: exclude "tests/IgnoreWhitespaceTest.php" from formatting
+ * 8f33ca2 style: php-cs-fix
+ * 5e5f038 fix: undefined index 'showHeader'
+ * 5f0dd2d feat: add option: showHeader
+ * 863fbe1 chore(ci): real test against PHP 8.0
+ * 7e830bf chore: update deps
+ * 4576720 chore: update php-cs-fixer 2.17.0
+ * 3fede5b chore(ci): test against PHP 8.0 as well
+ * a342715 docs: fix typo
+ * 6ec0dd7 docs: add description links for Unified/Context diff formats
+
+ * Version **6.8** - new renderer: JsonText
+ * 2020-10-29 18:49 **6.8.0** initial release
+ * 33339b8 chore: update deps
+ * efa7217 feat: add renderer: JsonText
+ * f7dac30 chore: update frontend Prism 1.22.0
+ * 3494b40 docs: update permanent link
+ * fceef80 docs: fix typos
+ * 2cdcb6b chore: nits
+ * ef66d12 chore: udpate deps
+ * 8f765ec chore: Composer 2 no longer needs hirak/prestissimo
+ * 14fe79b chore: update deps
+
+ * Version **6.7** - feat: support colorized CLI output for text renderers
+ * 2020-08-23 18:52 **6.7.7** fix a regression about the last diff block
+ * 2ce0540 refactor: migrate to jfcherng/php-sequence-matcher 3.2.5
+ * 29115e2 chore: update deps
+ * f7f6e4d style: run php-cs-fix
+ * ba2fc9d chore: do not check/fix coding style for tests/data/
+ * 8d4c888 fix: sytnax error for PHP 7.1
+ * aa34ce3 test: add failing test (#36)
+ * 2020-08-22 19:08 **6.7.6** fix "ignoreWhitespaces" not working
+ * dd6a211 fix: "ignoreWhitespaces" doesn't produce the same result with GNU diff's
+ * dd96f78 chore: update deps
+ * 0fd52fb test: fixup: follow GNU's diff output
+ * f8c08d0 Failing test for ignoreWhitespace
+ * f0ed073 fix: use "static" to call non-static methods
+ * 2020-08-10 23:39 **6.7.5** fix \r visualization in Combined renderer
+ * 35a2502 fix: \r shouldn't be visualized like a newline in Combined renderer
+ * cb2bed2 chore: update deps
+ * 2020-07-06 11:10 **6.7.4** fix HTML escape for Combined renderer
+ * 762238b chore: update deps
+ * d32c7b6 fix: OP_EQ lines are not escaped in Combined renderer
+ * ef6dcb4 test: make phan happy
+ * dc2db03 chore: update readme badge
+ * d143c26 chore(ci): migrate CI from Travis to GitHub Actions
+ * 2020-05-28 03:22 **6.7.3** allow PHP 8
+ * 3ab8a9e chore: update deps
+ * 1b931eb chore: Composer PHP constrain >=7.1.3
+ * 37036c2 chore: add some comments
+ * 2020-04-27 01:49 **6.7.2** fix Combined internal HTML formatting
+ * 8f8d919 chore: update deps
+ * e172e4a fix: unexpected Combined output due to HTML formatting
+ * 8011802 chore: rename example/demo.php -> example/demo_web.php
+ * 444342d refactor: tidy codes
+ * 2020-04-07 02:18 **6.7.1** refactor: colorization with jfcherng/php-color-output
+ * 9c3da80 refactor: colorization with jfcherng/php-color-output
+ * ea2d43d docs: adjust demo colors
+ * 2020-04-06 20:29 **6.7.0** initial release
+ * 40f0e74 test: fix test for CLI color output
+ * ba9dd9e chore: update deps
+ * 857f4b0 fix: make phan happy
+ * 129d51e docs: add example/demo_cli.php
+ * dbec4b8 feat: support colorized CLI output for text renderers
+ * 007abaf chore: update deps
+
+ * Version **6.6** - Add new renderer option: wordGlues
+ * 2020-03-31 23:53 **6.6.4** add Spanish translation
+ * 842b4af feat: add Spanish translation (#26)
+ * 2020-03-30 14:22 **6.6.3** Just a few refactoring
+ * 29dca67 test: add tests for Word line renderer
+ * 355952f refactor: Word line renderer uses PREG_SPLIT_NO_EMPTY
+ * 68b530e refactor: tidy codes
+ * 492f53c chore: add some comments
+ * 2020-03-30 00:45 **6.6.2** Fix wordGlues
+ * 7ddbb79 fix: "wordGlues" works wrongly under some circumstances (#25)
+ * 16780d3 fix(CSS): better strip alignment effect
+ * 2020-03-20 06:41 **6.6.1** Add new language: German (deu)
+ * 00b9a03 German language file
+ * 9f1ae6b chore: update deps
+ * 92e8f25 docs: update readme badges to fit markdown style
+ * 0615509 refactor: tidy codes
+ * 2020-03-12 19:53 **6.6.0** initial release
+ * 05a118a Update deps
+ * 2b68ddc Update screenshots
+ * d227113 Add new renderer option: wordGlues
+ * d24c6ae Tidy codes
+
+ * Version **6.5** - New renderer: Combined
+ * 2020-03-11 16:52 **6.5.7** Add Json renderer option: jsonEncodeFlags
+ * 9a00a55 Add Json renderer option: jsonEncodeFlags
+ * cb54261 Tidy codes
+ * 2020-03-09 16:08 **6.5.6** Add Combined renderer option: mergeThreshold
+ * 2f85968 Tidy codes (Inline/SideBySide/Combined)
+ * e39d674 Tidy codes
+ * d643094 Add Combined renderer option: mergeThreshold
+ * 92af433 Add more test cases
+ * 570fd51 Update deps
+ * 2020-03-08 00:42 **6.5.5** Combined: do not merge blocks which change too much
+ * f4f8b25 Tidy codes
+ * 273d1b4 Combined: do not merge blocks which change too much
+ * ac5e1b1 Fix CSS table text alignment for very long lines
+ * 5046910 Tidy codes
+ * 45c0b24 Do not trim trailing whitespaces for .txt files
+ * 2020-03-07 18:02 **6.5.4** Various Context/Unified fixes
+ * 4484193 Tidy codes
+ * 0a91891 Add some textual renderer tests
+ * 3fdad9c Fix Context/Unified output for EOL at EOF
+ * 8ab502f Fix Unified line numbers when context is 0
+ * 795628f Fix all-equal hunk content should be omitted in Context output
+ * 0f2e39a Fix there are extra leading/trailing lines when context is set to 0
+ * 973fecb Add some textual renderer tests
+ * 232356f Fix DiffHelper::calculateFiles() for empty file
+ * 899600c Tidy codes
+ * a81078f Add some comments
+ * 2020-03-06 01:29 **6.5.3** Improve Combined renderer output for newlines
+ * 745199a Update deps
+ * e531cdc Combined: better boundary newline chars visualization
+ * bf09969 Tidy codes
+ * 42366b1 Add "run-script" to custom composer commands
+ * 2020-03-05 14:14 **6.5.2** Fix multiline replaced lines in the Combined renderer
+ * 5c93db2 Stripe background should only work in SideBySide
+ * ea45be3 Fix "\n" should be "<br>" in Combined renderer output
+ * d65c878 Use Prism.js to highlight diff example demos
+ * c4e7d7b Tidy codes
+ * 2020-02-29 02:30 **6.5.1** Allow overriding SCSS variables
+ * ec4583c Allow overriding SCSS variables
+ * bb5203b Simplify codes for merging lines in Combined renderer
+ * 6da9215 Update example readme
+ * a0b906b Prefer the new if we can only show either old or new
+ * 2020-02-28 22:56 **6.5.0** initial release
+ * 98fe251 Update deps
+ * 2de0300 Update readme
+ * a6ff11a Finish the HTML Combined renderer
+ * 2cf8e84 New Renderer (#22)
+ * 2277a98 Improve type docs and variable naming
+ * d212f41 Update docs
+ * 7a45667 Tidy codes
+ * e96e971 Rename some "tag" to "op"
+ * 2dd547c Update deps
+
+ * Version **6.4** - Add renderer option: lineNumbers
+ * 2020-02-25 04:22 **6.4.7** Fixed SideBySide stripe background
+ * f395759 SideBySide stripes use "background-attachment: fixed;"
+ * a93f7fb Update SideBySide screenshot
+ * 2020-02-24 18:52 **6.4.6** Align stripes
+ * bdc3036 Make SideBySide stripe background aligned across lines
+ * 2020-02-24 14:47 **6.4.5** CSS tweaks
+ * 36799b9 SideBySide shows a stripe for nonexistent lines
+ * 6b7e36b Update readme
+ * 8b89bbc Add a const for indicating showing all contexts
+ * bd2c868 Make empty cells have height via CSS
+ * 3ae6da1 Make coding thoughts more clear
+ * 0394a74 Tidy Codes
+ * 7093932 Update SideBySide screenshot
+ * abb8955 Improve SideBySide CSS for nonexistent blocks
+ * 8cb05e8 Add keywords to composer.json
+ * f061297 Update example/README.md
+ * f861a3f Add more cases to example text sources
+ * 34786fa Update example/README.md
+ * 2020-02-13 14:16 **6.4.4** Fix SideBySide wrong new line number
+ * 7397cbe Tidy codes
+ * 215209d Fix SideBySide wrong new line number
+ * d91221d Fix documentation for outputTagAsString
+ * a7c3222 Add example image for SideBySide without line numbers
+ * 2020-02-10 05:40 **6.4.3** Better SideBySide output without line numbers
+ * 067c715 Merge SideBySide insert/delete columns when lineNumbers is false
+ * 2020-02-09 18:27 **6.4.2** Fix SidebySide fatal error
+ * 4e74cc5 Fix SideBySide renderer fatal error
+ * 2020-02-09 17:43 **6.4.1** Fix typo
+ * f2afe14 Fix typo: Woker -> Worker
+ * 2020-02-07 17:51 **6.4.0** initial release
+ * 802a7cb Tidy codes
+ * 52045f3 Update documents
+ * 69f42a1 lineNumber option (#19)
+ * 1140ec2 Fix phan errors
+ * 10cc545 Fix documentation about rendering from JSON diff
+ * 4072992 Update deps
+ * 90a86e0 ++year
+
+ * Version **6.3** - Render HTML with JSON result
+ * 2020-01-16 13:00 **6.3.2** Add French (fra) translation
+ * 41d571f Add French language file
+ * 2020-01-12 01:08 **6.3.1** Remove dep: nicmart/string-template
+ * 82259d0 Update dev require
+ * d83f3ac Update readme [skip ci]
+ * b36aeec Revert "Use string template engine to render language translations"
+ * 0a991e7 Update tests
+ * 2020-01-05 16:21 **6.3.0** initial release
+ * 91a6180 Update deps
+ * c713a0a Update examples and README
+ * 3c6d9a3 Variables renaming (example/demo.php)
+ * ce71a93 Add tests for \Jfcherng\Diff\Renderer\AbstractRenderer::renderArray
+ * f497539 Tidy codes
+ * caec927 Require jfcherng/php-sequence-matcher ^3.2
+ * 3111605 Let text renderers throw exception for renderArray()
+ * 8235504 Ability to render HTML from JSON (#17)
+
+ * Version **6.2** - Add renderer option: resultForIdenticals
+ * 2020-01-05 01:19 **6.2.1** Add Turkish translation
+ * f86585a Update deps
+ * 858625f Create tur.json
+ * eae8262 Add some @return static
+ * caaaba7 Add .phpstorm.meta.php
+ * 1067679 Update .travis.yml to PHP 7.4 stable
+ * 6a5cd7b $ composer fix
+ * d69a153 Update deps
+ * 3e1b965 Use string template engine to render language translations
+ * 2019-10-12 05:33 **6.2.0** initial release
+ * f7aba88 Optimize RendererFactory::resolveRenderer()
+ * 288adb2 Fix typos
+ * 601cf86 Throw an exception for invalid "resultForIdenticals"
+ * 9a71712 Add renderer option: resultForIdenticals
+ * 53ac441 nits: tests
+ * d1a7479 Update deps
+ * 31b4916 Remove unnecessary CSS
+ * f05f4a3 Tidy files
+
+ * Version **6.1** - Resolve CSS conflict
+ * 2019-10-11 06:34 **6.1.2** Add Portuguese translation
+ * a07dea9 Rename pt_BR.json -> por.json
+ * d89a7b3 Replace "switch" statements with callback function tables
+ * 5b9a828 Create pt_BR.json
+ * 896df76 Follow PSR-12
+ * 6d3ae95 Move FUNDING.yml to .github/
+ * cf9032a Add test for renderer custom language array
+ * 2019-09-11 00:19 **6.1.1** Fix "language" cannot be an array
+ * 98085b6 Fix renderer option "language" cannot be an array
+ * 3518068 Update .gitattributes
+ * 2019-09-10 17:24 **6.1.0** initial release
+ * f9400d3 Add renderer option: wrapperClasses
+ * f2f613c Update readme (nits)
+ * fdead6f Update readme (flat-square style badges)
+
+ * Version **6.0** - Unified
+ * 2019-09-10 14:30 **6.0.1** Fix jpn wording
+ * 00b59ef Fix jpn wording
+ * d04814e Sass: replace compass/css3 functions with dart-sass built-in
+ * a3b05d9 Update readme to use badges from shields.io
+ * 5dbdf21 Update readme: nits
+ * db4439c Slightly improve code readability
+ * 682fb39 nits
+ * 2b13e8e Update deps
+ * 0c9b79b Add .gitattributes
+ * fa9f3a6 Create FUNDING.yml
+ * f81b823 Move documentation assets to the current branch
+ * 4c2c11d Release of new version 5.2.2
+ * 2bd27d4 Update deps
+ * fa189fa Update deps
+ * 6b30019 Update deps
+ * abc0d8a $ composer fix
+ * 7cb5a75 Update deps
+ * 70f66a2 Update .travis.yml for 7.4snapshot
+ * e7e1839 Update deps
+ * 1cee802 Update readme
+ * bf14c89 Update deps
+ * c52f66b Fix typo in UPGRADING_v6.md
+ * 756970a Add .editorconfig
+ * e6350bc Change screenshot size
+ * 55748a5 Update deps
+ * d8644db Update deps
+ * 03b0c55 Freeze documentation assets for v5
+ * bd61843 Freeze documentation assets for v4
+ * 2019-03-20 11:31 **6.0.0** initial release
+ * 46d8e1b Update .rmt.yml
+ * f3f209c Fix tests
+ * c625cb3 Revise UPGRADING_v6.md
+ * 6807e65 Let Differ manages its own state, i.e., finalize()
+ * ae309c5 Fix some grammar problems in UPGRADING_v6.md
+ * 9fa89dd Add RendererInterface::getResultForIdenticals()
+ * b781125 Release of new version 5.2.0
+ * 57fa3cd nits
+ * 926f19f $ php-cs-fixer fix
+ * 89ec714 [php-cs-fixer] Add new rules: @PhpCsFixer, @PhpCsFixer:risky
+ * 83830c7 Improve JSON decoding in Language::getTranslationsByLanguage()
+ * 3b40e42 Release of new version 4.2.3
+ * b39f29a Make Language::getTranslationsByLanguage() safer
+ * 846d0ca Rename the term "template" to "renderer"
+ * 8439977 Use native class name
+ * 5330a8e Release of new version 4.2.2
+ * 4979a53 nits
+ * ffaefef Fix phan error
+ * dc26604 Rename Differ::groupedCodes to Differ::groupedOpcodes
+ * ba570f8 Make Differ work in a DI way in Renderer internally
+ * 177146e Rename Diff to Differ
+ * 0a30b27 Renderer::render() rather than Diff::render()
+ * deb9ed3 Revise phpdoc
+ * d8606b7 Release of new version 5.1.0 \ No newline at end of file
diff --git a/vendor/jfcherng/php-diff/LICENSE b/vendor/jfcherng/php-diff/LICENSE
new file mode 100644
index 0000000..52d05aa
--- /dev/null
+++ b/vendor/jfcherng/php-diff/LICENSE
@@ -0,0 +1,31 @@
+BSD 3-Clause License
+
+Copyright (c) 2018-2022 Jack Cherng <jfcherng@gmail.com>
+Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/jfcherng/php-diff/README.md b/vendor/jfcherng/php-diff/README.md
new file mode 100644
index 0000000..380c893
--- /dev/null
+++ b/vendor/jfcherng/php-diff/README.md
@@ -0,0 +1,631 @@
+# php-diff
+
+[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/jfcherng/php-diff/php.yml?branch=v6-php71&style=flat-square)](https://github.com/jfcherng/php-diff/actions)
+[![Codacy grade](https://img.shields.io/codacy/grade/5b7ab5ed613d48b99f12cd334f6489ff/v6?style=flat-square)](https://app.codacy.com/project/jfcherng/php-diff/dashboard)
+[![Packagist](https://img.shields.io/packagist/dt/jfcherng/php-diff?style=flat-square)](https://packagist.org/packages/jfcherng/php-diff)
+[![Packagist Version](https://img.shields.io/packagist/v/jfcherng/php-diff?style=flat-square)](https://packagist.org/packages/jfcherng/php-diff)
+[![Project license](https://img.shields.io/github/license/jfcherng/php-diff?style=flat-square)](https://github.com/jfcherng/php-diff/blob/v6/LICENSE)
+[![GitHub stars](https://img.shields.io/github/stars/jfcherng/php-diff?style=flat-square&logo=github)](https://github.com/jfcherng/php-diff/stargazers)
+[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-blue.svg?style=flat-square&logo=paypal)](https://www.paypal.me/jfcherng/5usd)
+
+A comprehensive library for generating diff between two strings.
+
+## Introduction
+
+Generated diff can be rendered in all of the standard formats including:
+
+**Text** renderers:
+
+- Context
+- Json (plain text)
+- Unified
+
+**HTML** renderers:
+
+- Combined
+- Inline
+- Json (HTML)
+- Side by Side
+
+Note that for HTML rendered results, you have to add CSS for a better visualization.
+You may modify one from `example/diff-table.css` or write your own from zero.
+
+If you are okay with the default CSS, there is `\Jfcherng\Diff\DiffHelper::getStyleSheet()`
+which can be used to get the content of the `example/diff-table.css`.
+
+## Requirements
+
+![php](https://img.shields.io/badge/php-%E2%89%A57.1.3-blue?style=flat-square)
+![ext-iconv](https://img.shields.io/badge/ext-iconv-brightgreen?style=flat-square)
+
+## Installation
+
+This package is available on `Packagist` by the name of [jfcherng/php-diff](https://packagist.org/packages/jfcherng/php-diff).
+
+```bash
+composer require jfcherng/php-diff
+```
+
+## Example
+
+See files and readme in the [example/](https://github.com/jfcherng/php-diff/blob/v6/example) directory.
+
+```php
+<?php
+
+include __DIR__ . '/vendor/autoload.php';
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\DiffHelper;
+use Jfcherng\Diff\Factory\RendererFactory;
+use Jfcherng\Diff\Renderer\RendererConstant;
+
+$oldFile = __DIR__ . '/example/old_file.txt';
+$newFile = __DIR__ . '/example/new_file.txt';
+
+$old = 'This is the old string.';
+$new = 'And this is the new one.';
+
+// renderer class name:
+// Text renderers: Context, JsonText, Unified
+// HTML renderers: Combined, Inline, JsonHtml, SideBySide
+$rendererName = 'Unified';
+
+// the Diff class options
+$differOptions = [
+ // show how many neighbor lines
+ // Differ::CONTEXT_ALL can be used to show the whole file
+ 'context' => 3,
+ // ignore case difference
+ 'ignoreCase' => false,
+ // ignore line ending difference
+ 'ignoreLineEnding' => false,
+ // ignore whitespace difference
+ 'ignoreWhitespace' => false,
+ // if the input sequence is too long, it will just gives up (especially for char-level diff)
+ 'lengthLimit' => 2000,
+];
+
+// the renderer class options
+$rendererOptions = [
+ // how detailed the rendered HTML in-line diff is? (none, line, word, char)
+ 'detailLevel' => 'line',
+ // renderer language: eng, cht, chs, jpn, ...
+ // or an array which has the same keys with a language file
+ // check the "Custom Language" section in the readme for more advanced usage
+ 'language' => 'eng',
+ // show line numbers in HTML renderers
+ 'lineNumbers' => true,
+ // show a separator between different diff hunks in HTML renderers
+ 'separateBlock' => true,
+ // show the (table) header
+ 'showHeader' => true,
+ // the frontend HTML could use CSS "white-space: pre;" to visualize consecutive whitespaces
+ // but if you want to visualize them in the backend with "&nbsp;", you can set this to true
+ 'spacesToNbsp' => false,
+ // HTML renderer tab width (negative = do not convert into spaces)
+ 'tabSize' => 4,
+ // this option is currently only for the Combined renderer.
+ // it determines whether a replace-type block should be merged or not
+ // depending on the content changed ratio, which values between 0 and 1.
+ 'mergeThreshold' => 0.8,
+ // this option is currently only for the Unified and the Context renderers.
+ // RendererConstant::CLI_COLOR_AUTO = colorize the output if possible (default)
+ // RendererConstant::CLI_COLOR_ENABLE = force to colorize the output
+ // RendererConstant::CLI_COLOR_DISABLE = force not to colorize the output
+ 'cliColorization' => RendererConstant::CLI_COLOR_AUTO,
+ // this option is currently only for the Json renderer.
+ // internally, ops (tags) are all int type but this is not good for human reading.
+ // set this to "true" to convert them into string form before outputting.
+ 'outputTagAsString' => false,
+ // this option is currently only for the Json renderer.
+ // it controls how the output JSON is formatted.
+ // see available options on https://www.php.net/manual/en/function.json-encode.php
+ 'jsonEncodeFlags' => \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE,
+ // this option is currently effective when the "detailLevel" is "word"
+ // characters listed in this array can be used to make diff segments into a whole
+ // for example, making "<del>good</del>-<del>looking</del>" into "<del>good-looking</del>"
+ // this should bring better readability but set this to empty array if you do not want it
+ 'wordGlues' => [' ', '-'],
+ // change this value to a string as the returned diff if the two input strings are identical
+ 'resultForIdenticals' => null,
+ // extra HTML classes added to the DOM of the diff container
+ 'wrapperClasses' => ['diff-wrapper'],
+];
+
+// one-line simply compare two files
+$result = DiffHelper::calculateFiles($oldFile, $newFile, $rendererName, $differOptions, $rendererOptions);
+// one-line simply compare two strings
+$result = DiffHelper::calculate($old, $new, $rendererName, $differOptions, $rendererOptions);
+// or even shorter if you are happy with default options
+$result = DiffHelper::calculate($old, $new, $rendererName);
+
+// custom usage
+$differ = new Differ(explode("\n", $old), explode("\n", $new), $differOptions);
+$renderer = RendererFactory::make($rendererName, $rendererOptions); // or your own renderer object
+$result = $renderer->render($differ);
+
+// use the JSON result to render in HTML
+$jsonResult = DiffHelper::calculate($old, $new, 'Json'); // may store the JSON result in your database
+$htmlRenderer = RendererFactory::make('Inline', $rendererOptions);
+$result = $htmlRenderer->renderArray(json_decode($jsonResult, true));
+```
+
+## Rendered Results
+
+### HTML Diff In-line Detailed Rendering
+
+<table>
+ <tr>
+ <th>None-level</th>
+ <th>Line-level (Default)</th>
+ </tr>
+ <tr>
+ <td><img src="https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/inline-none-level-diff.png"></td>
+ <td><img src="https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/inline-line-level-diff.png"></td>
+ </tr>
+ <tr>
+ <th>Word-level</th>
+ <th>Char-level</th>
+ </tr>
+ <tr>
+ <td><img src="https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/inline-word-level-diff.png"></td>
+ <td><img src="https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/inline-char-level-diff.png"></td>
+ </tr>
+</table>
+
+### Renderer: Inline
+
+```php
+<?php $rendererOptions = ['detailLevel' => 'line'];
+```
+
+![Inline](https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/inline-renderer.png)
+
+### Renderer: Side By Side
+
+```php
+<?php $rendererOptions = ['detailLevel' => 'line'];
+```
+
+![Side By Side](https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/side-by-side-renderer.png)
+
+### Renderer: Combined
+
+```php
+<?php $rendererOptions = ['detailLevel' => 'word'];
+```
+
+This renderer is suitable for articles and always has no line number information.
+
+![Combined](https://raw.githubusercontent.com/jfcherng/php-diff/v6/example/images/combined-renderer-word-level.png)
+
+### Renderer: Unified
+
+About the `Unified` diff format: https://en.wikipedia.org/wiki/Diff#Unified_format
+
+```diff
+@@ -1,3 +1,4 @@
+-<p>Hello World!</p>
++<div>Hello World!</div>
+ ~~~~~~~~~~~~~~~~~~~
++Let's add a new line here.
+ X
+@@ -7,6 +8,5 @@
+ N
+-Do you know in Chinese, "金槍魚罐頭" means tuna can.
++Do you know in Japanese, "魚の缶詰" means fish can.
+ This is just a useless line.
+ G
+-// remember to delete this line
+ Say hello to my neighbors.
+```
+
+### Renderer: Context
+
+About the `Context` diff format: https://en.wikipedia.org/wiki/Diff#Context_format
+
+<details><summary>Click to expand</summary>
+
+```diff
+***************
+*** 1,3 ****
+! <p>Hello World!</p>
+ ~~~~~~~~~~~~~~~~~~~
+ X
+--- 1,4 ----
+! <div>Hello World!</div>
+ ~~~~~~~~~~~~~~~~~~~
++ Let's add a new line here.
+ X
+***************
+*** 7,12 ****
+ N
+! Do you know in Chinese, "金槍魚罐頭" means tuna can.
+ This is just a useless line.
+ G
+- // remember to delete this line
+ Say hello to my neighbors.
+--- 8,12 ----
+ N
+! Do you know in Japanese, "魚の缶詰" means fish can.
+ This is just a useless line.
+ G
+ Say hello to my neighbors.
+```
+
+</details>
+
+### Renderer: Text JSON
+
+This renderer has no detailed diff.
+
+<details><summary>Click to expand</summary>
+
+```json
+[
+ [
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 0,
+ "lines": ["<p>Hello World! Good-looking.</p>"]
+ },
+ "new": {
+ "offset": 0,
+ "lines": ["<div>Hello World! Bad-tempered.</div>"]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 1,
+ "lines": ["~~~~~~~~~~~~~~~~~~~"]
+ },
+ "new": {
+ "offset": 1,
+ "lines": ["~~~~~~~~~~~~~~~~~~~"]
+ }
+ },
+ {
+ "tag": "ins",
+ "old": {
+ "offset": 2,
+ "lines": []
+ },
+ "new": {
+ "offset": 2,
+ "lines": ["Let's add a new line here."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 2,
+ "lines": ["X"]
+ },
+ "new": {
+ "offset": 3,
+ "lines": ["X"]
+ }
+ }
+ ],
+ [
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 6,
+ "lines": ["N"]
+ },
+ "new": {
+ "offset": 7,
+ "lines": ["N"]
+ }
+ },
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 7,
+ "lines": ["Do you know in Chinese, \"金槍魚罐頭\" means tuna can."]
+ },
+ "new": {
+ "offset": 8,
+ "lines": ["Do you know in Japanese, \"魚の缶詰\" means fish can."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 8,
+ "lines": ["\t \tTab visualization test.", "G"]
+ },
+ "new": {
+ "offset": 9,
+ "lines": ["\t \tTab visualization test.", "G"]
+ }
+ },
+ {
+ "tag": "del",
+ "old": {
+ "offset": 10,
+ "lines": ["// remember to delete this line"]
+ },
+ "new": {
+ "offset": 11,
+ "lines": []
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 11,
+ "lines": ["Say hello to my neighbors."]
+ },
+ "new": {
+ "offset": 11,
+ "lines": ["Say hello to my neighbors."]
+ }
+ }
+ ],
+ [
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 14,
+ "lines": ["B"]
+ },
+ "new": {
+ "offset": 14,
+ "lines": ["B"]
+ }
+ },
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 15,
+ "lines": ["Donec rutrum."]
+ },
+ "new": {
+ "offset": 15,
+ "lines": ["Donec rutrum test.", "There is a new inserted line."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 16,
+ "lines": ["C"]
+ },
+ "new": {
+ "offset": 17,
+ "lines": ["C"]
+ }
+ },
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 17,
+ "lines": ["Sed dictum lorem ipsum."]
+ },
+ "new": {
+ "offset": 18,
+ "lines": ["Sed dolor lorem ipsum hendrerit."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 18,
+ "lines": [""]
+ },
+ "new": {
+ "offset": 19,
+ "lines": [""]
+ }
+ }
+ ]
+]
+```
+
+</details>
+
+### Renderer: HTML JSON
+
+For a `"tag": "rep" (8)` block, this renderer has HTML-style detailed diff.
+If you don't need those detailed diff, consider using the `JsonText` renderer.
+
+<details><summary>Click to expand</summary>
+
+```json
+[
+ [
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 0,
+ "lines": ["&lt;<del>p&gt;Hello World! Good-looking.&lt;/p</del>&gt;"]
+ },
+ "new": {
+ "offset": 0,
+ "lines": ["&lt;<ins>div&gt;Hello World! Bad-tempered.&lt;/div</ins>&gt;"]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 1,
+ "lines": ["~~~~~~~~~~~~~~~~~~~"]
+ },
+ "new": {
+ "offset": 1,
+ "lines": ["~~~~~~~~~~~~~~~~~~~"]
+ }
+ },
+ {
+ "tag": "ins",
+ "old": {
+ "offset": 2,
+ "lines": [""]
+ },
+ "new": {
+ "offset": 2,
+ "lines": ["Let's add a new line here."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 2,
+ "lines": ["X"]
+ },
+ "new": {
+ "offset": 3,
+ "lines": ["X"]
+ }
+ }
+ ],
+ [
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 6,
+ "lines": ["N"]
+ },
+ "new": {
+ "offset": 7,
+ "lines": ["N"]
+ }
+ },
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 7,
+ "lines": ["Do you know in <del>Chinese, \"金槍魚罐頭\" means tuna</del> can."]
+ },
+ "new": {
+ "offset": 8,
+ "lines": ["Do you know in <ins>Japanese, \"魚の缶詰\" means fish</ins> can."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 8,
+ "lines": ["\t \tTab visualization test.", "G"]
+ },
+ "new": {
+ "offset": 9,
+ "lines": ["\t \tTab visualization test.", "G"]
+ }
+ },
+ {
+ "tag": "del",
+ "old": {
+ "offset": 10,
+ "lines": ["// remember to delete this line"]
+ },
+ "new": {
+ "offset": 11,
+ "lines": [""]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 11,
+ "lines": ["Say hello to my neighbors."]
+ },
+ "new": {
+ "offset": 11,
+ "lines": ["Say hello to my neighbors."]
+ }
+ }
+ ],
+ [
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 14,
+ "lines": ["B"]
+ },
+ "new": {
+ "offset": 14,
+ "lines": ["B"]
+ }
+ },
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 15,
+ "lines": ["Donec rutrum."]
+ },
+ "new": {
+ "offset": 15,
+ "lines": ["Donec rutrum test.", "There is a new inserted line."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 16,
+ "lines": ["C"]
+ },
+ "new": {
+ "offset": 17,
+ "lines": ["C"]
+ }
+ },
+ {
+ "tag": "rep",
+ "old": {
+ "offset": 17,
+ "lines": ["Sed d<del>ictum lorem ipsum</del>."]
+ },
+ "new": {
+ "offset": 18,
+ "lines": ["Sed d<ins>olor lorem ipsum hendrerit</ins>."]
+ }
+ },
+ {
+ "tag": "eq",
+ "old": {
+ "offset": 18,
+ "lines": [""]
+ },
+ "new": {
+ "offset": 19,
+ "lines": [""]
+ }
+ }
+ ]
+]
+```
+
+</details>
+
+## Custom Language
+
+### Override an Existing Language
+
+If you just want to override some translations of an existing language...
+
+```php
+$rendererOptions = [
+ 'language' => [
+ // use English as the base language
+ 'eng',
+ // your custom overrides
+ [
+ // use "Diff" as the new value of the "differences" key
+ 'differences' => 'Diff',
+ ],
+ // maybe more overrides if you somehow need them...
+ ],
+]
+```
+
+## Acknowledgment
+
+This package is built on the top of [chrisboulton/php-diff](https://github.com/chrisboulton/php-diff) initially.
+But the original repository looks like no longer maintained.
+Here have been quite lots of rewrites and new features since then, hence I re-started this as a new package for better visibility.
diff --git a/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v3.md b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v3.md
new file mode 100644
index 0000000..c3649d2
--- /dev/null
+++ b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v3.md
@@ -0,0 +1,6 @@
+## Upgrading to v3
+
+- `$diffOptions` removes: `charLevelDiff` and `separateBlock`.
+- `$templateOptions` adds: `detailLevel` (similar to `charLevelDiff`, read docs) and `separateBlock` (exact the same one in `$diffOptions`).
+- `Jfcherng\Diff\Diff`'s `$a` (`$old`), `$b` (`$new`) are required in `__construct()`. (You may pass two empty arrays if you do not want to do anything at that moment.)
+- The look of "skipped" block in HTML renderers (`SideBySide` and `Inline`) have been changed. (You may have to tweak your CSS.)
diff --git a/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v4.md b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v4.md
new file mode 100644
index 0000000..308d1a2
--- /dev/null
+++ b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v4.md
@@ -0,0 +1,5 @@
+## Upgrading to v4
+
+- `Jfcherng\Diff\Utility\SequenceMatcher` becomes [a new package](https://packagist.org/packages/jfcherng/php-sequence-matcher) by the namespace of `Jfcherng\Diff\SequenceMatcher`.
+- Factories under `Jfcherng\Diff\Utility\` are moved to `Jfcherng\Diff\Factory\`. For example, `Jfcherng\Diff\Utility\RendererFactory` is now `Jfcherng\Diff\Factory\RendererFactory`.
+- Non-abstract classes are no longer inheritable as they are added with `final` keywords. (This allows me to do more internal changes without causing possible BC breaks.)
diff --git a/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v5.md b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v5.md
new file mode 100644
index 0000000..4c6c059
--- /dev/null
+++ b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v5.md
@@ -0,0 +1,24 @@
+## Upgrading to v5
+
+- Names involving `a, b`, `from, to`, `base, changed` have been renamed to `old, new` for consistency.
+ Here's some examples:
+
+ - `Diff::setAB()` becomes `Diff::setOldNew()`.
+ - `Diff::setA()` becomes `Diff::setOld()`.
+ - `Diff::setB()` becomes `Diff::setNew()`.
+ - `Diff::getA()` becomes `Diff::getOld()`.
+ - `Diff::getB()` becomes `Diff::getNew()`.
+ - `base`, `changed` keys in the result of the `Json` renderer have become `old`, `new`.
+
+- In the result of HTML renderers, classes of rows of line numbers has been changed.
+ You may have to change your CSS if you have some customized things depend on these.
+
+ - `<th class="f-num">` (from-number) becomes `<th class="n-new">` (number-new).
+ - `<th class="t-num">` (to-number) becomes `<th class="n-old">` (number-old).
+
+- The `tag` (sometimes called `op`) in `Json` template is now in `int` form by default.
+ To get previous behavior, set the renderer option `outputTagAsString` to `true`.
+
+- The `tag` (sometimes called `op`) in `Diff::getGroupedOpcodes()`'s results are now in `int` form.
+ The corresponding meaning could be found in
+ [jfcherng/php-sequence-matcher](https://github.com/jfcherng/php-sequence-matcher/blob/3.0.0/src/SequenceMatcher.php#L16-L26).
diff --git a/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v6.md b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v6.md
new file mode 100644
index 0000000..8929ac4
--- /dev/null
+++ b/vendor/jfcherng/php-diff/UPGRADING/UPGRADING_v6.md
@@ -0,0 +1,47 @@
+## Upgrading to v6
+
+
+### For Simple Users
+
+If you only use the `DiffHelper` and built-in `Renderer`s,
+there is no breaking change for you so you do not have to do anything.
+
+
+### Breaking Changes for Normal Users
+
+- The `Diff` class has been renamed as `Differ`.
+ It should be relatively easy to adapt to this by changing the class name.
+
+- The term `template` has been renamed as `renderer`. Some examples are:
+
+ - Method `DiffHelper::getRenderersInfo()`
+ - Method `DiffHelper::getAvailableRenderers()`
+ - Constant `RendererConstant::RENDERER_TYPES`
+ - Constant `AbstractRenderer::IS_TEXT_RENDERER`
+
+- Now a `Renderer` has a `render()` method, but a `Differ` does not.
+ (because it makes more sense saying a renderer would render something)
+ If you use those classes by yourself, it should be written like below.
+
+ ```php
+ use Jfcherng\Diff\Differ;
+ use Jfcherng\Diff\Factory\RendererFactory;
+
+ $differ = new Differ(explode("\n", $old), explode("\n", $new), $diffOptions);
+ $renderer = RendererFactory::make($rendererName, $rendererOptions);
+ $result = $renderer->render($differ); // <-- this line has been changed
+ ```
+
+
+### Breaking Changes for Customized Renderer Developers
+
+- Remove the deprecated `AbstractRenderer::getIdenticalResult()` and
+ add `RendererInterface::getResultForIdenticals()`. The returned value will be
+ directly used before actually starting to calculate diff if we find that the
+ two strings are the same. `AbstractRenderer::getResultForIdenticals()`
+ returns an empty string by default.
+
+- Now a `Renderer` should implement `protected function renderWorker(Differ $differ): string`
+ rather than the previous `public function render(): string`. Note that
+ `$this->diff` no longer works in `Renderer`s as it is now injected as a
+ parameter to `Renderer::renderWorker()`.
diff --git a/vendor/jfcherng/php-diff/composer.json b/vendor/jfcherng/php-diff/composer.json
new file mode 100644
index 0000000..74de537
--- /dev/null
+++ b/vendor/jfcherng/php-diff/composer.json
@@ -0,0 +1,69 @@
+{
+ "name": "jfcherng/php-diff",
+ "description": "A comprehensive library for generating differences between two strings in multiple formats (unified, side by side HTML etc).",
+ "type": "library",
+ "license": "BSD-3-Clause",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "minimum-stability": "beta",
+ "prefer-stable": true,
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ },
+ {
+ "name": "Chris Boulton",
+ "email": "chris.boulton@interspire.com"
+ }
+ ],
+ "autoload": {
+ "psr-4": {
+ "Jfcherng\\Diff\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Jfcherng\\Diff\\Test\\": "tests/"
+ }
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "jfcherng/php-color-output": "^2.0",
+ "jfcherng/php-mb-string": "^1.4.6",
+ "jfcherng/php-sequence-matcher": "^3.2.10"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.19",
+ "liip/rmt": "^1.6",
+ "phan/phan": "^2.5 || ^3 || ^4",
+ "phpunit/phpunit": ">=7 <10",
+ "squizlabs/php_codesniffer": "^3.6"
+ },
+ "config": {
+ "platform": {
+ "php": "7.1.3"
+ },
+ "sort-packages": true
+ },
+ "scripts": {
+ "analyze": [
+ "phan --color",
+ "phpcs --colors -n"
+ ],
+ "fix": [
+ "php-cs-fixer fix --verbose"
+ ],
+ "server": [
+ "Composer\\Config::disableProcessTimeout",
+ "@php -S localhost:12388 -t example/"
+ ],
+ "test": [
+ "phpunit --verbose"
+ ]
+ }
+}
diff --git a/vendor/jfcherng/php-diff/composer.lock b/vendor/jfcherng/php-diff/composer.lock
new file mode 100644
index 0000000..ff6a78f
--- /dev/null
+++ b/vendor/jfcherng/php-diff/composer.lock
@@ -0,0 +1,4116 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "f0a20dbfc5f132432171ad5e0ebfc4c2",
+ "packages": [
+ {
+ "name": "jfcherng/php-color-output",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jfcherng/php-color-output.git",
+ "reference": "2673074597eca9682d2fdfaee39a22418d4cc2f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jfcherng/php-color-output/zipball/2673074597eca9682d2fdfaee39a22418d4cc2f6",
+ "reference": "2673074597eca9682d2fdfaee39a22418d4cc2f6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.15",
+ "phan/phan": "^2.2",
+ "phpunit/phpunit": "^7.2 || ^8.2 || ^9",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Jfcherng\\Utility\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ }
+ ],
+ "description": "Make your PHP command-line application colorful.",
+ "keywords": [
+ "ansi-colors",
+ "color",
+ "command-line",
+ "str-color"
+ ],
+ "support": {
+ "issues": "https://github.com/jfcherng/php-color-output/issues",
+ "source": "https://github.com/jfcherng/php-color-output/tree/2.0.2"
+ },
+ "time": "2020-05-27T19:24:44+00:00"
+ },
+ {
+ "name": "jfcherng/php-mb-string",
+ "version": "1.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jfcherng/php-mb-string.git",
+ "reference": "ef8926ff849863bfea234e99ee827947bedd86b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jfcherng/php-mb-string/zipball/ef8926ff849863bfea234e99ee827947bedd86b0",
+ "reference": "ef8926ff849863bfea234e99ee827947bedd86b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.18",
+ "phan/phan": "^2 || ^3 || ^4",
+ "phpunit/phpunit": "^7.2 || ^8 || ^9"
+ },
+ "suggest": {
+ "ext-iconv": "Either \"ext-iconv\" or \"ext-mbstring\" is requried.",
+ "ext-mbstring": "Either \"ext-iconv\" or \"ext-mbstring\" is requried."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Jfcherng\\Utility\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ }
+ ],
+ "description": "A high performance multibytes sting implementation for frequently reading/writing operations.",
+ "support": {
+ "issues": "https://github.com/jfcherng/php-mb-string/issues",
+ "source": "https://github.com/jfcherng/php-mb-string/tree/1.4.8"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/jfcherng/5usd",
+ "type": "custom"
+ }
+ ],
+ "time": "2023-04-17T14:22:37+00:00"
+ },
+ {
+ "name": "jfcherng/php-sequence-matcher",
+ "version": "3.2.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jfcherng/php-sequence-matcher.git",
+ "reference": "650164598be2c6ad6891dbd41de4cb5cc21cc91b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jfcherng/php-sequence-matcher/zipball/650164598be2c6ad6891dbd41de4cb5cc21cc91b",
+ "reference": "650164598be2c6ad6891dbd41de4cb5cc21cc91b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.19",
+ "phan/phan": "^2.5 || ^3 || ^4 || ^5",
+ "phpunit/phpunit": ">=7 <10",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Jfcherng\\Diff\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ },
+ {
+ "name": "Chris Boulton",
+ "email": "chris.boulton@interspire.com"
+ }
+ ],
+ "description": "A longest sequence matcher. The logic is primarily based on the Python difflib package.",
+ "support": {
+ "issues": "https://github.com/jfcherng/php-sequence-matcher/issues",
+ "source": "https://github.com/jfcherng/php-sequence-matcher/tree/3.2.10"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.me/jfcherng/5usd",
+ "type": "custom"
+ }
+ ],
+ "time": "2023-05-21T07:53:38+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "composer/semver",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "0ec124f57c7e23925c006cbad0de853e3aec3ba2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/0ec124f57c7e23925c006cbad0de853e3aec3ba2",
+ "reference": "0ec124f57c7e23925c006cbad0de853e3aec3ba2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.19",
+ "phpunit/phpunit": "^4.5 || ^5.0.5 || ^7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-21T13:19:12+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "1.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "f27e06cd9675801df441b3656569b328e04aa37c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c",
+ "reference": "f27e06cd9675801df441b3656569b328e04aa37c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/1.4.6"
+ },
+ "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-03-25T17:01:18+00:00"
+ },
+ {
+ "name": "doctrine/annotations",
+ "version": "1.14.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1 || ^2",
+ "ext-tokenizer": "*",
+ "php": "^7.1 || ^8.0",
+ "psr/cache": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "doctrine/cache": "^1.11 || ^2.0",
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "~1.4.10 || ^1.8.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "vimeo/psalm": "^4.10"
+ },
+ "suggest": {
+ "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/annotations/issues",
+ "source": "https://github.com/doctrine/annotations/tree/1.14.3"
+ },
+ "time": "2023-02-01T09:20:38+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
+ "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v1.1.1"
+ },
+ "time": "2023-06-03T09:27:29+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.30 || ^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-30T00:15:36+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^4.11 || ^5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-14T08:49:07+00:00"
+ },
+ {
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.2.1",
+ "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"
+ },
+ "type": "library",
+ "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"
+ },
+ "time": "2021-06-11T22:34:44+00:00"
+ },
+ {
+ "name": "friendsofphp/php-cs-fixer",
+ "version": "v2.19.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
+ "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
+ "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
+ "composer/xdebug-handler": "^1.2 || ^2.0",
+ "doctrine/annotations": "^1.2",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": "^5.6 || ^7.0 || ^8.0",
+ "php-cs-fixer/diff": "^1.3",
+ "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0",
+ "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
+ "symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
+ "symfony/finder": "^3.0 || ^4.0 || ^5.0",
+ "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
+ "symfony/polyfill-php70": "^1.0",
+ "symfony/polyfill-php72": "^1.4",
+ "symfony/process": "^3.0 || ^4.0 || ^5.0",
+ "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
+ },
+ "require-dev": {
+ "justinrainbow/json-schema": "^5.0",
+ "keradus/cli-executor": "^1.4",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.4.2",
+ "php-cs-fixer/accessible-object": "^1.0",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
+ "phpspec/prophecy-phpunit": "^1.1 || ^2.0",
+ "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5",
+ "phpunitgoodpractices/polyfill": "^1.5",
+ "phpunitgoodpractices/traits": "^1.9.1",
+ "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1",
+ "symfony/phpunit-bridge": "^5.2.1",
+ "symfony/yaml": "^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "ext-dom": "For handling output formats in XML",
+ "ext-mbstring": "For handling non-UTF8 characters.",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
+ "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
+ },
+ "bin": [
+ "php-cs-fixer"
+ ],
+ "type": "application",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.19-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpCsFixer\\": "src/"
+ },
+ "classmap": [
+ "tests/Test/AbstractFixerTestCase.php",
+ "tests/Test/AbstractIntegrationCaseFactory.php",
+ "tests/Test/AbstractIntegrationTestCase.php",
+ "tests/Test/Assert/AssertTokensTrait.php",
+ "tests/Test/IntegrationCase.php",
+ "tests/Test/IntegrationCaseFactory.php",
+ "tests/Test/IntegrationCaseFactoryInterface.php",
+ "tests/Test/InternalIntegrationCaseFactory.php",
+ "tests/Test/IsIdenticalConstraint.php",
+ "tests/Test/TokensWithObservedTransformers.php",
+ "tests/TestCase.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Dariusz Rumiński",
+ "email": "dariusz.ruminski@gmail.com"
+ }
+ ],
+ "description": "A tool to automatically fix PHP code style",
+ "support": {
+ "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
+ "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/keradus",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-15T17:17:55+00:00"
+ },
+ {
+ "name": "liip/rmt",
+ "version": "1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/liip/RMT.git",
+ "reference": "a31f08e11934a54d65faab41a1041e2049ccbabc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/liip/RMT/zipball/a31f08e11934a54d65faab41a1041e2049ccbabc",
+ "reference": "a31f08e11934a54d65faab41a1041e2049ccbabc",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.1|^8.0",
+ "symfony/console": "^3.4|^4.0|^5.0|^6.0",
+ "symfony/process": "^3.4|^4.0|^5.0|^6.0",
+ "symfony/yaml": "^3.4|^4.0|^5.0|^6.0",
+ "vierbergenlars/php-semver": "^3.0.2"
+ },
+ "bin": [
+ "RMT"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Liip": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Macheret",
+ "email": "jonathan.macheret@liip.ch",
+ "role": "Developer"
+ },
+ {
+ "name": "David Jeanmonod",
+ "email": "david.jeanmonod@liip.ch",
+ "role": "Developer"
+ }
+ ],
+ "description": "Release Management Tool: a handy tool to help releasing new version of your software",
+ "homepage": "http://github.com/liip/RMT",
+ "keywords": [
+ "post-release",
+ "pre-release",
+ "release",
+ "semantic versioning",
+ "vcs tag",
+ "version"
+ ],
+ "support": {
+ "issues": "http://github.com/liip/RMT/issues",
+ "source": "https://github.com/liip/RMT/tree/1.7.0"
+ },
+ "time": "2022-03-15T07:32:30+00:00"
+ },
+ {
+ "name": "microsoft/tolerant-php-parser",
+ "version": "v0.0.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/microsoft/tolerant-php-parser.git",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "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/master"
+ },
+ "time": "2020-02-18T02:57:19+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-08T13:26:56+00:00"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v2.1.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"
+ },
+ "type": "library",
+ "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/master"
+ },
+ "time": "2020-04-16T18:48:43+00:00"
+ },
+ {
+ "name": "phan/phan",
+ "version": "2.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phan/phan.git",
+ "reference": "37024c7c84ca153f8f7311db24f08d82ca5a237f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phan/phan/zipball/37024c7c84ca153f8f7311db24f08d82ca5a237f",
+ "reference": "37024c7c84ca153f8f7311db24f08d82ca5a237f",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4|^2.0",
+ "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."
+ },
+ "bin": [
+ "phan",
+ "phan_client",
+ "tocheckstyle"
+ ],
+ "type": "project",
+ "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/v2"
+ },
+ "time": "2020-07-02T01:28:55+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^2.0",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/master"
+ },
+ "time": "2018-07-08T19:23:20+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/master"
+ },
+ "time": "2018-07-08T19:19:57+00:00"
+ },
+ {
+ "name": "php-cs-fixer/diff",
+ "version": "v1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-CS-Fixer/diff.git",
+ "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759",
+ "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
+ "symfony/process": "^3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "SpacePossum"
+ }
+ ],
+ "description": "sebastian/diff v2 backport support for PHP5.6",
+ "homepage": "https://github.com/PHP-CS-Fixer",
+ "keywords": [
+ "diff"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-CS-Fixer/diff/issues",
+ "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1"
+ },
+ "abandoned": true,
+ "time": "2020-10-14T08:39:05+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.1.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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master"
+ },
+ "time": "2020-04-27T09:25:28+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "4.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+ "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
+ "webmozart/assert": "^1.0"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "^1.0.5",
+ "mockery/mockery": "^1.0",
+ "phpdocumentor/type-resolver": "0.4.*",
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x"
+ },
+ "time": "2019-12-28T18:55:12+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1",
+ "phpdocumentor/reflection-common": "^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "^7.1",
+ "mockery/mockery": "~1",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "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/0.7.2"
+ },
+ "time": "2019-08-22T18:11:29+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.10.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.5 || ^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
+ },
+ "time": "2020-03-05T15:02:03+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "6.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.1",
+ "phpunit/php-file-iterator": "^2.0",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
+ "sebastian/environment": "^3.1 || ^4.0",
+ "sebastian/version": "^2.0.1",
+ "theseer/tokenizer": "^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "suggest": {
+ "ext-xdebug": "^2.6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master"
+ },
+ "time": "2018-10-31T16:06:48+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:42:26+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
+ },
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:20:02+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "3.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
+ "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "abandoned": true,
+ "time": "2021-07-26T12:15:06+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "7.5.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "^1.7",
+ "phar-io/manifest": "^1.0.2",
+ "phar-io/version": "^2.0",
+ "php": "^7.1",
+ "phpspec/prophecy": "^1.7",
+ "phpunit/php-code-coverage": "^6.0.7",
+ "phpunit/php-file-iterator": "^2.0.1",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-timer": "^2.1",
+ "sebastian/comparator": "^3.0",
+ "sebastian/diff": "^3.0",
+ "sebastian/environment": "^4.0",
+ "sebastian/exporter": "^3.1",
+ "sebastian/global-state": "^2.0",
+ "sebastian/object-enumerator": "^3.0.3",
+ "sebastian/resource-operations": "^2.0",
+ "sebastian/version": "^2.0.1"
+ },
+ "conflict": {
+ "phpunit/phpunit-mock-objects": "*"
+ },
+ "require-dev": {
+ "ext-pdo": "*"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*",
+ "phpunit/php-invoker": "^2.0"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.5-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20"
+ },
+ "time": "2020-01-08T08:45:45+00:00"
+ },
+ {
+ "name": "psr/cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/master"
+ },
+ "time": "2016-08-06T20:24:11+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/master"
+ },
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "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"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "sabre/event",
+ "version": "5.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sabre-io/event.git",
+ "reference": "d7da22897125d34d7eddf7977758191c06a74497"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497",
+ "reference": "d7da22897125d34d7eddf7977758191c06a74497",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.17.1",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/coroutine.php",
+ "lib/Loop/functions.php",
+ "lib/Promise/functions.php"
+ ],
+ "psr-4": {
+ "Sabre\\Event\\": "lib/"
+ }
+ },
+ "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"
+ },
+ "time": "2021-11-04T06:51:17+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:15:22+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "3.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "sebastian/diff": "^3.0",
+ "sebastian/exporter": "^3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:31:48+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae",
+ "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8.0",
+ "symfony/process": "^2 || ^3.3 || ^4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-05-07T05:30:20+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "4.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:53:42+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T06:00:17+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0"
+ },
+ "time": "2017-04-27T15:39:26+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "sebastian/object-reflector": "^1.1.1",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:40:27+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:37:18+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:34:24+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:30:19+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/master"
+ },
+ "time": "2016-10-03T07:35:21+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "bin": [
+ "bin/phpcs",
+ "bin/phpcbf"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
+ "source": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
+ },
+ "time": "2023-02-22T23:07:41+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v4.4.49",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/event-dispatcher": "<4.3|>=5",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<3.3"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/event-dispatcher": "^4.3",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^3.4|^4.0|^5.0",
+ "symfony/var-dumper": "^4.3|^5.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "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",
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v4.4.49"
+ },
+ "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": "2022-11-05T17:10:16+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/event-dispatcher-contracts": "^1.1",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "1.1"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/error-handler": "~3.4|~4.4",
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
+ "symfony/http-foundation": "^3.4|^4.0|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/stopwatch": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44"
+ },
+ "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": "2022-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "suggest": {
+ "psr/event-dispatcher": "",
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "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 dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13"
+ },
+ "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": "2022-01-02T09:41:36+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v4.4.42",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5",
+ "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v4.4.42"
+ },
+ "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": "2022-05-20T08:49:14+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v4.4.44"
+ },
+ "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": "2022-07-29T07:35:46+00:00"
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "583f56160f716dd435f1cd721fd14b548f4bb510"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510",
+ "reference": "583f56160f716dd435f1cd721fd14b548f4bb510",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "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": "Provides an improved replacement for the array_replace PHP function",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/options-resolver/tree/v4.4.44"
+ },
+ "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": "2022-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php70",
+ "version": "v1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php70.git",
+ "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
+ "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "metapackage",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.20-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.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": "2020-10-23T14:02:19+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v4.4.44"
+ },
+ "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": "2022-06-27T13:16:42+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "psr/container": "^1.0"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "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/v1.1.13"
+ },
+ "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": "2022-05-27T14:01:05+00:00"
+ },
+ {
+ "name": "symfony/stopwatch",
+ "version": "v4.4.46",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/stopwatch.git",
+ "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/757660703fbd139eea0001b759c6c3bf5bc3ea52",
+ "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/service-contracts": "^1.0|^2"
+ },
+ "require-dev": {
+ "symfony/polyfill-php72": "~1.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Stopwatch\\": ""
+ },
+ "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": "Provides a way to profile code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/stopwatch/tree/v4.4.46"
+ },
+ "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": "2022-09-28T12:53:24+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v4.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
+ "reference": "aeccc4dc52a9e634f1d1eebeb21eacfdcff1053d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "conflict": {
+ "symfony/console": "<3.4"
+ },
+ "require-dev": {
+ "symfony/console": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "symfony/console": "For validating YAML files using the lint command"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Loads and dumps YAML files",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v4.4.45"
+ },
+ "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": "2022-08-02T15:47:23+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/master"
+ },
+ "time": "2019-06-13T22:48:21+00:00"
+ },
+ {
+ "name": "vierbergenlars/php-semver",
+ "version": "v3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vierbergenlars/php-semver.git",
+ "reference": "ff2f5b33f33a1e702a09c6f91f3ea34f5cf78bdf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vierbergenlars/php-semver/zipball/ff2f5b33f33a1e702a09c6f91f3ea34f5cf78bdf",
+ "reference": "ff2f5b33f33a1e702a09c6f91f3ea34f5cf78bdf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5.21"
+ },
+ "bin": [
+ "bin/semver",
+ "bin/update-versions"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "vierbergenlars\\LibJs\\": "src/",
+ "vierbergenlars\\SemVer\\": "src/"
+ },
+ "classmap": [
+ "src/vierbergenlars/SemVer/internal.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Lars Vierbergen",
+ "email": "vierbergenlars@gmail.com"
+ }
+ ],
+ "description": "The Semantic Versioner for PHP",
+ "keywords": [
+ "semantic",
+ "semver",
+ "versioning"
+ ],
+ "support": {
+ "issues": "https://github.com/vierbergenlars/php-semver/issues",
+ "source": "https://github.com/vierbergenlars/php-semver/tree/v3.0.4"
+ },
+ "abandoned": "composer/semver",
+ "time": "2023-05-02T06:45:47+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<3.9.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+ },
+ "type": "library",
+ "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.9.1"
+ },
+ "time": "2020-07-08T17:02:28+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "beta",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=7.1.3"
+ },
+ "platform-dev": [],
+ "platform-overrides": {
+ "php": "7.1.3"
+ },
+ "plugin-api-version": "2.3.0"
+}
diff --git a/vendor/jfcherng/php-diff/example/README.md b/vendor/jfcherng/php-diff/example/README.md
new file mode 100644
index 0000000..8eb338a
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/README.md
@@ -0,0 +1,21 @@
+# Demo
+
+Note that
+
+- All `composer`-related commands are run in this project's root directory.
+ That is php-diff directory rather than this `example` directory.
+- You can change differ/renderer options in `demo_base.php`.
+- Change contents of `old_file.txt` and `new_file.txt` to test different text.
+
+To run demo, you have to first install dependencies via `composer install`.
+
+## Web Environment
+
+To run `demo_web.php` on your local machine, you can follow steps below.
+
+1. Start PHP development server via `composer run-script server`.
+1. Visit `http://localhost:12388/demo_web.php` with a web browser.
+
+## Cli Environment
+
+Just run `php demo_cli.php`.
diff --git a/vendor/jfcherng/php-diff/example/demo_base.php b/vendor/jfcherng/php-diff/example/demo_base.php
new file mode 100644
index 0000000..3873df9
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/demo_base.php
@@ -0,0 +1,78 @@
+<?php
+
+include __DIR__ . '/../vendor/autoload.php';
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\Renderer\RendererConstant;
+
+// the two sample files for comparison
+$oldFile = __DIR__ . '/old_file.txt';
+$newFile = __DIR__ . '/new_file.txt';
+$oldString = \file_get_contents($oldFile);
+$newString = \file_get_contents($newFile);
+
+// options for Diff class
+$diffOptions = [
+ // show how many neighbor lines
+ // Differ::CONTEXT_ALL can be used to show the whole file
+ 'context' => 1,
+ // ignore case difference
+ 'ignoreCase' => false,
+ // ignore line ending difference
+ 'ignoreLineEnding' => false,
+ // ignore whitespace difference
+ 'ignoreWhitespace' => false,
+ // if the input sequence is too long, it will just gives up (especially for char-level diff)
+ 'lengthLimit' => 2000,
+];
+
+// options for renderer class
+$rendererOptions = [
+ // how detailed the rendered HTML is? (none, line, word, char)
+ 'detailLevel' => 'line',
+ // renderer language: eng, cht, chs, jpn, ...
+ // or an array which has the same keys with a language file
+ // check the "Custom Language" section in the readme for more advanced usage
+ 'language' => 'eng',
+ // show line numbers in HTML renderers
+ 'lineNumbers' => true,
+ // show a separator between different diff hunks in HTML renderers
+ 'separateBlock' => true,
+ // show the (table) header
+ 'showHeader' => true,
+ // convert spaces/tabs into HTML codes like `<span class="ch sp"> </span>`
+ // and the frontend is responsible for rendering them with CSS.
+ // when using this, "spacesToNbsp" should be false and "tabSize" is not respected.
+ 'spaceToHtmlTag' => false,
+ // the frontend HTML could use CSS "white-space: pre;" to visualize consecutive whitespaces
+ // but if you want to visualize them in the backend with "&nbsp;", you can set this to true
+ 'spacesToNbsp' => false,
+ // HTML renderer tab width (negative = do not convert into spaces)
+ 'tabSize' => 4,
+ // this option is currently only for the Combined renderer.
+ // it determines whether a replace-type block should be merged or not
+ // depending on the content changed ratio, which values between 0 and 1.
+ 'mergeThreshold' => 0.8,
+ // this option is currently only for the Unified and the Context renderers.
+ // RendererConstant::CLI_COLOR_AUTO = colorize the output if possible (default)
+ // RendererConstant::CLI_COLOR_ENABLE = force to colorize the output
+ // RendererConstant::CLI_COLOR_DISABLE = force not to colorize the output
+ 'cliColorization' => RendererConstant::CLI_COLOR_AUTO,
+ // this option is currently only for the Json renderer.
+ // internally, ops (tags) are all int type but this is not good for human reading.
+ // set this to "true" to convert them into string form before outputting.
+ 'outputTagAsString' => false,
+ // this option is currently only for the Json renderer.
+ // it controls how the output JSON is formatted.
+ // see available options on https://www.php.net/manual/en/function.json-encode.php
+ 'jsonEncodeFlags' => \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE,
+ // this option is currently effective when the "detailLevel" is "word"
+ // characters listed in this array can be used to make diff segments into a whole
+ // for example, making "<del>good</del>-<del>looking</del>" into "<del>good-looking</del>"
+ // this should bring better readability but set this to empty array if you do not want it
+ 'wordGlues' => [' ', '-'],
+ // change this value to a string as the returned diff if the two input strings are identical
+ 'resultForIdenticals' => null,
+ // extra HTML classes added to the DOM of the diff container
+ 'wrapperClasses' => ['diff-wrapper'],
+];
diff --git a/vendor/jfcherng/php-diff/example/demo_cli.php b/vendor/jfcherng/php-diff/example/demo_cli.php
new file mode 100644
index 0000000..18c5eba
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/demo_cli.php
@@ -0,0 +1,38 @@
+<?php
+
+include __DIR__ . '/demo_base.php';
+
+use Jfcherng\Diff\DiffHelper;
+use Jfcherng\Utility\CliColor;
+
+$colorStyles = [
+ 'section' => ['f_black', 'b_cyan'],
+];
+
+$manyNewlines = "\n\n\n\n";
+
+echo CliColor::color("Unified Diff\n============", $colorStyles['section']) . "\n\n";
+
+// generate a unified diff
+$unifiedResult = DiffHelper::calculate(
+ $oldString,
+ $newString,
+ 'Unified',
+ $diffOptions,
+ $rendererOptions
+);
+
+echo $unifiedResult . $manyNewlines;
+
+echo CliColor::color("Context Diff\n============", $colorStyles['section']) . "\n\n";
+
+// generate a context diff
+$contextResult = DiffHelper::calculate(
+ $oldString,
+ $newString,
+ 'Context',
+ $diffOptions,
+ $rendererOptions
+);
+
+echo $contextResult . $manyNewlines;
diff --git a/vendor/jfcherng/php-diff/example/demo_web.php b/vendor/jfcherng/php-diff/example/demo_web.php
new file mode 100644
index 0000000..7b85ddb
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/demo_web.php
@@ -0,0 +1,240 @@
+<?php
+
+include __DIR__ . '/demo_base.php';
+
+use Jfcherng\Diff\DiffHelper;
+use Jfcherng\Diff\Factory\RendererFactory;
+
+?>
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta charset="UTF-8" />
+ <title>jfcherng/php-diff - Examples</title>
+
+ <!-- Prism -->
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism-okaidia.min.css" />
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1/plugins/line-numbers/prism-line-numbers.min.css" />
+
+ <style type="text/css">
+ html {
+ font-size: 13px;
+ }
+ .token.coord {
+ color: #6cf;
+ }
+ .token.diff.bold {
+ color: #fb0;
+ font-weight: normal;
+ }
+
+ <?php echo DiffHelper::getStyleSheet(); ?>
+ </style>
+</head>
+
+<body>
+ <h1>None-level Diff</h1>
+ <?php
+
+ // demo the no-inline-detail diff
+ $inlineResult = DiffHelper::calculate(
+ $oldString,
+ $newString,
+ 'Inline',
+ $diffOptions,
+ ['detailLevel' => 'none'] + $rendererOptions
+ );
+
+ echo $inlineResult;
+
+ ?>
+
+ <h1>Line-level Diff (Default)</h1>
+ <?php
+
+ // demo the word-level diff
+ $inlineResult = DiffHelper::calculate(
+ $oldString,
+ $newString,
+ 'Inline',
+ $diffOptions,
+ ['detailLevel' => 'line'] + $rendererOptions
+ );
+
+ echo $inlineResult;
+
+ ?>
+
+ <h1>Word-level Diff</h1>
+ <?php
+
+ // demo the word-level diff
+ $inlineResult = DiffHelper::calculate(
+ $oldString,
+ $newString,
+ 'Inline',
+ $diffOptions,
+ ['detailLevel' => 'word'] + $rendererOptions
+ );
+
+ echo $inlineResult;
+
+ ?>
+
+ <h1>Character-level Diff</h1>
+ <?php
+
+ // demo the character-level diff
+ $inlineResult = DiffHelper::calculate(
+ $oldString,
+ $newString,
+ 'Inline',
+ $diffOptions,
+ ['detailLevel' => 'char'] + $rendererOptions
+ );
+
+ echo $inlineResult;
+
+ ?>
+
+ <h1>Side by Side Diff</h1>
+ <?php
+
+ // generate a side by side diff
+ $sideBySideResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'SideBySide',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo $sideBySideResult;
+
+ ?>
+
+ <h1>Inline Diff</h1>
+ <?php
+
+ // generate an inline diff
+ $inlineResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'Inline',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo $inlineResult;
+
+ ?>
+
+ <h1>Combined Diff</h1>
+ <?php
+
+ // generate a combined diff
+ $sideBySideResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'Combined',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo $sideBySideResult;
+
+ ?>
+
+ <h1>Unified Diff</h1>
+ <pre><code class="language-diff line-numbers"><?php
+
+ // generate a unified diff
+ $unifiedResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'Unified',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo \htmlspecialchars($unifiedResult);
+
+ ?></code></pre>
+
+ <h1>Context Diff</h1>
+ <pre><code class="language-diff line-numbers"><?php
+
+ // generate a context diff
+ $contextResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'Context',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo \htmlspecialchars($contextResult);
+
+ ?></code></pre>
+
+ <?php
+
+ // change JSON output settings for better human reading
+ $rendererOptions['outputTagAsString'] = true;
+ $rendererOptions['jsonEncodeFlags'] |= \JSON_PRETTY_PRINT;
+
+ ?>
+
+ <h1>Text JSON Diff</h1>
+ <pre><code class="language-json line-numbers"><?php
+
+ // generate a plain text JSON diff
+ $jsonResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'JsonText',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo \htmlspecialchars($jsonResult);
+
+ ?></code></pre>
+
+ <h1>HTML JSON Diff</h1>
+ <pre><code class="language-json line-numbers"><?php
+
+ // generate a HTML JSON diff
+ $jsonResult = DiffHelper::calculateFiles(
+ $oldFile,
+ $newFile,
+ 'JsonHtml',
+ $diffOptions,
+ $rendererOptions
+ );
+
+ echo \htmlspecialchars($jsonResult);
+
+ ?></code></pre>
+
+ <h1>HTML Diff from the Result of JSON Diff</h1>
+ <?php
+
+ $jsonArray = \json_decode($jsonResult, true);
+
+ $htmlRenderer = RendererFactory::make('Inline', $rendererOptions);
+ $inlineResult = $htmlRenderer->renderArray($jsonArray);
+
+ echo $inlineResult;
+
+ ?>
+
+ <!-- Prism -->
+ <script src="https://cdn.jsdelivr.net/npm/prismjs@1/prism.min.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-diff.min.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/prismjs@1/components/prism-json.min.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/prismjs@1/plugins/line-numbers/prism-line-numbers.min.js"></script>
+</body>
+
+</html>
diff --git a/vendor/jfcherng/php-diff/example/diff-table.css b/vendor/jfcherng/php-diff/example/diff-table.css
new file mode 100644
index 0000000..767ccda
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/diff-table.css
@@ -0,0 +1,128 @@
+.diff-wrapper.diff {
+ --tab-size: 4;
+ background: repeating-linear-gradient(-45deg, whitesmoke, whitesmoke 0.5em, #e8e8e8 0.5em, #e8e8e8 1em);
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px solid black;
+ color: black;
+ empty-cells: show;
+ font-family: monospace;
+ font-size: 13px;
+ width: 100%;
+ word-break: break-all;
+}
+.diff-wrapper.diff th {
+ font-weight: 700;
+ cursor: default;
+ -webkit-user-select: none;
+ user-select: none;
+}
+.diff-wrapper.diff td {
+ vertical-align: baseline;
+}
+.diff-wrapper.diff td,
+.diff-wrapper.diff th {
+ border-collapse: separate;
+ border: none;
+ padding: 1px 2px;
+ background: #fff;
+}
+.diff-wrapper.diff td:empty:after,
+.diff-wrapper.diff th:empty:after {
+ content: " ";
+ visibility: hidden;
+}
+.diff-wrapper.diff td a,
+.diff-wrapper.diff th a {
+ color: #000;
+ cursor: inherit;
+ pointer-events: none;
+}
+.diff-wrapper.diff thead th {
+ background: #a6a6a6;
+ border-bottom: 1px solid black;
+ padding: 4px;
+ text-align: left;
+}
+.diff-wrapper.diff tbody.skipped {
+ border-top: 1px solid black;
+}
+.diff-wrapper.diff tbody.skipped td,
+.diff-wrapper.diff tbody.skipped th {
+ display: none;
+}
+.diff-wrapper.diff tbody th {
+ background: #cccccc;
+ border-right: 1px solid black;
+ text-align: right;
+ vertical-align: top;
+ width: 4em;
+}
+.diff-wrapper.diff tbody th.sign {
+ background: #fff;
+ border-right: none;
+ padding: 1px 0;
+ text-align: center;
+ width: 1em;
+}
+.diff-wrapper.diff tbody th.sign.del {
+ background: #fbe1e1;
+}
+.diff-wrapper.diff tbody th.sign.ins {
+ background: #e1fbe1;
+}
+.diff-wrapper.diff.diff-html {
+ white-space: pre-wrap;
+ tab-size: var(--tab-size);
+}
+.diff-wrapper.diff.diff-html .ch {
+ line-height: 1em;
+ background-clip: border-box;
+ background-repeat: repeat-x;
+ background-position: left center;
+}
+.diff-wrapper.diff.diff-html .ch.sp {
+ background-image: url('data:image/svg+xml,%3Csvg preserveAspectRatio="xMinYMid meet" viewBox="0 0 12 24" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M4.5 11C4.5 10.1716 5.17157 9.5 6 9.5C6.82843 9.5 7.5 10.1716 7.5 11C7.5 11.8284 6.82843 12.5 6 12.5C5.17157 12.5 4.5 11.8284 4.5 11Z" fill="rgba%2860, 60, 60, 50%25%29"/%3E%3C/svg%3E');
+ background-size: 1ch 1.25em;
+}
+.diff-wrapper.diff.diff-html .ch.tab {
+ background-image: url('data:image/svg+xml,%3Csvg preserveAspectRatio="xMinYMid meet" viewBox="0 0 12 24" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M9.5 10.44L6.62 8.12L7.32 7.26L12.04 11V11.44L7.28 14.9L6.62 13.9L9.48 11.78H0V10.44H9.5Z" fill="rgba%2860, 60, 60, 50%25%29"/%3E%3C/svg%3E');
+ background-size: calc(var(--tab-size) * 1ch) 1.25em;
+ background-position: 2px center;
+}
+.diff-wrapper.diff.diff-html.diff-side-by-side td.old, .diff-wrapper.diff.diff-html.diff-side-by-side td.new {
+ width: 45%;
+}
+.diff-wrapper.diff.diff-html.diff-combined .change.change-rep .rep {
+ white-space: normal;
+}
+.diff-wrapper.diff.diff-html .change.change-eq .old,
+.diff-wrapper.diff.diff-html .change.change-eq .new {
+ background: #fff;
+}
+.diff-wrapper.diff.diff-html .change .old {
+ background: #fbe1e1;
+}
+.diff-wrapper.diff.diff-html .change .new {
+ background: #e1fbe1;
+}
+.diff-wrapper.diff.diff-html .change .rep {
+ background: #fef6d9;
+}
+.diff-wrapper.diff.diff-html .change .old.none,
+.diff-wrapper.diff.diff-html .change .new.none,
+.diff-wrapper.diff.diff-html .change .rep.none {
+ background: transparent;
+ cursor: not-allowed;
+}
+.diff-wrapper.diff.diff-html .change ins,
+.diff-wrapper.diff.diff-html .change del {
+ font-weight: bold;
+ text-decoration: none;
+}
+.diff-wrapper.diff.diff-html .change ins {
+ background: #94f094;
+}
+.diff-wrapper.diff.diff-html .change del {
+ background: #f09494;
+}
diff --git a/vendor/jfcherng/php-diff/example/diff-table.scss b/vendor/jfcherng/php-diff/example/diff-table.scss
new file mode 100644
index 0000000..89c491e
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/diff-table.scss
@@ -0,0 +1,211 @@
+// You can compile this with https://www.sassmeister.com
+
+$diff-bg-color: #fff !default;
+$diff-text-color: invert($diff-bg-color) !default;
+
+$diff-bg-color-ins-base: #8e8 !default;
+$diff-bg-color-del-base: #e88 !default;
+$diff-bg-color-rep-base: #fbdb65 !default;
+
+$diff-op-highlight-ratio: 90% !default;
+$diff-op-normal-ratio: 25% !default;
+
+// emphasized colors for detailed inline difference
+$diff-bg-color-ins-highlight: mix($diff-bg-color-ins-base, $diff-bg-color, $diff-op-highlight-ratio) !default;
+$diff-bg-color-del-highlight: mix($diff-bg-color-del-base, $diff-bg-color, $diff-op-highlight-ratio) !default;
+
+// colors for operation rows
+$diff-bg-color-ins: mix($diff-bg-color-ins-base, $diff-bg-color, $diff-op-normal-ratio) !default;
+$diff-bg-color-del: mix($diff-bg-color-del-base, $diff-bg-color, $diff-op-normal-ratio) !default;
+$diff-bg-color-rep: mix($diff-bg-color-rep-base, $diff-bg-color, $diff-op-normal-ratio) !default;
+
+$diff-table-head-color: mix($diff-bg-color, $diff-text-color, 65%) !default;
+$diff-table-sidebar-color: mix($diff-bg-color, $diff-text-color, 80%) !default;
+$diff-border-color: $diff-text-color !default;
+
+// color for the nonexistent block
+// for example, there are a deleted line that has no corresponding one
+$diff-bg-color-none-block: mix($diff-bg-color, $diff-table-sidebar-color, 80%) !default;
+$diff-bg-color-none-block-alternative: mix($diff-bg-color, $diff-table-sidebar-color, 55%) !default;
+
+// symbol images
+$img-space: 'data:image/svg+xml,%3Csvg preserveAspectRatio="xMinYMid meet" viewBox="0 0 12 24" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M4.5 11C4.5 10.1716 5.17157 9.5 6 9.5C6.82843 9.5 7.5 10.1716 7.5 11C7.5 11.8284 6.82843 12.5 6 12.5C5.17157 12.5 4.5 11.8284 4.5 11Z" fill="rgba%2860, 60, 60, 50%25%29"/%3E%3C/svg%3E' !default;
+$img-tab: 'data:image/svg+xml,%3Csvg preserveAspectRatio="xMinYMid meet" viewBox="0 0 12 24" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M9.5 10.44L6.62 8.12L7.32 7.26L12.04 11V11.44L7.28 14.9L6.62 13.9L9.48 11.78H0V10.44H9.5Z" fill="rgba%2860, 60, 60, 50%25%29"/%3E%3C/svg%3E' !default;
+
+.diff-wrapper.diff {
+ --tab-size: 4;
+
+ background: repeating-linear-gradient(
+ -45deg,
+ $diff-bg-color-none-block,
+ $diff-bg-color-none-block 0.5em,
+ $diff-bg-color-none-block-alternative 0.5em,
+ $diff-bg-color-none-block-alternative 1em
+ );
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px solid $diff-border-color;
+ color: $diff-text-color;
+ empty-cells: show;
+ font-family: monospace;
+ font-size: 13px;
+ width: 100%;
+ word-break: break-all;
+
+ th {
+ font-weight: 700;
+ cursor: default;
+ -webkit-user-select: none;
+ user-select: none;
+ }
+
+ td {
+ vertical-align: baseline;
+ }
+
+ td,
+ th {
+ border-collapse: separate;
+ border: none;
+ padding: 1px 2px;
+ background: $diff-bg-color;
+
+ // make empty cell has height
+ &:empty:after {
+ content: ' ';
+ visibility: hidden;
+ }
+
+ a {
+ color: #000;
+ cursor: inherit;
+ pointer-events: none;
+ }
+ }
+
+ thead th {
+ background: $diff-table-head-color;
+ border-bottom: 1px solid $diff-border-color;
+ padding: 4px;
+ text-align: left;
+ }
+
+ tbody {
+ &.skipped {
+ border-top: 1px solid $diff-border-color;
+
+ td,
+ th {
+ display: none;
+ }
+ }
+
+ th {
+ background: $diff-table-sidebar-color;
+ border-right: 1px solid $diff-border-color;
+ text-align: right;
+ vertical-align: top;
+ width: 4em;
+
+ &.sign {
+ background: $diff-bg-color;
+ border-right: none;
+ padding: 1px 0;
+ text-align: center;
+ width: 1em;
+
+ &.del {
+ background: $diff-bg-color-del;
+ }
+
+ &.ins {
+ background: $diff-bg-color-ins;
+ }
+ }
+ }
+ }
+
+ &.diff-html {
+ white-space: pre-wrap;
+ tab-size: var(--tab-size);
+
+ .ch {
+ line-height: 1em;
+ background-clip: border-box;
+ background-repeat: repeat-x;
+ background-position: left center;
+
+ &.sp {
+ background-image: url($img-space);
+ background-size: 1ch 1.25em;
+ }
+ &.tab {
+ background-image: url($img-tab);
+ background-size: calc(var(--tab-size) * 1ch) 1.25em;
+ background-position: 2px center;
+ }
+ }
+
+ &.diff-side-by-side {
+ td {
+ &.old,
+ &.new {
+ width: 45%;
+ }
+ }
+ }
+
+ &.diff-combined {
+ .change.change-rep {
+ .rep {
+ // fixes https://github.com/jfcherng/php-diff/issues/34#issuecomment-671404456
+ white-space: normal;
+ }
+ }
+ }
+
+ .change {
+ &.change-eq {
+ .old,
+ .new {
+ background: $diff-bg-color;
+ }
+ }
+
+ .old {
+ background: $diff-bg-color-del;
+ }
+
+ .new {
+ background: $diff-bg-color-ins;
+ }
+
+ .rep {
+ background: $diff-bg-color-rep;
+ }
+
+ .old,
+ .new,
+ .rep {
+ &.none {
+ background: transparent;
+ cursor: not-allowed;
+ }
+ }
+
+ ins,
+ del {
+ font-weight: bold;
+ text-decoration: none;
+ }
+
+ ins {
+ background: $diff-bg-color-ins-highlight;
+ }
+
+ del {
+ background: $diff-bg-color-del-highlight;
+ }
+ }
+ }
+}
diff --git a/vendor/jfcherng/php-diff/example/new_file.txt b/vendor/jfcherng/php-diff/example/new_file.txt
new file mode 100644
index 0000000..2320110
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/new_file.txt
@@ -0,0 +1,19 @@
+<div>Hello World! Bad-tempered.</div>
+~~~~~~~~~~~~~~~~~~~
+Let's add a new line here.
+X
+Y
+Just a context separator. 1
+M
+N
+Do you know in Japanese, "魚の缶詰" means fish can.
+ Tab visualization test.
+G
+Say hello to my neighbors.
+A
+Just a context separator. 2
+B
+Donec rutrum test.
+There is a new inserted line.
+C
+Sed dolor lorem ipsum hendrerit.
diff --git a/vendor/jfcherng/php-diff/example/old_file.txt b/vendor/jfcherng/php-diff/example/old_file.txt
new file mode 100644
index 0000000..a63b7c5
--- /dev/null
+++ b/vendor/jfcherng/php-diff/example/old_file.txt
@@ -0,0 +1,18 @@
+<p>Hello World! Good-looking.</p>
+~~~~~~~~~~~~~~~~~~~
+X
+Y
+Just a context separator. 1
+M
+N
+Do you know in Chinese, "金槍魚罐頭" means tuna can.
+ Tab visualization test.
+G
+// remember to delete this line
+Say hello to my neighbors.
+A
+Just a context separator. 2
+B
+Donec rutrum.
+C
+Sed dictum lorem ipsum.
diff --git a/vendor/jfcherng/php-diff/src/DiffHelper.php b/vendor/jfcherng/php-diff/src/DiffHelper.php
new file mode 100644
index 0000000..7c7165f
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/DiffHelper.php
@@ -0,0 +1,184 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff;
+
+use Jfcherng\Diff\Factory\RendererFactory;
+use Jfcherng\Diff\Renderer\RendererConstant;
+
+final class DiffHelper
+{
+ /**
+ * The constructor.
+ */
+ private function __construct()
+ {
+ }
+
+ /**
+ * Get the absolute path of the project root directory.
+ */
+ public static function getProjectDirectory(): string
+ {
+ static $path;
+
+ return $path = $path ?? \realpath(__DIR__ . '/..');
+ }
+
+ /**
+ * Get the information about available renderers.
+ */
+ public static function getRenderersInfo(): array
+ {
+ static $info;
+
+ if (isset($info)) {
+ return $info;
+ }
+
+ $glob = \implode(\DIRECTORY_SEPARATOR, [
+ static::getProjectDirectory(),
+ 'src',
+ 'Renderer',
+ '{' . \implode(',', RendererConstant::RENDERER_TYPES) . '}',
+ '*.php',
+ ]);
+
+ $fileNames = \array_map(
+ // get basename without file extension
+ function (string $file): string {
+ return \pathinfo($file, \PATHINFO_FILENAME);
+ },
+ // paths of all Renderer files
+ \glob($glob, \GLOB_BRACE)
+ );
+
+ $renderers = \array_filter(
+ $fileNames,
+ // only normal class files are wanted
+ function (string $fileName): bool {
+ return
+ \substr($fileName, 0, 8) !== 'Abstract'
+ && \substr($fileName, -9) !== 'Interface'
+ && \substr($fileName, -5) !== 'Trait';
+ }
+ );
+
+ $info = [];
+ foreach ($renderers as $renderer) {
+ $info[$renderer] = RendererFactory::resolveRenderer($renderer)::INFO;
+ }
+
+ return $info;
+ }
+
+ /**
+ * Get the available renderers.
+ *
+ * @return string[] the available renderers
+ */
+ public static function getAvailableRenderers(): array
+ {
+ return \array_keys(self::getRenderersInfo());
+ }
+
+ /**
+ * Get the content of the CSS style sheet for HTML renderers.
+ *
+ * @throws \LogicException path is a directory
+ * @throws \RuntimeException path cannot be opened
+ */
+ public static function getStyleSheet(): string
+ {
+ static $fileContent;
+
+ if (isset($fileContent)) {
+ return $fileContent;
+ }
+
+ $filePath = static::getProjectDirectory() . '/example/diff-table.css';
+
+ $file = new \SplFileObject($filePath, 'r');
+
+ return $fileContent = $file->fread($file->getSize());
+ }
+
+ /**
+ * Gets the diff statistics such as inserted and deleted etc...
+ *
+ * @return array<string,float> the statistics
+ */
+ public static function getStatistics(): array
+ {
+ return Differ::getInstance()->getStatistics();
+ }
+
+ /**
+ * All-in-one static method to calculate the diff between two strings (or arrays of strings).
+ *
+ * @param string|string[] $old the old string (or array of lines)
+ * @param string|string[] $new the new string (or array of lines)
+ * @param string $renderer the renderer name
+ * @param array $differOptions the options for Differ object
+ * @param array $rendererOptions the options for renderer object
+ *
+ * @return string the rendered differences
+ */
+ public static function calculate(
+ $old,
+ $new,
+ string $renderer = 'Unified',
+ array $differOptions = [],
+ array $rendererOptions = []
+ ): string {
+ // always convert into array form
+ \is_string($old) && ($old = \explode("\n", $old));
+ \is_string($new) && ($new = \explode("\n", $new));
+
+ return RendererFactory::getInstance($renderer)
+ ->setOptions($rendererOptions)
+ ->render(
+ Differ::getInstance()
+ ->setOldNew($old, $new)
+ ->setOptions($differOptions)
+ );
+ }
+
+ /**
+ * All-in-one static method to calculate the diff between two files.
+ *
+ * @param string $old the path of the old file
+ * @param string $new the path of the new file
+ * @param string $renderer the renderer name
+ * @param array $differOptions the options for Differ object
+ * @param array $rendererOptions the options for renderer object
+ *
+ * @throws \LogicException path is a directory
+ * @throws \RuntimeException path cannot be opened
+ *
+ * @return string the rendered differences
+ */
+ public static function calculateFiles(
+ string $old,
+ string $new,
+ string $renderer = 'Unified',
+ array $differOptions = [],
+ array $rendererOptions = []
+ ): string {
+ // we want to leave the line-ending problem to static::calculate()
+ // so do not set SplFileObject::DROP_NEW_LINE flag
+ // otherwise, we will lose \r if the line-ending is \r\n
+ $oldFile = new \SplFileObject($old, 'r');
+ $newFile = new \SplFileObject($new, 'r');
+
+ return static::calculate(
+ // fread() requires the length > 0 hence we plus 1 for empty files
+ $oldFile->fread($oldFile->getSize() + 1),
+ $newFile->fread($newFile->getSize() + 1),
+ $renderer,
+ $differOptions,
+ $rendererOptions
+ );
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Differ.php b/vendor/jfcherng/php-diff/src/Differ.php
new file mode 100644
index 0000000..9165c18
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Differ.php
@@ -0,0 +1,506 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff;
+
+use Jfcherng\Diff\Utility\Arr;
+
+/**
+ * A comprehensive library for generating differences between two strings
+ * in multiple formats (unified, side by side HTML etc).
+ *
+ * @author Jack Cherng <jfcherng@gmail.com>
+ * @author Chris Boulton <chris.boulton@interspire.com>
+ *
+ * @see http://github.com/chrisboulton/php-diff
+ */
+final class Differ
+{
+ /**
+ * @var int a safe number for indicating showing all contexts
+ */
+ public const CONTEXT_ALL = \PHP_INT_MAX >> 3;
+
+ /**
+ * @var string used to indicate a line has no EOL
+ *
+ * Arbitrary chars from the 15-16th Unicode reserved areas
+ * and hopefully, they won't appear in source texts
+ */
+ public const LINE_NO_EOL = "\u{fcf28}\u{fc231}";
+
+ /**
+ * @var array cached properties and their default values
+ */
+ private const CACHED_PROPERTIES = [
+ 'groupedOpcodes' => [],
+ 'groupedOpcodesGnu' => [],
+ 'oldNoEolAtEofIdx' => -1,
+ 'newNoEolAtEofIdx' => -1,
+ 'oldNewComparison' => 0,
+ ];
+
+ /**
+ * @var array array of the options that have been applied for generating the diff
+ */
+ public $options = [];
+
+ /**
+ * @var string[] the old sequence
+ */
+ private $old = [];
+
+ /**
+ * @var string[] the new sequence
+ */
+ private $new = [];
+
+ /**
+ * @var bool is any of cached properties dirty?
+ */
+ private $isCacheDirty = true;
+
+ /**
+ * @var SequenceMatcher the sequence matcher
+ */
+ private $sequenceMatcher;
+
+ /**
+ * @var int
+ */
+ private $oldSrcLength = 0;
+
+ /**
+ * @var int
+ */
+ private $newSrcLength = 0;
+
+ /**
+ * @var int the end index for the old if the old has no EOL at EOF
+ * -1 means the old has an EOL at EOF
+ */
+ private $oldNoEolAtEofIdx = -1;
+
+ /**
+ * @var int the end index for the new if the new has no EOL at EOF
+ * -1 means the new has an EOL at EOF
+ */
+ private $newNoEolAtEofIdx = -1;
+
+ /**
+ * @var int the result of comparing the old and the new with the spaceship operator
+ * -1 means old < new, 0 means old == new, 1 means old > new
+ */
+ private $oldNewComparison = 0;
+
+ /**
+ * @var int[][][] array containing the generated opcodes for the differences between the two items
+ */
+ private $groupedOpcodes = [];
+
+ /**
+ * @var int[][][] array containing the generated opcodes for the differences between the two items (GNU version)
+ */
+ private $groupedOpcodesGnu = [];
+
+ /**
+ * @var array associative array of the default options available for the Differ class and their default value
+ */
+ private static $defaultOptions = [
+ // show how many neighbor lines
+ // Differ::CONTEXT_ALL can be used to show the whole file
+ 'context' => 3,
+ // ignore case difference
+ 'ignoreCase' => false,
+ // ignore line ending difference
+ 'ignoreLineEnding' => false,
+ // ignore whitespace difference
+ 'ignoreWhitespace' => false,
+ // if the input sequence is too long, it will just gives up (especially for char-level diff)
+ 'lengthLimit' => 2000,
+ ];
+
+ /**
+ * The constructor.
+ *
+ * @param string[] $old array containing the lines of the old string to compare
+ * @param string[] $new array containing the lines for the new string to compare
+ * @param array $options the options
+ */
+ public function __construct(array $old, array $new, array $options = [])
+ {
+ $this->sequenceMatcher = new SequenceMatcher([], []);
+
+ $this->setOldNew($old, $new)->setOptions($options);
+ }
+
+ /**
+ * Set old and new.
+ *
+ * @param string[] $old the old
+ * @param string[] $new the new
+ */
+ public function setOldNew(array $old, array $new): self
+ {
+ return $this->setOld($old)->setNew($new);
+ }
+
+ /**
+ * Set old.
+ *
+ * @param string[] $old the old
+ */
+ public function setOld(array $old): self
+ {
+ if ($this->old !== $old) {
+ $this->old = $old;
+ $this->isCacheDirty = true;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set new.
+ *
+ * @param string[] $new the new
+ */
+ public function setNew(array $new): self
+ {
+ if ($this->new !== $new) {
+ $this->new = $new;
+ $this->isCacheDirty = true;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the options.
+ *
+ * @param array $options the options
+ */
+ public function setOptions(array $options): self
+ {
+ $mergedOptions = $options + static::$defaultOptions;
+
+ if ($this->options !== $mergedOptions) {
+ $this->options = $mergedOptions;
+ $this->isCacheDirty = true;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get a range of lines from $start to $end from the old.
+ *
+ * @param int $start the starting index (negative = count from backward)
+ * @param null|int $end the ending index (negative = count from backward)
+ * if is null, it returns a slice from $start to the end
+ *
+ * @return string[] array of all of the lines between the specified range
+ */
+ public function getOld(int $start = 0, ?int $end = null): array
+ {
+ return Arr::getPartialByIndex($this->old, $start, $end);
+ }
+
+ /**
+ * Get a range of lines from $start to $end from the new.
+ *
+ * @param int $start the starting index (negative = count from backward)
+ * @param null|int $end the ending index (negative = count from backward)
+ * if is null, it returns a slice from $start to the end
+ *
+ * @return string[] array of all of the lines between the specified range
+ */
+ public function getNew(int $start = 0, ?int $end = null): array
+ {
+ return Arr::getPartialByIndex($this->new, $start, $end);
+ }
+
+ /**
+ * Get the options.
+ *
+ * @return array the options
+ */
+ public function getOptions(): array
+ {
+ return $this->options;
+ }
+
+ /**
+ * Get the old no EOL at EOF index.
+ *
+ * @return int the old no EOL at EOF index
+ */
+ public function getOldNoEolAtEofIdx(): int
+ {
+ return $this->finalize()->oldNoEolAtEofIdx;
+ }
+
+ /**
+ * Get the new no EOL at EOF index.
+ *
+ * @return int the new no EOL at EOF index
+ */
+ public function getNewNoEolAtEofIdx(): int
+ {
+ return $this->finalize()->newNoEolAtEofIdx;
+ }
+
+ /**
+ * Compare the old and the new with the spaceship operator.
+ */
+ public function getOldNewComparison(): int
+ {
+ return $this->finalize()->oldNewComparison;
+ }
+
+ /**
+ * Get the singleton.
+ */
+ public static function getInstance(): self
+ {
+ static $singleton;
+
+ return $singleton = $singleton ?? new static([], []);
+ }
+
+ /**
+ * Gets the diff statistics such as inserted and deleted etc...
+ *
+ * @return array<string,float> the statistics
+ */
+ public function getStatistics(): array
+ {
+ $ret = [
+ 'inserted' => 0,
+ 'deleted' => 0,
+ 'unmodified' => 0,
+ 'changedRatio' => 0.0,
+ ];
+
+ foreach ($this->getGroupedOpcodes() as $hunk) {
+ foreach ($hunk as [$op, $i1, $i2, $j1, $j2]) {
+ if ($op & (SequenceMatcher::OP_INS | SequenceMatcher::OP_REP)) {
+ $ret['inserted'] += $j2 - $j1;
+ }
+ if ($op & (SequenceMatcher::OP_DEL | SequenceMatcher::OP_REP)) {
+ $ret['deleted'] += $i2 - $i1;
+ }
+ }
+ }
+
+ $ret['unmodified'] = $this->oldSrcLength - $ret['deleted'];
+ $ret['changedRatio'] = 1 - ($ret['unmodified'] / $this->oldSrcLength);
+
+ return $ret;
+ }
+
+ /**
+ * Generate a list of the compiled and grouped opcodes for the differences between the
+ * two strings. Generally called by the renderer, this class instantiates the sequence
+ * matcher and performs the actual diff generation and return an array of the opcodes
+ * for it. Once generated, the results are cached in the Differ class instance.
+ *
+ * @return int[][][] array of the grouped opcodes for the generated diff
+ */
+ public function getGroupedOpcodes(): array
+ {
+ $this->finalize();
+
+ if (!empty($this->groupedOpcodes)) {
+ return $this->groupedOpcodes;
+ }
+
+ $old = $this->old;
+ $new = $this->new;
+ $this->getGroupedOpcodesPre($old, $new);
+
+ $opcodes = $this->sequenceMatcher
+ ->setSequences($old, $new)
+ ->getGroupedOpcodes($this->options['context']);
+
+ $this->getGroupedOpcodesPost($opcodes);
+
+ return $this->groupedOpcodes = $opcodes;
+ }
+
+ /**
+ * A EOL-at-EOF-sensitive version of getGroupedOpcodes().
+ *
+ * @return int[][][] array of the grouped opcodes for the generated diff (GNU version)
+ */
+ public function getGroupedOpcodesGnu(): array
+ {
+ $this->finalize();
+
+ if (!empty($this->groupedOpcodesGnu)) {
+ return $this->groupedOpcodesGnu;
+ }
+
+ $old = $this->old;
+ $new = $this->new;
+ $this->getGroupedOpcodesGnuPre($old, $new);
+
+ $opcodes = $this->sequenceMatcher
+ ->setSequences($old, $new)
+ ->getGroupedOpcodes($this->options['context']);
+
+ $this->getGroupedOpcodesGnuPost($opcodes);
+
+ return $this->groupedOpcodesGnu = $opcodes;
+ }
+
+ /**
+ * Triggered before getGroupedOpcodes(). May modify the $old and $new.
+ *
+ * @param string[] $old the old
+ * @param string[] $new the new
+ */
+ private function getGroupedOpcodesPre(array &$old, array &$new): void
+ {
+ // append these lines to make sure the last block of the diff result is OP_EQ
+ static $eolAtEofHelperLines = [
+ SequenceMatcher::APPENDED_HELPER_LINE,
+ SequenceMatcher::APPENDED_HELPER_LINE,
+ SequenceMatcher::APPENDED_HELPER_LINE,
+ SequenceMatcher::APPENDED_HELPER_LINE,
+ ];
+
+ $this->oldSrcLength = \count($old);
+ \array_push($old, ...$eolAtEofHelperLines);
+
+ $this->newSrcLength = \count($new);
+ \array_push($new, ...$eolAtEofHelperLines);
+ }
+
+ /**
+ * Triggered after getGroupedOpcodes(). May modify the $opcodes.
+ *
+ * @param int[][][] $opcodes the opcodes
+ */
+ private function getGroupedOpcodesPost(array &$opcodes): void
+ {
+ // remove those extra lines cause by adding extra SequenceMatcher::APPENDED_HELPER_LINE lines
+ foreach ($opcodes as $hunkIdx => &$hunk) {
+ foreach ($hunk as $blockIdx => &$block) {
+ // range overflow
+ if ($block[1] > $this->oldSrcLength) {
+ $block[1] = $this->oldSrcLength;
+ }
+ if ($block[2] > $this->oldSrcLength) {
+ $block[2] = $this->oldSrcLength;
+ }
+ if ($block[3] > $this->newSrcLength) {
+ $block[3] = $this->newSrcLength;
+ }
+ if ($block[4] > $this->newSrcLength) {
+ $block[4] = $this->newSrcLength;
+ }
+
+ // useless extra block?
+ /** @phan-suppress-next-line PhanTypePossiblyInvalidDimOffset */
+ if ($block[1] === $block[2] && $block[3] === $block[4]) {
+ unset($hunk[$blockIdx]);
+ }
+ }
+
+ if (empty($hunk)) {
+ unset($opcodes[$hunkIdx]);
+ }
+ }
+ }
+
+ /**
+ * Triggered before getGroupedOpcodesGnu(). May modify the $old and $new.
+ *
+ * @param string[] $old the old
+ * @param string[] $new the new
+ */
+ private function getGroupedOpcodesGnuPre(array &$old, array &$new): void
+ {
+ /**
+ * Make the lines to be prepared for GNU-style diff.
+ *
+ * This method checks whether $lines has no EOL at EOF and append a special
+ * indicator to the last line.
+ *
+ * @param string[] $lines the lines created by simply explode("\n", $string)
+ */
+ $createGnuCompatibleLines = static function (array $lines): array {
+ // note that the $lines should not be empty at this point
+ // they have at least one element "" in the array because explode("\n", "") === [""]
+ $lastLineIdx = \count($lines) - 1;
+ $lastLine = &$lines[$lastLineIdx];
+
+ if ($lastLine === '') {
+ // remove the last plain "" line since we don't need it anymore
+ // use array_slice() to also reset the array index
+ $lines = \array_slice($lines, 0, -1);
+ } else {
+ // this means the original source has no EOL at EOF
+ // we append a special indicator to that line so it no longer matches
+ $lastLine .= self::LINE_NO_EOL;
+ }
+
+ return $lines;
+ };
+
+ $old = $createGnuCompatibleLines($old);
+ $new = $createGnuCompatibleLines($new);
+
+ $this->getGroupedOpcodesPre($old, $new);
+ }
+
+ /**
+ * Triggered after getGroupedOpcodesGnu(). May modify the $opcodes.
+ *
+ * @param int[][][] $opcodes the opcodes
+ */
+ private function getGroupedOpcodesGnuPost(array &$opcodes): void
+ {
+ $this->getGroupedOpcodesPost($opcodes);
+ }
+
+ /**
+ * Claim this class has settled down and we could calculate cached
+ * properties by current properties.
+ *
+ * This method must be called before accessing cached properties to
+ * make suer that you will not get a outdated cached value.
+ *
+ * @internal
+ */
+ private function finalize(): self
+ {
+ if ($this->isCacheDirty) {
+ $this->resetCachedResults();
+
+ $this->oldNoEolAtEofIdx = $this->getOld(-1) === [''] ? -1 : \count($this->old);
+ $this->newNoEolAtEofIdx = $this->getNew(-1) === [''] ? -1 : \count($this->new);
+ $this->oldNewComparison = $this->old <=> $this->new;
+
+ $this->sequenceMatcher->setOptions($this->options);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Reset cached results.
+ */
+ private function resetCachedResults(): self
+ {
+ foreach (static::CACHED_PROPERTIES as $property => $value) {
+ $this->{$property} = $value;
+ }
+
+ $this->isCacheDirty = false;
+
+ return $this;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Exception/FileNotFoundException.php b/vendor/jfcherng/php-diff/src/Exception/FileNotFoundException.php
new file mode 100644
index 0000000..9a9ed8f
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Exception/FileNotFoundException.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Exception;
+
+final class FileNotFoundException extends \Exception
+{
+ public function __construct(string $filepath = '', int $code = 0, \Throwable $previous = null)
+ {
+ parent::__construct("File not found: {$filepath}", $code, $previous);
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Exception/UnsupportedFunctionException.php b/vendor/jfcherng/php-diff/src/Exception/UnsupportedFunctionException.php
new file mode 100644
index 0000000..e2d4fed
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Exception/UnsupportedFunctionException.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Exception;
+
+final class UnsupportedFunctionException extends \Exception
+{
+ public function __construct(string $funcName = '', int $code = 0, \Throwable $previous = null)
+ {
+ parent::__construct("Unsupported function: {$funcName}", $code, $previous);
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Factory/LineRendererFactory.php b/vendor/jfcherng/php-diff/src/Factory/LineRendererFactory.php
new file mode 100644
index 0000000..de7438c
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Factory/LineRendererFactory.php
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Factory;
+
+use Jfcherng\Diff\Renderer\Html\LineRenderer\AbstractLineRenderer;
+use Jfcherng\Diff\Renderer\RendererConstant;
+
+final class LineRendererFactory
+{
+ /**
+ * Instances of line renderers.
+ *
+ * @var AbstractLineRenderer[]
+ */
+ private static $singletons = [];
+
+ /**
+ * The constructor.
+ */
+ private function __construct()
+ {
+ }
+
+ /**
+ * Get the singleton of a line renderer.
+ *
+ * @param string $type the type
+ * @param mixed ...$ctorArgs the constructor arguments
+ */
+ public static function getInstance(string $type, ...$ctorArgs): AbstractLineRenderer
+ {
+ if (!isset(self::$singletons[$type])) {
+ self::$singletons[$type] = self::make($type, ...$ctorArgs);
+ }
+
+ return self::$singletons[$type];
+ }
+
+ /**
+ * Make a new instance of a line renderer.
+ *
+ * @param string $type the type
+ * @param mixed ...$ctorArgs the constructor arguments
+ *
+ * @throws \InvalidArgumentException
+ */
+ public static function make(string $type, ...$ctorArgs): AbstractLineRenderer
+ {
+ $className = RendererConstant::RENDERER_NAMESPACE . '\\Html\\LineRenderer\\' . \ucfirst($type);
+
+ if (!\class_exists($className)) {
+ throw new \InvalidArgumentException("LineRenderer not found: {$type}");
+ }
+
+ return new $className(...$ctorArgs);
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Factory/RendererFactory.php b/vendor/jfcherng/php-diff/src/Factory/RendererFactory.php
new file mode 100644
index 0000000..7f1b1d1
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Factory/RendererFactory.php
@@ -0,0 +1,83 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Factory;
+
+use Jfcherng\Diff\Renderer\AbstractRenderer;
+use Jfcherng\Diff\Renderer\RendererConstant;
+
+final class RendererFactory
+{
+ /**
+ * Instances of renderers.
+ *
+ * @var AbstractRenderer[]
+ */
+ private static $singletons = [];
+
+ /**
+ * The constructor.
+ */
+ private function __construct()
+ {
+ }
+
+ /**
+ * Get the singleton of a renderer.
+ *
+ * @param string $renderer the renderer
+ * @param mixed ...$ctorArgs the constructor arguments
+ */
+ public static function getInstance(string $renderer, ...$ctorArgs): AbstractRenderer
+ {
+ if (!isset(self::$singletons[$renderer])) {
+ self::$singletons[$renderer] = self::make($renderer, ...$ctorArgs);
+ }
+
+ return self::$singletons[$renderer];
+ }
+
+ /**
+ * Make a new instance of a renderer.
+ *
+ * @param string $renderer the renderer
+ * @param mixed ...$ctorArgs the constructor arguments
+ *
+ * @throws \InvalidArgumentException
+ */
+ public static function make(string $renderer, ...$ctorArgs): AbstractRenderer
+ {
+ $className = self::resolveRenderer($renderer);
+
+ if (!isset($className)) {
+ throw new \InvalidArgumentException("Renderer not found: {$renderer}");
+ }
+
+ return new $className(...$ctorArgs);
+ }
+
+ /**
+ * Resolve the renderer name into a FQCN.
+ *
+ * @param string $renderer the renderer
+ */
+ public static function resolveRenderer(string $renderer): ?string
+ {
+ static $cache = [];
+
+ if (isset($cache[$renderer])) {
+ return $cache[$renderer];
+ }
+
+ foreach (RendererConstant::RENDERER_TYPES as $type) {
+ $className = RendererConstant::RENDERER_NAMESPACE . "\\{$type}\\{$renderer}";
+
+ if (\class_exists($className)) {
+ return $cache[$renderer] = $className;
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/AbstractRenderer.php b/vendor/jfcherng/php-diff/src/Renderer/AbstractRenderer.php
new file mode 100644
index 0000000..953cb9a
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/AbstractRenderer.php
@@ -0,0 +1,246 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer;
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\SequenceMatcher;
+use Jfcherng\Diff\Utility\Language;
+
+/**
+ * Base class for diff renderers.
+ */
+abstract class AbstractRenderer implements RendererInterface
+{
+ /**
+ * @var array information about this renderer
+ */
+ public const INFO = [
+ 'desc' => 'default_desc',
+ 'type' => 'default_type',
+ ];
+
+ /**
+ * @var bool Is this renderer pure text?
+ */
+ public const IS_TEXT_RENDERER = true;
+
+ /**
+ * @var string[] array of the opcodes and their corresponding symbols
+ */
+ public const SYMBOL_MAP = [
+ SequenceMatcher::OP_DEL => '-',
+ SequenceMatcher::OP_EQ => ' ',
+ SequenceMatcher::OP_INS => '+',
+ SequenceMatcher::OP_REP => '!',
+ ];
+
+ /**
+ * @var Language the language translation object
+ */
+ protected $t;
+
+ /**
+ * If the input "changes" have `<ins>...</ins>` or `<del>...</del>`,
+ * which means they have been processed, then `false`. Otherwise, `true`.
+ *
+ * @var bool
+ */
+ protected $changesAreRaw = true;
+
+ /**
+ * @var array array of the default options that apply to this renderer
+ */
+ protected static $defaultOptions = [
+ // how detailed the rendered HTML in-line diff is? (none, line, word, char)
+ 'detailLevel' => 'line',
+ // renderer language: eng, cht, chs, jpn, ...
+ // or an array which has the same keys with a language file
+ // check the "Custom Language" section in the readme for more advanced usage
+ 'language' => 'eng',
+ // show line numbers in HTML renderers
+ 'lineNumbers' => true,
+ // show a separator between different diff hunks in HTML renderers
+ 'separateBlock' => true,
+ // show the (table) header
+ 'showHeader' => true,
+ // convert spaces/tabs into HTML codes like `<span class="ch sp"> </span>`
+ // and the frontend is responsible for rendering them with CSS.
+ // when using this, "spacesToNbsp" should be false and "tabSize" is not respected.
+ 'spaceToHtmlTag' => false,
+ // the frontend HTML could use CSS "white-space: pre;" to visualize consecutive whitespaces
+ // but if you want to visualize them in the backend with "&nbsp;", you can set this to true
+ 'spacesToNbsp' => false,
+ // HTML renderer tab width (negative = do not convert into spaces)
+ 'tabSize' => 4,
+ // this option is currently only for the Combined renderer.
+ // it determines whether a replace-type block should be merged or not
+ // depending on the content changed ratio, which values between 0 and 1.
+ 'mergeThreshold' => 0.8,
+ // this option is currently only for the Unified and the Context renderers.
+ // RendererConstant::CLI_COLOR_AUTO = colorize the output if possible (default)
+ // RendererConstant::CLI_COLOR_ENABLE = force to colorize the output
+ // RendererConstant::CLI_COLOR_DISABLE = force not to colorize the output
+ 'cliColorization' => RendererConstant::CLI_COLOR_AUTO,
+ // this option is currently only for the Json renderer.
+ // internally, ops (tags) are all int type but this is not good for human reading.
+ // set this to "true" to convert them into string form before outputting.
+ 'outputTagAsString' => false,
+ // this option is currently only for the Json renderer.
+ // it controls how the output JSON is formatted.
+ // see availabe options on https://www.php.net/manual/en/function.json-encode.php
+ 'jsonEncodeFlags' => \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE,
+ // this option is currently effective when the "detailLevel" is "word"
+ // characters listed in this array can be used to make diff segments into a whole
+ // for example, making "<del>good</del>-<del>looking</del>" into "<del>good-looking</del>"
+ // this should bring better readability but set this to empty array if you do not want it
+ 'wordGlues' => ['-', ' '],
+ // change this value to a string as the returned diff if the two input strings are identical
+ 'resultForIdenticals' => null,
+ // extra HTML classes added to the DOM of the diff container
+ 'wrapperClasses' => ['diff-wrapper'],
+ ];
+
+ /**
+ * @var array array containing the user applied and merged default options for the renderer
+ */
+ protected $options = [];
+
+ /**
+ * The constructor. Instantiates the rendering engine and if options are passed,
+ * sets the options for the renderer.
+ *
+ * @param array $options optionally, an array of the options for the renderer
+ */
+ public function __construct(array $options = [])
+ {
+ $this->setOptions($options);
+ }
+
+ /**
+ * Set the options of the renderer to those supplied in the passed in array.
+ * Options are merged with the default to ensure that there aren't any missing
+ * options.
+ *
+ * @param array $options the options
+ *
+ * @return static
+ */
+ public function setOptions(array $options): self
+ {
+ $newOptions = $options + static::$defaultOptions;
+
+ $this->updateLanguage(
+ $this->options['language'] ?? '',
+ $newOptions['language']
+ );
+
+ $this->options = $newOptions;
+
+ return $this;
+ }
+
+ /**
+ * Get the options.
+ *
+ * @return array the options
+ */
+ public function getOptions(): array
+ {
+ return $this->options;
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @final
+ *
+ * @todo mark this method with "final" in the next major release
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getResultForIdenticals(): string
+ {
+ $custom = $this->options['resultForIdenticals'];
+
+ if (isset($custom) && !\is_string($custom)) {
+ throw new \InvalidArgumentException('renderer option `resultForIdenticals` must be null or string.');
+ }
+
+ return $custom ?? $this->getResultForIdenticalsDefault();
+ }
+
+ /**
+ * Get the renderer default result when the old and the new are the same.
+ */
+ abstract public function getResultForIdenticalsDefault(): string;
+
+ /**
+ * {@inheritdoc}
+ */
+ final public function render(Differ $differ): string
+ {
+ $this->changesAreRaw = true;
+ // the "no difference" situation may happen frequently
+ return $differ->getOldNewComparison() === 0
+ ? $this->getResultForIdenticals()
+ : $this->renderWorker($differ);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ final public function renderArray(array $differArray): string
+ {
+ $this->changesAreRaw = false;
+
+ return $this->renderArrayWorker($differArray);
+ }
+
+ /**
+ * The real worker for self::render().
+ *
+ * @param Differ $differ the differ object
+ */
+ abstract protected function renderWorker(Differ $differ): string;
+
+ /**
+ * The real worker for self::renderArray().
+ *
+ * @param array[][] $differArray the differ array
+ */
+ abstract protected function renderArrayWorker(array $differArray): string;
+
+ /**
+ * Update the Language object.
+ *
+ * @param string|string[] $old the old language
+ * @param string|string[] $new the new language
+ *
+ * @return static
+ */
+ protected function updateLanguage($old, $new): self
+ {
+ if (!isset($this->t) || $old !== $new) {
+ $this->t = new Language($new);
+ }
+
+ return $this;
+ }
+
+ /**
+ * A shorthand to do translation.
+ *
+ * @param string $text The text
+ * @param bool $escapeHtml Escape the translated text for HTML?
+ *
+ * @return string the translated text
+ */
+ protected function _(string $text, bool $escapeHtml = true): string
+ {
+ $text = $this->t->translate($text);
+
+ return $escapeHtml ? \htmlspecialchars($text) : $text;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/AbstractHtml.php b/vendor/jfcherng/php-diff/src/Renderer/Html/AbstractHtml.php
new file mode 100644
index 0000000..e4d1770
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/AbstractHtml.php
@@ -0,0 +1,379 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html;
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\Factory\LineRendererFactory;
+use Jfcherng\Diff\Renderer\AbstractRenderer;
+use Jfcherng\Diff\Renderer\Html\LineRenderer\AbstractLineRenderer;
+use Jfcherng\Diff\Renderer\RendererConstant;
+use Jfcherng\Diff\SequenceMatcher;
+use Jfcherng\Utility\MbString;
+
+/**
+ * Base renderer for rendering HTML-based diffs.
+ */
+abstract class AbstractHtml extends AbstractRenderer
+{
+ /**
+ * @var bool is this renderer pure text?
+ */
+ public const IS_TEXT_RENDERER = false;
+
+ /**
+ * @var string[] array of the different opcodes and how they are mapped to HTML classes
+ *
+ * @todo rename to OP_CLASS_MAP in v7
+ */
+ public const TAG_CLASS_MAP = [
+ SequenceMatcher::OP_DEL => 'del',
+ SequenceMatcher::OP_EQ => 'eq',
+ SequenceMatcher::OP_INS => 'ins',
+ SequenceMatcher::OP_REP => 'rep',
+ ];
+
+ /**
+ * Auto format the content in "changes" to be suitable for HTML output.
+ *
+ * This may not be a wanted behavior for some (custom) renderers
+ * if they want to do this by themselves in a later stage.
+ *
+ * @var bool
+ */
+ public const AUTO_FORMAT_CHANGES = true;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getResultForIdenticalsDefault(): string
+ {
+ return '';
+ }
+
+ /**
+ * Render and return an array structure suitable for generating HTML
+ * based differences. Generally called by subclasses that generate a
+ * HTML based diff and return an array of the changes to show in the diff.
+ *
+ * @param Differ $differ the differ object
+ *
+ * @return array[][] generated changes, suitable for presentation in HTML
+ */
+ public function getChanges(Differ $differ): array
+ {
+ $lineRenderer = LineRendererFactory::make(
+ $this->options['detailLevel'],
+ $differ->getOptions(),
+ $this->options
+ );
+
+ $old = $differ->getOld();
+ $new = $differ->getNew();
+
+ $changes = [];
+
+ foreach ($differ->getGroupedOpcodes() as $hunk) {
+ $change = [];
+
+ foreach ($hunk as [$op, $i1, $i2, $j1, $j2]) {
+ $change[] = $this->getDefaultBlock($op, $i1, $j1);
+ $block = &$change[\count($change) - 1];
+
+ // if there are same amount of lines replaced
+ // we can render the inner detailed changes with corresponding lines
+ // @todo or use LineRenderer to do the job regardless different line counts?
+ if ($op === SequenceMatcher::OP_REP && $i2 - $i1 === $j2 - $j1) {
+ for ($k = $i2 - $i1 - 1; $k >= 0; --$k) {
+ $this->renderChangedExtent($lineRenderer, $old[$i1 + $k], $new[$j1 + $k]);
+ }
+ }
+
+ $block['old']['lines'] = \array_slice($old, $i1, $i2 - $i1);
+ $block['new']['lines'] = \array_slice($new, $j1, $j2 - $j1);
+ }
+ unset($block);
+
+ $changes[] = $change;
+ }
+
+ if (static::AUTO_FORMAT_CHANGES) {
+ $this->formatChanges($changes);
+ }
+
+ return $changes;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function renderWorker(Differ $differ): string
+ {
+ $rendered = $this->redererChanges($this->getChanges($differ));
+
+ return $this->cleanUpDummyHtmlClosures($rendered);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function renderArrayWorker(array $differArray): string
+ {
+ $this->ensureChangesUseIntTag($differArray);
+
+ $rendered = $this->redererChanges($differArray);
+
+ return $this->cleanUpDummyHtmlClosures($rendered);
+ }
+
+ /**
+ * Render the array of changes.
+ *
+ * @param array[][] $changes the changes
+ *
+ * @todo rename typo to renderChanges() in v7
+ */
+ abstract protected function redererChanges(array $changes): string;
+
+ /**
+ * Renderer the changed extent.
+ *
+ * @param AbstractLineRenderer $lineRenderer the line renderer
+ * @param string $old the old line
+ * @param string $new the new line
+ */
+ protected function renderChangedExtent(AbstractLineRenderer $lineRenderer, string &$old, string &$new): void
+ {
+ static $mbOld, $mbNew;
+
+ $mbOld = $mbOld ?? new MbString();
+ $mbNew = $mbNew ?? new MbString();
+
+ $mbOld->set($old);
+ $mbNew->set($new);
+
+ $lineRenderer->render($mbOld, $mbNew);
+
+ $old = $mbOld->get();
+ $new = $mbNew->get();
+ }
+
+ /**
+ * Get the default block.
+ *
+ * @param int $op the operation
+ * @param int $i1 begin index of the diff of the old array
+ * @param int $j1 begin index of the diff of the new array
+ *
+ * @return array the default block
+ *
+ * @todo rename tag to op in v7
+ */
+ protected function getDefaultBlock(int $op, int $i1, int $j1): array
+ {
+ return [
+ 'tag' => $op,
+ 'old' => [
+ 'offset' => $i1,
+ 'lines' => [],
+ ],
+ 'new' => [
+ 'offset' => $j1,
+ 'lines' => [],
+ ],
+ ];
+ }
+
+ /**
+ * Make the content in "changes" suitable for HTML output.
+ *
+ * @param array[][] $changes the changes
+ */
+ final protected function formatChanges(array &$changes): void
+ {
+ foreach ($changes as &$hunk) {
+ foreach ($hunk as &$block) {
+ $block['old']['lines'] = $this->formatLines($block['old']['lines']);
+ $block['new']['lines'] = $this->formatLines($block['new']['lines']);
+
+ /** @phan-suppress-next-line PhanTypeInvalidLeftOperandOfBitwiseOp */
+ if ($block['tag'] & (SequenceMatcher::OP_REP | SequenceMatcher::OP_DEL)) {
+ $block['old']['lines'] = \str_replace(
+ RendererConstant::HTML_CLOSURES,
+ RendererConstant::HTML_CLOSURES_DEL,
+ $block['old']['lines']
+ );
+ }
+
+ /** @phan-suppress-next-line PhanTypeInvalidLeftOperandOfBitwiseOp */
+ if ($block['tag'] & (SequenceMatcher::OP_REP | SequenceMatcher::OP_INS)) {
+ $block['new']['lines'] = \str_replace(
+ RendererConstant::HTML_CLOSURES,
+ RendererConstant::HTML_CLOSURES_INS,
+ $block['new']['lines']
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * Make a series of lines suitable for outputting in a HTML rendered diff.
+ *
+ * @param string[] $lines array of lines to format
+ *
+ * @return string[] array of the formatted lines
+ */
+ protected function formatLines(array $lines): array
+ {
+ /**
+ * To prevent from invoking the same function calls for several times,
+ * we can glue lines into a string and call functions for one time.
+ * After that, we split the string back into lines.
+ */
+ return \explode(
+ RendererConstant::IMPLODE_DELIMITER,
+ $this->formatStringFromLines(
+ \implode(
+ RendererConstant::IMPLODE_DELIMITER,
+ $lines
+ )
+ )
+ );
+ }
+
+ /**
+ * Make a string suitable for outputting in a HTML rendered diff.
+ *
+ * This my involve replacing tab characters with spaces, making the HTML safe
+ * for output, ensuring that double spaces are replaced with &nbsp; etc.
+ *
+ * @param string $string the string of imploded lines
+ *
+ * @return string the formatted string
+ */
+ protected function formatStringFromLines(string $string): string
+ {
+ if (!$this->options['spaceToHtmlTag']) {
+ $string = $this->expandTabs($string, $this->options['tabSize']);
+ }
+
+ $string = $this->htmlSafe($string);
+
+ if ($this->options['spacesToNbsp']) {
+ $string = $this->htmlFixSpaces($string);
+ }
+
+ if ($this->options['spaceToHtmlTag']) {
+ $string = $this->htmlReplaceSpacesToHtmlTag($string);
+ }
+
+ return $string;
+ }
+
+ /**
+ * Replace tabs in a string with a number of spaces.
+ *
+ * @param string $string the input string which may contain tabs
+ * @param int $tabSize one tab = how many spaces, a negative does nothing
+ * @param bool $onlyLeadingTabs only expand leading tabs
+ *
+ * @return string the string with the tabs converted to spaces
+ */
+ protected function expandTabs(string $string, int $tabSize = 4, bool $onlyLeadingTabs = false): string
+ {
+ if ($tabSize < 0) {
+ return $string;
+ }
+
+ if ($onlyLeadingTabs) {
+ return \preg_replace_callback(
+ "/^[ \t]{1,}/mS", // tabs and spaces may be mixed
+ function (array $matches) use ($tabSize): string {
+ return \str_replace("\t", \str_repeat(' ', $tabSize), $matches[0]);
+ },
+ $string
+ );
+ }
+
+ return \str_replace("\t", \str_repeat(' ', $tabSize), $string);
+ }
+
+ /**
+ * Make a string containing HTML safe for output on a page.
+ *
+ * @param string $string the string
+ *
+ * @return string the string with the HTML characters replaced by entities
+ */
+ protected function htmlSafe(string $string): string
+ {
+ return \htmlspecialchars($string, \ENT_NOQUOTES, 'UTF-8');
+ }
+
+ /**
+ * Replace a string containing spaces with a HTML representation having "&nbsp;".
+ *
+ * @param string $string the string of spaces
+ *
+ * @return string the HTML representation of the string
+ */
+ protected function htmlFixSpaces(string $string): string
+ {
+ return \str_replace(' ', '&nbsp;', $string);
+ }
+
+ /**
+ * Replace spaces/tabs with HTML tags, which may be styled in frontend with CSS.
+ *
+ * @param string $string the string of spaces
+ *
+ * @return string the HTML representation of the string
+ */
+ protected function htmlReplaceSpacesToHtmlTag(string $string): string
+ {
+ return \strtr($string, [
+ ' ' => '<span class="ch sp"> </span>',
+ "\t" => "<span class=\"ch tab\">\t</span>",
+ ]);
+ }
+
+ /**
+ * Make sure the "changes" array uses int "tag".
+ *
+ * Internally, we would like always int form for better performance.
+ *
+ * @param array[][] $changes the changes
+ */
+ protected function ensureChangesUseIntTag(array &$changes): void
+ {
+ // check if the tag is already int type
+ if (\is_int($changes[0][0]['tag'] ?? null)) {
+ return;
+ }
+
+ foreach ($changes as &$hunks) {
+ foreach ($hunks as &$block) {
+ $block['tag'] = SequenceMatcher::opStrToInt($block['tag']);
+ }
+ }
+ }
+
+ /**
+ * Clean up empty HTML closures in the given string.
+ *
+ * @param string $string the string
+ */
+ protected function cleanUpDummyHtmlClosures(string $string): string
+ {
+ return \str_replace(
+ [
+ RendererConstant::HTML_CLOSURES_DEL[0] . RendererConstant::HTML_CLOSURES_DEL[1],
+ RendererConstant::HTML_CLOSURES_INS[0] . RendererConstant::HTML_CLOSURES_INS[1],
+ ],
+ '',
+ $string
+ );
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/Combined.php b/vendor/jfcherng/php-diff/src/Renderer/Html/Combined.php
new file mode 100644
index 0000000..3909abf
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/Combined.php
@@ -0,0 +1,516 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html;
+
+use Jfcherng\Diff\Factory\LineRendererFactory;
+use Jfcherng\Diff\Renderer\RendererConstant;
+use Jfcherng\Diff\SequenceMatcher;
+use Jfcherng\Diff\Utility\ReverseIterator;
+use Jfcherng\Utility\MbString;
+
+/**
+ * Combined HTML diff generator.
+ *
+ * Note that this renderer always has no line number.
+ */
+final class Combined extends AbstractHtml
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'Combined',
+ 'type' => 'Html',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ public const AUTO_FORMAT_CHANGES = false;
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function redererChanges(array $changes): string
+ {
+ if (empty($changes)) {
+ return $this->getResultForIdenticals();
+ }
+
+ $wrapperClasses = \array_merge(
+ $this->options['wrapperClasses'],
+ ['diff', 'diff-html', 'diff-combined']
+ );
+
+ return
+ '<table class="' . \implode(' ', $wrapperClasses) . '">' .
+ $this->renderTableHeader() .
+ $this->renderTableHunks($changes) .
+ '</table>';
+ }
+
+ /**
+ * Renderer the table header.
+ */
+ protected function renderTableHeader(): string
+ {
+ if (!$this->options['showHeader']) {
+ return '';
+ }
+
+ return
+ '<thead>' .
+ '<tr>' .
+ '<th>' . $this->_('differences') . '</th>' .
+ '</tr>' .
+ '</thead>';
+ }
+
+ /**
+ * Renderer the table separate block.
+ */
+ protected function renderTableSeparateBlock(): string
+ {
+ return
+ '<tbody class="skipped">' .
+ '<tr>' .
+ '<td></td>' .
+ '</tr>' .
+ '</tbody>';
+ }
+
+ /**
+ * Renderer table hunks.
+ *
+ * @param array[][] $hunks each hunk has many blocks
+ */
+ protected function renderTableHunks(array $hunks): string
+ {
+ $ret = '';
+
+ foreach ($hunks as $i => $hunk) {
+ if ($i > 0 && $this->options['separateBlock']) {
+ $ret .= $this->renderTableSeparateBlock();
+ }
+
+ foreach ($hunk as $block) {
+ $ret .= $this->renderTableBlock($block);
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlock(array $block): string
+ {
+ switch ($block['tag']) {
+ case SequenceMatcher::OP_EQ:
+ $content = $this->renderTableBlockEqual($block);
+ break;
+ case SequenceMatcher::OP_INS:
+ $content = $this->renderTableBlockInsert($block);
+ break;
+ case SequenceMatcher::OP_DEL:
+ $content = $this->renderTableBlockDelete($block);
+ break;
+ case SequenceMatcher::OP_REP:
+ $content = $this->renderTableBlockReplace($block);
+ break;
+ default:
+ $content = '';
+ }
+
+ return '<tbody class="change change-' . self::TAG_CLASS_MAP[$block['tag']] . '">' . $content . '</tbody>';
+ }
+
+ /**
+ * Renderer the table block: equal.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockEqual(array $block): string
+ {
+ $block['new']['lines'] = $this->customFormatLines(
+ $block['new']['lines'],
+ SequenceMatcher::OP_EQ
+ );
+
+ $ret = '';
+
+ // note that although we are in a OP_EQ situation,
+ // the old and the new may not be exactly the same
+ // because of ignoreCase, ignoreWhitespace, etc
+ foreach ($block['new']['lines'] as $newLine) {
+ // we could only pick either the old or the new to show
+ // here we pick the new one to let the user know what it is now
+ $ret .= $this->renderTableRow('new', SequenceMatcher::OP_EQ, $newLine);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: insert.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockInsert(array $block): string
+ {
+ $block['new']['lines'] = $this->customFormatLines(
+ $block['new']['lines'],
+ SequenceMatcher::OP_INS
+ );
+
+ $ret = '';
+
+ foreach ($block['new']['lines'] as $newLine) {
+ $ret .= $this->renderTableRow('new', SequenceMatcher::OP_INS, $newLine);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: delete.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockDelete(array $block): string
+ {
+ $block['old']['lines'] = $this->customFormatLines(
+ $block['old']['lines'],
+ SequenceMatcher::OP_DEL
+ );
+
+ $ret = '';
+
+ foreach ($block['old']['lines'] as $oldLine) {
+ $ret .= $this->renderTableRow('old', SequenceMatcher::OP_DEL, $oldLine);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: replace.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockReplace(array $block): string
+ {
+ if ($this->options['detailLevel'] === 'none') {
+ return
+ $this->renderTableBlockDelete($block) .
+ $this->renderTableBlockInsert($block);
+ }
+
+ $ret = '';
+
+ $oldLines = $block['old']['lines'];
+ $newLines = $block['new']['lines'];
+
+ $oldLinesCount = \count($oldLines);
+ $newLinesCount = \count($newLines);
+
+ // if the line counts changes, we treat the old and the new as
+ // "a line with \n in it" and then do one-line-to-one-line diff
+ if ($oldLinesCount !== $newLinesCount) {
+ [$oldLines, $newLines] = $this->markReplaceBlockDiff($oldLines, $newLines);
+ $oldLinesCount = $newLinesCount = 1;
+ }
+
+ $oldLines = $this->customFormatLines($oldLines, SequenceMatcher::OP_DEL);
+ $newLines = $this->customFormatLines($newLines, SequenceMatcher::OP_INS);
+
+ // now $oldLines must has the same line counts with $newlines
+ for ($no = 0; $no < $newLinesCount; ++$no) {
+ $mergedLine = $this->mergeReplaceLines($oldLines[$no], $newLines[$no]);
+
+ // not merge-able, we fall back to separated form
+ if (!isset($mergedLine)) {
+ $ret .=
+ $this->renderTableBlockDelete($block) .
+ $this->renderTableBlockInsert($block);
+
+ break;
+ }
+
+ $ret .= $this->renderTableRow('rep', SequenceMatcher::OP_REP, $mergedLine);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer a content row of the output table.
+ *
+ * @param string $tdClass the <td> class
+ * @param int $op the operation
+ * @param string $line the line
+ */
+ protected function renderTableRow(string $tdClass, int $op, string $line): string
+ {
+ return
+ '<tr data-type="' . self::SYMBOL_MAP[$op] . '">' .
+ '<td class="' . $tdClass . '">' . $line . '</td>' .
+ '</tr>';
+ }
+
+ /**
+ * Merge two "replace"-type lines into a single line.
+ *
+ * The implementation concept is that if we remove all closure parts from
+ * the old and the new, the rest of them (cleaned line) should be the same.
+ * And then, we add back those removed closure parts in a correct order.
+ *
+ * @param string $oldLine the old line
+ * @param string $newLine the new line
+ *
+ * @return null|string string if merge-able, null otherwise
+ */
+ protected function mergeReplaceLines(string $oldLine, string $newLine): ?string
+ {
+ $delParts = $this->analyzeClosureParts(
+ $oldLine,
+ RendererConstant::HTML_CLOSURES_DEL,
+ SequenceMatcher::OP_DEL
+ );
+ $insParts = $this->analyzeClosureParts(
+ $newLine,
+ RendererConstant::HTML_CLOSURES_INS,
+ SequenceMatcher::OP_INS
+ );
+
+ // get the cleaned line by a non-regex way (should be faster)
+ // i.e., the new line with all "<ins>...</ins>" parts removed
+ $mergedLine = $newLine;
+ foreach (ReverseIterator::fromArray($insParts) as $part) {
+ $mergedLine = \substr_replace(
+ $mergedLine,
+ '', // deletion
+ $part['offset'],
+ \strlen($part['content'])
+ );
+ }
+
+ // note that $mergedLine is actually a clean line at this point
+ if (!$this->isLinesMergeable($oldLine, $newLine, $mergedLine)) {
+ return null;
+ }
+
+ // before building the $mergedParts, we do some adjustments
+ $this->revisePartsForBoundaryNewlines($delParts, RendererConstant::HTML_CLOSURES_DEL);
+ $this->revisePartsForBoundaryNewlines($insParts, RendererConstant::HTML_CLOSURES_INS);
+
+ // create a sorted merged parts array
+ $mergedParts = \array_merge($delParts, $insParts);
+ \usort($mergedParts, function (array $a, array $b): int {
+ // first sort by "offsetClean", "order" then by "type"
+ return $a['offsetClean'] <=> $b['offsetClean']
+ ?: $a['order'] <=> $b['order']
+ ?: ($a['type'] === SequenceMatcher::OP_DEL ? -1 : 1);
+ });
+
+ // insert merged parts into the cleaned line
+ foreach (ReverseIterator::fromArray($mergedParts) as $part) {
+ $mergedLine = \substr_replace(
+ $mergedLine,
+ $part['content'],
+ $part['offsetClean'],
+ 0 // insertion
+ );
+ }
+
+ return \str_replace("\n", '<br>', $mergedLine);
+ }
+
+ /**
+ * Analyze and get the closure parts information of the line.
+ *
+ * Such as
+ * extract informations for "<ins>part 1</ins>" and "<ins>part 2</ins>"
+ * from "Hello <ins>part 1</ins>SOME OTHER TEXT<ins>part 2</ins> World"
+ *
+ * @param string $line the line
+ * @param string[] $closures the closures
+ * @param int $type the type
+ *
+ * @return array[] the closure informations
+ */
+ protected function analyzeClosureParts(string $line, array $closures, int $type): array
+ {
+ [$ld, $rd] = $closures;
+
+ $ldLength = \strlen($ld);
+ $rdLength = \strlen($rd);
+
+ $parts = [];
+ $partStart = $partEnd = 0;
+ $partLengthSum = 0;
+
+ // find the next left delimiter
+ while (false !== ($partStart = \strpos($line, $ld, $partEnd))) {
+ // find the corresponding right delimiter
+ if (false === ($partEnd = \strpos($line, $rd, $partStart + $ldLength))) {
+ break;
+ }
+
+ $partEnd += $rdLength;
+ $partLength = $partEnd - $partStart;
+
+ $parts[] = [
+ 'type' => $type,
+ // the sorting order used when both "offsetClean" are the same
+ 'order' => 0,
+ // the offset in the line
+ 'offset' => $partStart,
+ // the offset in the cleaned line (i.e., the line with closure parts removed)
+ 'offsetClean' => $partStart - $partLengthSum,
+ // the content of the part
+ 'content' => \substr($line, $partStart, $partLength),
+ ];
+
+ $partLengthSum += $partLength;
+ }
+
+ return $parts;
+ }
+
+ /**
+ * Mark differences between two "replace" blocks.
+ *
+ * Each of the returned block (lines) is always only one line.
+ *
+ * @param string[] $oldBlock The old block
+ * @param string[] $newBlock The new block
+ *
+ * @return string[][] the value of [[$oldLine], [$newLine]]
+ */
+ protected function markReplaceBlockDiff(array $oldBlock, array $newBlock): array
+ {
+ static $mbOld, $mbNew, $lineRenderer;
+
+ $mbOld = $mbOld ?? new MbString();
+ $mbNew = $mbNew ?? new MbString();
+ $lineRenderer = $lineRenderer ?? LineRendererFactory::make(
+ $this->options['detailLevel'],
+ [], /** @todo is it possible to get the differOptions here? */
+ $this->options
+ );
+
+ $mbOld->set(\implode("\n", $oldBlock));
+ $mbNew->set(\implode("\n", $newBlock));
+
+ $lineRenderer->render($mbOld, $mbNew);
+
+ return [
+ [$mbOld->get()], // one-line block for the old
+ [$mbNew->get()], // one-line block for the new
+ ];
+ }
+
+ /**
+ * Determine whether the "replace"-type lines are merge-able or not.
+ *
+ * @param string $oldLine the old line
+ * @param string $newLine the new line
+ * @param string $cleanLine the clean line
+ */
+ protected function isLinesMergeable(string $oldLine, string $newLine, string $cleanLine): bool
+ {
+ $oldLine = \str_replace(RendererConstant::HTML_CLOSURES_DEL, '', $oldLine);
+ $newLine = \str_replace(RendererConstant::HTML_CLOSURES_INS, '', $newLine);
+
+ $sumLength = \strlen($oldLine) + \strlen($newLine);
+
+ /** @var float the changed ratio, 0 <= value < 1 */
+ $changedRatio = ($sumLength - (\strlen($cleanLine) << 1)) / ($sumLength + 1);
+
+ return $changedRatio <= $this->options['mergeThreshold'];
+ }
+
+ /**
+ * Extract boundary newlines from parts into new parts.
+ *
+ * @param array[] $parts the parts
+ * @param string[] $closures the closures
+ *
+ * @see https://git.io/JvVXH
+ */
+ protected function revisePartsForBoundaryNewlines(array &$parts, array $closures): void
+ {
+ [$ld, $rd] = $closures;
+
+ $ldRegex = \preg_quote($ld, '/');
+ $rdRegex = \preg_quote($rd, '/');
+
+ for ($i = \count($parts) - 1; $i >= 0; --$i) {
+ $part = &$parts[$i];
+
+ // deal with leading newlines
+ $part['content'] = \preg_replace_callback(
+ "/(?P<closure>{$ldRegex})(?P<nl>[\r\n]++)/u",
+ function (array $matches) use (&$parts, $part, $ld, $rd): string {
+ // add a new part for the extracted newlines
+ $part['order'] = -1;
+ $part['content'] = "{$ld}{$matches['nl']}{$rd}";
+ $parts[] = $part;
+
+ return $matches['closure'];
+ },
+ $part['content']
+ );
+
+ // deal with trailing newlines
+ $part['content'] = \preg_replace_callback(
+ "/(?P<nl>[\r\n]++)(?P<closure>{$rdRegex})/u",
+ function (array $matches) use (&$parts, $part, $ld, $rd): string {
+ // add a new part for the extracted newlines
+ $part['order'] = 1;
+ $part['content'] = "{$ld}{$matches['nl']}{$rd}";
+ $parts[] = $part;
+
+ return $matches['closure'];
+ },
+ $part['content']
+ );
+ }
+ }
+
+ /**
+ * Make lines suitable for HTML output.
+ *
+ * @param string[] $lines the lines
+ * @param int $op the operation
+ */
+ protected function customFormatLines(array $lines, int $op): array
+ {
+ if (!$this->changesAreRaw) {
+ return $lines;
+ }
+
+ static $closureMap = [
+ SequenceMatcher::OP_DEL => RendererConstant::HTML_CLOSURES_DEL,
+ SequenceMatcher::OP_INS => RendererConstant::HTML_CLOSURES_INS,
+ ];
+
+ $lines = $this->formatLines($lines);
+
+ $htmlClosures = $closureMap[$op] ?? null;
+
+ foreach ($lines as &$line) {
+ if ($htmlClosures) {
+ $line = \str_replace(RendererConstant::HTML_CLOSURES, $htmlClosures, $line);
+ }
+ }
+
+ return $lines;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/Inline.php b/vendor/jfcherng/php-diff/src/Renderer/Html/Inline.php
new file mode 100644
index 0000000..7247879
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/Inline.php
@@ -0,0 +1,266 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html;
+
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * Inline HTML diff generator.
+ */
+final class Inline extends AbstractHtml
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'Inline',
+ 'type' => 'Html',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function redererChanges(array $changes): string
+ {
+ if (empty($changes)) {
+ return $this->getResultForIdenticals();
+ }
+
+ $wrapperClasses = \array_merge(
+ $this->options['wrapperClasses'],
+ ['diff', 'diff-html', 'diff-inline']
+ );
+
+ return
+ '<table class="' . \implode(' ', $wrapperClasses) . '">' .
+ $this->renderTableHeader() .
+ $this->renderTableHunks($changes) .
+ '</table>';
+ }
+
+ /**
+ * Renderer the table header.
+ */
+ protected function renderTableHeader(): string
+ {
+ if (!$this->options['showHeader']) {
+ return '';
+ }
+
+ $colspan = $this->options['lineNumbers'] ? '' : ' colspan="2"';
+
+ return
+ '<thead>' .
+ '<tr>' .
+ (
+ $this->options['lineNumbers']
+ ?
+ '<th>' . $this->_('old_version') . '</th>' .
+ '<th>' . $this->_('new_version') . '</th>' .
+ '<th></th>' // diff symbol column
+ :
+ ''
+ ) .
+ '<th' . $colspan . '>' . $this->_('differences') . '</th>' .
+ '</tr>' .
+ '</thead>';
+ }
+
+ /**
+ * Renderer the table separate block.
+ */
+ protected function renderTableSeparateBlock(): string
+ {
+ $colspan = $this->options['lineNumbers'] ? '4' : '2';
+
+ return
+ '<tbody class="skipped">' .
+ '<tr>' .
+ '<td colspan="' . $colspan . '"></td>' .
+ '</tr>' .
+ '</tbody>';
+ }
+
+ /**
+ * Renderer table hunks.
+ *
+ * @param array[][] $hunks each hunk has many blocks
+ */
+ protected function renderTableHunks(array $hunks): string
+ {
+ $ret = '';
+
+ foreach ($hunks as $i => $hunk) {
+ if ($i > 0 && $this->options['separateBlock']) {
+ $ret .= $this->renderTableSeparateBlock();
+ }
+
+ foreach ($hunk as $block) {
+ $ret .= $this->renderTableBlock($block);
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlock(array $block): string
+ {
+ switch ($block['tag']) {
+ case SequenceMatcher::OP_EQ:
+ $content = $this->renderTableBlockEqual($block);
+ break;
+ case SequenceMatcher::OP_INS:
+ $content = $this->renderTableBlockInsert($block);
+ break;
+ case SequenceMatcher::OP_DEL:
+ $content = $this->renderTableBlockDelete($block);
+ break;
+ case SequenceMatcher::OP_REP:
+ $content = $this->renderTableBlockReplace($block);
+ break;
+ default:
+ $content = '';
+ }
+
+ return '<tbody class="change change-' . self::TAG_CLASS_MAP[$block['tag']] . '">' . $content . '</tbody>';
+ }
+
+ /**
+ * Renderer the table block: equal.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockEqual(array $block): string
+ {
+ $ret = '';
+
+ // note that although we are in a OP_EQ situation,
+ // the old and the new may not be exactly the same
+ // because of ignoreCase, ignoreWhitespace, etc
+ foreach ($block['new']['lines'] as $no => $newLine) {
+ // we could only pick either the old or the new to show
+ // here we pick the new one to let the user know what it is now
+ $ret .= $this->renderTableRow(
+ 'new',
+ SequenceMatcher::OP_EQ,
+ $newLine,
+ $block['old']['offset'] + $no + 1,
+ $block['new']['offset'] + $no + 1
+ );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: insert.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockInsert(array $block): string
+ {
+ $ret = '';
+
+ foreach ($block['new']['lines'] as $no => $newLine) {
+ $ret .= $this->renderTableRow(
+ 'new',
+ SequenceMatcher::OP_INS,
+ $newLine,
+ null,
+ $block['new']['offset'] + $no + 1
+ );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: delete.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockDelete(array $block): string
+ {
+ $ret = '';
+
+ foreach ($block['old']['lines'] as $no => $oldLine) {
+ $ret .= $this->renderTableRow(
+ 'old',
+ SequenceMatcher::OP_DEL,
+ $oldLine,
+ $block['old']['offset'] + $no + 1,
+ null
+ );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: replace.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockReplace(array $block): string
+ {
+ return
+ $this->renderTableBlockDelete($block) .
+ $this->renderTableBlockInsert($block);
+ }
+
+ /**
+ * Renderer a content row of the output table.
+ *
+ * @param string $tdClass the <td> class
+ * @param int $op the operation
+ * @param string $line the line
+ * @param null|int $oldLineNum the old line number
+ * @param null|int $newLineNum the new line number
+ */
+ protected function renderTableRow(
+ string $tdClass,
+ int $op,
+ string $line,
+ ?int $oldLineNum,
+ ?int $newLineNum
+ ): string {
+ return
+ '<tr data-type="' . self::SYMBOL_MAP[$op] . '">' .
+ (
+ $this->options['lineNumbers']
+ ? $this->renderLineNumberColumns($oldLineNum, $newLineNum)
+ : ''
+ ) .
+ '<th class="sign ' . self::TAG_CLASS_MAP[$op] . '">' . self::SYMBOL_MAP[$op] . '</th>' .
+ '<td class="' . $tdClass . '">' . $line . '</td>' .
+ '</tr>';
+ }
+
+ /**
+ * Renderer the line number columns.
+ *
+ * @param null|int $oldLineNum The old line number
+ * @param null|int $newLineNum The new line number
+ */
+ protected function renderLineNumberColumns(?int $oldLineNum, ?int $newLineNum): string
+ {
+ return
+ (
+ isset($oldLineNum)
+ ? '<th class="n-old">' . $oldLineNum . '</th>'
+ : '<th></th>'
+ ) .
+ (
+ isset($newLineNum)
+ ? '<th class="n-new">' . $newLineNum . '</th>'
+ : '<th></th>'
+ );
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/Json.php b/vendor/jfcherng/php-diff/src/Renderer/Html/Json.php
new file mode 100644
index 0000000..27f8f36
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/Json.php
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html;
+
+/**
+ * HTML Json diff generator.
+ *
+ * @deprecated 6.8.0 Use the "JsonHtml" renderer instead.
+ */
+final class Json extends JsonHtml
+{
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/JsonHtml.php b/vendor/jfcherng/php-diff/src/Renderer/Html/JsonHtml.php
new file mode 100644
index 0000000..a7981a1
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/JsonHtml.php
@@ -0,0 +1,68 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html;
+
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * HTML Json diff generator.
+ */
+class JsonHtml extends AbstractHtml
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'HTML Json',
+ 'type' => 'Html',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ public const IS_TEXT_RENDERER = true;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getResultForIdenticalsDefault(): string
+ {
+ return '[]';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function redererChanges(array $changes): string
+ {
+ if ($this->options['outputTagAsString']) {
+ $this->convertTagToString($changes);
+ }
+
+ return \json_encode($changes, $this->options['jsonEncodeFlags']);
+ }
+
+ /**
+ * Convert tags of changes to their string form for better readability.
+ *
+ * @param array[][] $changes the changes
+ */
+ protected function convertTagToString(array &$changes): void
+ {
+ foreach ($changes as &$hunks) {
+ foreach ($hunks as &$block) {
+ $block['tag'] = SequenceMatcher::opIntToStr($block['tag']);
+ }
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function formatStringFromLines(string $string): string
+ {
+ return $this->htmlSafe($string);
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/AbstractLineRenderer.php b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/AbstractLineRenderer.php
new file mode 100644
index 0000000..5320994
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/AbstractLineRenderer.php
@@ -0,0 +1,105 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
+
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * Base renderer for rendering HTML-based line diffs.
+ */
+abstract class AbstractLineRenderer implements LineRendererInterface
+{
+ /**
+ * @var SequenceMatcher the sequence matcher
+ */
+ protected $sequenceMatcher;
+
+ /**
+ * @var array the differ options
+ */
+ protected $differOptions = [];
+
+ /**
+ * @var array the renderer options
+ */
+ protected $rendererOptions = [];
+
+ /**
+ * The constructor.
+ *
+ * @param array $differOptions the differ options
+ * @param array $rendererOptions the renderer options
+ */
+ public function __construct(array $differOptions, array $rendererOptions)
+ {
+ $this->sequenceMatcher = new SequenceMatcher([], []);
+
+ $this
+ ->setDifferOptions($differOptions)
+ ->setRendererOptions($rendererOptions);
+ }
+
+ /**
+ * Set the differ options.
+ *
+ * @param array $differOptions the differ options
+ *
+ * @return static
+ */
+ public function setDifferOptions(array $differOptions): self
+ {
+ $this->differOptions = $differOptions;
+ $this->sequenceMatcher->setOptions($differOptions);
+
+ return $this;
+ }
+
+ /**
+ * Set the renderer options.
+ *
+ * @param array $rendererOptions the renderer options
+ *
+ * @return static
+ */
+ public function setRendererOptions(array $rendererOptions): self
+ {
+ $this->rendererOptions = $rendererOptions;
+
+ return $this;
+ }
+
+ /**
+ * Gets the differ options.
+ *
+ * @return array the differ options
+ */
+ public function getDifferOptions(): array
+ {
+ return $this->differOptions;
+ }
+
+ /**
+ * Gets the renderer options.
+ *
+ * @return array the renderer options
+ */
+ public function getRendererOptions(): array
+ {
+ return $this->rendererOptions;
+ }
+
+ /**
+ * Get the changed extent segments.
+ *
+ * @param string[] $old the old array
+ * @param string[] $new the new array
+ *
+ * @return int[][] the changed extent segments
+ */
+ protected function getChangedExtentSegments(array $old, array $new): array
+ {
+ return $this->sequenceMatcher->setSequences($old, $new)->getOpcodes();
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Char.php b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Char.php
new file mode 100644
index 0000000..f66daba
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Char.php
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
+
+use Jfcherng\Diff\Renderer\RendererConstant;
+use Jfcherng\Diff\SequenceMatcher;
+use Jfcherng\Diff\Utility\ReverseIterator;
+use Jfcherng\Utility\MbString;
+
+final class Char extends AbstractLineRenderer
+{
+ /**
+ * {@inheritdoc}
+ *
+ * @return static
+ */
+ public function render(MbString $mbOld, MbString $mbNew): LineRendererInterface
+ {
+ $hunk = $this->getChangedExtentSegments($mbOld->toArray(), $mbNew->toArray());
+
+ // reversely iterate hunk
+ foreach (ReverseIterator::fromArray($hunk) as [$op, $i1, $i2, $j1, $j2]) {
+ if ($op & (SequenceMatcher::OP_REP | SequenceMatcher::OP_DEL)) {
+ $mbOld->str_enclose_i(RendererConstant::HTML_CLOSURES, $i1, $i2 - $i1);
+ }
+
+ if ($op & (SequenceMatcher::OP_REP | SequenceMatcher::OP_INS)) {
+ $mbNew->str_enclose_i(RendererConstant::HTML_CLOSURES, $j1, $j2 - $j1);
+ }
+ }
+
+ return $this;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Line.php b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Line.php
new file mode 100644
index 0000000..8e76c24
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Line.php
@@ -0,0 +1,81 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
+
+use Jfcherng\Diff\Renderer\RendererConstant;
+use Jfcherng\Utility\MbString;
+
+final class Line extends AbstractLineRenderer
+{
+ /**
+ * {@inheritdoc}
+ *
+ * @return static
+ */
+ public function render(MbString $mbOld, MbString $mbNew): LineRendererInterface
+ {
+ [$start, $end] = $this->getChangedExtentRegion($mbOld, $mbNew);
+
+ // two strings are the same
+ if ($end === 0) {
+ return $this;
+ }
+
+ // two strings are different, we do rendering
+ $mbOld->str_enclose_i(
+ RendererConstant::HTML_CLOSURES,
+ $start,
+ $end + $mbOld->strlen() - $start + 1
+ );
+ $mbNew->str_enclose_i(
+ RendererConstant::HTML_CLOSURES,
+ $start,
+ $end + $mbNew->strlen() - $start + 1
+ );
+
+ return $this;
+ }
+
+ /**
+ * Given two strings, determine where the changes in the two strings begin,
+ * and where the changes in the two strings end.
+ *
+ * @param MbString $mbOld the old megabytes line
+ * @param MbString $mbNew the new megabytes line
+ *
+ * @return int[] Array containing the starting position (non-negative) and the ending position (negative)
+ * [0, 0] if two strings are the same
+ */
+ protected function getChangedExtentRegion(MbString $mbOld, MbString $mbNew): array
+ {
+ // two strings are the same
+ // most lines should be this cases, an early return could save many function calls
+ if ($mbOld->getRaw() === $mbNew->getRaw()) {
+ return [0, 0];
+ }
+
+ // calculate $start
+ $start = 0;
+ $startMax = \min($mbOld->strlen(), $mbNew->strlen());
+ while (
+ $start < $startMax // index out of range
+ && $mbOld->getAtRaw($start) === $mbNew->getAtRaw($start)
+ ) {
+ ++$start;
+ }
+
+ // calculate $end
+ $end = -1; // trick
+ $endMin = $startMax - $start;
+ while (
+ -$end <= $endMin // index out of range
+ && $mbOld->getAtRaw($end) === $mbNew->getAtRaw($end)
+ ) {
+ --$end;
+ }
+
+ return [$start, $end];
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/LineRendererInterface.php b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/LineRendererInterface.php
new file mode 100644
index 0000000..4437fcb
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/LineRendererInterface.php
@@ -0,0 +1,20 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
+
+use Jfcherng\Utility\MbString;
+
+interface LineRendererInterface
+{
+ /**
+ * Renderer the in-line changed extent.
+ *
+ * @param MbString $mbOld the old megabytes line
+ * @param MbString $mbNew the new megabytes line
+ *
+ * @return static
+ */
+ public function render(MbString $mbOld, MbString $mbNew): self;
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/None.php b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/None.php
new file mode 100644
index 0000000..b8abaa5
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/None.php
@@ -0,0 +1,20 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
+
+use Jfcherng\Utility\MbString;
+
+final class None extends AbstractLineRenderer
+{
+ /**
+ * {@inheritdoc}
+ *
+ * @return static
+ */
+ public function render(MbString $mbOld, MbString $mbNew): LineRendererInterface
+ {
+ return $this;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Word.php b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Word.php
new file mode 100644
index 0000000..b9e83f8
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/LineRenderer/Word.php
@@ -0,0 +1,110 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
+
+use Jfcherng\Diff\Renderer\RendererConstant;
+use Jfcherng\Diff\SequenceMatcher;
+use Jfcherng\Diff\Utility\ReverseIterator;
+use Jfcherng\Diff\Utility\Str;
+use Jfcherng\Utility\MbString;
+
+final class Word extends AbstractLineRenderer
+{
+ /**
+ * {@inheritdoc}
+ *
+ * @return static
+ */
+ public function render(MbString $mbOld, MbString $mbNew): LineRendererInterface
+ {
+ static $splitRegex = '/([' . RendererConstant::PUNCTUATIONS_RANGE . '])/uS';
+ static $dummyHtmlClosure = RendererConstant::HTML_CLOSURES[0] . RendererConstant::HTML_CLOSURES[1];
+
+ $pregFlag = \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY;
+ $oldWords = $mbOld->toArraySplit($splitRegex, -1, $pregFlag);
+ $newWords = $mbNew->toArraySplit($splitRegex, -1, $pregFlag);
+
+ $hunk = $this->getChangedExtentSegments($oldWords, $newWords);
+
+ // reversely iterate hunk
+ foreach (ReverseIterator::fromArray($hunk) as [$op, $i1, $i2, $j1, $j2]) {
+ if ($op & (SequenceMatcher::OP_REP | SequenceMatcher::OP_DEL)) {
+ $oldWords[$i1] = RendererConstant::HTML_CLOSURES[0] . $oldWords[$i1];
+ $oldWords[$i2 - 1] .= RendererConstant::HTML_CLOSURES[1];
+
+ // insert dummy HTML closure to ensure there are always
+ // the same amounts of HTML closures in $oldWords and $newWords
+ // thus, this should make that "wordGlues" work correctly
+ // @see https://github.com/jfcherng/php-diff/pull/25
+ if ($op === SequenceMatcher::OP_DEL) {
+ \array_splice($newWords, $j1, 0, [$dummyHtmlClosure]);
+ }
+ }
+
+ if ($op & (SequenceMatcher::OP_REP | SequenceMatcher::OP_INS)) {
+ $newWords[$j1] = RendererConstant::HTML_CLOSURES[0] . $newWords[$j1];
+ $newWords[$j2 - 1] .= RendererConstant::HTML_CLOSURES[1];
+
+ if ($op === SequenceMatcher::OP_INS) {
+ \array_splice($oldWords, $i1, 0, [$dummyHtmlClosure]);
+ }
+ }
+ }
+
+ if (!empty($hunk) && !empty($this->rendererOptions['wordGlues'])) {
+ $regexGlues = \array_map(
+ function (string $glue): string {
+ return \preg_quote($glue, '/');
+ },
+ $this->rendererOptions['wordGlues']
+ );
+
+ $gluePattern = '/^(?:' . \implode('|', $regexGlues) . ')+$/uS';
+
+ $this->glueWordsResult($oldWords, $gluePattern);
+ $this->glueWordsResult($newWords, $gluePattern);
+ }
+
+ $mbOld->set(\implode('', $oldWords));
+ $mbNew->set(\implode('', $newWords));
+
+ return $this;
+ }
+
+ /**
+ * Beautify diff result by glueing words.
+ *
+ * What this function does is basically making
+ * ["<diff_begin>good<diff_end>", "-", "<diff_begin>looking<diff_end>"]
+ * into
+ * ["<diff_begin>good", "-", "looking<diff_end>"].
+ *
+ * @param array $words the words
+ * @param string $gluePattern the regex to determine a string is purely glue or not
+ */
+ protected function glueWordsResult(array &$words, string $gluePattern): void
+ {
+ /** @var int index of the word which has the trailing closure */
+ $endClosureIdx = -1;
+
+ foreach ($words as $idx => &$word) {
+ if ($word === '') {
+ continue;
+ }
+
+ if ($endClosureIdx < 0) {
+ if (Str::endsWith($word, RendererConstant::HTML_CLOSURES[1])) {
+ $endClosureIdx = $idx;
+ }
+ } elseif (Str::startsWith($word, RendererConstant::HTML_CLOSURES[0])) {
+ $words[$endClosureIdx] = \substr($words[$endClosureIdx], 0, -\strlen(RendererConstant::HTML_CLOSURES[1]));
+ $word = \substr($word, \strlen(RendererConstant::HTML_CLOSURES[0]));
+ $endClosureIdx = $idx;
+ } elseif (!\preg_match($gluePattern, $word)) {
+ $endClosureIdx = -1;
+ }
+ }
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Html/SideBySide.php b/vendor/jfcherng/php-diff/src/Renderer/Html/SideBySide.php
new file mode 100644
index 0000000..8f192c4
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Html/SideBySide.php
@@ -0,0 +1,281 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Html;
+
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * Side by Side HTML diff generator.
+ */
+final class SideBySide extends AbstractHtml
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'Side by side',
+ 'type' => 'Html',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function redererChanges(array $changes): string
+ {
+ if (empty($changes)) {
+ return $this->getResultForIdenticals();
+ }
+
+ $wrapperClasses = \array_merge(
+ $this->options['wrapperClasses'],
+ ['diff', 'diff-html', 'diff-side-by-side']
+ );
+
+ return
+ '<table class="' . \implode(' ', $wrapperClasses) . '">' .
+ $this->renderTableHeader() .
+ $this->renderTableHunks($changes) .
+ '</table>';
+ }
+
+ /**
+ * Renderer the table header.
+ */
+ protected function renderTableHeader(): string
+ {
+ if (!$this->options['showHeader']) {
+ return '';
+ }
+
+ $colspan = $this->options['lineNumbers'] ? ' colspan="2"' : '';
+
+ return
+ '<thead>' .
+ '<tr>' .
+ '<th' . $colspan . '>' . $this->_('old_version') . '</th>' .
+ '<th' . $colspan . '>' . $this->_('new_version') . '</th>' .
+ '</tr>' .
+ '</thead>';
+ }
+
+ /**
+ * Renderer the table separate block.
+ */
+ protected function renderTableSeparateBlock(): string
+ {
+ $colspan = $this->options['lineNumbers'] ? '4' : '2';
+
+ return
+ '<tbody class="skipped">' .
+ '<tr>' .
+ '<td colspan="' . $colspan . '"></td>' .
+ '</tr>' .
+ '</tbody>';
+ }
+
+ /**
+ * Renderer table hunks.
+ *
+ * @param array[][] $hunks each hunk has many blocks
+ */
+ protected function renderTableHunks(array $hunks): string
+ {
+ $ret = '';
+
+ foreach ($hunks as $i => $hunk) {
+ if ($i > 0 && $this->options['separateBlock']) {
+ $ret .= $this->renderTableSeparateBlock();
+ }
+
+ foreach ($hunk as $block) {
+ $ret .= $this->renderTableBlock($block);
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlock(array $block): string
+ {
+ switch ($block['tag']) {
+ case SequenceMatcher::OP_EQ:
+ $content = $this->renderTableBlockEqual($block);
+ break;
+ case SequenceMatcher::OP_INS:
+ $content = $this->renderTableBlockInsert($block);
+ break;
+ case SequenceMatcher::OP_DEL:
+ $content = $this->renderTableBlockDelete($block);
+ break;
+ case SequenceMatcher::OP_REP:
+ $content = $this->renderTableBlockReplace($block);
+ break;
+ default:
+ $content = '';
+ }
+
+ return '<tbody class="change change-' . self::TAG_CLASS_MAP[$block['tag']] . '">' . $content . '</tbody>';
+ }
+
+ /**
+ * Renderer the table block: equal.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockEqual(array $block): string
+ {
+ $ret = '';
+
+ $rowCount = \count($block['new']['lines']);
+
+ for ($no = 0; $no < $rowCount; ++$no) {
+ $ret .= $this->renderTableRow(
+ $block['old']['lines'][$no],
+ $block['new']['lines'][$no],
+ $block['old']['offset'] + $no + 1,
+ $block['new']['offset'] + $no + 1
+ );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: insert.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockInsert(array $block): string
+ {
+ $ret = '';
+
+ foreach ($block['new']['lines'] as $no => $newLine) {
+ $ret .= $this->renderTableRow(
+ null,
+ $newLine,
+ null,
+ $block['new']['offset'] + $no + 1
+ );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: delete.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockDelete(array $block): string
+ {
+ $ret = '';
+
+ foreach ($block['old']['lines'] as $no => $oldLine) {
+ $ret .= $this->renderTableRow(
+ $oldLine,
+ null,
+ $block['old']['offset'] + $no + 1,
+ null
+ );
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer the table block: replace.
+ *
+ * @param array $block the block
+ */
+ protected function renderTableBlockReplace(array $block): string
+ {
+ $ret = '';
+
+ $lineCountMax = \max(\count($block['old']['lines']), \count($block['new']['lines']));
+
+ for ($no = 0; $no < $lineCountMax; ++$no) {
+ if (isset($block['old']['lines'][$no])) {
+ $oldLineNum = $block['old']['offset'] + $no + 1;
+ $oldLine = $block['old']['lines'][$no];
+ } else {
+ $oldLineNum = $oldLine = null;
+ }
+
+ if (isset($block['new']['lines'][$no])) {
+ $newLineNum = $block['new']['offset'] + $no + 1;
+ $newLine = $block['new']['lines'][$no];
+ } else {
+ $newLineNum = $newLine = null;
+ }
+
+ $ret .= $this->renderTableRow($oldLine, $newLine, $oldLineNum, $newLineNum);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Renderer a content row of the output table.
+ *
+ * @param null|string $oldLine the old line
+ * @param null|string $newLine the new line
+ * @param null|int $oldLineNum the old line number
+ * @param null|int $newLineNum the new line number
+ */
+ protected function renderTableRow(
+ ?string $oldLine,
+ ?string $newLine,
+ ?int $oldLineNum,
+ ?int $newLineNum
+ ): string {
+ return
+ '<tr>' .
+ (
+ $this->options['lineNumbers']
+ ? $this->renderLineNumberColumn('old', $oldLineNum)
+ : ''
+ ) .
+ $this->renderLineContentColumn('old', $oldLine) .
+ (
+ $this->options['lineNumbers']
+ ? $this->renderLineNumberColumn('new', $newLineNum)
+ : ''
+ ) .
+ $this->renderLineContentColumn('new', $newLine) .
+ '</tr>';
+ }
+
+ /**
+ * Renderer the line number column.
+ *
+ * @param string $type the diff type
+ * @param null|int $lineNum the line number
+ */
+ protected function renderLineNumberColumn(string $type, ?int $lineNum): string
+ {
+ return isset($lineNum)
+ ? '<th class="n-' . $type . '">' . $lineNum . '</th>'
+ : '<th></th>';
+ }
+
+ /**
+ * Renderer the line content column.
+ *
+ * @param string $type the diff type
+ * @param null|string $content the line content
+ */
+ protected function renderLineContentColumn(string $type, ?string $content): string
+ {
+ return
+ '<td class="' . $type . (isset($content) ? '' : ' none') . '">' .
+ $content .
+ '</td>';
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/RendererConstant.php b/vendor/jfcherng/php-diff/src/Renderer/RendererConstant.php
new file mode 100644
index 0000000..a6d2481
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/RendererConstant.php
@@ -0,0 +1,116 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer;
+
+final class RendererConstant
+{
+ /**
+ * The base namespace of renderers.
+ *
+ * @var string
+ */
+ public const RENDERER_NAMESPACE = __NAMESPACE__;
+
+ /**
+ * Available renderer types.
+ *
+ * @var string[]
+ */
+ public const RENDERER_TYPES = ['Html', 'Text'];
+
+ /**
+ * Closures that are used to enclose different parts in string.
+ *
+ * Arbitrary chars from the 15-16th Unicode reserved areas
+ * and hopefully, they won't appear in source texts.
+ *
+ * @var string[]
+ */
+ public const HTML_CLOSURES = ["\u{fcffc}\u{ff2fb}", "\u{fff41}\u{fcffc}"];
+
+ /**
+ * Closures that are used to enclose deleted chars in output HTML.
+ *
+ * @var string[]
+ */
+ public const HTML_CLOSURES_DEL = ['<del>', '</del>'];
+
+ /**
+ * Closures that are used to enclose inserted chars in output HTML.
+ *
+ * @var string[]
+ */
+ public const HTML_CLOSURES_INS = ['<ins>', '</ins>'];
+
+ /**
+ * The delimiter to be used as the glue in string/array functions.
+ *
+ * Arbitrary chars from the 15-16th Unicode reserved areas
+ * and hopefully, it won't appear in source texts.
+ *
+ * @var string
+ */
+ public const IMPLODE_DELIMITER = "\u{ff2fa}\u{fcffc}\u{fff42}";
+
+ /**
+ * Regex range for punctuations.
+ *
+ * Presuming the regex delimiter is "/".
+ *
+ * @var string
+ */
+ public const PUNCTUATIONS_RANGE = (
+ // Latin-1 Supplement
+ // @see https://unicode-table.com/en/blocks/latin-1-supplement/
+ "\u{0080}-\u{00BB}" .
+ // Spacing Modifier Letters
+ // @see https://unicode-table.com/en/blocks/spacing-modifier-letters/
+ "\u{02B0}-\u{02FF}" .
+ // Combining Diacritical Marks
+ // @see https://unicode-table.com/en/blocks/combining-diacritical-marks/
+ "\u{0300}-\u{036F}" .
+ // Small Form Variants
+ // @see https://unicode-table.com/en/blocks/small-form-variants/
+ "\u{FE50}-\u{FE6F}" .
+ // General Punctuation
+ // @see https://unicode-table.com/en/blocks/general-punctuation/
+ "\u{2000}-\u{206F}" .
+ // Supplemental Punctuation
+ // @see https://unicode-table.com/en/blocks/supplemental-punctuation/
+ "\u{2E00}-\u{2E7F}" .
+ // CJK Symbols and Punctuation
+ // @see https://unicode-table.com/en/blocks/cjk-symbols-and-punctuation/
+ "\u{3000}-\u{303F}" .
+ // Ideographic Symbols and Punctuation
+ // @see https://unicode-table.com/en/blocks/ideographic-symbols-and-punctuation/
+ "\u{16FE0}-\u{16FFF}" .
+ // hmm... these seem to be no rule
+ " \t\r\n$,.:;!?'\"()\\[\\]{}%@<=>_+\\-*\\/~\\\\|" .
+ ' $,.:;!?’"()[]{}%@<=>_+-*/~\|' .
+ '「」『』〈〉《》【】()()‘’“”' .
+ '.‧・・•·¿'
+ );
+
+ /**
+ * Colorize the CLI output if possible.
+ *
+ * @var int
+ */
+ public const CLI_COLOR_AUTO = -1;
+
+ /**
+ * Force not to colorize the CLI output.
+ *
+ * @var int
+ */
+ public const CLI_COLOR_DISABLE = 0;
+
+ /**
+ * Force to colorize the CLI output if possible.
+ *
+ * @var int
+ */
+ public const CLI_COLOR_ENABLE = 1;
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/RendererInterface.php b/vendor/jfcherng/php-diff/src/Renderer/RendererInterface.php
new file mode 100644
index 0000000..97c109c
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/RendererInterface.php
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer;
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\Exception\UnsupportedFunctionException;
+
+/**
+ * Renderer Interface.
+ */
+interface RendererInterface
+{
+ /**
+ * Get the renderer result when the old and the new are the same.
+ */
+ public function getResultForIdenticals(): string;
+
+ /**
+ * Render the differ and return the result.
+ *
+ * @param Differ $differ the Differ object to be rendered
+ */
+ public function render(Differ $differ): string;
+
+ /**
+ * Render the differ array and return the result.
+ *
+ * @param array[][] $differArray the Differ array to be rendered
+ *
+ * @throws UnsupportedFunctionException if the renderer does not support this method
+ */
+ public function renderArray(array $differArray): string;
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Text/AbstractText.php b/vendor/jfcherng/php-diff/src/Renderer/Text/AbstractText.php
new file mode 100644
index 0000000..b2f3f6c
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Text/AbstractText.php
@@ -0,0 +1,145 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Text;
+
+use Jfcherng\Diff\Exception\UnsupportedFunctionException;
+use Jfcherng\Diff\Renderer\AbstractRenderer;
+use Jfcherng\Diff\Renderer\RendererConstant;
+use Jfcherng\Utility\CliColor;
+
+/**
+ * Base renderer for rendering text-based diffs.
+ */
+abstract class AbstractText extends AbstractRenderer
+{
+ /**
+ * @var bool is this renderer pure text?
+ */
+ public const IS_TEXT_RENDERER = true;
+
+ /**
+ * @var string the diff output representing there is no EOL at EOF in the GNU diff tool
+ */
+ public const GNU_OUTPUT_NO_EOL_AT_EOF = '\ No newline at end of file';
+
+ /**
+ * @var bool controls whether cliColoredString() is enabled or not
+ */
+ protected $isCliColorEnabled = false;
+
+ /**
+ * {@inheritdoc}
+ */
+ public function setOptions(array $options): AbstractRenderer
+ {
+ parent::setOptions($options);
+
+ // determine $this->isCliColorEnabled
+ if ($this->options['cliColorization'] === RendererConstant::CLI_COLOR_ENABLE) {
+ $this->isCliColorEnabled = true;
+ } elseif ($this->options['cliColorization'] === RendererConstant::CLI_COLOR_DISABLE) {
+ $this->isCliColorEnabled = false;
+ } else {
+ $this->isCliColorEnabled = \PHP_SAPI === 'cli' && $this->hasColorSupport(\STDOUT);
+ }
+
+ return $this;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getResultForIdenticalsDefault(): string
+ {
+ return '';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function renderArrayWorker(array $differArray): string
+ {
+ throw new UnsupportedFunctionException(__METHOD__);
+
+ return ''; // make IDE not complain
+ }
+
+ /**
+ * Colorize the string for CLI output.
+ *
+ * @param string $str the string
+ * @param null|string $symbol the symbol
+ *
+ * @return string the (maybe) colorized string
+ */
+ protected function cliColoredString(string $str, ?string $symbol): string
+ {
+ static $symbolToStyles = [
+ '@' => ['f_purple', 'bold'], // header
+ '-' => ['f_red', 'bold'], // deleted
+ '+' => ['f_green', 'bold'], // inserted
+ '!' => ['f_yellow', 'bold'], // replaced
+ ];
+
+ $styles = $symbolToStyles[$symbol] ?? [];
+
+ if (!$this->isCliColorEnabled || empty($styles)) {
+ return $str;
+ }
+
+ return CliColor::color($str, $styles);
+ }
+
+ /**
+ * Returns true if the stream supports colorization.
+ *
+ * Colorization is disabled if not supported by the stream:
+ *
+ * This is tricky on Windows, because Cygwin, Msys2 etc emulate pseudo
+ * terminals via named pipes, so we can only check the environment.
+ *
+ * Reference: Composer\XdebugHandler\Process::supportsColor
+ * https://github.com/composer/xdebug-handler
+ *
+ * @see https://github.com/symfony/console/blob/647c51ff073300a432a4a504e29323cf0d5e0571/Output/StreamOutput.php#L81-L124
+ *
+ * @param resource $stream
+ *
+ * @return bool true if the stream supports colorization, false otherwise
+ *
+ * @suppress PhanUndeclaredFunction
+ */
+ protected function hasColorSupport($stream): bool
+ {
+ // Follow https://no-color.org/
+ if (isset($_SERVER['NO_COLOR']) || false !== \getenv('NO_COLOR')) {
+ return false;
+ }
+
+ if ('Hyper' === \getenv('TERM_PROGRAM')) {
+ return true;
+ }
+
+ if (\DIRECTORY_SEPARATOR === '\\') {
+ return (\function_exists('sapi_windows_vt100_support')
+ && @\sapi_windows_vt100_support($stream))
+ || false !== \getenv('ANSICON')
+ || 'ON' === \getenv('ConEmuANSI')
+ || 'xterm' === \getenv('TERM');
+ }
+
+ if (\function_exists('stream_isatty')) {
+ return @\stream_isatty($stream);
+ }
+
+ if (\function_exists('posix_isatty')) {
+ return @posix_isatty($stream);
+ }
+
+ $stat = @\fstat($stream);
+ // Check if formatted mode is S_IFCHR
+ return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Text/Context.php b/vendor/jfcherng/php-diff/src/Renderer/Text/Context.php
new file mode 100644
index 0000000..ddc9b2a
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Text/Context.php
@@ -0,0 +1,163 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Text;
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * Context diff generator.
+ *
+ * @see https://en.wikipedia.org/wiki/Diff#Context_format
+ */
+final class Context extends AbstractText
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'Context',
+ 'type' => 'Text',
+ ];
+
+ /**
+ * @var int the union of OPs that indicate there is a change
+ */
+ public const OP_BLOCK_CHANGED =
+ SequenceMatcher::OP_DEL |
+ SequenceMatcher::OP_INS |
+ SequenceMatcher::OP_REP;
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function renderWorker(Differ $differ): string
+ {
+ $ret = '';
+
+ foreach ($differ->getGroupedOpcodesGnu() as $hunk) {
+ $lastBlockIdx = \count($hunk) - 1;
+
+ // note that these line number variables are 0-based
+ $i1 = $hunk[0][1];
+ $i2 = $hunk[$lastBlockIdx][2];
+ $j1 = $hunk[0][3];
+ $j2 = $hunk[$lastBlockIdx][4];
+
+ $ret .=
+ $this->cliColoredString("***************\n", '@') .
+ $this->renderHunkHeader('*', $i1, $i2) .
+ $this->renderHunkOld($differ, $hunk) .
+ $this->renderHunkHeader('-', $j1, $j2) .
+ $this->renderHunkNew($differ, $hunk);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Render the hunk header.
+ *
+ * @param string $symbol the symbol
+ * @param int $a1 the begin index
+ * @param int $a2 the end index
+ */
+ protected function renderHunkHeader(string $symbol, int $a1, int $a2): string
+ {
+ $a1x = $a1 + 1; // 1-based begin line number
+
+ return $this->cliColoredString(
+ "{$symbol}{$symbol}{$symbol} " .
+ ($a1x < $a2 ? "{$a1x},{$a2}" : $a2) .
+ " {$symbol}{$symbol}{$symbol}{$symbol}\n",
+ '@' // symbol
+ );
+ }
+
+ /**
+ * Render the old hunk.
+ *
+ * @param Differ $differ the differ object
+ * @param int[][] $hunk the hunk
+ */
+ protected function renderHunkOld(Differ $differ, array $hunk): string
+ {
+ $ret = '';
+ $hunkOps = 0;
+ $noEolAtEofIdx = $differ->getOldNoEolAtEofIdx();
+
+ foreach ($hunk as [$op, $i1, $i2, $j1, $j2]) {
+ // OP_INS does not belongs to an old hunk
+ if ($op === SequenceMatcher::OP_INS) {
+ continue;
+ }
+
+ $hunkOps |= $op;
+
+ $ret .= $this->renderContext(
+ self::SYMBOL_MAP[$op],
+ $differ->getOld($i1, $i2),
+ $i2 === $noEolAtEofIdx
+ );
+ }
+
+ // if there is no content changed, the hunk context should be omitted
+ return $hunkOps & self::OP_BLOCK_CHANGED ? $ret : '';
+ }
+
+ /**
+ * Render the new hunk.
+ *
+ * @param Differ $differ the differ object
+ * @param int[][] $hunk the hunk
+ */
+ protected function renderHunkNew(Differ $differ, array $hunk): string
+ {
+ $ret = '';
+ $hunkOps = 0;
+ $noEolAtEofIdx = $differ->getNewNoEolAtEofIdx();
+
+ foreach ($hunk as [$op, $i1, $i2, $j1, $j2]) {
+ // OP_DEL does not belongs to a new hunk
+ if ($op === SequenceMatcher::OP_DEL) {
+ continue;
+ }
+
+ $hunkOps |= $op;
+
+ $ret .= $this->renderContext(
+ self::SYMBOL_MAP[$op],
+ $differ->getNew($j1, $j2),
+ $j2 === $noEolAtEofIdx
+ );
+ }
+
+ // if there is no content changed, the hunk context should be omitted
+ return $hunkOps & self::OP_BLOCK_CHANGED ? $ret : '';
+ }
+
+ /**
+ * Render the context array with the symbol.
+ *
+ * @param string $symbol the symbol
+ * @param string[] $context the context
+ * @param bool $noEolAtEof there is no EOL at EOF in this block
+ */
+ protected function renderContext(string $symbol, array $context, bool $noEolAtEof = false): string
+ {
+ if (empty($context)) {
+ return '';
+ }
+
+ $ret = "{$symbol} " . \implode("\n{$symbol} ", $context) . "\n";
+ $ret = $this->cliColoredString($ret, $symbol);
+
+ if ($noEolAtEof) {
+ $ret .= self::GNU_OUTPUT_NO_EOL_AT_EOF . "\n";
+ }
+
+ return $ret;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Text/JsonText.php b/vendor/jfcherng/php-diff/src/Renderer/Text/JsonText.php
new file mode 100644
index 0000000..b99aa56
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Text/JsonText.php
@@ -0,0 +1,81 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Text;
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * Plain text Json diff generator.
+ */
+final class JsonText extends AbstractText
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'Text JSON',
+ 'type' => 'Text',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function renderWorker(Differ $differ): string
+ {
+ $ret = [];
+
+ foreach ($differ->getGroupedOpcodes() as $hunk) {
+ $ret[] = $this->renderHunk($differ, $hunk);
+ }
+
+ if ($this->options['outputTagAsString']) {
+ $this->convertTagToString($ret);
+ }
+
+ return \json_encode($ret, $this->options['jsonEncodeFlags']);
+ }
+
+ /**
+ * Render the hunk.
+ *
+ * @param Differ $differ the differ object
+ * @param int[][] $hunk the hunk
+ */
+ protected function renderHunk(Differ $differ, array $hunk): array
+ {
+ $ret = [];
+
+ foreach ($hunk as [$op, $i1, $i2, $j1, $j2]) {
+ $ret[] = [
+ 'tag' => $op,
+ 'old' => [
+ 'offset' => $i1,
+ 'lines' => $differ->getOld($i1, $i2),
+ ],
+ 'new' => [
+ 'offset' => $j1,
+ 'lines' => $differ->getNew($j1, $j2),
+ ],
+ ];
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Convert tags of changes to their string form for better readability.
+ *
+ * @param array[][] $changes the changes
+ */
+ protected function convertTagToString(array &$changes): void
+ {
+ foreach ($changes as &$hunks) {
+ foreach ($hunks as &$block) {
+ $block['tag'] = SequenceMatcher::opIntToStr($block['tag']);
+ }
+ }
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Renderer/Text/Unified.php b/vendor/jfcherng/php-diff/src/Renderer/Text/Unified.php
new file mode 100644
index 0000000..e211715
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Renderer/Text/Unified.php
@@ -0,0 +1,147 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Renderer\Text;
+
+use Jfcherng\Diff\Differ;
+use Jfcherng\Diff\SequenceMatcher;
+
+/**
+ * Unified diff generator.
+ *
+ * @see https://en.wikipedia.org/wiki/Diff#Unified_format
+ */
+final class Unified extends AbstractText
+{
+ /**
+ * {@inheritdoc}
+ */
+ public const INFO = [
+ 'desc' => 'Unified',
+ 'type' => 'Text',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function renderWorker(Differ $differ): string
+ {
+ $ret = '';
+
+ foreach ($differ->getGroupedOpcodesGnu() as $hunk) {
+ $ret .= $this->renderHunkHeader($differ, $hunk);
+ $ret .= $this->renderHunkBlocks($differ, $hunk);
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Render the hunk header.
+ *
+ * @param Differ $differ the differ
+ * @param int[][] $hunk the hunk
+ */
+ protected function renderHunkHeader(Differ $differ, array $hunk): string
+ {
+ $lastBlockIdx = \count($hunk) - 1;
+
+ // note that these line number variables are 0-based
+ $i1 = $hunk[0][1];
+ $i2 = $hunk[$lastBlockIdx][2];
+ $j1 = $hunk[0][3];
+ $j2 = $hunk[$lastBlockIdx][4];
+
+ $oldLinesCount = $i2 - $i1;
+ $newLinesCount = $j2 - $j1;
+
+ return $this->cliColoredString(
+ '@@' .
+ ' -' .
+ // the line number in GNU diff is 1-based, so we add 1
+ // a special case is when a hunk has only changed blocks,
+ // i.e., context is set to 0, we do not need the adding
+ ($i1 === $i2 ? $i1 : $i1 + 1) .
+ // if the line counts is 1, it can (and mostly) be omitted
+ ($oldLinesCount === 1 ? '' : ",{$oldLinesCount}") .
+ ' +' .
+ ($j1 === $j2 ? $j1 : $j1 + 1) .
+ ($newLinesCount === 1 ? '' : ",{$newLinesCount}") .
+ " @@\n",
+ '@' // symbol
+ );
+ }
+
+ /**
+ * Render the hunk content.
+ *
+ * @param Differ $differ the differ
+ * @param int[][] $hunk the hunk
+ */
+ protected function renderHunkBlocks(Differ $differ, array $hunk): string
+ {
+ $ret = '';
+
+ $oldNoEolAtEofIdx = $differ->getOldNoEolAtEofIdx();
+ $newNoEolAtEofIdx = $differ->getNewNoEolAtEofIdx();
+
+ foreach ($hunk as [$op, $i1, $i2, $j1, $j2]) {
+ // note that although we are in a OP_EQ situation,
+ // the old and the new may not be exactly the same
+ // because of ignoreCase, ignoreWhitespace, etc
+ if ($op === SequenceMatcher::OP_EQ) {
+ // we could only pick either the old or the new to show
+ // note that the GNU diff will use the old one because it creates a patch
+ $ret .= $this->renderContext(
+ ' ',
+ $differ->getOld($i1, $i2),
+ $i2 === $oldNoEolAtEofIdx
+ );
+
+ continue;
+ }
+
+ if ($op & (SequenceMatcher::OP_REP | SequenceMatcher::OP_DEL)) {
+ $ret .= $this->renderContext(
+ '-',
+ $differ->getOld($i1, $i2),
+ $i2 === $oldNoEolAtEofIdx
+ );
+ }
+
+ if ($op & (SequenceMatcher::OP_REP | SequenceMatcher::OP_INS)) {
+ $ret .= $this->renderContext(
+ '+',
+ $differ->getNew($j1, $j2),
+ $j2 === $newNoEolAtEofIdx
+ );
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Render the context array with the symbol.
+ *
+ * @param string $symbol the symbol
+ * @param string[] $context the context
+ * @param bool $noEolAtEof there is no EOL at EOF in this block
+ */
+ protected function renderContext(string $symbol, array $context, bool $noEolAtEof = false): string
+ {
+ if (empty($context)) {
+ return '';
+ }
+
+ $ret = $symbol . \implode("\n{$symbol}", $context) . "\n";
+ $ret = $this->cliColoredString($ret, $symbol);
+
+ if ($noEolAtEof) {
+ $ret .= self::GNU_OUTPUT_NO_EOL_AT_EOF . "\n";
+ }
+
+ return $ret;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Utility/Arr.php b/vendor/jfcherng/php-diff/src/Utility/Arr.php
new file mode 100644
index 0000000..97dccf0
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Utility/Arr.php
@@ -0,0 +1,65 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Utility;
+
+final class Arr
+{
+ /**
+ * Get a partial array slice with start/end indexes.
+ *
+ * @param array $array the array
+ * @param int $start the starting index (negative = count from backward)
+ * @param null|int $end the ending index (negative = count from backward)
+ * if is null, it returns a slice from $start to the end
+ *
+ * @return array array of all of the lines between the specified range
+ */
+ public static function getPartialByIndex(array $array, int $start = 0, ?int $end = null): array
+ {
+ $count = \count($array);
+
+ // make $end set
+ $end = $end ?? $count;
+
+ // make $start non-negative
+ if ($start < 0) {
+ $start += $count;
+
+ if ($start < 0) {
+ $start = 0;
+ }
+ }
+
+ // make $end non-negative
+ if ($end < 0) {
+ $end += $count;
+
+ if ($end < 0) {
+ $end = 0;
+ }
+ }
+
+ // make the length non-negative
+ return \array_slice($array, $start, \max(0, $end - $start));
+ }
+
+ /**
+ * Determines whether the array is associative.
+ *
+ * @param array $arr the array
+ *
+ * @return bool `true` if the array is associative, `false` otherwise
+ */
+ public static function isAssociative($arr): bool
+ {
+ foreach ($arr as $key => $value) {
+ if (\is_string($key)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Utility/Language.php b/vendor/jfcherng/php-diff/src/Utility/Language.php
new file mode 100644
index 0000000..cbd415f
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Utility/Language.php
@@ -0,0 +1,131 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Utility;
+
+final class Language
+{
+ /**
+ * @var string[] the translation dict
+ */
+ private $translations = [];
+
+ /**
+ * @var string the language name
+ */
+ private $language = '_custom_';
+
+ /**
+ * The constructor.
+ *
+ * @param array<int,string|string[]>|string|string[] $target the language ID or translations dict
+ */
+ public function __construct($target = 'eng')
+ {
+ $this->load($target);
+ }
+
+ /**
+ * Gets the language.
+ *
+ * @return string the language
+ */
+ public function getLanguage(): string
+ {
+ return $this->language;
+ }
+
+ /**
+ * Gets the translations.
+ *
+ * @return array the translations
+ */
+ public function getTranslations(): array
+ {
+ return $this->translations;
+ }
+
+ /**
+ * Loads the target language.
+ *
+ * @param array<int,string|string[]>|string|string[] $target the language ID or translations dict
+ */
+ public function load($target): void
+ {
+ $this->translations = $this->resolve($target);
+ $this->language = \is_string($target) ? $target : '_custom_';
+ }
+
+ /**
+ * Translates the text.
+ *
+ * @param string $text the text
+ */
+ public function translate(string $text): string
+ {
+ return $this->translations[$text] ?? "![{$text}]";
+ }
+
+ /**
+ * Get the translations from the language file.
+ *
+ * @param string $language the language
+ *
+ * @throws \Exception fail to decode the JSON file
+ * @throws \LogicException path is a directory
+ * @throws \RuntimeException path cannot be opened
+ *
+ * @return string[]
+ */
+ private static function getTranslationsByLanguage(string $language): array
+ {
+ $filePath = __DIR__ . "/../languages/{$language}.json";
+ $file = new \SplFileObject($filePath, 'r');
+ $fileContent = $file->fread($file->getSize());
+
+ /** @todo PHP ^7.3 JSON_THROW_ON_ERROR */
+ $decoded = \json_decode($fileContent, true);
+
+ if (\json_last_error() !== \JSON_ERROR_NONE) {
+ $msg = \sprintf('Fail to decode JSON file (code %d): %s', \json_last_error(), \realpath($filePath));
+ throw new \Exception($msg); // workaround single-line throw + 120-char limit
+ }
+
+ return (array) $decoded;
+ }
+
+ /**
+ * Resolves the target language.
+ *
+ * @param array<int,string|string[]>|string|string[] $target the language ID or translations array
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return string[] the resolved translations
+ */
+ private function resolve($target): array
+ {
+ if (\is_string($target)) {
+ return self::getTranslationsByLanguage($target);
+ }
+
+ if (\is_array($target)) {
+ // $target is an associative array
+ if (Arr::isAssociative($target)) {
+ return $target;
+ }
+
+ // $target is a list of "key-value pairs or language ID"
+ return \array_reduce(
+ $target,
+ function ($carry, $translation) {
+ return \array_merge($carry, $this->resolve($translation));
+ },
+ []
+ );
+ }
+
+ throw new \InvalidArgumentException('$target is not in valid form');
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Utility/ReverseIterator.php b/vendor/jfcherng/php-diff/src/Utility/ReverseIterator.php
new file mode 100644
index 0000000..e684ae1
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Utility/ReverseIterator.php
@@ -0,0 +1,51 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Utility;
+
+final class ReverseIterator
+{
+ public const ITERATOR_GET_VALUE = 0;
+ public const ITERATOR_GET_KEY = 1 << 0;
+ public const ITERATOR_GET_BOTH = 1 << 1;
+
+ /**
+ * The constructor.
+ */
+ private function __construct()
+ {
+ }
+
+ /**
+ * Iterate the array reversely.
+ *
+ * @param array $array the array
+ * @param int $flags the flags
+ */
+ public static function fromArray(array $array, int $flags = self::ITERATOR_GET_VALUE): \Generator
+ {
+ // iterate [key => value] pair
+ if ($flags & self::ITERATOR_GET_BOTH) {
+ for (\end($array); ($key = \key($array)) !== null; \prev($array)) {
+ yield $key => \current($array);
+ }
+
+ return;
+ }
+
+ // iterate only key
+ if ($flags & self::ITERATOR_GET_KEY) {
+ for (\end($array); ($key = \key($array)) !== null; \prev($array)) {
+ yield $key;
+ }
+
+ return;
+ }
+
+ // iterate only value
+ for (\end($array); \key($array) !== null; \prev($array)) {
+ yield \current($array);
+ }
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/Utility/Str.php b/vendor/jfcherng/php-diff/src/Utility/Str.php
new file mode 100644
index 0000000..c7478d4
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/Utility/Str.php
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff\Utility;
+
+final class Str
+{
+ /**
+ * Determine if a given string starts with a given substring.
+ *
+ * @param string $haystack the haystack
+ * @param string $needle the needle
+ */
+ public static function startsWith(string $haystack, string $needle): bool
+ {
+ return \substr($haystack, 0, \strlen($needle)) === $needle;
+ }
+
+ /**
+ * Determine if a given string ends with a given substring.
+ *
+ * @param string $haystack the haystack
+ * @param string $needle the needle
+ */
+ public static function endsWith(string $haystack, string $needle): bool
+ {
+ return \substr($haystack, -\strlen($needle)) === $needle;
+ }
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/bul.json b/vendor/jfcherng/php-diff/src/languages/bul.json
new file mode 100644
index 0000000..33beaba
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/bul.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Стара версия",
+ "new_version": "Нова версия",
+ "differences": "Разлики"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/chs.json b/vendor/jfcherng/php-diff/src/languages/chs.json
new file mode 100644
index 0000000..23cafd6
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/chs.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "旧版本",
+ "new_version": "新版本",
+ "differences": "差异"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/cht.json b/vendor/jfcherng/php-diff/src/languages/cht.json
new file mode 100644
index 0000000..6d5bbc8
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/cht.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "舊版本",
+ "new_version": "新版本",
+ "differences": "差異"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/cze.json b/vendor/jfcherng/php-diff/src/languages/cze.json
new file mode 100644
index 0000000..8b0e28e
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/cze.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Původní",
+ "new_version": "Nové",
+ "differences": "Rozdíly"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/deu.json b/vendor/jfcherng/php-diff/src/languages/deu.json
new file mode 100644
index 0000000..6627331
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/deu.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Alt",
+ "new_version": "Neu",
+ "differences": "Unterschiede"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/eng.json b/vendor/jfcherng/php-diff/src/languages/eng.json
new file mode 100644
index 0000000..8c180fc
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/eng.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Old",
+ "new_version": "New",
+ "differences": "Differences"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/fra.json b/vendor/jfcherng/php-diff/src/languages/fra.json
new file mode 100644
index 0000000..a56192d
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/fra.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Avant",
+ "new_version": "Après",
+ "differences": "Différences"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/ita.json b/vendor/jfcherng/php-diff/src/languages/ita.json
new file mode 100644
index 0000000..0432bab
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/ita.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Vecchio",
+ "new_version": "Nuovo",
+ "differences": "Differenze"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/jpn.json b/vendor/jfcherng/php-diff/src/languages/jpn.json
new file mode 100644
index 0000000..72d46f6
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/jpn.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "古い",
+ "new_version": "新しい",
+ "differences": "差異"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/nob.json b/vendor/jfcherng/php-diff/src/languages/nob.json
new file mode 100644
index 0000000..7671e79
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/nob.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Tidligere versjon",
+ "new_version": "Ny versjon",
+ "differences": "Differanse"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/por.json b/vendor/jfcherng/php-diff/src/languages/por.json
new file mode 100644
index 0000000..9c48b5d
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/por.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Original",
+ "new_version": "Nova",
+ "differences": "Diferenças"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/readme.md b/vendor/jfcherng/php-diff/src/languages/readme.md
new file mode 100644
index 0000000..c7f105b
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/readme.md
@@ -0,0 +1 @@
+Please use 3-char `ISO 639-2/B` naming convention: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
diff --git a/vendor/jfcherng/php-diff/src/languages/rus.json b/vendor/jfcherng/php-diff/src/languages/rus.json
new file mode 100644
index 0000000..2d7fc8b
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/rus.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Старая версия",
+ "new_version": "Новая версия",
+ "differences": "Различия"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/spa.json b/vendor/jfcherng/php-diff/src/languages/spa.json
new file mode 100644
index 0000000..ac26acd
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/spa.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Anterior",
+ "new_version": "Nuevo",
+ "differences": "Diferencias"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/tur.json b/vendor/jfcherng/php-diff/src/languages/tur.json
new file mode 100644
index 0000000..a9ea14f
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/tur.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Eski",
+ "new_version": "Yeni",
+ "differences": "Değişiklikler"
+}
diff --git a/vendor/jfcherng/php-diff/src/languages/ukr.json b/vendor/jfcherng/php-diff/src/languages/ukr.json
new file mode 100644
index 0000000..43584d2
--- /dev/null
+++ b/vendor/jfcherng/php-diff/src/languages/ukr.json
@@ -0,0 +1,5 @@
+{
+ "old_version": "Було",
+ "new_version": "Стало",
+ "differences": "Відмінності"
+}
diff --git a/vendor/jfcherng/php-mb-string/CHANGELOG b/vendor/jfcherng/php-mb-string/CHANGELOG
new file mode 100644
index 0000000..82e930a
--- /dev/null
+++ b/vendor/jfcherng/php-mb-string/CHANGELOG
@@ -0,0 +1,62 @@
+
+VERSION 1 INIT
+===============
+
+ Version 1.4 - Add MbString::strToChars()
+ 28/05/2020 03:25 1.4.2 allow PHP 8
+ 7f8bdde chore: update deps
+ 738b66b chore: Composer PHP constrain >=7.1.3
+ 04/04/2020 01:10 1.4.1 nits
+ c6b73d9 chore: update deps
+ 66fc4ef docs: use markdown grammar badges in readme
+ 1396862 chore: $ composer fix
+ 9a7a15e chore: update deps
+ feffd7b Add PHP 8.0.0-dev benchmark result
+ 2108041 Suppress annoying PhanTypePossiblyInvalidDimOffset errors
+ 157c102 Remove unused codes
+ 42b320a Update deps
+ b19e65f Update .travis.yml to PHP 7.4 stable
+ 21/09/2019 10:17 1.4.0 initial release
+ 7a81573 Add MbString::strToChars()
+
+ Version 1.3 - Add MbString::toArraySplit()
+ 21/09/2019 10:02 1.3.2 Faster MbString::toArray()
+ 75785d5 nits
+ 4fe3304 Faster MbString::toArray()
+ d68c92d Update deps
+ 0191a10 Update readme to use badges from shields.io
+ 715f7b1 Revise docs
+ a509909 Output "Nums of Runs" in the benchmark
+ 11/07/2019 09:16 1.3.1 nits
+ e5ddaaf Add benchmark results
+ 464c021 Remove wrong demo.php
+ 649e809 Update deps
+ 24c449a Add .gitattributes
+ 37957e2 $ composer fix
+ 0bd808f Update deps
+ 8d873b7 Update .travis.yml for 7.4snapshot
+ 492dd4d Add .editorconfig
+ e554752 Update deps
+ 64f5b45 nits
+ 48d0a13 Use native namespace
+ 68e31aa Update deps
+ 22/01/2019 13:47 1.3.0 initial release
+ 5bcdcc5 Add MbString::toArraySplit()
+ 21dff79 year++
+ 8865407 Add tests for PHP 7.3
+ 6b89bec Update README
+ 9f2cef0 Update deps
+
+ Version 1.2 - init
+ 04/09/2018 18:58 1.2.4 php-cs-fixer
+ 0020f0d php-cs-fixer: enable native_constant_invocation and native_function_invocation
+ f49dd29 Update deps
+ cb21cf1 Rename CHANGELOG.md -> CHANGELOG
+ cf74396 Update deps
+ 4bb0848 Update .travis.yml
+ 18/07/2018 08:28 1.2.3 Update deps
+ 4dc8711 Add composer.lock
+ 73a7dd6 Mark ext-iconv as a requirement
+ 04/07/2018 15:28 1.2.2 nits
+ 8de1ef9 Update .rmt.yml
+ 04/07/2018 14:57 1.2.1 initial release \ No newline at end of file
diff --git a/vendor/jfcherng/php-mb-string/LICENSE b/vendor/jfcherng/php-mb-string/LICENSE
new file mode 100644
index 0000000..802609d
--- /dev/null
+++ b/vendor/jfcherng/php-mb-string/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018-2023 Jack Cherng <jfcherng@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/jfcherng/php-mb-string/README.md b/vendor/jfcherng/php-mb-string/README.md
new file mode 100644
index 0000000..1351b1e
--- /dev/null
+++ b/vendor/jfcherng/php-mb-string/README.md
@@ -0,0 +1,49 @@
+# php-mb-string
+
+[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/jfcherng/php-mb-string/php.yml?branch=master&style=flat-square)](https://github.com/jfcherng/php-mb-string/actions)
+[![Packagist](https://img.shields.io/packagist/dt/jfcherng/php-mb-string?style=flat-square)](https://packagist.org/packages/jfcherng/php-mb-string)
+[![Packagist Version](https://img.shields.io/packagist/v/jfcherng/php-mb-string?style=flat-square)](https://packagist.org/packages/jfcherng/php-mb-string)
+[![Project license](https://img.shields.io/github/license/jfcherng/php-mb-string?style=flat-square)](https://github.com/jfcherng/php-mb-string/blob/master/LICENSE)
+[![GitHub stars](https://img.shields.io/github/stars/jfcherng/php-mb-string?style=flat-square&logo=github)](https://github.com/jfcherng/php-mb-string/stargazers)
+[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-blue.svg?style=flat-square&logo=paypal)](https://www.paypal.me/jfcherng/5usd)
+
+A high performance multibyte sting implementation for frequently reading/writing operations.
+
+## Why I Write This Package?
+
+Consider that you have a **LONG** multibyte string and
+you want to do lots of following operations on it.
+
+- Random reading/writing such as `$char = $str[5];` or `$str[5] = '許';`.
+- Replacement such as `str_replace($search, $replace, $str);`.
+- Insertion such as `substr_replace($insert, $str, $position, 0);`.
+- Get substring such as `substr($str, $start, $length);`.
+
+Because strings in PHP are not UTF-8, to do operations above safely,
+you have to either use `mb_*()` functions or calculate the index by yourself.
+Using `mb_*()` functions frequently can be a performance loss because it has
+to re-decode the source string basing on the given encoding every time when you call it.
+The longer the string is, the severer the problem becomes.
+
+Instead, this class internally stores the string in its UTF-32 form,
+which is fixed-width (1 char always occupies 4 bytes) so we are able to
+perform speedy random accesses. With the power of random access, we could
+use `str_*()` functions to do the job internally.
+
+## Installation
+
+```bash
+composer require jfcherng/php-mb-string
+```
+
+## Example
+
+See [tests/MbStringTest.php](https://github.com/jfcherng/php-mb-string/blob/master/tests/MbStringTest.php).
+
+## Benchmark
+
+See [benchmark/\_results.txt](https://github.com/jfcherng/php-mb-string/blob/master/benchmark/_results.txt).
+
+## What Are You Doing With This Package?
+
+I develop this for a PHP diff package, [jfcherng/php-diff](https://github.com/jfcherng/php-diff).
diff --git a/vendor/jfcherng/php-mb-string/composer.json b/vendor/jfcherng/php-mb-string/composer.json
new file mode 100644
index 0000000..6a3893f
--- /dev/null
+++ b/vendor/jfcherng/php-mb-string/composer.json
@@ -0,0 +1,53 @@
+{
+ "name": "jfcherng/php-mb-string",
+ "description": "A high performance multibytes sting implementation for frequently reading/writing operations.",
+ "type": "library",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ }
+ ],
+ "minimum-stability": "beta",
+ "prefer-stable": true,
+ "autoload": {
+ "psr-4": {
+ "Jfcherng\\Utility\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Jfcherng\\Utility\\Test\\": "tests/"
+ }
+ },
+ "config": {
+ "platform": {
+ "php": "7.1.3"
+ },
+ "sort-packages": true
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.18",
+ "phan/phan": "^2 || ^3 || ^4",
+ "phpunit/phpunit": "^7.2 || ^8 || ^9"
+ },
+ "suggest": {
+ "ext-iconv": "Either \"ext-iconv\" or \"ext-mbstring\" is requried.",
+ "ext-mbstring": "Either \"ext-iconv\" or \"ext-mbstring\" is requried."
+ },
+ "scripts": {
+ "analyze": [
+ "phan --color"
+ ],
+ "fix": [
+ "php-cs-fixer fix --verbose"
+ ],
+ "test": [
+ "phpunit --verbose"
+ ]
+ }
+}
diff --git a/vendor/jfcherng/php-mb-string/composer.lock b/vendor/jfcherng/php-mb-string/composer.lock
new file mode 100644
index 0000000..9c0b44b
--- /dev/null
+++ b/vendor/jfcherng/php-mb-string/composer.lock
@@ -0,0 +1,3692 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "273c418cbd0be7ac69147b8bd55cc633",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "composer/semver",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "0ec124f57c7e23925c006cbad0de853e3aec3ba2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/0ec124f57c7e23925c006cbad0de853e3aec3ba2",
+ "reference": "0ec124f57c7e23925c006cbad0de853e3aec3ba2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.19",
+ "phpunit/phpunit": "^4.5 || ^5.0.5 || ^7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-21T13:19:12+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "1.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "f27e06cd9675801df441b3656569b328e04aa37c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c",
+ "reference": "f27e06cd9675801df441b3656569b328e04aa37c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/1.4.6"
+ },
+ "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-03-25T17:01:18+00:00"
+ },
+ {
+ "name": "doctrine/annotations",
+ "version": "1.14.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1 || ^2",
+ "ext-tokenizer": "*",
+ "php": "^7.1 || ^8.0",
+ "psr/cache": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "doctrine/cache": "^1.11 || ^2.0",
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "~1.4.10 || ^1.8.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "vimeo/psalm": "^4.10"
+ },
+ "suggest": {
+ "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/annotations/issues",
+ "source": "https://github.com/doctrine/annotations/tree/1.14.3"
+ },
+ "time": "2023-02-01T09:20:38+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpunit/phpunit": "^7.5|^8.5|^9.5",
+ "psr/log": "^1|^2|^3"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
+ },
+ "time": "2022-05-02T15:47:09+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.30 || ^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-30T00:15:36+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^4.11 || ^5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-14T08:49:07+00:00"
+ },
+ {
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.2.1",
+ "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"
+ },
+ "type": "library",
+ "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"
+ },
+ "time": "2021-06-11T22:34:44+00:00"
+ },
+ {
+ "name": "friendsofphp/php-cs-fixer",
+ "version": "v2.19.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
+ "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
+ "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
+ "composer/xdebug-handler": "^1.2 || ^2.0",
+ "doctrine/annotations": "^1.2",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": "^5.6 || ^7.0 || ^8.0",
+ "php-cs-fixer/diff": "^1.3",
+ "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0",
+ "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
+ "symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
+ "symfony/finder": "^3.0 || ^4.0 || ^5.0",
+ "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
+ "symfony/polyfill-php70": "^1.0",
+ "symfony/polyfill-php72": "^1.4",
+ "symfony/process": "^3.0 || ^4.0 || ^5.0",
+ "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
+ },
+ "require-dev": {
+ "justinrainbow/json-schema": "^5.0",
+ "keradus/cli-executor": "^1.4",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.4.2",
+ "php-cs-fixer/accessible-object": "^1.0",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
+ "phpspec/prophecy-phpunit": "^1.1 || ^2.0",
+ "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5",
+ "phpunitgoodpractices/polyfill": "^1.5",
+ "phpunitgoodpractices/traits": "^1.9.1",
+ "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1",
+ "symfony/phpunit-bridge": "^5.2.1",
+ "symfony/yaml": "^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "ext-dom": "For handling output formats in XML",
+ "ext-mbstring": "For handling non-UTF8 characters.",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
+ "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
+ },
+ "bin": [
+ "php-cs-fixer"
+ ],
+ "type": "application",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.19-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpCsFixer\\": "src/"
+ },
+ "classmap": [
+ "tests/Test/AbstractFixerTestCase.php",
+ "tests/Test/AbstractIntegrationCaseFactory.php",
+ "tests/Test/AbstractIntegrationTestCase.php",
+ "tests/Test/Assert/AssertTokensTrait.php",
+ "tests/Test/IntegrationCase.php",
+ "tests/Test/IntegrationCaseFactory.php",
+ "tests/Test/IntegrationCaseFactoryInterface.php",
+ "tests/Test/InternalIntegrationCaseFactory.php",
+ "tests/Test/IsIdenticalConstraint.php",
+ "tests/Test/TokensWithObservedTransformers.php",
+ "tests/TestCase.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Dariusz Rumiński",
+ "email": "dariusz.ruminski@gmail.com"
+ }
+ ],
+ "description": "A tool to automatically fix PHP code style",
+ "support": {
+ "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
+ "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/keradus",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-15T17:17:55+00:00"
+ },
+ {
+ "name": "microsoft/tolerant-php-parser",
+ "version": "v0.0.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/microsoft/tolerant-php-parser.git",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "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/master"
+ },
+ "time": "2020-02-18T02:57:19+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-08T13:26:56+00:00"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v2.1.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"
+ },
+ "type": "library",
+ "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/master"
+ },
+ "time": "2020-04-16T18:48:43+00:00"
+ },
+ {
+ "name": "phan/phan",
+ "version": "2.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phan/phan.git",
+ "reference": "37024c7c84ca153f8f7311db24f08d82ca5a237f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phan/phan/zipball/37024c7c84ca153f8f7311db24f08d82ca5a237f",
+ "reference": "37024c7c84ca153f8f7311db24f08d82ca5a237f",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4|^2.0",
+ "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."
+ },
+ "bin": [
+ "phan",
+ "phan_client",
+ "tocheckstyle"
+ ],
+ "type": "project",
+ "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/v2"
+ },
+ "time": "2020-07-02T01:28:55+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^2.0",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/master"
+ },
+ "time": "2018-07-08T19:23:20+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/master"
+ },
+ "time": "2018-07-08T19:19:57+00:00"
+ },
+ {
+ "name": "php-cs-fixer/diff",
+ "version": "v1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-CS-Fixer/diff.git",
+ "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759",
+ "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
+ "symfony/process": "^3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "SpacePossum"
+ }
+ ],
+ "description": "sebastian/diff v2 backport support for PHP5.6",
+ "homepage": "https://github.com/PHP-CS-Fixer",
+ "keywords": [
+ "diff"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-CS-Fixer/diff/issues",
+ "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1"
+ },
+ "abandoned": true,
+ "time": "2020-10-14T08:39:05+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.1.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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master"
+ },
+ "time": "2020-04-27T09:25:28+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "4.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+ "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
+ "webmozart/assert": "^1.0"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "^1.0.5",
+ "mockery/mockery": "^1.0",
+ "phpdocumentor/type-resolver": "0.4.*",
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x"
+ },
+ "time": "2019-12-28T18:55:12+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1",
+ "phpdocumentor/reflection-common": "^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "^7.1",
+ "mockery/mockery": "~1",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "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/0.7.2"
+ },
+ "time": "2019-08-22T18:11:29+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.10.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.5 || ^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
+ },
+ "time": "2020-03-05T15:02:03+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "6.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.1",
+ "phpunit/php-file-iterator": "^2.0",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
+ "sebastian/environment": "^3.1 || ^4.0",
+ "sebastian/version": "^2.0.1",
+ "theseer/tokenizer": "^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "suggest": {
+ "ext-xdebug": "^2.6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master"
+ },
+ "time": "2018-10-31T16:06:48+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:42:26+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
+ },
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:20:02+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "3.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
+ "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "abandoned": true,
+ "time": "2021-07-26T12:15:06+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "7.5.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "^1.7",
+ "phar-io/manifest": "^1.0.2",
+ "phar-io/version": "^2.0",
+ "php": "^7.1",
+ "phpspec/prophecy": "^1.7",
+ "phpunit/php-code-coverage": "^6.0.7",
+ "phpunit/php-file-iterator": "^2.0.1",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-timer": "^2.1",
+ "sebastian/comparator": "^3.0",
+ "sebastian/diff": "^3.0",
+ "sebastian/environment": "^4.0",
+ "sebastian/exporter": "^3.1",
+ "sebastian/global-state": "^2.0",
+ "sebastian/object-enumerator": "^3.0.3",
+ "sebastian/resource-operations": "^2.0",
+ "sebastian/version": "^2.0.1"
+ },
+ "conflict": {
+ "phpunit/phpunit-mock-objects": "*"
+ },
+ "require-dev": {
+ "ext-pdo": "*"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*",
+ "phpunit/php-invoker": "^2.0"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.5-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20"
+ },
+ "time": "2020-01-08T08:45:45+00:00"
+ },
+ {
+ "name": "psr/cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/master"
+ },
+ "time": "2016-08-06T20:24:11+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/master"
+ },
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "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"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "sabre/event",
+ "version": "5.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sabre-io/event.git",
+ "reference": "d7da22897125d34d7eddf7977758191c06a74497"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497",
+ "reference": "d7da22897125d34d7eddf7977758191c06a74497",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.17.1",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/coroutine.php",
+ "lib/Loop/functions.php",
+ "lib/Promise/functions.php"
+ ],
+ "psr-4": {
+ "Sabre\\Event\\": "lib/"
+ }
+ },
+ "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"
+ },
+ "time": "2021-11-04T06:51:17+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:15:22+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "3.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "sebastian/diff": "^3.0",
+ "sebastian/exporter": "^3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:31:48+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211",
+ "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8.0",
+ "symfony/process": "^2 || ^3.3 || ^4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:59:04+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "4.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:53:42+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T06:00:17+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0"
+ },
+ "time": "2017-04-27T15:39:26+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "sebastian/object-reflector": "^1.1.1",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:40:27+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:37:18+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:34:24+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:30:19+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/master"
+ },
+ "time": "2016-10-03T07:35:21+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v4.4.49",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/event-dispatcher": "<4.3|>=5",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<3.3"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/event-dispatcher": "^4.3",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^3.4|^4.0|^5.0",
+ "symfony/var-dumper": "^4.3|^5.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "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",
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v4.4.49"
+ },
+ "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": "2022-11-05T17:10:16+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/event-dispatcher-contracts": "^1.1",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "1.1"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/error-handler": "~3.4|~4.4",
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
+ "symfony/http-foundation": "^3.4|^4.0|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/stopwatch": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44"
+ },
+ "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": "2022-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "suggest": {
+ "psr/event-dispatcher": "",
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "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 dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13"
+ },
+ "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": "2022-01-02T09:41:36+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v4.4.42",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5",
+ "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v4.4.42"
+ },
+ "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": "2022-05-20T08:49:14+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v4.4.44"
+ },
+ "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": "2022-07-29T07:35:46+00:00"
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "583f56160f716dd435f1cd721fd14b548f4bb510"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510",
+ "reference": "583f56160f716dd435f1cd721fd14b548f4bb510",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "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": "Provides an improved replacement for the array_replace PHP function",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/options-resolver/tree/v4.4.44"
+ },
+ "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": "2022-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php70",
+ "version": "v1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php70.git",
+ "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
+ "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "metapackage",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.20-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.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": "2020-10-23T14:02:19+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v4.4.44"
+ },
+ "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": "2022-06-27T13:16:42+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "psr/container": "^1.0"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "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/v1.1.13"
+ },
+ "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": "2022-05-27T14:01:05+00:00"
+ },
+ {
+ "name": "symfony/stopwatch",
+ "version": "v4.4.46",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/stopwatch.git",
+ "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/757660703fbd139eea0001b759c6c3bf5bc3ea52",
+ "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/service-contracts": "^1.0|^2"
+ },
+ "require-dev": {
+ "symfony/polyfill-php72": "~1.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Stopwatch\\": ""
+ },
+ "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": "Provides a way to profile code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/stopwatch/tree/v4.4.46"
+ },
+ "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": "2022-09-28T12:53:24+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/master"
+ },
+ "time": "2019-06-13T22:48:21+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<3.9.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+ },
+ "type": "library",
+ "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.9.1"
+ },
+ "time": "2020-07-08T17:02:28+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "beta",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=7.1.3"
+ },
+ "platform-dev": [],
+ "platform-overrides": {
+ "php": "7.1.3"
+ },
+ "plugin-api-version": "2.3.0"
+}
diff --git a/vendor/jfcherng/php-mb-string/src/MbString.php b/vendor/jfcherng/php-mb-string/src/MbString.php
new file mode 100644
index 0000000..6f7d31f
--- /dev/null
+++ b/vendor/jfcherng/php-mb-string/src/MbString.php
@@ -0,0 +1,404 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Utility;
+
+/**
+ * An internal UTF-32 multi-bytes string class.
+ *
+ * Because UTF-8 is varied-width, mb_*() is kinda O(n) when doing decoding.
+ * Using iconv() to make it UTF-32 and work with str*() can be possibly faster.
+ *
+ * UTF-32 is a fix-width encoding (1 char = 4 bytes).
+ * Note that the first 4 bytes in a UTF-32 string is the header (endian bytes).
+ *
+ * @author Jack Cherng <jfcherng@gmail.com>
+ */
+class MbString extends \ArrayObject
+{
+ public const MBSTRING_CONVMETHOD_ICONV = 1;
+ public const MBSTRING_CONVMETHOD_MBSTRING = 2;
+
+ /**
+ * The way to convert text encoding.
+ *
+ * @var int
+ */
+ public static $convMethod;
+
+ /**
+ * UTF-32 string without endian bytes.
+ *
+ * @var string
+ */
+ protected $str;
+
+ /**
+ * The original encoding.
+ *
+ * @var string
+ */
+ protected $encoding;
+
+ /**
+ * The endian bytes for UTF-32.
+ *
+ * @var string
+ */
+ protected static $utf32Header;
+
+ /**
+ * The constructor.
+ *
+ * @param string $str the string
+ * @param string $encoding the encoding
+ */
+ public function __construct(string $str = '', string $encoding = 'UTF-8')
+ {
+ static::$convMethod = static::$convMethod ?? static::detectConvEncoding();
+ static::$utf32Header = static::$utf32Header ?? static::getUtf32Header();
+
+ $this->encoding = $encoding;
+ $this->set($str);
+ }
+
+ /**
+ * Returns a string representation of the object.
+ *
+ * @return string string representation of the object
+ */
+ public function __toString(): string
+ {
+ return $this->get();
+ }
+
+ /**
+ * The string setter.
+ *
+ * @param string $str the string
+ */
+ public function set(string $str): self
+ {
+ $this->str = $this->inputConv($str);
+
+ return $this;
+ }
+
+ public function setAt(int $idx, string $char): self
+ {
+ $char = $this->inputConv($char);
+ if (\strlen($char) > 4) {
+ $char = \substr($char, 0, 4);
+ }
+
+ $spacesPrepend = $idx - $this->strlen();
+ // set index (out of bound)
+ if ($spacesPrepend > 0) {
+ $this->str .= $this->inputConv(\str_repeat(' ', $spacesPrepend)) . $char;
+ }
+ // set index (in bound)
+ else {
+ $this->str = \substr_replace($this->str, $char, $idx << 2, 4);
+ }
+
+ return $this;
+ }
+
+ /**
+ * The string getter.
+ */
+ public function get(): string
+ {
+ return $this->outputConv($this->str);
+ }
+
+ /**
+ * The raw string getter.
+ *
+ * @return string the UTF-32-encoded raw string
+ */
+ public function getRaw(): string
+ {
+ return $this->str;
+ }
+
+ public function getAt(int $idx): string
+ {
+ return $this->outputConv(\substr($this->str, $idx << 2, 4));
+ }
+
+ public function getAtRaw(int $idx): string
+ {
+ return \substr($this->str, $idx << 2, 4);
+ }
+
+ public function toArray(): array
+ {
+ return self::strToChars($this->get());
+ }
+
+ public function toArraySplit(string $regex, int $limit = -1, $flags = 0): array
+ {
+ if ($this->str === '') {
+ return [];
+ }
+
+ return \preg_split($regex, $this->get(), $limit, $flags);
+ }
+
+ public function toArrayRaw(): array
+ {
+ if ($this->str === '') {
+ return [];
+ }
+
+ return \str_split($this->str, 4);
+ }
+
+ public static function strToChars(string $str): array
+ {
+ return \preg_split('//uS', $str, -1, \PREG_SPLIT_NO_EMPTY) ?: [];
+ }
+
+ ///////////////////////////////////
+ // string manipulation functions //
+ ///////////////////////////////////
+
+ public function stripos(string $needle, int $offset = 0)
+ {
+ $needle = $this->inputConv($needle);
+ $pos = \stripos($this->str, $needle, $offset << 2);
+
+ return \is_bool($pos) ? $pos : $pos >> 2;
+ }
+
+ public function strlen(): int
+ {
+ return \strlen($this->str) >> 2;
+ }
+
+ public function strpos(string $needle, int $offset = 0)
+ {
+ $needle = $this->inputConv($needle);
+ $pos = \strpos($this->str, $needle, $offset << 2);
+
+ return \is_bool($pos) ? $pos : $pos >> 2;
+ }
+
+ public function substr(int $start = 0, ?int $length = null): string
+ {
+ return $this->outputConv(
+ isset($length)
+ ? \substr($this->str, $start << 2, $length << 2)
+ : \substr($this->str, $start << 2)
+ );
+ }
+
+ public function substr_replace(string $replacement, int $start = 0, ?int $length = null): string
+ {
+ $replacement = $this->inputConv($replacement);
+
+ return $this->outputConv(
+ isset($length)
+ ? \substr_replace($this->str, $replacement, $start << 2, $length << 2)
+ : \substr_replace($this->str, $replacement, $start << 2)
+ );
+ }
+
+ public function strtolower(): string
+ {
+ return \strtolower($this->get());
+ }
+
+ public function strtoupper(): string
+ {
+ return \strtoupper($this->get());
+ }
+
+ ////////////////////////////////
+ // non-manipulative functions //
+ ////////////////////////////////
+
+ public function has(string $needle): bool
+ {
+ $needle = $this->inputConv($needle);
+
+ return \strpos($this->str, $needle) !== false;
+ }
+
+ public function startsWith(string $needle): bool
+ {
+ $needle = $this->inputConv($needle);
+
+ return $needle === \substr($this->str, 0, \strlen($needle));
+ }
+
+ public function endsWith(string $needle): bool
+ {
+ $needle = $this->inputConv($needle);
+ $length = \strlen($needle);
+
+ return $length === 0 ? true : $needle === \substr($this->str, -$length);
+ }
+
+ /////////////////////////////////////////////
+ // those functions will not return a value //
+ /////////////////////////////////////////////
+
+ public function str_insert_i(string $insert, int $position): self
+ {
+ $insert = $this->inputConv($insert);
+ $this->str = \substr_replace($this->str, $insert, $position << 2, 0);
+
+ return $this;
+ }
+
+ public function str_enclose_i(array $closures, int $start = 0, ?int $length = null): self
+ {
+ // ex: $closures = array('{', '}');
+ foreach ($closures as &$closure) {
+ $closure = $this->inputConv($closure);
+ }
+ unset($closure);
+
+ if (\count($closures) < 2) {
+ $closures[0] = $closures[1] = \reset($closures);
+ }
+
+ if (isset($length)) {
+ $replacement = $closures[0] . \substr($this->str, $start << 2, $length << 2) . $closures[1];
+ $this->str = \substr_replace($this->str, $replacement, $start << 2, $length << 2);
+ } else {
+ $replacement = $closures[0] . \substr($this->str, $start << 2) . $closures[1];
+ $this->str = \substr_replace($this->str, $replacement, $start << 2);
+ }
+
+ return $this;
+ }
+
+ public function str_replace_i(string $search, string $replace): self
+ {
+ $search = $this->inputConv($search);
+ $replace = $this->inputConv($replace);
+ $this->str = \str_replace($search, $replace, $this->str);
+
+ return $this;
+ }
+
+ public function substr_replace_i(string $replacement, int $start = 0, ?int $length = null): self
+ {
+ $replacement = $this->inputConv($replacement);
+ $this->str = (
+ isset($length)
+ ? \substr_replace($this->str, $replacement, $start << 2, $length << 2)
+ : \substr_replace($this->str, $replacement, $start << 2)
+ );
+
+ return $this;
+ }
+
+ /////////////////
+ // ArrayObject //
+ /////////////////
+
+ #[\ReturnTypeWillChange]
+ public function offsetSet($idx, $char): void
+ {
+ $this->setAt($idx, $char);
+ }
+
+ #[\ReturnTypeWillChange]
+ public function offsetGet($idx): string
+ {
+ return $this->getAt($idx);
+ }
+
+ #[\ReturnTypeWillChange]
+ public function offsetExists($idx): bool
+ {
+ return \is_int($idx) ? $this->strlen() > $idx : false;
+ }
+
+ #[\ReturnTypeWillChange]
+ public function append($str): void
+ {
+ $this->str .= $this->inputConv($str);
+ }
+
+ public function count(): int
+ {
+ return $this->strlen();
+ }
+
+ ////////////////////
+ // misc functions //
+ ////////////////////
+
+ /**
+ * Gets the utf 32 header.
+ *
+ * @return string the UTF-32 header or empty string
+ */
+ protected static function getUtf32Header(): string
+ {
+ // just use any string to get the endian header, here we use "A"
+ $tmp = self::convEncoding('A', 'UTF-8', 'UTF-32');
+ // some distributions like "php alpine" docker image won't generate the header
+ return $tmp && \strlen($tmp) > 4 ? \substr($tmp, 0, 4) : '';
+ }
+
+ protected static function detectConvEncoding(): int
+ {
+ if (\function_exists('iconv') && \iconv('UTF-8', 'UTF-32', 'A') !== false) {
+ return static::MBSTRING_CONVMETHOD_ICONV;
+ }
+
+ if (\function_exists('mb_convert_encoding') && \mb_convert_encoding('A', 'UTF-32', 'UTF-8') !== false) {
+ return static::MBSTRING_CONVMETHOD_MBSTRING;
+ }
+
+ throw new \RuntimeException('Either "iconv" or "mbstring" extension is required.');
+ }
+
+ protected static function convEncoding(string $str, string $from, string $to): string
+ {
+ if (static::$convMethod === static::MBSTRING_CONVMETHOD_ICONV) {
+ return \iconv($from, $to, $str);
+ }
+
+ if (static::$convMethod === static::MBSTRING_CONVMETHOD_MBSTRING) {
+ return \mb_convert_encoding($str, $to, $from);
+ }
+
+ throw new \RuntimeException('Unknown conversion method.');
+ }
+
+ /**
+ * Convert the output string to its original encoding.
+ *
+ * @param string $str The string
+ */
+ protected function outputConv(string $str): string
+ {
+ if ($str === '') {
+ return '';
+ }
+
+ return static::convEncoding(static::$utf32Header . $str, 'UTF-32', $this->encoding);
+ }
+
+ /**
+ * Convert the input string to UTF-32 without header.
+ *
+ * @param string $str The string
+ */
+ protected function inputConv(string $str): string
+ {
+ if ($str === '') {
+ return '';
+ }
+
+ return \substr(static::convEncoding($str, $this->encoding, 'UTF-32'), \strlen(static::$utf32Header));
+ }
+}
diff --git a/vendor/jfcherng/php-sequence-matcher/.php-cs-fixer.dist.php b/vendor/jfcherng/php-sequence-matcher/.php-cs-fixer.dist.php
new file mode 100644
index 0000000..1878a60
--- /dev/null
+++ b/vendor/jfcherng/php-sequence-matcher/.php-cs-fixer.dist.php
@@ -0,0 +1,78 @@
+<?php
+
+$config = (new PhpCsFixer\Config())
+ ->setIndent(" ")
+ ->setLineEnding("\n")
+ ->setCacheFile(__DIR__ . '/.php-cs-fixer.cache')
+ ->setRiskyAllowed(true)
+ ->setRules([
+ '@PHP71Migration' => true,
+ '@PHP73Migration' => false,
+ '@PhpCsFixer' => true,
+ '@PhpCsFixer:risky' => true,
+ '@PSR12' => true,
+ '@Symfony' => true,
+ '@Symfony:risky' => true,
+ 'align_multiline_comment' => true,
+ 'array_indentation' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+ 'combine_consecutive_issets' => true,
+ 'combine_consecutive_unsets' => true,
+ 'combine_nested_dirname' => true,
+ 'comment_to_phpdoc' => true,
+ 'compact_nullable_typehint' => true,
+ 'concat_space' => ['spacing' => 'one'],
+ 'escape_implicit_backslashes' => false,
+ 'fully_qualified_strict_types' => true,
+ 'linebreak_after_opening_tag' => true,
+ 'list_syntax' => ['syntax' => 'short'],
+ 'method_argument_space' => ['ensure_fully_multiline' => true],
+ 'native_constant_invocation' => true,
+ 'native_function_invocation' => true,
+ 'native_function_type_declaration_casing' => true,
+ 'no_alternative_syntax' => true,
+ 'no_multiline_whitespace_before_semicolons' => true,
+ 'no_null_property_initialization' => true,
+ 'no_short_echo_tag' => true,
+ 'no_superfluous_elseif' => true,
+ 'no_trailing_whitespace_in_string' => false, // test cases have trailing spaces
+ 'no_unneeded_control_parentheses' => true,
+ 'no_useless_else' => true,
+ 'no_useless_return' => true,
+ 'not_operator_with_space' => false,
+ 'not_operator_with_successor_space' => false,
+ 'ordered_class_elements' => true,
+ 'ordered_imports' => ['sort_algorithm' => 'alpha', 'imports_order' => ['class', 'const', 'function']],
+ 'ordered_interfaces' => true,
+ 'php_unit_ordered_covers' => true,
+ 'php_unit_set_up_tear_down_visibility' => true,
+ 'php_unit_strict' => true,
+ 'php_unit_test_class_requires_covers' => true,
+ 'phpdoc_add_missing_param_annotation' => true,
+ 'phpdoc_order' => true,
+ 'phpdoc_to_comment' => false,
+ 'phpdoc_types_order' => true,
+ 'pow_to_exponentiation' => true,
+ 'random_api_migration' => true,
+ 'return_assignment' => false,
+ 'simple_to_complex_string_variable' => true,
+ 'single_line_comment_style' => true,
+ 'single_trait_insert_per_statement' => true,
+ 'strict_comparison' => false,
+ 'strict_param' => false,
+ 'string_line_ending' => true,
+ 'yoda_style' => false,
+ ])
+ ->setFinder(
+ PhpCsFixer\Finder::create()
+ ->notPath('/branch-\\w+/') // git worktree
+ ->exclude('libs')
+ ->exclude('tests/data')
+ ->exclude('tests/Fixtures')
+ ->exclude('var')
+ ->exclude('vendor')
+ ->in(__DIR__)
+ )
+;
+
+return $config;
diff --git a/vendor/jfcherng/php-sequence-matcher/LICENSE b/vendor/jfcherng/php-sequence-matcher/LICENSE
new file mode 100644
index 0000000..3e83a5a
--- /dev/null
+++ b/vendor/jfcherng/php-sequence-matcher/LICENSE
@@ -0,0 +1,31 @@
+BSD 3-Clause License
+
+Copyright (c) 2019-2023 Jack Cherng <jfcherng@gmail.com>
+Copyright (c) 2009 Chris Boulton <chris.boulton@interspire.com>
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/jfcherng/php-sequence-matcher/README.md b/vendor/jfcherng/php-sequence-matcher/README.md
new file mode 100644
index 0000000..4b3f126
--- /dev/null
+++ b/vendor/jfcherng/php-sequence-matcher/README.md
@@ -0,0 +1,28 @@
+# php-sequence-matcher
+
+[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/jfcherng/php-sequence-matcher/php.yml?branch=master&style=flat-square)](https://github.com/jfcherng/php-sequence-matcher/actions)
+[![Codacy grade](https://img.shields.io/codacy/grade/f7073c3f03784bf39ed41f41f0d3fc8c/master?style=flat-square)](https://app.codacy.com/project/jfcherng/php-sequence-matcher/dashboard)
+[![Packagist](https://img.shields.io/packagist/dt/jfcherng/php-sequence-matcher?style=flat-square)](https://packagist.org/packages/jfcherng/php-sequence-matcher)
+[![Packagist Version](https://img.shields.io/packagist/v/jfcherng/php-sequence-matcher?style=flat-square)](https://packagist.org/packages/jfcherng/php-sequence-matcher)
+[![Project license](https://img.shields.io/github/license/jfcherng/php-sequence-matcher?style=flat-square)](https://github.com/jfcherng/php-sequence-matcher/blob/master/LICENSE)
+[![GitHub stars](https://img.shields.io/github/stars/jfcherng/php-sequence-matcher?style=flat-square&logo=github)](https://github.com/jfcherng/php-sequence-matcher/stargazers)
+[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-blue.svg?style=flat-square&logo=paypal)](https://www.paypal.me/jfcherng/5usd)
+
+A longest sequence matcher. The logic is primarily based on the Python [difflib](https://docs.python.org/3/library/difflib.html) package.
+
+
+## Requirements
+
+![php](https://img.shields.io/badge/php-%5E7.1.3-blue?style=flat-square)
+
+
+## Installation
+
+```bash
+composer require jfcherng/php-sequence-matcher
+```
+
+
+## Acknowledgment
+
+This package is stripped from [chrisboulton/php-diff](https://github.com/chrisboulton/php-diff) with some modifications.
diff --git a/vendor/jfcherng/php-sequence-matcher/composer.json b/vendor/jfcherng/php-sequence-matcher/composer.json
new file mode 100644
index 0000000..0bc45dc
--- /dev/null
+++ b/vendor/jfcherng/php-sequence-matcher/composer.json
@@ -0,0 +1,55 @@
+{
+ "name": "jfcherng/php-sequence-matcher",
+ "description": "A longest sequence matcher. The logic is primarily based on the Python difflib package.",
+ "type": "library",
+ "license": "BSD-3-Clause",
+ "minimum-stability": "beta",
+ "prefer-stable": true,
+ "authors": [
+ {
+ "name": "Jack Cherng",
+ "email": "jfcherng@gmail.com"
+ },
+ {
+ "name": "Chris Boulton",
+ "email": "chris.boulton@interspire.com"
+ }
+ ],
+ "autoload": {
+ "psr-4": {
+ "Jfcherng\\Diff\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Jfcherng\\Diff\\Test\\": "tests/"
+ }
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.19",
+ "phan/phan": "^2.5 || ^3 || ^4 || ^5",
+ "phpunit/phpunit": ">=7 <10",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "config": {
+ "platform": {
+ "php": "7.1.3"
+ },
+ "sort-packages": true
+ },
+ "scripts": {
+ "analyze": [
+ "phan --color",
+ "phpcs --colors -n"
+ ],
+ "fix": [
+ "php-cs-fixer fix --verbose"
+ ],
+ "test": [
+ "phpunit --verbose"
+ ]
+ }
+}
diff --git a/vendor/jfcherng/php-sequence-matcher/composer.lock b/vendor/jfcherng/php-sequence-matcher/composer.lock
new file mode 100644
index 0000000..85f5d7d
--- /dev/null
+++ b/vendor/jfcherng/php-sequence-matcher/composer.lock
@@ -0,0 +1,3749 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "03047b7ff229083d937c8cd924ab500c",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "composer/semver",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "0ec124f57c7e23925c006cbad0de853e3aec3ba2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/0ec124f57c7e23925c006cbad0de853e3aec3ba2",
+ "reference": "0ec124f57c7e23925c006cbad0de853e3aec3ba2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.19",
+ "phpunit/phpunit": "^4.5 || ^5.0.5 || ^7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/2.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-21T13:19:12+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "1.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "f27e06cd9675801df441b3656569b328e04aa37c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c",
+ "reference": "f27e06cd9675801df441b3656569b328e04aa37c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/1.4.6"
+ },
+ "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-03-25T17:01:18+00:00"
+ },
+ {
+ "name": "doctrine/annotations",
+ "version": "1.14.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/annotations.git",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1 || ^2",
+ "ext-tokenizer": "*",
+ "php": "^7.1 || ^8.0",
+ "psr/cache": "^1 || ^2 || ^3"
+ },
+ "require-dev": {
+ "doctrine/cache": "^1.11 || ^2.0",
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "~1.4.10 || ^1.8.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "vimeo/psalm": "^4.10"
+ },
+ "suggest": {
+ "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Docblock Annotations Parser",
+ "homepage": "https://www.doctrine-project.org/projects/annotations.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/annotations/issues",
+ "source": "https://github.com/doctrine/annotations/tree/1.14.3"
+ },
+ "time": "2023-02-01T09:20:38+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpunit/phpunit": "^7.5|^8.5|^9.5",
+ "psr/log": "^1|^2|^3"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
+ },
+ "time": "2022-05-02T15:47:09+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.30 || ^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-30T00:15:36+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^4.11 || ^5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+ "keywords": [
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-14T08:49:07+00:00"
+ },
+ {
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.2.1",
+ "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"
+ },
+ "type": "library",
+ "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"
+ },
+ "time": "2021-06-11T22:34:44+00:00"
+ },
+ {
+ "name": "friendsofphp/php-cs-fixer",
+ "version": "v2.19.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
+ "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
+ "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
+ "composer/xdebug-handler": "^1.2 || ^2.0",
+ "doctrine/annotations": "^1.2",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": "^5.6 || ^7.0 || ^8.0",
+ "php-cs-fixer/diff": "^1.3",
+ "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0",
+ "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
+ "symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
+ "symfony/finder": "^3.0 || ^4.0 || ^5.0",
+ "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
+ "symfony/polyfill-php70": "^1.0",
+ "symfony/polyfill-php72": "^1.4",
+ "symfony/process": "^3.0 || ^4.0 || ^5.0",
+ "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
+ },
+ "require-dev": {
+ "justinrainbow/json-schema": "^5.0",
+ "keradus/cli-executor": "^1.4",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.4.2",
+ "php-cs-fixer/accessible-object": "^1.0",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
+ "phpspec/prophecy-phpunit": "^1.1 || ^2.0",
+ "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5",
+ "phpunitgoodpractices/polyfill": "^1.5",
+ "phpunitgoodpractices/traits": "^1.9.1",
+ "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1",
+ "symfony/phpunit-bridge": "^5.2.1",
+ "symfony/yaml": "^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "ext-dom": "For handling output formats in XML",
+ "ext-mbstring": "For handling non-UTF8 characters.",
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
+ "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
+ },
+ "bin": [
+ "php-cs-fixer"
+ ],
+ "type": "application",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.19-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpCsFixer\\": "src/"
+ },
+ "classmap": [
+ "tests/Test/AbstractFixerTestCase.php",
+ "tests/Test/AbstractIntegrationCaseFactory.php",
+ "tests/Test/AbstractIntegrationTestCase.php",
+ "tests/Test/Assert/AssertTokensTrait.php",
+ "tests/Test/IntegrationCase.php",
+ "tests/Test/IntegrationCaseFactory.php",
+ "tests/Test/IntegrationCaseFactoryInterface.php",
+ "tests/Test/InternalIntegrationCaseFactory.php",
+ "tests/Test/IsIdenticalConstraint.php",
+ "tests/Test/TokensWithObservedTransformers.php",
+ "tests/TestCase.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Dariusz Rumiński",
+ "email": "dariusz.ruminski@gmail.com"
+ }
+ ],
+ "description": "A tool to automatically fix PHP code style",
+ "support": {
+ "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
+ "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/keradus",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-15T17:17:55+00:00"
+ },
+ {
+ "name": "microsoft/tolerant-php-parser",
+ "version": "v0.0.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/microsoft/tolerant-php-parser.git",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "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/master"
+ },
+ "time": "2020-02-18T02:57:19+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-08T13:26:56+00:00"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v2.1.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"
+ },
+ "type": "library",
+ "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/master"
+ },
+ "time": "2020-04-16T18:48:43+00:00"
+ },
+ {
+ "name": "phan/phan",
+ "version": "2.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phan/phan.git",
+ "reference": "37024c7c84ca153f8f7311db24f08d82ca5a237f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phan/phan/zipball/37024c7c84ca153f8f7311db24f08d82ca5a237f",
+ "reference": "37024c7c84ca153f8f7311db24f08d82ca5a237f",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4|^2.0",
+ "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."
+ },
+ "bin": [
+ "phan",
+ "phan_client",
+ "tocheckstyle"
+ ],
+ "type": "project",
+ "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/v2"
+ },
+ "time": "2020-07-02T01:28:55+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^2.0",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/master"
+ },
+ "time": "2018-07-08T19:23:20+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/master"
+ },
+ "time": "2018-07-08T19:19:57+00:00"
+ },
+ {
+ "name": "php-cs-fixer/diff",
+ "version": "v1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-CS-Fixer/diff.git",
+ "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759",
+ "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
+ "symfony/process": "^3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "SpacePossum"
+ }
+ ],
+ "description": "sebastian/diff v2 backport support for PHP5.6",
+ "homepage": "https://github.com/PHP-CS-Fixer",
+ "keywords": [
+ "diff"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-CS-Fixer/diff/issues",
+ "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1"
+ },
+ "abandoned": true,
+ "time": "2020-10-14T08:39:05+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.1.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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master"
+ },
+ "time": "2020-04-27T09:25:28+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "4.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+ "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
+ "webmozart/assert": "^1.0"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "^1.0.5",
+ "mockery/mockery": "^1.0",
+ "phpdocumentor/type-resolver": "0.4.*",
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x"
+ },
+ "time": "2019-12-28T18:55:12+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1",
+ "phpdocumentor/reflection-common": "^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "^7.1",
+ "mockery/mockery": "~1",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "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/0.7.2"
+ },
+ "time": "2019-08-22T18:11:29+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.10.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.5 || ^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
+ },
+ "time": "2020-03-05T15:02:03+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "6.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.1",
+ "phpunit/php-file-iterator": "^2.0",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
+ "sebastian/environment": "^3.1 || ^4.0",
+ "sebastian/version": "^2.0.1",
+ "theseer/tokenizer": "^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "suggest": {
+ "ext-xdebug": "^2.6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master"
+ },
+ "time": "2018-10-31T16:06:48+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:42:26+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
+ },
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:20:02+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "3.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
+ "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "abandoned": true,
+ "time": "2021-07-26T12:15:06+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "7.5.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "^1.7",
+ "phar-io/manifest": "^1.0.2",
+ "phar-io/version": "^2.0",
+ "php": "^7.1",
+ "phpspec/prophecy": "^1.7",
+ "phpunit/php-code-coverage": "^6.0.7",
+ "phpunit/php-file-iterator": "^2.0.1",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-timer": "^2.1",
+ "sebastian/comparator": "^3.0",
+ "sebastian/diff": "^3.0",
+ "sebastian/environment": "^4.0",
+ "sebastian/exporter": "^3.1",
+ "sebastian/global-state": "^2.0",
+ "sebastian/object-enumerator": "^3.0.3",
+ "sebastian/resource-operations": "^2.0",
+ "sebastian/version": "^2.0.1"
+ },
+ "conflict": {
+ "phpunit/phpunit-mock-objects": "*"
+ },
+ "require-dev": {
+ "ext-pdo": "*"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*",
+ "phpunit/php-invoker": "^2.0"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.5-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20"
+ },
+ "time": "2020-01-08T08:45:45+00:00"
+ },
+ {
+ "name": "psr/cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Cache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/master"
+ },
+ "time": "2016-08-06T20:24:11+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/master"
+ },
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "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"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "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"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "sabre/event",
+ "version": "5.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sabre-io/event.git",
+ "reference": "d7da22897125d34d7eddf7977758191c06a74497"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497",
+ "reference": "d7da22897125d34d7eddf7977758191c06a74497",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.17.1",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/coroutine.php",
+ "lib/Loop/functions.php",
+ "lib/Promise/functions.php"
+ ],
+ "psr-4": {
+ "Sabre\\Event\\": "lib/"
+ }
+ },
+ "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"
+ },
+ "time": "2021-11-04T06:51:17+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:15:22+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "3.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "sebastian/diff": "^3.0",
+ "sebastian/exporter": "^3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:31:48+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae",
+ "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5 || ^8.0",
+ "symfony/process": "^2 || ^3.3 || ^4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-05-07T05:30:20+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "4.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:53:42+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "3.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^8.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T06:00:17+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0"
+ },
+ "time": "2017-04-27T15:39:26+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "sebastian/object-reflector": "^1.1.1",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:40:27+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:37:18+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:34:24+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:30:19+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/master"
+ },
+ "time": "2016-10-03T07:35:21+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "bin": [
+ "bin/phpcs",
+ "bin/phpcbf"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "lead"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
+ "source": "https://github.com/squizlabs/PHP_CodeSniffer",
+ "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
+ },
+ "time": "2023-02-22T23:07:41+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v4.4.49",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2"
+ },
+ "conflict": {
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/event-dispatcher": "<4.3|>=5",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<3.3"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/event-dispatcher": "^4.3",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^3.4|^4.0|^5.0",
+ "symfony/var-dumper": "^4.3|^5.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "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",
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v4.4.49"
+ },
+ "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": "2022-11-05T17:10:16+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/event-dispatcher-contracts": "^1.1",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "1.1"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/error-handler": "~3.4|~4.4",
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
+ "symfony/http-foundation": "^3.4|^4.0|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/stopwatch": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44"
+ },
+ "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": "2022-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3"
+ },
+ "suggest": {
+ "psr/event-dispatcher": "",
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "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 dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13"
+ },
+ "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": "2022-01-02T09:41:36+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v4.4.42",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/815412ee8971209bd4c1eecd5f4f481eacd44bf5",
+ "reference": "815412ee8971209bd4c1eecd5f4f481eacd44bf5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v4.4.42"
+ },
+ "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": "2022-05-20T08:49:14+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v4.4.44"
+ },
+ "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": "2022-07-29T07:35:46+00:00"
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "583f56160f716dd435f1cd721fd14b548f4bb510"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/583f56160f716dd435f1cd721fd14b548f4bb510",
+ "reference": "583f56160f716dd435f1cd721fd14b548f4bb510",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "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": "Provides an improved replacement for the array_replace PHP function",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/options-resolver/tree/v4.4.44"
+ },
+ "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": "2022-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
+ "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php70",
+ "version": "v1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php70.git",
+ "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
+ "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "metapackage",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.20-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.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": "2020-10-23T14:02:19+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.27-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "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.27.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": "2022-11-03T14:55:06+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v4.4.44"
+ },
+ "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": "2022-06-27T13:16:42+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "psr/container": "^1.0"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "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/v1.1.13"
+ },
+ "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": "2022-05-27T14:01:05+00:00"
+ },
+ {
+ "name": "symfony/stopwatch",
+ "version": "v4.4.46",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/stopwatch.git",
+ "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/757660703fbd139eea0001b759c6c3bf5bc3ea52",
+ "reference": "757660703fbd139eea0001b759c6c3bf5bc3ea52",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/service-contracts": "^1.0|^2"
+ },
+ "require-dev": {
+ "symfony/polyfill-php72": "~1.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Stopwatch\\": ""
+ },
+ "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": "Provides a way to profile code",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/stopwatch/tree/v4.4.46"
+ },
+ "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": "2022-09-28T12:53:24+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/master"
+ },
+ "time": "2019-06-13T22:48:21+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<3.9.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+ },
+ "type": "library",
+ "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.9.1"
+ },
+ "time": "2020-07-08T17:02:28+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "beta",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=7.1.3"
+ },
+ "platform-dev": [],
+ "platform-overrides": {
+ "php": "7.1.3"
+ },
+ "plugin-api-version": "2.3.0"
+}
diff --git a/vendor/jfcherng/php-sequence-matcher/src/SequenceMatcher.php b/vendor/jfcherng/php-sequence-matcher/src/SequenceMatcher.php
new file mode 100644
index 0000000..92d6992
--- /dev/null
+++ b/vendor/jfcherng/php-sequence-matcher/src/SequenceMatcher.php
@@ -0,0 +1,731 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Jfcherng\Diff;
+
+/**
+ * A longest sequence matcher.
+ *
+ * The logic is primarily based on the Python difflib package.
+ *
+ * @see https://docs.python.org/3/library/difflib.html
+ */
+final class SequenceMatcher
+{
+ /** @var int 0, opcode: no operation */
+ const OP_NOP = 0;
+
+ /** @var int 1, opcode: equal */
+ const OP_EQ = 1 << 0;
+
+ /** @var int 2, opcode: delete */
+ const OP_DEL = 1 << 1;
+
+ /** @var int 4, opcode: insert */
+ const OP_INS = 1 << 2;
+
+ /** @var int 8, opcode: replace */
+ const OP_REP = 1 << 3;
+
+ const OP_INT_TO_STR_MAP = [
+ self::OP_NOP => 'nop',
+ self::OP_EQ => 'eq',
+ self::OP_DEL => 'del',
+ self::OP_INS => 'ins',
+ self::OP_REP => 'rep',
+ ];
+
+ const OP_STR_TO_INT_MAP = [
+ 'nop' => self::OP_NOP,
+ 'eq' => self::OP_EQ,
+ 'del' => self::OP_DEL,
+ 'ins' => self::OP_INS,
+ 'rep' => self::OP_REP,
+ ];
+
+ /**
+ * The helper line which may be used to append to the source inputs to help
+ * it easier to handle EOL at EOF problem. This line shouldn't be counted into diff.
+ *
+ * @var string
+ */
+ const APPENDED_HELPER_LINE = "\u{fcf28}\u{fc232}";
+
+ /**
+ * @var null|callable either a string or an array containing a callback function to determine if a line is "junk" or not
+ */
+ private $junkCallback;
+
+ /**
+ * @var array the first sequence to compare against
+ */
+ private $a = [];
+
+ /**
+ * @var array the second sequence
+ */
+ private $b = [];
+
+ /**
+ * @var array the first sequence to compare against (transformed)
+ */
+ private $at = [];
+
+ /**
+ * @var array the second sequence (transformed)
+ */
+ private $bt = [];
+
+ /**
+ * @var array array of characters that are considered junk from the second sequence. Characters are the array key.
+ */
+ private $junkDict = [];
+
+ /**
+ * @var array array of indices that do not contain junk elements
+ */
+ private $b2j = [];
+
+ /**
+ * @var array
+ */
+ private $options = [];
+
+ /**
+ * @var array
+ */
+ private static $defaultOptions = [
+ 'ignoreCase' => false,
+ 'ignoreLineEnding' => false,
+ 'ignoreWhitespace' => false,
+ 'lengthLimit' => 2000,
+ ];
+
+ /**
+ * @var array
+ */
+ private $matchingBlocks = [];
+
+ /**
+ * @var array generated opcodes which manipulates seq1 to seq2
+ */
+ private $opcodes = [];
+
+ /**
+ * The constructor. With the sequences being passed, they'll be set
+ * for the sequence matcher and it will perform a basic cleanup &
+ * calculate junk elements.
+ *
+ * @param string[] $a an array containing the lines to compare against
+ * @param string[] $b an array containing the lines to compare
+ * @param null|callable $junkCallback either an array or string that references a callback function (if there is one) to determine 'junk' characters
+ * @param array $options the options
+ */
+ public function __construct(array $a, array $b, ?callable $junkCallback = null, array $options = [])
+ {
+ $this->junkCallback = $junkCallback;
+ $this->setOptions($options);
+ $this->setSequences($a, $b);
+ }
+
+ /**
+ * Set the options.
+ *
+ * @param array $options The options
+ */
+ public function setOptions(array $options): self
+ {
+ $needRerunChainB = $this->isAnyOptionChanged(
+ $this->options,
+ $options,
+ ['ignoreCase', 'ignoreLineEnding', 'ignoreWhitespace', 'lengthLimit']
+ );
+
+ $this->options = $options + self::$defaultOptions;
+
+ if ($needRerunChainB) {
+ $this->chainB();
+ }
+
+ $this->resetCachedResults();
+
+ return $this;
+ }
+
+ /**
+ * Get the options.
+ */
+ public function getOptions(): array
+ {
+ return $this->options;
+ }
+
+ /**
+ * Reset cached results.
+ */
+ public function resetCachedResults(): self
+ {
+ $this->matchingBlocks = [];
+ $this->opcodes = [];
+
+ return $this;
+ }
+
+ /**
+ * Set the first and second sequences to use with the sequence matcher.
+ *
+ * This method is more effecient than "->setSeq1($old)->setSeq2($new)"
+ * because it only run the routine once.
+ *
+ * @param string[] $a an array containing the lines to compare against
+ * @param string[] $b an array containing the lines to compare
+ */
+ public function setSequences(array $a, array $b): self
+ {
+ $need_routine = false;
+
+ if ($this->a !== $a) {
+ $need_routine = true;
+ $this->a = $a;
+ }
+
+ if ($this->b !== $b) {
+ $need_routine = true;
+ $this->b = $b;
+ }
+
+ if ($need_routine) {
+ $this->chainB();
+ $this->resetCachedResults();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the first sequence ($a) and reset any internal caches to indicate that
+ * when calling the calculation methods, we need to recalculate them.
+ *
+ * @param string[] $a the sequence to set as the first sequence
+ */
+ public function setSeq1(array $a): self
+ {
+ if ($this->a !== $a) {
+ $this->a = $a;
+ $this->chainB();
+ $this->resetCachedResults();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the second sequence ($b) and reset any internal caches to indicate that
+ * when calling the calculation methods, we need to recalculate them.
+ *
+ * @param string[] $b the sequence to set as the second sequence
+ */
+ public function setSeq2(array $b): self
+ {
+ if ($this->b !== $b) {
+ $this->b = $b;
+ $this->chainB();
+ $this->resetCachedResults();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Find the longest matching block in the two sequences, as defined by the
+ * lower and upper constraints for each sequence. (for the first sequence,
+ * $alo - $ahi and for the second sequence, $blo - $bhi).
+ *
+ * Essentially, of all of the maximal matching blocks, return the one that
+ * startest earliest in $a, and all of those maximal matching blocks that
+ * start earliest in $a, return the one that starts earliest in $b.
+ *
+ * If the junk callback is defined, do the above but with the restriction
+ * that the junk element appears in the block. Extend it as far as possible
+ * by matching only junk elements in both $a and $b.
+ *
+ * @param int $alo the lower constraint for the first sequence
+ * @param int $ahi the upper constraint for the first sequence
+ * @param int $blo the lower constraint for the second sequence
+ * @param int $bhi the upper constraint for the second sequence
+ *
+ * @return int[] an array containing the longest match that includes the starting position in $a, start in $b and the length/size
+ */
+ public function findLongestMatch(int $alo, int $ahi, int $blo, int $bhi): array
+ {
+ $bestI = $alo;
+ $bestJ = $blo;
+ $bestSize = 0;
+
+ $j2Len = [];
+
+ for ($i = $alo; $i < $ahi; ++$i) {
+ if (null === ($element = $this->at[$i] ?? null)) {
+ continue;
+ }
+
+ $newJ2Len = [];
+ $jDict = $this->b2j[$element] ?? [];
+
+ foreach ($jDict as $j) {
+ if ($j < $blo) {
+ continue;
+ }
+
+ if ($j >= $bhi) {
+ break;
+ }
+
+ $k = ($j2Len[$j - 1] ?? 0) + 1;
+ $newJ2Len[$j] = $k;
+
+ if ($k > $bestSize) {
+ $bestI = $i - $k + 1;
+ $bestJ = $j - $k + 1;
+ $bestSize = $k;
+ }
+ }
+
+ $j2Len = $newJ2Len;
+ }
+
+ while (
+ $bestI > $alo
+ && $bestJ > $blo
+ && $this->at[$bestI - 1] === $this->bt[$bestJ - 1]
+ && !$this->isBJunk($this->bt[$bestJ - 1])
+ ) {
+ --$bestI;
+ --$bestJ;
+ ++$bestSize;
+ }
+
+ while (
+ $bestI + $bestSize < $ahi
+ && $bestJ + $bestSize < $bhi
+ && $this->at[$bestI + $bestSize] === $this->bt[$bestJ + $bestSize]
+ && !$this->isBJunk($this->bt[$bestJ + $bestSize])
+ ) {
+ ++$bestSize;
+ }
+
+ while (
+ $bestI > $alo
+ && $bestJ > $blo
+ && $this->at[$bestI - 1] === $this->bt[$bestJ - 1]
+ && $this->isBJunk($this->bt[$bestJ - 1])
+ ) {
+ --$bestI;
+ --$bestJ;
+ ++$bestSize;
+ }
+
+ while (
+ $bestI + $bestSize < $ahi
+ && $bestJ + $bestSize < $bhi
+ && $this->at[$bestI + $bestSize] === $this->bt[$bestJ + $bestSize]
+ && $this->isBJunk($this->bt[$bestJ + $bestSize])
+ ) {
+ ++$bestSize;
+ }
+
+ return [$bestI, $bestJ, $bestSize];
+ }
+
+ /**
+ * Return a nested set of arrays for all of the matching sub-sequences
+ * in the strings $a and $b.
+ *
+ * Each block contains the lower constraint of the block in $a, the lower
+ * constraint of the block in $b and finally the number of lines that the
+ * block continues for.
+ *
+ * @return int[][] a nested array of the matching blocks, as described by the function
+ */
+ public function getMatchingBlocks(): array
+ {
+ if (!empty($this->matchingBlocks)) {
+ return $this->matchingBlocks;
+ }
+
+ $aCount = \count($this->a);
+ $bCount = \count($this->b);
+
+ $queue = [
+ [0, $aCount, 0, $bCount],
+ ];
+
+ $matchingBlocks = [];
+ while (!empty($queue)) {
+ [$alo, $ahi, $blo, $bhi] = \array_pop($queue);
+ [$i, $j, $k] = $x = $this->findLongestMatch($alo, $ahi, $blo, $bhi);
+
+ if ($k) {
+ $matchingBlocks[] = $x;
+
+ if ($alo < $i && $blo < $j) {
+ $queue[] = [$alo, $i, $blo, $j];
+ }
+
+ if ($i + $k < $ahi && $j + $k < $bhi) {
+ $queue[] = [$i + $k, $ahi, $j + $k, $bhi];
+ }
+ }
+ }
+
+ \usort($matchingBlocks, function (array $a, array $b): int {
+ $aCount = \count($a);
+ $bCount = \count($b);
+ $min = \min($aCount, $bCount);
+
+ for ($i = 0; $i < $min; ++$i) {
+ if ($a[$i] !== $b[$i]) {
+ return $a[$i] <=> $b[$i];
+ }
+ }
+
+ return $aCount <=> $bCount;
+ });
+
+ $i1 = $j1 = $k1 = 0;
+ $nonAdjacent = [];
+ foreach ($matchingBlocks as [$i2, $j2, $k2]) {
+ if ($i1 + $k1 === $i2 && $j1 + $k1 === $j2) {
+ $k1 += $k2;
+
+ continue;
+ }
+
+ if ($k1) {
+ $nonAdjacent[] = [$i1, $j1, $k1];
+ }
+
+ $i1 = $i2;
+ $j1 = $j2;
+ $k1 = $k2;
+ }
+
+ if ($k1) {
+ $nonAdjacent[] = [$i1, $j1, $k1];
+ }
+
+ $nonAdjacent[] = [$aCount, $bCount, 0];
+
+ $this->matchingBlocks = $nonAdjacent;
+
+ return $this->matchingBlocks;
+ }
+
+ /**
+ * Return a list of all of the opcodes for the differences between the
+ * two strings.
+ *
+ * The nested array returned contains an array describing the opcode
+ * which includes:
+ * 0 - The type of tag (as described below) for the opcode.
+ * 1 - The beginning line in the first sequence.
+ * 2 - The end line in the first sequence.
+ * 3 - The beginning line in the second sequence.
+ * 4 - The end line in the second sequence.
+ *
+ * The different types of tags include:
+ * replace - The string from $i1 to $i2 in $a should be replaced by
+ * the string in $b from $j1 to $j2.
+ * delete - The string in $a from $i1 to $j2 should be deleted.
+ * insert - The string in $b from $j1 to $j2 should be inserted at
+ * $i1 in $a.
+ * equal - The two strings with the specified ranges are equal.
+ *
+ * @return int[][] array of the opcodes describing the differences between the strings
+ */
+ public function getOpcodes(): array
+ {
+ if (!empty($this->opcodes)) {
+ return $this->opcodes;
+ }
+
+ $i = $j = 0;
+ $this->opcodes = [];
+
+ foreach ($this->getMatchingBlocks() as [$ai, $bj, $size]) {
+ if ($i < $ai && $j < $bj) {
+ $tag = self::OP_REP;
+ } elseif ($i < $ai) {
+ $tag = self::OP_DEL;
+ } elseif ($j < $bj) {
+ $tag = self::OP_INS;
+ } else {
+ $tag = self::OP_NOP;
+ }
+
+ if ($tag) {
+ $this->opcodes[] = [$tag, $i, $ai, $j, $bj];
+ }
+
+ $i = $ai + $size;
+ $j = $bj + $size;
+
+ if ($size) {
+ $this->opcodes[] = [self::OP_EQ, $ai, $i, $bj, $j];
+ }
+ }
+
+ return $this->opcodes;
+ }
+
+ /**
+ * Return a series of nested arrays containing different groups of generated
+ * opcodes for the differences between the strings with up to $context lines
+ * of surrounding content.
+ *
+ * Essentially what happens here is any big equal blocks of strings are stripped
+ * out, the smaller subsets of changes are then arranged in to their groups.
+ * This means that the sequence matcher and diffs do not need to include the full
+ * content of the different files but can still provide context as to where the
+ * changes are.
+ *
+ * @param int $context the number of lines of context to provide around the groups
+ *
+ * @return int[][][] nested array of all of the grouped opcodes
+ */
+ public function getGroupedOpcodes(int $context = 3): array
+ {
+ $opcodes = $this->getOpcodes();
+
+ if (empty($opcodes)) {
+ $opcodes = [
+ [self::OP_EQ, 0, 1, 0, 1],
+ ];
+ }
+
+ if ($opcodes[0][0] === self::OP_EQ) {
+ // fix the leading sequence which is out of context.
+ $opcodes[0] = [
+ $opcodes[0][0],
+ \max($opcodes[0][1], $opcodes[0][2] - $context),
+ $opcodes[0][2],
+ \max($opcodes[0][3], $opcodes[0][4] - $context),
+ $opcodes[0][4],
+ ];
+ }
+
+ $lastItem = \count($opcodes) - 1;
+ if ($opcodes[$lastItem][0] === self::OP_EQ) {
+ [$tag, $i1, $i2, $j1, $j2] = $opcodes[$lastItem];
+ // fix the trailing sequence which is out of context.
+ $opcodes[$lastItem] = [
+ $tag,
+ $i1,
+ \min($i2, $i1 + $context),
+ $j1,
+ \min($j2, $j1 + $context),
+ ];
+ }
+
+ $maxRange = $context << 1;
+ $groups = $group = [];
+ foreach ($opcodes as [$tag, $i1, $i2, $j1, $j2]) {
+ if ($tag === self::OP_EQ && $i2 - $i1 > $maxRange) {
+ $group[] = [
+ $tag,
+ $i1,
+ \min($i2, $i1 + $context),
+ $j1,
+ \min($j2, $j1 + $context),
+ ];
+ $groups[] = $group;
+ $group = [];
+ $i1 = \max($i1, $i2 - $context);
+ $j1 = \max($j1, $j2 - $context);
+ }
+
+ $group[] = [$tag, $i1, $i2, $j1, $j2];
+ }
+
+ if (
+ !empty($group)
+ && (
+ \count($group) !== 1
+ || $group[0][0] !== self::OP_EQ
+ )
+ ) {
+ $groups[] = $group;
+ }
+
+ // there will be at least leading/trailing OP_EQ blocks
+ // if we want really zero-context, we keep only non-equal blocks
+ if ($context <= 0) {
+ $groupsNew = [];
+
+ foreach ($groups as $group) {
+ $groupNew = [];
+
+ foreach ($group as $block) {
+ if ($block[0] !== self::OP_EQ) {
+ $groupNew[] = $block;
+ }
+ }
+
+ if (!empty($groupNew)) {
+ $groupsNew[] = $groupNew;
+ }
+ }
+
+ return $groupsNew;
+ }
+
+ return $groups;
+ }
+
+ /**
+ * Convert an operation code from int into its string form.
+ *
+ * @param int $op the operation code
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return string the string representation of the operation code
+ */
+ public static function opIntToStr(int $op): string
+ {
+ if (!isset(self::OP_INT_TO_STR_MAP[$op])) {
+ throw new \InvalidArgumentException("Invalid OP: {$op}");
+ }
+
+ return self::OP_INT_TO_STR_MAP[$op];
+ }
+
+ /**
+ * Convert an operation code from string into its int form.
+ *
+ * @param string $op the operation code
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return int the int representation of the operation code
+ */
+ public static function opStrToInt(string $op): int
+ {
+ if (!isset(self::OP_STR_TO_INT_MAP[$op])) {
+ throw new \InvalidArgumentException("Invalid OP: {$op}");
+ }
+
+ return self::OP_STR_TO_INT_MAP[$op];
+ }
+
+ /**
+ * Determine if any option under test changed.
+ *
+ * @param array $old the old options
+ * @param array $new the new options
+ * @param array $keys the option keys under test
+ */
+ private function isAnyOptionChanged(array $old, array $new, array $keys): bool
+ {
+ foreach ($keys as $key) {
+ if (isset($new[$key]) && $new[$key] !== $old[$key]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the processed line with the initialized options.
+ *
+ * @param string $line the line
+ *
+ * @return string the line after being processed
+ */
+ private function processLineWithOptions(string $line): string
+ {
+ if ($this->options['ignoreWhitespace']) {
+ static $whitespaces = [' ', "\t", "\r", "\n"];
+
+ $line = \str_replace($whitespaces, '', $line);
+ }
+
+ if ($this->options['ignoreCase']) {
+ $line = \strtolower($line);
+ }
+
+ if ($this->options['ignoreLineEnding']) {
+ $line = \rtrim($line, "\r\n");
+ }
+
+ return $line;
+ }
+
+ /**
+ * Generate the internal arrays containing the list of junk and non-junk
+ * characters for the second ($b) sequence.
+ */
+ private function chainB(): self
+ {
+ $this->at = \array_map([$this, 'processLineWithOptions'], $this->a);
+ $this->bt = \array_map([$this, 'processLineWithOptions'], $this->b);
+
+ $length = \count($this->bt);
+ $this->b2j = [];
+ $popularDict = [];
+
+ for ($i = 0; $i < $length; ++$i) {
+ $char = $this->bt[$i];
+ $this->b2j[$char] = $this->b2j[$char] ?? [];
+
+ if (
+ $length >= $this->options['lengthLimit']
+ && \count($this->b2j[$char]) * 100 > $length
+ && $char !== self::APPENDED_HELPER_LINE
+ ) {
+ $popularDict[$char] = 1;
+
+ unset($this->b2j[$char]);
+ } else {
+ $this->b2j[$char][] = $i;
+ }
+ }
+
+ // remove leftovers
+ foreach (\array_keys($popularDict) as $char) {
+ unset($this->b2j[$char]);
+ }
+
+ $this->junkDict = [];
+ if (\is_callable($this->junkCallback)) {
+ foreach (\array_keys($popularDict) as $char) {
+ if (($this->junkCallback)($char)) {
+ $this->junkDict[$char] = 1;
+ unset($popularDict[$char]);
+ }
+ }
+
+ foreach (\array_keys($this->b2j) as $char) {
+ if (($this->junkCallback)($char)) {
+ $this->junkDict[$char] = 1;
+ unset($this->b2j[$char]);
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Checks if a particular character is in the junk dictionary
+ * for the list of junk characters.
+ *
+ * @return bool $b True if the character is considered junk. False if not.
+ */
+ private function isBJunk(string $b): bool
+ {
+ return isset($this->junkDict[$b]);
+ }
+}