From 155002ec3bb9c32b8ac52c972f4952633ec22b14 Mon Sep 17 00:00:00 2001 From: xy2z Date: Sat, 10 Feb 2024 22:25:03 +0100 Subject: [PATCH] new master: phar build --- .gitattributes | 11 - .gitignore | 14 - .php-cs-fixer.dist.php | 81 - CONTRIBUTING.md | 11 - README.md | 67 - capro | 83 - composer.json | 49 - composer.lock | 5926 -------------------- phpstan.neon | 14 - src/Capro.php | 50 - src/Collector.php | 208 - src/Commands/CommandBuild.php | 260 - src/Commands/CommandConfig.php | 52 - src/Commands/CommandInterface.php | 14 - src/Commands/CommandNewSite.php | 53 - src/Commands/CommandServe.php | 128 - src/Config.php | 29 - src/FileWatcher.php | 141 - src/PublicView.php | 47 - src/View.php | 234 - src/ViewTemplate.php | 74 - src/capro_bootstrap.php | 93 - src/helpers.php | 151 - stubs/new-site/.gitignore | 17 - stubs/new-site/README.md | 9 - stubs/new-site/composer.json | 5 - stubs/new-site/config/app.yml | 9 - stubs/new-site/views/pages/index.blade.php | 72 - tests/CollectorTest.php | 561 -- 29 files changed, 8463 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .gitignore delete mode 100644 .php-cs-fixer.dist.php delete mode 100644 CONTRIBUTING.md delete mode 100644 README.md delete mode 100644 capro delete mode 100644 composer.json delete mode 100644 composer.lock delete mode 100644 phpstan.neon delete mode 100644 src/Capro.php delete mode 100644 src/Collector.php delete mode 100644 src/Commands/CommandBuild.php delete mode 100644 src/Commands/CommandConfig.php delete mode 100644 src/Commands/CommandInterface.php delete mode 100644 src/Commands/CommandNewSite.php delete mode 100644 src/Commands/CommandServe.php delete mode 100644 src/Config.php delete mode 100644 src/FileWatcher.php delete mode 100644 src/PublicView.php delete mode 100644 src/View.php delete mode 100644 src/ViewTemplate.php delete mode 100644 src/capro_bootstrap.php delete mode 100644 src/helpers.php delete mode 100644 stubs/new-site/.gitignore delete mode 100644 stubs/new-site/README.md delete mode 100644 stubs/new-site/composer.json delete mode 100644 stubs/new-site/config/app.yml delete mode 100644 stubs/new-site/views/pages/index.blade.php delete mode 100644 tests/CollectorTest.php diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index c0fc819..0000000 --- a/.gitattributes +++ /dev/null @@ -1,11 +0,0 @@ -/capro-logo.png export-ignore -/README.md export-ignore -/.gitignore export-ignore -/.github export-ignore -/.phive export-ignore -/.psalm export-ignore -/tests export-ignore -/phpstan export-ignore -/phpstan.neon export-ignore -/.php-cs-fixer.dist.php export-ignore -/.vscode export-ignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index adff810..0000000 --- a/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# Gitignore for Capro Core (not for sites) -/.vscode -/vendor/ -/cache/ -/config/ -/content/ -/views/ -/static/ -/public/ -/tmp* -.capro-cache* -.php-cs-fixer.cache -desktop.ini -/.env diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php deleted file mode 100644 index b93498a..0000000 --- a/.php-cs-fixer.dist.php +++ /dev/null @@ -1,81 +0,0 @@ -in(__DIR__ . '/src') - ->append([ - __DIR__ . '/capro' - ]); - -$config = new PhpCsFixer\Config(); -return $config->setRules([ - '@PSR12' => true, - - // Short arrays `[]` instead of `array()` - 'array_syntax' => ['syntax' => 'short'], - - // Place braces on same line - 'braces' => [ - 'allow_single_line_closure' => true, - 'position_after_functions_and_oop_constructs' => 'same', - ], - - // Fix indetation to tabs - 'indentation_type' => true, - - // PHP code must use the long true, - - // The PHP closing tag MUST be omitted from files containing only PHP. - 'no_closing_tag' => true, - - // A PHP file without end tag must always end with a single empty line feed. - 'single_blank_line_at_eof' => true, - - // Ensure there is no code on the same line as the PHP open tag and it is followed by a blank line. - 'blank_line_after_opening_tag' => true, - - // Each element of an array must be indented exactly once. - 'array_indentation' => true, - - // Remove extra spaces in a nullable typehint. - 'compact_nullable_typehint' => true, - - // Removes extra blank lines and/or blank lines following configuration. - 'no_extra_blank_lines' => true, - - // Strings must be single quote - 'single_quote' => true, - - // Class static references self, static and parent MUST be in lower case. - 'lowercase_static_reference' => true, - - // A single space or none should be between cast and variable. - 'cast_spaces' => true, - - // Removes extra spaces between colon and case value. - 'switch_case_space' => true, - - // Function defined by PHP should be called using the correct casing. - 'native_function_casing' => true, - - // PHP code MUST use only UTF-8 without BOM (remove BOM). - 'encoding' => true, - - // PHP keywords MUST be in lower case. - 'lowercase_keywords' => true, - - // The PHP constants true, false, and null MUST be written using the correct casing. - 'constant_case' => true, - - // Magic constants should be referred to using the correct casing. (eg. `__DIR__`) - 'magic_constant_casing' => true, - - // Magic method definitions and calls must be using the correct casing. - 'magic_method_casing' => true, - - // Multi-line arrays, arguments list, parameters list and match expressions must have a trailing comma. - 'trailing_comma_in_multiline' => true, -]) -->setIndent("\t") -->setLineEnding("\n") -->setFinder($finder); diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 652015c..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,11 +0,0 @@ -# Contributing to Capro - -Pull Requests are welcome! - -- If you want to work on a completely new feature please make an issue beforehand to discuss if it fits the projects scope. -- Use `php-cs-fixer` to follow the coding standard. This can be called automatically in modern editors on file save. -- Call `vendor\bin\phpstan` to check for errors. -- Make sure it works with all supported PHP versions (see "Requirements" in the README, or composer.json). -- When you test the code you should run "php capro " to make sure you are running the correct script. - -If you have any questions or notes about contributing, please ask in [Discussions](https://github.com/xy2z/capro/discussions) diff --git a/README.md b/README.md deleted file mode 100644 index d419a58..0000000 --- a/README.md +++ /dev/null @@ -1,67 +0,0 @@ -
- -![capro logo](./capro-logo.png) - -Capro is a static-site generator for PHP 8+ - ---- - -[Quick Setup](#quick-setup) | [Documentation](https://capro.xy2z.io) | [Community](https://github.com/xy2z/capro/discussions) | [Sponsor](https://github.com/sponsors/xy2z) - -

- - - - - -

- ---- - -
- - -## โš  Notice - -Capro is currently in [alpha](https://github.com/xy2z/capro/issues/5), and is not thoroughly tested for production. - -Please report bugs via [GitHub Issues](https://github.com/xy2z/capro/issues) - - -## About - -A PHP static-site generator, using Blade template engine. - -Capro is currently in alpha, and is not thoroughly tested for production. Breaking changes might occur during the alpha phase. - - -## Sponsors - -Currently none. Sponsor here: https://github.com/sponsors/xy2z - - -## Requirements -- PHP 8.0+ -- [Composer](https://getcomposer.org/) - - -## Quick Setup -First install the capro global package -```bash -composer global require xy2z/capro:@alpha -``` - -Now, you can create new sites using: -```bash -capro new demo -cd demo/public -php -S localhost:82 -``` -Head over to http://localhost:82 to see your new static Capro site. - -Learn more in the **[full documentation site](https://capro.xy2z.io).** (which was build in capro) - - -## Contributing - -Pull Requests are welcome! See more in the [Contributing Guide](CONTRIBUTING.md). diff --git a/capro b/capro deleted file mode 100644 index d6bbaaa..0000000 --- a/capro +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env php -` - require __DIR__ . '/vendor/autoload.php'; - define('CAPRO_SITE_ROOT_DIR', __DIR__ . DIRECTORY_SEPARATOR); -} - -if (file_exists(__DIR__ . '/../../autoload.php')) { - // For sites that is using this using vendor/bin - // Also for global installed.. - require __DIR__ . '/../../autoload.php'; - define('CAPRO_SITE_ROOT_DIR', __DIR__ . '/../../../'); // go back 3 dirs (/vendor/xy2z/capro/) -} - -if (!defined('CAPRO_SITE_ROOT_DIR')) { - echo 'Error: Composer autoload.php was not found. (try "composer install")' . PHP_EOL; - exit(1); -} - -// This is required to make the classes available in the Blade views. -class_alias('xy2z\Capro\Capro', 'Capro'); - -// Load env (before config) -if (file_exists(CAPRO_SITE_ROOT_DIR . '.env')) { - // Load .env file - $dotenv = Dotenv\Dotenv::createImmutable(CAPRO_SITE_ROOT_DIR); - try { - $dotenv->load(); - } catch (Exception $e) { - // Do nothing - tell_error('Invalid .env file. Error message: ' . $e->getMessage()); - } -} - -// Load config -define('CAPRO_CONFIG_DIR', CAPRO_SITE_ROOT_DIR . 'config'); -if (is_dir(CAPRO_CONFIG_DIR)) { - Config::load_capro_config(); - // } else { - // tell('Notice: Config dir not found: ' . CAPRO_CONFIG_DIR); // verbose. (but never for global composer "capro" commands.) -} - -// Set CONSTANTS from Config (or use defaults) -- after loading config. -// Cant use realpath() here because the directories might not exist yet. -define('CAPRO_PUBLIC_DIR', CAPRO_SITE_ROOT_DIR . Config::get('core.public_dir', 'public')); -define('CAPRO_VIEWS_DIR', CAPRO_SITE_ROOT_DIR . Config::get('core.views_dir', 'views')); -define('CAPRO_VIEWS_CACHE_DIR', CAPRO_SITE_ROOT_DIR . Config::get('core.views_cache_dir', 'views/cache')); -define('CAPRO_STATIC_DIR', CAPRO_SITE_ROOT_DIR . Config::get('core.static_dir', 'static')); - -// Check if command argument is set. -$command = $argv[1] ?? null; -if (isset($command)) { - $command = strtolower($command); -} else { - tell('Need a command.'); - exit; -} - -// Run command. -match ($command) { - 'build', 'b' => (new CommandBuild($argv))->run(), - 'new' => (new CommandNewSite($argv))->run(), - 'config' => (new CommandConfig($argv))->run(), - 'serve' => (new CommandServe($argv))->run(), - 'where' => tell(__DIR__), - '-v', 'v', '--version', 'version' => tell(CAPRO_VERSION), - default => tell('Unknown command.'), -}; diff --git a/composer.json b/composer.json deleted file mode 100644 index c0b32e6..0000000 --- a/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "xy2z/capro", - "description": "Static site generator", - "type": "library", - "license": "MIT", - "homepage": "https://capro.xy2z.io", - "authors": [ - { - "name": "Alexander Pedersen", - "email": "xy2z@pm.me", - "homepage": "https://xy2z.io", - "role": "Developer" - } - ], - "require": { - "php": "8.0 - 8.2", - "jenssegers/blade": "1.4.*", - "xy2z/lite-config": "1.*", - "symfony/yaml": "5.*", - "spatie/yaml-front-matter": "2.*", - "league/commonmark": "2.*", - "statix/server": "^0.4.1", - "vlucas/phpdotenv": "5.*", - "symfony/var-dumper": "6.*" - }, - "autoload": { - "psr-4": { - "xy2z\\Capro\\": "src/", - "xy2z\\Capro\\Commands\\": "src/Commands" - }, - "files": [ - "src/helpers.php" - ] - }, - "bin": [ - "capro" - ], - "require-dev": { - "friendsofphp/php-cs-fixer": "3.15.*", - "phpstan/phpstan": "1.*", - "phpunit/phpunit": "9.*" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/xy2z" - } - ] -} diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 2969466..0000000 --- a/composer.lock +++ /dev/null @@ -1,5926 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "7e7962b0e756f04d373aa7f9e17624be", - "packages": [ - { - "name": "dflydev/dot-access-data", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" - }, - "time": "2022-10-27T11:44:00+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.8", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2023-06-16T13:40:37+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2023-02-25T20:23:15+00:00" - }, - { - "name": "illuminate/bus", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/bus.git", - "reference": "d2a8ae4bfd881086e55455e470776358eab27eae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/d2a8ae4bfd881086e55455e470776358eab27eae", - "reference": "d2a8ae4bfd881086e55455e470776358eab27eae", - "shasum": "" - }, - "require": { - "illuminate/collections": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/pipeline": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3|^8.0" - }, - "suggest": { - "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Bus\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Bus package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-03-07T15:02:42+00:00" - }, - { - "name": "illuminate/collections", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/collections.git", - "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/705a4e1ef93cd492c45b9b3e7911cccc990a07f4", - "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "php": "^7.3|^8.0" - }, - "suggest": { - "symfony/var-dumper": "Required to use the dump method (^5.4)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "files": [ - "helpers.php" - ], - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Collections package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-06-23T15:29:49+00:00" - }, - { - "name": "illuminate/container", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/container.git", - "reference": "14062628d05f75047c5a1360b9350028427d568e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/14062628d05f75047c5a1360b9350028427d568e", - "reference": "14062628d05f75047c5a1360b9350028427d568e", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0", - "php": "^7.3|^8.0", - "psr/container": "^1.0" - }, - "provide": { - "psr/container-implementation": "1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Container\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Container package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-02-02T21:03:35+00:00" - }, - { - "name": "illuminate/contracts", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/contracts.git", - "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/5e0fd287a1b22a6b346a9f7cd484d8cf0234585d", - "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Contracts\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Contracts package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-01-13T14:47:47+00:00" - }, - { - "name": "illuminate/events", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/events.git", - "reference": "b7f06cafb6c09581617f2ca05d69e9b159e5a35d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/events/zipball/b7f06cafb6c09581617f2ca05d69e9b159e5a35d", - "reference": "b7f06cafb6c09581617f2ca05d69e9b159e5a35d", - "shasum": "" - }, - "require": { - "illuminate/bus": "^8.0", - "illuminate/collections": "^8.0", - "illuminate/container": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3|^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Illuminate\\Events\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Events package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-09-15T14:32:50+00:00" - }, - { - "name": "illuminate/filesystem", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/filesystem.git", - "reference": "73db3e9a233ed587ba54f52ab8580f3c7bc872b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/73db3e9a233ed587ba54f52ab8580f3c7bc872b2", - "reference": "73db3e9a233ed587ba54f52ab8580f3c7bc872b2", - "shasum": "" - }, - "require": { - "illuminate/collections": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3|^8.0", - "symfony/finder": "^5.4" - }, - "suggest": { - "ext-ftp": "Required to use the Flysystem FTP driver.", - "illuminate/http": "Required for handling uploaded files (^7.0).", - "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.1).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", - "symfony/mime": "Required to enable support for guessing extensions (^5.4)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Filesystem\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Filesystem package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-01-15T15:00:40+00:00" - }, - { - "name": "illuminate/macroable", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/macroable.git", - "reference": "aed81891a6e046fdee72edd497f822190f61c162" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162", - "reference": "aed81891a6e046fdee72edd497f822190f61c162", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Macroable package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-11-16T13:57:03+00:00" - }, - { - "name": "illuminate/pipeline", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/pipeline.git", - "reference": "23aeff5b26ae4aee3f370835c76bd0f4e93f71d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/pipeline/zipball/23aeff5b26ae4aee3f370835c76bd0f4e93f71d2", - "reference": "23aeff5b26ae4aee3f370835c76bd0f4e93f71d2", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3|^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Pipeline\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Pipeline package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-03-26T18:39:16+00:00" - }, - { - "name": "illuminate/support", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/support.git", - "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/1c79242468d3bbd9a0f7477df34f9647dde2a09b", - "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.4|^2.0", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/collections": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "nesbot/carbon": "^2.53.1", - "php": "^7.3|^8.0", - "voku/portable-ascii": "^1.6.1" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "suggest": { - "illuminate/filesystem": "Required to use the composer class (^8.0).", - "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).", - "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).", - "symfony/process": "Required to use the composer class (^5.4).", - "symfony/var-dumper": "Required to use the dd function (^5.4).", - "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "files": [ - "helpers.php" - ], - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Support package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-09-21T21:30:03+00:00" - }, - { - "name": "illuminate/view", - "version": "v8.83.27", - "source": { - "type": "git", - "url": "https://github.com/illuminate/view.git", - "reference": "5e73eef48d9242532f81fadc14c816a01bfb1388" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/5e73eef48d9242532f81fadc14c816a01bfb1388", - "reference": "5e73eef48d9242532f81fadc14c816a01bfb1388", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/collections": "^8.0", - "illuminate/container": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/events": "^8.0", - "illuminate/filesystem": "^8.0", - "illuminate/macroable": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3|^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\View\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate View package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-04-14T13:47:10+00:00" - }, - { - "name": "jenssegers/blade", - "version": "v1.4.0", - "source": { - "type": "git", - "url": "https://github.com/jenssegers/blade.git", - "reference": "22a3700e9fc469c19dd1c5e5bd1b9138195e421f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jenssegers/blade/zipball/22a3700e9fc469c19dd1c5e5bd1b9138195e421f", - "reference": "22a3700e9fc469c19dd1c5e5bd1b9138195e421f", - "shasum": "" - }, - "require": { - "illuminate/view": "^5.5|^6.0|^7.0|^8.0", - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0|^7.0", - "satooshi/php-coveralls": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jenssegers\\Blade\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jens Segers", - "homepage": "https://jenssegers.com" - } - ], - "description": "The standalone version of Laravel's Blade templating engine for use outside of Laravel.", - "keywords": [ - "blade", - "laravel", - "render", - "template", - "view" - ], - "support": { - "issues": "https://github.com/jenssegers/blade/issues", - "source": "https://github.com/jenssegers/blade/tree/v1.4.0" - }, - "funding": [ - { - "url": "https://github.com/jenssegers", - "type": "github" - }, - { - "url": "https://opencollective.com/jenssegers-blade", - "type": "open_collective" - } - ], - "time": "2020-09-17T08:25:26+00:00" - }, - { - "name": "league/commonmark", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2023-08-30T16:55:00+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.70.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d3298b38ea8612e5f77d38d1a99438e42f70341d", - "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "psr/clock": "^1.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2023-09-07T16:43:50+00:00" - }, - { - "name": "nette/schema", - "version": "v1.2.4", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab", - "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab", - "shasum": "" - }, - "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": "7.1 - 8.3" - }, - "require-dev": { - "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "๐Ÿ“ Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.4" - }, - "time": "2023-08-05T18:56:25+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.2", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "cead6637226456b35e1175cc53797dd585d85545" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cead6637226456b35e1175cc53797dd585d85545", - "reference": "cead6637226456b35e1175cc53797dd585d85545", - "shasum": "" - }, - "require": { - "php": ">=8.0 <8.4" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "๐Ÿ›  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.2" - }, - "time": "2023-09-19T11:58:07+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2023-02-25T19:38:58+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "spatie/yaml-front-matter", - "version": "2.0.7", - "source": { - "type": "git", - "url": "https://github.com/spatie/yaml-front-matter.git", - "reference": "f49f228994de70827ca857efffdd3bd7703aea34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/yaml-front-matter/zipball/f49f228994de70827ca857efffdd3bd7703aea34", - "reference": "f49f228994de70827ca857efffdd3bd7703aea34", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0", - "symfony/yaml": "^3.0|^4.0|^5.0|^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\YamlFrontMatter\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A to the point yaml front matter parser", - "homepage": "https://github.com/sebastiandedeyne/yaml-front-matter", - "keywords": [ - "front matter", - "jekyll", - "spatie", - "yaml" - ], - "support": { - "source": "https://github.com/spatie/yaml-front-matter/tree/2.0.7" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2022-04-06T12:03:55+00:00" - }, - { - "name": "statix/server", - "version": "0.4.1", - "source": { - "type": "git", - "url": "https://github.com/statix-php/server.git", - "reference": "385d33fa9167d149d3c814f772c33d13dafc9314" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/statix-php/server/zipball/385d33fa9167d149d3c814f772c33d13dafc9314", - "reference": "385d33fa9167d149d3c814f772c33d13dafc9314", - "shasum": "" - }, - "require": { - "php": ">=8", - "symfony/process": "^6.0", - "vlucas/phpdotenv": "^5.4" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.4", - "illuminate/http": "^9.21", - "laravel/pint": "^1.0", - "pestphp/pest": "^1.21" - }, - "type": "library", - "autoload": { - "psr-4": { - "Statix\\Server\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Wyatt Castaneda", - "email": "wyatt.castaneda@gmail.com" - } - ], - "description": "A object oriented wrapper around PHP's built in server", - "support": { - "chat": "https://discord.gg/yf8BtzS3Qg", - "forum": "https://github.com/statix-php/server/discussions", - "issues": "https://github.com/statix-php/server/issues", - "source": "https://github.com/statix-php/server/tree/0.4.1" - }, - "time": "2022-08-10T18:11:57+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.4.27", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.27" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-31T08:02:31+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-28T09:04:16+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/process", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4", - "reference": "2114fd60f26a296cc403a7939ab91478475a33d4", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", - "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282", - "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-06-27T17:10:44+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", - "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:44:14+00:00" - }, - { - "name": "symfony/yaml", - "version": "v5.4.23", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "4cd2e3ea301aadd76a4172756296fe552fb45b0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4cd2e3ea301aadd76a4172756296fe552fb45b0b", - "reference": "4cd2e3ea301aadd76a4172756296fe552fb45b0b", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.3" - }, - "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.23" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-23T19:33:36+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.5.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "5.5-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2022-10-16T01:01:54+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.6.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-01-24T18:55:24+00:00" - }, - { - "name": "xy2z/lite-config", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/xy2z/LiteConfig.git", - "reference": "90454952f1bcfaccc7fadf6fe84dc78a3646a3d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/xy2z/LiteConfig/zipball/90454952f1bcfaccc7fadf6fe84dc78a3646a3d0", - "reference": "90454952f1bcfaccc7fadf6fe84dc78a3646a3d0", - "shasum": "" - }, - "require-dev": { - "phpstan/phpstan": "1.*", - "phpunit/phpunit": "9.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "xy2z\\LiteConfig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "xy2z", - "email": "xy2z@pm.me" - } - ], - "description": "A lightweight PHP static class with zero dependencies.", - "support": { - "issues": "https://github.com/xy2z/LiteConfig/issues", - "source": "https://github.com/xy2z/LiteConfig/tree/1.2.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/xy2z", - "type": "github" - } - ], - "time": "2023-09-24T18:22:25+00:00" - } - ], - "packages-dev": [ - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-08-31T09:50:34+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "doctrine/annotations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2 || ^3", - "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" - }, - "time": "2023-02-02T22:02:53+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" - }, - "time": "2023-06-03T09:27:29+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" - }, - { - "name": "doctrine/lexer", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-14T08:49:07+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.15.1", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "d48755372a113bddb99f749e34805d83f3acfe04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d48755372a113bddb99f749e34805d83f3acfe04", - "reference": "d48755372a113bddb99f749e34805d83f3acfe04", - "shasum": "" - }, - "require": { - "composer/semver": "^3.3", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiล„ski", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.15.1" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2023-03-13T23:26:30+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.17.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-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/v4.17.1" - }, - "time": "2023-08-13T19:53:39+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": "phpstan/phpstan", - "version": "1.10.35", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e730e5facb75ffe09dfb229795e8c01a459f26c3", - "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2023-09-19T15:27:56+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.29", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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-master": "9.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 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/9.2.29" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-09-19T04:57:46+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "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/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "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/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.13", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "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": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-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/9.6.13" - }, - "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": "2023-09-19T05:39:22+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/log", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "time": "2021-07-14T16:46:02+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "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/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "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/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-05-07T05:35:17+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T06:03:37+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-02T09:26:13+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "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", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "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/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "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": "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/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "symfony/console", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "reference": "2eaf8e63bc5b8cefabd4a800157f0d0c094f677a", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:44:14+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6a180d1c45e0d9797470ca9eb46215692de00fa3", - "reference": "6a180d1c45e0d9797470ca9eb46215692de00fa3", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-30T19:17:29+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", - "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/service-contracts": "^1|^2|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "symfony/string", - "version": "v6.0.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", - "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.0" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.0.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:10+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "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.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "8.0 - 8.2" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} diff --git a/phpstan.neon b/phpstan.neon deleted file mode 100644 index 4814284..0000000 --- a/phpstan.neon +++ /dev/null @@ -1,14 +0,0 @@ -parameters: - level: 6 - bootstrapFiles: - - src/capro_bootstrap.php - scanFiles: - - capro - paths: - - src - # - tests - ignoreErrors: - # Ignore magic method `__get()` calls in PublicView class. - - '/^Access to an undefined property xy2z\\Capro\\PublicView::\$[a-zA-Z_]+\.$/' - # Ignore unused parameter $argv, because it's required by the CommandInterface. - - '/^Constructor of class xy2z\\Capro\\Commands\\Command[a-zA-z0-9_]+ has an unused parameter \$argv.$/' diff --git a/src/Capro.php b/src/Capro.php deleted file mode 100644 index 26e7751..0000000 --- a/src/Capro.php +++ /dev/null @@ -1,50 +0,0 @@ - $arguments - * - * @return mixed - */ - public static function __callStatic(string $name, array $arguments): mixed { - $views = self::$CommandBuild->get_views(); - - // Check if call matches "pages()". - if ($name === 'pages') { - $data_pages = []; - foreach ($views as $view) { - if ($view->get('type') === View::TYPE_PAGE) { - $data_pages[] = $view->get_public_view(); - } - } - return new Collector($data_pages); - } - - // Check if call matches the name of a collection. - $data = []; - foreach ($views as $view) { - if (strtolower($view->get('label')) === strtolower($name)) { - $data[] = $view->get_public_view(); - } - } - - if (empty($data)) { - // Possible error. Empty $data for method. Notice/warning. - self::$CommandBuild->add_error('Warning: No views found for collection "' . $name . '".'); - } - - // Return collector, even if $data is empty, so methods doesnt throw fatal errors. - return new Collector($data); - } -} diff --git a/src/Collector.php b/src/Collector.php deleted file mode 100644 index f9a436f..0000000 --- a/src/Collector.php +++ /dev/null @@ -1,208 +0,0 @@ - */ - protected array $original_data; - - /** @var array */ - protected array $data; - - /** @param array $data */ - public function __construct(array $data) { - $this->original_data = $data; - $this->data = $data; - } - - /** @return array */ - public function get(): array { - return $this->data; - } - - public function count(): int { - return count($this->data); - } - - public function first(): ?PublicView { - return $this->data[array_key_first($this->data)] ?? null; - } - - public function last(): ?PublicView { - return $this->data[array_key_last($this->data)] ?? null; - } - - public function limit(int $limit, int $offset = 0): self { - $this->data = array_slice($this->data, $offset, $limit); - return $this; - } - - public function reverse(): self { - $this->data = array_reverse($this->data); - return $this; - } - - public function reset(): self { - $this->data = $this->original_data; - return $this; - } - - public function where(string $where_key, mixed $where_val): self { - foreach ($this->data as $key => $view) { - if ($view->$where_key !== $where_val) { - // Remove from array. - unset($this->data[$key]); - } - } - return $this; - } - - public function whereNot(string $where_key, mixed $where_val): self { - foreach ($this->data as $key => $view) { - if ($view->$where_key === $where_val) { - // Remove from array. - unset($this->data[$key]); - } - } - return $this; - } - - public function whereBetween(string $where_key, float $min, float $max): self { - foreach ($this->data as $key => $view) { - if (is_null($view->$where_key ?? null) || ($view->$where_key < $min) || ($view->$where_key > $max)) { - // Remove from array. - unset($this->data[$key]); - } - } - return $this; - } - - public function whereNotBetween(string $where_key, float $min, float $max): self { - foreach ($this->data as $key => $view) { - if (($view->$where_key >= $min) && ($view->$where_key <= $max)) { - // Remove from array. - unset($this->data[$key]); - } - } - return $this; - } - - /** - * @param array $options - */ - public function whereIn(string $where_key, array $options): self { - foreach ($this->data as $key => $view) { - if (is_array($view->$where_key)) { - if (empty(array_intersect($view->$where_key, $options))) { - unset($this->data[$key]); - } - } elseif (!in_array($view->$where_key, $options)) { - // Remove from array. - unset($this->data[$key]); - } - } - return $this; - } - - /** - * @param array $options - */ - public function whereNotIn(string $where_key, array $options): self { - foreach ($this->data as $key => $view) { - if (is_array($view->$where_key)) { - if (!empty(array_intersect($view->$where_key, $options))) { - unset($this->data[$key]); - } - } elseif (in_array($view->$where_key, $options)) { - // Remove from array. - unset($this->data[$key]); - } - } - return $this; - } - - public function orderBy(string $sort_key, bool $case_insensitive = true): self { - usort($this->data, function ($a, $b) use ($sort_key, $case_insensitive) { - if ($case_insensitive) { - return strtolower($a->$sort_key) <=> strtolower($b->$sort_key); - } - return $a->$sort_key <=> $b->$sort_key; - }); - - return $this; - } - - public function orderByDesc(string $sort_key, bool $case_insensitive = true): self { - $this->orderBy($sort_key, $case_insensitive)->reverse(); - return $this; - } - - public function whereHas(string $key): self { - foreach ($this->data as $i => $view) { - if (is_null($view->$key ?? null)) { - // Remove from array. - unset($this->data[$i]); - } - } - return $this; - } - - public function whereHasNot(string $key): self { - foreach ($this->data as $i => $view) { - if (!is_null($view->$key ?? null)) { - // Remove from array. - unset($this->data[$i]); - } - } - return $this; - } - - // Exclude views - /** @param array $exclude_views */ - public function exclude(PublicView|array $exclude_views): self { - if (!is_array($exclude_views)) { - $exclude_views = [$exclude_views]; - } - - foreach ($exclude_views as $view) { - if (!$view instanceof PublicView) { - throw new \Exception('exclude() expects an array of PublicView objects.'); - } - } - - foreach ($this->data as $i => $view) { - if (in_array($view, $exclude_views)) { - unset($this->data[$i]); // Remove from array. - } - } - - return $this; - } - - public function shuffle(): self { - shuffle($this->data); - return $this; - } - - public function debug(): void { - $debug_data = []; - foreach ($this->data as $key => $view) { - $debug_data[$key] = [ - 'path' => $view->path, - 'relative_path' => $view->relative_path, - 'dir' => $view->dir, - 'basename' => $view->basename, - 'href' => $view->href, - 'view_data' => $view->get_all_view_data(), - ]; - } - - echo '
';
-		var_dump($debug_data);
-		echo '
'; - } -} diff --git a/src/Commands/CommandBuild.php b/src/Commands/CommandBuild.php deleted file mode 100644 index 2a746fb..0000000 --- a/src/Commands/CommandBuild.php +++ /dev/null @@ -1,260 +0,0 @@ - */ - private array $views; // views are ALL "pages" (pages, posts, collections, etc.) but NOT layouts etc... - - private int $count_view_build_success = 0; - - private int $count_view_build_errors = 0; - - /** @var array */ - protected array $tell_errors = []; - - public function __construct(array $argv) { - Capro::$CommandBuild = $this; - } - - public function run(): void { - // Validate before build. - validate_in_capro_dir(); - - // Validate dirs exists - if (!is_dir(CAPRO_VIEWS_DIR)) { - tell_error('Views dir not found: ' . CAPRO_VIEWS_DIR); - } - - // Start - // tell('Building site...'); - $this->rm_public_dir(); - $this->check_cache_dir(); - $this->copy_static_dir_to_public(); - - // Get information about pages and collections. - $this->load_views(); - - // Build pages and collections. - $this->build_views(); - - // Done building. - $this->finish(); - } - - private function rm_public_dir(): void { - // Remove all content in the public dir (to keep chmod and chown) - try { - rm_dir_content(CAPRO_PUBLIC_DIR); - } catch (\Exception $e) { - tell_error('Error: ' . $e->getMessage() . ' - is the file/dir open?'); - } - // tell('โœ” Cleared: public dir.'); - } - - private function check_cache_dir(): void { - // Make cache dir if not exists. - if (!is_dir(CAPRO_VIEWS_CACHE_DIR)) { - if (mkdir(CAPRO_VIEWS_CACHE_DIR, 0775, true)) { - tell('โœ” Created cache dir: ' . realpath(CAPRO_VIEWS_CACHE_DIR)); - } else { - tell_error('Error: Could not create cache dir: ' . CAPRO_VIEWS_CACHE_DIR); - } - return; - } - - // Deprecated below: Why remove the cache dir on every build? then why have a cache dir at all?... - // --------------- - // Remove all content in the cache dir. - /* - try { - rm_dir_content(CAPRO_VIEWS_CACHE_DIR); - } catch (\Exception $e) { - tell_error('Error: ' . $e->getMessage() . ' - is the file/dir open?'); - } - tell('โœ” Cleared: cache dir.'); - */ - // --------------- - } - - private function copy_static_dir_to_public(): void { - if (!is_dir(CAPRO_STATIC_DIR)) { - // tell('Notice: Static dir not found: ' . STATIC_DIR); // verbose. (but never for "capro new" commands) - return; - } - - rcopy(CAPRO_STATIC_DIR, CAPRO_PUBLIC_DIR); - // tell('โœ” Copied static content in to public directory.'); // verbose. - } - - private static function is_filename_ignored(string $filename): bool { - if (($filename === '.') || ($filename === '..')) { - return true; - } - - if (substr($filename, 0, 1) === '.') { - // Ignore filename starting with "." - return true; - } - - return false; - } - - private function load_views(): void { - // Load Pages (dont build) - $page_dir = CAPRO_VIEWS_DIR . DIRECTORY_SEPARATOR . 'pages'; // No trailing slashes! - foreach ($this->get_all_pages($page_dir) as $file) { - $view = new View( - path: $file->path, - type: View::TYPE_PAGE, - ); - - if ($view->is_build_disabled()) { - tell('Build disabled for: ' . $view->get('relative_path')); - continue; - } - - $this->views[strtolower($file->path)] = $view; - } - - // Load Collections (dont build) - $collections_dir = CAPRO_VIEWS_DIR . DIRECTORY_SEPARATOR . 'collections'; - foreach ($this->get_all_collections_views($collections_dir) as $file) { - $view = new View( - path: $file->path, - type: View::TYPE_COLLECTION, - label: $file->collection_dir - ); - - if ($view->is_build_disabled()) { - tell('Build disabled for: ' . $view->get('relative_path')); - continue; - } - - $this->views[strtolower($file->path)] = $view; - } - - // Load view templates. - $this->load_view_templates(); - } - - protected function get_all_pages(string $dir): Generator { - foreach (scandir($dir) as $item) { - if (self::is_filename_ignored($item)) { - continue; - } - - $fullpath = $dir . DIRECTORY_SEPARATOR . $item; - if (is_dir($fullpath)) { - yield from $this->get_all_pages($fullpath); - } else { - yield (object) [ - 'path' => $fullpath, - ]; - } - } - } - - protected function get_all_collections_views(string $dir): Generator { - if (!is_dir($dir)) { - return; - } - - foreach (scandir($dir) as $collection_dir) { - if (($collection_dir === '.') || ($collection_dir === '..')) { - continue; - } - - $fullpath = $dir . DIRECTORY_SEPARATOR . $collection_dir; - foreach ($this->get_all_pages($fullpath) as $file) { - $file->collection_dir = $collection_dir; - yield $file; - } - } - } - - /** - * Build and save each view from blade to html. - */ - protected function build_views(): void { - foreach ($this->views as $path => $view) { - if ($view->build()) { - // tell('โœ” Successfully build: ' . $view->get('relative_path')); - $this->count_view_build_success++; - } else { - tell('Warning: Could not build: ' . $view->get('relative_path')); - $this->count_view_build_errors++; - } - } - - // Delete temporary file build. - $tmp_path = CAPRO_VIEWS_DIR . '/__tmp.blade.php'; - @unlink($tmp_path); - } - - protected function load_view_templates(): void { - $templates = Config::get('core.templates', []); - if (!is_array($templates)) { - $this->add_error('Config core.templates is not an array.'); - return; - } - - foreach ($templates as $template) { - if (!$template instanceof ViewTemplate) { - $this->add_error('Template is not a ViewTemplate instance. See docs.'); - continue; - } - - foreach ($template->load_views() as $view) { - $this->views[strtolower($view->get('save_path'))] = $view; - } - } - } - - protected function finish(): void { - // Stop timer - if (CommandServe::$time_start_build > 0) { - // Timer was started by "serve", so it will reset for every build. - $build_time = number_format(microtime(true) - CommandServe::$time_start_build, 2); - } else { - $build_time = number_format(microtime(true) - CAPRO_START_TIME, 2); - } - - // Print success / errors. - // echo PHP_EOL; - if ($this->count_view_build_errors) { - if ($this->tell_errors) { - foreach ($this->tell_errors as $msg) { - tell($msg); - } - // echo PHP_EOL; - } - tell('โŒ Done with ' . $this->count_view_build_errors . ' errors. (in ' . $build_time . ' seconds)'); - } else { - tell('โœ” Done in ' . $build_time . ' seconds. ' . $this->count_view_build_success . ' views build.'); - } - } - - /** @return array */ - public function get_views(): array { - return $this->views; - } - - public function add_error(string $message): void { - $this->count_view_build_errors++; - $this->tell_errors[] = $message; - } -} diff --git a/src/Commands/CommandConfig.php b/src/Commands/CommandConfig.php deleted file mode 100644 index 410b693..0000000 --- a/src/Commands/CommandConfig.php +++ /dev/null @@ -1,52 +0,0 @@ - */ - protected array $argv; - protected bool $var_dump = false; - - /** @param array $argv */ - public function __construct(array $argv) { - $this->argv = $argv; - $this->var_dump = (in_array('-d', $argv) || in_array('--dump', $argv)); - } - - /** - * Run the command. - */ - public function run(): void { - if ($this->var_dump) { - var_dump($this->get_result()); - } else { - dump($this->get_result()); - } - } - - /** - * Return either ALL config values, or the one's specificed in arguments. - * Eg `capro config app.title app.email core` should output all 3 variables. - */ - private function get_result(): mixed { - $result = []; - foreach (array_slice($this->argv, 2) as $arg) { - // Return the first argument that isn't a flag/option. - if (isset($arg) && (substr($arg, 0, 1) !== '-')) { - $result[$arg] = Config::get($arg); - } - } - if ($result) { - return $result; - } - - // No arguments passed, so we return all config variables. - return Config::all(); - } -} diff --git a/src/Commands/CommandInterface.php b/src/Commands/CommandInterface.php deleted file mode 100644 index 3707fa7..0000000 --- a/src/Commands/CommandInterface.php +++ /dev/null @@ -1,14 +0,0 @@ - $argv - */ - public function __construct(array $argv); - - public function run(): void; -} diff --git a/src/Commands/CommandNewSite.php b/src/Commands/CommandNewSite.php deleted file mode 100644 index f7452e7..0000000 --- a/src/Commands/CommandNewSite.php +++ /dev/null @@ -1,53 +0,0 @@ - $argv */ - public function __construct(array $argv) { - if (!isset($argv[2])) { - tell('Error: Need a sitename. "capro new [sitename]'); - exit; - } - - $this->site_name = $argv[2]; - } - - public function run(): void { - // Create new capro site using stubs, setup git and composer, etc. - // Make sure to have as much as possible in the "stubs" dir - and only run commands here. - - tell('Creating new site: ' . $this->site_name); - - if (is_dir($this->site_name)) { - // Directory exists. - tell('Error: The directory "' . $this->site_name . '" already exists.'); - if (!confirm('The directory already exists, are you sure you want to possibly overwrite files? [Y to continue]')) { - exit; - } - } else { - mkdir($this->site_name); - } - - rcopy(__DIR__ . '/../../stubs/new-site/', $this->site_name); - chdir($this->site_name); - passthru('composer install'); - echo PHP_EOL; - - // Bulild the new site. - ob_start(); - passthru('php vendor/bin/capro build'); - ob_get_clean(); - - $time = number_format(microtime(true) - CAPRO_START_TIME, 2); - tell('โœ” Done in ' . $time . ' seconds. Your new site has been setup and build!'); - tell('Run `php -S localhost:8000` in the ' . $this->site_name . '/public directory to see your site.'); - } -} diff --git a/src/Commands/CommandServe.php b/src/Commands/CommandServe.php deleted file mode 100644 index c870c95..0000000 --- a/src/Commands/CommandServe.php +++ /dev/null @@ -1,128 +0,0 @@ - */ - protected array $argv; - protected Server $server; - protected bool $quiet = false; - public static float $time_start_build = 0; - private FileWatcher $FileWatcher; - private string $host; - private string $port; - - /** @param array $argv */ - public function __construct(array $argv) { - $this->argv = $argv; - $this->host = config('core.serve_host', '127.0.0.1'); - $this->port = config('core.serve_port', '82'); - - // Quiet mode? - if (in_array('-q', $this->argv) || in_array('--quiet', $this->argv)) { - $this->quiet = true; - } - } - - /** - * Run the "serve" command. - */ - public function run(): void { - validate_in_capro_dir(); - - if ($this->is_port_busy()) { - tell('Error: Port ' . $this->port . ' is busy.'); - return; - } - - $this->start_server(); - - // Prepare file watcher, to watch for any changes. - $this->FileWatcher = new FileWatcher([ - // Watch dirs - CAPRO_VIEWS_DIR, - CAPRO_STATIC_DIR, - CAPRO_CONFIG_DIR, - ], [ - // Exclude paths - CAPRO_VIEWS_CACHE_DIR, - ]); - - while ($this->server->isRunning()) { - // Keep cli running... - - if ($this->FileWatcher->is_changed()) { - // Changes detected. Start building. - usleep(100_000); - $this->rebuild(); - } - - usleep(500_000); - } - } - - /** - * Start the development server - */ - private function start_server(): void { - $this->server = Server::new() - ->host($this->host) - ->port($this->port) - ->root(CAPRO_PUBLIC_DIR); - - if (file_exists(CAPRO_SITE_ROOT_DIR . '/.env')) { - $this->server->withEnvFile(CAPRO_SITE_ROOT_DIR . '/.env'); - } - - $this->server->runInBackground(); - if (!$this->quiet) { - tell('Capro development server started at ' . $this->server->getAddress()); - } - } - - /** - * Check if port is busy (already in use) - * - * @return bool - */ - private function is_port_busy(): bool { - $connection = @fsockopen($this->host, intval($this->port), $error_code, $error_message, 0.2); - - if (is_resource($connection)) { - // Port is busy. - fclose($connection); - return true; - } - - return false; - } - - /** - * Rebuild the site (triggered on file event) - */ - private function rebuild(): void { - // Restart build timer. - static::$time_start_build = microtime(true); - - // Reload config variables. - Config::reload(); - - // Build (quietly) - ob_start(); - (new CommandBuild([]))->run(); - $out = ob_get_clean(); - - if (!$this->quiet && $out) { - echo $out; - } - } -} diff --git a/src/Config.php b/src/Config.php deleted file mode 100644 index 41f4eac..0000000 --- a/src/Config.php +++ /dev/null @@ -1,29 +0,0 @@ - */ - private array $directories; - - /** @var array */ - private array $files; - - /** @var array */ - private array $exclude_paths; - - private int $files_checked = 0; - - /** - * Constructor - * - * @param array $directories - * @param array $exclude_paths - */ - public function __construct(array $directories, array $exclude_paths = []) { - $this->directories = $directories; - - // Make sure all excluded paths are using realpath to avoid forward/backward slashes issues. - foreach ($exclude_paths as $key => $path) { - $this->exclude_paths[realpath($path)] = 1; - } - } - - /** - * Check if any files in the directories are changed since last call. - */ - public function is_changed(): bool { - // Has any file been added, modified or deleted since last check? - $this->files_checked = 0; // reset. - $this->changes = false; - - foreach ($this->directories as $directory) { - if (!is_dir($directory)) { - continue; - } - - $this->scandir($directory); - } - - if ($this->changes) { - // skip checking for deleted files, for faster response. - return true; - } - - // Check if any files from last scan was deleted. - foreach ($this->files as $file => $details) { - if (!file_exists($file)) { - $this->changes = true; - unset($this->files[$file]); - } - } - - return $this->changes; - } - - /** - * Scan directories recursively if any files was added or modified since last check. - */ - private function scandir(string $directory): void { - if ($this->is_excluded($directory)) { - return; - } - - foreach (scandir($directory) as $item) { - if ($item === '.' || $item === '..') { - continue; - } - - $item_full_path = $directory . DIRECTORY_SEPARATOR . $item; - - if (is_dir($item_full_path)) { - $this->scandir($item_full_path); - } else { - $this->check_file($item_full_path); - } - } - } - - private function is_excluded(string $path): bool { - return (isset($this->exclude_paths[$path])); - } - - /** - * Check if file is new or modified since last check. - */ - private function check_file(string $file): void { - if ($this->is_excluded($file)) { - return; - } - - $this->files_checked++; - if (!isset($this->files[$file])) { - // New file. Add to array for next check. - $this->changes = true; - $this->add_update_file($file); - return; - } - - // Was file modified? - if ($this->files[$file]->modified !== filemtime($file)) { - // File was modified (or at least the modified timestamp was). - $this->add_update_file($file); - $this->changes = true; - return; - } - } - - /** - * Add new file to the $files array, so it will can checked next time. - */ - private function add_update_file(string $file): void { - $this->files[$file] = (object) [ - 'modified' => filemtime($file), - ]; - } - - /** - * Get all scanned files. - * - * @return array - */ - public function get_scanned_files(): array { - return $this->files; - } -} diff --git a/src/PublicView.php b/src/PublicView.php deleted file mode 100644 index 0a3ff72..0000000 --- a/src/PublicView.php +++ /dev/null @@ -1,47 +0,0 @@ -first(); - * Get the post title: `$post->title` (will get the "title" variable from the post's yaml-front-matter) - */ -class PublicView { - protected View $view; - - public function __construct(View $view) { - $this->view = $view; - } - - public function __get(string $name): mixed { - return $this->view->get($name); - } - - public function get(string $name): mixed { - return $this->view->get($name); - } - - public function get_all_view_data(): mixed { - return $this->view->get_view_data(); - } - - public function is_page(): bool { - return $this->view->get('type') === View::TYPE_PAGE; - } - - public function is_collection(string $label = ''): bool { - return (($this->view->get('type') === View::TYPE_COLLECTION) && (empty($label) || $this->view->get('label') === $label)); - } - - public function is_template(): bool { - return $this->view->get('type') === View::TYPE_TEMPLATE; - } -} diff --git a/src/View.php b/src/View.php deleted file mode 100644 index 7cd5a70..0000000 --- a/src/View.php +++ /dev/null @@ -1,234 +0,0 @@ - - */ - protected array $view_data = []; - - protected static Blade $blade; - - /** - * Construct a new view (page or collection item) - */ - public function __construct(string $path, int $type, string $label = '', string $save_path = '') { - $this->path = $path; - $this->type = $type; - $this->dir = dirname($this->path); - if (!empty($save_path)) { - $this->save_path = $save_path; - } - - $this->label = $label; // "collection" label. - $this->basename = str_replace('.blade.php', '', basename($this->path)); - $this->relative_path = str_replace(CAPRO_SITE_ROOT_DIR, '', $this->path); - - $file_content = @file_get_contents($this->path) ?: ''; - - if ($file_content) { - // Replace YAML placeholders (variables). - // Only do replacement on the yaml section. - $first = strpos($file_content, '---' . PHP_EOL); - $find_yaml_end_string = PHP_EOL . '---' . PHP_EOL; - $second = strpos($file_content, $find_yaml_end_string, $first + 3); - if (($first !== false) && ($second !== false)) { - $yaml_section = substr($file_content, 0, $second + strlen($find_yaml_end_string)); - $yaml_section = replace_yaml_placeholders($yaml_section); - - // Merge file-content back together with the replaced yaml section. - $blade_section = substr($file_content, $second + strlen($find_yaml_end_string)); - $file_content = $yaml_section . $blade_section; - } - } - - try { - $this->yaml_front_matter = YamlFrontMatter::parse($file_content); - } catch (Throwable $e) { - tell('Error: Invalid yaml in ' . $this->relative_path . '. ' . $e->getMessage()); - exit; - } - - // Set save_path - $this->set_save_path(); - } - - private function set_save_path(): void { - if ($this->type === self::TYPE_TEMPLATE) { - return; - } - - if ($this->type === self::TYPE_PAGE) { - $relative_dir = str_replace(CAPRO_VIEWS_DIR . DIRECTORY_SEPARATOR . 'pages', '', $this->dir); - } elseif ($this->type === self::TYPE_COLLECTION) { - $relative_dir = str_replace(CAPRO_VIEWS_DIR . DIRECTORY_SEPARATOR . 'collections', '', $this->dir); - } else { - throw new Exception('Unknown View type.'); - } - - if (!empty($this->get_view_data('core.save_as'))) { - $save_as = $this->get_view_data('core.save_as'); - $this->href = str_replace('\\', '/', $relative_dir) . '/' . $save_as; - $this->save_path = CAPRO_PUBLIC_DIR . $relative_dir . DIRECTORY_SEPARATOR . $save_as; - return; - } - - if (($this->basename == 'index') && empty($relative_dir)) { - // Root index.html - $this->href = '/'; - $this->save_path = CAPRO_PUBLIC_DIR . DIRECTORY_SEPARATOR . 'index.html'; - } else { - if ($this->basename == 'index') { - // Place the file as index.html - $this->href = str_replace('\\', '/', $relative_dir) . '/'; - $this->save_path = CAPRO_PUBLIC_DIR . $relative_dir . DIRECTORY_SEPARATOR . 'index.html'; - } else { - // Not "index" file, so make a dir for the basename. - $this->href = str_replace('\\', '/', $relative_dir) . '/' . $this->basename . '/'; - $this->save_path = CAPRO_PUBLIC_DIR . $relative_dir . DIRECTORY_SEPARATOR . $this->basename . DIRECTORY_SEPARATOR . 'index.html'; - } - } - } - - /** @param array $data */ - public function set_view_data(array $data): void { - $this->view_data = $data; - } - - public function set_href(string $href): void { - $this->href = $href; - } - - public function get_view_data(mixed $key = null): mixed { - $data = array_merge($this->view_data, $this->yaml_front_matter->matter(), [ - 'self' => $this->get_public_view(), - ]); - - if (isset($key)) { - // Return only the specific key. - return $data[$key] ?? null; - } - - // Return all data. - return $data; - } - - /** - * Get property, or if not set: get the yaml-front-matter value if exists. - */ - public function get(string $param): mixed { - if (isset($this->$param)) { - return $this->$param; - } else { - // Try look in the yaml_front_matter. - return $this->get_view_data($param); - } - } - - public function build(): bool { - // Prepare blade. - self::load_blade(); - - // Make directory for the file in the PUBLIC dir, since it will always be saved as 'index.html'. - $save_path_dir = dirname($this->save_path); - if (!is_dir($save_path_dir)) { - mkdir($save_path_dir, 0775, true); - } - - // Save the file without the yaml-front-matter in a temp location. - // This is needed because Blade cannot make from a string, it needs to be an actual file. - // TODO: Refactor when possible. - $saved = file_put_contents(CAPRO_VIEWS_DIR . '/__tmp.blade.php', $this->yaml_front_matter->body()); - - if ($saved === false) { - throw new Exception('Could not build view.'); // TODO: If this is in CommandServe, just retry in a few microseconds... - } - - // Build (make view) - $build_content = null; - try { - $make = self::$blade->make('__tmp', $this->get_view_data()); - $build_content = $make->render(); // Do this here so it can throw exceptions. - } catch (Throwable $e) { - tell_error('Error in ' . $this->relative_path . ': ' . $e->getMessage()); - } - - if (is_null($build_content)) { - // Error. - return false; - } - - // Save file - return $this->save_build_file($build_content); - } - - protected static function load_blade(): void { - if (isset(self::$blade)) { - // Blade is already loaded. - return; - } - - self::$blade = new Blade(CAPRO_VIEWS_DIR, CAPRO_VIEWS_CACHE_DIR); - class_alias('xy2z\\Capro\\Config', 'Config'); - - self::$blade->directive('markdown', function () { - return ''; - }); - - self::$blade->directive('endmarkdown', function () { - // See https://commonmark.thephpleague.com/2.0/configuration/ - return ' "allow", // To allow "
" tags, etc. - "allow_unsafe_links" => false, - ]); - echo $converter->convertToHtml(ob_get_clean()); - ?>'; - }); - } - - protected function save_build_file(string $build_content): bool { - $saved = @file_put_contents($this->save_path, $build_content); - - // file_put_contents() may return a non-Boolean value which evaluates to false. - return ($saved === false) ? false : true; - } - - public function get_public_view(): PublicView { - // Get the Public View object of this class, to be used in frontend (Blade) code. - // to only allow specific methods and properties to be public. - return new PublicView($this); - } - - public function is_build_disabled(): bool { - // Check if "core.disable_build" is set in the view. - return (bool) ($this->get_view_data('core.disable_build')); - } -} diff --git a/src/ViewTemplate.php b/src/ViewTemplate.php deleted file mode 100644 index 05d6b04..0000000 --- a/src/ViewTemplate.php +++ /dev/null @@ -1,74 +0,0 @@ - */ - protected array $items; - - /** @param array $items */ - public function __construct(string $label, string $template_view, string $result_path, array $items) { - $this->label = $label; - $this->template_view = $template_view; - $this->result_path = $result_path; - $this->items = $items; - } - - /** @param array $item */ - protected function get_item_path(array $item): string { - // Replace slugs in result_path with variables from the item array. - // Eg. if the result_path is "news/{slug}" - "{slug}" will be replaced by the "slug" value in the item array. - // so the result will be"news/my-first-post". - $path = $this->result_path; - foreach ($item as $key => $value) { - if (!is_string($value) && !is_float($value) && !is_integer($value)) { - continue; - } - $path = str_replace('{' . $key . '}', strval($value), $path); - } - return $path; - } - - /** @param array $item */ - protected function get_public_path(array $item): string { - $path = $this->get_item_path($item); - return CAPRO_PUBLIC_DIR . DIRECTORY_SEPARATOR . $path . DIRECTORY_SEPARATOR . 'index.html'; - } - - public function load_views(): Generator { - $this->template_view_path = CAPRO_VIEWS_DIR . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . $this->template_view . '.blade.php'; - - if (!file_exists($this->template_view_path)) { - tell_error('Error: Template view not found: ' . $this->template_view_path); - } - - // Make a View for each row in $items. - foreach ($this->items as $item) { - $view = new View( - path: $this->template_view_path, - type: View::TYPE_TEMPLATE, - label: $this->label, - save_path: $this->get_public_path($item), - ); - $view->set_view_data($item); - - $href = $this->get_item_path($item); - $view->set_href($href); - - yield $view; - } - } -} diff --git a/src/capro_bootstrap.php b/src/capro_bootstrap.php deleted file mode 100644 index d6e4aba..0000000 --- a/src/capro_bootstrap.php +++ /dev/null @@ -1,93 +0,0 @@ - nul'); - } elseif (PHP_OS_FAMILY === 'Linux') { - // Linux - $composer_home = shell_exec('composer config --global home 2> /dev/null'); - } else { - // Other...? - $composer_home = shell_exec('composer config --global home'); - } - - if (!is_null($composer_home)) { - // The command did not fail. - if ($dir === realpath($composer_home . '/vendor/xy2z/capro')) { - touch($dir . $is_global_filename); // cache it for next time. - return true; - } - - // If it's not global then it must be a project directory. - touch($dir . $not_global_filename); // cache it for next time. - return false; - } - - // If we made it here it's most likely because "composer" isn't installed in PATH, - // which probably means composer's global bin directory isn't installed in PATH either, - // so we assume the user is in a project directory. But we won't cache it for now. - return false; -} - -// Check if we should passthru to another capro binary. -// This should do the following: -// If running just "capro" (the global composer package) it should call the local project "vendor/bin/capro" if it -// exists, as a shortcut. - -// But - if you are in a project-A and run `path/to/project-B/vendor/bin/capro` it should NOT passthru to the -// project-A capro file. - -// And if you already are in a project with vendor/bin/capro it should not go in endless loop and call itself. -if (file_exists(getcwd() . '/vendor/bin/capro')) { - // If these 2 are equal, we should not call anymore, or else it will be an endless loop. - $project_bin_path = realpath(__DIR__ . '/../../bin/capro'); - $dir_bin_path = realpath(getcwd() . '/vendor/bin/capro'); - if ($project_bin_path === $dir_bin_path) { - // Always continue. NEVER call any other script, or else it will loop endlessly. - } elseif (is_global_bin(__DIR__)) { - // Only pass if this is the global binary, or else it would not be possible to call other projects binary files - // if you are in Project-A and call `path/to/project-B/vendor/bin/capro` it would still pass it back to the - // Project-A - and we do not want that. - passthru(getcwd() . '/vendor/bin/capro ' . implode(' ', array_slice($argv, 1))); - exit; - } -} diff --git a/src/helpers.php b/src/helpers.php deleted file mode 100644 index 38dbe5e..0000000 --- a/src/helpers.php +++ /dev/null @@ -1,151 +0,0 @@ - $yes - * - * @return bool - */ -function confirm(string $question, array $yes = ['y', 'yes']): bool { - tell('โš  ' . $question); - $stdin = fopen('php://stdin', 'r'); - $line = strtolower(trim(fgets($stdin))); - fclose($stdin); - - if (in_array($line, $yes)) { - return true; - } - - return false; -} - -/** - * config() - * A shorthand for writing Config::get($key), can be used in view files. - * - * @param string $key - * @param mixed $default - * - * @return mixed - */ -function config(string $key, mixed $default = null): mixed { - return Config::get($key, $default); -} - -/** - * Validate cwd (current working dir) is a capro project directory. Exists if not. - * @return void - */ -function validate_in_capro_dir(): void { - // Validate that the current working dir (cwd) is a capro project directory. - if (!file_exists(getcwd() . '/composer.json') && !file_exists(getcwd() . '/vendor/bin/capro')) { - tell('Sorry, it doesnt look like you are in a capro directory...'); - exit; - } -} - -/** - * Replace YAML placeholders (variables) - * Will replace all `${{ ... }}` with the evaluated result of the php code inside. - * Can be used for config(), env(), php functions, etc. - * Examples: - * core.disable_build: ${{ env('IS_PRODUCTION') }} - * data: ${{ json_decode(config('app.data')) }} - */ -function replace_yaml_placeholders(string $str): string { - $finder_pos = 0; - - while ($start = strpos($str, '${{', $finder_pos)) { - $end = strpos($str, '}}', $start); - // $finder_pos = $end; // this won't work because the $end pos will not be correct after str replace! - $finder_pos = $start + 1; - - $str_to_replace = substr($str, $start, $end - $start + 2); - $code = substr($str_to_replace, 3, -2); - $eval = eval('return ' . $code . ';'); - - // It has to be returned as a yaml string. - if (is_array($eval)) { - tell_error('Arrays are not supported for YAML placeholders yet. Please use json_encode() if needed.'); - continue; - } - - if (is_object($eval)) { - tell_error('Objects are not supported for YAML placeholders yet. Please use json_encode() if needed.'); - continue; - } - - $str = str_replace($str_to_replace, Yaml::dump($eval), $str); - } - - return $str; -} diff --git a/stubs/new-site/.gitignore b/stubs/new-site/.gitignore deleted file mode 100644 index 16d4dec..0000000 --- a/stubs/new-site/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# capro .gitignore file (autogenerated) -/vendor/ -/views/__tmp*.blade.php -/views/cache/ -/cache/ -/public/ -.capro-cache* - -node_modules/ -npm-debug.log -yarn-error.log - -/.vscode -/.vagrant -.env -.phpunit.result.cache -.php-cs-fixer.cache diff --git a/stubs/new-site/README.md b/stubs/new-site/README.md deleted file mode 100644 index 28fb33d..0000000 --- a/stubs/new-site/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Capro Site - -This is a static [Capro](https://github.com/xy2z/capro) site! This file is auto generated, feel free to edit this as you please. - -## Build - -Run `vendor/bin/capro build` to build your site. Or if you have capro installed globally, you can just run `capro build`. - - diff --git a/stubs/new-site/composer.json b/stubs/new-site/composer.json deleted file mode 100644 index 32d91f5..0000000 --- a/stubs/new-site/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "xy2z/capro": "1.*@alpha" - } -} diff --git a/stubs/new-site/config/app.yml b/stubs/new-site/config/app.yml deleted file mode 100644 index a8abfe9..0000000 --- a/stubs/new-site/config/app.yml +++ /dev/null @@ -1,9 +0,0 @@ -title: Capro -headline: Welcome to your new static Capro site ๐Ÿ˜Ž - -links: - Documentation: 'https://capro.xy2z.io' - Community: https://github.com/xy2z/capro/discussions - GitHub: https://github.com/xy2z/capro - Issues: https://github.com/xy2z/capro/issues - Releases: https://github.com/xy2z/capro/releases diff --git a/stubs/new-site/views/pages/index.blade.php b/stubs/new-site/views/pages/index.blade.php deleted file mode 100644 index 0791c2b..0000000 --- a/stubs/new-site/views/pages/index.blade.php +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - {{ config('app.title') }} - - - - - -
-

{{ config('app.headline') }}

- - - - - diff --git a/tests/CollectorTest.php b/tests/CollectorTest.php deleted file mode 100644 index 73a4d52..0000000 --- a/tests/CollectorTest.php +++ /dev/null @@ -1,561 +0,0 @@ -assertSame(count(self::getArray()), $c->count()); - } - - public function test_first(): void { - //Compare that "first" method returns first element of data used in creating the Collector - $c = new Collector(self::getArray()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - } - - public function test_last(): void { - //Compare that "last" method returns last element of data used in creating the Collector - $c = new Collector(self::getArray()); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - } - - public function test_limit(): void { - $c = new Collector(self::getArray()); - - //Pick first two elements - $c->limit(2, 0); - $this->assertSame(2, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('second', $c->last()->get('path')); - - //Pick last two elements - $c = new Collector(self::getArray()); - $c->limit(2, 4); - $this->assertSame(2, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('fifth', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - - //Check that empty data is returned when "limit" overflows - $c = new Collector(self::getArray()); - $c->limit(0, 10); - $this->assertSame(0, $c->count()); - - //Check that "limit" method call chaining works properly - $c = new Collector(self::getArray()); - $c->limit(4); - $c->limit(2, 2); - $this->assertSame(2, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('third', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - } - - public function test_reverse(): void { - $c = new Collector(self::getArray()); - - //Check that "reverse" method call works properly - $c->reverse(); - $this->assertSame(count(self::getArray()), $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('sixth', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('first', $c->last()->get('path')); - - //Check that "reverse" method call chaining works properly - $c->reverse(); - $this->assertSame(count(self::getArray()), $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - } - - public function test_reset(): void { - $c = new Collector(self::getArray()); - $c->limit(2, 4); - - $this->assertSame(2, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('fifth', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - - $c->reset(); - $this->assertSame(count(self::getArray()), $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - } - - public function test_where(): void { - //Test when "where" gets single match - $c = new Collector(self::getArray()); - $c->where('path', 'first'); - - $this->assertSame(1, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - //Test when "where" gets no data - $c = new Collector(self::getArray()); - $c->where('path', 'non-existent-data'); - - $this->assertSame(0, $c->count()); - - //Test when "where" gets multiple matches - $c = new Collector(self::getArrayWithDuplicates()); - $c->where('path', 'x'); - - $this->assertSame(2, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('x', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('x', $c->last()->get('path')); - } - - public function test_where_not(): void { - //Test when "whereNot" removes one entry - $c = new Collector(self::getArray()); - $c->whereNot('path', 'first'); - - $this->assertSame(5, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - - //Test when "where" removes nothing - $c = new Collector(self::getArray()); - $c->whereNot('path', 'non-existent-data'); - - $this->assertSame(6, $c->count()); - - //Test when "whereNot" removes more than one match - $c = new Collector(self::getArrayWithDuplicates()); - $c->whereNot('path', 'x'); - - $this->assertSame(2, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('y', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('z', $c->last()->get('path')); - } - - public function test_where_between(): void { - //Test when "whereBetween" gets single match - $c = new Collector(self::getArray()); - $c->whereBetween('type', 1, 1); - - $this->assertSame(1, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('fifth', $c->first()->get('path')); - - //Test when "whereBetween" gets no data - $c = new Collector(self::getArray()); - $c->whereBetween('type', 4, 10); - - $this->assertSame(0, $c->count()); - - //Test when "whereBetween" gets multiple match - $c = new Collector(self::getArray()); - $c->whereBetween('type', 0, 0); - - $this->assertSame(4, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - } - - public function test_where_not_between(): void { - //Test when "whereNotBetween" gets single match - $c = new Collector(self::getArray()); - $c->whereNotBetween('type', -0.1, 1.9); - - $this->assertSame(1, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('sixth', $c->first()->get('path')); - - //Test when "whereNotBetween" gets no data - $c = new Collector(self::getArray()); - $c->whereNotBetween('type', 0, 4); - - $this->assertSame(0, $c->count()); - - //Test when "whereNotBetween" gets multiple match - $c = new Collector(self::getArray()); - $c->whereNotBetween('type', 1, 3); - - $this->assertSame(4, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - } - - public function test_where_in(): void { - //Test when "whereIn" gets single match - $c = new Collector(self::getArray()); - $c->whereIn('path', ['third']); - - $this->assertSame(1, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('third', $c->first()->get('path')); - - //Test when "WhereIn" gets no data - $c = new Collector(self::getArray()); - $c->whereIn('path', ['non-existent-data1', 'non-existent-data-2']); - - $this->assertSame(0, $c->count()); - - //Test when "WhereIn" gets multiple match - $c = new Collector(self::getArray()); - $c->whereIn('path', ['second', 'third', 'fourth']); - - $this->assertSame(3, $c->count()); - - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - - //Test when "WhereIn" gets single match with duplicate in options - $c = new Collector(self::getArray()); - $c->whereIn('path', ['first', 'first']); - - $this->assertSame(1, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('first', $c->first()->get('path')); - - //Test when "WhereIn" gets multiple matches with duplicate in options - $c = new Collector(self::getArray()); - $c->whereIn('path', ['second', 'third', 'third', 'fourth']); - - $this->assertSame(3, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - } - - public function test_where_not_in(): void { - //Test when "whereNotIn" gets single match - $c = new Collector(self::getArray()); - $c->whereNotIn('path', ['first', 'second', 'fourth', 'fifth', 'sixth']); - - $this->assertSame(1, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('third', $c->first()->get('path')); - - //Test when "WhereNotIn" gets no data - $c = new Collector(self::getArray()); - $c->whereNotIn('path', ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']); - - $this->assertSame(0, $c->count()); - - //Test when "WhereNotIn" gets multiple match - $c = new Collector(self::getArray()); - $c->whereNotIn('path', ['first', 'third', 'fifth', 'sixth']); - - $this->assertSame(2, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - - //Test when "WhereNotIn" gets single match with duplicate in options - $c = new Collector(self::getArray()); - $c->whereNotIn('path', ['first', 'first', 'second', 'fourth', 'fifth', 'sixth']); - - $this->assertSame(1, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('third', $c->first()->get('path')); - - //Test when "WhereNotIn" gets multiple matches with duplicate in options - $c = new Collector(self::getArray()); - $c->whereNotIn('path', ['first', 'first', 'third', 'fifth', 'sixth']); - - $this->assertSame(2, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fourth', $c->last()->get('path')); - } - - public function test_order_by(): void { - //Test "OrderBy" string case-insensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderBy('path', false); - - $this->assertSame(5, $c->count()); - $expectedSortedPaths = ['!', 'A', 'C', 'a', 'b']; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedPaths[$key], $value->get('path')); - } - - //Test "OrderBy" string case-sensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderBy('path', true); - - $this->assertSame(5, $c->count()); - $expectedSortedPaths = ['!', 'a', 'A', 'b', 'C']; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedPaths[$key], $value->get('path')); - } - - //Test "OrderBy" integer case-insensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderBy('type', false); - - $this->assertSame(5, $c->count()); - $expectedSortedTypes = [0, 0, 1, 2, 2]; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedTypes[$key], $value->get('type')); - } - - //Test "OrderBy" integer case-sensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderBy('type', true); - - $this->assertSame(5, $c->count()); - $expectedSortedTypes = [0, 0, 1, 2, 2]; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedTypes[$key], $value->get('type')); - } - } - - public function test_order_by_desc(): void { - //Test "OrderByDesc" string case-insensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderByDesc('path', false); - - $this->assertSame(5, $c->count()); - $expectedSortedPaths = ['b', 'a', 'C', 'A', '!']; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedPaths[$key], $value->get('path')); - } - - //Test "OrderByDesc" string case-sensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderByDesc('path', true); - - $this->assertSame(5, $c->count()); - $expectedSortedPaths = ['C', 'b', 'A', 'a', '!']; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedPaths[$key], $value->get('path')); - } - - //Test "OrderByDesc" integer case-insensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderByDesc('type', false); - - $this->assertSame(5, $c->count()); - $expectedSortedTypes = [2, 2, 1, 0, 0]; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedTypes[$key], $value->get('type')); - } - - //Test "OrderByDesc" integer case-sensitive - $c = new Collector(self::getNotOrderedArray()); - $c->orderByDesc('type', true); - - $this->assertSame(5, $c->count()); - $expectedSortedTypes = [2, 2, 1, 0, 0]; - - foreach ($c->get() as $key => $value) { - $this->assertInstanceOf(PublicView::class, $value); - $this->assertSame($expectedSortedTypes[$key], $value->get('type')); - } - } - - public function test_where_has(): void { - //Test "WhereHas" returns data - $c = new Collector(self::getArray()); - $c->whereHas('path'); - $this->assertSame(6, $c->count()); - - //Test "WhereHas" returns no data - $c = new Collector(self::getArray()); - $c->whereHas('non-existent-key'); - $this->assertSame(0, $c->count()); - } - - public function test_where_has_not(): void { - //Test "WhereHasNot" returns data - $c = new Collector(self::getArray()); - $c->whereHasNot('non-existent-key'); - $this->assertSame(6, $c->count()); - - //Test "WhereHasNot" returns no data - $c = new Collector(self::getArray()); - $c->whereHasNot('path'); - $this->assertSame(0, $c->count()); - } - - public function test_exclude(): void { - //Test "Exclude" called with object other than PublicView - $c = new Collector(self::getArray()); - try { - $c->exclude([1, 2]); - } catch (\Exception $e) { - $this->assertSame(\Exception::class, get_class($e)); - $this->assertSame('exclude() expects an array of PublicView objects.', $e->getMessage()); - } - - //Test "Exclude" called with one entry removes single entry - $c = new Collector(self::getArray()); - $c->exclude($c->first()); - $this->assertSame(5, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('sixth', $c->last()->get('path')); - - //Test "Exclude" called with one entry removes multiple entries - $c = new Collector(self::getArrayWithDuplicates()); - $c->exclude($c->first()); - $this->assertSame(2, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('y', $c->first()->get('path')); - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('z', $c->last()->get('path')); - - //Test "Exclude" called with multiple entries removes multiple entries - $c = new Collector(self::getArray()); - $c->exclude([ - $c->first(), - $c->last(), - ]); - $this->assertSame(4, $c->count()); - $this->assertInstanceOf(PublicView::class, $c->first()); - $this->assertSame('second', $c->first()->get('path')); - $this->assertInstanceOf(PublicView::class, $c->last()); - $this->assertSame('fifth', $c->last()->get('path')); - - //Test "Exclude" called with multiple entries removes no entries - $c = new Collector(self::getArray()); - $c->exclude([ - new PublicView(new View('non-existent-path-1', View::TYPE_PAGE, 'first_label')), - new PublicView(new View('non-existent-path-2', View::TYPE_TEMPLATE)), - ]); - $this->assertSame(6, $c->count()); - - //Test "Exclude" called with multiple entries removes all entries - $c = new Collector(self::getArray()); - $c->exclude(self::getArray()); - $this->assertSame(0, $c->count()); - } - - public function test_shuffle(): void { - $c = new Collector(self::getArray()); - $c->shuffle(); - - //Due to randomness of shuffle, we cannot test if array was really randomized, - // we can only test if we still have all elements in array - $this->assertSame(6, $c->count()); - } -}