├── CONTRIBUTING.md
├── RELEASE.md
├── src
├── StringifierInterface.php
├── Stringifier.php
└── Expander.php
├── phpunit.xml.dist
├── .gitignore
├── phpcs.xml.dist
├── LICENSE.md
├── .github
└── workflows
│ └── php.yml
├── composer.json
├── README.md
├── tests
└── src
│ └── ExpanderTest.php
└── composer.lock
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/RELEASE.md:
--------------------------------------------------------------------------------
1 | # Releasing
2 |
3 | ### Execute tests
4 |
5 | ./scripts/run-tests.sh
6 |
7 | To quickly fix PHPCS issues:
8 |
9 | ./scripts/clean-code.sh
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/StringifierInterface.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | src
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | tests/src
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Cache and logs (Symfony2)
2 | /app/cache/*
3 | /app/logs/*
4 | !app/cache/.gitkeep
5 | !app/logs/.gitkeep
6 |
7 | # Email spool folder
8 | /app/spool/*
9 |
10 | # Cache, session files and logs (Symfony3)
11 | /var/cache/*
12 | /var/logs/*
13 | /var/sessions/*
14 | !var/cache/.gitkeep
15 | !var/logs/.gitkeep
16 | !var/sessions/.gitkeep
17 |
18 | # Parameters
19 | /app/config/parameters.yml
20 | /app/config/parameters.ini
21 |
22 | # Managed by Composer
23 | /app/bootstrap.php.cache
24 | /var/bootstrap.php.cache
25 | /bin/*
26 | !bin/console
27 | !bin/symfony_requirements
28 | /vendor/
29 |
30 | # Assets and user uploads
31 | /web/bundles/
32 | /web/uploads/
33 |
34 | # Assets managed by Bower
35 | /web/assets/vendor/
36 |
37 | # PHPUnit
38 | /app/phpunit.xml
39 | /phpunit.xml
40 |
41 | # Build data
42 | /build/
43 |
44 | # Composer PHAR
45 | /composer.phar
46 |
47 | # Backup entities generated with doctrine:generate:entities command
48 | */Entity/*~
49 |
50 | .idea
51 | .phpunit.result.cache
--------------------------------------------------------------------------------
/phpcs.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Yaml CLI PHP CodeSniffer configuration.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | .
14 |
15 |
16 |
17 |
18 | var/
19 | vendor/*
20 | tests/resources/*
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Matthew Grasmick
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.github/workflows/php.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches: [ main ]
6 | pull_request:
7 | branches: [ main ]
8 |
9 | permissions:
10 | contents: read
11 |
12 | jobs:
13 |
14 | build:
15 | runs-on: ${{ matrix.os }}
16 | strategy:
17 | matrix:
18 | include:
19 | - os: "ubuntu-latest"
20 | php: "8.0"
21 | coverage: "none"
22 | - os: "ubuntu-latest"
23 | php: "8.1"
24 | coverage: "pcov"
25 |
26 | steps:
27 | - uses: actions/checkout@v3
28 |
29 | - uses: shivammathur/setup-php@v2
30 | with:
31 | php-version: ${{ matrix.php }}
32 | # Only report coverage once
33 | coverage: ${{ matrix.coverage }}
34 |
35 | - name: Validate composer.json and composer.lock
36 | run: composer validate --strict
37 |
38 | - name: Cache Composer packages
39 | id: composer-cache
40 | uses: actions/cache@v3
41 | with:
42 | path: vendor
43 | key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
44 | restore-keys: |
45 | ${{ runner.os }}-php-
46 |
47 | - name: Install dependencies
48 | run: composer -n install --prefer-dist -o
49 |
50 | - name: Run test suite
51 | if: matrix.coverage == 'none'
52 | run: composer run-script test
53 |
54 | - name: Run coverage
55 | if: matrix.coverage == 'pcov'
56 | run: composer run-script coverage
57 |
58 | - name: Upload coverage results to Coveralls
59 | if: matrix.coverage == 'pcov'
60 | env:
61 | COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
62 | run: composer run-script coveralls
63 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "grasmash/expander",
3 | "description": "Expands internal property references in PHP arrays file.",
4 | "type": "library",
5 | "require": {
6 | "php": ">=8.0",
7 | "dflydev/dot-access-data": "^3.0.0",
8 | "psr/log": "^2 | ^3"
9 | },
10 | "license": "MIT",
11 | "authors": [
12 | {
13 | "name": "Matthew Grasmick"
14 | }
15 | ],
16 | "minimum-stability": "stable",
17 | "autoload": {
18 | "psr-4": {
19 | "Grasmash\\Expander\\": "src/"
20 | }
21 | },
22 | "autoload-dev": {
23 | "psr-4": {
24 | "Grasmash\\Expander\\Tests\\": "tests/src/"
25 | }
26 | },
27 | "require-dev": {
28 | "greg-1-anderson/composer-test-scenarios": "^1",
29 | "php-coveralls/php-coveralls": "^2.5",
30 | "phpunit/phpunit": "^9",
31 | "squizlabs/php_codesniffer": "^3.3"
32 | },
33 | "scripts": {
34 | "cs": "phpcs",
35 | "cbf": "phpcbf",
36 | "unit": "phpunit",
37 | "lint": [
38 | "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
39 | "find tests -name '*.php' -print0 | xargs -0 -n1 php -l"
40 | ],
41 | "test": [
42 | "@lint",
43 | "@unit",
44 | "@cs"
45 | ],
46 | "coverage": "php -d pcov.enabled=1 vendor/bin/phpunit tests/src --coverage-clover build/logs/clover.xml",
47 | "coveralls": [
48 | "php-coveralls -vvv"
49 | ]
50 | },
51 | "config": {
52 | "optimize-autoloader": true,
53 | "sort-packages": true
54 | },
55 | "extra": {
56 | "branch-alias": {
57 | "dev-master": "1.x-dev"
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/grasmash/expander/actions/workflows/php.yml) [](https://packagist.org/packages/grasmash/expander)
2 | [](https://packagist.org/packages/grasmash/expander) [](https://coveralls.io/github/grasmash/expander?branch=main)
3 |
4 | This tool expands dot-notated, string property references into their corresponding values. This is useful for run time expansion of property references in configuration files.
5 |
6 | For example implementation, see [Yaml Expander](https://github.com/grasmash/yaml-expander).
7 |
8 | ### Installation
9 |
10 | composer require grasmash/expander
11 |
12 | ### Example usage:
13 |
14 | Property references use dot notation to indicate array keys, and must be wrapped in `${}`.
15 |
16 | Expansion logic:
17 |
18 | ```php
19 | 'book',
23 | 'book' => [
24 | 'title' => 'Dune',
25 | 'author' => 'Frank Herbert',
26 | 'copyright' => '${book.author} 1965',
27 | 'protaganist' => '${characters.0.name}',
28 | 'media' => [
29 | 0 => 'hardcover',
30 | 1 => 'paperback',
31 | ],
32 | 'nested-reference' => '${book.sequel}',
33 | ],
34 | 'characters' => [
35 | 0 => [
36 | 'name' => 'Paul Atreides',
37 | 'occupation' => 'Kwisatz Haderach',
38 | 'aliases' => [
39 | 0 => 'Usul',
40 | 1 => 'Muad\'Dib',
41 | 2 => 'The Preacher',
42 | ],
43 | ],
44 | 1 => [
45 | 'name' => 'Duncan Idaho',
46 | 'occupation' => 'Swordmaster',
47 | ],
48 | ],
49 | 'summary' => '${book.title} by ${book.author}',
50 | 'publisher' => '${not.real.property}',
51 | 'sequels' => '${book.sequel}, and others.',
52 | 'available-products' => '${book.media.1}, ${book.media.0}',
53 | 'product-name' => '${${type}.title}',
54 | 'boolean-value' => true,
55 | 'expand-boolean' => '${boolean-value}',
56 | 'null-value' => NULL,
57 | 'inline-array' => [
58 | 0 => 'one',
59 | 1 => 'two',
60 | 2 => 'three',
61 | ],
62 | 'expand-array' => '${inline-array}',
63 | 'env-test' => '${env.test}',
64 | ];
65 |
66 | $expander = new Expander();
67 | // Optionally set a logger.
68 | $expander->setLogger(new Psr\Log\NullLogger());
69 | // Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter.
70 | // @see StringifierInterface.
71 | $expander->setStringifier(new Grasmash\Expander\Stringifier());
72 |
73 | // Parse an array, expanding internal property references.
74 | $expanded = $expander->expandArrayProperties($array);
75 |
76 | // Parse an array, expanding references using both internal and supplementary values.
77 | $reference_properties = 'book' => ['sequel' => 'Dune Messiah'];
78 | // Set an environmental variable.
79 | putenv("test=gomjabbar");
80 | $expanded = $expander->expandArrayProperties($array, $reference_properties);
81 |
82 | print_r($expanded);
83 | ````
84 |
85 | Resultant array:
86 |
87 | ```php
88 | Array
89 | (
90 | [type] => book
91 | [book] => Array
92 | (
93 | [title] => Dune
94 | [author] => Frank Herbert
95 | [copyright] => Frank Herbert 1965
96 | [protaganist] => Paul Atreides
97 | [media] => Array
98 | (
99 | [0] => hardcover
100 | [1] => paperback
101 | )
102 |
103 | [nested-reference] => Dune Messiah
104 | )
105 |
106 | [characters] => Array
107 | (
108 | [0] => Array
109 | (
110 | [name] => Paul Atreides
111 | [occupation] => Kwisatz Haderach
112 | [aliases] => Array
113 | (
114 | [0] => Usul
115 | [1] => Muad\'Dib
116 | [2] => The Preacher
117 | )
118 |
119 | )
120 |
121 | [1] => Array
122 | (
123 | [name] => Duncan Idaho
124 | [occupation] => Swordmaster
125 | )
126 |
127 | )
128 |
129 | [summary] => Dune by Frank Herbert
130 | [publisher] => ${not.real.property}
131 | [sequels] => Dune Messiah, and others.
132 | [available-products] => paperback, hardcover
133 | [product-name] => Dune
134 | [boolean-value] => true,
135 | [expand-boolean] => true,
136 | [null-value] =>
137 | [inline-array] => Array
138 | (
139 | [0] => one
140 | [1] => two
141 | [2] => three
142 | )
143 |
144 | [expand-array] => one,two,three
145 | [env-test] => gomjabbar
146 | [env] => Array
147 | (
148 | [test] => gomjabbar
149 | )
150 |
151 | )
152 |
153 | ```
154 |
--------------------------------------------------------------------------------
/tests/src/ExpanderTest.php:
--------------------------------------------------------------------------------
1 | setEnvVarFixture('test', 'gomjabbar');
26 |
27 | $expanded = $expander->expandArrayProperties($array);
28 | $this->assertEquals('gomjabbar', $expanded['env-test']);
29 | $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']);
30 | $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']);
31 | $this->assertEquals('Dune by Frank Herbert', $expanded['summary']);
32 | $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']);
33 | $this->assertEquals('Dune', $expanded['product-name']);
34 | $this->assertEquals(Stringifier::stringifyArray($array['inline-array']), $expanded['expand-array']);
35 |
36 | $this->assertEquals(true, $expanded['boolean-value']);
37 | $this->assertIsBool($expanded['boolean-value']);
38 | $this->assertEquals(true, $expanded['expand-boolean']);
39 | $this->assertIsBool($expanded['expand-boolean']);
40 |
41 | $expanded = $expander->expandArrayProperties($array, $reference_array);
42 | $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']);
43 | $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']);
44 | }
45 |
46 | /**
47 | * @return array
48 | * An array of values to test.
49 | */
50 | public function providerSourceData(): array
51 | {
52 | return [
53 | [
54 | [
55 | 'type' => 'book',
56 | 'book' => [
57 | 'title' => 'Dune',
58 | 'author' => 'Frank Herbert',
59 | 'copyright' => '${book.author} 1965',
60 | 'protaganist' => '${characters.0.name}',
61 | 'media' => [
62 | 0 => 'hardcover',
63 | ],
64 | 'nested-reference' => '${book.sequel}',
65 | ],
66 | 'characters' => [
67 | 0 => [
68 | 'name' => 'Paul Atreides',
69 | 'occupation' => 'Kwisatz Haderach',
70 | 'aliases' => [
71 | 0 => 'Usul',
72 | 1 => "Muad'Dib",
73 | 2 => 'The Preacher',
74 | ],
75 | ],
76 | 1 => [
77 | 'name' => 'Duncan Idaho',
78 | 'occupation' => 'Swordmaster',
79 | ],
80 | ],
81 | 'summary' => '${book.title} by ${book.author}',
82 | 'publisher' => '${not.real.property}',
83 | 'sequels' => '${book.sequel}, and others.',
84 | 'available-products' => '${book.media.1}, ${book.media.0}',
85 | 'product-name' => '${${type}.title}',
86 | 'boolean-value' => true,
87 | 'expand-boolean' => '${boolean-value}',
88 | 'null-value' => null,
89 | 'inline-array' => [
90 | 0 => 'one',
91 | 1 => 'two',
92 | 2 => 'three',
93 | ],
94 | 'expand-array' => '${inline-array}',
95 | 'env-test' => '${env.test}',
96 | 'test_expanded_to_null' => '${book.expanded_to_null}'
97 | ],
98 | [
99 | 'book' => [
100 | 'sequel' => 'Dune Messiah',
101 | 'expanded_to_null' => null,
102 | ]
103 | ]
104 | ],
105 | ];
106 | }
107 |
108 | /**
109 | * Tests Expander::expandProperty().
110 | *
111 | * @dataProvider providerTestExpandProperty
112 | */
113 | public function testExpandProperty(array $array, $property_name, $unexpanded_string, $expected)
114 | {
115 | $data = new Data($array);
116 | $expander = new Expander();
117 | $expanded_value = $expander->expandProperty($property_name, $unexpanded_string, $data);
118 |
119 | $this->assertEquals($expected, $expanded_value);
120 | }
121 |
122 | /**
123 | * @return array
124 | */
125 | public function providerTestExpandProperty(): array
126 | {
127 | return [
128 | [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ],
129 | [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ],
130 | ];
131 | }
132 |
133 | /**
134 | * @param $key
135 | * @param $value
136 | */
137 | protected function setEnvVarFixture($key, $value)
138 | {
139 | putenv("$key=$value");
140 | $_SERVER[$key] = $value;
141 | }
142 | }
143 |
--------------------------------------------------------------------------------
/src/Expander.php:
--------------------------------------------------------------------------------
1 | setLogger(new NullLogger());
28 | $this->setStringifier(new Stringifier());
29 | }
30 |
31 | /**
32 | * @return \Grasmash\Expander\StringifierInterface
33 | */
34 | public function getStringifier(): StringifierInterface
35 | {
36 | return $this->stringifier;
37 | }
38 |
39 | /**
40 | * @param \Grasmash\Expander\StringifierInterface $stringifier
41 | */
42 | public function setStringifier(StringifierInterface $stringifier)
43 | {
44 | $this->stringifier = $stringifier;
45 | }
46 |
47 | /**
48 | * @return \Psr\Log\LoggerInterface
49 | */
50 | public function getLogger(): LoggerInterface
51 | {
52 | return $this->logger;
53 | }
54 |
55 | /**
56 | * @param \Psr\Log\LoggerInterface $logger
57 | */
58 | public function setLogger(LoggerInterface $logger): void
59 | {
60 | $this->logger = $logger;
61 | }
62 |
63 | /**
64 | * Expands property placeholders in an array.
65 | *
66 | * Placeholders should be formatted as ${parent.child}.
67 | *
68 | * @param array $array
69 | * An array containing properties to expand.
70 | *
71 | * @return array
72 | * The modified array in which placeholders have been replaced with
73 | * values.
74 | */
75 | public function expandArrayProperties(array $array, $reference_array = []): array
76 | {
77 | $data = new Data($array);
78 | if ($reference_array) {
79 | $reference_data = new Data($reference_array);
80 | $this->doExpandArrayProperties($data, $array, '', $reference_data);
81 | } else {
82 | $this->doExpandArrayProperties($data, $array);
83 | }
84 |
85 | return $data->export();
86 | }
87 |
88 | /**
89 | * Performs the actual property expansion.
90 | *
91 | * @param Data $data
92 | * A data object, containing the $array.
93 | * @param array $array
94 | * The original, unmodified array.
95 | * @param string $parent_keys
96 | * The parent keys of the current key in dot notation. This is used to
97 | * track the absolute path to the current key in recursive cases.
98 | * @param Data|null $reference_data
99 | * A reference data object. This is not operated upon but is used as a
100 | * reference to provide supplemental values for property expansion.
101 | */
102 | protected function doExpandArrayProperties(
103 | Data $data,
104 | array $array,
105 | string $parent_keys = '',
106 | ?Data $reference_data = null
107 | ) {
108 | foreach ($array as $key => $value) {
109 | // Boundary condition(s).
110 | if ($value === null || is_bool($value)) {
111 | continue;
112 | }
113 | // Recursive case.
114 | if (is_array($value)) {
115 | $this->doExpandArrayProperties($data, $value, $parent_keys . "$key.", $reference_data);
116 | } else {
117 | // Base case.
118 | $this->expandStringProperties($data, $parent_keys, $reference_data, $value, $key);
119 | }
120 | }
121 | }
122 |
123 | /**
124 | * Expand a single property.
125 | *
126 | * @param Data $data
127 | * A data object, containing the $array.
128 | * @param string $parent_keys
129 | * The parent keys of the current key in dot notation. This is used to
130 | * track the absolute path to the current key in recursive cases.
131 | * @param Data|null $reference_data
132 | * A reference data object. This is not operated upon but is used as a
133 | * reference to provide supplemental values for property expansion.
134 | * @param string $value
135 | * The unexpanded property value.
136 | * @param string $key
137 | * The immediate key of the property.
138 | *
139 | * @return mixed
140 | */
141 | protected function expandStringProperties(
142 | Data $data,
143 | string $parent_keys,
144 | ?Data $reference_data,
145 | string $value,
146 | string $key
147 | ): mixed {
148 | $pattern = '/\$\{([^\$}]+)\}/';
149 | // We loop through all placeholders in a given string.
150 | // E.g., '${placeholder1} ${placeholder2}' requires two replacements.
151 | while (str_contains((string) $value, '${')) {
152 | $original_value = $value;
153 | $value = preg_replace_callback(
154 | $pattern,
155 | function ($matches) use ($data, $reference_data) {
156 | return $this->expandStringPropertiesCallback($matches, $data, $reference_data);
157 | },
158 | $value,
159 | -1,
160 | $count
161 | );
162 |
163 | // If the value was just a _single_ property reference, we have the opportunity to preserve the data type.
164 | if ($count === 1) {
165 | preg_match($pattern, $original_value, $matches);
166 | if ($matches[0] === $original_value) {
167 | $value = $this->expandStringPropertiesCallback($matches, $data, $reference_data);
168 | }
169 | }
170 |
171 | // If no replacement occurred at all, break to prevent
172 | // infinite loop.
173 | if ($original_value === $value) {
174 | break;
175 | }
176 |
177 | // Set value on $data object.
178 | if ($parent_keys) {
179 | $full_key = $parent_keys . "$key";
180 | } else {
181 | $full_key = $key;
182 | }
183 | $data->set($full_key, $value);
184 | }
185 | return $value;
186 | }
187 |
188 | /**
189 | * Expansion callback used by preg_replace_callback() in expandProperty().
190 | *
191 | * @param array $matches
192 | * An array of matches created by preg_replace_callback().
193 | * @param Data $data
194 | * A data object containing the complete array being operated upon.
195 | * @param Data|null $reference_data
196 | * A reference data object. This is not operated upon but is used as a
197 | * reference to provide supplemental values for property expansion.
198 | *
199 | * @return mixed
200 | */
201 | public function expandStringPropertiesCallback(
202 | array $matches,
203 | Data $data,
204 | ?Data $reference_data = null
205 | ): mixed {
206 | $property_name = $matches[1];
207 | $unexpanded_value = $matches[0];
208 |
209 | // Use only values within the subject array's data.
210 | if (!$reference_data) {
211 | return $this->expandProperty($property_name, $unexpanded_value, $data);
212 | } else {
213 | // Search both the subject array's data and the reference data for a value.
214 | return $this->expandPropertyWithReferenceData(
215 | $property_name,
216 | $unexpanded_value,
217 | $data,
218 | $reference_data
219 | );
220 | }
221 | }
222 |
223 | /**
224 | * Searches both the subject data and the reference data for value.
225 | *
226 | * @param string $property_name
227 | * The name of the value for which to search.
228 | * @param string $unexpanded_value
229 | * The original, unexpanded value, containing the placeholder.
230 | * @param Data $data
231 | * A data object containing the complete array being operated upon.
232 | * @param Data|null $reference_data
233 | * A reference data object. This is not operated upon but is used as a
234 | * reference to provide supplemental values for property expansion.
235 | *
236 | * @return string|null The expanded string.
237 | * The expanded string.
238 | */
239 | public function expandPropertyWithReferenceData(
240 | string $property_name,
241 | string $unexpanded_value,
242 | Data $data,
243 | ?Data $reference_data
244 | ): ?string {
245 | $expanded_value = $this->expandProperty(
246 | $property_name,
247 | $unexpanded_value,
248 | $data
249 | );
250 | // If the string was not changed using the subject data, try using
251 | // the reference data.
252 | if ($expanded_value === $unexpanded_value) {
253 | $expanded_value = $this->expandProperty(
254 | $property_name,
255 | $unexpanded_value,
256 | $reference_data
257 | );
258 | }
259 |
260 | return $expanded_value;
261 | }
262 |
263 | /**
264 | * Searches a data object for a value.
265 | *
266 | * @param string $property_name
267 | * The name of the value for which to search.
268 | * @param string $unexpanded_value
269 | * The original, unexpanded value, containing the placeholder.
270 | * @param Data $data
271 | * A data object containing possible replacement values.
272 | *
273 | * @return mixed
274 | */
275 | public function expandProperty(string $property_name, string $unexpanded_value, Data $data): mixed
276 | {
277 | if (str_starts_with($property_name, "env.") &&
278 | !$data->has($property_name)) {
279 | $env_key = substr($property_name, 4);
280 | if (isset($_SERVER[$env_key])) {
281 | $data->set($property_name, $_SERVER[$env_key]);
282 | } elseif (getenv($env_key)) {
283 | $data->set($property_name, getenv($env_key));
284 | }
285 | }
286 |
287 | if (!$data->has($property_name)) {
288 | $this->log("Property \${'$property_name'} could not be expanded.");
289 | return $unexpanded_value;
290 | } else {
291 | $expanded_value = $data->get($property_name);
292 | if (is_array($expanded_value)) {
293 | return $this->getStringifier()->stringifyArray($expanded_value);
294 | }
295 | $this->log("Expanding property \${'$property_name'} => $expanded_value.");
296 | return $expanded_value;
297 | }
298 | }
299 |
300 | /**
301 | * Logs a message using the logger.
302 | *
303 | * @param string $message
304 | * The message to log.
305 | */
306 | public function log(string $message)
307 | {
308 | $this->getLogger()?->debug($message);
309 | }
310 | }
311 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "8f3deabcf159c303a22979b754e158b2",
8 | "packages": [
9 | {
10 | "name": "dflydev/dot-access-data",
11 | "version": "v3.0.1",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
15 | "reference": "0992cc19268b259a39e86f296da5f0677841f42c"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
20 | "reference": "0992cc19268b259a39e86f296da5f0677841f42c",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": "^7.1 || ^8.0"
25 | },
26 | "require-dev": {
27 | "phpstan/phpstan": "^0.12.42",
28 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
29 | "scrutinizer/ocular": "1.6.0",
30 | "squizlabs/php_codesniffer": "^3.5",
31 | "vimeo/psalm": "^3.14"
32 | },
33 | "type": "library",
34 | "extra": {
35 | "branch-alias": {
36 | "dev-main": "3.x-dev"
37 | }
38 | },
39 | "autoload": {
40 | "psr-4": {
41 | "Dflydev\\DotAccessData\\": "src/"
42 | }
43 | },
44 | "notification-url": "https://packagist.org/downloads/",
45 | "license": [
46 | "MIT"
47 | ],
48 | "authors": [
49 | {
50 | "name": "Dragonfly Development Inc.",
51 | "email": "info@dflydev.com",
52 | "homepage": "http://dflydev.com"
53 | },
54 | {
55 | "name": "Beau Simensen",
56 | "email": "beau@dflydev.com",
57 | "homepage": "http://beausimensen.com"
58 | },
59 | {
60 | "name": "Carlos Frutos",
61 | "email": "carlos@kiwing.it",
62 | "homepage": "https://github.com/cfrutos"
63 | },
64 | {
65 | "name": "Colin O'Dell",
66 | "email": "colinodell@gmail.com",
67 | "homepage": "https://www.colinodell.com"
68 | }
69 | ],
70 | "description": "Given a deep data structure, access data by dot notation.",
71 | "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
72 | "keywords": [
73 | "access",
74 | "data",
75 | "dot",
76 | "notation"
77 | ],
78 | "support": {
79 | "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
80 | "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
81 | },
82 | "time": "2021-08-13T13:06:58+00:00"
83 | },
84 | {
85 | "name": "psr/log",
86 | "version": "2.0.0",
87 | "source": {
88 | "type": "git",
89 | "url": "https://github.com/php-fig/log.git",
90 | "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
91 | },
92 | "dist": {
93 | "type": "zip",
94 | "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
95 | "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
96 | "shasum": ""
97 | },
98 | "require": {
99 | "php": ">=8.0.0"
100 | },
101 | "type": "library",
102 | "extra": {
103 | "branch-alias": {
104 | "dev-master": "2.0.x-dev"
105 | }
106 | },
107 | "autoload": {
108 | "psr-4": {
109 | "Psr\\Log\\": "src"
110 | }
111 | },
112 | "notification-url": "https://packagist.org/downloads/",
113 | "license": [
114 | "MIT"
115 | ],
116 | "authors": [
117 | {
118 | "name": "PHP-FIG",
119 | "homepage": "https://www.php-fig.org/"
120 | }
121 | ],
122 | "description": "Common interface for logging libraries",
123 | "homepage": "https://github.com/php-fig/log",
124 | "keywords": [
125 | "log",
126 | "psr",
127 | "psr-3"
128 | ],
129 | "support": {
130 | "source": "https://github.com/php-fig/log/tree/2.0.0"
131 | },
132 | "time": "2021-07-14T16:41:46+00:00"
133 | }
134 | ],
135 | "packages-dev": [
136 | {
137 | "name": "doctrine/instantiator",
138 | "version": "1.4.1",
139 | "source": {
140 | "type": "git",
141 | "url": "https://github.com/doctrine/instantiator.git",
142 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
143 | },
144 | "dist": {
145 | "type": "zip",
146 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
147 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
148 | "shasum": ""
149 | },
150 | "require": {
151 | "php": "^7.1 || ^8.0"
152 | },
153 | "require-dev": {
154 | "doctrine/coding-standard": "^9",
155 | "ext-pdo": "*",
156 | "ext-phar": "*",
157 | "phpbench/phpbench": "^0.16 || ^1",
158 | "phpstan/phpstan": "^1.4",
159 | "phpstan/phpstan-phpunit": "^1",
160 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
161 | "vimeo/psalm": "^4.22"
162 | },
163 | "type": "library",
164 | "autoload": {
165 | "psr-4": {
166 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
167 | }
168 | },
169 | "notification-url": "https://packagist.org/downloads/",
170 | "license": [
171 | "MIT"
172 | ],
173 | "authors": [
174 | {
175 | "name": "Marco Pivetta",
176 | "email": "ocramius@gmail.com",
177 | "homepage": "https://ocramius.github.io/"
178 | }
179 | ],
180 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
181 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
182 | "keywords": [
183 | "constructor",
184 | "instantiate"
185 | ],
186 | "support": {
187 | "issues": "https://github.com/doctrine/instantiator/issues",
188 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
189 | },
190 | "funding": [
191 | {
192 | "url": "https://www.doctrine-project.org/sponsorship.html",
193 | "type": "custom"
194 | },
195 | {
196 | "url": "https://www.patreon.com/phpdoctrine",
197 | "type": "patreon"
198 | },
199 | {
200 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
201 | "type": "tidelift"
202 | }
203 | ],
204 | "time": "2022-03-03T08:28:38+00:00"
205 | },
206 | {
207 | "name": "greg-1-anderson/composer-test-scenarios",
208 | "version": "1.0.3",
209 | "source": {
210 | "type": "git",
211 | "url": "https://github.com/g1a/composer-test-scenarios.git",
212 | "reference": "240841a15f332750d5f0499371f880e9ea5b18cc"
213 | },
214 | "dist": {
215 | "type": "zip",
216 | "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/240841a15f332750d5f0499371f880e9ea5b18cc",
217 | "reference": "240841a15f332750d5f0499371f880e9ea5b18cc",
218 | "shasum": ""
219 | },
220 | "bin": [
221 | "scripts/create-scenario",
222 | "scripts/dependency-licenses",
223 | "scripts/install-scenario"
224 | ],
225 | "type": "library",
226 | "notification-url": "https://packagist.org/downloads/",
227 | "license": [
228 | "MIT"
229 | ],
230 | "authors": [
231 | {
232 | "name": "Greg Anderson",
233 | "email": "greg.1.anderson@greenknowe.org"
234 | }
235 | ],
236 | "description": "Useful scripts for testing multiple sets of Composer dependencies.",
237 | "support": {
238 | "issues": "https://github.com/g1a/composer-test-scenarios/issues",
239 | "source": "https://github.com/g1a/composer-test-scenarios/tree/1.0.3"
240 | },
241 | "abandoned": "g1a/composer-test-scenarios",
242 | "time": "2018-03-07T21:36:05+00:00"
243 | },
244 | {
245 | "name": "guzzlehttp/guzzle",
246 | "version": "7.4.2",
247 | "source": {
248 | "type": "git",
249 | "url": "https://github.com/guzzle/guzzle.git",
250 | "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4"
251 | },
252 | "dist": {
253 | "type": "zip",
254 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ac1ec1cd9b5624694c3a40be801d94137afb12b4",
255 | "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4",
256 | "shasum": ""
257 | },
258 | "require": {
259 | "ext-json": "*",
260 | "guzzlehttp/promises": "^1.5",
261 | "guzzlehttp/psr7": "^1.8.3 || ^2.1",
262 | "php": "^7.2.5 || ^8.0",
263 | "psr/http-client": "^1.0",
264 | "symfony/deprecation-contracts": "^2.2 || ^3.0"
265 | },
266 | "provide": {
267 | "psr/http-client-implementation": "1.0"
268 | },
269 | "require-dev": {
270 | "bamarni/composer-bin-plugin": "^1.4.1",
271 | "ext-curl": "*",
272 | "php-http/client-integration-tests": "^3.0",
273 | "phpunit/phpunit": "^8.5.5 || ^9.3.5",
274 | "psr/log": "^1.1 || ^2.0 || ^3.0"
275 | },
276 | "suggest": {
277 | "ext-curl": "Required for CURL handler support",
278 | "ext-intl": "Required for Internationalized Domain Name (IDN) support",
279 | "psr/log": "Required for using the Log middleware"
280 | },
281 | "type": "library",
282 | "extra": {
283 | "branch-alias": {
284 | "dev-master": "7.4-dev"
285 | }
286 | },
287 | "autoload": {
288 | "files": [
289 | "src/functions_include.php"
290 | ],
291 | "psr-4": {
292 | "GuzzleHttp\\": "src/"
293 | }
294 | },
295 | "notification-url": "https://packagist.org/downloads/",
296 | "license": [
297 | "MIT"
298 | ],
299 | "authors": [
300 | {
301 | "name": "Graham Campbell",
302 | "email": "hello@gjcampbell.co.uk",
303 | "homepage": "https://github.com/GrahamCampbell"
304 | },
305 | {
306 | "name": "Michael Dowling",
307 | "email": "mtdowling@gmail.com",
308 | "homepage": "https://github.com/mtdowling"
309 | },
310 | {
311 | "name": "Jeremy Lindblom",
312 | "email": "jeremeamia@gmail.com",
313 | "homepage": "https://github.com/jeremeamia"
314 | },
315 | {
316 | "name": "George Mponos",
317 | "email": "gmponos@gmail.com",
318 | "homepage": "https://github.com/gmponos"
319 | },
320 | {
321 | "name": "Tobias Nyholm",
322 | "email": "tobias.nyholm@gmail.com",
323 | "homepage": "https://github.com/Nyholm"
324 | },
325 | {
326 | "name": "Márk Sági-Kazár",
327 | "email": "mark.sagikazar@gmail.com",
328 | "homepage": "https://github.com/sagikazarmark"
329 | },
330 | {
331 | "name": "Tobias Schultze",
332 | "email": "webmaster@tubo-world.de",
333 | "homepage": "https://github.com/Tobion"
334 | }
335 | ],
336 | "description": "Guzzle is a PHP HTTP client library",
337 | "keywords": [
338 | "client",
339 | "curl",
340 | "framework",
341 | "http",
342 | "http client",
343 | "psr-18",
344 | "psr-7",
345 | "rest",
346 | "web service"
347 | ],
348 | "support": {
349 | "issues": "https://github.com/guzzle/guzzle/issues",
350 | "source": "https://github.com/guzzle/guzzle/tree/7.4.2"
351 | },
352 | "funding": [
353 | {
354 | "url": "https://github.com/GrahamCampbell",
355 | "type": "github"
356 | },
357 | {
358 | "url": "https://github.com/Nyholm",
359 | "type": "github"
360 | },
361 | {
362 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
363 | "type": "tidelift"
364 | }
365 | ],
366 | "time": "2022-03-20T14:16:28+00:00"
367 | },
368 | {
369 | "name": "guzzlehttp/promises",
370 | "version": "1.5.1",
371 | "source": {
372 | "type": "git",
373 | "url": "https://github.com/guzzle/promises.git",
374 | "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
375 | },
376 | "dist": {
377 | "type": "zip",
378 | "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
379 | "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
380 | "shasum": ""
381 | },
382 | "require": {
383 | "php": ">=5.5"
384 | },
385 | "require-dev": {
386 | "symfony/phpunit-bridge": "^4.4 || ^5.1"
387 | },
388 | "type": "library",
389 | "extra": {
390 | "branch-alias": {
391 | "dev-master": "1.5-dev"
392 | }
393 | },
394 | "autoload": {
395 | "files": [
396 | "src/functions_include.php"
397 | ],
398 | "psr-4": {
399 | "GuzzleHttp\\Promise\\": "src/"
400 | }
401 | },
402 | "notification-url": "https://packagist.org/downloads/",
403 | "license": [
404 | "MIT"
405 | ],
406 | "authors": [
407 | {
408 | "name": "Graham Campbell",
409 | "email": "hello@gjcampbell.co.uk",
410 | "homepage": "https://github.com/GrahamCampbell"
411 | },
412 | {
413 | "name": "Michael Dowling",
414 | "email": "mtdowling@gmail.com",
415 | "homepage": "https://github.com/mtdowling"
416 | },
417 | {
418 | "name": "Tobias Nyholm",
419 | "email": "tobias.nyholm@gmail.com",
420 | "homepage": "https://github.com/Nyholm"
421 | },
422 | {
423 | "name": "Tobias Schultze",
424 | "email": "webmaster@tubo-world.de",
425 | "homepage": "https://github.com/Tobion"
426 | }
427 | ],
428 | "description": "Guzzle promises library",
429 | "keywords": [
430 | "promise"
431 | ],
432 | "support": {
433 | "issues": "https://github.com/guzzle/promises/issues",
434 | "source": "https://github.com/guzzle/promises/tree/1.5.1"
435 | },
436 | "funding": [
437 | {
438 | "url": "https://github.com/GrahamCampbell",
439 | "type": "github"
440 | },
441 | {
442 | "url": "https://github.com/Nyholm",
443 | "type": "github"
444 | },
445 | {
446 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
447 | "type": "tidelift"
448 | }
449 | ],
450 | "time": "2021-10-22T20:56:57+00:00"
451 | },
452 | {
453 | "name": "guzzlehttp/psr7",
454 | "version": "2.2.1",
455 | "source": {
456 | "type": "git",
457 | "url": "https://github.com/guzzle/psr7.git",
458 | "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2"
459 | },
460 | "dist": {
461 | "type": "zip",
462 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2",
463 | "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2",
464 | "shasum": ""
465 | },
466 | "require": {
467 | "php": "^7.2.5 || ^8.0",
468 | "psr/http-factory": "^1.0",
469 | "psr/http-message": "^1.0",
470 | "ralouphie/getallheaders": "^3.0"
471 | },
472 | "provide": {
473 | "psr/http-factory-implementation": "1.0",
474 | "psr/http-message-implementation": "1.0"
475 | },
476 | "require-dev": {
477 | "bamarni/composer-bin-plugin": "^1.4.1",
478 | "http-interop/http-factory-tests": "^0.9",
479 | "phpunit/phpunit": "^8.5.8 || ^9.3.10"
480 | },
481 | "suggest": {
482 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
483 | },
484 | "type": "library",
485 | "extra": {
486 | "branch-alias": {
487 | "dev-master": "2.2-dev"
488 | }
489 | },
490 | "autoload": {
491 | "psr-4": {
492 | "GuzzleHttp\\Psr7\\": "src/"
493 | }
494 | },
495 | "notification-url": "https://packagist.org/downloads/",
496 | "license": [
497 | "MIT"
498 | ],
499 | "authors": [
500 | {
501 | "name": "Graham Campbell",
502 | "email": "hello@gjcampbell.co.uk",
503 | "homepage": "https://github.com/GrahamCampbell"
504 | },
505 | {
506 | "name": "Michael Dowling",
507 | "email": "mtdowling@gmail.com",
508 | "homepage": "https://github.com/mtdowling"
509 | },
510 | {
511 | "name": "George Mponos",
512 | "email": "gmponos@gmail.com",
513 | "homepage": "https://github.com/gmponos"
514 | },
515 | {
516 | "name": "Tobias Nyholm",
517 | "email": "tobias.nyholm@gmail.com",
518 | "homepage": "https://github.com/Nyholm"
519 | },
520 | {
521 | "name": "Márk Sági-Kazár",
522 | "email": "mark.sagikazar@gmail.com",
523 | "homepage": "https://github.com/sagikazarmark"
524 | },
525 | {
526 | "name": "Tobias Schultze",
527 | "email": "webmaster@tubo-world.de",
528 | "homepage": "https://github.com/Tobion"
529 | },
530 | {
531 | "name": "Márk Sági-Kazár",
532 | "email": "mark.sagikazar@gmail.com",
533 | "homepage": "https://sagikazarmark.hu"
534 | }
535 | ],
536 | "description": "PSR-7 message implementation that also provides common utility methods",
537 | "keywords": [
538 | "http",
539 | "message",
540 | "psr-7",
541 | "request",
542 | "response",
543 | "stream",
544 | "uri",
545 | "url"
546 | ],
547 | "support": {
548 | "issues": "https://github.com/guzzle/psr7/issues",
549 | "source": "https://github.com/guzzle/psr7/tree/2.2.1"
550 | },
551 | "funding": [
552 | {
553 | "url": "https://github.com/GrahamCampbell",
554 | "type": "github"
555 | },
556 | {
557 | "url": "https://github.com/Nyholm",
558 | "type": "github"
559 | },
560 | {
561 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
562 | "type": "tidelift"
563 | }
564 | ],
565 | "time": "2022-03-20T21:55:58+00:00"
566 | },
567 | {
568 | "name": "myclabs/deep-copy",
569 | "version": "1.11.0",
570 | "source": {
571 | "type": "git",
572 | "url": "https://github.com/myclabs/DeepCopy.git",
573 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
574 | },
575 | "dist": {
576 | "type": "zip",
577 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
578 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
579 | "shasum": ""
580 | },
581 | "require": {
582 | "php": "^7.1 || ^8.0"
583 | },
584 | "conflict": {
585 | "doctrine/collections": "<1.6.8",
586 | "doctrine/common": "<2.13.3 || >=3,<3.2.2"
587 | },
588 | "require-dev": {
589 | "doctrine/collections": "^1.6.8",
590 | "doctrine/common": "^2.13.3 || ^3.2.2",
591 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
592 | },
593 | "type": "library",
594 | "autoload": {
595 | "files": [
596 | "src/DeepCopy/deep_copy.php"
597 | ],
598 | "psr-4": {
599 | "DeepCopy\\": "src/DeepCopy/"
600 | }
601 | },
602 | "notification-url": "https://packagist.org/downloads/",
603 | "license": [
604 | "MIT"
605 | ],
606 | "description": "Create deep copies (clones) of your objects",
607 | "keywords": [
608 | "clone",
609 | "copy",
610 | "duplicate",
611 | "object",
612 | "object graph"
613 | ],
614 | "support": {
615 | "issues": "https://github.com/myclabs/DeepCopy/issues",
616 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
617 | },
618 | "funding": [
619 | {
620 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
621 | "type": "tidelift"
622 | }
623 | ],
624 | "time": "2022-03-03T13:19:32+00:00"
625 | },
626 | {
627 | "name": "nikic/php-parser",
628 | "version": "v4.13.2",
629 | "source": {
630 | "type": "git",
631 | "url": "https://github.com/nikic/PHP-Parser.git",
632 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
633 | },
634 | "dist": {
635 | "type": "zip",
636 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
637 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
638 | "shasum": ""
639 | },
640 | "require": {
641 | "ext-tokenizer": "*",
642 | "php": ">=7.0"
643 | },
644 | "require-dev": {
645 | "ircmaxell/php-yacc": "^0.0.7",
646 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
647 | },
648 | "bin": [
649 | "bin/php-parse"
650 | ],
651 | "type": "library",
652 | "extra": {
653 | "branch-alias": {
654 | "dev-master": "4.9-dev"
655 | }
656 | },
657 | "autoload": {
658 | "psr-4": {
659 | "PhpParser\\": "lib/PhpParser"
660 | }
661 | },
662 | "notification-url": "https://packagist.org/downloads/",
663 | "license": [
664 | "BSD-3-Clause"
665 | ],
666 | "authors": [
667 | {
668 | "name": "Nikita Popov"
669 | }
670 | ],
671 | "description": "A PHP parser written in PHP",
672 | "keywords": [
673 | "parser",
674 | "php"
675 | ],
676 | "support": {
677 | "issues": "https://github.com/nikic/PHP-Parser/issues",
678 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
679 | },
680 | "time": "2021-11-30T19:35:32+00:00"
681 | },
682 | {
683 | "name": "phar-io/manifest",
684 | "version": "2.0.3",
685 | "source": {
686 | "type": "git",
687 | "url": "https://github.com/phar-io/manifest.git",
688 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
689 | },
690 | "dist": {
691 | "type": "zip",
692 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
693 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
694 | "shasum": ""
695 | },
696 | "require": {
697 | "ext-dom": "*",
698 | "ext-phar": "*",
699 | "ext-xmlwriter": "*",
700 | "phar-io/version": "^3.0.1",
701 | "php": "^7.2 || ^8.0"
702 | },
703 | "type": "library",
704 | "extra": {
705 | "branch-alias": {
706 | "dev-master": "2.0.x-dev"
707 | }
708 | },
709 | "autoload": {
710 | "classmap": [
711 | "src/"
712 | ]
713 | },
714 | "notification-url": "https://packagist.org/downloads/",
715 | "license": [
716 | "BSD-3-Clause"
717 | ],
718 | "authors": [
719 | {
720 | "name": "Arne Blankerts",
721 | "email": "arne@blankerts.de",
722 | "role": "Developer"
723 | },
724 | {
725 | "name": "Sebastian Heuer",
726 | "email": "sebastian@phpeople.de",
727 | "role": "Developer"
728 | },
729 | {
730 | "name": "Sebastian Bergmann",
731 | "email": "sebastian@phpunit.de",
732 | "role": "Developer"
733 | }
734 | ],
735 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
736 | "support": {
737 | "issues": "https://github.com/phar-io/manifest/issues",
738 | "source": "https://github.com/phar-io/manifest/tree/2.0.3"
739 | },
740 | "time": "2021-07-20T11:28:43+00:00"
741 | },
742 | {
743 | "name": "phar-io/version",
744 | "version": "3.2.1",
745 | "source": {
746 | "type": "git",
747 | "url": "https://github.com/phar-io/version.git",
748 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
749 | },
750 | "dist": {
751 | "type": "zip",
752 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
753 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
754 | "shasum": ""
755 | },
756 | "require": {
757 | "php": "^7.2 || ^8.0"
758 | },
759 | "type": "library",
760 | "autoload": {
761 | "classmap": [
762 | "src/"
763 | ]
764 | },
765 | "notification-url": "https://packagist.org/downloads/",
766 | "license": [
767 | "BSD-3-Clause"
768 | ],
769 | "authors": [
770 | {
771 | "name": "Arne Blankerts",
772 | "email": "arne@blankerts.de",
773 | "role": "Developer"
774 | },
775 | {
776 | "name": "Sebastian Heuer",
777 | "email": "sebastian@phpeople.de",
778 | "role": "Developer"
779 | },
780 | {
781 | "name": "Sebastian Bergmann",
782 | "email": "sebastian@phpunit.de",
783 | "role": "Developer"
784 | }
785 | ],
786 | "description": "Library for handling version information and constraints",
787 | "support": {
788 | "issues": "https://github.com/phar-io/version/issues",
789 | "source": "https://github.com/phar-io/version/tree/3.2.1"
790 | },
791 | "time": "2022-02-21T01:04:05+00:00"
792 | },
793 | {
794 | "name": "php-coveralls/php-coveralls",
795 | "version": "v2.5.2",
796 | "source": {
797 | "type": "git",
798 | "url": "https://github.com/php-coveralls/php-coveralls.git",
799 | "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4"
800 | },
801 | "dist": {
802 | "type": "zip",
803 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4",
804 | "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4",
805 | "shasum": ""
806 | },
807 | "require": {
808 | "ext-json": "*",
809 | "ext-simplexml": "*",
810 | "guzzlehttp/guzzle": "^6.0 || ^7.0",
811 | "php": "^5.5 || ^7.0 || ^8.0",
812 | "psr/log": "^1.0 || ^2.0",
813 | "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
814 | "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
815 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
816 | "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
817 | },
818 | "require-dev": {
819 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
820 | "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0"
821 | },
822 | "suggest": {
823 | "symfony/http-kernel": "Allows Symfony integration"
824 | },
825 | "bin": [
826 | "bin/php-coveralls"
827 | ],
828 | "type": "library",
829 | "autoload": {
830 | "psr-4": {
831 | "PhpCoveralls\\": "src/"
832 | }
833 | },
834 | "notification-url": "https://packagist.org/downloads/",
835 | "license": [
836 | "MIT"
837 | ],
838 | "authors": [
839 | {
840 | "name": "Kitamura Satoshi",
841 | "email": "with.no.parachute@gmail.com",
842 | "homepage": "https://www.facebook.com/satooshi.jp",
843 | "role": "Original creator"
844 | },
845 | {
846 | "name": "Takashi Matsuo",
847 | "email": "tmatsuo@google.com"
848 | },
849 | {
850 | "name": "Google Inc"
851 | },
852 | {
853 | "name": "Dariusz Ruminski",
854 | "email": "dariusz.ruminski@gmail.com",
855 | "homepage": "https://github.com/keradus"
856 | },
857 | {
858 | "name": "Contributors",
859 | "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
860 | }
861 | ],
862 | "description": "PHP client library for Coveralls API",
863 | "homepage": "https://github.com/php-coveralls/php-coveralls",
864 | "keywords": [
865 | "ci",
866 | "coverage",
867 | "github",
868 | "test"
869 | ],
870 | "support": {
871 | "issues": "https://github.com/php-coveralls/php-coveralls/issues",
872 | "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.5.2"
873 | },
874 | "time": "2021-12-06T17:05:08+00:00"
875 | },
876 | {
877 | "name": "phpdocumentor/reflection-common",
878 | "version": "2.2.0",
879 | "source": {
880 | "type": "git",
881 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
882 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
883 | },
884 | "dist": {
885 | "type": "zip",
886 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
887 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
888 | "shasum": ""
889 | },
890 | "require": {
891 | "php": "^7.2 || ^8.0"
892 | },
893 | "type": "library",
894 | "extra": {
895 | "branch-alias": {
896 | "dev-2.x": "2.x-dev"
897 | }
898 | },
899 | "autoload": {
900 | "psr-4": {
901 | "phpDocumentor\\Reflection\\": "src/"
902 | }
903 | },
904 | "notification-url": "https://packagist.org/downloads/",
905 | "license": [
906 | "MIT"
907 | ],
908 | "authors": [
909 | {
910 | "name": "Jaap van Otterdijk",
911 | "email": "opensource@ijaap.nl"
912 | }
913 | ],
914 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
915 | "homepage": "http://www.phpdoc.org",
916 | "keywords": [
917 | "FQSEN",
918 | "phpDocumentor",
919 | "phpdoc",
920 | "reflection",
921 | "static analysis"
922 | ],
923 | "support": {
924 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
925 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
926 | },
927 | "time": "2020-06-27T09:03:43+00:00"
928 | },
929 | {
930 | "name": "phpdocumentor/reflection-docblock",
931 | "version": "5.3.0",
932 | "source": {
933 | "type": "git",
934 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
935 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
936 | },
937 | "dist": {
938 | "type": "zip",
939 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
940 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
941 | "shasum": ""
942 | },
943 | "require": {
944 | "ext-filter": "*",
945 | "php": "^7.2 || ^8.0",
946 | "phpdocumentor/reflection-common": "^2.2",
947 | "phpdocumentor/type-resolver": "^1.3",
948 | "webmozart/assert": "^1.9.1"
949 | },
950 | "require-dev": {
951 | "mockery/mockery": "~1.3.2",
952 | "psalm/phar": "^4.8"
953 | },
954 | "type": "library",
955 | "extra": {
956 | "branch-alias": {
957 | "dev-master": "5.x-dev"
958 | }
959 | },
960 | "autoload": {
961 | "psr-4": {
962 | "phpDocumentor\\Reflection\\": "src"
963 | }
964 | },
965 | "notification-url": "https://packagist.org/downloads/",
966 | "license": [
967 | "MIT"
968 | ],
969 | "authors": [
970 | {
971 | "name": "Mike van Riel",
972 | "email": "me@mikevanriel.com"
973 | },
974 | {
975 | "name": "Jaap van Otterdijk",
976 | "email": "account@ijaap.nl"
977 | }
978 | ],
979 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
980 | "support": {
981 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
982 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
983 | },
984 | "time": "2021-10-19T17:43:47+00:00"
985 | },
986 | {
987 | "name": "phpdocumentor/type-resolver",
988 | "version": "1.6.1",
989 | "source": {
990 | "type": "git",
991 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
992 | "reference": "77a32518733312af16a44300404e945338981de3"
993 | },
994 | "dist": {
995 | "type": "zip",
996 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
997 | "reference": "77a32518733312af16a44300404e945338981de3",
998 | "shasum": ""
999 | },
1000 | "require": {
1001 | "php": "^7.2 || ^8.0",
1002 | "phpdocumentor/reflection-common": "^2.0"
1003 | },
1004 | "require-dev": {
1005 | "ext-tokenizer": "*",
1006 | "psalm/phar": "^4.8"
1007 | },
1008 | "type": "library",
1009 | "extra": {
1010 | "branch-alias": {
1011 | "dev-1.x": "1.x-dev"
1012 | }
1013 | },
1014 | "autoload": {
1015 | "psr-4": {
1016 | "phpDocumentor\\Reflection\\": "src"
1017 | }
1018 | },
1019 | "notification-url": "https://packagist.org/downloads/",
1020 | "license": [
1021 | "MIT"
1022 | ],
1023 | "authors": [
1024 | {
1025 | "name": "Mike van Riel",
1026 | "email": "me@mikevanriel.com"
1027 | }
1028 | ],
1029 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
1030 | "support": {
1031 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
1032 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
1033 | },
1034 | "time": "2022-03-15T21:29:03+00:00"
1035 | },
1036 | {
1037 | "name": "phpspec/prophecy",
1038 | "version": "v1.15.0",
1039 | "source": {
1040 | "type": "git",
1041 | "url": "https://github.com/phpspec/prophecy.git",
1042 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
1043 | },
1044 | "dist": {
1045 | "type": "zip",
1046 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
1047 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
1048 | "shasum": ""
1049 | },
1050 | "require": {
1051 | "doctrine/instantiator": "^1.2",
1052 | "php": "^7.2 || ~8.0, <8.2",
1053 | "phpdocumentor/reflection-docblock": "^5.2",
1054 | "sebastian/comparator": "^3.0 || ^4.0",
1055 | "sebastian/recursion-context": "^3.0 || ^4.0"
1056 | },
1057 | "require-dev": {
1058 | "phpspec/phpspec": "^6.0 || ^7.0",
1059 | "phpunit/phpunit": "^8.0 || ^9.0"
1060 | },
1061 | "type": "library",
1062 | "extra": {
1063 | "branch-alias": {
1064 | "dev-master": "1.x-dev"
1065 | }
1066 | },
1067 | "autoload": {
1068 | "psr-4": {
1069 | "Prophecy\\": "src/Prophecy"
1070 | }
1071 | },
1072 | "notification-url": "https://packagist.org/downloads/",
1073 | "license": [
1074 | "MIT"
1075 | ],
1076 | "authors": [
1077 | {
1078 | "name": "Konstantin Kudryashov",
1079 | "email": "ever.zet@gmail.com",
1080 | "homepage": "http://everzet.com"
1081 | },
1082 | {
1083 | "name": "Marcello Duarte",
1084 | "email": "marcello.duarte@gmail.com"
1085 | }
1086 | ],
1087 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1088 | "homepage": "https://github.com/phpspec/prophecy",
1089 | "keywords": [
1090 | "Double",
1091 | "Dummy",
1092 | "fake",
1093 | "mock",
1094 | "spy",
1095 | "stub"
1096 | ],
1097 | "support": {
1098 | "issues": "https://github.com/phpspec/prophecy/issues",
1099 | "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
1100 | },
1101 | "time": "2021-12-08T12:19:24+00:00"
1102 | },
1103 | {
1104 | "name": "phpunit/php-code-coverage",
1105 | "version": "9.2.15",
1106 | "source": {
1107 | "type": "git",
1108 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1109 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
1110 | },
1111 | "dist": {
1112 | "type": "zip",
1113 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
1114 | "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
1115 | "shasum": ""
1116 | },
1117 | "require": {
1118 | "ext-dom": "*",
1119 | "ext-libxml": "*",
1120 | "ext-xmlwriter": "*",
1121 | "nikic/php-parser": "^4.13.0",
1122 | "php": ">=7.3",
1123 | "phpunit/php-file-iterator": "^3.0.3",
1124 | "phpunit/php-text-template": "^2.0.2",
1125 | "sebastian/code-unit-reverse-lookup": "^2.0.2",
1126 | "sebastian/complexity": "^2.0",
1127 | "sebastian/environment": "^5.1.2",
1128 | "sebastian/lines-of-code": "^1.0.3",
1129 | "sebastian/version": "^3.0.1",
1130 | "theseer/tokenizer": "^1.2.0"
1131 | },
1132 | "require-dev": {
1133 | "phpunit/phpunit": "^9.3"
1134 | },
1135 | "suggest": {
1136 | "ext-pcov": "*",
1137 | "ext-xdebug": "*"
1138 | },
1139 | "type": "library",
1140 | "extra": {
1141 | "branch-alias": {
1142 | "dev-master": "9.2-dev"
1143 | }
1144 | },
1145 | "autoload": {
1146 | "classmap": [
1147 | "src/"
1148 | ]
1149 | },
1150 | "notification-url": "https://packagist.org/downloads/",
1151 | "license": [
1152 | "BSD-3-Clause"
1153 | ],
1154 | "authors": [
1155 | {
1156 | "name": "Sebastian Bergmann",
1157 | "email": "sebastian@phpunit.de",
1158 | "role": "lead"
1159 | }
1160 | ],
1161 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1162 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1163 | "keywords": [
1164 | "coverage",
1165 | "testing",
1166 | "xunit"
1167 | ],
1168 | "support": {
1169 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
1170 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
1171 | },
1172 | "funding": [
1173 | {
1174 | "url": "https://github.com/sebastianbergmann",
1175 | "type": "github"
1176 | }
1177 | ],
1178 | "time": "2022-03-07T09:28:20+00:00"
1179 | },
1180 | {
1181 | "name": "phpunit/php-file-iterator",
1182 | "version": "3.0.6",
1183 | "source": {
1184 | "type": "git",
1185 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1186 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
1187 | },
1188 | "dist": {
1189 | "type": "zip",
1190 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
1191 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
1192 | "shasum": ""
1193 | },
1194 | "require": {
1195 | "php": ">=7.3"
1196 | },
1197 | "require-dev": {
1198 | "phpunit/phpunit": "^9.3"
1199 | },
1200 | "type": "library",
1201 | "extra": {
1202 | "branch-alias": {
1203 | "dev-master": "3.0-dev"
1204 | }
1205 | },
1206 | "autoload": {
1207 | "classmap": [
1208 | "src/"
1209 | ]
1210 | },
1211 | "notification-url": "https://packagist.org/downloads/",
1212 | "license": [
1213 | "BSD-3-Clause"
1214 | ],
1215 | "authors": [
1216 | {
1217 | "name": "Sebastian Bergmann",
1218 | "email": "sebastian@phpunit.de",
1219 | "role": "lead"
1220 | }
1221 | ],
1222 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1223 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1224 | "keywords": [
1225 | "filesystem",
1226 | "iterator"
1227 | ],
1228 | "support": {
1229 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
1230 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
1231 | },
1232 | "funding": [
1233 | {
1234 | "url": "https://github.com/sebastianbergmann",
1235 | "type": "github"
1236 | }
1237 | ],
1238 | "time": "2021-12-02T12:48:52+00:00"
1239 | },
1240 | {
1241 | "name": "phpunit/php-invoker",
1242 | "version": "3.1.1",
1243 | "source": {
1244 | "type": "git",
1245 | "url": "https://github.com/sebastianbergmann/php-invoker.git",
1246 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
1247 | },
1248 | "dist": {
1249 | "type": "zip",
1250 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
1251 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
1252 | "shasum": ""
1253 | },
1254 | "require": {
1255 | "php": ">=7.3"
1256 | },
1257 | "require-dev": {
1258 | "ext-pcntl": "*",
1259 | "phpunit/phpunit": "^9.3"
1260 | },
1261 | "suggest": {
1262 | "ext-pcntl": "*"
1263 | },
1264 | "type": "library",
1265 | "extra": {
1266 | "branch-alias": {
1267 | "dev-master": "3.1-dev"
1268 | }
1269 | },
1270 | "autoload": {
1271 | "classmap": [
1272 | "src/"
1273 | ]
1274 | },
1275 | "notification-url": "https://packagist.org/downloads/",
1276 | "license": [
1277 | "BSD-3-Clause"
1278 | ],
1279 | "authors": [
1280 | {
1281 | "name": "Sebastian Bergmann",
1282 | "email": "sebastian@phpunit.de",
1283 | "role": "lead"
1284 | }
1285 | ],
1286 | "description": "Invoke callables with a timeout",
1287 | "homepage": "https://github.com/sebastianbergmann/php-invoker/",
1288 | "keywords": [
1289 | "process"
1290 | ],
1291 | "support": {
1292 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
1293 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
1294 | },
1295 | "funding": [
1296 | {
1297 | "url": "https://github.com/sebastianbergmann",
1298 | "type": "github"
1299 | }
1300 | ],
1301 | "time": "2020-09-28T05:58:55+00:00"
1302 | },
1303 | {
1304 | "name": "phpunit/php-text-template",
1305 | "version": "2.0.4",
1306 | "source": {
1307 | "type": "git",
1308 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1309 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
1310 | },
1311 | "dist": {
1312 | "type": "zip",
1313 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
1314 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
1315 | "shasum": ""
1316 | },
1317 | "require": {
1318 | "php": ">=7.3"
1319 | },
1320 | "require-dev": {
1321 | "phpunit/phpunit": "^9.3"
1322 | },
1323 | "type": "library",
1324 | "extra": {
1325 | "branch-alias": {
1326 | "dev-master": "2.0-dev"
1327 | }
1328 | },
1329 | "autoload": {
1330 | "classmap": [
1331 | "src/"
1332 | ]
1333 | },
1334 | "notification-url": "https://packagist.org/downloads/",
1335 | "license": [
1336 | "BSD-3-Clause"
1337 | ],
1338 | "authors": [
1339 | {
1340 | "name": "Sebastian Bergmann",
1341 | "email": "sebastian@phpunit.de",
1342 | "role": "lead"
1343 | }
1344 | ],
1345 | "description": "Simple template engine.",
1346 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1347 | "keywords": [
1348 | "template"
1349 | ],
1350 | "support": {
1351 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
1352 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
1353 | },
1354 | "funding": [
1355 | {
1356 | "url": "https://github.com/sebastianbergmann",
1357 | "type": "github"
1358 | }
1359 | ],
1360 | "time": "2020-10-26T05:33:50+00:00"
1361 | },
1362 | {
1363 | "name": "phpunit/php-timer",
1364 | "version": "5.0.3",
1365 | "source": {
1366 | "type": "git",
1367 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1368 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
1369 | },
1370 | "dist": {
1371 | "type": "zip",
1372 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
1373 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
1374 | "shasum": ""
1375 | },
1376 | "require": {
1377 | "php": ">=7.3"
1378 | },
1379 | "require-dev": {
1380 | "phpunit/phpunit": "^9.3"
1381 | },
1382 | "type": "library",
1383 | "extra": {
1384 | "branch-alias": {
1385 | "dev-master": "5.0-dev"
1386 | }
1387 | },
1388 | "autoload": {
1389 | "classmap": [
1390 | "src/"
1391 | ]
1392 | },
1393 | "notification-url": "https://packagist.org/downloads/",
1394 | "license": [
1395 | "BSD-3-Clause"
1396 | ],
1397 | "authors": [
1398 | {
1399 | "name": "Sebastian Bergmann",
1400 | "email": "sebastian@phpunit.de",
1401 | "role": "lead"
1402 | }
1403 | ],
1404 | "description": "Utility class for timing",
1405 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1406 | "keywords": [
1407 | "timer"
1408 | ],
1409 | "support": {
1410 | "issues": "https://github.com/sebastianbergmann/php-timer/issues",
1411 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
1412 | },
1413 | "funding": [
1414 | {
1415 | "url": "https://github.com/sebastianbergmann",
1416 | "type": "github"
1417 | }
1418 | ],
1419 | "time": "2020-10-26T13:16:10+00:00"
1420 | },
1421 | {
1422 | "name": "phpunit/phpunit",
1423 | "version": "9.5.20",
1424 | "source": {
1425 | "type": "git",
1426 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1427 | "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
1428 | },
1429 | "dist": {
1430 | "type": "zip",
1431 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
1432 | "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
1433 | "shasum": ""
1434 | },
1435 | "require": {
1436 | "doctrine/instantiator": "^1.3.1",
1437 | "ext-dom": "*",
1438 | "ext-json": "*",
1439 | "ext-libxml": "*",
1440 | "ext-mbstring": "*",
1441 | "ext-xml": "*",
1442 | "ext-xmlwriter": "*",
1443 | "myclabs/deep-copy": "^1.10.1",
1444 | "phar-io/manifest": "^2.0.3",
1445 | "phar-io/version": "^3.0.2",
1446 | "php": ">=7.3",
1447 | "phpspec/prophecy": "^1.12.1",
1448 | "phpunit/php-code-coverage": "^9.2.13",
1449 | "phpunit/php-file-iterator": "^3.0.5",
1450 | "phpunit/php-invoker": "^3.1.1",
1451 | "phpunit/php-text-template": "^2.0.3",
1452 | "phpunit/php-timer": "^5.0.2",
1453 | "sebastian/cli-parser": "^1.0.1",
1454 | "sebastian/code-unit": "^1.0.6",
1455 | "sebastian/comparator": "^4.0.5",
1456 | "sebastian/diff": "^4.0.3",
1457 | "sebastian/environment": "^5.1.3",
1458 | "sebastian/exporter": "^4.0.3",
1459 | "sebastian/global-state": "^5.0.1",
1460 | "sebastian/object-enumerator": "^4.0.3",
1461 | "sebastian/resource-operations": "^3.0.3",
1462 | "sebastian/type": "^3.0",
1463 | "sebastian/version": "^3.0.2"
1464 | },
1465 | "require-dev": {
1466 | "ext-pdo": "*",
1467 | "phpspec/prophecy-phpunit": "^2.0.1"
1468 | },
1469 | "suggest": {
1470 | "ext-soap": "*",
1471 | "ext-xdebug": "*"
1472 | },
1473 | "bin": [
1474 | "phpunit"
1475 | ],
1476 | "type": "library",
1477 | "extra": {
1478 | "branch-alias": {
1479 | "dev-master": "9.5-dev"
1480 | }
1481 | },
1482 | "autoload": {
1483 | "files": [
1484 | "src/Framework/Assert/Functions.php"
1485 | ],
1486 | "classmap": [
1487 | "src/"
1488 | ]
1489 | },
1490 | "notification-url": "https://packagist.org/downloads/",
1491 | "license": [
1492 | "BSD-3-Clause"
1493 | ],
1494 | "authors": [
1495 | {
1496 | "name": "Sebastian Bergmann",
1497 | "email": "sebastian@phpunit.de",
1498 | "role": "lead"
1499 | }
1500 | ],
1501 | "description": "The PHP Unit Testing framework.",
1502 | "homepage": "https://phpunit.de/",
1503 | "keywords": [
1504 | "phpunit",
1505 | "testing",
1506 | "xunit"
1507 | ],
1508 | "support": {
1509 | "issues": "https://github.com/sebastianbergmann/phpunit/issues",
1510 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
1511 | },
1512 | "funding": [
1513 | {
1514 | "url": "https://phpunit.de/sponsors.html",
1515 | "type": "custom"
1516 | },
1517 | {
1518 | "url": "https://github.com/sebastianbergmann",
1519 | "type": "github"
1520 | }
1521 | ],
1522 | "time": "2022-04-01T12:37:26+00:00"
1523 | },
1524 | {
1525 | "name": "psr/container",
1526 | "version": "2.0.2",
1527 | "source": {
1528 | "type": "git",
1529 | "url": "https://github.com/php-fig/container.git",
1530 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
1531 | },
1532 | "dist": {
1533 | "type": "zip",
1534 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1535 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
1536 | "shasum": ""
1537 | },
1538 | "require": {
1539 | "php": ">=7.4.0"
1540 | },
1541 | "type": "library",
1542 | "extra": {
1543 | "branch-alias": {
1544 | "dev-master": "2.0.x-dev"
1545 | }
1546 | },
1547 | "autoload": {
1548 | "psr-4": {
1549 | "Psr\\Container\\": "src/"
1550 | }
1551 | },
1552 | "notification-url": "https://packagist.org/downloads/",
1553 | "license": [
1554 | "MIT"
1555 | ],
1556 | "authors": [
1557 | {
1558 | "name": "PHP-FIG",
1559 | "homepage": "https://www.php-fig.org/"
1560 | }
1561 | ],
1562 | "description": "Common Container Interface (PHP FIG PSR-11)",
1563 | "homepage": "https://github.com/php-fig/container",
1564 | "keywords": [
1565 | "PSR-11",
1566 | "container",
1567 | "container-interface",
1568 | "container-interop",
1569 | "psr"
1570 | ],
1571 | "support": {
1572 | "issues": "https://github.com/php-fig/container/issues",
1573 | "source": "https://github.com/php-fig/container/tree/2.0.2"
1574 | },
1575 | "time": "2021-11-05T16:47:00+00:00"
1576 | },
1577 | {
1578 | "name": "psr/http-client",
1579 | "version": "1.0.1",
1580 | "source": {
1581 | "type": "git",
1582 | "url": "https://github.com/php-fig/http-client.git",
1583 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
1584 | },
1585 | "dist": {
1586 | "type": "zip",
1587 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
1588 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
1589 | "shasum": ""
1590 | },
1591 | "require": {
1592 | "php": "^7.0 || ^8.0",
1593 | "psr/http-message": "^1.0"
1594 | },
1595 | "type": "library",
1596 | "extra": {
1597 | "branch-alias": {
1598 | "dev-master": "1.0.x-dev"
1599 | }
1600 | },
1601 | "autoload": {
1602 | "psr-4": {
1603 | "Psr\\Http\\Client\\": "src/"
1604 | }
1605 | },
1606 | "notification-url": "https://packagist.org/downloads/",
1607 | "license": [
1608 | "MIT"
1609 | ],
1610 | "authors": [
1611 | {
1612 | "name": "PHP-FIG",
1613 | "homepage": "http://www.php-fig.org/"
1614 | }
1615 | ],
1616 | "description": "Common interface for HTTP clients",
1617 | "homepage": "https://github.com/php-fig/http-client",
1618 | "keywords": [
1619 | "http",
1620 | "http-client",
1621 | "psr",
1622 | "psr-18"
1623 | ],
1624 | "support": {
1625 | "source": "https://github.com/php-fig/http-client/tree/master"
1626 | },
1627 | "time": "2020-06-29T06:28:15+00:00"
1628 | },
1629 | {
1630 | "name": "psr/http-factory",
1631 | "version": "1.0.1",
1632 | "source": {
1633 | "type": "git",
1634 | "url": "https://github.com/php-fig/http-factory.git",
1635 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
1636 | },
1637 | "dist": {
1638 | "type": "zip",
1639 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
1640 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
1641 | "shasum": ""
1642 | },
1643 | "require": {
1644 | "php": ">=7.0.0",
1645 | "psr/http-message": "^1.0"
1646 | },
1647 | "type": "library",
1648 | "extra": {
1649 | "branch-alias": {
1650 | "dev-master": "1.0.x-dev"
1651 | }
1652 | },
1653 | "autoload": {
1654 | "psr-4": {
1655 | "Psr\\Http\\Message\\": "src/"
1656 | }
1657 | },
1658 | "notification-url": "https://packagist.org/downloads/",
1659 | "license": [
1660 | "MIT"
1661 | ],
1662 | "authors": [
1663 | {
1664 | "name": "PHP-FIG",
1665 | "homepage": "http://www.php-fig.org/"
1666 | }
1667 | ],
1668 | "description": "Common interfaces for PSR-7 HTTP message factories",
1669 | "keywords": [
1670 | "factory",
1671 | "http",
1672 | "message",
1673 | "psr",
1674 | "psr-17",
1675 | "psr-7",
1676 | "request",
1677 | "response"
1678 | ],
1679 | "support": {
1680 | "source": "https://github.com/php-fig/http-factory/tree/master"
1681 | },
1682 | "time": "2019-04-30T12:38:16+00:00"
1683 | },
1684 | {
1685 | "name": "psr/http-message",
1686 | "version": "1.0.1",
1687 | "source": {
1688 | "type": "git",
1689 | "url": "https://github.com/php-fig/http-message.git",
1690 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
1691 | },
1692 | "dist": {
1693 | "type": "zip",
1694 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
1695 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
1696 | "shasum": ""
1697 | },
1698 | "require": {
1699 | "php": ">=5.3.0"
1700 | },
1701 | "type": "library",
1702 | "extra": {
1703 | "branch-alias": {
1704 | "dev-master": "1.0.x-dev"
1705 | }
1706 | },
1707 | "autoload": {
1708 | "psr-4": {
1709 | "Psr\\Http\\Message\\": "src/"
1710 | }
1711 | },
1712 | "notification-url": "https://packagist.org/downloads/",
1713 | "license": [
1714 | "MIT"
1715 | ],
1716 | "authors": [
1717 | {
1718 | "name": "PHP-FIG",
1719 | "homepage": "http://www.php-fig.org/"
1720 | }
1721 | ],
1722 | "description": "Common interface for HTTP messages",
1723 | "homepage": "https://github.com/php-fig/http-message",
1724 | "keywords": [
1725 | "http",
1726 | "http-message",
1727 | "psr",
1728 | "psr-7",
1729 | "request",
1730 | "response"
1731 | ],
1732 | "support": {
1733 | "source": "https://github.com/php-fig/http-message/tree/master"
1734 | },
1735 | "time": "2016-08-06T14:39:51+00:00"
1736 | },
1737 | {
1738 | "name": "ralouphie/getallheaders",
1739 | "version": "3.0.3",
1740 | "source": {
1741 | "type": "git",
1742 | "url": "https://github.com/ralouphie/getallheaders.git",
1743 | "reference": "120b605dfeb996808c31b6477290a714d356e822"
1744 | },
1745 | "dist": {
1746 | "type": "zip",
1747 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
1748 | "reference": "120b605dfeb996808c31b6477290a714d356e822",
1749 | "shasum": ""
1750 | },
1751 | "require": {
1752 | "php": ">=5.6"
1753 | },
1754 | "require-dev": {
1755 | "php-coveralls/php-coveralls": "^2.1",
1756 | "phpunit/phpunit": "^5 || ^6.5"
1757 | },
1758 | "type": "library",
1759 | "autoload": {
1760 | "files": [
1761 | "src/getallheaders.php"
1762 | ]
1763 | },
1764 | "notification-url": "https://packagist.org/downloads/",
1765 | "license": [
1766 | "MIT"
1767 | ],
1768 | "authors": [
1769 | {
1770 | "name": "Ralph Khattar",
1771 | "email": "ralph.khattar@gmail.com"
1772 | }
1773 | ],
1774 | "description": "A polyfill for getallheaders.",
1775 | "support": {
1776 | "issues": "https://github.com/ralouphie/getallheaders/issues",
1777 | "source": "https://github.com/ralouphie/getallheaders/tree/develop"
1778 | },
1779 | "time": "2019-03-08T08:55:37+00:00"
1780 | },
1781 | {
1782 | "name": "sebastian/cli-parser",
1783 | "version": "1.0.1",
1784 | "source": {
1785 | "type": "git",
1786 | "url": "https://github.com/sebastianbergmann/cli-parser.git",
1787 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
1788 | },
1789 | "dist": {
1790 | "type": "zip",
1791 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
1792 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
1793 | "shasum": ""
1794 | },
1795 | "require": {
1796 | "php": ">=7.3"
1797 | },
1798 | "require-dev": {
1799 | "phpunit/phpunit": "^9.3"
1800 | },
1801 | "type": "library",
1802 | "extra": {
1803 | "branch-alias": {
1804 | "dev-master": "1.0-dev"
1805 | }
1806 | },
1807 | "autoload": {
1808 | "classmap": [
1809 | "src/"
1810 | ]
1811 | },
1812 | "notification-url": "https://packagist.org/downloads/",
1813 | "license": [
1814 | "BSD-3-Clause"
1815 | ],
1816 | "authors": [
1817 | {
1818 | "name": "Sebastian Bergmann",
1819 | "email": "sebastian@phpunit.de",
1820 | "role": "lead"
1821 | }
1822 | ],
1823 | "description": "Library for parsing CLI options",
1824 | "homepage": "https://github.com/sebastianbergmann/cli-parser",
1825 | "support": {
1826 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
1827 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
1828 | },
1829 | "funding": [
1830 | {
1831 | "url": "https://github.com/sebastianbergmann",
1832 | "type": "github"
1833 | }
1834 | ],
1835 | "time": "2020-09-28T06:08:49+00:00"
1836 | },
1837 | {
1838 | "name": "sebastian/code-unit",
1839 | "version": "1.0.8",
1840 | "source": {
1841 | "type": "git",
1842 | "url": "https://github.com/sebastianbergmann/code-unit.git",
1843 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
1844 | },
1845 | "dist": {
1846 | "type": "zip",
1847 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
1848 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
1849 | "shasum": ""
1850 | },
1851 | "require": {
1852 | "php": ">=7.3"
1853 | },
1854 | "require-dev": {
1855 | "phpunit/phpunit": "^9.3"
1856 | },
1857 | "type": "library",
1858 | "extra": {
1859 | "branch-alias": {
1860 | "dev-master": "1.0-dev"
1861 | }
1862 | },
1863 | "autoload": {
1864 | "classmap": [
1865 | "src/"
1866 | ]
1867 | },
1868 | "notification-url": "https://packagist.org/downloads/",
1869 | "license": [
1870 | "BSD-3-Clause"
1871 | ],
1872 | "authors": [
1873 | {
1874 | "name": "Sebastian Bergmann",
1875 | "email": "sebastian@phpunit.de",
1876 | "role": "lead"
1877 | }
1878 | ],
1879 | "description": "Collection of value objects that represent the PHP code units",
1880 | "homepage": "https://github.com/sebastianbergmann/code-unit",
1881 | "support": {
1882 | "issues": "https://github.com/sebastianbergmann/code-unit/issues",
1883 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
1884 | },
1885 | "funding": [
1886 | {
1887 | "url": "https://github.com/sebastianbergmann",
1888 | "type": "github"
1889 | }
1890 | ],
1891 | "time": "2020-10-26T13:08:54+00:00"
1892 | },
1893 | {
1894 | "name": "sebastian/code-unit-reverse-lookup",
1895 | "version": "2.0.3",
1896 | "source": {
1897 | "type": "git",
1898 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1899 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
1900 | },
1901 | "dist": {
1902 | "type": "zip",
1903 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1904 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
1905 | "shasum": ""
1906 | },
1907 | "require": {
1908 | "php": ">=7.3"
1909 | },
1910 | "require-dev": {
1911 | "phpunit/phpunit": "^9.3"
1912 | },
1913 | "type": "library",
1914 | "extra": {
1915 | "branch-alias": {
1916 | "dev-master": "2.0-dev"
1917 | }
1918 | },
1919 | "autoload": {
1920 | "classmap": [
1921 | "src/"
1922 | ]
1923 | },
1924 | "notification-url": "https://packagist.org/downloads/",
1925 | "license": [
1926 | "BSD-3-Clause"
1927 | ],
1928 | "authors": [
1929 | {
1930 | "name": "Sebastian Bergmann",
1931 | "email": "sebastian@phpunit.de"
1932 | }
1933 | ],
1934 | "description": "Looks up which function or method a line of code belongs to",
1935 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1936 | "support": {
1937 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
1938 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
1939 | },
1940 | "funding": [
1941 | {
1942 | "url": "https://github.com/sebastianbergmann",
1943 | "type": "github"
1944 | }
1945 | ],
1946 | "time": "2020-09-28T05:30:19+00:00"
1947 | },
1948 | {
1949 | "name": "sebastian/comparator",
1950 | "version": "4.0.6",
1951 | "source": {
1952 | "type": "git",
1953 | "url": "https://github.com/sebastianbergmann/comparator.git",
1954 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
1955 | },
1956 | "dist": {
1957 | "type": "zip",
1958 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
1959 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
1960 | "shasum": ""
1961 | },
1962 | "require": {
1963 | "php": ">=7.3",
1964 | "sebastian/diff": "^4.0",
1965 | "sebastian/exporter": "^4.0"
1966 | },
1967 | "require-dev": {
1968 | "phpunit/phpunit": "^9.3"
1969 | },
1970 | "type": "library",
1971 | "extra": {
1972 | "branch-alias": {
1973 | "dev-master": "4.0-dev"
1974 | }
1975 | },
1976 | "autoload": {
1977 | "classmap": [
1978 | "src/"
1979 | ]
1980 | },
1981 | "notification-url": "https://packagist.org/downloads/",
1982 | "license": [
1983 | "BSD-3-Clause"
1984 | ],
1985 | "authors": [
1986 | {
1987 | "name": "Sebastian Bergmann",
1988 | "email": "sebastian@phpunit.de"
1989 | },
1990 | {
1991 | "name": "Jeff Welch",
1992 | "email": "whatthejeff@gmail.com"
1993 | },
1994 | {
1995 | "name": "Volker Dusch",
1996 | "email": "github@wallbash.com"
1997 | },
1998 | {
1999 | "name": "Bernhard Schussek",
2000 | "email": "bschussek@2bepublished.at"
2001 | }
2002 | ],
2003 | "description": "Provides the functionality to compare PHP values for equality",
2004 | "homepage": "https://github.com/sebastianbergmann/comparator",
2005 | "keywords": [
2006 | "comparator",
2007 | "compare",
2008 | "equality"
2009 | ],
2010 | "support": {
2011 | "issues": "https://github.com/sebastianbergmann/comparator/issues",
2012 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
2013 | },
2014 | "funding": [
2015 | {
2016 | "url": "https://github.com/sebastianbergmann",
2017 | "type": "github"
2018 | }
2019 | ],
2020 | "time": "2020-10-26T15:49:45+00:00"
2021 | },
2022 | {
2023 | "name": "sebastian/complexity",
2024 | "version": "2.0.2",
2025 | "source": {
2026 | "type": "git",
2027 | "url": "https://github.com/sebastianbergmann/complexity.git",
2028 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
2029 | },
2030 | "dist": {
2031 | "type": "zip",
2032 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
2033 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
2034 | "shasum": ""
2035 | },
2036 | "require": {
2037 | "nikic/php-parser": "^4.7",
2038 | "php": ">=7.3"
2039 | },
2040 | "require-dev": {
2041 | "phpunit/phpunit": "^9.3"
2042 | },
2043 | "type": "library",
2044 | "extra": {
2045 | "branch-alias": {
2046 | "dev-master": "2.0-dev"
2047 | }
2048 | },
2049 | "autoload": {
2050 | "classmap": [
2051 | "src/"
2052 | ]
2053 | },
2054 | "notification-url": "https://packagist.org/downloads/",
2055 | "license": [
2056 | "BSD-3-Clause"
2057 | ],
2058 | "authors": [
2059 | {
2060 | "name": "Sebastian Bergmann",
2061 | "email": "sebastian@phpunit.de",
2062 | "role": "lead"
2063 | }
2064 | ],
2065 | "description": "Library for calculating the complexity of PHP code units",
2066 | "homepage": "https://github.com/sebastianbergmann/complexity",
2067 | "support": {
2068 | "issues": "https://github.com/sebastianbergmann/complexity/issues",
2069 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
2070 | },
2071 | "funding": [
2072 | {
2073 | "url": "https://github.com/sebastianbergmann",
2074 | "type": "github"
2075 | }
2076 | ],
2077 | "time": "2020-10-26T15:52:27+00:00"
2078 | },
2079 | {
2080 | "name": "sebastian/diff",
2081 | "version": "4.0.4",
2082 | "source": {
2083 | "type": "git",
2084 | "url": "https://github.com/sebastianbergmann/diff.git",
2085 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
2086 | },
2087 | "dist": {
2088 | "type": "zip",
2089 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
2090 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
2091 | "shasum": ""
2092 | },
2093 | "require": {
2094 | "php": ">=7.3"
2095 | },
2096 | "require-dev": {
2097 | "phpunit/phpunit": "^9.3",
2098 | "symfony/process": "^4.2 || ^5"
2099 | },
2100 | "type": "library",
2101 | "extra": {
2102 | "branch-alias": {
2103 | "dev-master": "4.0-dev"
2104 | }
2105 | },
2106 | "autoload": {
2107 | "classmap": [
2108 | "src/"
2109 | ]
2110 | },
2111 | "notification-url": "https://packagist.org/downloads/",
2112 | "license": [
2113 | "BSD-3-Clause"
2114 | ],
2115 | "authors": [
2116 | {
2117 | "name": "Sebastian Bergmann",
2118 | "email": "sebastian@phpunit.de"
2119 | },
2120 | {
2121 | "name": "Kore Nordmann",
2122 | "email": "mail@kore-nordmann.de"
2123 | }
2124 | ],
2125 | "description": "Diff implementation",
2126 | "homepage": "https://github.com/sebastianbergmann/diff",
2127 | "keywords": [
2128 | "diff",
2129 | "udiff",
2130 | "unidiff",
2131 | "unified diff"
2132 | ],
2133 | "support": {
2134 | "issues": "https://github.com/sebastianbergmann/diff/issues",
2135 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
2136 | },
2137 | "funding": [
2138 | {
2139 | "url": "https://github.com/sebastianbergmann",
2140 | "type": "github"
2141 | }
2142 | ],
2143 | "time": "2020-10-26T13:10:38+00:00"
2144 | },
2145 | {
2146 | "name": "sebastian/environment",
2147 | "version": "5.1.4",
2148 | "source": {
2149 | "type": "git",
2150 | "url": "https://github.com/sebastianbergmann/environment.git",
2151 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
2152 | },
2153 | "dist": {
2154 | "type": "zip",
2155 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
2156 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
2157 | "shasum": ""
2158 | },
2159 | "require": {
2160 | "php": ">=7.3"
2161 | },
2162 | "require-dev": {
2163 | "phpunit/phpunit": "^9.3"
2164 | },
2165 | "suggest": {
2166 | "ext-posix": "*"
2167 | },
2168 | "type": "library",
2169 | "extra": {
2170 | "branch-alias": {
2171 | "dev-master": "5.1-dev"
2172 | }
2173 | },
2174 | "autoload": {
2175 | "classmap": [
2176 | "src/"
2177 | ]
2178 | },
2179 | "notification-url": "https://packagist.org/downloads/",
2180 | "license": [
2181 | "BSD-3-Clause"
2182 | ],
2183 | "authors": [
2184 | {
2185 | "name": "Sebastian Bergmann",
2186 | "email": "sebastian@phpunit.de"
2187 | }
2188 | ],
2189 | "description": "Provides functionality to handle HHVM/PHP environments",
2190 | "homepage": "http://www.github.com/sebastianbergmann/environment",
2191 | "keywords": [
2192 | "Xdebug",
2193 | "environment",
2194 | "hhvm"
2195 | ],
2196 | "support": {
2197 | "issues": "https://github.com/sebastianbergmann/environment/issues",
2198 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
2199 | },
2200 | "funding": [
2201 | {
2202 | "url": "https://github.com/sebastianbergmann",
2203 | "type": "github"
2204 | }
2205 | ],
2206 | "time": "2022-04-03T09:37:03+00:00"
2207 | },
2208 | {
2209 | "name": "sebastian/exporter",
2210 | "version": "4.0.4",
2211 | "source": {
2212 | "type": "git",
2213 | "url": "https://github.com/sebastianbergmann/exporter.git",
2214 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
2215 | },
2216 | "dist": {
2217 | "type": "zip",
2218 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
2219 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
2220 | "shasum": ""
2221 | },
2222 | "require": {
2223 | "php": ">=7.3",
2224 | "sebastian/recursion-context": "^4.0"
2225 | },
2226 | "require-dev": {
2227 | "ext-mbstring": "*",
2228 | "phpunit/phpunit": "^9.3"
2229 | },
2230 | "type": "library",
2231 | "extra": {
2232 | "branch-alias": {
2233 | "dev-master": "4.0-dev"
2234 | }
2235 | },
2236 | "autoload": {
2237 | "classmap": [
2238 | "src/"
2239 | ]
2240 | },
2241 | "notification-url": "https://packagist.org/downloads/",
2242 | "license": [
2243 | "BSD-3-Clause"
2244 | ],
2245 | "authors": [
2246 | {
2247 | "name": "Sebastian Bergmann",
2248 | "email": "sebastian@phpunit.de"
2249 | },
2250 | {
2251 | "name": "Jeff Welch",
2252 | "email": "whatthejeff@gmail.com"
2253 | },
2254 | {
2255 | "name": "Volker Dusch",
2256 | "email": "github@wallbash.com"
2257 | },
2258 | {
2259 | "name": "Adam Harvey",
2260 | "email": "aharvey@php.net"
2261 | },
2262 | {
2263 | "name": "Bernhard Schussek",
2264 | "email": "bschussek@gmail.com"
2265 | }
2266 | ],
2267 | "description": "Provides the functionality to export PHP variables for visualization",
2268 | "homepage": "https://www.github.com/sebastianbergmann/exporter",
2269 | "keywords": [
2270 | "export",
2271 | "exporter"
2272 | ],
2273 | "support": {
2274 | "issues": "https://github.com/sebastianbergmann/exporter/issues",
2275 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
2276 | },
2277 | "funding": [
2278 | {
2279 | "url": "https://github.com/sebastianbergmann",
2280 | "type": "github"
2281 | }
2282 | ],
2283 | "time": "2021-11-11T14:18:36+00:00"
2284 | },
2285 | {
2286 | "name": "sebastian/global-state",
2287 | "version": "5.0.5",
2288 | "source": {
2289 | "type": "git",
2290 | "url": "https://github.com/sebastianbergmann/global-state.git",
2291 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
2292 | },
2293 | "dist": {
2294 | "type": "zip",
2295 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
2296 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
2297 | "shasum": ""
2298 | },
2299 | "require": {
2300 | "php": ">=7.3",
2301 | "sebastian/object-reflector": "^2.0",
2302 | "sebastian/recursion-context": "^4.0"
2303 | },
2304 | "require-dev": {
2305 | "ext-dom": "*",
2306 | "phpunit/phpunit": "^9.3"
2307 | },
2308 | "suggest": {
2309 | "ext-uopz": "*"
2310 | },
2311 | "type": "library",
2312 | "extra": {
2313 | "branch-alias": {
2314 | "dev-master": "5.0-dev"
2315 | }
2316 | },
2317 | "autoload": {
2318 | "classmap": [
2319 | "src/"
2320 | ]
2321 | },
2322 | "notification-url": "https://packagist.org/downloads/",
2323 | "license": [
2324 | "BSD-3-Clause"
2325 | ],
2326 | "authors": [
2327 | {
2328 | "name": "Sebastian Bergmann",
2329 | "email": "sebastian@phpunit.de"
2330 | }
2331 | ],
2332 | "description": "Snapshotting of global state",
2333 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
2334 | "keywords": [
2335 | "global state"
2336 | ],
2337 | "support": {
2338 | "issues": "https://github.com/sebastianbergmann/global-state/issues",
2339 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
2340 | },
2341 | "funding": [
2342 | {
2343 | "url": "https://github.com/sebastianbergmann",
2344 | "type": "github"
2345 | }
2346 | ],
2347 | "time": "2022-02-14T08:28:10+00:00"
2348 | },
2349 | {
2350 | "name": "sebastian/lines-of-code",
2351 | "version": "1.0.3",
2352 | "source": {
2353 | "type": "git",
2354 | "url": "https://github.com/sebastianbergmann/lines-of-code.git",
2355 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
2356 | },
2357 | "dist": {
2358 | "type": "zip",
2359 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
2360 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
2361 | "shasum": ""
2362 | },
2363 | "require": {
2364 | "nikic/php-parser": "^4.6",
2365 | "php": ">=7.3"
2366 | },
2367 | "require-dev": {
2368 | "phpunit/phpunit": "^9.3"
2369 | },
2370 | "type": "library",
2371 | "extra": {
2372 | "branch-alias": {
2373 | "dev-master": "1.0-dev"
2374 | }
2375 | },
2376 | "autoload": {
2377 | "classmap": [
2378 | "src/"
2379 | ]
2380 | },
2381 | "notification-url": "https://packagist.org/downloads/",
2382 | "license": [
2383 | "BSD-3-Clause"
2384 | ],
2385 | "authors": [
2386 | {
2387 | "name": "Sebastian Bergmann",
2388 | "email": "sebastian@phpunit.de",
2389 | "role": "lead"
2390 | }
2391 | ],
2392 | "description": "Library for counting the lines of code in PHP source code",
2393 | "homepage": "https://github.com/sebastianbergmann/lines-of-code",
2394 | "support": {
2395 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
2396 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
2397 | },
2398 | "funding": [
2399 | {
2400 | "url": "https://github.com/sebastianbergmann",
2401 | "type": "github"
2402 | }
2403 | ],
2404 | "time": "2020-11-28T06:42:11+00:00"
2405 | },
2406 | {
2407 | "name": "sebastian/object-enumerator",
2408 | "version": "4.0.4",
2409 | "source": {
2410 | "type": "git",
2411 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2412 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
2413 | },
2414 | "dist": {
2415 | "type": "zip",
2416 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
2417 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
2418 | "shasum": ""
2419 | },
2420 | "require": {
2421 | "php": ">=7.3",
2422 | "sebastian/object-reflector": "^2.0",
2423 | "sebastian/recursion-context": "^4.0"
2424 | },
2425 | "require-dev": {
2426 | "phpunit/phpunit": "^9.3"
2427 | },
2428 | "type": "library",
2429 | "extra": {
2430 | "branch-alias": {
2431 | "dev-master": "4.0-dev"
2432 | }
2433 | },
2434 | "autoload": {
2435 | "classmap": [
2436 | "src/"
2437 | ]
2438 | },
2439 | "notification-url": "https://packagist.org/downloads/",
2440 | "license": [
2441 | "BSD-3-Clause"
2442 | ],
2443 | "authors": [
2444 | {
2445 | "name": "Sebastian Bergmann",
2446 | "email": "sebastian@phpunit.de"
2447 | }
2448 | ],
2449 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2450 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2451 | "support": {
2452 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
2453 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
2454 | },
2455 | "funding": [
2456 | {
2457 | "url": "https://github.com/sebastianbergmann",
2458 | "type": "github"
2459 | }
2460 | ],
2461 | "time": "2020-10-26T13:12:34+00:00"
2462 | },
2463 | {
2464 | "name": "sebastian/object-reflector",
2465 | "version": "2.0.4",
2466 | "source": {
2467 | "type": "git",
2468 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
2469 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
2470 | },
2471 | "dist": {
2472 | "type": "zip",
2473 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
2474 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
2475 | "shasum": ""
2476 | },
2477 | "require": {
2478 | "php": ">=7.3"
2479 | },
2480 | "require-dev": {
2481 | "phpunit/phpunit": "^9.3"
2482 | },
2483 | "type": "library",
2484 | "extra": {
2485 | "branch-alias": {
2486 | "dev-master": "2.0-dev"
2487 | }
2488 | },
2489 | "autoload": {
2490 | "classmap": [
2491 | "src/"
2492 | ]
2493 | },
2494 | "notification-url": "https://packagist.org/downloads/",
2495 | "license": [
2496 | "BSD-3-Clause"
2497 | ],
2498 | "authors": [
2499 | {
2500 | "name": "Sebastian Bergmann",
2501 | "email": "sebastian@phpunit.de"
2502 | }
2503 | ],
2504 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
2505 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2506 | "support": {
2507 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
2508 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
2509 | },
2510 | "funding": [
2511 | {
2512 | "url": "https://github.com/sebastianbergmann",
2513 | "type": "github"
2514 | }
2515 | ],
2516 | "time": "2020-10-26T13:14:26+00:00"
2517 | },
2518 | {
2519 | "name": "sebastian/recursion-context",
2520 | "version": "4.0.4",
2521 | "source": {
2522 | "type": "git",
2523 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
2524 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
2525 | },
2526 | "dist": {
2527 | "type": "zip",
2528 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
2529 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
2530 | "shasum": ""
2531 | },
2532 | "require": {
2533 | "php": ">=7.3"
2534 | },
2535 | "require-dev": {
2536 | "phpunit/phpunit": "^9.3"
2537 | },
2538 | "type": "library",
2539 | "extra": {
2540 | "branch-alias": {
2541 | "dev-master": "4.0-dev"
2542 | }
2543 | },
2544 | "autoload": {
2545 | "classmap": [
2546 | "src/"
2547 | ]
2548 | },
2549 | "notification-url": "https://packagist.org/downloads/",
2550 | "license": [
2551 | "BSD-3-Clause"
2552 | ],
2553 | "authors": [
2554 | {
2555 | "name": "Sebastian Bergmann",
2556 | "email": "sebastian@phpunit.de"
2557 | },
2558 | {
2559 | "name": "Jeff Welch",
2560 | "email": "whatthejeff@gmail.com"
2561 | },
2562 | {
2563 | "name": "Adam Harvey",
2564 | "email": "aharvey@php.net"
2565 | }
2566 | ],
2567 | "description": "Provides functionality to recursively process PHP variables",
2568 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2569 | "support": {
2570 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
2571 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
2572 | },
2573 | "funding": [
2574 | {
2575 | "url": "https://github.com/sebastianbergmann",
2576 | "type": "github"
2577 | }
2578 | ],
2579 | "time": "2020-10-26T13:17:30+00:00"
2580 | },
2581 | {
2582 | "name": "sebastian/resource-operations",
2583 | "version": "3.0.3",
2584 | "source": {
2585 | "type": "git",
2586 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
2587 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
2588 | },
2589 | "dist": {
2590 | "type": "zip",
2591 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
2592 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
2593 | "shasum": ""
2594 | },
2595 | "require": {
2596 | "php": ">=7.3"
2597 | },
2598 | "require-dev": {
2599 | "phpunit/phpunit": "^9.0"
2600 | },
2601 | "type": "library",
2602 | "extra": {
2603 | "branch-alias": {
2604 | "dev-master": "3.0-dev"
2605 | }
2606 | },
2607 | "autoload": {
2608 | "classmap": [
2609 | "src/"
2610 | ]
2611 | },
2612 | "notification-url": "https://packagist.org/downloads/",
2613 | "license": [
2614 | "BSD-3-Clause"
2615 | ],
2616 | "authors": [
2617 | {
2618 | "name": "Sebastian Bergmann",
2619 | "email": "sebastian@phpunit.de"
2620 | }
2621 | ],
2622 | "description": "Provides a list of PHP built-in functions that operate on resources",
2623 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
2624 | "support": {
2625 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
2626 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
2627 | },
2628 | "funding": [
2629 | {
2630 | "url": "https://github.com/sebastianbergmann",
2631 | "type": "github"
2632 | }
2633 | ],
2634 | "time": "2020-09-28T06:45:17+00:00"
2635 | },
2636 | {
2637 | "name": "sebastian/type",
2638 | "version": "3.0.0",
2639 | "source": {
2640 | "type": "git",
2641 | "url": "https://github.com/sebastianbergmann/type.git",
2642 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
2643 | },
2644 | "dist": {
2645 | "type": "zip",
2646 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
2647 | "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
2648 | "shasum": ""
2649 | },
2650 | "require": {
2651 | "php": ">=7.3"
2652 | },
2653 | "require-dev": {
2654 | "phpunit/phpunit": "^9.5"
2655 | },
2656 | "type": "library",
2657 | "extra": {
2658 | "branch-alias": {
2659 | "dev-master": "3.0-dev"
2660 | }
2661 | },
2662 | "autoload": {
2663 | "classmap": [
2664 | "src/"
2665 | ]
2666 | },
2667 | "notification-url": "https://packagist.org/downloads/",
2668 | "license": [
2669 | "BSD-3-Clause"
2670 | ],
2671 | "authors": [
2672 | {
2673 | "name": "Sebastian Bergmann",
2674 | "email": "sebastian@phpunit.de",
2675 | "role": "lead"
2676 | }
2677 | ],
2678 | "description": "Collection of value objects that represent the types of the PHP type system",
2679 | "homepage": "https://github.com/sebastianbergmann/type",
2680 | "support": {
2681 | "issues": "https://github.com/sebastianbergmann/type/issues",
2682 | "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
2683 | },
2684 | "funding": [
2685 | {
2686 | "url": "https://github.com/sebastianbergmann",
2687 | "type": "github"
2688 | }
2689 | ],
2690 | "time": "2022-03-15T09:54:48+00:00"
2691 | },
2692 | {
2693 | "name": "sebastian/version",
2694 | "version": "3.0.2",
2695 | "source": {
2696 | "type": "git",
2697 | "url": "https://github.com/sebastianbergmann/version.git",
2698 | "reference": "c6c1022351a901512170118436c764e473f6de8c"
2699 | },
2700 | "dist": {
2701 | "type": "zip",
2702 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
2703 | "reference": "c6c1022351a901512170118436c764e473f6de8c",
2704 | "shasum": ""
2705 | },
2706 | "require": {
2707 | "php": ">=7.3"
2708 | },
2709 | "type": "library",
2710 | "extra": {
2711 | "branch-alias": {
2712 | "dev-master": "3.0-dev"
2713 | }
2714 | },
2715 | "autoload": {
2716 | "classmap": [
2717 | "src/"
2718 | ]
2719 | },
2720 | "notification-url": "https://packagist.org/downloads/",
2721 | "license": [
2722 | "BSD-3-Clause"
2723 | ],
2724 | "authors": [
2725 | {
2726 | "name": "Sebastian Bergmann",
2727 | "email": "sebastian@phpunit.de",
2728 | "role": "lead"
2729 | }
2730 | ],
2731 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2732 | "homepage": "https://github.com/sebastianbergmann/version",
2733 | "support": {
2734 | "issues": "https://github.com/sebastianbergmann/version/issues",
2735 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
2736 | },
2737 | "funding": [
2738 | {
2739 | "url": "https://github.com/sebastianbergmann",
2740 | "type": "github"
2741 | }
2742 | ],
2743 | "time": "2020-09-28T06:39:44+00:00"
2744 | },
2745 | {
2746 | "name": "squizlabs/php_codesniffer",
2747 | "version": "3.6.2",
2748 | "source": {
2749 | "type": "git",
2750 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
2751 | "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
2752 | },
2753 | "dist": {
2754 | "type": "zip",
2755 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
2756 | "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
2757 | "shasum": ""
2758 | },
2759 | "require": {
2760 | "ext-simplexml": "*",
2761 | "ext-tokenizer": "*",
2762 | "ext-xmlwriter": "*",
2763 | "php": ">=5.4.0"
2764 | },
2765 | "require-dev": {
2766 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
2767 | },
2768 | "bin": [
2769 | "bin/phpcs",
2770 | "bin/phpcbf"
2771 | ],
2772 | "type": "library",
2773 | "extra": {
2774 | "branch-alias": {
2775 | "dev-master": "3.x-dev"
2776 | }
2777 | },
2778 | "notification-url": "https://packagist.org/downloads/",
2779 | "license": [
2780 | "BSD-3-Clause"
2781 | ],
2782 | "authors": [
2783 | {
2784 | "name": "Greg Sherwood",
2785 | "role": "lead"
2786 | }
2787 | ],
2788 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
2789 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
2790 | "keywords": [
2791 | "phpcs",
2792 | "standards"
2793 | ],
2794 | "support": {
2795 | "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
2796 | "source": "https://github.com/squizlabs/PHP_CodeSniffer",
2797 | "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
2798 | },
2799 | "time": "2021-12-12T21:44:58+00:00"
2800 | },
2801 | {
2802 | "name": "symfony/config",
2803 | "version": "v6.0.8",
2804 | "source": {
2805 | "type": "git",
2806 | "url": "https://github.com/symfony/config.git",
2807 | "reference": "6ac50d559aa64c8e7b5b17640c46241e4accb487"
2808 | },
2809 | "dist": {
2810 | "type": "zip",
2811 | "url": "https://api.github.com/repos/symfony/config/zipball/6ac50d559aa64c8e7b5b17640c46241e4accb487",
2812 | "reference": "6ac50d559aa64c8e7b5b17640c46241e4accb487",
2813 | "shasum": ""
2814 | },
2815 | "require": {
2816 | "php": ">=8.0.2",
2817 | "symfony/deprecation-contracts": "^2.1|^3",
2818 | "symfony/filesystem": "^5.4|^6.0",
2819 | "symfony/polyfill-ctype": "~1.8",
2820 | "symfony/polyfill-php81": "^1.22"
2821 | },
2822 | "conflict": {
2823 | "symfony/finder": "<4.4"
2824 | },
2825 | "require-dev": {
2826 | "symfony/event-dispatcher": "^5.4|^6.0",
2827 | "symfony/finder": "^5.4|^6.0",
2828 | "symfony/messenger": "^5.4|^6.0",
2829 | "symfony/service-contracts": "^1.1|^2|^3",
2830 | "symfony/yaml": "^5.4|^6.0"
2831 | },
2832 | "suggest": {
2833 | "symfony/yaml": "To use the yaml reference dumper"
2834 | },
2835 | "type": "library",
2836 | "autoload": {
2837 | "psr-4": {
2838 | "Symfony\\Component\\Config\\": ""
2839 | },
2840 | "exclude-from-classmap": [
2841 | "/Tests/"
2842 | ]
2843 | },
2844 | "notification-url": "https://packagist.org/downloads/",
2845 | "license": [
2846 | "MIT"
2847 | ],
2848 | "authors": [
2849 | {
2850 | "name": "Fabien Potencier",
2851 | "email": "fabien@symfony.com"
2852 | },
2853 | {
2854 | "name": "Symfony Community",
2855 | "homepage": "https://symfony.com/contributors"
2856 | }
2857 | ],
2858 | "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
2859 | "homepage": "https://symfony.com",
2860 | "support": {
2861 | "source": "https://github.com/symfony/config/tree/v6.0.8"
2862 | },
2863 | "funding": [
2864 | {
2865 | "url": "https://symfony.com/sponsor",
2866 | "type": "custom"
2867 | },
2868 | {
2869 | "url": "https://github.com/fabpot",
2870 | "type": "github"
2871 | },
2872 | {
2873 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2874 | "type": "tidelift"
2875 | }
2876 | ],
2877 | "time": "2022-04-12T16:11:42+00:00"
2878 | },
2879 | {
2880 | "name": "symfony/console",
2881 | "version": "v6.0.8",
2882 | "source": {
2883 | "type": "git",
2884 | "url": "https://github.com/symfony/console.git",
2885 | "reference": "0d00aa289215353aa8746a31d101f8e60826285c"
2886 | },
2887 | "dist": {
2888 | "type": "zip",
2889 | "url": "https://api.github.com/repos/symfony/console/zipball/0d00aa289215353aa8746a31d101f8e60826285c",
2890 | "reference": "0d00aa289215353aa8746a31d101f8e60826285c",
2891 | "shasum": ""
2892 | },
2893 | "require": {
2894 | "php": ">=8.0.2",
2895 | "symfony/polyfill-mbstring": "~1.0",
2896 | "symfony/service-contracts": "^1.1|^2|^3",
2897 | "symfony/string": "^5.4|^6.0"
2898 | },
2899 | "conflict": {
2900 | "symfony/dependency-injection": "<5.4",
2901 | "symfony/dotenv": "<5.4",
2902 | "symfony/event-dispatcher": "<5.4",
2903 | "symfony/lock": "<5.4",
2904 | "symfony/process": "<5.4"
2905 | },
2906 | "provide": {
2907 | "psr/log-implementation": "1.0|2.0|3.0"
2908 | },
2909 | "require-dev": {
2910 | "psr/log": "^1|^2|^3",
2911 | "symfony/config": "^5.4|^6.0",
2912 | "symfony/dependency-injection": "^5.4|^6.0",
2913 | "symfony/event-dispatcher": "^5.4|^6.0",
2914 | "symfony/lock": "^5.4|^6.0",
2915 | "symfony/process": "^5.4|^6.0",
2916 | "symfony/var-dumper": "^5.4|^6.0"
2917 | },
2918 | "suggest": {
2919 | "psr/log": "For using the console logger",
2920 | "symfony/event-dispatcher": "",
2921 | "symfony/lock": "",
2922 | "symfony/process": ""
2923 | },
2924 | "type": "library",
2925 | "autoload": {
2926 | "psr-4": {
2927 | "Symfony\\Component\\Console\\": ""
2928 | },
2929 | "exclude-from-classmap": [
2930 | "/Tests/"
2931 | ]
2932 | },
2933 | "notification-url": "https://packagist.org/downloads/",
2934 | "license": [
2935 | "MIT"
2936 | ],
2937 | "authors": [
2938 | {
2939 | "name": "Fabien Potencier",
2940 | "email": "fabien@symfony.com"
2941 | },
2942 | {
2943 | "name": "Symfony Community",
2944 | "homepage": "https://symfony.com/contributors"
2945 | }
2946 | ],
2947 | "description": "Eases the creation of beautiful and testable command line interfaces",
2948 | "homepage": "https://symfony.com",
2949 | "keywords": [
2950 | "cli",
2951 | "command line",
2952 | "console",
2953 | "terminal"
2954 | ],
2955 | "support": {
2956 | "source": "https://github.com/symfony/console/tree/v6.0.8"
2957 | },
2958 | "funding": [
2959 | {
2960 | "url": "https://symfony.com/sponsor",
2961 | "type": "custom"
2962 | },
2963 | {
2964 | "url": "https://github.com/fabpot",
2965 | "type": "github"
2966 | },
2967 | {
2968 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
2969 | "type": "tidelift"
2970 | }
2971 | ],
2972 | "time": "2022-04-20T15:01:42+00:00"
2973 | },
2974 | {
2975 | "name": "symfony/deprecation-contracts",
2976 | "version": "v3.0.1",
2977 | "source": {
2978 | "type": "git",
2979 | "url": "https://github.com/symfony/deprecation-contracts.git",
2980 | "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
2981 | },
2982 | "dist": {
2983 | "type": "zip",
2984 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
2985 | "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
2986 | "shasum": ""
2987 | },
2988 | "require": {
2989 | "php": ">=8.0.2"
2990 | },
2991 | "type": "library",
2992 | "extra": {
2993 | "branch-alias": {
2994 | "dev-main": "3.0-dev"
2995 | },
2996 | "thanks": {
2997 | "name": "symfony/contracts",
2998 | "url": "https://github.com/symfony/contracts"
2999 | }
3000 | },
3001 | "autoload": {
3002 | "files": [
3003 | "function.php"
3004 | ]
3005 | },
3006 | "notification-url": "https://packagist.org/downloads/",
3007 | "license": [
3008 | "MIT"
3009 | ],
3010 | "authors": [
3011 | {
3012 | "name": "Nicolas Grekas",
3013 | "email": "p@tchwork.com"
3014 | },
3015 | {
3016 | "name": "Symfony Community",
3017 | "homepage": "https://symfony.com/contributors"
3018 | }
3019 | ],
3020 | "description": "A generic function and convention to trigger deprecation notices",
3021 | "homepage": "https://symfony.com",
3022 | "support": {
3023 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.1"
3024 | },
3025 | "funding": [
3026 | {
3027 | "url": "https://symfony.com/sponsor",
3028 | "type": "custom"
3029 | },
3030 | {
3031 | "url": "https://github.com/fabpot",
3032 | "type": "github"
3033 | },
3034 | {
3035 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3036 | "type": "tidelift"
3037 | }
3038 | ],
3039 | "time": "2022-01-02T09:55:41+00:00"
3040 | },
3041 | {
3042 | "name": "symfony/filesystem",
3043 | "version": "v6.0.7",
3044 | "source": {
3045 | "type": "git",
3046 | "url": "https://github.com/symfony/filesystem.git",
3047 | "reference": "6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff"
3048 | },
3049 | "dist": {
3050 | "type": "zip",
3051 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff",
3052 | "reference": "6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff",
3053 | "shasum": ""
3054 | },
3055 | "require": {
3056 | "php": ">=8.0.2",
3057 | "symfony/polyfill-ctype": "~1.8",
3058 | "symfony/polyfill-mbstring": "~1.8"
3059 | },
3060 | "type": "library",
3061 | "autoload": {
3062 | "psr-4": {
3063 | "Symfony\\Component\\Filesystem\\": ""
3064 | },
3065 | "exclude-from-classmap": [
3066 | "/Tests/"
3067 | ]
3068 | },
3069 | "notification-url": "https://packagist.org/downloads/",
3070 | "license": [
3071 | "MIT"
3072 | ],
3073 | "authors": [
3074 | {
3075 | "name": "Fabien Potencier",
3076 | "email": "fabien@symfony.com"
3077 | },
3078 | {
3079 | "name": "Symfony Community",
3080 | "homepage": "https://symfony.com/contributors"
3081 | }
3082 | ],
3083 | "description": "Provides basic utilities for the filesystem",
3084 | "homepage": "https://symfony.com",
3085 | "support": {
3086 | "source": "https://github.com/symfony/filesystem/tree/v6.0.7"
3087 | },
3088 | "funding": [
3089 | {
3090 | "url": "https://symfony.com/sponsor",
3091 | "type": "custom"
3092 | },
3093 | {
3094 | "url": "https://github.com/fabpot",
3095 | "type": "github"
3096 | },
3097 | {
3098 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3099 | "type": "tidelift"
3100 | }
3101 | ],
3102 | "time": "2022-04-01T12:54:51+00:00"
3103 | },
3104 | {
3105 | "name": "symfony/polyfill-ctype",
3106 | "version": "v1.25.0",
3107 | "source": {
3108 | "type": "git",
3109 | "url": "https://github.com/symfony/polyfill-ctype.git",
3110 | "reference": "30885182c981ab175d4d034db0f6f469898070ab"
3111 | },
3112 | "dist": {
3113 | "type": "zip",
3114 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
3115 | "reference": "30885182c981ab175d4d034db0f6f469898070ab",
3116 | "shasum": ""
3117 | },
3118 | "require": {
3119 | "php": ">=7.1"
3120 | },
3121 | "provide": {
3122 | "ext-ctype": "*"
3123 | },
3124 | "suggest": {
3125 | "ext-ctype": "For best performance"
3126 | },
3127 | "type": "library",
3128 | "extra": {
3129 | "branch-alias": {
3130 | "dev-main": "1.23-dev"
3131 | },
3132 | "thanks": {
3133 | "name": "symfony/polyfill",
3134 | "url": "https://github.com/symfony/polyfill"
3135 | }
3136 | },
3137 | "autoload": {
3138 | "files": [
3139 | "bootstrap.php"
3140 | ],
3141 | "psr-4": {
3142 | "Symfony\\Polyfill\\Ctype\\": ""
3143 | }
3144 | },
3145 | "notification-url": "https://packagist.org/downloads/",
3146 | "license": [
3147 | "MIT"
3148 | ],
3149 | "authors": [
3150 | {
3151 | "name": "Gert de Pagter",
3152 | "email": "BackEndTea@gmail.com"
3153 | },
3154 | {
3155 | "name": "Symfony Community",
3156 | "homepage": "https://symfony.com/contributors"
3157 | }
3158 | ],
3159 | "description": "Symfony polyfill for ctype functions",
3160 | "homepage": "https://symfony.com",
3161 | "keywords": [
3162 | "compatibility",
3163 | "ctype",
3164 | "polyfill",
3165 | "portable"
3166 | ],
3167 | "support": {
3168 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
3169 | },
3170 | "funding": [
3171 | {
3172 | "url": "https://symfony.com/sponsor",
3173 | "type": "custom"
3174 | },
3175 | {
3176 | "url": "https://github.com/fabpot",
3177 | "type": "github"
3178 | },
3179 | {
3180 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3181 | "type": "tidelift"
3182 | }
3183 | ],
3184 | "time": "2021-10-20T20:35:02+00:00"
3185 | },
3186 | {
3187 | "name": "symfony/polyfill-intl-grapheme",
3188 | "version": "v1.25.0",
3189 | "source": {
3190 | "type": "git",
3191 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
3192 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
3193 | },
3194 | "dist": {
3195 | "type": "zip",
3196 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
3197 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
3198 | "shasum": ""
3199 | },
3200 | "require": {
3201 | "php": ">=7.1"
3202 | },
3203 | "suggest": {
3204 | "ext-intl": "For best performance"
3205 | },
3206 | "type": "library",
3207 | "extra": {
3208 | "branch-alias": {
3209 | "dev-main": "1.23-dev"
3210 | },
3211 | "thanks": {
3212 | "name": "symfony/polyfill",
3213 | "url": "https://github.com/symfony/polyfill"
3214 | }
3215 | },
3216 | "autoload": {
3217 | "files": [
3218 | "bootstrap.php"
3219 | ],
3220 | "psr-4": {
3221 | "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
3222 | }
3223 | },
3224 | "notification-url": "https://packagist.org/downloads/",
3225 | "license": [
3226 | "MIT"
3227 | ],
3228 | "authors": [
3229 | {
3230 | "name": "Nicolas Grekas",
3231 | "email": "p@tchwork.com"
3232 | },
3233 | {
3234 | "name": "Symfony Community",
3235 | "homepage": "https://symfony.com/contributors"
3236 | }
3237 | ],
3238 | "description": "Symfony polyfill for intl's grapheme_* functions",
3239 | "homepage": "https://symfony.com",
3240 | "keywords": [
3241 | "compatibility",
3242 | "grapheme",
3243 | "intl",
3244 | "polyfill",
3245 | "portable",
3246 | "shim"
3247 | ],
3248 | "support": {
3249 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
3250 | },
3251 | "funding": [
3252 | {
3253 | "url": "https://symfony.com/sponsor",
3254 | "type": "custom"
3255 | },
3256 | {
3257 | "url": "https://github.com/fabpot",
3258 | "type": "github"
3259 | },
3260 | {
3261 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3262 | "type": "tidelift"
3263 | }
3264 | ],
3265 | "time": "2021-11-23T21:10:46+00:00"
3266 | },
3267 | {
3268 | "name": "symfony/polyfill-intl-normalizer",
3269 | "version": "v1.25.0",
3270 | "source": {
3271 | "type": "git",
3272 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
3273 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
3274 | },
3275 | "dist": {
3276 | "type": "zip",
3277 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
3278 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
3279 | "shasum": ""
3280 | },
3281 | "require": {
3282 | "php": ">=7.1"
3283 | },
3284 | "suggest": {
3285 | "ext-intl": "For best performance"
3286 | },
3287 | "type": "library",
3288 | "extra": {
3289 | "branch-alias": {
3290 | "dev-main": "1.23-dev"
3291 | },
3292 | "thanks": {
3293 | "name": "symfony/polyfill",
3294 | "url": "https://github.com/symfony/polyfill"
3295 | }
3296 | },
3297 | "autoload": {
3298 | "files": [
3299 | "bootstrap.php"
3300 | ],
3301 | "psr-4": {
3302 | "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
3303 | },
3304 | "classmap": [
3305 | "Resources/stubs"
3306 | ]
3307 | },
3308 | "notification-url": "https://packagist.org/downloads/",
3309 | "license": [
3310 | "MIT"
3311 | ],
3312 | "authors": [
3313 | {
3314 | "name": "Nicolas Grekas",
3315 | "email": "p@tchwork.com"
3316 | },
3317 | {
3318 | "name": "Symfony Community",
3319 | "homepage": "https://symfony.com/contributors"
3320 | }
3321 | ],
3322 | "description": "Symfony polyfill for intl's Normalizer class and related functions",
3323 | "homepage": "https://symfony.com",
3324 | "keywords": [
3325 | "compatibility",
3326 | "intl",
3327 | "normalizer",
3328 | "polyfill",
3329 | "portable",
3330 | "shim"
3331 | ],
3332 | "support": {
3333 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
3334 | },
3335 | "funding": [
3336 | {
3337 | "url": "https://symfony.com/sponsor",
3338 | "type": "custom"
3339 | },
3340 | {
3341 | "url": "https://github.com/fabpot",
3342 | "type": "github"
3343 | },
3344 | {
3345 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3346 | "type": "tidelift"
3347 | }
3348 | ],
3349 | "time": "2021-02-19T12:13:01+00:00"
3350 | },
3351 | {
3352 | "name": "symfony/polyfill-mbstring",
3353 | "version": "v1.25.0",
3354 | "source": {
3355 | "type": "git",
3356 | "url": "https://github.com/symfony/polyfill-mbstring.git",
3357 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
3358 | },
3359 | "dist": {
3360 | "type": "zip",
3361 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
3362 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
3363 | "shasum": ""
3364 | },
3365 | "require": {
3366 | "php": ">=7.1"
3367 | },
3368 | "provide": {
3369 | "ext-mbstring": "*"
3370 | },
3371 | "suggest": {
3372 | "ext-mbstring": "For best performance"
3373 | },
3374 | "type": "library",
3375 | "extra": {
3376 | "branch-alias": {
3377 | "dev-main": "1.23-dev"
3378 | },
3379 | "thanks": {
3380 | "name": "symfony/polyfill",
3381 | "url": "https://github.com/symfony/polyfill"
3382 | }
3383 | },
3384 | "autoload": {
3385 | "files": [
3386 | "bootstrap.php"
3387 | ],
3388 | "psr-4": {
3389 | "Symfony\\Polyfill\\Mbstring\\": ""
3390 | }
3391 | },
3392 | "notification-url": "https://packagist.org/downloads/",
3393 | "license": [
3394 | "MIT"
3395 | ],
3396 | "authors": [
3397 | {
3398 | "name": "Nicolas Grekas",
3399 | "email": "p@tchwork.com"
3400 | },
3401 | {
3402 | "name": "Symfony Community",
3403 | "homepage": "https://symfony.com/contributors"
3404 | }
3405 | ],
3406 | "description": "Symfony polyfill for the Mbstring extension",
3407 | "homepage": "https://symfony.com",
3408 | "keywords": [
3409 | "compatibility",
3410 | "mbstring",
3411 | "polyfill",
3412 | "portable",
3413 | "shim"
3414 | ],
3415 | "support": {
3416 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
3417 | },
3418 | "funding": [
3419 | {
3420 | "url": "https://symfony.com/sponsor",
3421 | "type": "custom"
3422 | },
3423 | {
3424 | "url": "https://github.com/fabpot",
3425 | "type": "github"
3426 | },
3427 | {
3428 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3429 | "type": "tidelift"
3430 | }
3431 | ],
3432 | "time": "2021-11-30T18:21:41+00:00"
3433 | },
3434 | {
3435 | "name": "symfony/polyfill-php81",
3436 | "version": "v1.25.0",
3437 | "source": {
3438 | "type": "git",
3439 | "url": "https://github.com/symfony/polyfill-php81.git",
3440 | "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
3441 | },
3442 | "dist": {
3443 | "type": "zip",
3444 | "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
3445 | "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
3446 | "shasum": ""
3447 | },
3448 | "require": {
3449 | "php": ">=7.1"
3450 | },
3451 | "type": "library",
3452 | "extra": {
3453 | "branch-alias": {
3454 | "dev-main": "1.23-dev"
3455 | },
3456 | "thanks": {
3457 | "name": "symfony/polyfill",
3458 | "url": "https://github.com/symfony/polyfill"
3459 | }
3460 | },
3461 | "autoload": {
3462 | "files": [
3463 | "bootstrap.php"
3464 | ],
3465 | "psr-4": {
3466 | "Symfony\\Polyfill\\Php81\\": ""
3467 | },
3468 | "classmap": [
3469 | "Resources/stubs"
3470 | ]
3471 | },
3472 | "notification-url": "https://packagist.org/downloads/",
3473 | "license": [
3474 | "MIT"
3475 | ],
3476 | "authors": [
3477 | {
3478 | "name": "Nicolas Grekas",
3479 | "email": "p@tchwork.com"
3480 | },
3481 | {
3482 | "name": "Symfony Community",
3483 | "homepage": "https://symfony.com/contributors"
3484 | }
3485 | ],
3486 | "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
3487 | "homepage": "https://symfony.com",
3488 | "keywords": [
3489 | "compatibility",
3490 | "polyfill",
3491 | "portable",
3492 | "shim"
3493 | ],
3494 | "support": {
3495 | "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0"
3496 | },
3497 | "funding": [
3498 | {
3499 | "url": "https://symfony.com/sponsor",
3500 | "type": "custom"
3501 | },
3502 | {
3503 | "url": "https://github.com/fabpot",
3504 | "type": "github"
3505 | },
3506 | {
3507 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3508 | "type": "tidelift"
3509 | }
3510 | ],
3511 | "time": "2021-09-13T13:58:11+00:00"
3512 | },
3513 | {
3514 | "name": "symfony/service-contracts",
3515 | "version": "v3.0.1",
3516 | "source": {
3517 | "type": "git",
3518 | "url": "https://github.com/symfony/service-contracts.git",
3519 | "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c"
3520 | },
3521 | "dist": {
3522 | "type": "zip",
3523 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e517458f278c2131ca9f262f8fbaf01410f2c65c",
3524 | "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c",
3525 | "shasum": ""
3526 | },
3527 | "require": {
3528 | "php": ">=8.0.2",
3529 | "psr/container": "^2.0"
3530 | },
3531 | "conflict": {
3532 | "ext-psr": "<1.1|>=2"
3533 | },
3534 | "suggest": {
3535 | "symfony/service-implementation": ""
3536 | },
3537 | "type": "library",
3538 | "extra": {
3539 | "branch-alias": {
3540 | "dev-main": "3.0-dev"
3541 | },
3542 | "thanks": {
3543 | "name": "symfony/contracts",
3544 | "url": "https://github.com/symfony/contracts"
3545 | }
3546 | },
3547 | "autoload": {
3548 | "psr-4": {
3549 | "Symfony\\Contracts\\Service\\": ""
3550 | }
3551 | },
3552 | "notification-url": "https://packagist.org/downloads/",
3553 | "license": [
3554 | "MIT"
3555 | ],
3556 | "authors": [
3557 | {
3558 | "name": "Nicolas Grekas",
3559 | "email": "p@tchwork.com"
3560 | },
3561 | {
3562 | "name": "Symfony Community",
3563 | "homepage": "https://symfony.com/contributors"
3564 | }
3565 | ],
3566 | "description": "Generic abstractions related to writing services",
3567 | "homepage": "https://symfony.com",
3568 | "keywords": [
3569 | "abstractions",
3570 | "contracts",
3571 | "decoupling",
3572 | "interfaces",
3573 | "interoperability",
3574 | "standards"
3575 | ],
3576 | "support": {
3577 | "source": "https://github.com/symfony/service-contracts/tree/v3.0.1"
3578 | },
3579 | "funding": [
3580 | {
3581 | "url": "https://symfony.com/sponsor",
3582 | "type": "custom"
3583 | },
3584 | {
3585 | "url": "https://github.com/fabpot",
3586 | "type": "github"
3587 | },
3588 | {
3589 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3590 | "type": "tidelift"
3591 | }
3592 | ],
3593 | "time": "2022-03-13T20:10:05+00:00"
3594 | },
3595 | {
3596 | "name": "symfony/stopwatch",
3597 | "version": "v6.0.5",
3598 | "source": {
3599 | "type": "git",
3600 | "url": "https://github.com/symfony/stopwatch.git",
3601 | "reference": "f2c1780607ec6502f2121d9729fd8150a655d337"
3602 | },
3603 | "dist": {
3604 | "type": "zip",
3605 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f2c1780607ec6502f2121d9729fd8150a655d337",
3606 | "reference": "f2c1780607ec6502f2121d9729fd8150a655d337",
3607 | "shasum": ""
3608 | },
3609 | "require": {
3610 | "php": ">=8.0.2",
3611 | "symfony/service-contracts": "^1|^2|^3"
3612 | },
3613 | "type": "library",
3614 | "autoload": {
3615 | "psr-4": {
3616 | "Symfony\\Component\\Stopwatch\\": ""
3617 | },
3618 | "exclude-from-classmap": [
3619 | "/Tests/"
3620 | ]
3621 | },
3622 | "notification-url": "https://packagist.org/downloads/",
3623 | "license": [
3624 | "MIT"
3625 | ],
3626 | "authors": [
3627 | {
3628 | "name": "Fabien Potencier",
3629 | "email": "fabien@symfony.com"
3630 | },
3631 | {
3632 | "name": "Symfony Community",
3633 | "homepage": "https://symfony.com/contributors"
3634 | }
3635 | ],
3636 | "description": "Provides a way to profile code",
3637 | "homepage": "https://symfony.com",
3638 | "support": {
3639 | "source": "https://github.com/symfony/stopwatch/tree/v6.0.5"
3640 | },
3641 | "funding": [
3642 | {
3643 | "url": "https://symfony.com/sponsor",
3644 | "type": "custom"
3645 | },
3646 | {
3647 | "url": "https://github.com/fabpot",
3648 | "type": "github"
3649 | },
3650 | {
3651 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3652 | "type": "tidelift"
3653 | }
3654 | ],
3655 | "time": "2022-02-21T17:15:17+00:00"
3656 | },
3657 | {
3658 | "name": "symfony/string",
3659 | "version": "v6.0.8",
3660 | "source": {
3661 | "type": "git",
3662 | "url": "https://github.com/symfony/string.git",
3663 | "reference": "ac0aa5c2282e0de624c175b68d13f2c8f2e2649d"
3664 | },
3665 | "dist": {
3666 | "type": "zip",
3667 | "url": "https://api.github.com/repos/symfony/string/zipball/ac0aa5c2282e0de624c175b68d13f2c8f2e2649d",
3668 | "reference": "ac0aa5c2282e0de624c175b68d13f2c8f2e2649d",
3669 | "shasum": ""
3670 | },
3671 | "require": {
3672 | "php": ">=8.0.2",
3673 | "symfony/polyfill-ctype": "~1.8",
3674 | "symfony/polyfill-intl-grapheme": "~1.0",
3675 | "symfony/polyfill-intl-normalizer": "~1.0",
3676 | "symfony/polyfill-mbstring": "~1.0"
3677 | },
3678 | "conflict": {
3679 | "symfony/translation-contracts": "<2.0"
3680 | },
3681 | "require-dev": {
3682 | "symfony/error-handler": "^5.4|^6.0",
3683 | "symfony/http-client": "^5.4|^6.0",
3684 | "symfony/translation-contracts": "^2.0|^3.0",
3685 | "symfony/var-exporter": "^5.4|^6.0"
3686 | },
3687 | "type": "library",
3688 | "autoload": {
3689 | "files": [
3690 | "Resources/functions.php"
3691 | ],
3692 | "psr-4": {
3693 | "Symfony\\Component\\String\\": ""
3694 | },
3695 | "exclude-from-classmap": [
3696 | "/Tests/"
3697 | ]
3698 | },
3699 | "notification-url": "https://packagist.org/downloads/",
3700 | "license": [
3701 | "MIT"
3702 | ],
3703 | "authors": [
3704 | {
3705 | "name": "Nicolas Grekas",
3706 | "email": "p@tchwork.com"
3707 | },
3708 | {
3709 | "name": "Symfony Community",
3710 | "homepage": "https://symfony.com/contributors"
3711 | }
3712 | ],
3713 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
3714 | "homepage": "https://symfony.com",
3715 | "keywords": [
3716 | "grapheme",
3717 | "i18n",
3718 | "string",
3719 | "unicode",
3720 | "utf-8",
3721 | "utf8"
3722 | ],
3723 | "support": {
3724 | "source": "https://github.com/symfony/string/tree/v6.0.8"
3725 | },
3726 | "funding": [
3727 | {
3728 | "url": "https://symfony.com/sponsor",
3729 | "type": "custom"
3730 | },
3731 | {
3732 | "url": "https://github.com/fabpot",
3733 | "type": "github"
3734 | },
3735 | {
3736 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3737 | "type": "tidelift"
3738 | }
3739 | ],
3740 | "time": "2022-04-22T08:18:02+00:00"
3741 | },
3742 | {
3743 | "name": "symfony/yaml",
3744 | "version": "v6.0.3",
3745 | "source": {
3746 | "type": "git",
3747 | "url": "https://github.com/symfony/yaml.git",
3748 | "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5"
3749 | },
3750 | "dist": {
3751 | "type": "zip",
3752 | "url": "https://api.github.com/repos/symfony/yaml/zipball/e77f3ea0b21141d771d4a5655faa54f692b34af5",
3753 | "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5",
3754 | "shasum": ""
3755 | },
3756 | "require": {
3757 | "php": ">=8.0.2",
3758 | "symfony/polyfill-ctype": "^1.8"
3759 | },
3760 | "conflict": {
3761 | "symfony/console": "<5.4"
3762 | },
3763 | "require-dev": {
3764 | "symfony/console": "^5.4|^6.0"
3765 | },
3766 | "suggest": {
3767 | "symfony/console": "For validating YAML files using the lint command"
3768 | },
3769 | "bin": [
3770 | "Resources/bin/yaml-lint"
3771 | ],
3772 | "type": "library",
3773 | "autoload": {
3774 | "psr-4": {
3775 | "Symfony\\Component\\Yaml\\": ""
3776 | },
3777 | "exclude-from-classmap": [
3778 | "/Tests/"
3779 | ]
3780 | },
3781 | "notification-url": "https://packagist.org/downloads/",
3782 | "license": [
3783 | "MIT"
3784 | ],
3785 | "authors": [
3786 | {
3787 | "name": "Fabien Potencier",
3788 | "email": "fabien@symfony.com"
3789 | },
3790 | {
3791 | "name": "Symfony Community",
3792 | "homepage": "https://symfony.com/contributors"
3793 | }
3794 | ],
3795 | "description": "Loads and dumps YAML files",
3796 | "homepage": "https://symfony.com",
3797 | "support": {
3798 | "source": "https://github.com/symfony/yaml/tree/v6.0.3"
3799 | },
3800 | "funding": [
3801 | {
3802 | "url": "https://symfony.com/sponsor",
3803 | "type": "custom"
3804 | },
3805 | {
3806 | "url": "https://github.com/fabpot",
3807 | "type": "github"
3808 | },
3809 | {
3810 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
3811 | "type": "tidelift"
3812 | }
3813 | ],
3814 | "time": "2022-01-26T17:23:29+00:00"
3815 | },
3816 | {
3817 | "name": "theseer/tokenizer",
3818 | "version": "1.2.1",
3819 | "source": {
3820 | "type": "git",
3821 | "url": "https://github.com/theseer/tokenizer.git",
3822 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
3823 | },
3824 | "dist": {
3825 | "type": "zip",
3826 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
3827 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
3828 | "shasum": ""
3829 | },
3830 | "require": {
3831 | "ext-dom": "*",
3832 | "ext-tokenizer": "*",
3833 | "ext-xmlwriter": "*",
3834 | "php": "^7.2 || ^8.0"
3835 | },
3836 | "type": "library",
3837 | "autoload": {
3838 | "classmap": [
3839 | "src/"
3840 | ]
3841 | },
3842 | "notification-url": "https://packagist.org/downloads/",
3843 | "license": [
3844 | "BSD-3-Clause"
3845 | ],
3846 | "authors": [
3847 | {
3848 | "name": "Arne Blankerts",
3849 | "email": "arne@blankerts.de",
3850 | "role": "Developer"
3851 | }
3852 | ],
3853 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
3854 | "support": {
3855 | "issues": "https://github.com/theseer/tokenizer/issues",
3856 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
3857 | },
3858 | "funding": [
3859 | {
3860 | "url": "https://github.com/theseer",
3861 | "type": "github"
3862 | }
3863 | ],
3864 | "time": "2021-07-28T10:34:58+00:00"
3865 | },
3866 | {
3867 | "name": "webmozart/assert",
3868 | "version": "1.10.0",
3869 | "source": {
3870 | "type": "git",
3871 | "url": "https://github.com/webmozarts/assert.git",
3872 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
3873 | },
3874 | "dist": {
3875 | "type": "zip",
3876 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
3877 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
3878 | "shasum": ""
3879 | },
3880 | "require": {
3881 | "php": "^7.2 || ^8.0",
3882 | "symfony/polyfill-ctype": "^1.8"
3883 | },
3884 | "conflict": {
3885 | "phpstan/phpstan": "<0.12.20",
3886 | "vimeo/psalm": "<4.6.1 || 4.6.2"
3887 | },
3888 | "require-dev": {
3889 | "phpunit/phpunit": "^8.5.13"
3890 | },
3891 | "type": "library",
3892 | "extra": {
3893 | "branch-alias": {
3894 | "dev-master": "1.10-dev"
3895 | }
3896 | },
3897 | "autoload": {
3898 | "psr-4": {
3899 | "Webmozart\\Assert\\": "src/"
3900 | }
3901 | },
3902 | "notification-url": "https://packagist.org/downloads/",
3903 | "license": [
3904 | "MIT"
3905 | ],
3906 | "authors": [
3907 | {
3908 | "name": "Bernhard Schussek",
3909 | "email": "bschussek@gmail.com"
3910 | }
3911 | ],
3912 | "description": "Assertions to validate method input/output with nice error messages.",
3913 | "keywords": [
3914 | "assert",
3915 | "check",
3916 | "validate"
3917 | ],
3918 | "support": {
3919 | "issues": "https://github.com/webmozarts/assert/issues",
3920 | "source": "https://github.com/webmozarts/assert/tree/1.10.0"
3921 | },
3922 | "time": "2021-03-09T10:59:23+00:00"
3923 | }
3924 | ],
3925 | "aliases": [],
3926 | "minimum-stability": "stable",
3927 | "stability-flags": [],
3928 | "prefer-stable": false,
3929 | "prefer-lowest": false,
3930 | "platform": {
3931 | "php": ">=8.0"
3932 | },
3933 | "platform-dev": [],
3934 | "plugin-api-version": "2.2.0"
3935 | }
3936 |
--------------------------------------------------------------------------------