From 75559d1535d124cca17851634c69a69f6c93ea03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Owsiak?= Date: Sun, 4 Feb 2024 14:27:23 +0200 Subject: [PATCH] Added separate routes for topics and examples to a landing page (#960) --- .php-cs-fixer.php | 3 +- composer.json | 10 +- .../filter_mod/{filter_mod.php => code.php} | 0 src/web/landing/build/.gitkeep | 0 .../Website/Controller/DefaultController.php | 23 - .../landing/templates/main/example.txt.twig | 40 - {src/web => web}/landing/.env | 0 {src/web => web}/landing/.gitignore | 0 {src/web => web}/landing/README.md | 0 {src/web => web}/landing/assets/app.js | 0 {src/web => web}/landing/assets/bootstrap.js | 0 .../landing/assets/controllers.json | 0 .../syntax_highlight_controller.js | 0 .../landing/assets/images/elephant.svg | 0 .../images/favicons/apple-touch-icon.png | Bin .../assets/images/favicons/favicon-16x16.png | Bin .../assets/images/favicons/favicon-32x32.png | Bin .../assets/images/favicons/favicon.ico | Bin .../assets/images/icons/arrow-right.svg | 0 .../landing/assets/images/icons/close.svg | 0 .../landing/assets/images/icons/external.svg | 0 .../landing/assets/images/icons/extract.svg | 0 .../landing/assets/images/icons/load.svg | 0 .../landing/assets/images/icons/menu.svg | 0 .../landing/assets/images/icons/transform.svg | 0 .../landing/assets/images/logo.svg | 0 .../web => web}/landing/assets/styles/app.css | 0 {src/web => web}/landing/bin/console | 0 {src/web => web}/landing/composer.json | 8 + {src/web => web}/landing/composer.lock | 0 {src/web => web}/landing/config/bundles.php | 0 .../landing/config/packages/asset_mapper.yaml | 0 .../landing/config/packages/framework.yaml | 0 .../landing/config/packages/routing.yaml | 0 .../packages/static_content_generator.yaml | 0 .../landing/config/packages/twig.yaml | 0 .../landing/config/packages/web_profiler.yaml | 0 {src/web => web}/landing/config/preload.php | 0 {src/web => web}/landing/config/routes.yaml | 0 .../landing/config/routes/framework.yaml | 0 .../landing/config/routes/web_profiler.yaml | 0 {src/web => web}/landing/config/services.yaml | 5 + {src/web => web}/landing/importmap.php | 0 web/landing/phpunit.xml | 22 + {src/web => web}/landing/public/index.php | 0 .../Website/Controller/DefaultController.php | 75 + .../Github/ContributorsRequestFactory.php | 0 .../landing/src/Flow/Website/Kernel.php | 0 .../src/Flow/Website/Service/Examples.php | 61 + .../src/Flow/Website/Service/Github.php | 0 {src/web => web}/landing/tailwind.config.js | 0 .../landing/templates/base.html.twig | 0 .../landing/templates/main/index.html.twig | 70 +- .../Valid/topics/topic_1/example_1/code.php | 3 + .../Valid/topics/topic_1/example_2/code.php | 3 + .../Valid/topics/topic_2/example_1/code.php | 3 + .../Valid/topics/topic_2/example_2/code.php | 3 + .../Valid/topics/topic_3/example_1/code.php | 3 + .../Tests/Integration/ExamplesTest.php | 95 + web/landing/tools/phpunit/.gitignore | 1 + web/landing/tools/phpunit/composer.json | 10 + web/landing/tools/phpunit/composer.lock | 1634 +++++++++++++++++ 62 files changed, 1962 insertions(+), 110 deletions(-) rename examples/topics/transformations/filter_mod/{filter_mod.php => code.php} (100%) delete mode 100644 src/web/landing/build/.gitkeep delete mode 100644 src/web/landing/src/Flow/Website/Controller/DefaultController.php delete mode 100644 src/web/landing/templates/main/example.txt.twig rename {src/web => web}/landing/.env (100%) rename {src/web => web}/landing/.gitignore (100%) rename {src/web => web}/landing/README.md (100%) rename {src/web => web}/landing/assets/app.js (100%) rename {src/web => web}/landing/assets/bootstrap.js (100%) rename {src/web => web}/landing/assets/controllers.json (100%) rename {src/web => web}/landing/assets/controllers/syntax_highlight_controller.js (100%) rename {src/web => web}/landing/assets/images/elephant.svg (100%) rename {src/web => web}/landing/assets/images/favicons/apple-touch-icon.png (100%) rename {src/web => web}/landing/assets/images/favicons/favicon-16x16.png (100%) rename {src/web => web}/landing/assets/images/favicons/favicon-32x32.png (100%) rename {src/web => web}/landing/assets/images/favicons/favicon.ico (100%) rename {src/web => web}/landing/assets/images/icons/arrow-right.svg (100%) rename {src/web => web}/landing/assets/images/icons/close.svg (100%) rename {src/web => web}/landing/assets/images/icons/external.svg (100%) rename {src/web => web}/landing/assets/images/icons/extract.svg (100%) rename {src/web => web}/landing/assets/images/icons/load.svg (100%) rename {src/web => web}/landing/assets/images/icons/menu.svg (100%) rename {src/web => web}/landing/assets/images/icons/transform.svg (100%) rename {src/web => web}/landing/assets/images/logo.svg (100%) rename {src/web => web}/landing/assets/styles/app.css (100%) rename {src/web => web}/landing/bin/console (100%) rename {src/web => web}/landing/composer.json (89%) rename {src/web => web}/landing/composer.lock (100%) rename {src/web => web}/landing/config/bundles.php (100%) rename {src/web => web}/landing/config/packages/asset_mapper.yaml (100%) rename {src/web => web}/landing/config/packages/framework.yaml (100%) rename {src/web => web}/landing/config/packages/routing.yaml (100%) rename {src/web => web}/landing/config/packages/static_content_generator.yaml (100%) rename {src/web => web}/landing/config/packages/twig.yaml (100%) rename {src/web => web}/landing/config/packages/web_profiler.yaml (100%) rename {src/web => web}/landing/config/preload.php (100%) rename {src/web => web}/landing/config/routes.yaml (100%) rename {src/web => web}/landing/config/routes/framework.yaml (100%) rename {src/web => web}/landing/config/routes/web_profiler.yaml (100%) rename {src/web => web}/landing/config/services.yaml (78%) rename {src/web => web}/landing/importmap.php (100%) create mode 100644 web/landing/phpunit.xml rename {src/web => web}/landing/public/index.php (100%) create mode 100644 web/landing/src/Flow/Website/Controller/DefaultController.php rename {src/web => web}/landing/src/Flow/Website/Factory/Github/ContributorsRequestFactory.php (100%) rename {src/web => web}/landing/src/Flow/Website/Kernel.php (100%) create mode 100644 web/landing/src/Flow/Website/Service/Examples.php rename {src/web => web}/landing/src/Flow/Website/Service/Github.php (100%) rename {src/web => web}/landing/tailwind.config.js (100%) rename {src/web => web}/landing/templates/base.html.twig (100%) rename {src/web => web}/landing/templates/main/index.html.twig (55%) create mode 100644 web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_1/example_1/code.php create mode 100644 web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_1/example_2/code.php create mode 100644 web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_2/example_1/code.php create mode 100644 web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_2/example_2/code.php create mode 100644 web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_3/example_1/code.php create mode 100644 web/landing/tests/Flow/Website/Service/Tests/Integration/ExamplesTest.php create mode 100644 web/landing/tools/phpunit/.gitignore create mode 100644 web/landing/tools/phpunit/composer.json create mode 100644 web/landing/tools/phpunit/composer.lock diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index c7ff05f4f..09984d9b7 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -13,7 +13,8 @@ __DIR__ . '/src/adapter/**/tests', __DIR__ . '/src/lib/**/src', __DIR__ . '/src/lib/**/tests', - __DIR__ . '/src/web/**/src', + __DIR__ . '/web/**/src', + __DIR__ . '/web/**/tests', __DIR__ . '/examples', ]); diff --git a/composer.json b/composer.json index 9f3a4b863..f70ddd88c 100644 --- a/composer.json +++ b/composer.json @@ -181,7 +181,8 @@ "@test:mutation" ], "test": [ - "tools/phpunit/vendor/bin/phpunit" + "tools/phpunit/vendor/bin/phpunit", + "@test:web" ], "test:docs": [ "docker run -t --rm -v $PWD:/app norberttech/md-link-linter --exclude=vendor ." @@ -208,6 +209,7 @@ "tools/infection/vendor/bin/infection -j2" ], "test:monorepo": "tools/monorepo/vendor/bin/monorepo-builder validate", + "test:web": "composer test --working-dir=web/landing", "static:analyze": [ "@static:analyze:cs-fixer", "@static:analyze:psalm", @@ -247,7 +249,8 @@ "composer install --working-dir=./tools/phpbench", "composer install --working-dir=./tools/phpstan", "composer install --working-dir=./tools/psalm", - "composer install --working-dir=./tools/phpunit" + "composer install --working-dir=./tools/phpunit", + "composer install --working-dir=./web/landing/tools/phpunit" ], "tools:update": [ "composer update --working-dir=./tools/blackfire", @@ -258,7 +261,8 @@ "composer update --working-dir=./tools/phpbench", "composer update --working-dir=./tools/phpstan", "composer update --working-dir=./tools/psalm", - "composer update --working-dir=./tools/phpunit" + "composer update --working-dir=./tools/phpunit", + "composer update --working-dir=./web/landing/tools/phpunit" ] }, "extra": { diff --git a/examples/topics/transformations/filter_mod/filter_mod.php b/examples/topics/transformations/filter_mod/code.php similarity index 100% rename from examples/topics/transformations/filter_mod/filter_mod.php rename to examples/topics/transformations/filter_mod/code.php diff --git a/src/web/landing/build/.gitkeep b/src/web/landing/build/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/web/landing/src/Flow/Website/Controller/DefaultController.php b/src/web/landing/src/Flow/Website/Controller/DefaultController.php deleted file mode 100644 index 98a6e9c88..000000000 --- a/src/web/landing/src/Flow/Website/Controller/DefaultController.php +++ /dev/null @@ -1,23 +0,0 @@ -render('main/index.html.twig', [ - 'contributors' => $this->github->contributors(), - ]); - } -} diff --git a/src/web/landing/templates/main/example.txt.twig b/src/web/landing/templates/main/example.txt.twig deleted file mode 100644 index ff485a8fa..000000000 --- a/src/web/landing/templates/main/example.txt.twig +++ /dev/null @@ -1,40 +0,0 @@ -{% macro first() %} -read(from_array( - \array_merge(...\array_map( - function (int $i) : array { - $data = []; - - $maxItems = \random_int(2, 10); - - for ($d = 0; $d < $maxItems; $d++) { - $data[] = [ - 'id' => Uuid::uuid4()->toString(), - 'created_at' => (new \DateTimeImmutable('2020-01-01'))->add(new \DateInterval('P' . $i . 'D'))->setTime(\random_int(0, 23), \random_int(0, 59), \random_int(0, 59)), - 'value' => \random_int(1, 1000), - ]; - } - - return $data; - }, - \range(1, 300) - )) - )) - ->partitionBy(ref('created_at')) - ->saveMode(overwrite()) - ->write(to_parquet(__FLOW_OUTPUT__ . '/date_partitioned')) - ->run(); -{% endmacro %} \ No newline at end of file diff --git a/src/web/landing/.env b/web/landing/.env similarity index 100% rename from src/web/landing/.env rename to web/landing/.env diff --git a/src/web/landing/.gitignore b/web/landing/.gitignore similarity index 100% rename from src/web/landing/.gitignore rename to web/landing/.gitignore diff --git a/src/web/landing/README.md b/web/landing/README.md similarity index 100% rename from src/web/landing/README.md rename to web/landing/README.md diff --git a/src/web/landing/assets/app.js b/web/landing/assets/app.js similarity index 100% rename from src/web/landing/assets/app.js rename to web/landing/assets/app.js diff --git a/src/web/landing/assets/bootstrap.js b/web/landing/assets/bootstrap.js similarity index 100% rename from src/web/landing/assets/bootstrap.js rename to web/landing/assets/bootstrap.js diff --git a/src/web/landing/assets/controllers.json b/web/landing/assets/controllers.json similarity index 100% rename from src/web/landing/assets/controllers.json rename to web/landing/assets/controllers.json diff --git a/src/web/landing/assets/controllers/syntax_highlight_controller.js b/web/landing/assets/controllers/syntax_highlight_controller.js similarity index 100% rename from src/web/landing/assets/controllers/syntax_highlight_controller.js rename to web/landing/assets/controllers/syntax_highlight_controller.js diff --git a/src/web/landing/assets/images/elephant.svg b/web/landing/assets/images/elephant.svg similarity index 100% rename from src/web/landing/assets/images/elephant.svg rename to web/landing/assets/images/elephant.svg diff --git a/src/web/landing/assets/images/favicons/apple-touch-icon.png b/web/landing/assets/images/favicons/apple-touch-icon.png similarity index 100% rename from src/web/landing/assets/images/favicons/apple-touch-icon.png rename to web/landing/assets/images/favicons/apple-touch-icon.png diff --git a/src/web/landing/assets/images/favicons/favicon-16x16.png b/web/landing/assets/images/favicons/favicon-16x16.png similarity index 100% rename from src/web/landing/assets/images/favicons/favicon-16x16.png rename to web/landing/assets/images/favicons/favicon-16x16.png diff --git a/src/web/landing/assets/images/favicons/favicon-32x32.png b/web/landing/assets/images/favicons/favicon-32x32.png similarity index 100% rename from src/web/landing/assets/images/favicons/favicon-32x32.png rename to web/landing/assets/images/favicons/favicon-32x32.png diff --git a/src/web/landing/assets/images/favicons/favicon.ico b/web/landing/assets/images/favicons/favicon.ico similarity index 100% rename from src/web/landing/assets/images/favicons/favicon.ico rename to web/landing/assets/images/favicons/favicon.ico diff --git a/src/web/landing/assets/images/icons/arrow-right.svg b/web/landing/assets/images/icons/arrow-right.svg similarity index 100% rename from src/web/landing/assets/images/icons/arrow-right.svg rename to web/landing/assets/images/icons/arrow-right.svg diff --git a/src/web/landing/assets/images/icons/close.svg b/web/landing/assets/images/icons/close.svg similarity index 100% rename from src/web/landing/assets/images/icons/close.svg rename to web/landing/assets/images/icons/close.svg diff --git a/src/web/landing/assets/images/icons/external.svg b/web/landing/assets/images/icons/external.svg similarity index 100% rename from src/web/landing/assets/images/icons/external.svg rename to web/landing/assets/images/icons/external.svg diff --git a/src/web/landing/assets/images/icons/extract.svg b/web/landing/assets/images/icons/extract.svg similarity index 100% rename from src/web/landing/assets/images/icons/extract.svg rename to web/landing/assets/images/icons/extract.svg diff --git a/src/web/landing/assets/images/icons/load.svg b/web/landing/assets/images/icons/load.svg similarity index 100% rename from src/web/landing/assets/images/icons/load.svg rename to web/landing/assets/images/icons/load.svg diff --git a/src/web/landing/assets/images/icons/menu.svg b/web/landing/assets/images/icons/menu.svg similarity index 100% rename from src/web/landing/assets/images/icons/menu.svg rename to web/landing/assets/images/icons/menu.svg diff --git a/src/web/landing/assets/images/icons/transform.svg b/web/landing/assets/images/icons/transform.svg similarity index 100% rename from src/web/landing/assets/images/icons/transform.svg rename to web/landing/assets/images/icons/transform.svg diff --git a/src/web/landing/assets/images/logo.svg b/web/landing/assets/images/logo.svg similarity index 100% rename from src/web/landing/assets/images/logo.svg rename to web/landing/assets/images/logo.svg diff --git a/src/web/landing/assets/styles/app.css b/web/landing/assets/styles/app.css similarity index 100% rename from src/web/landing/assets/styles/app.css rename to web/landing/assets/styles/app.css diff --git a/src/web/landing/bin/console b/web/landing/bin/console similarity index 100% rename from src/web/landing/bin/console rename to web/landing/bin/console diff --git a/src/web/landing/composer.json b/web/landing/composer.json similarity index 89% rename from src/web/landing/composer.json rename to web/landing/composer.json index b12e7669f..bf8423ffe 100644 --- a/src/web/landing/composer.json +++ b/web/landing/composer.json @@ -31,6 +31,11 @@ "Flow\\Website\\": "src/Flow/Website/" } }, + "autoload-dev": { + "psr-4": { + "Flow\\Website\\": "tests/Flow/Website/" + } + }, "config": { "allow-plugins": { "php-http/discovery": false, @@ -38,6 +43,9 @@ } }, "scripts": { + "test": [ + "tools/phpunit/vendor/bin/phpunit" + ], "assets:clear": "rm -rf public/assets", "assets:build": [ "@assets:clear", diff --git a/src/web/landing/composer.lock b/web/landing/composer.lock similarity index 100% rename from src/web/landing/composer.lock rename to web/landing/composer.lock diff --git a/src/web/landing/config/bundles.php b/web/landing/config/bundles.php similarity index 100% rename from src/web/landing/config/bundles.php rename to web/landing/config/bundles.php diff --git a/src/web/landing/config/packages/asset_mapper.yaml b/web/landing/config/packages/asset_mapper.yaml similarity index 100% rename from src/web/landing/config/packages/asset_mapper.yaml rename to web/landing/config/packages/asset_mapper.yaml diff --git a/src/web/landing/config/packages/framework.yaml b/web/landing/config/packages/framework.yaml similarity index 100% rename from src/web/landing/config/packages/framework.yaml rename to web/landing/config/packages/framework.yaml diff --git a/src/web/landing/config/packages/routing.yaml b/web/landing/config/packages/routing.yaml similarity index 100% rename from src/web/landing/config/packages/routing.yaml rename to web/landing/config/packages/routing.yaml diff --git a/src/web/landing/config/packages/static_content_generator.yaml b/web/landing/config/packages/static_content_generator.yaml similarity index 100% rename from src/web/landing/config/packages/static_content_generator.yaml rename to web/landing/config/packages/static_content_generator.yaml diff --git a/src/web/landing/config/packages/twig.yaml b/web/landing/config/packages/twig.yaml similarity index 100% rename from src/web/landing/config/packages/twig.yaml rename to web/landing/config/packages/twig.yaml diff --git a/src/web/landing/config/packages/web_profiler.yaml b/web/landing/config/packages/web_profiler.yaml similarity index 100% rename from src/web/landing/config/packages/web_profiler.yaml rename to web/landing/config/packages/web_profiler.yaml diff --git a/src/web/landing/config/preload.php b/web/landing/config/preload.php similarity index 100% rename from src/web/landing/config/preload.php rename to web/landing/config/preload.php diff --git a/src/web/landing/config/routes.yaml b/web/landing/config/routes.yaml similarity index 100% rename from src/web/landing/config/routes.yaml rename to web/landing/config/routes.yaml diff --git a/src/web/landing/config/routes/framework.yaml b/web/landing/config/routes/framework.yaml similarity index 100% rename from src/web/landing/config/routes/framework.yaml rename to web/landing/config/routes/framework.yaml diff --git a/src/web/landing/config/routes/web_profiler.yaml b/web/landing/config/routes/web_profiler.yaml similarity index 100% rename from src/web/landing/config/routes/web_profiler.yaml rename to web/landing/config/routes/web_profiler.yaml diff --git a/src/web/landing/config/services.yaml b/web/landing/config/services.yaml similarity index 78% rename from src/web/landing/config/services.yaml rename to web/landing/config/services.yaml index 681c99f44..0405c0a2d 100644 --- a/src/web/landing/config/services.yaml +++ b/web/landing/config/services.yaml @@ -1,5 +1,6 @@ # https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration parameters: + examples_path: '../../../examples' services: _defaults: @@ -17,3 +18,7 @@ services: Flow\Website\Factory\Github\ContributorsRequestFactory: arguments: $githubToken: '%env(GITHUB_TOKEN)%' + + Flow\Website\Service\Examples: + arguments: + $examplesPath: '%examples_path%' \ No newline at end of file diff --git a/src/web/landing/importmap.php b/web/landing/importmap.php similarity index 100% rename from src/web/landing/importmap.php rename to web/landing/importmap.php diff --git a/web/landing/phpunit.xml b/web/landing/phpunit.xml new file mode 100644 index 000000000..355d223eb --- /dev/null +++ b/web/landing/phpunit.xml @@ -0,0 +1,22 @@ + + + + + tests/Flow/Website/**/Tests/Integration + + + + + src + + + diff --git a/src/web/landing/public/index.php b/web/landing/public/index.php similarity index 100% rename from src/web/landing/public/index.php rename to web/landing/public/index.php diff --git a/web/landing/src/Flow/Website/Controller/DefaultController.php b/web/landing/src/Flow/Website/Controller/DefaultController.php new file mode 100644 index 000000000..5a9610da9 --- /dev/null +++ b/web/landing/src/Flow/Website/Controller/DefaultController.php @@ -0,0 +1,75 @@ +examples->topics(); + $currentTopic = $topic; + + $examples = $this->examples->examples($currentTopic); + $currentExample = $example; + + return $this->render('main/index.html.twig', [ + 'contributors' => $this->github->contributors(), + 'topics' => $topics, + 'examples' => $examples, + 'currentTopic' => $topic, + 'currentExample' => $example, + 'code' => $this->examples->code($currentTopic, $currentExample), + ]); + } + + #[Route('/', name: 'main')] + public function main() : Response + { + $topics = $this->examples->topics(); + $currentTopic = \current($topics); + + $examples = $this->examples->examples($currentTopic); + $currentExample = \current($examples); + + return $this->render('main/index.html.twig', [ + 'contributors' => $this->github->contributors(), + 'topics' => $topics, + 'examples' => $examples, + 'currentTopic' => $currentTopic, + 'currentExample' => $currentExample, + 'code' => $this->examples->code($currentTopic, $currentExample), + ]); + } + + #[Route('/{topic}', name: 'topic')] + public function topic(string $topic) : Response + { + $topics = $this->examples->topics(); + $currentTopic = $topic; + + $examples = $this->examples->examples($currentTopic); + $currentExample = \current($examples); + + return $this->render('main/index.html.twig', [ + 'contributors' => $this->github->contributors(), + 'topics' => $topics, + 'examples' => $examples, + 'currentTopic' => $currentTopic, + 'currentExample' => $currentExample, + 'code' => $this->examples->code($currentTopic, $currentExample), + ]); + } +} diff --git a/src/web/landing/src/Flow/Website/Factory/Github/ContributorsRequestFactory.php b/web/landing/src/Flow/Website/Factory/Github/ContributorsRequestFactory.php similarity index 100% rename from src/web/landing/src/Flow/Website/Factory/Github/ContributorsRequestFactory.php rename to web/landing/src/Flow/Website/Factory/Github/ContributorsRequestFactory.php diff --git a/src/web/landing/src/Flow/Website/Kernel.php b/web/landing/src/Flow/Website/Kernel.php similarity index 100% rename from src/web/landing/src/Flow/Website/Kernel.php rename to web/landing/src/Flow/Website/Kernel.php diff --git a/web/landing/src/Flow/Website/Service/Examples.php b/web/landing/src/Flow/Website/Service/Examples.php new file mode 100644 index 000000000..87d2ba4cc --- /dev/null +++ b/web/landing/src/Flow/Website/Service/Examples.php @@ -0,0 +1,61 @@ +examplesPath), $topic, $example); + + if (false === \file_exists($path)) { + throw new \RuntimeException(\sprintf('Code example doesn\'t exists, it should be located in path: "%s".', $path)); + } + + return \file_get_contents($path); + } + + /** + * @return string[] + */ + public function examples(string $topic) : array + { + $path = \sprintf('%s/topics/%s', \realpath($this->examplesPath), $topic); + + if (false === \file_exists($path)) { + throw new \RuntimeException(\sprintf('Topic "%s" doesn\'t exists, it should be located in path: "%s".', $topic, $path)); + } + + $examples = \array_diff(\scandir($path), ['..', '.']); + + if (0 === \count($examples)) { + throw new \RuntimeException(\sprintf('Topic "%s" doesn\'t have any example, there should be at least one example in path "%s".', $topic, $path)); + } + + return $examples; + } + + /** + * @return string[] + */ + public function topics() : array + { + $path = \sprintf('%s/topics', \realpath($this->examplesPath)); + + if (false === \file_exists($path)) { + throw new \RuntimeException(\sprintf('Topics root directory doesn\'t exists, it should be located in path: "%s".', $path)); + } + + $topics = \array_diff(\scandir($path), ['..', '.']); + + if (0 === \count($topics)) { + throw new \RuntimeException(\sprintf('Topics root directory doesn\'t have any topic, there should be at least one topic in path "%s".', $path)); + } + + return $topics; + } +} diff --git a/src/web/landing/src/Flow/Website/Service/Github.php b/web/landing/src/Flow/Website/Service/Github.php similarity index 100% rename from src/web/landing/src/Flow/Website/Service/Github.php rename to web/landing/src/Flow/Website/Service/Github.php diff --git a/src/web/landing/tailwind.config.js b/web/landing/tailwind.config.js similarity index 100% rename from src/web/landing/tailwind.config.js rename to web/landing/tailwind.config.js diff --git a/src/web/landing/templates/base.html.twig b/web/landing/templates/base.html.twig similarity index 100% rename from src/web/landing/templates/base.html.twig rename to web/landing/templates/base.html.twig diff --git a/src/web/landing/templates/main/index.html.twig b/web/landing/templates/main/index.html.twig similarity index 55% rename from src/web/landing/templates/main/index.html.twig rename to web/landing/templates/main/index.html.twig index fd8504dc7..1f518e76a 100644 --- a/src/web/landing/templates/main/index.html.twig +++ b/web/landing/templates/main/index.html.twig @@ -1,20 +1,6 @@ {% extends 'base.html.twig' %} -{% import "main/example.txt.twig" as examples %} {% block main %} - {% set topics = [ - {id: 'partitioning', name: 'Partitioning'}, - {id: 'grouping_and_aggregating', name: 'Grouping and Aggregating'}, - {id: 'join_operations', name: 'Join Operations'}, - {id: 'sorting', name: 'Sorting'}, - {id: 'schema_validation', name: 'Schema Validation'}, - {id: 'window_functions', name: 'Window Functions'}, - {id: 'caching', name: 'Caching'}, - {id: 'low_memory_consumption', name: 'Low Memory Consumption'}, - ] %} - - {% set examples = 1..10 %} -

UNIFIED DATA PROCESSING FRAMEWORK

composer require flow-php/etl @@ -47,45 +33,43 @@
-
+
- {% for topic in topics %} -
diff --git a/web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_1/example_1/code.php b/web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_1/example_1/code.php new file mode 100644 index 000000000..79791b967 --- /dev/null +++ b/web/landing/tests/Flow/Website/Service/Tests/Fixtures/Valid/topics/topic_1/example_1/code.php @@ -0,0 +1,3 @@ +assertStringContainsString( + 'example code file', + $service->code('topic_3', 'example_1') + ); + } + + public function test_return_topic_examples_list() : void + { + $path = __DIR__ . '/../Fixtures/Valid'; + $service = new Examples($path); + + $this->assertEqualsCanonicalizing( + $service->examples('topic_2'), + [ + 'example_1', + 'example_2', + ] + ); + } + + public function test_return_topics_list() : void + { + $path = __DIR__ . '/../Fixtures/Valid'; + $service = new Examples($path); + + $this->assertEqualsCanonicalizing( + $service->topics(), + [ + 'topic_1', + 'topic_2', + 'topic_3', + ] + ); + } + + public function test_throw_exception_when_example_code_does_not_exists() : void + { + $path = __DIR__ . '/../Fixtures/InvalidCode'; + $service = new Examples($path); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessageMatches('/Code example doesn\'t exists, it should be located in path: ".*"./'); + + $service->code('topic_1', 'example_1'); + } + + public function test_throw_exception_when_topic_directory_does_not_exists() : void + { + $path = __DIR__ . '/../Fixtures/InvalidExample'; + $service = new Examples($path); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessageMatches('/Topic "non_existing_topic" doesn\'t exists, it should be located in path: ".*"./'); + + $service->examples('non_existing_topic'); + } + + public function test_throw_exception_when_topic_directory_is_empty() : void + { + $path = __DIR__ . '/../Fixtures/InvalidExample'; + $service = new Examples($path); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessageMatches('/Topic "topic_1" doesn\'t have any example, there should be at least one example in path ".*"./'); + + $service->examples('topic_1'); + } + + public function test_throw_exception_when_topics_directory_is_empty() : void + { + $path = __DIR__ . '/../Fixtures/InvalidTopic'; + $service = new Examples($path); + + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessageMatches('/Topics root directory doesn\'t have any topic, there should be at least one topic in path ".*"./'); + + $service->topics(); + } +} diff --git a/web/landing/tools/phpunit/.gitignore b/web/landing/tools/phpunit/.gitignore new file mode 100644 index 000000000..5657f6ea7 --- /dev/null +++ b/web/landing/tools/phpunit/.gitignore @@ -0,0 +1 @@ +vendor \ No newline at end of file diff --git a/web/landing/tools/phpunit/composer.json b/web/landing/tools/phpunit/composer.json new file mode 100644 index 000000000..a897deb20 --- /dev/null +++ b/web/landing/tools/phpunit/composer.json @@ -0,0 +1,10 @@ +{ + "name": "flow-php/web-flow-tools", + "description": "Flow PHP ETL - Web Tools", + "require-dev": { + "phpunit/phpunit": "^10" + }, + "config": { + "allow-plugins": false + } +} diff --git a/web/landing/tools/phpunit/composer.lock b/web/landing/tools/phpunit/composer.lock new file mode 100644 index 000000000..f96ab0cd7 --- /dev/null +++ b/web/landing/tools/phpunit/composer.lock @@ -0,0 +1,1634 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "c024bdbd36895a2231b7347ddb2fdb66", + "packages": [], + "packages-dev": [ + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0" + }, + "time": "2024-01-07T17:17:35+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T15:38:30+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe", + "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.9" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-01-22T14:35:40+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-14T13:18:12+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T10:55:06+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-11T05:39:26+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-24T13:22:09+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-07-19T07:19:23+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2023-11-20T00:12:19+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +}